From 1d1ff52f7f8f96b1bba8719a70c91ba3b42bb7c6 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 7 May 2025 13:47:20 -0400 Subject: [PATCH 01/20] Refactor joint inversion drivers and move more core methods to the base --- simpeg_drivers/joint/driver.py | 283 ++++++++++++++++-- .../joint/joint_cross_gradient/driver.py | 195 +----------- simpeg_drivers/joint/joint_surveys/driver.py | 83 +---- 3 files changed, 272 insertions(+), 289 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index fc90167a..2a74c51c 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -17,6 +17,7 @@ from pathlib import Path import numpy as np +from geoh5py.groups.property_group_type import GroupTypeEnum from geoh5py.shared.utils import fetch_active_workspace from octree_creation_app.utils import ( collocate_octrees, @@ -24,10 +25,15 @@ treemesh_2_octree, ) from simpeg import directives -from simpeg.maps import TileMap +from simpeg.directives import SaveLPModelGroup +from simpeg.maps import Projection, TileMap from simpeg.objective_function import ComboObjectiveFunction -from simpeg_drivers.components.factories import SaveDataGeoh5Factory +from simpeg_drivers.components.factories import ( + DirectivesFactory, + SaveDataGeoh5Factory, + SaveModelGeoh5Factory, +) from simpeg_drivers.driver import InversionDriver from simpeg_drivers.joint.options import BaseJointOptions from simpeg_drivers.utils.utils import simpeg_group_to_driver @@ -143,31 +149,69 @@ def inversion_data(self): """Inversion data""" return self._inversion_data - def validate_create_mesh(self): - """Function to validate and create the inversion mesh.""" - - if self.params.mesh is None: - print("Creating a global mesh from sub-meshes parameters.") - tree = create_octree_from_octrees( - [driver.inversion_mesh.mesh for driver in self.drivers] - ) - self.params.mesh = treemesh_2_octree(self.workspace, tree) - - collocate_octrees( - self.inversion_mesh.entity, - [driver.inversion_mesh.entity for driver in self.drivers], - ) - for driver in self.drivers: - driver.inversion_mesh.mesh = None + @property + def directives(self): + if getattr(self, "_directives", None) is None and not self.params.forward_only: + with fetch_active_workspace(self.workspace, mode="r+"): + directives_list = self._get_drivers_directives() + + directives_list += self._get_global_model_save_directives() + directives_list.append( + directives.SaveLPModelGroup( + self.inversion_mesh.entity, + self._directives.update_irls_directive, + ) + ) + directives_list.append(self._directives.save_iteration_log_files) + self._directives.directive_list = ( + self._directives.inversion_directives + directives_list + ) + return self._directives - def validate_create_models(self): - """Construct models from the local drivers.""" - raise NotImplementedError("Must be implemented by subclass.") + @property + def mapping(self): + """ + Create a dictionary of mappings for all model components and drivers. + + e.g. + + mappings = { + (driver_mvi, amplitude): P_mvi_a, + (driver_mvi, inclination): P_mvi_i, + ... + (driver_fem, cond): P_fem_c, + } + + :returns: A flat list of mappings for all drivers and all components in + order to be used in the inversion. + """ + if self._mapping is None: + mappings = {} + start = 0 + n_values = int(np.sum(self.models.active_cells)) + for driver in self.drivers: + for mapping in driver.mapping: + mappings[driver, mapping] = Projection( + int(np.sum(self.n_values)), slice(start, start + n_values) + ) + start += n_values + + self._mapping = mappings + + return self._mapping.values() @property - def wires(self): - """Model projections.""" - raise NotImplementedError("Must be implemented by subclass.") + def n_values(self): + """Number of values in the model""" + if self._n_values is None: + n_values = self.models.n_active + count = [] + for driver in self.drivers: + n_comp = 3 if driver.inversion_data.vector else 1 + count.append(n_values * n_comp) + self._n_values = count + + return self._n_values def run(self): """Run inversion from params""" @@ -204,6 +248,197 @@ def run(self): self.logger.log.close() self._update_log() + def validate_create_mesh(self): + """Function to validate and create the inversion mesh.""" + + if self.params.mesh is None: + print("Creating a global mesh from sub-meshes parameters.") + tree = create_octree_from_octrees( + [driver.inversion_mesh.mesh for driver in self.drivers] + ) + self.params.mesh = treemesh_2_octree(self.workspace, tree) + + collocate_octrees( + self.inversion_mesh.entity, + [driver.inversion_mesh.entity for driver in self.drivers], + ) + for driver in self.drivers: + driver.inversion_mesh.mesh = None + + def validate_create_models(self): + """Create stacked model vectors from all drivers provided.""" + for model_type in self.models.model_types: + model = np.zeros(self.models.n_active * len(self.mapping)) + + for child_driver in self.drivers: + model_local_values = getattr(child_driver.models, model_type) + + if model_local_values is not None: + projection = child_driver.data_misfit.model_map.deriv(model).T + + if isinstance(model_local_values, float): + model_local_values = ( + np.ones(projection.shape[1]) * model_local_values + ) + + norm = np.array(np.sum(projection, axis=1)).flatten() + model += (projection * model_local_values) / (norm + 1e-8) + + if model is not None: + getattr(self.models, f"_{model_type}").model = model + + @property + def wires(self): + """ + Model projections for the simulations. + + e.g. For a joint inversion with 3 drivers, the wires will be: + + wires = [ + P_mvi(0, 3*nC), + P_den(3*nC, 4*nC), + P_cond(4*nC, 5*nC), + ] + + such that the first projection grabs the first 3*nC values of the model vector. + """ + if self._wires is None: + collection = [] + start = 0 + for n_values in self.n_values: + collection.append( + Projection( + int(np.sum(self.n_values)), slice(start, start + n_values) + ) + ) + start += n_values + + self._wires = collection + + return self._wires + + def _get_drivers_directives(self) -> list[directives.Directive]: + """ + Create a list of directives for each driver and add them to the + """ + self._directives = DirectivesFactory(self) + directives_list = [] + count = 0 + for driver in self.drivers: + driver_directives = DirectivesFactory(driver) + + if ( + getattr(driver.params, "model_type", None) is not None + and getattr(self.params, "model_type", None) is not None + ): + driver.params.model_type = self.params.model_type + + save_model = driver_directives.save_iteration_model_directive + save_model.transforms = [ + driver.data_misfit.model_map, + *save_model.transforms, + ] + + directives_list.append(save_model) + directives_list.append( + SaveLPModelGroup( + driver.inversion_mesh.entity, + self._directives.update_irls_directive, + ) + ) + + if driver_directives.save_property_group is not None: + directives_list.append(driver_directives.save_property_group) + + n_tiles = len(driver.data_misfit.objfcts) + for name in [ + "save_iteration_data_directive", + "save_iteration_residual_directive", + "save_iteration_apparent_resistivity_directive", + "vector_inversion_directive", + ]: + directive = getattr(driver_directives, name) + if directive is not None: + directive.joint_index = [count + ii for ii in range(n_tiles)] + directives_list.append(directive) + + count += n_tiles + + return directives_list + + def _get_global_model_save_directives(self): + """ + Create a list of directives for regularization models on the global mesh. + """ + directives_list = [] + for driver, wire in zip(self.drivers, self.wires, strict=True): + directives_list += self._get_local_model_save_directives(driver, wire) + return directives_list + + def _get_local_model_save_directives( + self, driver, wire + ) -> list[directives.Directive]: + """ + Create a save model directive on local meshes, one list per driver. + """ + factory = SaveModelGeoh5Factory(driver.params) + factory.factory_type = driver.params.inversion_type + model_directive = factory.build( + inversion_object=self.inversion_mesh, + active_cells=self.models.active_cells, + name="Model", + ) + + model_directive.label = driver.params.physical_property + if getattr(driver.params, "model_type", None) == "Resistivity (Ohm-m)": + model_directive.label = "resistivity" + + model_directive.transforms = [wire, *model_directive.transforms] + + directives_list = [model_directive] + if driver.directives.save_property_group is not None: + directives_list.append( + directives.SavePropertyGroup( + self.inversion_mesh.entity, + group_type=GroupTypeEnum.DIPDIR, + channels=["declination", "inclination"], + ) + ) + return directives_list + + def _overload_regularization(self, regularization: ComboObjectiveFunction): + """ + Create a flat ComboObjectiveFunction from all drivers provided and + add cross-gradient regularization for all combinations of model parameters. + """ + reg_list = regularization.objfcts + multipliers = regularization.multipliers + reg_dict = {reg.mapping: reg for reg in reg_list} + for driver in self.drivers: + reg_block = [] + for mapping in driver.mapping: + reg_block.append(reg_dict[self._mapping[driver, mapping]]) + + # Pass down regularization parameters from driver. + for param in [ + "alpha_s", + "length_scale_x", + "length_scale_y", + "length_scale_z", + "s_norm", + "x_norm", + "y_norm", + "z_norm", + "gradient_type", + ]: + if getattr(self.params, param) is None: + for reg in reg_block: + setattr(reg, param, getattr(driver.params, param)) + + driver.regularization = ComboObjectiveFunction(objfcts=reg_block) + + return reg_list, multipliers + def _update_log(self): """Update the log with the inversion results.""" for directive in self.directives.directive_list: diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index e34defca..1426872f 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -44,157 +44,13 @@ def __init__(self, params: JointCrossGradientOptions): with fetch_active_workspace(self.workspace, mode="r+"): self.initialize() - def validate_create_models(self): - """Create stacked model vectors from all drivers provided.""" - for model_type in self.models.model_types: - model = np.zeros(self.models.n_active * len(self.mapping)) - - for child_driver in self.drivers: - model_local_values = getattr(child_driver.models, model_type) - - if model_local_values is not None: - projection = child_driver.data_misfit.model_map.deriv(model).T - - if isinstance(model_local_values, float): - model_local_values = ( - np.ones(projection.shape[1]) * model_local_values - ) - - norm = np.array(np.sum(projection, axis=1)).flatten() - model += (projection * model_local_values) / (norm + 1e-8) - - if model is not None: - getattr(self.models, f"_{model_type}").model = model - - @property - def directives(self): - if getattr(self, "_directives", None) is None and not self.params.forward_only: - with fetch_active_workspace(self.workspace, mode="r+"): - self._directives = DirectivesFactory(self) - - directives_list = [] - count = 0 - for driver in self.drivers: - driver_directives = driver.directives - n_tiles = len(driver.data_misfit.objfcts) - - for name in [ - "save_iteration_data_directive", - "save_iteration_residual_directive", - "save_iteration_apparent_resistivity_directive", - ]: - directive = getattr(driver_directives, name) - if directive is not None: - directive.joint_index = [ - count + ii for ii in range(n_tiles) - ] - directives_list.append(directive) - - save_model = driver_directives.save_iteration_model_directive - save_model.label = driver.params.physical_property - save_model.transforms = [ - driver.data_misfit.model_map, - *save_model.transforms, - ] - - directives_list.append(save_model) - directives_list.append( - directives.SaveLPModelGroup( - driver.inversion_mesh.entity, - self._directives.update_irls_directive, - ) - ) - - if driver_directives.vector_inversion_directive is not None: - directives_list.append( - driver_directives.vector_inversion_directive - ) - - if driver_directives.save_property_group is not None: - directives_list.append(driver_directives.save_property_group) - - save_sensitivities = driver_directives.save_sensitivities_directive - if save_sensitivities is not None: - save_sensitivities.transforms = [ - driver.data_misfit.model_map, - *save_sensitivities.transforms, - ] - directives_list.append(save_sensitivities) - - count += n_tiles - - for driver, wire in zip(self.drivers, self.wires, strict=True): - factory = SaveModelGeoh5Factory(driver.params) - factory.factory_type = driver.params.inversion_type - model_directive = factory.build( - inversion_object=self.inversion_mesh, - active_cells=self.models.active_cells, - name="Model", - ) - - model_directive.label = driver.params.physical_property - if ( - getattr(driver.params, "model_type", None) - == "Resistivity (Ohm-m)" - ): - model_directive.label = "resistivity" - - model_directive.transforms = [wire, *model_directive.transforms] - directives_list.append(model_directive) - - if driver.directives.save_property_group is not None: - directives_list.append( - directives.SavePropertyGroup( - self.inversion_mesh.entity, - group_type=GroupTypeEnum.DIPDIR, - channels=["declination", "inclination"], - ) - ) - - directives_list.append( - directives.SaveLPModelGroup( - self.inversion_mesh.entity, - self._directives.update_irls_directive, - ) - ) - - directives_list.append(self._directives.save_iteration_log_files) - self._directives.directive_list = ( - self._directives.inversion_directives + directives_list - ) - return self._directives - def get_regularization(self): """ Create a flat ComboObjectiveFunction from all drivers provided and add cross-gradient regularization for all combinations of model parameters. """ regularizations = super().get_regularization() - reg_list = regularizations.objfcts - multipliers = regularizations.multipliers - reg_dict = {reg.mapping: reg for reg in reg_list} - for driver in self.drivers: - reg_block = [] - for mapping in driver.mapping: - reg_block.append(reg_dict[self._mapping[driver, mapping]]) - - # Pass down regularization parameters from driver. - for param in [ - "alpha_s", - "length_scale_x", - "length_scale_y", - "length_scale_z", - "s_norm", - "x_norm", - "y_norm", - "z_norm", - "gradient_type", - ]: - if getattr(self.params, param) is None: - for reg in reg_block: - setattr(reg, param, getattr(driver.params, param)) - - driver.regularization = ComboObjectiveFunction(objfcts=reg_block) + reg_list, multipliers = self._overload_regularization(regularizations) for label, driver_pairs in zip( ["a_b", "c_a", "c_b"], combinations(self.drivers, 2), strict=False @@ -222,52 +78,3 @@ def get_regularization(self): ) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) - - @property - def wires(self): - """Model projections""" - if self._wires is None: - collection = [] - start = 0 - for n_values in self.n_values: - collection.append( - maps.Projection( - int(np.sum(self.n_values)), slice(start, start + n_values) - ) - ) - start += n_values - - self._wires = collection - - return self._wires - - @property - def mapping(self): - """Create a list of all mappings augmented with projection to global problem""" - if self._mapping is None: - mappings = {} - start = 0 - n_values = int(np.sum(self.models.active_cells)) - for driver in self.drivers: - for mapping in driver.mapping: - mappings[driver, mapping] = maps.Projection( - int(np.sum(self.n_values)), slice(start, start + n_values) - ) - start += n_values - - self._mapping = mappings - - return self._mapping.values() - - @property - def n_values(self): - """Number of values in the model""" - if self._n_values is None: - n_values = self.models.n_active - count = [] - for driver in self.drivers: - n_comp = 3 if driver.inversion_data.vector else 1 - count.append(n_values * n_comp) - self._n_values = count - - return self._n_values diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py index b75cedba..8e3aa744 100644 --- a/simpeg_drivers/joint/joint_surveys/driver.py +++ b/simpeg_drivers/joint/joint_surveys/driver.py @@ -14,11 +14,11 @@ from logging import getLogger import numpy as np +from geoh5py.groups.property_group_type import GroupTypeEnum from geoh5py.shared.utils import fetch_active_workspace from simpeg import maps -from simpeg.directives import SaveLPModelGroup -from simpeg_drivers.components.factories import DirectivesFactory, SaveModelGeoh5Factory +from simpeg_drivers.driver import InversionDriver from simpeg_drivers.joint.driver import BaseJointDriver from .options import JointSurveysOptions @@ -86,75 +86,16 @@ def wires(self): return self._wires - @property - def directives(self): - if getattr(self, "_directives", None) is None and not self.params.forward_only: - self._directives = DirectivesFactory(self) - with fetch_active_workspace(self.workspace, mode="r+"): - directives_list = [] - count = 0 - for driver in self.drivers: - if getattr(driver.params, "model_type", None) is not None: - driver.params.model_type = self.params.model_type - - driver_directives = DirectivesFactory(driver) - - save_model = driver_directives.save_iteration_model_directive - save_model.transforms = [ - driver.data_misfit.model_map, - *save_model.transforms, - ] - - directives_list.append(save_model) - directives_list.append( - SaveLPModelGroup( - driver.inversion_mesh.entity, - self._directives.update_irls_directive, - ) - ) - - if driver_directives.save_property_group is not None: - directives_list.append(driver_directives.save_property_group) - - n_tiles = len(driver.data_misfit.objfcts) - for name in [ - "save_iteration_data_directive", - "save_iteration_residual_directive", - "save_iteration_apparent_resistivity_directive", - "vector_inversion_directive", - ]: - directive = getattr(driver_directives, name) - if directive is not None: - directive.joint_index = [ - count + ii for ii in range(n_tiles) - ] - directives_list.append(directive) - - count += n_tiles - - model_factory = SaveModelGeoh5Factory(self.params) - model_factory.factory_type = self.drivers[0].params.inversion_type - global_model_save = model_factory.build( - inversion_object=self.inversion_mesh, - active_cells=self.models.active_cells, - name="Model", - ) - - directives_list.append( - SaveLPModelGroup( - self.inversion_mesh.entity, - self._directives.update_irls_directive, - ) - ) + def _get_global_model_save_directives(self): + """ + Create a list of directives for regularization models. + """ + directives_list = self._get_local_model_save_directives( + self.drivers[0], self.wires[0] + ) - if self._directives.save_property_group is not None: - directives_list.append(self._directives.save_property_group) + return directives_list - directives_list.append(self._directives.save_iteration_log_files) - self._directives.directive_list = [ - *self._directives.inversion_directives, - global_model_save, - *directives_list, - ] - return self._directives +JointSurveyDriver.n_values = InversionDriver.n_values +JointSurveyDriver.mapping = InversionDriver.mapping From d06fac485e55ebe48e7883cb5e3189f9a0fa9f3b Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 7 May 2025 14:28:06 -0400 Subject: [PATCH 02/20] Add main files for PGI --- .../joint/joint_petrophysical/__init__.py | 9 + .../joint/joint_petrophysical/driver.py | 52 ++++++ .../joint/joint_petrophysical/options.py | 50 ++++++ .../run_tests/driver_pgi_homogeneous_test.py | 161 ++++++++++++++++++ 4 files changed, 272 insertions(+) create mode 100644 simpeg_drivers/joint/joint_petrophysical/__init__.py create mode 100644 simpeg_drivers/joint/joint_petrophysical/driver.py create mode 100644 simpeg_drivers/joint/joint_petrophysical/options.py create mode 100644 tests/run_tests/driver_pgi_homogeneous_test.py diff --git a/simpeg_drivers/joint/joint_petrophysical/__init__.py b/simpeg_drivers/joint/joint_petrophysical/__init__.py new file mode 100644 index 00000000..4d06f672 --- /dev/null +++ b/simpeg_drivers/joint/joint_petrophysical/__init__.py @@ -0,0 +1,9 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2025 Mira Geoscience Ltd. ' +# ' +# This file is part of simpeg-drivers package. ' +# ' +# simpeg-drivers is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# ' +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/simpeg_drivers/joint/joint_petrophysical/driver.py b/simpeg_drivers/joint/joint_petrophysical/driver.py new file mode 100644 index 00000000..5ae07419 --- /dev/null +++ b/simpeg_drivers/joint/joint_petrophysical/driver.py @@ -0,0 +1,52 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2025 Mira Geoscience Ltd. ' +# ' +# This file is part of simpeg-drivers package. ' +# ' +# simpeg-drivers is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# ' +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +from __future__ import annotations + +from itertools import combinations + +import numpy as np +from geoh5py.groups.property_group_type import GroupTypeEnum +from geoh5py.shared.utils import fetch_active_workspace +from simpeg import directives, maps +from simpeg.objective_function import ComboObjectiveFunction +from simpeg.regularization import PGI + +from simpeg_drivers.components.factories import ( + DirectivesFactory, + SaveModelGeoh5Factory, +) +from simpeg_drivers.joint.driver import BaseJointDriver + +from .options import JointPetrophysicalOptions + + +class JointPetrophysicalDriver(BaseJointDriver): + _options_class = JointPetrophysicalOptions + _validations = None + + def __init__(self, params: JointPetrophysicalOptions): + self._wires = None + self._directives = None + + super().__init__(params) + + with fetch_active_workspace(self.workspace, mode="r+"): + self.initialize() + + def get_regularization(self): + """ + Create a flat ComboObjectiveFunction from all drivers provided and + add cross-gradient regularization for all combinations of model parameters. + """ + regularizations = super().get_regularization() + reg_list, multipliers = self._overload_regularization(regularizations) + + return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) diff --git a/simpeg_drivers/joint/joint_petrophysical/options.py b/simpeg_drivers/joint/joint_petrophysical/options.py new file mode 100644 index 00000000..4c5efe07 --- /dev/null +++ b/simpeg_drivers/joint/joint_petrophysical/options.py @@ -0,0 +1,50 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2025 Mira Geoscience Ltd. ' +# ' +# This file is part of simpeg-drivers package. ' +# ' +# simpeg-drivers is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# ' +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + +from __future__ import annotations + +from pathlib import Path +from typing import ClassVar + +from geoh5py.data import ReferencedData +from geoh5py.groups import SimPEGGroup +from geoh5py.objects import Octree + +from simpeg_drivers import assets_path +from simpeg_drivers.joint.options import BaseJointOptions + + +class JointPetrophysicalOptions(BaseJointOptions): + """ + Joint Petrophysically Guided Inversion (PGI) driver. + + :param mesh: The global mesh entity containing the reference geology. + :param geo_model: The reference geology data. + """ + + name: ClassVar[str] = "Petrophysically Guided Inversion (PGI)" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/joint_petrophysical_inversion.ui.json" + ) + + title: str = "Joint Petrophysically Guided Inversion (PGI)" + physical_property: list[str] = [""] + + inversion_type: str = "joint petrophysical" + + mesh: Octree + geo_model: ReferencedData + group_a: SimPEGGroup + group_a_multiplier: float | None = 1.0 + group_b: SimPEGGroup | None = None + group_b_multiplier: float | None = None + group_c: SimPEGGroup | None = None + group_c_multiplier: float | None = None diff --git a/tests/run_tests/driver_pgi_homogeneous_test.py b/tests/run_tests/driver_pgi_homogeneous_test.py new file mode 100644 index 00000000..8544afc0 --- /dev/null +++ b/tests/run_tests/driver_pgi_homogeneous_test.py @@ -0,0 +1,161 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2025 Mira Geoscience Ltd. ' +# ' +# This file is part of simpeg-drivers package. ' +# ' +# simpeg-drivers is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# ' +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +from __future__ import annotations + +from pathlib import Path +from unittest.mock import patch + +import numpy as np +from geoapps_utils.utils.importing import GeoAppsError +from geoh5py.workspace import Workspace +from pytest import raises + +from simpeg_drivers.joint.joint_petrophysical.driver import JointPetrophysicalDriver +from simpeg_drivers.joint.joint_petrophysical.options import JointPetrophysicalOptions +from simpeg_drivers.options import ActiveCellsOptions +from simpeg_drivers.potential_fields import ( + GravityForwardOptions, + GravityInversionOptions, +) +from simpeg_drivers.potential_fields.gravity.driver import GravityForwardDriver +from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace +from simpeg_drivers.utils.utils import get_inversion_output + + +# To test the full run and validate the inversion. +# Move this file out of the test directory and run. + +target_run = {"data_norm": 0.0028055269276044915, "phi_d": 8.32e-05, "phi_m": 0.0038} + + +def test_homogeneous_fwr_run( + tmp_path: Path, + n_grid_points=3, + refinement=(2,), +): + # Run the forward + geoh5, mesh, model, survey, topography = setup_inversion_workspace( + tmp_path, + background=0.0, + anomaly=0.75, + n_electrodes=n_grid_points, + n_lines=n_grid_points, + refinement=refinement, + flatten=False, + ) + with geoh5.open(): + model.values[(mesh.centroids[:, 0] > 0) & (model.values == 0)] = -0.1 + geoh5.update_attribute(model, "values") + + active_cells = ActiveCellsOptions(topography_object=topography) + params = GravityForwardOptions( + geoh5=geoh5, + mesh=model.parent, + active_cells=active_cells, + topography_object=topography, + data_object=survey, + starting_model=model, + gz_channel_bool=True, + ) + fwr_driver = GravityForwardDriver(params) + fwr_driver.run() + + +def test_homogeneous_run( + tmp_path: Path, + max_iterations=1, + pytest=True, +): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = ( + tmp_path.parent / "test_homogeneous_fwr_run0" / "inversion_test.ui.geoh5" + ) + + with Workspace(workpath, mode="r+") as geoh5: + gz = geoh5.get_entity("Iteration_0_gz")[0] + + mesh = geoh5.get_entity("mesh")[0] + model = mesh.get_entity("starting_model")[0] + + mapping = {} + vals = np.zeros_like(model.values, dtype=int) + for ind, value in enumerate(np.unique(model.values)): + mapping[ind + 1] = f"Unit{ind}" + vals[model.values == value] = ind + 1 + + topography = geoh5.get_entity("topography")[0] + geo_model = mesh.add_data( + { + "geo_model": { + "values": vals, + "type": "REFERENCED", + "value_map": mapping, + } + } + ) + + # Run the inverse + active_cells = ActiveCellsOptions(topography_object=topography) + params = GravityInversionOptions( + geoh5=geoh5, + mesh=mesh, + active_cells=active_cells, + data_object=gz.parent, + starting_model=1e-4, + reference_model=0.0, + gz_channel=gz, + gz_uncertainty=2e-3, + lower_bound=0.0, + max_global_iterations=max_iterations, + initial_beta_ratio=1e-2, + percentile=100, + store_sensitivities="ram", + save_sensitivities=True, + ) + + grav_group = geoh5.get_entity("Gravity Inversion")[0] + + params = JointPetrophysicalOptions( + active_cells=active_cells, + geoh5=geoh5, + group_a=grav_group, + mesh=mesh, + geo_model=geo_model, + ) + driver = JointPetrophysicalDriver(params) + driver.run() + + # with Workspace(driver.params.geoh5.h5file) as run_ws: + # output = get_inversion_output( + # driver.params.geoh5.h5file, driver.params.out_group.uid + # ) + # + # if pytest: + # check_target(output, target_run) + # nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) + # inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 + # assert np.all(nan_ind == inactive_ind) + + +if __name__ == "__main__": + # Full run + test_homogeneous_fwr_run( + Path("./"), + n_grid_points=20, + refinement=(4, 8), + ) + + test_homogeneous_run( + Path("./"), + max_iterations=15, + pytest=False, + ) From c200716e580d342828a217655467182865830f4d Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 7 May 2025 14:37:46 -0400 Subject: [PATCH 03/20] Add default uijson --- .../uijson/joint_pgi_inversion.ui.json | 452 ++++++++++++++++++ 1 file changed, 452 insertions(+) create mode 100644 simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json diff --git a/simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json new file mode 100644 index 00000000..2bd6ae4f --- /dev/null +++ b/simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json @@ -0,0 +1,452 @@ +{ + "version": "0.3.0-alpha.4", + "title": "Petrophysically Guided Inversion (PGI)", + "icon": "", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg_drivers", + "run_command": "simpeg_drivers.driver", + "geoh5": "", + "monitoring_directory": "", + "workspace_geoh5": "", + "group_a": { + "main": true, + "group": "Joint", + "label": "Group A", + "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", + "value": "" + }, + "group_a_multiplier": { + "min": 0.0, + "main": true, + "group": "Joint", + "label": "Misfit A Scale", + "value": 1.0, + "dependency": "group_b", + "enabled": false, + "dependencyType": "enabled", + "tooltip": "Constant multiplier for the data misfit function for Group A" + }, + "group_b": { + "main": true, + "group": "Joint", + "label": "Group B", + "optional": true, + "enabled": false, + "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", + "value": "" + }, + "group_b_multiplier": { + "min": 0.0, + "main": true, + "group": "Joint", + "label": "Misfit B Scale", + "value": 1.0, + "dependency": "group_b", + "enabled": false, + "dependencyType": "enabled", + "tooltip": "Constant multiplier for the data misfit function for Group B" + }, + "group_c": { + "main": true, + "group": "Joint", + "label": "Group C", + "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", + "optional": true, + "enabled": false, + "value": "" + }, + "group_c_multiplier": { + "min": 0.0, + "main": true, + "group": "Joint", + "label": "Misfit C Scale", + "value": 1.0, + "dependency": "group_c", + "dependencyType": "enabled", + "tooltip": "Constant multiplier for the data misfit function for Group C" + }, + "mesh": { + "group": "Geological model", + "main": true, + "label": "Mesh", + "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", + "value": "", + "optional": false, + "enabled": true, + "tooltip": "Select a mesh containing a reference model representing homogeneous units" + }, + "geo_model": { + "association": [ + "Cell" + ], + "dataType": "Referenced", + "group": "Geological model", + "main": true, + "label": "Model", + "parent": "mesh", + "optional": false, + "enabled": true, + "value": "" + }, + "topography_object": { + "main": true, + "group": "Topography", + "label": "Topography", + "meshType": [ + "{202c5db1-a56d-4004-9cad-baafd8899406}", + "{6a057fdc-b355-11e3-95be-fd84a7ffcb88}", + "{f26feba3-aded-494b-b9e9-b2bbcbe298e1}", + "{48f5054a-1c5c-4ca4-9048-80f36dc60a06}", + "{b020a277-90e2-4cd7-84d6-612ee3f25051}" + ], + "value": "", + "optional": true, + "enabled": true, + "tooltip": "Select a topography object to define the active cells for inversion" + }, + "topography": { + "association": [ + "Vertex", + "Cell" + ], + "dataType": "Float", + "group": "Topography", + "main": true, + "optional": true, + "enabled": false, + "label": "Elevation channel", + "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object", + "parent": "topography_object", + "dependency": "topography_object", + "dependencyType": "enabled", + "value": "", + "verbose": 2 + }, + "active_model": { + "association": "Cell", + "dataType": [ + "Referenced", + "Boolean", + "Integer" + ], + "group": "Topography", + "main": true, + "enabled": false, + "dependency": "topography_object", + "dependencyType": "disabled", + "label": "Active model", + "tooltip": "Provide the active cell boolean model directly if topography not set", + "parent": "mesh", + "value": "" + }, + "alpha_s": { + "min": 0.0, + "group": "Regularization", + "groupOptional": true, + "label": "Smallness weight", + "value": 1.0, + "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model", + "enabled": false + }, + "length_scale_x": { + "min": 0.0, + "group": "Regularization", + "label": "X-smoothness weight", + "tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness", + "value": 1.0, + "enabled": false + }, + "length_scale_y": { + "min": 0.0, + "group": "Regularization", + "label": "Y-smoothness weight", + "tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness", + "value": 1.0, + "enabled": false + }, + "length_scale_z": { + "min": 0.0, + "group": "Regularization", + "label": "Z-smoothness weight", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "value": 1.0, + "enabled": false + }, + "gradient_rotation": { + "group": "Regularization", + "association": "Cell", + "dataType": "Float", + "dataGroupType": "Dip direction & dip", + "label": "Gradient rotation", + "optional": true, + "enabled": false, + "parent": "mesh", + "value": "" + }, + "s_norm": { + "min": 0.0, + "max": 2.0, + "group": "Regularization", + "label": "Smallness norm", + "value": 0.0, + "precision": 2, + "lineEdit": false, + "enabled": false + }, + "x_norm": { + "min": 0.0, + "max": 2.0, + "group": "Regularization", + "label": "X-smoothness norm", + "value": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": false + }, + "y_norm": { + "min": 0.0, + "max": 2.0, + "group": "Regularization", + "label": "Y-smoothness norm", + "value": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": false + }, + "z_norm": { + "min": 0.0, + "max": 2.0, + "group": "Regularization", + "label": "Z-smoothness norm", + "value": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": false + }, + "gradient_type": "total", + "max_irls_iterations": { + "min": 0, + "group": "Sparse/blocky model", + "label": "Maximum IRLS iterations", + "tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems", + "value": 25, + "enabled": true, + "verbose": 2 + }, + "starting_chi_factor": { + "group": "Sparse/blocky model", + "label": "IRLS start chi factor", + "enabled": true, + "value": 1.0, + "tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin", + "verbose": 3 + }, + "beta_tol": { + "group": "Update IRLS directive", + "label": "Beta tolerance", + "value": 0.5, + "min": 0.0001, + "verbose": 3, + "visible": false + }, + "percentile": { + "group": "Update IRLS directive", + "label": "Percentile", + "value": 95, + "max": 100, + "min": 5, + "verbose": 3, + "visible": false + }, + "chi_factor": { + "min": 0.1, + "max": 20.0, + "precision": 1, + "lineEdit": false, + "group": "Cooling schedule/target", + "label": "Chi factor", + "value": 1.0, + "enabled": true, + "tooltip": "The global target data misfit value" + }, + "auto_scale_misfits": { + "group": "Cooling schedule/target", + "label": "Auto-scale misfits", + "value": true, + "verbose": 3, + "visible": true, + "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor" + }, + "initial_beta_ratio": { + "min": 0.0, + "precision": 2, + "group": "Cooling schedule/target", + "optional": true, + "enabled": true, + "label": "Initial beta ratio", + "value": 100.0, + "verbose": 2, + "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients" + }, + "initial_beta": { + "min": 0.0, + "group": "Cooling schedule/target", + "optional": true, + "enabled": false, + "dependency": "initial_beta_ratio", + "dependencyType": "disabled", + "label": "Initial beta", + "value": 1.0, + "verbose": 2, + "tooltip": "Trade-off parameter between data misfit and regularization" + }, + "cooling_factor": { + "group": "Cooling schedule/target", + "label": "Beta cooling factor", + "tooltip": "Each beta cooling step will be calculated by dividing the current beta by this factor", + "value": 2.0, + "min": 1.1, + "max": 100, + "precision": 1, + "lineEdit": false, + "verbose": 2 + }, + "cooling_rate": { + "group": "Optimization", + "label": "Iterations per beta", + "value": 1, + "min": 1, + "LineEdit": false, + "max": 10, + "precision": 1, + "verbose": 2, + "enabled": true, + "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems" + }, + "epsilon_cooling_factor": 1.2, + "max_global_iterations": { + "min": 1, + "lineEdit": false, + "group": "Optimization", + "label": "Maximum iterations", + "tooltip": "Number of L2 and IRLS iterations combined", + "value": 50, + "enabled": true + }, + "max_line_search_iterations": { + "group": "Optimization", + "label": "Maximum number of line searches", + "value": 20, + "min": 1, + "enabled": true, + "verbose": 3, + "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations" + }, + "max_cg_iterations": { + "min": 0, + "group": "Optimization", + "label": "Maximum CG iterations", + "value": 30, + "enabled": true, + "verbose": 2 + }, + "tol_cg": { + "min": 0, + "group": "Optimization", + "label": "Conjugate gradient tolerance", + "value": 0.0001, + "enabled": true, + "verbose": 3 + }, + "f_min_change": { + "group": "Optimization", + "label": "Minimum change in objective function", + "value": 0.01, + "min": 1e-06, + "verbose": 3, + "enabled": true, + "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed" + }, + "sens_wts_threshold": { + "group": "Update sensitivity weights directive", + "tooltip": "Update sensitivity weight threshold", + "label": "Threshold (%)", + "value": 0.001, + "max": 100.0, + "min": 0.0, + "precision": 3, + "enabled": true, + "verbose": 2 + }, + "every_iteration_bool": { + "group": "Update sensitivity weights directive", + "tooltip": "Update weights at every iteration", + "label": "Every iteration", + "value": true, + "verbose": 2, + "enabled": true + }, + "save_sensitivities": { + "group": "Update sensitivity weights directive", + "label": "Save sensitivities", + "tooltip": "Save the summed square row sensitivities to geoh5", + "value": false + }, + "n_cpu": { + "min": 1, + "group": "Compute", + "optional": true, + "enabled": false, + "label": "Number of CPUs", + "value": 1, + "visible": false + }, + "solver_type": { + "choiceList": [ + "Pardiso", + "Mumps" + ], + "group": "Compute", + "label": "Direct solver", + "tooltip": "Direct solver to use for the forward calculations", + "value": "Pardiso" + }, + "tile_spatial": 1, + "parallelized": true, + "store_sensitivities": { + "choiceList": [ + "disk", + "ram" + ], + "group": "Compute", + "label": "Storage device", + "tooltip": "Use disk on a fast local SSD, and RAM elsewhere", + "value": "ram" + }, + "max_chunk_size": { + "min": 0, + "group": "Compute", + "optional": true, + "enabled": true, + "label": "Maximum chunk size (Mb)", + "value": 128, + "verbose": 3, + "visible": false, + "tooltip": "Limit the chunk size used by Dask for distributed computation" + }, + "out_group": { + "label": "SimPEG group", + "value": "", + "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", + "group": "Drag-and-drop options", + "visible": true, + "optional": true, + "enabled": false, + "tooltip": "Optionally set the SimPEG group to which results will be saved" + }, + "n_workers": "", + "n_threads": "", + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} From 0f3d2471f5a0ff86b10ecac26407f4c7a7fdb940 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 7 May 2025 15:25:16 -0400 Subject: [PATCH 04/20] Renaming. First run through without PGI reg --- ...n => joint_petrophysics_inversion.ui.json} | 0 simpeg_drivers/__init__.py | 76 ++++++++++--------- .../__init__.py | 0 .../driver.py | 8 +- .../options.py | 6 +- .../run_tests/driver_pgi_homogeneous_test.py | 23 +++--- 6 files changed, 58 insertions(+), 55 deletions(-) rename simpeg_drivers-assets/uijson/{joint_pgi_inversion.ui.json => joint_petrophysics_inversion.ui.json} (100%) rename simpeg_drivers/joint/{joint_petrophysical => joint_petrophysics}/__init__.py (100%) rename simpeg_drivers/joint/{joint_petrophysical => joint_petrophysics}/driver.py (90%) rename simpeg_drivers/joint/{joint_petrophysical => joint_petrophysics}/options.py (91%) diff --git a/simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json similarity index 100% rename from simpeg_drivers-assets/uijson/joint_pgi_inversion.ui.json rename to simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json diff --git a/simpeg_drivers/__init__.py b/simpeg_drivers/__init__.py index 254bf018..ae8b0784 100644 --- a/simpeg_drivers/__init__.py +++ b/simpeg_drivers/__init__.py @@ -64,6 +64,24 @@ def assets_path() -> Path: "inversion": "DCBatch2DInversionDriver", }, ), + "fdem": ( + "simpeg_drivers.electromagnetics.frequency_domain.driver", + { + "forward": "FDEMForwardDriver", + "inversion": "FDEMInversionDriver", + }, + ), + "fdem 1d": ( + "simpeg_drivers.electromagnetics.frequency_domain_1d.driver", + { + "forward": "FDEM1DForwardDriver", + "inversion": "FDEM1DInversionDriver", + }, + ), + "gravity": ( + "simpeg_drivers.potential_fields.gravity.driver", + {"forward": "GravityForwardDriver", "inversion": "GravityInversionDriver"}, + ), "induced polarization 3d": ( "simpeg_drivers.electricals.induced_polarization.three_dimensions.driver", { @@ -85,27 +103,38 @@ def assets_path() -> Path: "inversion": "IPBatch2DInversionDriver", }, ), + "joint cross gradient": ( + "simpeg_drivers.joint.joint_cross_gradient.driver", + {"inversion": "JointCrossGradientDriver"}, + ), + "joint petrophysics": ( + "simpeg_drivers.joint.joint_petrophysics.driver", + {"inversion": "JointPetrophysicsDriver"}, + ), "joint surveys": ( "simpeg_drivers.joint.joint_surveys.driver", {"inversion": "JointSurveyDriver"}, ), - "fdem": ( - "simpeg_drivers.electromagnetics.frequency_domain.driver", + "magnetic scalar": ( + "simpeg_drivers.potential_fields.magnetic_scalar.driver", { - "forward": "FDEMForwardDriver", - "inversion": "FDEMInversionDriver", + "forward": "MagneticForwardDriver", + "inversion": "MagneticInversionDriver", }, ), - "fdem 1d": ( - "simpeg_drivers.electromagnetics.frequency_domain_1d.driver", + "magnetic vector": ( + "simpeg_drivers.potential_fields.magnetic_vector.driver", { - "forward": "FDEM1DForwardDriver", - "inversion": "FDEM1DInversionDriver", + "forward": "MVIForwardDriver", + "inversion": "MVIInversionDriver", }, ), - "joint cross gradient": ( - "simpeg_drivers.joint.joint_cross_gradient.driver", - {"inversion": "JointCrossGradientDriver"}, + "magnetotellurics": ( + "simpeg_drivers.natural_sources.magnetotellurics.driver", + { + "forward": "MTForwardDriver", + "inversion": "MTInversionDriver", + }, ), "tdem": ( "simpeg_drivers.electromagnetics.time_domain.driver", @@ -121,33 +150,8 @@ def assets_path() -> Path: "inversion": "TDEM1DInversionDriver", }, ), - "magnetotellurics": ( - "simpeg_drivers.natural_sources.magnetotellurics.driver", - { - "forward": "MTForwardDriver", - "inversion": "MTInversionDriver", - }, - ), "tipper": ( "simpeg_drivers.natural_sources.tipper.driver", {"forward": "TipperForwardDriver", "inversion": "TipperInversionDriver"}, ), - "gravity": ( - "simpeg_drivers.potential_fields.gravity.driver", - {"forward": "GravityForwardDriver", "inversion": "GravityInversionDriver"}, - ), - "magnetic scalar": ( - "simpeg_drivers.potential_fields.magnetic_scalar.driver", - { - "forward": "MagneticForwardDriver", - "inversion": "MagneticInversionDriver", - }, - ), - "magnetic vector": ( - "simpeg_drivers.potential_fields.magnetic_vector.driver", - { - "forward": "MVIForwardDriver", - "inversion": "MVIInversionDriver", - }, - ), } diff --git a/simpeg_drivers/joint/joint_petrophysical/__init__.py b/simpeg_drivers/joint/joint_petrophysics/__init__.py similarity index 100% rename from simpeg_drivers/joint/joint_petrophysical/__init__.py rename to simpeg_drivers/joint/joint_petrophysics/__init__.py diff --git a/simpeg_drivers/joint/joint_petrophysical/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py similarity index 90% rename from simpeg_drivers/joint/joint_petrophysical/driver.py rename to simpeg_drivers/joint/joint_petrophysics/driver.py index 5ae07419..50e6f031 100644 --- a/simpeg_drivers/joint/joint_petrophysical/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -25,14 +25,14 @@ ) from simpeg_drivers.joint.driver import BaseJointDriver -from .options import JointPetrophysicalOptions +from .options import JointPetrophysicsOptions -class JointPetrophysicalDriver(BaseJointDriver): - _options_class = JointPetrophysicalOptions +class JointPetrophysicsDriver(BaseJointDriver): + _options_class = JointPetrophysicsOptions _validations = None - def __init__(self, params: JointPetrophysicalOptions): + def __init__(self, params: JointPetrophysicsOptions): self._wires = None self._directives = None diff --git a/simpeg_drivers/joint/joint_petrophysical/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py similarity index 91% rename from simpeg_drivers/joint/joint_petrophysical/options.py rename to simpeg_drivers/joint/joint_petrophysics/options.py index 4c5efe07..899fe98d 100644 --- a/simpeg_drivers/joint/joint_petrophysical/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -22,7 +22,7 @@ from simpeg_drivers.joint.options import BaseJointOptions -class JointPetrophysicalOptions(BaseJointOptions): +class JointPetrophysicsOptions(BaseJointOptions): """ Joint Petrophysically Guided Inversion (PGI) driver. @@ -32,13 +32,13 @@ class JointPetrophysicalOptions(BaseJointOptions): name: ClassVar[str] = "Petrophysically Guided Inversion (PGI)" default_ui_json: ClassVar[Path] = ( - assets_path() / "uijson/joint_petrophysical_inversion.ui.json" + assets_path() / "uijson/joint_petrophysics_inversion.ui.json" ) title: str = "Joint Petrophysically Guided Inversion (PGI)" physical_property: list[str] = [""] - inversion_type: str = "joint petrophysical" + inversion_type: str = "joint petrophysics" mesh: Octree geo_model: ReferencedData diff --git a/tests/run_tests/driver_pgi_homogeneous_test.py b/tests/run_tests/driver_pgi_homogeneous_test.py index 8544afc0..6978e599 100644 --- a/tests/run_tests/driver_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_pgi_homogeneous_test.py @@ -18,8 +18,8 @@ from geoh5py.workspace import Workspace from pytest import raises -from simpeg_drivers.joint.joint_petrophysical.driver import JointPetrophysicalDriver -from simpeg_drivers.joint.joint_petrophysical.options import JointPetrophysicalOptions +from simpeg_drivers.joint.joint_petrophysics.driver import JointPetrophysicsDriver +from simpeg_drivers.joint.joint_petrophysics.options import JointPetrophysicsOptions from simpeg_drivers.options import ActiveCellsOptions from simpeg_drivers.potential_fields import ( GravityForwardOptions, @@ -38,7 +38,7 @@ def test_homogeneous_fwr_run( tmp_path: Path, - n_grid_points=3, + n_grid_points=2, refinement=(2,), ): # Run the forward @@ -51,9 +51,9 @@ def test_homogeneous_fwr_run( refinement=refinement, flatten=False, ) - with geoh5.open(): - model.values[(mesh.centroids[:, 0] > 0) & (model.values == 0)] = -0.1 - geoh5.update_attribute(model, "values") + # with geoh5.open(): + # model.values[(mesh.centroids[:, 0] > 0) & (model.values == 0)] = -0.1 + # geoh5.update_attribute(model, "values") active_cells = ActiveCellsOptions(topography_object=topography) params = GravityForwardOptions( @@ -105,7 +105,7 @@ def test_homogeneous_run( # Run the inverse active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + GravityInversionOptions( geoh5=geoh5, mesh=mesh, active_cells=active_cells, @@ -115,23 +115,22 @@ def test_homogeneous_run( gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, - max_global_iterations=max_iterations, - initial_beta_ratio=1e-2, - percentile=100, store_sensitivities="ram", save_sensitivities=True, ) grav_group = geoh5.get_entity("Gravity Inversion")[0] - params = JointPetrophysicalOptions( + params = JointPetrophysicsOptions( active_cells=active_cells, geoh5=geoh5, group_a=grav_group, mesh=mesh, geo_model=geo_model, + initial_beta_ratio=1e-2, + max_global_iterations=max_iterations, ) - driver = JointPetrophysicalDriver(params) + driver = JointPetrophysicsDriver(params) driver.run() # with Workspace(driver.params.geoh5.h5file) as run_ws: From 283ac8eb1eaf204e6397f27b739a811162d8967b Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 9 May 2025 15:24:04 -0400 Subject: [PATCH 05/20] Rename geomodel to petrophysics. First run through with PGI reg --- .../joint_petrophysics_inversion.ui.json | 4 +- .../uijson/joint_surveys_inversion.ui.json | 2 +- .../uijson/tile_estimator.ui.json | 2 +- simpeg_drivers/components/models.py | 63 ++++++++--- simpeg_drivers/joint/driver.py | 3 + .../joint/joint_petrophysics/driver.py | 102 +++++++++++++++++- .../joint/joint_petrophysics/options.py | 4 +- .../run_tests/driver_pgi_homogeneous_test.py | 8 +- 8 files changed, 161 insertions(+), 27 deletions(-) diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index 2bd6ae4f..ed086acf 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -75,12 +75,12 @@ "enabled": true, "tooltip": "Select a mesh containing a reference model representing homogeneous units" }, - "geo_model": { + "petrophysics_model": { "association": [ "Cell" ], "dataType": "Referenced", - "group": "Geological model", + "group": "Petrophysical model", "main": true, "label": "Model", "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json index 288c015b..05971524 100644 --- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json @@ -1,6 +1,6 @@ { "version": "0.3.0-alpha.4", - "title": "SimPEG Joint Surveys Inversion", + "title": "Joint Surveys Inversion", "icon": "model", "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", "conda_environment": "simpeg_drivers", diff --git a/simpeg_drivers-assets/uijson/tile_estimator.ui.json b/simpeg_drivers-assets/uijson/tile_estimator.ui.json index 8957be59..41c37955 100644 --- a/simpeg_drivers-assets/uijson/tile_estimator.ui.json +++ b/simpeg_drivers-assets/uijson/tile_estimator.ui.json @@ -1,6 +1,6 @@ { "version": "0.3.0-alpha.4", - "title": "SimPEG Tile Estimation", + "title": "Tile Estimation", "icon": "", "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", "conda_environment": "simpeg_drivers", diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 46009499..a8fef150 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -17,7 +17,7 @@ from geoapps_utils.driver.driver import BaseDriver from geoapps_utils.utils.numerical import weighted_average from geoapps_utils.utils.transformations import rotate_xyz -from geoh5py.data import NumericData +from geoh5py.data import FloatData, NumericData, ReferencedData from simpeg.utils.mat_utils import ( cartesian2amplitude_dip_azimuth, dip_azimuth2cartesian, @@ -45,6 +45,7 @@ "x_norm", "y_norm", "z_norm", + "petrophysics", ] @@ -95,6 +96,7 @@ def __init__(self, driver: InversionDriver): self._x_norm = InversionModel(driver, "x_norm", is_vector=is_vector) self._y_norm = InversionModel(driver, "y_norm", is_vector=is_vector) self._z_norm = InversionModel(driver, "z_norm", is_vector=is_vector) + self._petrophysics = InversionModel(driver, "petrophysics", is_vector=False) @property def n_active(self) -> int: @@ -284,6 +286,13 @@ def length_scale_z(self) -> np.ndarray | None: return self._length_scale_z.model.copy() + @property + def petrophysics(self) -> np.ndarray | None: + if self._petrophysics.model is None: + return None + + return self._petrophysics.model.copy() + @property def gradient_dip(self) -> np.ndarray | None: if self._gradient_dip.model is None: @@ -406,7 +415,7 @@ def _initialize(self): inducing field. """ if self.model_type in ["starting", "reference", "conductivity"]: - model = self._get(self.model_type + "_model") + model = self._get(self.model_type) if self.is_vector: inclination = self._get(self.model_type + "_inclination") @@ -506,8 +515,17 @@ def save_model(self): ): model_type = "resistivity" + entity_type = None + if isinstance(self._fetch_reference(self.model_type), NumericData): + entity_type = self._fetch_reference(self.model_type).entity_type + self.driver.inversion_mesh.entity.add_data( - {f"{model_type}_model": {"values": remapped_model}} + { + f"{model_type}_model": { + "values": remapped_model, + "entity_type": entity_type, + } + } ) def edit_ndv_model(self, model): @@ -530,9 +548,22 @@ def edit_ndv_model(self, model): and data_obj[0].values is not None ): values = data_obj[0].values.copy() - values[~model.astype(bool)] = np.nan + values[~model.astype(bool)] = ( + np.nan if isinstance(data_obj[0], FloatData) else 0 + ) data_obj[0].values = values + def _fetch_reference(self, name: str) -> NumericData | None: + if name in ["petrophysics", "starting", "reference", "conductivity"]: + name += "_model" + + value = getattr(self.driver.params, name, None) + + if "reference" in name and value is None: + value = self._fetch_reference("starting") + + return value + def _get(self, name: str) -> np.ndarray | None: """ Return model vector from value stored in params class. @@ -540,18 +571,12 @@ def _get(self, name: str) -> np.ndarray | None: :param name: model name as stored in self.driver.params :return: vector with appropriate size for problem. """ + model = self._fetch_reference(name) - if hasattr(self.driver.params, name): - model = getattr(self.driver.params, name) - - if "reference" in name and model is None: - model = self._get("starting") - - model_values = self._get_value(model) - - return model_values + if model is None: + return None - return None + return self._get_value(model) def _get_value(self, model: float | NumericData) -> np.ndarray: """ @@ -584,9 +609,15 @@ def obj_2_mesh(data, destination) -> np.ndarray: """ xyz_out = destination.locations xyz_in = data.parent.locations - full_vector = weighted_average(xyz_in, xyz_out, [data.values], n=1)[0] - return full_vector + values = data.values.astype(float) + + if isinstance(data, ReferencedData): + values[values == 0] = np.nan + + full_vector = weighted_average(xyz_in, xyz_out, [values], n=1)[0] + + return full_vector.astype(data.values.dtype) @property def model_type(self): diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 2a74c51c..fadff5f3 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -268,6 +268,9 @@ def validate_create_mesh(self): def validate_create_models(self): """Create stacked model vectors from all drivers provided.""" for model_type in self.models.model_types: + if model_type == "petrophysics": + continue + model = np.zeros(self.models.n_active * len(self.mapping)) for child_driver in self.drivers: diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 50e6f031..2204c0b6 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -15,7 +15,7 @@ import numpy as np from geoh5py.groups.property_group_type import GroupTypeEnum from geoh5py.shared.utils import fetch_active_workspace -from simpeg import directives, maps +from simpeg import directives, maps, utils from simpeg.objective_function import ComboObjectiveFunction from simpeg.regularization import PGI @@ -35,6 +35,7 @@ class JointPetrophysicsDriver(BaseJointDriver): def __init__(self, params: JointPetrophysicsOptions): self._wires = None self._directives = None + self._gaussian_model = None super().__init__(params) @@ -48,5 +49,104 @@ def get_regularization(self): """ regularizations = super().get_regularization() reg_list, multipliers = self._overload_regularization(regularizations) + wires = [(f"m{ind}", proj) for ind, proj in enumerate(self.mapping)] + reg_list.append( + PGI( + gmmref=self.gaussian_model, + mesh=self.inversion_mesh.mesh, + active_cells=self.models.active_cells, + wiresmap=maps.Wires(*wires), + alpha_pgi=1.0, + alpha_x=1.0, + alpha_y=1.0, + alpha_z=1.0, + reference_model=self.models.reference, + ) + ) + # TODO: Assign value from UIjson + multipliers.append(1.0) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) + + @property + def gaussian_model(self): + """Gaussian mixture model.""" + if self._gaussian_model is None: + self._gaussian_model = utils.WeightedGaussianMixture( + n_components=len( + self.geo_units + ), # number of rock units: bckgrd, PK, HK + mesh=self.inversion_mesh.mesh, # inversion mesh + actv=self.models.active_cells, # actv cells + covariance_type="diag", # diagonal covariances + ) + rng = np.random.default_rng(seed=518936) + rand_model = rng.normal(size=(self.models.n_active, self.n_units)) + self._gaussian_model.fit(rand_model) + + # TODO: Use the corresponding data_maps from the reference data + # when available to define the means and covariances and weights + self._gaussian_model.means_ = self.means + # set phys. prop covariances for each unit + self._gaussian_model.covariances_ = self.covariances + # set global proportions; low-impact as long as not 0 or 1 (total=1) + self._gaussian_model.weights_ = self.weights + + # important after setting cov. manually: compute precision matrices and cholesky + self._gaussian_model.compute_clusters_precisions() + + return self._gaussian_model + + @property + def n_units(self) -> int: + """Number of model units.""" + return len(self.geo_units) + + @property + def geo_units(self) -> dict: + """Model units.""" + units = np.unique(self.models.petrophysics) + model_map = { + unit: self.params.petrophysics_model.entity_type.value_map()[unit] + for unit in units + if unit != 0 + } + + return model_map + + @property + def means(self) -> np.ndarray: + """ + Means of the Gaussian mixture model. + + TODO: Set the means based on the model units when made available. + """ + means = [] + for mapping in self.mapping: + model_vec = mapping @ self.models.starting + unit_mean = [] + for uid in self.geo_units: + unit_ind = self.models.petrophysics == uid + start_values = np.mean(model_vec[unit_ind]) + unit_mean.append(start_values) + + means.append(np.r_[unit_mean]) + return self.gaussian_model.means_ + + @property + def covariances(self) -> np.ndarray: + """ + Covariances of the Gaussian mixture model. + + TODO: Set the covariances based on the model units when made available. + """ + return np.ones((self.n_units, len(self.drivers))) + + @property + def weights(self) -> np.ndarray: + """ + Weights of the Gaussian mixture model. + + TODO: Set the weights based on the model units when made available. + """ + return np.ones(self.n_units) diff --git a/simpeg_drivers/joint/joint_petrophysics/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py index 899fe98d..b0d0562d 100644 --- a/simpeg_drivers/joint/joint_petrophysics/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -27,7 +27,7 @@ class JointPetrophysicsOptions(BaseJointOptions): Joint Petrophysically Guided Inversion (PGI) driver. :param mesh: The global mesh entity containing the reference geology. - :param geo_model: The reference geology data. + :param petrophysics: The reference geology data. """ name: ClassVar[str] = "Petrophysically Guided Inversion (PGI)" @@ -41,7 +41,7 @@ class JointPetrophysicsOptions(BaseJointOptions): inversion_type: str = "joint petrophysics" mesh: Octree - geo_model: ReferencedData + petrophysics_model: ReferencedData group_a: SimPEGGroup group_a_multiplier: float | None = 1.0 group_b: SimPEGGroup | None = None diff --git a/tests/run_tests/driver_pgi_homogeneous_test.py b/tests/run_tests/driver_pgi_homogeneous_test.py index 6978e599..47f24f17 100644 --- a/tests/run_tests/driver_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_pgi_homogeneous_test.py @@ -93,9 +93,9 @@ def test_homogeneous_run( vals[model.values == value] = ind + 1 topography = geoh5.get_entity("topography")[0] - geo_model = mesh.add_data( + petrophysics = mesh.add_data( { - "geo_model": { + "petrophysics": { "values": vals, "type": "REFERENCED", "value_map": mapping, @@ -126,8 +126,8 @@ def test_homogeneous_run( geoh5=geoh5, group_a=grav_group, mesh=mesh, - geo_model=geo_model, - initial_beta_ratio=1e-2, + petrophysics_model=petrophysics, + initial_beta_ratio=1e2, max_global_iterations=max_iterations, ) driver = JointPetrophysicsDriver(params) From 0b32d4cbf92ee4ec68b20021c77b949aa3182aa2 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 13 May 2025 10:07:46 -0700 Subject: [PATCH 06/20] Work on directives for PGI --- simpeg_drivers/components/models.py | 2 +- .../joint/joint_petrophysics/driver.py | 92 +++++++++++++++---- 2 files changed, 75 insertions(+), 19 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index a8fef150..1c4e3d60 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -588,7 +588,7 @@ def _get_value(self, model: float | NumericData) -> np.ndarray: """ if isinstance(model, NumericData): model = self.obj_2_mesh(model, self.driver.inversion_mesh.entity) - model = self.driver.inversion_mesh.permutation @ model + model = (self.driver.inversion_mesh.permutation @ model).astype(model.dtype) else: nc = self.driver.inversion_mesh.mesh.n_cells if isinstance(model, int | float): diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 2204c0b6..30b0c5a7 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -17,7 +17,7 @@ from geoh5py.shared.utils import fetch_active_workspace from simpeg import directives, maps, utils from simpeg.objective_function import ComboObjectiveFunction -from simpeg.regularization import PGI +from simpeg.regularization.pgi import PGIsmallness from simpeg_drivers.components.factories import ( DirectivesFactory, @@ -35,13 +35,52 @@ class JointPetrophysicsDriver(BaseJointDriver): def __init__(self, params: JointPetrophysicsOptions): self._wires = None self._directives = None + self._membership: np.ndarray = None self._gaussian_model = None + self._pgi_regularization: PGIsmallness | None = None super().__init__(params) with fetch_active_workspace(self.workspace, mode="r+"): self.initialize() + @property + def directives(self): + if getattr(self, "_directives", None) is None and not self.params.forward_only: + with fetch_active_workspace(self.workspace, mode="r+"): + directives_list = self._get_drivers_directives() + directives_list.append( + directives.PGI_UpdateParameters( + update_gmm=True, + kappa=0.0, + fixed_membership=np.c_[ + np.arange(self.models.n_active), self.membership + ], + ) + ) + directives_list += self._get_global_model_save_directives() + directives_list.append( + directives.SavePGIModel( + self.inversion_mesh.entity, + self.pgi_regularization, + maps.InjectActiveCells( + self.inversion_mesh.mesh, self.models.active_cells, 0 + ), + self.params.petrophysics_model.entity_type.value_map(), + ) + ) + directives_list.append( + directives.SaveLPModelGroup( + self.inversion_mesh.entity, + self._directives.update_irls_directive, + ) + ) + directives_list.append(self._directives.save_iteration_log_files) + self._directives.directive_list = ( + self._directives.inversion_directives + directives_list + ) + return self._directives + def get_regularization(self): """ Create a flat ComboObjectiveFunction from all drivers provided and @@ -49,22 +88,9 @@ def get_regularization(self): """ regularizations = super().get_regularization() reg_list, multipliers = self._overload_regularization(regularizations) - wires = [(f"m{ind}", proj) for ind, proj in enumerate(self.mapping)] - reg_list.append( - PGI( - gmmref=self.gaussian_model, - mesh=self.inversion_mesh.mesh, - active_cells=self.models.active_cells, - wiresmap=maps.Wires(*wires), - alpha_pgi=1.0, - alpha_x=1.0, - alpha_y=1.0, - alpha_z=1.0, - reference_model=self.models.reference, - ) - ) + reg_list.append(self.pgi_regularization) # TODO: Assign value from UIjson - multipliers.append(1.0) + multipliers.append(1.0e4) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) @@ -114,6 +140,16 @@ def geo_units(self) -> dict: return model_map + @property + def membership(self) -> np.ndarray[np.int]: + if self._membership is None: + self._membership = np.zeros(self.models.n_active, dtype=int) + for ii, unit in enumerate(self.geo_units): + unit_ind = self.models.petrophysics == unit + self._membership[unit_ind] = ii + + return self._membership + @property def means(self) -> np.ndarray: """ @@ -130,7 +166,9 @@ def means(self) -> np.ndarray: start_values = np.mean(model_vec[unit_ind]) unit_mean.append(start_values) - means.append(np.r_[unit_mean]) + means.append(np.c_[unit_mean]) + self.gaussian_model.means_ = np.hstack(means) + return self.gaussian_model.means_ @property @@ -149,4 +187,22 @@ def weights(self) -> np.ndarray: TODO: Set the weights based on the model units when made available. """ - return np.ones(self.n_units) + return np.ones(self.n_units) / self.n_units + + @property + def pgi_regularization(self): + """ + Create a PGI regularization object for the inversion. + """ + if self._pgi_regularization is None: + wires = [(f"m{ind}", proj) for ind, proj in enumerate(self.mapping)] + maplist = [maps.IdentityMap(nP=self.models.n_active)] * len(self.mapping) + self._pgi_regularization = PGIsmallness( + gmmref=self.gaussian_model, + mesh=self.inversion_mesh.mesh, + active_cells=self.models.active_cells, + wiresmap=maps.Wires(*wires), + maplist=maplist, + reference_model=self.models.reference, + ) + return self._pgi_regularization From b43d9cdfe495b6e782bd0d0951398ffdb146e9ad Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 14 May 2025 16:09:06 -0700 Subject: [PATCH 07/20] Use reference model for petro group definition --- .../joint_petrophysics_inversion.ui.json | 10 ++++------ .../joint/joint_petrophysics/driver.py | 20 +++++++++++++++---- .../run_tests/driver_pgi_homogeneous_test.py | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index ed086acf..cbc20c6c 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -66,7 +66,7 @@ "tooltip": "Constant multiplier for the data misfit function for Group C" }, "mesh": { - "group": "Geological model", + "group": "Petrophysical model", "main": true, "label": "Mesh", "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", @@ -141,12 +141,10 @@ }, "alpha_s": { "min": 0.0, - "group": "Regularization", - "groupOptional": true, - "label": "Smallness weight", + "group": "Petrophysical model", + "label": "Reference weight", "value": 1.0, - "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model", - "enabled": false + "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model" }, "length_scale_x": { "min": 0.0, diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 30b0c5a7..ae12dc94 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -66,7 +66,7 @@ def directives(self): maps.InjectActiveCells( self.inversion_mesh.mesh, self.models.active_cells, 0 ), - self.params.petrophysics_model.entity_type.value_map(), + self.params.petrophysics_model.entity_type.value_map, ) ) directives_list.append( @@ -90,7 +90,7 @@ def get_regularization(self): reg_list, multipliers = self._overload_regularization(regularizations) reg_list.append(self.pgi_regularization) # TODO: Assign value from UIjson - multipliers.append(1.0e4) + multipliers.append(self.params.alpha_s) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) @@ -107,7 +107,7 @@ def gaussian_model(self): covariance_type="diag", # diagonal covariances ) rng = np.random.default_rng(seed=518936) - rand_model = rng.normal(size=(self.models.n_active, self.n_units)) + rand_model = rng.normal(size=(self.models.n_active, len(self.mapping))) self._gaussian_model.fit(rand_model) # TODO: Use the corresponding data_maps from the reference data @@ -159,7 +159,7 @@ def means(self) -> np.ndarray: """ means = [] for mapping in self.mapping: - model_vec = mapping @ self.models.starting + model_vec = mapping @ self.models.reference unit_mean = [] for uid in self.geo_units: unit_ind = self.models.petrophysics == uid @@ -206,3 +206,15 @@ def pgi_regularization(self): reference_model=self.models.reference, ) return self._pgi_regularization + + def _overload_regularization(self, regularization: ComboObjectiveFunction): + """ + Create a flat ComboObjectiveFunction from all drivers provided and + add cross-gradient regularization for all combinations of model parameters. + """ + + reg_list, multipliers = super()._overload_regularization(regularization) + for reg in reg_list: + reg.multipliers[0] = 0 + + return reg_list, multipliers diff --git a/tests/run_tests/driver_pgi_homogeneous_test.py b/tests/run_tests/driver_pgi_homogeneous_test.py index 47f24f17..16a70fcb 100644 --- a/tests/run_tests/driver_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_pgi_homogeneous_test.py @@ -111,7 +111,7 @@ def test_homogeneous_run( active_cells=active_cells, data_object=gz.parent, starting_model=1e-4, - reference_model=0.0, + reference_model=model, gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, From c37483378c5618a34e62a27f74483b923844c678 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 16 May 2025 09:55:54 -0700 Subject: [PATCH 08/20] Force alpha_s to be zero for now. --- simpeg_drivers/joint/joint_petrophysics/driver.py | 14 +++++++++----- ...est.py => driver_joint_pgi_homogeneous_test.py} | 0 2 files changed, 9 insertions(+), 5 deletions(-) rename tests/run_tests/{driver_pgi_homogeneous_test.py => driver_joint_pgi_homogeneous_test.py} (100%) diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index ae12dc94..450cadc1 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -63,10 +63,14 @@ def directives(self): directives.SavePGIModel( self.inversion_mesh.entity, self.pgi_regularization, - maps.InjectActiveCells( - self.inversion_mesh.mesh, self.models.active_cells, 0 - ), - self.params.petrophysics_model.entity_type.value_map, + self.geo_units, + [driver.params.physical_property for driver in self.drivers], + transforms=[ + maps.InjectActiveCells( + self.inversion_mesh.mesh, self.models.active_cells, 0 + ) + ], + value_map=self.params.petrophysics_model.entity_type.value_map, ) ) directives_list.append( @@ -215,6 +219,6 @@ def _overload_regularization(self, regularization: ComboObjectiveFunction): reg_list, multipliers = super()._overload_regularization(regularization) for reg in reg_list: - reg.multipliers[0] = 0 + reg.alpha_s = 0.0 return reg_list, multipliers diff --git a/tests/run_tests/driver_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py similarity index 100% rename from tests/run_tests/driver_pgi_homogeneous_test.py rename to tests/run_tests/driver_joint_pgi_homogeneous_test.py From 0901d836a861ba915ce57384bece0c01522c5e8e Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 21 May 2025 15:30:36 -0700 Subject: [PATCH 09/20] Fix issue with overloading alpha's --- simpeg_drivers/joint/driver.py | 5 ++++- tests/run_tests/driver_joint_pgi_homogeneous_test.py | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index fadff5f3..a55a0c64 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -268,7 +268,10 @@ def validate_create_mesh(self): def validate_create_models(self): """Create stacked model vectors from all drivers provided.""" for model_type in self.models.model_types: - if model_type == "petrophysics": + if ( + model_type == "petrophysics" + or getattr(self.models, f"_{model_type}").model is not None + ): continue model = np.zeros(self.models.n_active * len(self.mapping)) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 16a70fcb..898e9972 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -128,6 +128,9 @@ def test_homogeneous_run( mesh=mesh, petrophysics_model=petrophysics, initial_beta_ratio=1e2, + length_scale_x=0.0, + length_scale_y=0.0, + length_scale_z=0.0, max_global_iterations=max_iterations, ) driver = JointPetrophysicsDriver(params) From 739997a6926fd16fac05e1a9c40aa6258a76df19 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 26 May 2025 11:27:02 -0700 Subject: [PATCH 10/20] Fix issue with mapping models. --- .../joint_petrophysics_inversion.ui.json | 1 + simpeg_drivers/driver.py | 4 +- simpeg_drivers/joint/driver.py | 65 +++++++++++-------- .../joint/joint_petrophysics/driver.py | 52 +++++++++------ 4 files changed, 72 insertions(+), 50 deletions(-) diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index cbc20c6c..86364651 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -152,6 +152,7 @@ "label": "X-smoothness weight", "tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness", "value": 1.0, + "groupOptional": true, "enabled": false }, "length_scale_y": { diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 1d2cb02f..7b8dac2f 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -541,8 +541,8 @@ def get_regularization(self): fun, neighbors, comp, - self.models.gradient_dip, - self.models.gradient_direction, + mapping * self.models.gradient_dip, + mapping * self.models.gradient_direction, ) average_op = getattr( diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index a55a0c64..0822f4f0 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -14,6 +14,7 @@ from __future__ import annotations import sys +from logging import getLogger from pathlib import Path import numpy as np @@ -39,6 +40,9 @@ from simpeg_drivers.utils.utils import simpeg_group_to_driver +logger = getLogger(__name__) + + class BaseJointDriver(InversionDriver): def __init__(self, params: BaseJointOptions): self._directives = None @@ -118,6 +122,7 @@ def initialize(self): self.models.active_cells = global_actives for driver, wire in zip(self.drivers, self.wires, strict=True): + logger.info("Initializing driver %s", driver.params.name) projection = TileMap( self.inversion_mesh.mesh, global_actives, @@ -141,7 +146,6 @@ def initialize(self): ) driver.data_misfit.multipliers = multipliers - self.validate_create_models() @property @@ -268,19 +272,27 @@ def validate_create_mesh(self): def validate_create_models(self): """Create stacked model vectors from all drivers provided.""" for model_type in self.models.model_types: - if ( - model_type == "petrophysics" - or getattr(self.models, f"_{model_type}").model is not None - ): + if model_type == "petrophysics": continue - model = np.zeros(self.models.n_active * len(self.mapping)) + model = getattr(self.models, f"_{model_type}").model - for child_driver in self.drivers: - model_local_values = getattr(child_driver.models, model_type) + # If set on joint driver, repeat for all drivers + if model is not None: + model = np.kron(np.ones(len(self.mapping)), model) - if model_local_values is not None: - projection = child_driver.data_misfit.model_map.deriv(model).T + # Concatenate models from individual drivers projected onto the global mesh + else: + model = [] + vec = np.zeros(self.models.n_active * len(self.mapping)) + for child_driver in self.drivers: + model_local_values = getattr(child_driver.models, model_type) + + if model_local_values is None: + model.append(None) + continue + + projection = child_driver.data_misfit.model_map.deriv(vec).T if isinstance(model_local_values, float): model_local_values = ( @@ -288,7 +300,22 @@ def validate_create_models(self): ) norm = np.array(np.sum(projection, axis=1)).flatten() - model += (projection * model_local_values) / (norm + 1e-8) + model.append((projection * model_local_values) / (norm + 1e-8)) + + # Mostly for rotated gradient mode + is_none = [val is None for val in model] + if any(is_none): + if not all(is_none): + logger.warning( + "Some drivers do not have a model of type " + "'%s' set. Please assign a value to individual drivers" + " or use the joint driver options to set it globally.\n" + "Parameter ignored for the inversion.", + model_type, + ) + model = None + else: + model = np.sum(model, axis=0) if model is not None: getattr(self.models, f"_{model_type}").model = model @@ -425,22 +452,6 @@ def _overload_regularization(self, regularization: ComboObjectiveFunction): for mapping in driver.mapping: reg_block.append(reg_dict[self._mapping[driver, mapping]]) - # Pass down regularization parameters from driver. - for param in [ - "alpha_s", - "length_scale_x", - "length_scale_y", - "length_scale_z", - "s_norm", - "x_norm", - "y_norm", - "z_norm", - "gradient_type", - ]: - if getattr(self.params, param) is None: - for reg in reg_block: - setattr(reg, param, getattr(driver.params, param)) - driver.regularization = ComboObjectiveFunction(objfcts=reg_block) return reg_list, multipliers diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 450cadc1..6ed88add 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -34,6 +34,7 @@ class JointPetrophysicsDriver(BaseJointDriver): def __init__(self, params: JointPetrophysicsOptions): self._wires = None + self._class_mapping: np.ndarray | None = None self._directives = None self._membership: np.ndarray = None self._gaussian_model = None @@ -66,11 +67,14 @@ def directives(self): self.geo_units, [driver.params.physical_property for driver in self.drivers], transforms=[ + lambda x: np.r_[list(self.geo_units.keys())][ + self.class_mapping + ][x.astype(int)], maps.InjectActiveCells( self.inversion_mesh.mesh, self.models.active_cells, 0 - ) + ), ], - value_map=self.params.petrophysics_model.entity_type.value_map, + reference_type=self.params.petrophysics_model.entity_type, ) ) directives_list.append( @@ -103,30 +107,33 @@ def gaussian_model(self): """Gaussian mixture model.""" if self._gaussian_model is None: self._gaussian_model = utils.WeightedGaussianMixture( - n_components=len( - self.geo_units - ), # number of rock units: bckgrd, PK, HK - mesh=self.inversion_mesh.mesh, # inversion mesh - actv=self.models.active_cells, # actv cells - covariance_type="diag", # diagonal covariances + n_components=len(self.geo_units), + mesh=self.inversion_mesh.mesh, + actv=self.models.active_cells, + covariance_type="diag", + random_state=1, ) - rng = np.random.default_rng(seed=518936) - rand_model = rng.normal(size=(self.models.n_active, len(self.mapping))) - self._gaussian_model.fit(rand_model) - # TODO: Use the corresponding data_maps from the reference data # when available to define the means and covariances and weights - self._gaussian_model.means_ = self.means + self._gaussian_model.means_ = self.means[self.class_mapping] # set phys. prop covariances for each unit - self._gaussian_model.covariances_ = self.covariances + self._gaussian_model.covariances_ = self.covariances[self.class_mapping] # set global proportions; low-impact as long as not 0 or 1 (total=1) - self._gaussian_model.weights_ = self.weights + self._gaussian_model.weights_ = self.weights[self.class_mapping] # important after setting cov. manually: compute precision matrices and cholesky self._gaussian_model.compute_clusters_precisions() return self._gaussian_model + @property + def class_mapping(self) -> dict: + """Mapping of model units to geophysical properties.""" + if getattr(self, "_class_mapping", None) is None: + self._class_mapping = np.argsort(self.weights)[::-1] + + return self._class_mapping + @property def n_units(self) -> int: """Number of model units.""" @@ -147,10 +154,10 @@ def geo_units(self) -> dict: @property def membership(self) -> np.ndarray[np.int]: if self._membership is None: - self._membership = np.zeros(self.models.n_active, dtype=int) + self._membership = np.empty(self.models.n_active, dtype=int) for ii, unit in enumerate(self.geo_units): unit_ind = self.models.petrophysics == unit - self._membership[unit_ind] = ii + self._membership[unit_ind] = self.class_mapping[ii] return self._membership @@ -171,9 +178,8 @@ def means(self) -> np.ndarray: unit_mean.append(start_values) means.append(np.c_[unit_mean]) - self.gaussian_model.means_ = np.hstack(means) - return self.gaussian_model.means_ + return np.hstack(means) @property def covariances(self) -> np.ndarray: @@ -182,7 +188,7 @@ def covariances(self) -> np.ndarray: TODO: Set the covariances based on the model units when made available. """ - return np.ones((self.n_units, len(self.drivers))) + return np.ones((self.n_units, len(self.mapping))) @property def weights(self) -> np.ndarray: @@ -191,7 +197,11 @@ def weights(self) -> np.ndarray: TODO: Set the weights based on the model units when made available. """ - return np.ones(self.n_units) / self.n_units + weights = [] + volumes = self.inversion_mesh.mesh.cell_volumes[self.models.active_cells] + for uid in self.geo_units: + weights.append(volumes[self.models.petrophysics == uid].sum()) + return np.r_[weights] / np.sum(weights) @property def pgi_regularization(self): From 4de1403510bea13cc720df1e05e18fa28546fdaf Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 26 May 2025 12:50:59 -0700 Subject: [PATCH 11/20] Clean up test --- .../driver_joint_pgi_homogeneous_test.py | 228 +++++++++++++----- 1 file changed, 164 insertions(+), 64 deletions(-) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 898e9972..5a895c86 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -15,17 +15,38 @@ import numpy as np from geoapps_utils.utils.importing import GeoAppsError +from geoh5py.data import FloatData +from geoh5py.groups import SimPEGGroup from geoh5py.workspace import Workspace from pytest import raises +from simpeg_drivers.electricals import DC3DForwardOptions, DC3DInversionOptions +from simpeg_drivers.electricals.direct_current.three_dimensions.driver import ( + DC3DForwardDriver, + DC3DInversionDriver, +) from simpeg_drivers.joint.joint_petrophysics.driver import JointPetrophysicsDriver from simpeg_drivers.joint.joint_petrophysics.options import JointPetrophysicsOptions from simpeg_drivers.options import ActiveCellsOptions from simpeg_drivers.potential_fields import ( GravityForwardOptions, GravityInversionOptions, + MagneticInversionOptions, + MVIForwardOptions, + MVIInversionOptions, +) +from simpeg_drivers.potential_fields.gravity.driver import ( + GravityForwardDriver, + GravityInversionDriver, +) +from simpeg_drivers.potential_fields.magnetic_scalar.driver import ( + MagneticForwardDriver, + MagneticInversionDriver, +) +from simpeg_drivers.potential_fields.magnetic_vector.driver import ( + MVIForwardDriver, + MVIInversionDriver, ) -from simpeg_drivers.potential_fields.gravity.driver import GravityForwardDriver from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace from simpeg_drivers.utils.utils import get_inversion_output @@ -33,40 +54,70 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 0.0028055269276044915, "phi_d": 8.32e-05, "phi_m": 0.0038} +target_run = {"data_norm": 390.6585155910284, "phi_d": 2370, "phi_m": 0.543} def test_homogeneous_fwr_run( tmp_path: Path, - n_grid_points=2, + n_grid_points=3, refinement=(2,), ): - # Run the forward + # Create local problem A geoh5, mesh, model, survey, topography = setup_inversion_workspace( tmp_path, background=0.0, anomaly=0.75, + drape_height=15.0, + refinement=refinement, n_electrodes=n_grid_points, n_lines=n_grid_points, - refinement=refinement, - flatten=False, ) - # with geoh5.open(): - # model.values[(mesh.centroids[:, 0] > 0) & (model.values == 0)] = -0.1 - # geoh5.update_attribute(model, "values") + + # Change half the model + ind = mesh.centroids[:, 0] > 0 + model.values[ind] = 0.05 active_cells = ActiveCellsOptions(topography_object=topography) params = GravityForwardOptions( geoh5=geoh5, - mesh=model.parent, + mesh=mesh, active_cells=active_cells, - topography_object=topography, data_object=survey, starting_model=model, - gz_channel_bool=True, ) - fwr_driver = GravityForwardDriver(params) - fwr_driver.run() + fwr_driver_a = GravityForwardDriver(params) + + with geoh5.open(): + _, mesh, model, survey, _ = setup_inversion_workspace( + tmp_path, + geoh5=geoh5, + background=0.0, + anomaly=0.05, + drape_height=15.0, + refinement=refinement, + n_electrodes=n_grid_points, + n_lines=n_grid_points, + flatten=False, + ) + inducing_field = (50000.0, 90.0, 0.0) + # Change half the model + ind = mesh.centroids[:, 0] > 0 + model.values[ind] = 0.01 + + params = MVIForwardOptions( + geoh5=geoh5, + mesh=mesh, + active_cells=ActiveCellsOptions(topography_object=topography), + inducing_field_strength=inducing_field[0], + inducing_field_inclination=inducing_field[1], + inducing_field_declination=inducing_field[2], + data_object=survey, + starting_model=model, + ) + fwr_driver_b = MVIForwardDriver(params) + + fwr_driver_a.run() + fwr_driver_b.run() def test_homogeneous_run( @@ -81,71 +132,120 @@ def test_homogeneous_run( ) with Workspace(workpath, mode="r+") as geoh5: - gz = geoh5.get_entity("Iteration_0_gz")[0] + topography = geoh5.get_entity("topography")[0] + drivers = [] + orig_data = [] + for group_name in [ + "Gravity Forward", + "Magnetic Vector Forward", + ]: + group = geoh5.get_entity(group_name)[0] - mesh = geoh5.get_entity("mesh")[0] - model = mesh.get_entity("starting_model")[0] + if not isinstance(group, SimPEGGroup): + continue - mapping = {} - vals = np.zeros_like(model.values, dtype=int) - for ind, value in enumerate(np.unique(model.values)): - mapping[ind + 1] = f"Unit{ind}" - vals[model.values == value] = ind + 1 + mesh = group.get_entity("mesh")[0] + survey = group.get_entity("survey")[0] + petrophysics = None + if group_name == "Gravity Forward": + global_mesh = mesh.copy(parent=geoh5) + model = global_mesh.get_entity("starting_model")[0] - topography = geoh5.get_entity("topography")[0] - petrophysics = mesh.add_data( - { - "petrophysics": { - "values": vals, - "type": "REFERENCED", - "value_map": mapping, - } - } - ) + mapping = {} + vals = np.zeros_like(model.values, dtype=int) + for ind, value in enumerate(np.unique(model.values)): + mapping[ind + 1] = f"Unit{ind}" + vals[model.values == value] = ind + 1 - # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - GravityInversionOptions( - geoh5=geoh5, - mesh=mesh, - active_cells=active_cells, - data_object=gz.parent, - starting_model=1e-4, - reference_model=model, - gz_channel=gz, - gz_uncertainty=2e-3, - lower_bound=0.0, - store_sensitivities="ram", - save_sensitivities=True, - ) + topography = geoh5.get_entity("topography")[0] + petrophysics = global_mesh.add_data( + { + "petrophysics": { + "values": vals, + "type": "REFERENCED", + "value_map": mapping, + } + } + ) + + data = None + for child in survey.children: + if isinstance(child, FloatData): + data = child + + if data is None: + raise ValueError("No data found in survey") + orig_data.append(data.values) - grav_group = geoh5.get_entity("Gravity Inversion")[0] + ref_model = mesh.get_entity("starting_model")[0].copy(name="ref_model") + ref_model.values = ref_model.values / 2.0 + + if group.options["inversion_type"] == "gravity": + active_cells = ActiveCellsOptions(topography_object=topography) + params = GravityInversionOptions( + geoh5=geoh5, + mesh=mesh, + active_cells=active_cells, + data_object=survey, + gz_channel=data, + gz_uncertainty=1e-2, + starting_model=ref_model, + reference_model=ref_model, + ) + drivers.append(GravityInversionDriver(params)) + else: + params = MagneticInversionOptions( + geoh5=geoh5, + mesh=mesh, + active_cells=ActiveCellsOptions(topography_object=topography), + inducing_field_strength=group.options["inducing_field_strength"][ + "value" + ], + inducing_field_inclination=group.options[ + "inducing_field_inclination" + ]["value"], + inducing_field_declination=group.options[ + "inducing_field_declination" + ]["value"], + data_object=survey, + starting_model=ref_model, + reference_model=ref_model, + tile_spatial=1, + tmi_channel=data, + tmi_uncertainty=5e0, + ) + drivers.append(MagneticInversionDriver(params)) params = JointPetrophysicsOptions( active_cells=active_cells, geoh5=geoh5, - group_a=grav_group, - mesh=mesh, + group_a=drivers[0].params.out_group, + group_a_multiplier=1.0, + group_b=drivers[1].params.out_group, + group_b_multiplier=1.0, + mesh=global_mesh, + length_scale_x=1.0, + length_scale_y=1.0, + length_scale_z=1.0, petrophysics_model=petrophysics, initial_beta_ratio=1e2, - length_scale_x=0.0, - length_scale_y=0.0, - length_scale_z=0.0, max_global_iterations=max_iterations, ) driver = JointPetrophysicsDriver(params) driver.run() - # with Workspace(driver.params.geoh5.h5file) as run_ws: - # output = get_inversion_output( - # driver.params.geoh5.h5file, driver.params.out_group.uid - # ) - # - # if pytest: - # check_target(output, target_run) - # nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - # inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - # assert np.all(nan_ind == inactive_ind) + if pytest: + with Workspace(driver.params.geoh5.h5file) as run_ws: + output = get_inversion_output( + driver.params.geoh5.h5file, driver.params.out_group.uid + ) + output["data"] = np.hstack(orig_data) + check_target(output, target_run) + + out_group = run_ws.get_entity(driver.params.out_group.uid)[0] + mesh = out_group.get_entity("mesh")[0] + petro_model = mesh.get_entity("petrophysics_model")[0] + assert len(np.unique(petro_model.values)) == 4 if __name__ == "__main__": @@ -158,6 +258,6 @@ def test_homogeneous_run( test_homogeneous_run( Path("./"), - max_iterations=15, + max_iterations=20, pytest=False, ) From 22da2f9de30c4644ddc73f7926a6018ec22aef9a Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 26 May 2025 14:11:07 -0700 Subject: [PATCH 12/20] Fix test --- tests/run_tests/driver_joint_pgi_homogeneous_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 5a895c86..582fb0e4 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -135,6 +135,7 @@ def test_homogeneous_run( topography = geoh5.get_entity("topography")[0] drivers = [] orig_data = [] + petrophysics = None for group_name in [ "Gravity Forward", "Magnetic Vector Forward", @@ -146,7 +147,7 @@ def test_homogeneous_run( mesh = group.get_entity("mesh")[0] survey = group.get_entity("survey")[0] - petrophysics = None + if group_name == "Gravity Forward": global_mesh = mesh.copy(parent=geoh5) model = global_mesh.get_entity("starting_model")[0] From 566d0e97fccf19d55094fea4993feae2b0e31248 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 26 May 2025 15:36:16 -0700 Subject: [PATCH 13/20] Review comments --- .../uijson/joint_petrophysics_inversion.ui.json | 2 +- simpeg_drivers/joint/driver.py | 2 +- simpeg_drivers/joint/joint_petrophysics/driver.py | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index 86364651..95d201b5 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -1,6 +1,6 @@ { "version": "0.3.0-alpha.4", - "title": "Petrophysically Guided Inversion (PGI)", + "title": "Joint Petrophysically Guided Inversion (PGI)", "icon": "", "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", "conda_environment": "simpeg_drivers", diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 0822f4f0..f5917e15 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -352,7 +352,7 @@ def wires(self): def _get_drivers_directives(self) -> list[directives.Directive]: """ - Create a list of directives for each driver and add them to the + Create a list of directives for each driver. """ self._directives = DirectivesFactory(self) directives_list = [] diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 6ed88add..1e3ae3fd 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -67,9 +67,9 @@ def directives(self): self.geo_units, [driver.params.physical_property for driver in self.drivers], transforms=[ - lambda x: np.r_[list(self.geo_units.keys())][ - self.class_mapping - ][x.astype(int)], + lambda x: np.r_[list(self.geo_units)][self.class_mapping][ + x.astype(int) + ], maps.InjectActiveCells( self.inversion_mesh.mesh, self.models.active_cells, 0 ), @@ -97,7 +97,6 @@ def get_regularization(self): regularizations = super().get_regularization() reg_list, multipliers = self._overload_regularization(regularizations) reg_list.append(self.pgi_regularization) - # TODO: Assign value from UIjson multipliers.append(self.params.alpha_s) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) From cf8f50c1e9b8474df07853be5ea2709446ebed6f Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 27 May 2025 13:12:54 -0700 Subject: [PATCH 14/20] Re-lock on latest simpeg --- .../py-3.10-linux-64-dev.conda.lock.yml | 46 +-- environments/py-3.10-linux-64.conda.lock.yml | 20 +- .../py-3.10-win-64-dev.conda.lock.yml | 46 +-- environments/py-3.10-win-64.conda.lock.yml | 20 +- .../py-3.11-linux-64-dev.conda.lock.yml | 46 +-- environments/py-3.11-linux-64.conda.lock.yml | 20 +- .../py-3.11-win-64-dev.conda.lock.yml | 46 +-- environments/py-3.11-win-64.conda.lock.yml | 20 +- .../py-3.12-linux-64-dev.conda.lock.yml | 46 +-- environments/py-3.12-linux-64.conda.lock.yml | 20 +- .../py-3.12-win-64-dev.conda.lock.yml | 46 +-- environments/py-3.12-win-64.conda.lock.yml | 20 +- py-3.10.conda-lock.yml | 390 +++++++++--------- py-3.11.conda-lock.yml | 388 ++++++++--------- py-3.12.conda-lock.yml | 388 ++++++++--------- 15 files changed, 781 insertions(+), 781 deletions(-) diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml index b4f03329..620ac676 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -35,12 +35,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py310h8deb56e_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py310h3788b33_0 - - coverage=7.8.0=py310h89163eb_0 + - coverage=7.8.2=py310h89163eb_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py310ha75aee5_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -58,7 +58,7 @@ dependencies: - fonttools=4.58.0=py310h89163eb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310ha2bacc8_0 - greenlet=3.2.2=py310hf71b8c6_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -72,8 +72,8 @@ dependencies: - icu=75.1=he02047a_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 @@ -84,21 +84,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py310hff52083_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -151,7 +151,7 @@ dependencies: - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py310h89163eb_1 @@ -176,7 +176,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.13.1=py310h5eaa309_0 - numpy=1.26.4=py310hb13e2d6_0 @@ -185,7 +185,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py310h5eaa309_3 - - pandoc=3.6.4=ha770c72_0 + - pandoc=3.7.0.1=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -195,8 +195,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py310ha75aee5_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -232,14 +232,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py310hc1293b2_0 + - rpds-py=0.25.1=py310hbcd0ec0_0 - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -272,12 +272,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py310ha75aee5_0 + - tornado=6.5.1=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -298,13 +298,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index 5d1e8d07..689ee62e 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -20,7 +20,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py310h8deb56e_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py310h3788b33_0 @@ -32,7 +32,7 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py310h89163eb_0 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310ha2bacc8_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py310h2a0e991_101 @@ -40,9 +40,9 @@ dependencies: - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - icu=75.1=he02047a_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.7=py310h3788b33_0 - krb5=1.21.3=h659f571_0 @@ -88,7 +88,7 @@ dependencies: - libxcrypt=4.4.36=hd590300_1 - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py310h89163eb_1 - matplotlib-base=3.8.4=py310hef631a5_2 @@ -127,7 +127,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -135,10 +135,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=noxft_h4845f30_101 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py310ha75aee5_0 + - tornado=6.5.1=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py310ha75aee5_0 @@ -150,13 +150,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml index ebfebe7f..af15c4e1 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -34,12 +34,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py310ha8f682b_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py310hc19bc0b_0 - - coverage=7.8.0=py310h38315fa_0 + - coverage=7.8.2=py310h38315fa_0 - cpython=3.10.17=py310hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py310ha8f682b_0 @@ -58,7 +58,7 @@ dependencies: - fonttools=4.58.0=py310h38315fa_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310h3e8ed56_0 - greenlet=3.2.2=py310h9e98ed7_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -71,8 +71,8 @@ dependencies: - hyperframe=6.1.0=pyhd8ed1ab_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 @@ -84,21 +84,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py310h5588dad_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh5737063_1 + - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -139,7 +139,7 @@ dependencies: - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py310h38315fa_1 @@ -161,7 +161,7 @@ dependencies: - nbconvert-pandoc=7.16.6=hed9df3c_0 - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.13.1=py310hb4db72f_0 - numpy=1.26.4=py310hf667824_0 @@ -170,7 +170,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py310hb4db72f_3 - - pandoc=3.6.4=h57928b3_0 + - pandoc=3.7.0.1=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -179,8 +179,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py310ha8f682b_0 - pthread-stubs=0.4=h0e40799_1002 @@ -216,14 +216,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py310h7c79e54_0 + - rpds-py=0.25.1=py310hed05c55_0 - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -256,12 +256,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py310ha8f682b_0 + - tornado=6.5.1=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -288,13 +288,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index b5bbb1eb..409cd891 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -19,7 +19,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py310ha8f682b_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py310hc19bc0b_0 @@ -31,17 +31,17 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py310h38315fa_0 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310h3e8ed56_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py310hd6dd405_101 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - intel-openmp=2024.2.1=h57928b3_1083 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - kiwisolver=1.4.7=py310hc19bc0b_0 - krb5=1.21.3=hdf4eb48_0 - lcms2=2.17=hbcf6048_0 @@ -75,7 +75,7 @@ dependencies: - libxcb=1.17.0=h0e4246c_0 - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py310h38315fa_1 - matplotlib-base=3.8.4=py310hadb10a8_2 @@ -110,7 +110,7 @@ dependencies: - pyyaml=6.0.2=py310h38315fa_2 - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -118,10 +118,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=h5226925_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py310ha8f682b_0 + - tornado=6.5.1=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 @@ -138,13 +138,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index 6a80d2e7..e2665a85 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -35,12 +35,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py311hf29c0ef_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py311hd18a35c_0 - - coverage=7.8.0=py311h2dc5d0c_0 + - coverage=7.8.2=py311h2dc5d0c_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py311h9ecbd09_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -59,7 +59,7 @@ dependencies: - fonttools=4.58.0=py311h2dc5d0c_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h5b7b71f_0 - greenlet=3.2.2=py311hfdbb021_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -73,8 +73,8 @@ dependencies: - icu=75.1=he02047a_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 @@ -86,21 +86,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py311h38be061_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -153,7 +153,7 @@ dependencies: - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py311h2dc5d0c_1 @@ -178,7 +178,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py311h7db5c69_0 - numpy=1.26.4=py311h64a7726_0 @@ -187,7 +187,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py311h7db5c69_3 - - pandoc=3.6.4=ha770c72_0 + - pandoc=3.7.0.1=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -197,8 +197,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py311h9ecbd09_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -234,14 +234,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py311h687327b_0 + - rpds-py=0.25.1=py311hdae7d1d_0 - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -274,12 +274,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py311h9ecbd09_0 + - tornado=6.5.1=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -301,13 +301,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index 7a618095..ba4a5525 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -20,7 +20,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py311hf29c0ef_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py311hd18a35c_0 @@ -33,7 +33,7 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py311h2dc5d0c_0 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h5b7b71f_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py311h38436b4_101 @@ -41,9 +41,9 @@ dependencies: - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - icu=75.1=he02047a_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.7=py311hd18a35c_0 - krb5=1.21.3=h659f571_0 @@ -89,7 +89,7 @@ dependencies: - libxcrypt=4.4.36=hd590300_1 - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py311h2dc5d0c_1 - matplotlib-base=3.8.4=py311ha4ca890_2 @@ -128,7 +128,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -136,10 +136,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=noxft_h4845f30_101 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py311h9ecbd09_0 + - tornado=6.5.1=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py311h9ecbd09_0 @@ -152,13 +152,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index 95466ad4..44f1bbfa 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -34,12 +34,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py311he736701_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py311h3257749_0 - - coverage=7.8.0=py311h5082efb_0 + - coverage=7.8.2=py311h5082efb_0 - cpython=3.11.12=py311hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py311he736701_0 @@ -59,7 +59,7 @@ dependencies: - fonttools=4.58.0=py311h5082efb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h9b10771_0 - greenlet=3.2.2=py311hda3d55a_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -72,8 +72,8 @@ dependencies: - hyperframe=6.1.0=pyhd8ed1ab_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 @@ -86,21 +86,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py311h1ea47a8_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh5737063_1 + - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -141,7 +141,7 @@ dependencies: - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py311h5082efb_1 @@ -163,7 +163,7 @@ dependencies: - nbconvert-pandoc=7.16.6=hed9df3c_0 - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py311hcf9f919_0 - numpy=1.26.4=py311h0b4df5a_0 @@ -172,7 +172,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py311hcf9f919_3 - - pandoc=3.6.4=h57928b3_0 + - pandoc=3.7.0.1=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -181,8 +181,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py311he736701_0 - pthread-stubs=0.4=h0e40799_1002 @@ -218,14 +218,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py311ha250665_0 + - rpds-py=0.25.1=py311hc4022dc_0 - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -258,12 +258,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py311he736701_0 + - tornado=6.5.1=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -291,13 +291,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index 724d01d0..88691f25 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -19,7 +19,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py311he736701_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py311h3257749_0 @@ -32,17 +32,17 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py311h5082efb_0 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h9b10771_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py311hc74fd12_101 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - intel-openmp=2024.2.1=h57928b3_1083 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - kiwisolver=1.4.7=py311h3257749_0 - krb5=1.21.3=hdf4eb48_0 - lcms2=2.17=hbcf6048_0 @@ -76,7 +76,7 @@ dependencies: - libxcb=1.17.0=h0e4246c_0 - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py311h5082efb_1 - matplotlib-base=3.8.4=py311h9b31f6e_2 @@ -111,7 +111,7 @@ dependencies: - pyyaml=6.0.2=py311h5082efb_2 - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -119,10 +119,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=h5226925_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py311he736701_0 + - tornado=6.5.1=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 @@ -140,13 +140,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index d67ca6ab..9c9cea1a 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -35,12 +35,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py312h06ac9bb_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py312h68727a3_0 - - coverage=7.8.0=py312h178313f_0 + - coverage=7.8.2=py312h178313f_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py312h66e93f0_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -59,7 +59,7 @@ dependencies: - fonttools=4.58.0=py312h178313f_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hc39e661_0 - greenlet=3.2.2=py312h2ec8cdc_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -73,8 +73,8 @@ dependencies: - icu=75.1=he02047a_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 @@ -86,21 +86,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py312h7900ff3_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -153,7 +153,7 @@ dependencies: - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py312h178313f_1 @@ -178,7 +178,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py312hf9745cd_0 - numpy=1.26.4=py312heda63a1_0 @@ -187,7 +187,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py312hf9745cd_3 - - pandoc=3.6.4=ha770c72_0 + - pandoc=3.7.0.1=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -197,8 +197,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py312h66e93f0_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -234,14 +234,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py312h3b7be25_0 + - rpds-py=0.25.1=py312h680f630_0 - scikit-learn=1.4.2=py312h1fcc3ea_1 - scipy=1.14.1=py312h62794b6_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -274,12 +274,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py312h66e93f0_0 + - tornado=6.5.1=py312h66e93f0_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -301,13 +301,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index ef39ac8d..e8ac6cfa 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -20,7 +20,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py312h06ac9bb_0 - - click=8.2.0=pyh707e725_0 + - click=8.2.1=pyh707e725_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py312h68727a3_0 @@ -33,7 +33,7 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py312h178313f_0 - freetype=2.13.3=ha770c72_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hc39e661_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py312h01d377b_101 @@ -41,9 +41,9 @@ dependencies: - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - icu=75.1=he02047a_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.8=py312h84d6215_0 - krb5=1.21.3=h659f571_0 @@ -89,7 +89,7 @@ dependencies: - libxcrypt=4.4.36=hd590300_1 - libxml2=2.13.8=h4bc477f_0 - libzlib=1.3.1=hb9d3cd8_2 - - llvm-openmp=20.1.4=h024ca30_0 + - llvm-openmp=20.1.5=h024ca30_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py312h178313f_1 - matplotlib-base=3.8.4=py312h20ab3a6_2 @@ -128,7 +128,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py312h1fcc3ea_1 - scipy=1.14.1=py312h62794b6_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -136,10 +136,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=noxft_h4845f30_101 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py312h66e93f0_0 + - tornado=6.5.1=py312h66e93f0_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py312h66e93f0_0 @@ -152,13 +152,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index 77c69fb1..2bdf7fac 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -34,12 +34,12 @@ dependencies: - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py312h4389bb4_0 - charset-normalizer=3.4.2=pyhd8ed1ab_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py312hd5eb7cc_0 - - coverage=7.8.0=py312h31fea79_0 + - coverage=7.8.2=py312h31fea79_0 - cpython=3.12.10=py312hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py312h4389bb4_0 @@ -59,7 +59,7 @@ dependencies: - fonttools=4.58.0=py312h31fea79_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hbaa7e33_0 - greenlet=3.2.2=py312h275cf98_0 - h11=0.16.0=pyhd8ed1ab_0 @@ -72,8 +72,8 @@ dependencies: - hyperframe=6.1.0=pyhd8ed1ab_0 - idna=3.10=pyhd8ed1ab_1 - imagesize=1.4.1=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 - - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - importlib_metadata=8.7.0=h40b2b14_1 - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 @@ -86,21 +86,21 @@ dependencies: - isort=6.0.1=pyhd8ed1ab_1 - jedi=0.19.2=pyhd8ed1ab_1 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - json5=0.12.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py312h2e8e312_1 - - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema=4.24.0=pyhd8ed1ab_0 - jsonschema-specifications=2025.4.1=pyh29332c3_0 - - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_1 - jupyter_client=8.6.3=pyhd8ed1ab_1 - - jupyter_core=5.7.2=pyh5737063_1 + - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 - jupyter_server=2.16.0=pyhe01879c_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 - - jupyterlab=4.4.2=pyhd8ed1ab_0 + - jupyterlab=4.4.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -141,7 +141,7 @@ dependencies: - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - linkify-it-py=2.0.3=pyhd8ed1ab_1 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=2.2.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py312h31fea79_1 @@ -163,7 +163,7 @@ dependencies: - nbconvert-pandoc=7.16.6=hed9df3c_0 - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - - notebook=7.4.2=pyhd8ed1ab_0 + - notebook=7.4.3=pyhd8ed1ab_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py312h72972c8_0 - numpy=1.26.4=py312h8753938_0 @@ -172,7 +172,7 @@ dependencies: - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - pandas=2.2.3=py312h72972c8_3 - - pandoc=3.6.4=h57928b3_0 + - pandoc=3.7.0.1=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 - partd=1.4.2=pyhd8ed1ab_0 @@ -181,8 +181,8 @@ dependencies: - pip=25.1.1=pyh8b19718_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - - pluggy=1.5.0=pyhd8ed1ab_1 - - prometheus_client=0.21.1=pyhd8ed1ab_0 + - pluggy=1.6.0=pyhd8ed1ab_0 + - prometheus_client=0.22.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py312h4389bb4_0 - pthread-stubs=0.4=h0e40799_1002 @@ -218,14 +218,14 @@ dependencies: - requests=2.32.3=pyhd8ed1ab_1 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - - rpds-py=0.24.0=py312hfe1d9c4_0 + - rpds-py=0.25.1=py312h8422cdd_0 - scikit-learn=1.4.2=py312h816cc57_1 - scipy=1.14.1=py312h337df96_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - snowballstemmer=3.0.1=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - soupsieve=2.7=pyhd8ed1ab_0 - sphinx=5.3.0=pyhd8ed1ab_0 @@ -258,12 +258,12 @@ dependencies: - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py312h4389bb4_0 + - tornado=6.5.1=py312h4389bb4_0 - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 @@ -291,13 +291,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 616d68b8..9f84d5a7 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -19,7 +19,7 @@ dependencies: - cached_property=1.5.2=pyha770c72_1 - certifi=2025.4.26=pyhd8ed1ab_0 - cffi=1.17.1=py312h4389bb4_0 - - click=8.2.0=pyh7428d3b_0 + - click=8.2.1=pyh7428d3b_0 - cloudpickle=3.1.1=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.2=py312hd5eb7cc_0 @@ -32,17 +32,17 @@ dependencies: - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.0=py312h31fea79_0 - freetype=2.13.3=h57928b3_1 - - fsspec=2025.3.2=pyhd8ed1ab_0 + - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hbaa7e33_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py312h4e244af_101 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 - - importlib-metadata=8.6.1=pyha770c72_0 + - importlib-metadata=8.7.0=pyhe01879c_1 - intel-openmp=2024.2.1=h57928b3_1083 - jinja2=3.1.6=pyhd8ed1ab_0 - - joblib=1.5.0=pyhd8ed1ab_0 + - joblib=1.5.1=pyhd8ed1ab_0 - kiwisolver=1.4.8=py312hc790b64_0 - krb5=1.21.3=hdf4eb48_0 - lcms2=2.17=hbcf6048_0 @@ -76,7 +76,7 @@ dependencies: - libxcb=1.17.0=h0e4246c_0 - libxml2=2.13.8=h442d1da_0 - libzlib=1.3.1=h2466b09_2 - - llvm-openmp=20.1.4=h30eaf37_0 + - llvm-openmp=20.1.5=h30eaf37_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.2=py312h31fea79_1 - matplotlib-base=3.8.4=py312hfee7060_2 @@ -111,7 +111,7 @@ dependencies: - pyyaml=6.0.2=py312h31fea79_2 - scikit-learn=1.4.2=py312h816cc57_1 - scipy=1.14.1=py312h337df96_2 - - setuptools=80.1.0=pyhff2d567_0 + - setuptools=80.8.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -119,10 +119,10 @@ dependencies: - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=h5226925_1 - toolz=1.0.0=pyhd8ed1ab_1 - - tornado=6.4.2=py312h4389bb4_0 + - tornado=6.5.1=py312h4389bb4_0 - tqdm=4.67.1=pyhd8ed1ab_1 - typing-extensions=4.13.2=h0e9735f_0 - - typing-inspection=0.4.0=pyhd8ed1ab_0 + - typing-inspection=0.4.1=pyhd8ed1ab_0 - typing_extensions=4.13.2=pyh29332c3_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 @@ -140,13 +140,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.21.0=pyhd8ed1ab_1 + - zipp=3.22.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index d89a58dd..8db8a036 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -816,30 +816,30 @@ package: category: dev optional: true - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: linux-64 dependencies: __unix: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh707e725_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda hash: - md5: 4d4f33c3d9e5a23a7f4795d327a5d1f0 - sha256: 910f0e5e74a75f6e270b9dedd0f8ac55830250b0874f9f67605816fd069af283 + md5: 94b550b8d3a614dbd326af798c7dfb40 + sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 category: main optional: false - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: win-64 dependencies: __win: '' colorama: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh7428d3b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda hash: - md5: 8fac1fede8f5ea11cf93235463c8a045 - sha256: cfde6568dedb1726b4cd9f2f8204caee745cf972d25a3ebc8b75a2349c5e7205 + md5: 3a59475037bc09da916e4062c5cad771 + sha256: 20c2d8ea3d800485245b586a28985cba281dd6761113a49d7576f6db92a0a891 category: main optional: false - name: cloudpickle @@ -951,7 +951,7 @@ package: category: main optional: false - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: linux-64 dependencies: @@ -960,14 +960,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* tomli: '' - url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.2-py310h89163eb_0.conda hash: - md5: 9f7865c17117d16f804b687b498e35fa - sha256: ac410dbd3b1e28d40b88a27f801210b853ebd388f3cf20f85c0178e97f788013 + md5: 5ca8ab35287adc83b2d1996e5c2ac14c + sha256: 1e89236cd1ea9bbfcefa62a7225486301f18711e59e44dd802825ec53630c777 category: dev optional: true - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: win-64 dependencies: @@ -977,10 +977,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.0-py310h38315fa_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.2-py310h38315fa_0.conda hash: - md5: 30a825dae940c63c55bca8df4f806f3e - sha256: f16e7370e327f20ccba8a6edfb0441ec425c11c10744d6eaa817d05076b458a5 + md5: 5e09090744ab0b70b2882bc415c0d5ad + sha256: 561e5fd17f164928948107550856347ba4ed5c16b50c363bf8fbd0c1f2310893 category: dev optional: true - name: cpython @@ -1503,27 +1503,27 @@ package: category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: geoana @@ -1902,53 +1902,53 @@ package: category: dev optional: true - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: - python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + python: '' + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_resources @@ -2273,29 +2273,29 @@ package: category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: json5 @@ -2349,7 +2349,7 @@ package: category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2360,14 +2360,14 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2378,10 +2378,10 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema-specifications @@ -2411,7 +2411,7 @@ package: category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2419,19 +2419,19 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2439,15 +2439,15 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jupyter-book @@ -2617,7 +2617,7 @@ package: category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: linux-64 dependencies: @@ -2625,14 +2625,14 @@ package: platformdirs: '>=2.5' python: '>=3.8' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh31011fe_0.conda hash: - md5: 0a2980dada0dd7fd0998f0342308b1b1 - sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: b7d89d860ebcda28a5303526cdee68ab + sha256: 56a7a7e907f15cca8c4f9b0c99488276d4cb10821d2d15df9245662184872e81 category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: win-64 dependencies: @@ -2642,10 +2642,10 @@ package: python: '>=3.8' pywin32: '>=300' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh5737063_0.conda hash: - md5: 46d87d1c0ea5da0aae36f77fa406e20d - sha256: 7c903b2d62414c3e8da1f78db21f45b98de387aae195f8ca959794113ba4b3fd + md5: 324e60a0d3f39f268e899709575ea3cd + sha256: 928c2514c2974fda78447903217f01ca89a77eefedd46bf6a2fe97072df57e8d category: dev optional: true - name: jupyter_events @@ -2775,7 +2775,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: linux-64 dependencies: @@ -2795,14 +2795,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: win-64 dependencies: @@ -2822,10 +2822,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab_pygments @@ -4132,29 +4132,29 @@ package: category: dev optional: true - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda hash: - md5: 4fc395cda27912a7d904b86b5dbf3a4d - sha256: 5b39cdde3457e41b133d6f1fe53095c7fd3951bbdab46580098ccbf5ee9c99f7 + md5: 86f58be65a51d62ccc06cacfd83ff987 + sha256: 646907391a8d744508049ef7bd76653d59480b061a3a76ce047064f2923b6f84 category: main optional: false - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.4-h30eaf37_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.5-h30eaf37_0.conda hash: - md5: 3087da6f7e741dc1498e85ef87a553dc - sha256: 0c85b0ceda02c26bbea5a789c2d1735485dbc2a1089655a8f2193c5850a7bbab + md5: a88e3b6c1a5133b21d54a81fd8cb5c04 + sha256: 6e2c3e4c5faf0a1e65ee67ef2396f7de4fa81c2077d0e30e2a96c04156b191d2 category: main optional: false - name: locket @@ -4856,37 +4856,37 @@ package: category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: linux-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: win-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook-shim @@ -5142,25 +5142,25 @@ package: category: main optional: false - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: linux-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.7.0.1-ha770c72_0.conda hash: - md5: 53f2cd4128fa7053bb029bbeafbe3f2e - sha256: 16cbcab8a6d9a0cef47b9d3ebeced8a1a75ee54d379649e6260a333d1b2f743c + md5: fc8eb2a998f2883fe9842c556c0b175c + sha256: c22060f68acc1565e567f4e2a1671737320a0005749158718646d59d0324197e category: dev optional: true - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: win-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.6.4-h57928b3_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.7.0.1-h57928b3_0.conda hash: - md5: dac005a8550579541a6b0b6a8f8c6ddc - sha256: 02ab6b0c12596f5d8481f546a1fef6cd4e3a52ec59bc32c0fa3708106e30972e + md5: daa6680ef0c1f8c9cabca561bc77635c + sha256: d2b2146ddc2198bd735e0347e6540ed4e092ba542ca83dacac1caad7f8fb1b8c category: dev optional: true - name: pandocfilters @@ -5401,51 +5401,51 @@ package: category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prompt-toolkit @@ -6507,7 +6507,7 @@ package: category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: linux-64 dependencies: @@ -6515,14 +6515,14 @@ package: libgcc: '>=13' python: '' python_abi: 3.10.* - url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.24.0-py310hc1293b2_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.25.1-py310hbcd0ec0_0.conda hash: - md5: 2170ed457a6427f37c90104f6a63437d - sha256: b0c896af1d8ce85d7948624664d87bd9286223ea5a19884d6f295d37d5cd4e0f + md5: 64634e6d94c79af4c01725e05e1782d7 + sha256: 8b5b5039b26d98ab6c87c7eb6cf232a4741c96d96e43902a15e6586c4acc5eed category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: win-64 dependencies: @@ -6531,10 +6531,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.24.0-py310h7c79e54_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.25.1-py310hed05c55_0.conda hash: - md5: bd5b837169847d1f3e626ab20a9299f0 - sha256: e058920df1d6609a3522662a44f6c3a465ffb163dda4e8b6449435160c911cef + md5: 33ae8269be085b0103aacda23205f86b + sha256: ef0525e1c1cda25d4455d2ab8935673a71b49b9a2d5c152cdbfc765ad091dd53 category: dev optional: true - name: scikit-learn @@ -6647,27 +6647,27 @@ package: category: dev optional: true - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: six @@ -6719,27 +6719,27 @@ package: category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: linux-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: win-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: sortedcontainers @@ -7629,7 +7629,7 @@ package: category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: linux-64 dependencies: @@ -7637,14 +7637,14 @@ package: libgcc: '>=13' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* - url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.5.1-py310ha75aee5_0.conda hash: - md5: 166d59aab40b9c607b4cc21c03924e9d - sha256: 9c2b86d4e58c8b0e7d13a7f4c440f34e2201bae9cfc1d7e1d30a5bc7ffb1d4c8 + md5: 6f3da1072c0c4d2a1beb1e84615f7c9c + sha256: c24cc5952f1f1a84a848427382eecb04fc959987e19423e2c84e3281d0beec32 category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: win-64 dependencies: @@ -7653,10 +7653,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.5.1-py310ha8f682b_0.conda hash: - md5: e6819d3a0cae0f1b1838875f858421d1 - sha256: 2e5671d0db03961692b3390778ce6aba40702bd57584fa60badf4baa7614679b + md5: 4c8f599990e386f3a0aba3f3bd8608da + sha256: 2a922fc165be81c2121cbd0ba5db6dfcbb69ebdc4e48b0f6fac40fde954602e0 category: main optional: false - name: tqdm @@ -7710,27 +7710,27 @@ package: category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: typing-extensions @@ -7758,29 +7758,29 @@ package: category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: win-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing_extensions @@ -8373,27 +8373,27 @@ package: category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zstandard @@ -8528,7 +8528,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: linux-64 dependencies: @@ -8540,16 +8540,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: win-64 dependencies: @@ -8561,12 +8561,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: octree-creation-app diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index 27981ff9..f188e4e0 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -814,30 +814,30 @@ package: category: dev optional: true - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: linux-64 dependencies: __unix: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh707e725_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda hash: - md5: 4d4f33c3d9e5a23a7f4795d327a5d1f0 - sha256: 910f0e5e74a75f6e270b9dedd0f8ac55830250b0874f9f67605816fd069af283 + md5: 94b550b8d3a614dbd326af798c7dfb40 + sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 category: main optional: false - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: win-64 dependencies: __win: '' colorama: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh7428d3b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda hash: - md5: 8fac1fede8f5ea11cf93235463c8a045 - sha256: cfde6568dedb1726b4cd9f2f8204caee745cf972d25a3ebc8b75a2349c5e7205 + md5: 3a59475037bc09da916e4062c5cad771 + sha256: 20c2d8ea3d800485245b586a28985cba281dd6761113a49d7576f6db92a0a891 category: main optional: false - name: cloudpickle @@ -949,7 +949,7 @@ package: category: main optional: false - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: linux-64 dependencies: @@ -958,14 +958,14 @@ package: python: '>=3.11,<3.12.0a0' python_abi: 3.11.* tomli: '' - url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.0-py311h2dc5d0c_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.2-py311h2dc5d0c_0.conda hash: - md5: 37bc439a94beeb29914baa5b4987ebd5 - sha256: 50018d9c2d805eab29be0ad2e65a4d6b9f620e5e6b196923b1f3b397efee9b10 + md5: 21c1ef48cc2bf485e6d38c5611e91da2 + sha256: 1da68668a274d87003cb1c3281269fa930e952cda1711426c4240517d98177c8 category: dev optional: true - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: win-64 dependencies: @@ -975,10 +975,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.0-py311h5082efb_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.2-py311h5082efb_0.conda hash: - md5: 3237b9093308b18ee36d455ff098017b - sha256: 2a3a8f6304374d19e6fd1cbf73e756debf0a76e787f1a15bd8b11d74f9ef6bd2 + md5: dfd09752e23b9e8c1389ee8655c26f87 + sha256: ca270ce3d6e450dd638d03cbbf532c7ba8ef9243279b00ff0c2e3e19be1b71fc category: dev optional: true - name: cpython @@ -1527,27 +1527,27 @@ package: category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: geoana @@ -1926,53 +1926,53 @@ package: category: dev optional: true - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_resources @@ -2325,29 +2325,29 @@ package: category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: json5 @@ -2401,7 +2401,7 @@ package: category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2412,14 +2412,14 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2430,10 +2430,10 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema-specifications @@ -2463,7 +2463,7 @@ package: category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2471,19 +2471,19 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2491,15 +2491,15 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jupyter-book @@ -2669,7 +2669,7 @@ package: category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: linux-64 dependencies: @@ -2677,14 +2677,14 @@ package: platformdirs: '>=2.5' python: '>=3.8' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh31011fe_0.conda hash: - md5: 0a2980dada0dd7fd0998f0342308b1b1 - sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: b7d89d860ebcda28a5303526cdee68ab + sha256: 56a7a7e907f15cca8c4f9b0c99488276d4cb10821d2d15df9245662184872e81 category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: win-64 dependencies: @@ -2694,10 +2694,10 @@ package: python: '>=3.8' pywin32: '>=300' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh5737063_0.conda hash: - md5: 46d87d1c0ea5da0aae36f77fa406e20d - sha256: 7c903b2d62414c3e8da1f78db21f45b98de387aae195f8ca959794113ba4b3fd + md5: 324e60a0d3f39f268e899709575ea3cd + sha256: 928c2514c2974fda78447903217f01ca89a77eefedd46bf6a2fe97072df57e8d category: dev optional: true - name: jupyter_events @@ -2827,7 +2827,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: linux-64 dependencies: @@ -2847,14 +2847,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: win-64 dependencies: @@ -2874,10 +2874,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab_pygments @@ -4184,29 +4184,29 @@ package: category: dev optional: true - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda hash: - md5: 4fc395cda27912a7d904b86b5dbf3a4d - sha256: 5b39cdde3457e41b133d6f1fe53095c7fd3951bbdab46580098ccbf5ee9c99f7 + md5: 86f58be65a51d62ccc06cacfd83ff987 + sha256: 646907391a8d744508049ef7bd76653d59480b061a3a76ce047064f2923b6f84 category: main optional: false - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.4-h30eaf37_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.5-h30eaf37_0.conda hash: - md5: 3087da6f7e741dc1498e85ef87a553dc - sha256: 0c85b0ceda02c26bbea5a789c2d1735485dbc2a1089655a8f2193c5850a7bbab + md5: a88e3b6c1a5133b21d54a81fd8cb5c04 + sha256: 6e2c3e4c5faf0a1e65ee67ef2396f7de4fa81c2077d0e30e2a96c04156b191d2 category: main optional: false - name: locket @@ -4908,37 +4908,37 @@ package: category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: linux-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: win-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook-shim @@ -5196,25 +5196,25 @@ package: category: main optional: false - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: linux-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.7.0.1-ha770c72_0.conda hash: - md5: 53f2cd4128fa7053bb029bbeafbe3f2e - sha256: 16cbcab8a6d9a0cef47b9d3ebeced8a1a75ee54d379649e6260a333d1b2f743c + md5: fc8eb2a998f2883fe9842c556c0b175c + sha256: c22060f68acc1565e567f4e2a1671737320a0005749158718646d59d0324197e category: dev optional: true - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: win-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.6.4-h57928b3_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.7.0.1-h57928b3_0.conda hash: - md5: dac005a8550579541a6b0b6a8f8c6ddc - sha256: 02ab6b0c12596f5d8481f546a1fef6cd4e3a52ec59bc32c0fa3708106e30972e + md5: daa6680ef0c1f8c9cabca561bc77635c + sha256: d2b2146ddc2198bd735e0347e6540ed4e092ba542ca83dacac1caad7f8fb1b8c category: dev optional: true - name: pandocfilters @@ -5455,51 +5455,51 @@ package: category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prompt-toolkit @@ -6561,7 +6561,7 @@ package: category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: linux-64 dependencies: @@ -6569,14 +6569,14 @@ package: libgcc: '>=13' python: '' python_abi: 3.11.* - url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.24.0-py311h687327b_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.25.1-py311hdae7d1d_0.conda hash: - md5: e2fc6063859ff5fd62f983c31e4bf521 - sha256: a45aec5ad66dc54884bc782ac590cd26e00f738bfcf4f55b4d63c8ca22915a30 + md5: a82b805c84bca54329510d03656cf57b + sha256: 9654a1c11dda67b2782cad03f2a3793e18dbf5d9dbf5d2fdf86bdac3f2ad8a1d category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: win-64 dependencies: @@ -6585,10 +6585,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.24.0-py311ha250665_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.25.1-py311hc4022dc_0.conda hash: - md5: 1f1ad2bacdff1d370c13be99709130da - sha256: 83bcac24bf63b83d3b9560c448f8e353cc427b39ede10d6b8e2bf829866d654f + md5: 9cbe2af742a0fa8387caef089682a92f + sha256: 3a76edb8f446351f36eb43a215e0df0b444f73b0f22453c0966611653b05c06f category: dev optional: true - name: scikit-learn @@ -6701,27 +6701,27 @@ package: category: dev optional: true - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: six @@ -6773,27 +6773,27 @@ package: category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: linux-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: win-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: sortedcontainers @@ -7683,7 +7683,7 @@ package: category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: linux-64 dependencies: @@ -7691,14 +7691,14 @@ package: libgcc: '>=13' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* - url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.4.2-py311h9ecbd09_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.5.1-py311h9ecbd09_0.conda hash: - md5: df3aee9c3e44489257a840b8354e77b9 - sha256: afa3489113154b5cb0724b0bf120b62df91f426dabfe5d02f2ba09e90d346b28 + md5: 24e9f474abd101554b7a91313b9dfad6 + sha256: 66cc98dbf7aafe11a4cb886a8278a559c1616c098ee9f36d41697eaeb0830a4d category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: win-64 dependencies: @@ -7707,10 +7707,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.4.2-py311he736701_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.5.1-py311he736701_0.conda hash: - md5: 7e33077ce1bc0bf45c45a92e37432f16 - sha256: 7e313f1724e5eb7d13f7a1ebd6026a378f3f58a638ba7cdc3bd452c01323bb29 + md5: 3b58e6c2e18a83cf64ecc550513b940c + sha256: c7b28b96f21fa9cf675b051fe3039682038debf69ab8a3aa25cfdf3fa4aa9f8e category: main optional: false - name: tqdm @@ -7764,27 +7764,27 @@ package: category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: typing-extensions @@ -7812,29 +7812,29 @@ package: category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: win-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing_extensions @@ -8458,27 +8458,27 @@ package: category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zstandard @@ -8613,7 +8613,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: linux-64 dependencies: @@ -8625,16 +8625,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: win-64 dependencies: @@ -8646,12 +8646,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: octree-creation-app diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index 021473fe..b558a3b4 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -814,30 +814,30 @@ package: category: dev optional: true - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: linux-64 dependencies: __unix: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh707e725_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda hash: - md5: 4d4f33c3d9e5a23a7f4795d327a5d1f0 - sha256: 910f0e5e74a75f6e270b9dedd0f8ac55830250b0874f9f67605816fd069af283 + md5: 94b550b8d3a614dbd326af798c7dfb40 + sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 category: main optional: false - name: click - version: 8.2.0 + version: 8.2.1 manager: conda platform: win-64 dependencies: __win: '' colorama: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.0-pyh7428d3b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda hash: - md5: 8fac1fede8f5ea11cf93235463c8a045 - sha256: cfde6568dedb1726b4cd9f2f8204caee745cf972d25a3ebc8b75a2349c5e7205 + md5: 3a59475037bc09da916e4062c5cad771 + sha256: 20c2d8ea3d800485245b586a28985cba281dd6761113a49d7576f6db92a0a891 category: main optional: false - name: cloudpickle @@ -949,7 +949,7 @@ package: category: main optional: false - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: linux-64 dependencies: @@ -958,14 +958,14 @@ package: python: '>=3.12,<3.13.0a0' python_abi: 3.12.* tomli: '' - url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/coverage-7.8.2-py312h178313f_0.conda hash: - md5: d0fca021e354cc96455021852a1fad6d - sha256: 029278c43bd2a6ac36bfd93fde69a0cde6a4ee94c0af72d0d51236fbb1fc3720 + md5: 141e4480d38281c3988f3a9aa917b07d + sha256: 29d1b0ff196f8cb9c65d9ce4a355c3b1037698b5a0f4cc4590472ed38de182c3 category: dev optional: true - name: coverage - version: 7.8.0 + version: 7.8.2 manager: conda platform: win-64 dependencies: @@ -975,10 +975,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.0-py312h31fea79_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/coverage-7.8.2-py312h31fea79_0.conda hash: - md5: a52895ace8c17bc01ceba443d52325c6 - sha256: 7815726b2b45065af4570deca428f48799ce1f49de7d8b5e4f6b7999f6a4dc2f + md5: 746283c1e8a793b7322b52514111456c + sha256: ccf00edc1b8f4f1c224f81a4a598d2e89f97c063ff3ffd8e0dc8b9f7213db6db category: dev optional: true - name: cpython @@ -1527,27 +1527,27 @@ package: category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: fsspec - version: 2025.3.2 + version: 2025.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda hash: - md5: 9c40692c3d24c7aaf335f673ac09d308 - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 category: main optional: false - name: geoana @@ -1926,53 +1926,53 @@ package: category: dev optional: true - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib-metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - zipp: '>=0.5' - url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + zipp: '>=3.20' + url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: - md5: f4b39bf00c69f56ac01e020ebfac066c - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 category: main optional: false - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: linux-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_metadata - version: 8.6.1 + version: 8.7.0 manager: conda platform: win-64 dependencies: - importlib-metadata: '>=8.6.1,<8.6.2.0a0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + importlib-metadata: ==8.7.0 + url: https://repo.prefix.dev/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda hash: - md5: 7f46575a91b1307441abc235d01cab66 - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + md5: 8a77895fb29728b736a1a6c75906ea1a + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 category: dev optional: true - name: importlib_resources @@ -2325,29 +2325,29 @@ package: category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: joblib - version: 1.5.0 + version: 1.5.1 manager: conda platform: win-64 dependencies: python: '>=3.9' setuptools: '' - url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda hash: - md5: 3d7257f0a61c9aa4ffa3e324a887416b - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d + md5: fb1c14694de51a476ce8636d92b6f42c + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed category: main optional: false - name: json5 @@ -2401,7 +2401,7 @@ package: category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2412,14 +2412,14 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2430,10 +2430,10 @@ package: python: '>=3.9' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.24.0-pyhd8ed1ab_0.conda hash: - md5: a3cead9264b331b32fe8f0aabc967522 - sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + md5: 59220749abcd119d645e6879983497a1 + sha256: 812134fabb49493a50f7f443dc0ffafd0f63766f403a0bd8e71119763e57456a category: dev optional: true - name: jsonschema-specifications @@ -2463,7 +2463,7 @@ package: category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: linux-64 dependencies: @@ -2471,19 +2471,19 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jsonschema-with-format-nongpl - version: 4.23.0 + version: 4.24.0 manager: conda platform: win-64 dependencies: @@ -2491,15 +2491,15 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.23.0,<4.23.1.0a0' + jsonschema: '>=4.24.0,<4.24.1.0a0' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=24.6.0' - url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-with-format-nongpl-4.24.0-hd8ed1ab_0.conda hash: - md5: a5b1a8065857cc4bd8b7a38d063bb728 - sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + md5: b4eaebf6fac318db166238796d2a9702 + sha256: 970a1efffe29474d6bb3e4d63bc04105c5611d1c7e2cd7e2d43d1ba468f33c20 category: dev optional: true - name: jupyter-book @@ -2669,7 +2669,7 @@ package: category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: linux-64 dependencies: @@ -2677,14 +2677,14 @@ package: platformdirs: '>=2.5' python: '>=3.8' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh31011fe_0.conda hash: - md5: 0a2980dada0dd7fd0998f0342308b1b1 - sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: b7d89d860ebcda28a5303526cdee68ab + sha256: 56a7a7e907f15cca8c4f9b0c99488276d4cb10821d2d15df9245662184872e81 category: dev optional: true - name: jupyter_core - version: 5.7.2 + version: 5.8.1 manager: conda platform: win-64 dependencies: @@ -2694,10 +2694,10 @@ package: python: '>=3.8' pywin32: '>=300' traitlets: '>=5.3' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.8.1-pyh5737063_0.conda hash: - md5: 46d87d1c0ea5da0aae36f77fa406e20d - sha256: 7c903b2d62414c3e8da1f78db21f45b98de387aae195f8ca959794113ba4b3fd + md5: 324e60a0d3f39f268e899709575ea3cd + sha256: 928c2514c2974fda78447903217f01ca89a77eefedd46bf6a2fe97072df57e8d category: dev optional: true - name: jupyter_events @@ -2827,7 +2827,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: linux-64 dependencies: @@ -2847,14 +2847,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab - version: 4.4.2 + version: 4.4.3 manager: conda platform: win-64 dependencies: @@ -2874,10 +2874,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.4.3-pyhd8ed1ab_0.conda hash: - md5: 1f5f3b0fcff308d8fbaa73c43af08e2f - sha256: 8bc522991031ce528c650a7287159dd866b977593bdba33daa3ec37c40d99443 + md5: 4861a0c2a5a5d0481a450a9dfaf9febe + sha256: fc0235a71d852734fe92183a78cb91827367573450eba82465ae522c64230736 category: dev optional: true - name: jupyterlab_pygments @@ -4184,29 +4184,29 @@ package: category: dev optional: true - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda hash: - md5: 4fc395cda27912a7d904b86b5dbf3a4d - sha256: 5b39cdde3457e41b133d6f1fe53095c7fd3951bbdab46580098ccbf5ee9c99f7 + md5: 86f58be65a51d62ccc06cacfd83ff987 + sha256: 646907391a8d744508049ef7bd76653d59480b061a3a76ce047064f2923b6f84 category: main optional: false - name: llvm-openmp - version: 20.1.4 + version: 20.1.5 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.4-h30eaf37_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-20.1.5-h30eaf37_0.conda hash: - md5: 3087da6f7e741dc1498e85ef87a553dc - sha256: 0c85b0ceda02c26bbea5a789c2d1735485dbc2a1089655a8f2193c5850a7bbab + md5: a88e3b6c1a5133b21d54a81fd8cb5c04 + sha256: 6e2c3e4c5faf0a1e65ee67ef2396f7de4fa81c2077d0e30e2a96c04156b191d2 category: main optional: false - name: locket @@ -4908,37 +4908,37 @@ package: category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: linux-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook - version: 7.4.2 + version: 7.4.3 manager: conda platform: win-64 dependencies: jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.4.2,<4.5' + jupyterlab: '>=4.4.3,<4.5' jupyterlab_server: '>=2.27.1,<3' notebook-shim: '>=0.2,<0.3' python: '>=3.9' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.4.3-pyhd8ed1ab_0.conda hash: - md5: 59a96e10c24dd3407ff3366e46a2f5b3 - sha256: 3a22a07f337dc3177c0535ba28446a535195610adb467ef9b49dffcd120ddd44 + md5: f0b767b717cab652712d29f5e4699b2a + sha256: aea1b33b734e809bd090f0bae47f4bca5da406f7bc7dd65a67b565f03c740866 category: dev optional: true - name: notebook-shim @@ -5196,25 +5196,25 @@ package: category: main optional: false - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: linux-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandoc-3.7.0.1-ha770c72_0.conda hash: - md5: 53f2cd4128fa7053bb029bbeafbe3f2e - sha256: 16cbcab8a6d9a0cef47b9d3ebeced8a1a75ee54d379649e6260a333d1b2f743c + md5: fc8eb2a998f2883fe9842c556c0b175c + sha256: c22060f68acc1565e567f4e2a1671737320a0005749158718646d59d0324197e category: dev optional: true - name: pandoc - version: 3.6.4 + version: 3.7.0.1 manager: conda platform: win-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.6.4-h57928b3_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandoc-3.7.0.1-h57928b3_0.conda hash: - md5: dac005a8550579541a6b0b6a8f8c6ddc - sha256: 02ab6b0c12596f5d8481f546a1fef6cd4e3a52ec59bc32c0fa3708106e30972e + md5: daa6680ef0c1f8c9cabca561bc77635c + sha256: d2b2146ddc2198bd735e0347e6540ed4e092ba542ca83dacac1caad7f8fb1b8c category: dev optional: true - name: pandocfilters @@ -5455,51 +5455,51 @@ package: category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: pluggy - version: 1.5.0 + version: 1.6.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda hash: - md5: e9dcbce5f45f9ee500e728ae58b605b6 - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: 7da7ccd349dbf6487a7778579d2bb971 + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prometheus_client - version: 0.21.1 + version: 0.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda hash: - md5: 3e01e386307acc60b2f89af0b2e161aa - sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 7bfaef51c8364f6f5096a5a60bb83413 + sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 category: dev optional: true - name: prompt-toolkit @@ -6561,7 +6561,7 @@ package: category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: linux-64 dependencies: @@ -6569,14 +6569,14 @@ package: libgcc: '>=13' python: '' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/rpds-py-0.25.1-py312h680f630_0.conda hash: - md5: 5f5c19cbbd3526fad9c8ca0cca3e7346 - sha256: 10dad6a9d40e7c1856cb1f5f941ea06500610e13ee6ec4961fba59fccbaa0dc9 + md5: ea8f79edf890d1f9b2f1bd6fbb11be1e + sha256: a5b168b991c23ab6d74679a6f5ad1ed87b98ba6c383b5fe41f5f6b335b10d545 category: dev optional: true - name: rpds-py - version: 0.24.0 + version: 0.25.1 manager: conda platform: win-64 dependencies: @@ -6585,10 +6585,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.24.0-py312hfe1d9c4_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/rpds-py-0.25.1-py312h8422cdd_0.conda hash: - md5: c5fc315df43a26e2c1c0a6040cae12f6 - sha256: bf12ad2fefb2b5c5496d794a5fa0f7a2672a6dcfa9d70b181b6bbd968ade6454 + md5: 30d51df2ebcc324cce80fa6a317df920 + sha256: dfea71a35d7d5eb348893e24136ce6fb1004fc9402eaafae441fa61887638764 category: dev optional: true - name: scikit-learn @@ -6701,27 +6701,27 @@ package: category: dev optional: true - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: setuptools - version: 80.1.0 + version: 80.8.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda hash: - md5: f6f72d0837c79eaec77661be43e8a691 - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: ea075e94dc0106c7212128b6a25bbc4c + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 category: main optional: false - name: six @@ -6773,27 +6773,27 @@ package: category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: linux-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: snowballstemmer - version: 2.2.0 + version: 3.0.1 manager: conda platform: win-64 dependencies: - python: '>=2' - url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.9' + url: https://repo.prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda hash: - md5: 4d22a9315e78c6827f806065957d566e - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 755cf22df8693aa0d1aec1c123fa5863 + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 category: dev optional: true - name: sortedcontainers @@ -7683,7 +7683,7 @@ package: category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: linux-64 dependencies: @@ -7691,14 +7691,14 @@ package: libgcc: '>=13' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/tornado-6.5.1-py312h66e93f0_0.conda hash: - md5: e417822cb989e80a0d2b1b576fdd1657 - sha256: 062a3a3a37fa8615ce57929ba7e982c76f5a5810bcebd435950f6d6c4147c310 + md5: c532a6ee766bed75c4fa0c39e959d132 + sha256: c96be4c8bca2431d7ad7379bad94ed6d4d25cd725ae345540a531d9e26e148c9 category: main optional: false - name: tornado - version: 6.4.2 + version: 6.5.1 manager: conda platform: win-64 dependencies: @@ -7707,10 +7707,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.4.2-py312h4389bb4_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/tornado-6.5.1-py312h4389bb4_0.conda hash: - md5: f06104f71f496b0784b35b23e30e7990 - sha256: e21f24e5d598d9a31c604f510c82fbe73d756696bc70a69f11811a2ea9dd5d95 + md5: 06b156bbbe1597eb5ea30b931cadaa32 + sha256: cec4ab331788122f7f01dd02f57f8e21d9ae14553dedd6389d7dfeceb3592399 category: main optional: false - name: tqdm @@ -7764,27 +7764,27 @@ package: category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: types-python-dateutil - version: 2.9.0.20241206 + version: 2.9.0.20250516 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/types-python-dateutil-2.9.0.20250516-pyhd8ed1ab_0.conda hash: - md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 - sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + md5: e3465397ca4b5b60ba9fbc92ef0672f9 + sha256: 0fb78e97cad71ebf911958bf97777ec958a64a4621615a4dcc3ffb52cda7c6d0 category: dev optional: true - name: typing-extensions @@ -7812,29 +7812,29 @@ package: category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing-inspection - version: 0.4.0 + version: 0.4.1 manager: conda platform: win-64 dependencies: python: '>=3.9' typing_extensions: '>=4.12.0' - url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda hash: - md5: c5c76894b6b7bacc888ba25753bc8677 - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: e0c3cd765dc15751ee2f0b03cd015712 + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f category: main optional: false - name: typing_extensions @@ -8458,27 +8458,27 @@ package: category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zipp - version: 3.21.0 + version: 3.22.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda hash: - md5: 0c3cc595284c5e8f0f9900a9b228a332 - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 234be740b00b8e41567e5b0ed95aaba9 + sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b category: main optional: false - name: zstandard @@ -8613,7 +8613,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: linux-64 dependencies: @@ -8625,16 +8625,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: mira-simpeg - version: 0.23.0.1a3.dev4+g24027d81b + version: 0.23.0.1a5.dev26+g5f2b6d8d7 manager: pip platform: win-64 dependencies: @@ -8646,12 +8646,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f hash: - sha256: 24027d81b65df99d5f582acc4497ed33df8a3396 + sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@24027d81b65df99d5f582acc4497ed33df8a3396 + url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f category: main optional: false - name: octree-creation-app From 3be7859adee1dfaf40aeac2e4d91320abe6d831d Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 29 May 2025 08:49:58 -0700 Subject: [PATCH 15/20] Better display of msg warning --- simpeg_drivers/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 7b8dac2f..c644ef87 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -637,7 +637,7 @@ def driver_class_from_name( name: str, forward_only: bool = False ) -> InversionDriver: if name not in DRIVER_MAP: - msg = f"Inversion type {name} is not supported." + msg = f"Inversion type '{name}' is not supported." msg += f" Valid inversions are: {(*list(DRIVER_MAP),)}." raise NotImplementedError(msg) From 4527331d85a951d190d4c4b010693010e0c3df1f Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 29 May 2025 15:44:25 -0700 Subject: [PATCH 16/20] Re-lock --- .../py-3.10-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.10-linux-64.conda.lock.yml | 10 +- .../py-3.10-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.10-win-64.conda.lock.yml | 10 +- .../py-3.11-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.11-linux-64.conda.lock.yml | 10 +- .../py-3.11-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.11-win-64.conda.lock.yml | 10 +- .../py-3.12-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.12-linux-64.conda.lock.yml | 10 +- .../py-3.12-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.12-win-64.conda.lock.yml | 10 +- py-3.10.conda-lock.yml | 97 ++++++++++--------- py-3.11.conda-lock.yml | 95 +++++++++--------- py-3.12.conda-lock.yml | 95 +++++++++--------- 15 files changed, 211 insertions(+), 208 deletions(-) diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml index 620ac676..77c2379f 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -55,7 +55,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py310h89163eb_0 + - fonttools=4.58.1=py310h89163eb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -92,7 +92,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -139,7 +139,7 @@ dependencies: - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -267,7 +267,7 @@ dependencies: - terminado=0.18.1=pyh0d859eb_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -304,7 +304,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index 689ee62e..d376b8c6 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -30,7 +30,7 @@ dependencies: - discretize=0.11.2=py310ha2bacc8_1 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py310h89163eb_0 + - fonttools=4.58.1=py310h89163eb_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310ha2bacc8_0 @@ -55,7 +55,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -77,7 +77,7 @@ dependencies: - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -133,7 +133,7 @@ dependencies: - tbb=2021.13.0=hceb3a55_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -156,7 +156,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml index af15c4e1..23d18ddc 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -55,7 +55,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py310h38315fa_0 + - fonttools=4.58.1=py310h38315fa_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -92,7 +92,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -114,7 +114,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -130,7 +130,7 @@ dependencies: - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -251,7 +251,7 @@ dependencies: - terminado=0.18.1=pyh5737063_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -294,7 +294,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index 409cd891..699ca99b 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -29,7 +29,7 @@ dependencies: - discretize=0.11.2=py310h3e8ed56_1 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py310h38315fa_0 + - fonttools=4.58.1=py310h38315fa_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310h3e8ed56_0 @@ -52,7 +52,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -67,7 +67,7 @@ dependencies: - liblapack=3.9.0=31_h1aa476e_mkl - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -116,7 +116,7 @@ dependencies: - tbb=2021.13.0=h62715c5_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -144,7 +144,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index e2665a85..5507eecd 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py311h2dc5d0c_0 + - fonttools=4.58.1=py311h2dc5d0c_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -94,7 +94,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -118,7 +118,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -141,7 +141,7 @@ dependencies: - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -269,7 +269,7 @@ dependencies: - terminado=0.18.1=pyh0d859eb_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -307,7 +307,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index ba4a5525..dd3322d6 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -31,7 +31,7 @@ dependencies: - discretize=0.11.2=py311h5b7b71f_1 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py311h2dc5d0c_0 + - fonttools=4.58.1=py311h2dc5d0c_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h5b7b71f_0 @@ -56,7 +56,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -78,7 +78,7 @@ dependencies: - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -134,7 +134,7 @@ dependencies: - tbb=2021.13.0=hceb3a55_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -158,7 +158,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index 44f1bbfa..051cf996 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py311h5082efb_0 + - fonttools=4.58.1=py311h5082efb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -94,7 +94,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -132,7 +132,7 @@ dependencies: - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -253,7 +253,7 @@ dependencies: - terminado=0.18.1=pyh5737063_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -297,7 +297,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index 88691f25..2efa2593 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -30,7 +30,7 @@ dependencies: - discretize=0.11.2=py311h9b10771_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py311h5082efb_0 + - fonttools=4.58.1=py311h5082efb_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h9b10771_0 @@ -53,7 +53,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -68,7 +68,7 @@ dependencies: - liblapack=3.9.0=31_h1aa476e_mkl - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -117,7 +117,7 @@ dependencies: - tbb=2021.13.0=h62715c5_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -146,7 +146,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index 9c9cea1a..d2c6ccba 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py312h178313f_0 + - fonttools=4.58.1=py312h178313f_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -94,7 +94,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh31011fe_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -118,7 +118,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -141,7 +141,7 @@ dependencies: - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -269,7 +269,7 @@ dependencies: - terminado=0.18.1=pyh0d859eb_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -307,7 +307,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index e8ac6cfa..7a11c865 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -31,7 +31,7 @@ dependencies: - discretize=0.11.2=py312hc39e661_1 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py312h178313f_0 + - fonttools=4.58.1=py312h178313f_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hc39e661_0 @@ -56,7 +56,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.13.0=h332b0f4_0 + - libcurl=8.14.0=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -78,7 +78,7 @@ dependencies: - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.49.2=hee588c1_0 + - libsqlite=3.50.0=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -134,7 +134,7 @@ dependencies: - tbb=2021.13.0=hceb3a55_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=noxft_h4845f30_101 + - tk=8.6.13=noxft_hd72426e_102 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h66e93f0_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -158,7 +158,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index 2bdf7fac..e8648843 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py312h31fea79_0 + - fonttools=4.58.1=py312h31fea79_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -94,7 +94,7 @@ dependencies: - jsonschema-with-format-nongpl=4.24.0=hd8ed1ab_0 - jupyter-book=1.0.3=pyhd8ed1ab_1 - jupyter-cache=1.0.1=pyhff2d567_0 - - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhe01879c_2 - jupyter_client=8.6.3=pyhd8ed1ab_1 - jupyter_core=5.8.1=pyh5737063_0 - jupyter_events=0.12.0=pyh29332c3_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -132,7 +132,7 @@ dependencies: - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -253,7 +253,7 @@ dependencies: - terminado=0.18.1=pyh5737063_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tinycss2=1.4.0=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - tomlkit=0.13.2=pyha770c72_1 @@ -297,7 +297,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 9f84d5a7..6357305c 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -30,7 +30,7 @@ dependencies: - discretize=0.11.2=py312hbaa7e33_1 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.0=py312h31fea79_0 + - fonttools=4.58.1=py312h31fea79_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hbaa7e33_0 @@ -53,7 +53,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.13.0=h88aaa65_0 + - libcurl=8.14.0=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -68,7 +68,7 @@ dependencies: - liblapack=3.9.0=31_h1aa476e_mkl - liblzma=5.8.1=h2466b09_1 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.49.2=h67fdade_0 + - libsqlite=3.50.0=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -117,7 +117,7 @@ dependencies: - tbb=2021.13.0=h62715c5_1 - tblib=3.1.0=pyhd8ed1ab_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - - tk=8.6.13=h5226925_1 + - tk=8.6.13=h2c6b04d_2 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h4389bb4_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -146,7 +146,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@e9c99d6fd5d324571a2717990aecb3ed673cbaca - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index 8db8a036..0294bbd2 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -1414,7 +1414,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: linux-64 dependencies: @@ -1425,14 +1425,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.0-py310h89163eb_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py310h89163eb_0.conda hash: - md5: 4532df8a45ab4e37b2cc71186304dd5a - sha256: 35df95fab1d44133d8e041a7ce8324e18187fa5d95fa3c2a6074253df8e3aeec + md5: f4f46207c6defa5ea17b0299298ba849 + sha256: 4478c8c3948d36e18b212de9fdc0c2654e4c380ab915d0aa130e7fafb7d123a2 category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: win-64 dependencies: @@ -1444,10 +1444,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.0-py310h38315fa_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py310h38315fa_0.conda hash: - md5: 87b6ddf29c7ee0e327f76c546edb3346 - sha256: 2757be1c29de18373bfe87ea6410a385ff21ee4944cfb1db68eecd21783203a8 + md5: 76a9c04ac1c23cee8b00733eb942f8e5 + sha256: 7ff47ff80fe7bce1a6695f717c6fdfc1a0bd3490b0bdaa6c2b5b3378555c5a16 category: main optional: false - name: fqdn @@ -2559,11 +2559,11 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter-lsp @@ -2574,10 +2574,10 @@ package: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter_client @@ -3287,7 +3287,7 @@ package: category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: linux-64 dependencies: @@ -3297,16 +3297,16 @@ package: libnghttp2: '>=1.64.0,<2.0a0' libssh2: '>=1.11.1,<2.0a0' libzlib: '>=1.3.1,<2.0a0' - openssl: '>=3.4.1,<4.0a0' + openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda hash: - md5: cbdc92ac0d93fe3c796e36ad65c7905c - sha256: 38e528acfaa0276b7052f4de44271ff9293fdb84579650601a8c49dac171482a + md5: d1738cf06503218acee63669029fd8e8 + sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: win-64 dependencies: @@ -3316,10 +3316,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.13.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda hash: - md5: c9cf6eb842decbb66c2f34e72c3580d6 - sha256: 185553b37c0299b7a15dc66a7a7e2a0d421adaac784ec9298a0b2ad745116ca5 + md5: ae69647c79ac790aae707e6f3977152b + sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a category: main optional: false - name: libdeflate @@ -3825,31 +3825,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda hash: - md5: 93048463501053a00739215ea3f36324 - sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 + md5: 71888e92098d0f8c41b09a671ad289bc + sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 category: main optional: false - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.49.2-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda hash: - md5: a3900c97ba9e03332e9a911fe63f7d64 - sha256: 1612baa49124ec1972b085ab9d6bf1855c5f38e8f16e8d8f96c193d6e11688b2 + md5: 92b11b0b2120d563caa1629928122cee + sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 category: main optional: false - name: libssh2 @@ -7510,12 +7510,13 @@ package: manager: conda platform: linux-64 dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<2.0.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda hash: - md5: d453b98d9c83e71da0741bb0ff4d76bc - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: a0116df4f4ed05c303811a837d5b39d8 + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 category: main optional: false - name: tk @@ -7526,10 +7527,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda hash: - md5: fc048363eb8f03cd1737600a5d08aafe - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: ebd0e761de9aa879a51d22cc721bd095 + sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896 category: main optional: false - name: toml @@ -8528,7 +8529,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: linux-64 dependencies: @@ -8540,16 +8541,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: win-64 dependencies: @@ -8561,12 +8562,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: octree-creation-app diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index f188e4e0..17cd4c08 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -1438,7 +1438,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: linux-64 dependencies: @@ -1449,14 +1449,14 @@ package: python: '>=3.11,<3.12.0a0' python_abi: 3.11.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.0-py311h2dc5d0c_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py311h2dc5d0c_0.conda hash: - md5: 4a0acd70e14c46091400497ee5cc510d - sha256: 4953966bd6ee2078d11d8b0283d39db411680a3396529b14de6d131a82fc8a0c + md5: 9af5d6c8703be9bbe200aeae13a5e6ef + sha256: 8ef83f209dfc3f5b808e583bedd129ca95c9f2cb72645540e01d90f82bde9e0d category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: win-64 dependencies: @@ -1468,10 +1468,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.0-py311h5082efb_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py311h5082efb_0.conda hash: - md5: 0e0afb868a76f8e1892e2c522c8bba9d - sha256: cb81661531ff59d2ac79b515c80a27dc203313a49ca4dbc3f6fe79cad27e0a2f + md5: 88930bd9938a31990c3b9b0f86930e57 + sha256: c806a73ae3fe27c3ff4fd7a564632d617aa630ec856e5289bb22936fe78355e5 category: main optional: false - name: fqdn @@ -2612,10 +2612,10 @@ package: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter-lsp @@ -2626,10 +2626,10 @@ package: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter_client @@ -3339,7 +3339,7 @@ package: category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: linux-64 dependencies: @@ -3349,16 +3349,16 @@ package: libnghttp2: '>=1.64.0,<2.0a0' libssh2: '>=1.11.1,<2.0a0' libzlib: '>=1.3.1,<2.0a0' - openssl: '>=3.4.1,<4.0a0' + openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda hash: - md5: cbdc92ac0d93fe3c796e36ad65c7905c - sha256: 38e528acfaa0276b7052f4de44271ff9293fdb84579650601a8c49dac171482a + md5: d1738cf06503218acee63669029fd8e8 + sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: win-64 dependencies: @@ -3368,10 +3368,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.13.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda hash: - md5: c9cf6eb842decbb66c2f34e72c3580d6 - sha256: 185553b37c0299b7a15dc66a7a7e2a0d421adaac784ec9298a0b2ad745116ca5 + md5: ae69647c79ac790aae707e6f3977152b + sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a category: main optional: false - name: libdeflate @@ -3877,31 +3877,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda hash: - md5: 93048463501053a00739215ea3f36324 - sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 + md5: 71888e92098d0f8c41b09a671ad289bc + sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 category: main optional: false - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.49.2-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda hash: - md5: a3900c97ba9e03332e9a911fe63f7d64 - sha256: 1612baa49124ec1972b085ab9d6bf1855c5f38e8f16e8d8f96c193d6e11688b2 + md5: 92b11b0b2120d563caa1629928122cee + sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 category: main optional: false - name: libssh2 @@ -7564,12 +7564,13 @@ package: manager: conda platform: linux-64 dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<2.0.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda hash: - md5: d453b98d9c83e71da0741bb0ff4d76bc - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: a0116df4f4ed05c303811a837d5b39d8 + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 category: main optional: false - name: tk @@ -7580,10 +7581,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda hash: - md5: fc048363eb8f03cd1737600a5d08aafe - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: ebd0e761de9aa879a51d22cc721bd095 + sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896 category: main optional: false - name: toml @@ -8613,7 +8614,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: linux-64 dependencies: @@ -8625,16 +8626,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: win-64 dependencies: @@ -8646,12 +8647,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: octree-creation-app diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index b558a3b4..bd2563f9 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -1438,7 +1438,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: linux-64 dependencies: @@ -1449,14 +1449,14 @@ package: python: '>=3.12,<3.13.0a0' python_abi: 3.12.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.0-py312h178313f_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py312h178313f_0.conda hash: - md5: 20ab6e460950203a022131b49c3dbda1 - sha256: eab484e58457bcc69f3e848ff659fc63b917cee7d9f5e614653c0571c0b6354e + md5: 59ac6c124428928a1a41691eedf2b3bd + sha256: e393557ad5ca31f71ec59da7035eea0d8d9a87ef1807fda832d2953112e71588 category: main optional: false - name: fonttools - version: 4.58.0 + version: 4.58.1 manager: conda platform: win-64 dependencies: @@ -1468,10 +1468,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.0-py312h31fea79_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py312h31fea79_0.conda hash: - md5: d75198952d9e57e3f90d2fd5d73b8208 - sha256: 7669a9a26b2c93b6f8887c54e05a979724014be0309abc68f51844c9b75ad67a + md5: fbe3cbbe4fc661f033725bd9a958bb52 + sha256: 67721282cc0cad4b9d2fb1a6a9987b3090cd6c5a516ffef293e4f8181556c20a category: main optional: false - name: fqdn @@ -2612,10 +2612,10 @@ package: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter-lsp @@ -2626,10 +2626,10 @@ package: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.2.5-pyhe01879c_2.conda hash: - md5: 0b4c3908e5a38ea22ebb98ee5888c768 - sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + md5: 7ed6505c703f3c4e1a58864bf84505e2 + sha256: f2ca86b121bcfeaf0241a927824459ba8712e64806b98dd262eb2b1a7c4e82a6 category: dev optional: true - name: jupyter_client @@ -3339,7 +3339,7 @@ package: category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: linux-64 dependencies: @@ -3349,16 +3349,16 @@ package: libnghttp2: '>=1.64.0,<2.0a0' libssh2: '>=1.11.1,<2.0a0' libzlib: '>=1.3.1,<2.0a0' - openssl: '>=3.4.1,<4.0a0' + openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda hash: - md5: cbdc92ac0d93fe3c796e36ad65c7905c - sha256: 38e528acfaa0276b7052f4de44271ff9293fdb84579650601a8c49dac171482a + md5: d1738cf06503218acee63669029fd8e8 + sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 category: main optional: false - name: libcurl - version: 8.13.0 + version: 8.14.0 manager: conda platform: win-64 dependencies: @@ -3368,10 +3368,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.13.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda hash: - md5: c9cf6eb842decbb66c2f34e72c3580d6 - sha256: 185553b37c0299b7a15dc66a7a7e2a0d421adaac784ec9298a0b2ad745116ca5 + md5: ae69647c79ac790aae707e6f3977152b + sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a category: main optional: false - name: libdeflate @@ -3877,31 +3877,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda hash: - md5: 93048463501053a00739215ea3f36324 - sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 + md5: 71888e92098d0f8c41b09a671ad289bc + sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 category: main optional: false - name: libsqlite - version: 3.49.2 + version: 3.50.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.49.2-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda hash: - md5: a3900c97ba9e03332e9a911fe63f7d64 - sha256: 1612baa49124ec1972b085ab9d6bf1855c5f38e8f16e8d8f96c193d6e11688b2 + md5: 92b11b0b2120d563caa1629928122cee + sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 category: main optional: false - name: libssh2 @@ -7564,12 +7564,13 @@ package: manager: conda platform: linux-64 dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<2.0.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda hash: - md5: d453b98d9c83e71da0741bb0ff4d76bc - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: a0116df4f4ed05c303811a837d5b39d8 + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 category: main optional: false - name: tk @@ -7580,10 +7581,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda hash: - md5: fc048363eb8f03cd1737600a5d08aafe - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: ebd0e761de9aa879a51d22cc721bd095 + sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896 category: main optional: false - name: toml @@ -8613,7 +8614,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: linux-64 dependencies: @@ -8625,16 +8626,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev26+g5f2b6d8d7 + version: 0.23.0.1a5.dev28+g447de6c5c manager: pip platform: win-64 dependencies: @@ -8646,12 +8647,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 hash: - sha256: 5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5f2b6d8d7fb5f5287f2af0e1231daa1350b7183f + url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 category: main optional: false - name: octree-creation-app From 85271f3db6854b39810a0e8d6bbd2770fa7dce66 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 30 May 2025 10:33:37 -0700 Subject: [PATCH 17/20] Change handling of rotation angles. --- simpeg_drivers/driver.py | 4 +-- simpeg_drivers/joint/driver.py | 2 +- simpeg_drivers/joint/options.py | 30 +++++++++++++++++++ .../driver_joint_pgi_homogeneous_test.py | 17 ++++++++++- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index c644ef87..973b5bdb 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -541,8 +541,8 @@ def get_regularization(self): fun, neighbors, comp, - mapping * self.models.gradient_dip, - mapping * self.models.gradient_direction, + self.models.gradient_dip, + self.models.gradient_direction, ) average_op = getattr( diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index f5917e15..21f46f2a 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -272,7 +272,7 @@ def validate_create_mesh(self): def validate_create_models(self): """Create stacked model vectors from all drivers provided.""" for model_type in self.models.model_types: - if model_type == "petrophysics": + if model_type in ["petrophysics", "gradient_dip", "gradient_direction"]: continue model = getattr(self.models, f"_{model_type}").model diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index abf871c3..bc3acfe9 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -13,6 +13,7 @@ import multiprocessing +import numpy as np from geoapps_utils.driver.data import BaseData from geoh5py.data import FloatData from geoh5py.groups import PropertyGroup, SimPEGGroup, UIJsonGroup @@ -22,6 +23,7 @@ import simpeg_drivers from simpeg_drivers.options import ActiveCellsOptions, SolverType +from simpeg_drivers.utils.regularization import direction_and_dip class BaseJointOptions(BaseData): @@ -150,3 +152,31 @@ def update_out_group_options(self): self.out_group.options = self.serialize() self.out_group.metadata = None return self + + @property + def gradient_orientations(self) -> tuple(float, float): + """ + Direction and dip angles for rotated gradient regularization. + + Angles are in radians and are clockwise from North for direction + and clockwise from horizontal for dip. + """ + + if self.gradient_rotation is not None: + orientations = direction_and_dip(self.gradient_rotation) + + return np.deg2rad(orientations) + + return None + + @property + def gradient_direction(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 0] + + @property + def gradient_dip(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 1] diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 582fb0e4..deeca0f9 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -16,7 +16,8 @@ import numpy as np from geoapps_utils.utils.importing import GeoAppsError from geoh5py.data import FloatData -from geoh5py.groups import SimPEGGroup +from geoh5py.groups.property_group import GroupTypeEnum, PropertyGroup +from geoh5py.groups.simpeg import SimPEGGroup from geoh5py.workspace import Workspace from pytest import raises @@ -136,6 +137,7 @@ def test_homogeneous_run( drivers = [] orig_data = [] petrophysics = None + gradient_rotation = None for group_name in [ "Gravity Forward", "Magnetic Vector Forward", @@ -168,6 +170,18 @@ def test_homogeneous_run( } } ) + dip, direction = mesh.add_data( + { + "dip": {"values": np.zeros(mesh.n_cells)}, + "direction": {"values": np.zeros(mesh.n_cells)}, + } + ) + gradient_rotation = PropertyGroup( + name="gradient_rotations", + property_group_type=GroupTypeEnum.DIPDIR, + properties=[dip, direction], + parent=mesh, + ) data = None for child in survey.children: @@ -225,6 +239,7 @@ def test_homogeneous_run( group_b=drivers[1].params.out_group, group_b_multiplier=1.0, mesh=global_mesh, + gradient_rotation=gradient_rotation, length_scale_x=1.0, length_scale_y=1.0, length_scale_z=1.0, From fa4f22610fe0bae8e38e951fae46044c239788c8 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 30 May 2025 10:35:42 -0700 Subject: [PATCH 18/20] Update target --- tests/run_tests/driver_joint_pgi_homogeneous_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index deeca0f9..ecac604d 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -55,7 +55,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 390.6585155910284, "phi_d": 2370, "phi_m": 0.543} +target_run = {"data_norm": 390.6585155910284, "phi_d": 2320, "phi_m": 0.642} def test_homogeneous_fwr_run( From b49a74bff79cf924cd0aa000c5746f0202c317f5 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 30 May 2025 12:07:16 -0700 Subject: [PATCH 19/20] Fix issue with transfer of active model --- simpeg_drivers/components/models.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 1c4e3d60..90feb567 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -17,7 +17,9 @@ from geoapps_utils.driver.driver import BaseDriver from geoapps_utils.utils.numerical import weighted_average from geoapps_utils.utils.transformations import rotate_xyz -from geoh5py.data import FloatData, NumericData, ReferencedData +from geoh5py.data import Data, FloatData, NumericData +from geoh5py.data.data_type import GeometricDataValueMapType +from geoh5py.objects import BaseObject from simpeg.utils.mat_utils import ( cartesian2amplitude_dip_azimuth, dip_azimuth2cartesian, @@ -597,7 +599,7 @@ def _get_value(self, model: float | NumericData) -> np.ndarray: return model @staticmethod - def obj_2_mesh(data, destination) -> np.ndarray: + def obj_2_mesh(data: Data, destination: BaseObject) -> np.ndarray: """ Interpolates obj into inversion mesh using nearest neighbors of parent. @@ -612,7 +614,7 @@ def obj_2_mesh(data, destination) -> np.ndarray: values = data.values.astype(float) - if isinstance(data, ReferencedData): + if isinstance(data.entity_type, GeometricDataValueMapType): values[values == 0] = np.nan full_vector = weighted_average(xyz_in, xyz_out, [values], n=1)[0] From 8fa3a439839845b57bbc70de108275e2747b9ddd Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 30 May 2025 12:33:00 -0700 Subject: [PATCH 20/20] Fix bad import --- simpeg_drivers/components/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 90feb567..d12cc95b 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -19,7 +19,7 @@ from geoapps_utils.utils.transformations import rotate_xyz from geoh5py.data import Data, FloatData, NumericData from geoh5py.data.data_type import GeometricDataValueMapType -from geoh5py.objects import BaseObject +from geoh5py.objects import ObjectBase from simpeg.utils.mat_utils import ( cartesian2amplitude_dip_azimuth, dip_azimuth2cartesian, @@ -599,7 +599,7 @@ def _get_value(self, model: float | NumericData) -> np.ndarray: return model @staticmethod - def obj_2_mesh(data: Data, destination: BaseObject) -> np.ndarray: + def obj_2_mesh(data: Data, destination: ObjectBase) -> np.ndarray: """ Interpolates obj into inversion mesh using nearest neighbors of parent.