Skip to content

Commit f3785fa

Browse files
committed
fix: correct pipline to remove divide by zero's
1 parent bdc14b2 commit f3785fa

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/e3sm_compareview/pipeline.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,18 +244,29 @@ def _normalize_timestamps(timestep_values):
244244

245245
def _build_programmable_filter_script(self):
246246
# Emit the control array plus one comparison array per selected simulation.
247-
return f"""vars = {self.loaded_variables}
247+
return f"""import numpy as np
248+
249+
vars = {self.loaded_variables}
248250
for var in vars:
249251
ctrl = inputs[0].CellData[f"{{var}}"]
252+
ctrl_np = np.asarray(ctrl)
250253
251254
output.CellData.append(ctrl, f'{{var}}')
252255
output.CellData.append(ctrl, f'{{var}}__control')
253256
for sim_index, sim_input in enumerate(inputs[1:], start=1):
254257
sim = sim_input.CellData[f"{{var}}"]
258+
sim_np = np.asarray(sim)
255259
output.CellData.append(sim, f'{{var}}__test__{{sim_index}}')
256-
diff = sim - ctrl
257-
comp1 = diff / ctrl
258-
comp2 = (2 * diff) / (sim + ctrl)
260+
261+
# Use guarded division to avoid runtime warnings for zero-valued slices.
262+
diff = sim_np - ctrl_np
263+
comp1 = np.full(diff.shape, np.nan, dtype=np.float64)
264+
comp2 = np.full(diff.shape, np.nan, dtype=np.float64)
265+
denom_ctrl = ctrl_np
266+
denom_sum = sim_np + ctrl_np
267+
np.divide(diff, denom_ctrl, out=comp1, where=(denom_ctrl != 0))
268+
np.divide(2.0 * diff, denom_sum, out=comp2, where=(denom_sum != 0))
269+
259270
output.CellData.append(diff, f'{{var}}__diff__{{sim_index}}')
260271
output.CellData.append(comp1, f'{{var}}__comp1__{{sim_index}}')
261272
output.CellData.append(comp2, f'{{var}}__comp2__{{sim_index}}')

0 commit comments

Comments
 (0)