diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 2bbb898a..77e23c09 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -632,8 +632,10 @@ def uncertainties(self) -> dict[str, dict[float, np.ndarray | None]]: for k in self.active_components: out[k] = self.component_uncertainty(k) - for data in out[k].values(): - if np.any(np.isnan(data)) or np.any(data < 0): + for uncert, data in zip( + out[k].values(), self.component_data(k).values(), strict=True + ): + if np.any((np.isnan(uncert) | (uncert < 0)) & ~np.isnan(data)): flags.append(f"{k} component") break diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py index ac54d509..b0a68eac 100644 --- a/tests/run_tests/driver_mt_test.py +++ b/tests/run_tests/driver_mt_test.py @@ -162,12 +162,23 @@ def test_bad_uncertainties( topography = components.topography data_kwargs = setup_data(geoh5, survey) - for elem in ["uncertainty_zxx_imag_[0]", "uncertainty_zyx_real_[0]"]: + # Add NDV to some uncertainties + for elem in [ + "uncertainty_zxx_imag_[0]", + "uncertainty_zyx_real_[0]", + "uncertainty_zyx_imag_[0]", + ]: data = survey.get_entity(elem)[0] vals = data.values vals[0] = np.nan data.values = vals + # Also NDV the data for one of them + data = survey.get_entity("Iteration_0_zyx_imag_[0]")[0] + vals = data.values + vals[0] = np.nan + data.values = vals + # Run the inverse params = MTInversionOptions.build( geoh5=geoh5, @@ -184,6 +195,7 @@ def test_bad_uncertainties( assert "zxx_imag" in str(error.value) assert "zyx_real" in str(error.value) + assert "zyx_imag" not in str(error.value) def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):