Skip to content

Commit 8a0849f

Browse files
committed
[BUG] Refactor left_right_codes propagation in dual contouring pipeline
Streamlined handling of `left_right_codes` across functions and classes, updating method signatures and data structures for consistency. Removed unused `left_right_codes` parameters in parallel processing functions and restructured relevant logic to improve maintainability.
1 parent 782735b commit 8a0849f

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

gempy_engine/API/dual_contouring/multi_scalar_dual_contouring.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def dual_contouring_multi_scalar(
125125
else octree_leaves.grid_centers.octree_grid.values[mask]
126126
),
127127
dxdydz=octree_leaves.grid_centers.octree_dxdydz,
128+
left_right_codes=all_left_right_codes[n_scalar_field],
128129
gradients=output_on_edges[n_scalar_field][slice_object],
129130
n_surfaces_to_export=n_scalar_field,
130131
tree_depth=options.number_octree_levels
@@ -135,7 +136,6 @@ def dual_contouring_multi_scalar(
135136
from gempy_engine.modules.dual_contouring._dual_contouring_v2 import compute_dual_contouring_v2
136137
all_meshes = compute_dual_contouring_v2(
137138
dc_data_list=dc_data_per_surface_all,
138-
left_right_codes=all_left_right_codes[0],
139139
)
140140
# endregion
141141
if (options.debug or len(all_left_right_codes) > 1) and False:
@@ -168,7 +168,7 @@ def _compute_meshes_legacy(all_left_right_codes: list[Any], all_mask_arrays: np.
168168

169169
meshes: List[DualContouringMesh] = compute_dual_contouring(
170170
dc_data_per_stack=dc_data,
171-
left_right_codes=all_left_right_codes[0],
171+
left_right_codes=all_left_right_codes[n_scalar_field],
172172
debug=options.debug
173173
)
174174

gempy_engine/core/data/dual_contouring_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ class DualContouringData:
1212
dxdydz: np.ndarray | tuple[float, float, float]
1313

1414
n_surfaces_to_export: int
15+
left_right_codes: np.ndarray
1516
gradients: np.ndarray = None
1617

1718
tree_depth: int = -1
1819
# Water tight
19-
mask: np.ndarray = None
2020

2121
bias_center_mass: np.ndarray = None # * Only for testing
2222
bias_normals: np.ndarray = None # * Only for testing

gempy_engine/modules/dual_contouring/_dual_contouring_v2.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222

2323

2424
@gempy_profiler_decorator
25-
def compute_dual_contouring_v2(dc_data_list: list[DualContouringData],
26-
left_right_codes=None) -> List[DualContouringMesh]:
27-
parallel_results = _parallel_process(dc_data_list, left_right_codes)
25+
def compute_dual_contouring_v2(dc_data_list: list[DualContouringData], ) -> List[DualContouringMesh]:
26+
parallel_results = _parallel_process(dc_data_list)
2827

2928
if parallel_results is not None:
3029
return parallel_results
@@ -35,25 +34,25 @@ def compute_dual_contouring_v2(dc_data_list: list[DualContouringData],
3534
stack_meshes: List[DualContouringMesh] = []
3635

3736
for dc_data in dc_data_list:
38-
mesh = _process_one_surface(dc_data, left_right_codes)
37+
mesh = _process_one_surface(dc_data, dc_data.left_right_codes)
3938
stack_meshes.append(mesh)
4039
return stack_meshes
4140

4241

43-
def _parallel_process(dc_data_list: list[DualContouringData], left_right_codes):
42+
def _parallel_process(dc_data_list: list[DualContouringData]):
4443
# Check if we should use parallel processing
4544
n_surfaces_to_export = len(dc_data_list)
4645
use_parallel = _should_use_parallel_processing(n_surfaces_to_export, BackendTensor.engine_backend)
4746
parallel_results = None
4847

4948
if use_parallel and False: # ! (Miguel Sep 25) I do not see a speedup
5049
print(f"Using parallel processing for {n_surfaces_to_export} surfaces")
51-
parallel_results = _parallel_process_surfaces_v2(dc_data_list, left_right_codes)
50+
parallel_results = _parallel_process_surfaces_v2(dc_data_list)
5251

5352
return parallel_results
5453

5554

56-
def _parallel_process_surfaces_v2(dc_data_list: list[DualContouringData], left_right_codes, num_workers=None, chunk_size=2):
55+
def _parallel_process_surfaces_v2(dc_data_list: list[DualContouringData], num_workers=None, chunk_size=2):
5756
"""Process surfaces in parallel using multiprocessing."""
5857
n_surfaces = len(dc_data_list)
5958

@@ -70,6 +69,7 @@ def _parallel_process_surfaces_v2(dc_data_list: list[DualContouringData], left_r
7069
'xyz_on_centers' : dc_data.xyz_on_centers,
7170
'dxdydz' : dc_data.dxdydz,
7271
'gradients' : dc_data.gradients,
72+
'left_right_codes' : dc_data.left_right_codes,
7373
'n_surfaces_to_export': dc_data.n_surfaces_to_export,
7474
'tree_depth' : dc_data.tree_depth
7575
}
@@ -89,7 +89,7 @@ def _parallel_process_surfaces_v2(dc_data_list: list[DualContouringData], left_r
8989
for chunk in chunks:
9090
result = pool.apply_async(
9191
_process_surface_batch_v2,
92-
(chunk, dc_data_dicts, left_right_codes)
92+
(chunk, dc_data_dicts )
9393
)
9494
async_results.append(result)
9595

@@ -120,11 +120,12 @@ def _process_surface_batch_v2(surface_indices, dc_data_dicts, left_right_codes):
120120
xyz_on_centers=dc_data_dict['xyz_on_centers'],
121121
dxdydz=dc_data_dict['dxdydz'],
122122
gradients=dc_data_dict['gradients'],
123+
left_right_codes=dc_data_dict['left_right_codes'],
123124
n_surfaces_to_export=dc_data_dict['n_surfaces_to_export'],
124125
tree_depth=dc_data_dict['tree_depth']
125126
)
126127
# Process the surface
127-
mesh = _process_one_surface(dc_data, left_right_codes)
128+
mesh = _process_one_surface(dc_data, dc_data.left_right_codes)
128129
results.append(mesh)
129130

130131
return results

0 commit comments

Comments
 (0)