From 7a9086ed958338ad1a10d703fda9149701f0b928 Mon Sep 17 00:00:00 2001 From: domfournier Date: Thu, 9 Apr 2026 14:09:29 -0700 Subject: [PATCH 01/27] Sprinkle "magnetic vector pde" throughout --- .../magnetic_vector_inversion_pde.ui.json | 622 ++++++++++++++++++ .../magnetic_vector_pde_forward.ui.json | 210 ++++++ .../factories/directives_factory.py | 16 +- .../components/factories/receiver_factory.py | 13 +- .../components/factories/simpeg_factory.py | 1 + .../factories/simulation_factory.py | 18 + .../components/factories/survey_factory.py | 6 +- simpeg_drivers/components/models.py | 10 +- .../magnetic_vector_pde/__init__.py | 17 + .../magnetic_vector_pde/forward.py | 30 + .../magnetic_vector_pde/inversion.py | 30 + .../magnetic_vector_pde/options.py | 108 +++ 12 files changed, 1072 insertions(+), 9 deletions(-) create mode 100644 simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json create mode 100644 simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json create mode 100644 simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py create mode 100644 simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py create mode 100644 simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py create mode 100644 simpeg_drivers/potential_fields/magnetic_vector_pde/options.py diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json new file mode 100644 index 00000000..96b5b5ae --- /dev/null +++ b/simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json @@ -0,0 +1,622 @@ +{ + "version": "0.4.0", + "title": "Magnetic Vector (MVI) PDE Inversion", + "icon": "surveyairbornemagnetics", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg_drivers", + "run_command": "simpeg_drivers.potential_fields.magnetic_vector_pde.inversion", + "geoh5": "", + "monitoring_directory": "", + "inducing_field_declination": { + "min": -180.0, + "max": 180.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Declination (deg)", + "value": 0.0 + }, + "inducing_field_inclination": { + "min": -90.0, + "max": 90.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Inclination (deg)", + "value": 90.0 + }, + "inducing_field_strength": { + "min": 0.0, + "max": 100000.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Strength (nT)", + "value": 50000.0 + }, + "data_object": { + "main": true, + "group": "Data", + "label": "Object", + "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}", + "{4b99204c-d133-4579-a916-a9c8b98cfccb}", + "{028e4905-cc97-4dab-b1bf-d76f58b501b5}" + ], + "value": "" + }, + "tmi_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "TMI (nT)", + "toolTip": "IGRF-corrected anomalous magnetic data", + "parent": "data_object", + "optional": true, + "enabled": true, + "value": "" + }, + "tmi_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "tmi_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "bx_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "Bx (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "bx_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "bx_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "by_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "By (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "by_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "by_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "bz_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "Bz (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "bz_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "bz_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "mesh": { + "group": "Mesh and models", + "main": true, + "label": "Mesh", + "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", + "value": "", + "optional": true, + "enabled": false, + "tooltip": "Select a mesh for the inversion" + }, + "starting_model": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "label": "Initial magnetization (SI)", + "property": "", + "value": 0.0001 + }, + "reference_model": { + "association": [ + "Cell", + "Vertex" + ], + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Reference magnetization(SI)", + "property": "", + "value": 0.0 + }, + "upper_bound": { + "association": [ + "Cell", + "Vertex" + ], + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "parent": "mesh", + "label": "Upper bound (SI)", + "property": "", + "optional": true, + "value": 1.0, + "enabled": false + }, + "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", + "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", + "dependency": "reference_model", + "dependencyType": "enabled", + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "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, + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "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, + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "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, + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "gradient_rotation": { + "group": "Regularization", + "association": "Cell", + "dataType": "Float", + "dataGroupType": [ + "Strike & dip", + "Dip direction & dip", + "3D vector" + ], + "label": "Gradient rotation", + "optional": true, + "enabled": false, + "parent": "mesh", + "value": "" + }, + "s_norm": { + "association": "Cell", + "dataType": "Float", + "group": "Sparse/blocky model", + "label": "Smallness norm", + "isValue": true, + "parent": "mesh", + "property": "", + "value": 0.0, + "min": 0.0, + "max": 2.0, + "precision": 2, + "lineEdit": true, + "enabled": true, + "dependency": "reference_model", + "dependencyType": "enabled", + "tooltip": "Lp-norm used in the smallness term of the objective function" + }, + "x_norm": { + "association": "Cell", + "dataType": "Float", + "group": "Sparse/blocky model", + "label": "X-smoothness norm", + "isValue": true, + "parent": "mesh", + "property": "", + "value": 2.0, + "min": 0.0, + "max": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": true, + "tooltip": "Lp-norm used in the x-smoothness term of the objective function" + }, + "y_norm": { + "association": "Cell", + "dataType": "Float", + "group": "Sparse/blocky model", + "label": "Y-smoothness norm", + "isValue": true, + "parent": "mesh", + "property": "", + "value": 2.0, + "min": 0.0, + "max": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": true, + "tooltip": "Lp-norm used in the y-smoothness term of the objective function" + }, + "z_norm": { + "association": "Cell", + "dataType": "Float", + "group": "Sparse/blocky model", + "label": "Z-smoothness norm", + "isValue": true, + "parent": "mesh", + "property": "", + "value": 2.0, + "min": 0.0, + "max": 2.0, + "precision": 2, + "lineEdit": false, + "enabled": true, + "tooltip": "Lp-norm used in the z-smoothness term of the objective function" + }, + "max_irls_iterations": { + "min": 0, + "group": "Sparse/blocky model", + "label": "Maximum IRLS iterations", + "tooltip": "Iterative Re-Weighted Least-squares (IRLS) 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_tiles": { + "group": "Cooling schedule/target", + "label": "Auto-scale tiles", + "value": false, + "verbose": 3, + "visible": true, + "tooltip": "Whether to auto-scale the misfit function of tiles 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 + }, + "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 line search 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": false, + "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": "Pardiso", + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "parent": "data_object", + "isValue": true, + "property": "", + "value": 1, + "min": 1, + "max": 1000, + "verbose": 2, + "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library" + }, + "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": null, + "n_threads": null, + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json new file mode 100644 index 00000000..4173786a --- /dev/null +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json @@ -0,0 +1,210 @@ +{ + "version": "0.4.0", + "title": "Magnetic Vector (MVI) PDE Forward", + "icon": "surveyairbornemagnetics", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg_drivers", + "run_command": "simpeg_drivers.potential_fields.magnetic_vector_pde.forward", + "geoh5": "", + "monitoring_directory": "", + "inducing_field_declination": { + "min": -180.0, + "max": 180.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Declination (deg)", + "value": 0.0 + }, + "inducing_field_inclination": { + "min": -90.0, + "max": 90.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Inclination (deg)", + "value": 90.0 + }, + "inducing_field_strength": { + "min": 0.0, + "max": 100000.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Strength (nT)", + "value": 50000.0 + }, + "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": "" + }, + "data_object": { + "main": true, + "group": "Survey", + "label": "Object", + "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}", + "{4b99204c-d133-4579-a916-a9c8b98cfccb}", + "{028e4905-cc97-4dab-b1bf-d76f58b501b5}" + ], + "value": "" + }, + "tmi_channel_bool": { + "group": "Survey", + "main": true, + "label": "TMI (nT)", + "value": true + }, + "bx_channel_bool": { + "group": "Survey", + "main": true, + "label": "Bx (nT)", + "value": false + }, + "by_channel_bool": { + "group": "Survey", + "main": true, + "label": "By (nT)", + "value": false + }, + "bz_channel_bool": { + "group": "Survey", + "main": true, + "label": "Bz (nT)", + "value": false + }, + "mesh": { + "group": "Mesh and models", + "main": true, + "label": "Mesh", + "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", + "value": "", + "optional": true, + "enabled": false, + "tooltip": "Select a mesh for the inversion" + }, + "starting_model": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "label": "Susceptibility (SI)", + "property": "", + "value": 0.0001 + }, + "n_cpu": { + "min": 1, + "group": "Compute", + "optional": true, + "enabled": false, + "label": "Number of CPUs", + "value": 1, + "visible": false + }, + "solver_type": "Pardiso", + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "parent": "data_object", + "isValue": true, + "property": "", + "value": 1, + "min": 1, + "max": 1000, + "verbose": 2, + "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library" + }, + "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" + }, + "generate_sweep": { + "label": "Generate sweep file", + "group": "Python run preferences", + "main": true, + "value": false, + "visible": false, + "tooltip": "Generates a file for sweeping parameters instead of running the application" + }, + "n_workers": null, + "n_threads": null, + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 94834769..76266d1c 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -189,7 +189,7 @@ def save_iteration_apparent_resistivity_directive(self): def save_property_group(self): if ( self._save_property_group is None - and self.params.inversion_type == "magnetic vector" + and "magnetic vector" in self.params.inversion_type ): self._save_property_group = directives.SavePropertyGroup( self.driver.inversion_mesh.entity, @@ -347,7 +347,10 @@ def update_sensitivity_weights_directive(self): @property def vector_inversion_directive(self): """Directive to update vector model.""" - if self._vector_inversion_directive is None and "vector" in self.factory_type: + if ( + self._vector_inversion_directive is None + and self.factory_type == "magnetic vector" + ): reference_angles = ( getattr(self.driver.params.models, "reference_model", None) is not None, getattr(self.driver.params.models, "reference_inclination", None) @@ -410,7 +413,7 @@ def assemble_keyword_arguments( "transforms": [active_cells_map, inversion_object.permutation.T], } - if self.factory_type == "magnetic vector": + if "magnetic vector" in self.factory_type: kwargs["channels"] = ["amplitude", "inclination", "declination"] kwargs["transforms"] = [ cartesian2amplitude_dip_azimuth, @@ -555,7 +558,12 @@ def reshape(values): inversion_object=inversion_object, name=name, **kwargs ) - elif self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: + elif self.factory_type in [ + "gravity", + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs = self.assemble_data_keywords_potential_fields( inversion_object=inversion_object, name=name, diff --git a/simpeg_drivers/components/factories/receiver_factory.py b/simpeg_drivers/components/factories/receiver_factory.py index 6b8409d8..325b4090 100644 --- a/simpeg_drivers/components/factories/receiver_factory.py +++ b/simpeg_drivers/components/factories/receiver_factory.py @@ -50,7 +50,11 @@ def __init__(self, params: BaseParams | BaseOptions): self.orientations = self.validate_orientations() def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: from simpeg.potential_fields.magnetics import receivers return receivers.Point @@ -150,7 +154,12 @@ def assemble_keyword_arguments( ): """Provides implementations to assemble keyword arguments for receivers object.""" kwargs = {} - if self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: + if self.factory_type in [ + "gravity", + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs["components"] = list(data) else: kwargs["storeProjections"] = True diff --git a/simpeg_drivers/components/factories/simpeg_factory.py b/simpeg_drivers/components/factories/simpeg_factory.py index b033aa13..9f6d0896 100644 --- a/simpeg_drivers/components/factories/simpeg_factory.py +++ b/simpeg_drivers/components/factories/simpeg_factory.py @@ -61,6 +61,7 @@ class SimPEGFactory(ABC): "gravity", "magnetic scalar", "magnetic vector", + "magnetic vector pde", "magnetotellurics", "tdem", "tdem 1d", diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index 8c47269f..1a1c8832 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -62,6 +62,11 @@ def concrete_object(self): return simulation.Simulation3DIntegral + if self.factory_type == "magnetic vector pde": + from simpeg.potential_fields.magnetics import simulation + + return simulation.Simulation3DDifferential + if self.factory_type == "gravity": from simpeg.potential_fields.gravity import simulation @@ -148,6 +153,19 @@ def assemble_keyword_arguments(self, survey=None, mesh=None, models=None, **kwar kwargs["active_cells"] = active_cells kwargs["chiMap"] = maps.IdentityMap(nP=int(active_cells.sum())) + if self.factory_type == "magnetic vector pde": + inject = maps.InjectActiveCells( + mesh, + active_cells=np.repeat(active_cells, 3), + value_inactive=0, + nC=mesh.n_cells * 3, + ) + kwargs["remMap"] = inject * maps.EffectiveSusceptibilityMap( + nP=active_cells.sum() * 3, + ambient_field_magnitude=survey.source_field.amplitude, + ) + kwargs["solver_dtype"] = np.float32 + if self.factory_type == "gravity": kwargs["active_cells"] = active_cells kwargs["rhoMap"] = maps.IdentityMap(nP=int(active_cells.sum())) diff --git a/simpeg_drivers/components/factories/survey_factory.py b/simpeg_drivers/components/factories/survey_factory.py index 4496ceb2..89605ea2 100644 --- a/simpeg_drivers/components/factories/survey_factory.py +++ b/simpeg_drivers/components/factories/survey_factory.py @@ -49,7 +49,11 @@ def __init__(self, params: BaseParams | BaseOptions): self.sorting = None def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: from simpeg.potential_fields.magnetics import survey elif self.factory_type == "gravity": diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 30b33a76..d2fe6669 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -74,7 +74,10 @@ def __init__(self, driver: InversionDriver): self._active_cells: np.ndarray | None = None self._driver = driver self.is_sigma = self.driver.params.physical_property == "conductivity" - self.is_vector = self.driver.params.inversion_type == "magnetic vector" + self.is_vector = self.driver.params.inversion_type in [ + "magnetic vector", + "magnetic vector pde", + ] self._starting_model = InversionModel( driver, "starting_model", is_sigma=self.is_sigma @@ -272,7 +275,10 @@ def lower_bound(self) -> np.ndarray | None: else: bound_model = self._lower_bound.model - if self.driver.params.inversion_type == "magnetic vector": + if self.driver.params.inversion_type in [ + "magnetic vector", + "magnetic vectorp pde", + ]: bound_model = None if self._upper_bound.model is not None: diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py new file mode 100644 index 00000000..e742cbb3 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py @@ -0,0 +1,17 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 .forward import MagneticVectorPDEForwardDriver +from .inversion import MagneticVectorPDEInversionDriver +from .options import ( + MagneticVectorPDEForwardOptions, + MagneticVectorPDEInversionOptions, +) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py new file mode 100644 index 00000000..2b0afeb0 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py @@ -0,0 +1,30 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 + +import sys +from pathlib import Path + +from simpeg_drivers.driver import ForwardDriver + +from .options import MagneticVectorPDEForwardOptions + + +class MagneticVectorPDEForwardDriver(ForwardDriver): + """Magnetic Vector forward driver.""" + + _params_class = MagneticVectorPDEForwardOptions + + +if __name__ == "__main__": + file = Path(sys.argv[1]).resolve() + MagneticVectorPDEForwardDriver.start_dask_run(file) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py new file mode 100644 index 00000000..191a3a2e --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py @@ -0,0 +1,30 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 + +import sys +from pathlib import Path + +from simpeg_drivers.driver import InversionDriver + +from .options import MagneticVectorPDEInversionOptions + + +class MagneticVectorPDEInversionDriver(InversionDriver): + """Magnetic Vector inversion driver.""" + + _params_class = MagneticVectorPDEInversionOptions + + +if __name__ == "__main__": + file = Path(sys.argv[1]).resolve() + MagneticVectorPDEInversionDriver.start_dask_run(file) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py new file mode 100644 index 00000000..cb2c008c --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py @@ -0,0 +1,108 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 FloatData + +from simpeg_drivers import assets_path +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + Deprecated, + DirectiveOptions, + ModelOptions, +) + + +class VectorModelPDEOptions(ModelOptions): + """ + Magnetic Vector Model options. + """ + + lower_bound: Deprecated + + +class MagneticVectorPDEForwardOptions(BaseForwardOptions): + """ + Magnetic Vector forward options. + + :param tmi_channel_bool: Total magnetic intensity channel boolean. + :param bx_channel_bool: Bx channel boolean. + :param by_channel_bool: By channel boolean. + :param bz_channel_bool: Bz channel boolean. + """ + + name: ClassVar[str] = "Magnetic Vector Forward" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/magnetic_vector_forward.ui.json" + ) + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector.forward" + title: str = "Magnetic Vector Forward" + physical_property: str = "susceptibility" + inversion_type: str = "magnetic vector pde" + + tmi_channel_bool: bool = True + bx_channel_bool: bool = False + by_channel_bool: bool = False + bz_channel_bool: bool = False + + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData + models: VectorModelPDEOptions + + +class MagneticVectorPDEInversionOptions(BaseInversionOptions): + """ + Magnetic Vector Inversion options. + + :param tmi_channel: Total magnetic intensity channel. + :param bx_channel: Bx channel. + :param by_channel: By channel. + :param bz_channel: Bz channel. + :param tmi_uncertainty: Total magnetic intensity uncertainty. + :param bx_uncertainty: Bx uncertainty. + :param by_uncertainty: By uncertainty. + :param bz_uncertainty: Bz uncertainty. + :param inducing_field_strength: Inducing field strength. + :param inducing_field_inclination: Inducing field inclination. + :param inducing_field_declination: Inducing field declination. + """ + + name: ClassVar[str] = "Magnetic Vector Inversion" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/magnetic_vector_inversion.ui.json" + ) + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector.inversion" + title: str = "Magnetic Vector Inversion" + physical_property: str = "susceptibility" + inversion_type: str = "magnetic vector pde" + + tmi_channel: FloatData | None = None + bx_channel: FloatData | None = None + by_channel: FloatData | None = None + bz_channel: FloatData | None = None + + tmi_uncertainty: float | FloatData | None = None + bx_uncertainty: float | FloatData | None = None + by_uncertainty: float | FloatData | None = None + bz_uncertainty: float | FloatData | None = None + + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData + models: VectorModelPDEOptions + + directives: DirectiveOptions = DirectiveOptions(sens_wts_threshold=1e-3) From 79d9e7f54f713edb4f2cf9cab85b78ee60626b58 Mon Sep 17 00:00:00 2001 From: domfournier Date: Thu, 9 Apr 2026 14:12:54 -0700 Subject: [PATCH 02/27] MOve setter of mapping closer to property --- simpeg_drivers/driver.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 138a51dc..cdf4b979 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -288,6 +288,22 @@ def mapping(self) -> list[maps.Projection] | None: return self._mapping + @mapping.setter + def mapping(self, value: maps.IdentityMap | list[maps.IdentityMap]): + if not isinstance(value, list): + value = [value] + + if not all( + isinstance(val, maps.IdentityMap) and val.shape[0] == self.n_values + for val in value + ): + raise TypeError( + "'mapping' must be an instance of maps.IdentityMap with shape (n_values, *). " + f"Provided {value}" + ) + + self._mapping = value + @property def models(self): """Inversion models""" @@ -312,22 +328,6 @@ def n_values(self): return self._n_values - @mapping.setter - def mapping(self, value: maps.IdentityMap | list[maps.IdentityMap]): - if not isinstance(value, list): - value = [value] - - if not all( - isinstance(val, maps.IdentityMap) and val.shape[0] == self.n_values - for val in value - ): - raise TypeError( - "'mapping' must be an instance of maps.IdentityMap with shape (n_values, *). " - f"Provided {value}" - ) - - self._mapping = value - def split_list(self, tiles: list[np.ndarray]) -> list[list[np.ndarray]]: """ Number of splits for the data misfit to be distributed evenly among workers. From 83010d2d55212009e83e59c9e15e8f29e4663ea6 Mon Sep 17 00:00:00 2001 From: domfournier Date: Thu, 9 Apr 2026 14:58:06 -0700 Subject: [PATCH 03/27] Refactor modification of reg into function --- simpeg_drivers/driver.py | 170 ++++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 75 deletions(-) diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index cdf4b979..8f2f96b7 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -570,13 +570,103 @@ def count_data(self): return finite_data_count, total_data_count + def get_modified_regularization( + self, + reg_func, + mapping, + is_rotated: bool, + forward_mesh: RegularizationMesh | None, + backward_mesh: RegularizationMesh | None, + ): + """ + Modify the regularization function with rotated operators. + + :param reg_func: Regularization function. + :param mapping: Mapping. + :param is_rotated: Whether the regularization function is rotated or not. + :param forward_mesh: Forward mesh object. + :param backward_mesh: Backward mesh object. + """ + neighbors = None + if is_rotated and not (backward_mesh or forward_mesh): + backward_mesh = RegularizationMesh( + self.inversion_mesh.mesh, active_cells=self.models.active_cells + ) + neighbors = cell_neighbors(reg_func.regularization_mesh.mesh) + + # Adjustment for 2D versus 3D problems + components = ( + "sxz" + if ( + "2d" in self.params.inversion_type or "1d" in self.params.inversion_type + ) + else "sxyz" + ) + weight_names = ["alpha_s"] + [f"length_scale_{k}" for k in components[1:]] + functions = [] + for comp, weight_name, fun in zip(components, weight_names, reg_func.objfcts): + if getattr(self.models, weight_name) is None: + setattr(reg_func, weight_name, 0.0) + functions.append(fun) + continue + + weight = mapping * getattr(self.models, weight_name) + norm = mapping * getattr(self.models, f"{comp}_norm") + + if not isinstance(fun, SparseSmoothness): + fun.set_weights(**{comp: weight}) + fun.norm = norm + functions.append(fun) + continue + + if is_rotated and not forward_mesh: + fun = set_rotated_operators( + fun, + neighbors, + comp, + self.models.gradient_dip, + self.models.gradient_direction, + ) + + average_op = getattr( + reg_func.regularization_mesh, + f"aveCC2F{fun.orientation}", + ) + fun.set_weights(**{comp: average_op @ weight}) + fun.norm = np.round(average_op @ norm, decimals=3) + functions.append(fun) + + if is_rotated: + fun.gradient_type = "components" + backward_fun = deepcopy(fun) + setattr(backward_fun, "_regularization_mesh", backward_mesh) + + # Only do it once for MVI + if not backward_mesh: + backward_fun = set_rotated_operators( + backward_fun, + neighbors, + comp, + self.models.gradient_dip, + self.models.gradient_direction, + forward=False, + ) + average_op = getattr( + backward_fun.regularization_mesh, + f"aveCC2F{fun.orientation}", + ) + backward_fun.set_weights(**{comp: average_op @ weight}) + backward_fun.norm = np.round(average_op @ norm, decimals=3) + functions.append(backward_fun) + + return functions + def get_regularization(self): if self.params.forward_only: return BaseRegularization(mesh=self.inversion_mesh.mesh) reg_funcs = [] is_rotated = self.params.models.gradient_rotation is not None - neighbors = None backward_mesh = None forward_mesh = None for mapping in self.mapping: @@ -587,83 +677,13 @@ def get_regularization(self): reference_model=self.models.reference_model, ) - if is_rotated and neighbors is None: - backward_mesh = RegularizationMesh( - self.inversion_mesh.mesh, active_cells=self.models.active_cells - ) - neighbors = cell_neighbors(reg_func.regularization_mesh.mesh) - - # Adjustment for 2D versus 3D problems - components = ( - "sxz" - if ( - "2d" in self.params.inversion_type - or "1d" in self.params.inversion_type - ) - else "sxyz" + functions = self.get_modified_regularization( + reg_func, mapping, is_rotated, forward_mesh, backward_mesh ) - weight_names = ["alpha_s"] + [f"length_scale_{k}" for k in components[1:]] - functions = [] - for comp, weight_name, fun in zip( - components, weight_names, reg_func.objfcts - ): - if getattr(self.models, weight_name) is None: - setattr(reg_func, weight_name, 0.0) - functions.append(fun) - continue - - weight = mapping * getattr(self.models, weight_name) - norm = mapping * getattr(self.models, f"{comp}_norm") - - if not isinstance(fun, SparseSmoothness): - fun.set_weights(**{comp: weight}) - fun.norm = norm - functions.append(fun) - continue - - if is_rotated: - if forward_mesh is None: - fun = set_rotated_operators( - fun, - neighbors, - comp, - self.models.gradient_dip, - self.models.gradient_direction, - ) - - average_op = getattr( - reg_func.regularization_mesh, - f"aveCC2F{fun.orientation}", - ) - fun.set_weights(**{comp: average_op @ weight}) - fun.norm = np.round(average_op @ norm, decimals=3) - functions.append(fun) - - if is_rotated: - fun.gradient_type = "components" - backward_fun = deepcopy(fun) - setattr(backward_fun, "_regularization_mesh", backward_mesh) - - # Only do it once for MVI - if not forward_mesh: - backward_fun = set_rotated_operators( - backward_fun, - neighbors, - comp, - self.models.gradient_dip, - self.models.gradient_direction, - forward=False, - ) - average_op = getattr( - backward_fun.regularization_mesh, - f"aveCC2F{fun.orientation}", - ) - backward_fun.set_weights(**{comp: average_op @ weight}) - backward_fun.norm = np.round(average_op @ norm, decimals=3) - functions.append(backward_fun) # Will avoid recomputing operators if the regularization mesh is the same - forward_mesh = reg_func.regularization_mesh + forward_mesh = functions[0].regularization_mesh + backward_mesh = functions[-1].regularization_mesh reg_func.objfcts = functions reg_func.norms = [fun.norm for fun in functions] reg_funcs.append(reg_func) From d5f50fbc9bfa96b23202aaf5e53e3db3deee93a1 Mon Sep 17 00:00:00 2001 From: domfournier Date: Thu, 9 Apr 2026 16:25:35 -0700 Subject: [PATCH 04/27] Fix typo --- 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 8f2f96b7..3f0cfa5e 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -642,7 +642,7 @@ def get_modified_regularization( setattr(backward_fun, "_regularization_mesh", backward_mesh) # Only do it once for MVI - if not backward_mesh: + if not forward_mesh: backward_fun = set_rotated_operators( backward_fun, neighbors, From afa115f1e9c01dc6f26abf5c2be8db9943292428 Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 08:39:55 -0700 Subject: [PATCH 05/27] First run through --- .../components/factories/source_factory.py | 26 ++- simpeg_drivers/components/models.py | 2 +- simpeg_drivers/utils/nested.py | 20 +- tests/run_tests/driver_mvi_pde_test.py | 179 ++++++++++++++++++ 4 files changed, 217 insertions(+), 10 deletions(-) create mode 100644 tests/run_tests/driver_mvi_pde_test.py diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index 4b96d43d..0145d57e 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -45,19 +45,23 @@ def __init__(self, params: BaseParams | BaseOptions): self.simpeg_object = self.concrete_object() def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: return mag_sources.UniformBackgroundField - elif self.factory_type == "gravity": + if self.factory_type == "gravity": return grav_sources.SourceField - elif "direct current" in self.factory_type: + if "direct current" in self.factory_type: return dc_sources.Dipole - elif "induced polarization" in self.factory_type: + if "induced polarization" in self.factory_type: return dc_sources.Dipole - elif "fdem" in self.factory_type: + if "fdem" in self.factory_type: if "fdem 1d" == self.factory_type and np.all( np.linalg.norm( np.kron( @@ -73,7 +77,7 @@ def concrete_object(self): return fem_sources.MagDipole - elif "tdem" in self.factory_type: + if "tdem" in self.factory_type: if isinstance(self.params.data_object, LargeLoopGroundTEMReceivers): return tem_sources.LineCurrent @@ -85,13 +89,15 @@ def concrete_object(self): return tem_sources.MagDipole - elif self.factory_type in [ + if self.factory_type in [ "apparent conductivity", "magnetotellurics", "tipper", ]: return ns_sources.PlanewaveXYPrimary + return None + def assemble_arguments( self, receivers=None, @@ -140,7 +146,11 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ """Provides implementations to assemble keyword arguments for receivers object.""" _ = (receivers, frequency) kwargs = {} - if self.factory_type in ["magnetic scalar", "magnetic vector"]: + if self.factory_type in [ + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs = { "amplitude": self.params.inducing_field_strength, "inclination": self.params.inducing_field_inclination, diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index d2fe6669..45759bab 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -518,8 +518,8 @@ def __init__( """ :param driver: InversionDriver object. :param model_type: Type of inversion model, can be any of MODEL_TYPES. - :param is_vector: If True, model is a vector. :param trim_active_cells: If True, remove air cells from model. + :param is_sigma: If True, model values must be strictly positive. """ self.driver = driver self.model_type = model_type diff --git a/simpeg_drivers/utils/nested.py b/simpeg_drivers/utils/nested.py index db178965..565c1264 100644 --- a/simpeg_drivers/utils/nested.py +++ b/simpeg_drivers/utils/nested.py @@ -294,7 +294,12 @@ def create_simulation( local_mesh, enforce_active=True, components=( - 3 if getattr(simulation, "model_type", None) == "vector" else 1 + 3 + if ( + getattr(simulation, "model_type", None) == "vector" + or getattr(simulation, "remMap", None) + ) + else 1 ), ) local_actives = mapping.local_active @@ -332,6 +337,19 @@ def create_simulation( kwargs["active_cells"] = local_actives + if getattr(simulation, "_remMap", None) is not None: + inject = maps.InjectActiveCells( + local_mesh, + active_cells=np.repeat(local_actives, 3), + value_inactive=0, + nC=local_mesh.n_cells * 3, + ) + kwargs["remMap"] = inject * maps.EffectiveSusceptibilityMap( + nP=local_actives.sum() * 3, + ambient_field_magnitude=simulation.survey.source_field.amplitude, + ) + kwargs["solver_dtype"] = np.float32 + if getattr(simulation, "_rhoMap", None) is not None: kwargs["rhoMap"] = maps.IdentityMap(nP=n_actives) kwargs["active_cells"] = local_actives diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py new file mode 100644 index 00000000..7c76d7f5 --- /dev/null +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -0,0 +1,179 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 + +import numpy as np +from dask.distributed import LocalCluster, performance_report +from geoh5py.groups import PropertyGroup +from geoh5py.groups.property_group import GroupTypeEnum +from geoh5py.objects import Curve +from geoh5py.workspace import Workspace + +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEForwardDriver, + MagneticVectorPDEForwardOptions, + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) +from simpeg_drivers.utils.synthetics.driver import ( + SyntheticsComponents, +) +from simpeg_drivers.utils.synthetics.options import ( + MeshOptions, + ModelOptions, + SurveyOptions, + SyntheticsComponentsOptions, +) +from tests.utils.targets import check_target, get_inversion_output, get_workspace + + +# To test the full run and validate the inversion. +# Move this file out of the test directory and run. + +target_mvi_pde_run = {"data_norm": 177.6657250156235, "phi_d": 15.6, "phi_m": 0.0556} + + +def test_magnetic_vector_pde_fwr_run( + tmp_path: Path, + n_grid_points=3, + cell_size=(5.0, 5.0, 5.0), + refinement=(2,), +): + # Run the forward + opts = SyntheticsComponentsOptions( + method="magnetic_vector_pde", + refine_plate=True, + survey=SurveyOptions( + n_stations=n_grid_points, n_lines=n_grid_points, drape=5.0 + ), + mesh=MeshOptions( + u_cell_size=cell_size[0], + v_cell_size=cell_size[1], + w_cell_size=cell_size[2], + survey_refinement=list(refinement), + topography_refinement=[0, 0, 1], + plate_refinement=[1], + ), + model=ModelOptions(anomaly=0.05), + ) + with get_workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + components = SyntheticsComponents(geoh5, options=opts) + + # Unitest dealing with Curve + _ = Curve.create( + geoh5, name=components.survey.name, vertices=components.survey.vertices + ) + geoh5.remove_entity(components.survey) + inducing_field = (50000.0, 90.0, 0.0) + params = MagneticVectorPDEForwardOptions.build( + forward_only=True, + geoh5=geoh5, + mesh=components.mesh, + topography_object=components.topography, + inducing_field_strength=inducing_field[0], + inducing_field_inclination=inducing_field[1], + inducing_field_declination=inducing_field[2], + data_object=components.survey, + starting_model=components.model, + starting_inclination=45, + starting_declination=270, + ) + fwr_driver = MagneticVectorPDEForwardDriver(params) + fwr_driver.run() + + +def test_magnetic_vector_pde_run( + tmp_path: Path, + max_iterations=5, + upper_bound=2.5e-3, + pytest=True, +): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = ( + tmp_path.parent + / "test_magnetic_vector_pde_fwr_run0" + / "inversion_test.ui.geoh5" + ) + + with Workspace(workpath) as geoh5: + tmi = geoh5.get_entity("Iteration_0_tmi")[0] + + components = SyntheticsComponents(geoh5=geoh5) + mesh = components.mesh + topography = components.topography + inducing_field = (50000.0, 90.0, 0.0) + dip, direction = mesh.add_data( + { + "dip": {"values": np.ones(mesh.n_cells) * 45}, + "direction": {"values": np.ones(mesh.n_cells) * 90}, + } + ) + gradient_rotation = PropertyGroup( + name="gradient_rotations", + property_group_type=GroupTypeEnum.DIPDIR, + properties=[direction, dip], + parent=mesh, + ) + # Run the inverse + params = MagneticVectorPDEInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + topography_object=topography, + inducing_field_strength=inducing_field[0], + inducing_field_inclination=inducing_field[1], + inducing_field_declination=inducing_field[2], + data_object=tmi.parent, + starting_model=1e-4, + reference_model=0.0, + gradient_rotation=gradient_rotation, + s_norm=0.0, + x_norm=1.0, + y_norm=1.0, + z_norm=1.0, + tmi_channel=tmi, + tmi_uncertainty=5.0, + upper_bound=upper_bound, + max_global_iterations=max_iterations, + initial_beta_ratio=5e-2, + ) + params.write_ui_json(path=tmp_path / "Inv_run.ui.json") + + driver = MagneticVectorPDEInversionDriver(params) + assert np.all(driver.models.lower_bound == -upper_bound) + driver.run() + + if pytest: + with Workspace(driver.params.geoh5.h5file): + # Re-open the workspace and get iterations + output = get_inversion_output( + driver.params.geoh5.h5file, driver.params.out_group.uid + ) + check_target(output, target_mvi_pde_run) + + +if __name__ == "__main__": + # Full run + with LocalCluster(processes=True, n_workers=2, threads_per_worker=6) as cluster: + with cluster.get_client(): + # Full run + with performance_report(filename="diagnostics.html"): + test_magnetic_vector_pde_fwr_run( + Path("./"), + n_grid_points=20, + cell_size=(5.0, 5.0, 5.0), + refinement=(4, 4), + ) + test_magnetic_vector_pde_run( + Path("./"), max_iterations=30, upper_bound=5e-3, pytest=False + ) From 2dc0a1721e89af7936337fd93a8ba39c466cf9d3 Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 11:44:47 -0700 Subject: [PATCH 06/27] Add back starting inc/dec for mvi pde --- .../magnetic_vector_pde_forward.ui.json | 32 +++++++++++++++++++ ... => magnetic_vector_pde_inversion.ui.json} | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) rename simpeg_drivers-assets/uijson/{magnetic_vector_inversion_pde.ui.json => magnetic_vector_pde_inversion.ui.json} (95%) diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json index 4173786a..1405802b 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json @@ -151,6 +151,38 @@ "property": "", "value": 0.0001 }, + "starting_inclination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Inclination (deg)", + "property": "", + "value": 0.0 + }, + "starting_declination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Declination (deg)", + "property": "", + "value": 0.0 + }, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json similarity index 95% rename from simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json rename to simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json index 96b5b5ae..f2c71db0 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_inversion_pde.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json @@ -197,6 +197,38 @@ "property": "", "value": 0.0001 }, + "starting_inclination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Initial inclination (deg)", + "property": "", + "value": 0.0 + }, + "starting_declination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Initial declination (deg)", + "property": "", + "value": 0.0 + }, "reference_model": { "association": [ "Cell", From 24232bfbe726b362df2a8ef31ef20546dcedf4fc Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 11:45:13 -0700 Subject: [PATCH 07/27] Fix issue with res model not trimmed --- simpeg_drivers/components/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 45759bab..a73d13fd 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -602,6 +602,7 @@ def edit_ndv_model(self, model): if ( getattr(self.driver.params.models, "model_type", None) == ModelTypeEnum.resistivity + and model_type == "conductivity_model" ): model_type = "resistivity_model" From b8f7756a7dc937ef700c038d544c76de2f7be483 Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 11:54:14 -0700 Subject: [PATCH 08/27] Fix tiling of active cells --- simpeg_drivers/components/factories/simulation_factory.py | 3 ++- simpeg_drivers/utils/nested.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index 1a1c8832..fcc59606 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -51,6 +51,7 @@ def __init__(self, params: BaseParams | BaseOptions): "tipper", "fdem", "tdem", + "magnetic vector pde", ]: import pymatsolver.direct as solver_module @@ -156,7 +157,7 @@ def assemble_keyword_arguments(self, survey=None, mesh=None, models=None, **kwar if self.factory_type == "magnetic vector pde": inject = maps.InjectActiveCells( mesh, - active_cells=np.repeat(active_cells, 3), + active_cells=np.tile(active_cells, 3), value_inactive=0, nC=mesh.n_cells * 3, ) diff --git a/simpeg_drivers/utils/nested.py b/simpeg_drivers/utils/nested.py index 565c1264..913f4981 100644 --- a/simpeg_drivers/utils/nested.py +++ b/simpeg_drivers/utils/nested.py @@ -340,7 +340,7 @@ def create_simulation( if getattr(simulation, "_remMap", None) is not None: inject = maps.InjectActiveCells( local_mesh, - active_cells=np.repeat(local_actives, 3), + active_cells=np.tile(local_actives, 3), value_inactive=0, nC=local_mesh.n_cells * 3, ) From b661e96ea30c27e74650a2e77614dd427588fc1b Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 11:54:42 -0700 Subject: [PATCH 09/27] Remove unused function --- simpeg_drivers/utils/synthetics/meshes.py | 36 ----------------------- 1 file changed, 36 deletions(-) diff --git a/simpeg_drivers/utils/synthetics/meshes.py b/simpeg_drivers/utils/synthetics/meshes.py index 8b8c4002..d40a4c7b 100644 --- a/simpeg_drivers/utils/synthetics/meshes.py +++ b/simpeg_drivers/utils/synthetics/meshes.py @@ -59,42 +59,6 @@ def get_mesh( ) -def get_base_octree( - survey: Points, - topography: Surface, - cell_size: tuple[float, float, float], - refinement: tuple, - padding: float, -) -> TreeMesh: - """ - Generate a survey centered TreeMesh object with topography refinement. - - :param survey: Survey object with vertices that define the core of the - tensor mesh. - :param topography: Surface used to refine the topography. - :param cell_size: Tuple defining the cell size in all directions. - :param refinement: Tuple containing the number of cells to refine at each - level around the topography. - :param padding: Distance to pad the mesh in all directions. - - :return mesh: The discretize TreeMesh object for computations. - """ - padding_distance = np.ones((3, 2)) * padding - mesh = mesh_builder_xyz( - survey.vertices - np.r_[cell_size] / 2.0, - cell_size, - depth_core=100.0, - padding_distance=padding_distance, - mesh_type="TREE", - tree_diagonal_balance=False, - ) - mesh = OctreeDriver.refine_tree_from_triangulation( - mesh, topography, levels=refinement, finalize=False - ) - - return mesh - - def get_octree_mesh( opts: MeshOptions, survey: Points, From f41af0d7ba947aee9f5dc5abf2a65e8ee3ce868b Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 11:56:02 -0700 Subject: [PATCH 10/27] Minor fixes --- .../potential_fields/magnetic_vector_pde/options.py | 2 ++ simpeg_drivers/utils/meshes.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py index cb2c008c..502259de 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py @@ -32,6 +32,8 @@ class VectorModelPDEOptions(ModelOptions): """ lower_bound: Deprecated + starting_inclination: float | FloatData | None = None + starting_declination: float | FloatData | None = None class MagneticVectorPDEForwardOptions(BaseForwardOptions): diff --git a/simpeg_drivers/utils/meshes.py b/simpeg_drivers/utils/meshes.py index afd152bd..fe104a60 100644 --- a/simpeg_drivers/utils/meshes.py +++ b/simpeg_drivers/utils/meshes.py @@ -42,11 +42,11 @@ def auto_pad(survey, factor=2) -> tuple[list[float], list[float]]: def use_vertical_padding(inversion_type): - """Return true for all electrical and potential field methods.""" + """Return False for all electrical and potential field methods.""" out = True if any( k in inversion_type - for k in ["direct current", "induced polarization", "gravity", "magnetic"] + for k in ["direct current", "induced polarization", "gravity", "magnetic "] ): out = False return out From bf184b31ec129a0ea34890cb8e429ee17b7d4a5f Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 14:26:05 -0700 Subject: [PATCH 11/27] Make sure of VectorAmplitude for mvi pde --- .../factories/directives_factory.py | 3 +- .../magnetic_vector_pde/inversion.py | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 76266d1c..6cfa0390 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -362,6 +362,7 @@ def vector_inversion_directive(self): self._vector_inversion_directive = directives.VectorInversion( self.driver.data_misfit.objfcts, self.driver.regularization, + inversion_type=self.factory_type, chifact_target=self.driver.params.cooling_schedule.chi_factor * 2, reference_angles=reference_angles, ) @@ -486,7 +487,7 @@ def volume_normalization(val): ], } - if self.factory_type == "magnetic vector": + if "magnetic vector" in self.factory_type: kwargs["channels"] = [None] kwargs["transforms"] = [ lambda x: x.reshape((-1, 3), order="F"), diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py index 191a3a2e..0880761b 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py @@ -14,6 +14,10 @@ import sys from pathlib import Path +from simpeg.maps import IdentityMap +from simpeg.objective_function import ComboObjectiveFunction +from simpeg.regularization import BaseRegularization, VectorAmplitude + from simpeg_drivers.driver import InversionDriver from .options import MagneticVectorPDEInversionOptions @@ -24,6 +28,35 @@ class MagneticVectorPDEInversionDriver(InversionDriver): _params_class = MagneticVectorPDEInversionOptions + def get_regularization(self): + if self.params.forward_only: + return BaseRegularization(mesh=self.inversion_mesh.mesh) + + reg_funcs = [] + is_rotated = self.params.models.gradient_rotation is not None + backward_mesh = None + forward_mesh = None + for mapping in self.mapping[:1]: + reg_func = VectorAmplitude( + forward_mesh or self.inversion_mesh.mesh, + active_cells=self.models.active_cells if forward_mesh is None else None, + mapping=IdentityMap(nP=self.n_values * 3), + reference_model=self.models.reference_model, + ) + + functions = self.get_modified_regularization( + reg_func, mapping, is_rotated, forward_mesh, backward_mesh + ) + + # Will avoid recomputing operators if the regularization mesh is the same + forward_mesh = functions[0].regularization_mesh + backward_mesh = functions[-1].regularization_mesh + reg_func.objfcts = functions + reg_func.norms = [fun.norm for fun in functions] + reg_funcs.append(reg_func) + + return ComboObjectiveFunction(objfcts=reg_funcs) + if __name__ == "__main__": file = Path(sys.argv[1]).resolve() From 48ac9083f9095e2512bee8d911d09d7c65b87d20 Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 15:07:51 -0700 Subject: [PATCH 12/27] Tweek unitest --- tests/run_tests/driver_mvi_pde_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index 7c76d7f5..316af71e 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -145,7 +145,7 @@ def test_magnetic_vector_pde_run( tmi_uncertainty=5.0, upper_bound=upper_bound, max_global_iterations=max_iterations, - initial_beta_ratio=5e-2, + initial_beta_ratio=1e-0, ) params.write_ui_json(path=tmp_path / "Inv_run.ui.json") @@ -175,5 +175,5 @@ def test_magnetic_vector_pde_run( refinement=(4, 4), ) test_magnetic_vector_pde_run( - Path("./"), max_iterations=30, upper_bound=5e-3, pytest=False + Path("./"), max_iterations=30, pytest=False ) From 4200218bb82de39808f802533818bd274b8e7f0b Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 10 Apr 2026 20:17:28 -0700 Subject: [PATCH 13/27] Fixes after running through joint cross --- simpeg_drivers/__init__.py | 7 +++++++ simpeg_drivers/driver.py | 2 +- tests/run_tests/driver_mvi_pde_test.py | 17 +++++------------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/simpeg_drivers/__init__.py b/simpeg_drivers/__init__.py index 5c015262..a49d430d 100644 --- a/simpeg_drivers/__init__.py +++ b/simpeg_drivers/__init__.py @@ -147,6 +147,13 @@ def assets_path() -> Path: "inversion": "MagneticVectorInversionDriver", }, ), + "magnetic vector pde": ( + "simpeg_drivers.potential_fields.magnetic_vector_pde", + { + "forward": "MagneticVectorPDEForwardDriver", + "inversion": "MagneticVectorPDEInversionDriver", + }, + ), "magnetotellurics": ( "simpeg_drivers.natural_sources.magnetotellurics", { diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 3f0cfa5e..7268e426 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -318,7 +318,7 @@ def n_blocks(self): """ Number of model components in the inversion. """ - return 3 if self.params.inversion_type == "magnetic vector" else 1 + return 3 if "magnetic vector" in self.params.inversion_type else 1 @property def n_values(self): diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index 316af71e..ff3b917c 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -43,7 +43,7 @@ target_mvi_pde_run = {"data_norm": 177.6657250156235, "phi_d": 15.6, "phi_m": 0.0556} -def test_magnetic_vector_pde_fwr_run( +def test_mvi_pde_fwr_run( tmp_path: Path, n_grid_points=3, cell_size=(5.0, 5.0, 5.0), @@ -92,7 +92,7 @@ def test_magnetic_vector_pde_fwr_run( fwr_driver.run() -def test_magnetic_vector_pde_run( +def test_mvi_pde_run( tmp_path: Path, max_iterations=5, upper_bound=2.5e-3, @@ -100,11 +100,7 @@ def test_magnetic_vector_pde_run( ): workpath = tmp_path / "inversion_test.ui.geoh5" if pytest: - workpath = ( - tmp_path.parent - / "test_magnetic_vector_pde_fwr_run0" - / "inversion_test.ui.geoh5" - ) + workpath = tmp_path.parent / "test_mvi_pde_fwr_run0" / "inversion_test.ui.geoh5" with Workspace(workpath) as geoh5: tmi = geoh5.get_entity("Iteration_0_tmi")[0] @@ -150,7 +146,6 @@ def test_magnetic_vector_pde_run( params.write_ui_json(path=tmp_path / "Inv_run.ui.json") driver = MagneticVectorPDEInversionDriver(params) - assert np.all(driver.models.lower_bound == -upper_bound) driver.run() if pytest: @@ -168,12 +163,10 @@ def test_magnetic_vector_pde_run( with cluster.get_client(): # Full run with performance_report(filename="diagnostics.html"): - test_magnetic_vector_pde_fwr_run( + test_mvi_pde_fwr_run( Path("./"), n_grid_points=20, cell_size=(5.0, 5.0, 5.0), refinement=(4, 4), ) - test_magnetic_vector_pde_run( - Path("./"), max_iterations=30, pytest=False - ) + test_mvi_pde_run(Path("./"), max_iterations=30, pytest=False) From 52f9528d2b49f3bc9d2bbc59b40d0f3341fd731f Mon Sep 17 00:00:00 2001 From: domfournier Date: Sun, 12 Apr 2026 10:55:26 -0700 Subject: [PATCH 14/27] Pass the reg models to sub-drivers. Keep reg from individual drivers --- simpeg_drivers/joint/driver.py | 12 +++++++++++- simpeg_drivers/joint/joint_cross_gradient/driver.py | 9 +++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 6d02ecd4..2529eaf6 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -31,7 +31,6 @@ from simpeg_drivers.components.factories import ( DirectivesFactory, - SaveDataGeoh5Factory, SaveModelGeoh5Factory, ) from simpeg_drivers.driver import InversionDriver @@ -144,6 +143,16 @@ def initialize(self): global_actives |= local_actives self.models.active_cells = global_actives + + # Set the model as input to the sub-drivers to force interpolation + # onto their respective mesh + for name, val in self.params.models.model_dump().items(): + if not val: + continue + + for child_driver in self.drivers: + setattr(child_driver.params.models, name, val) + for driver, wire in zip(self.drivers, self.wires, strict=True): logger.info("Initializing driver %s", driver.params.name) # Create a projection from global mesh to driver specific mesh @@ -169,6 +178,7 @@ def initialize(self): multipliers.append(mult * (mapping[0].shape[0] / projection.shape[1])) driver.data_misfit.multipliers = multipliers + self.validate_create_models() @property diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index 5a6e4395..f10609e7 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -42,8 +42,13 @@ 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) + multipliers, reg_list = [], [] + for driver in self.drivers: + for multiplier, objfct in driver.regularization: + objfct.mapping = objfct.mapping * driver.data_misfit.model_map + objfct.reference_model = self.models.reference_model + multipliers.append(multiplier) + reg_list.append(objfct) for label, driver_pairs in zip( ["a_b", "c_a", "c_b"], combinations(self.drivers, 2), strict=False From f5f0879ea74945a68348e5ab60f92dcad50e2278 Mon Sep 17 00:00:00 2001 From: domfournier Date: Sun, 12 Apr 2026 18:54:30 -0700 Subject: [PATCH 15/27] Deal with switch in MVI and cross-gradient --- simpeg_drivers/joint/joint_cross_gradient/driver.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index f10609e7..d877639f 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -42,6 +42,8 @@ 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) multipliers, reg_list = [], [] for driver in self.drivers: for multiplier, objfct in driver.regularization: @@ -54,8 +56,8 @@ def get_regularization(self): ["a_b", "c_a", "c_b"], combinations(self.drivers, 2), strict=False ): # Deal with MVI components - for mapping_a in driver_pairs[0].mapping: - for mapping_b in driver_pairs[1].mapping: + for count_a, mapping_a in enumerate(driver_pairs[0].mapping): + for count_b, mapping_b in enumerate(driver_pairs[1].mapping): wires = maps.Wires( ("a", self._mapping[driver_pairs[0], mapping_a]), ("b", self._mapping[driver_pairs[1], mapping_b]), @@ -65,6 +67,10 @@ def get_regularization(self): self.inversion_mesh.mesh, wires, active_cells=self.models.active_cells, + units=[ + "metric" if not count_a else "component", + "metric" if not count_b else "component", + ], ) ) base_multipier = ( From 28903c59ee907f10751660b441fcab8a36e136da Mon Sep 17 00:00:00 2001 From: domfournier Date: Mon, 13 Apr 2026 10:27:38 -0700 Subject: [PATCH 16/27] Deal with non-trimmed models. Refactor get_regularization for MVI PDE --- simpeg_drivers/joint/driver.py | 71 ++++++---- .../joint/joint_cross_gradient/driver.py | 18 ++- simpeg_drivers/joint/joint_surveys/options.py | 2 +- .../magnetic_vector_pde/inversion.py | 38 +++-- .../driver_joint_cross_gradient_test.py | 134 +++++++++++++++++- 5 files changed, 207 insertions(+), 56 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 2529eaf6..e97d1823 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -14,6 +14,7 @@ from __future__ import annotations from logging import getLogger +from typing import Any import numpy as np import simpeg.dask.objective_function as dask_objective_function @@ -150,6 +151,9 @@ def initialize(self): if not val: continue + if not hasattr(self.drivers[0].params.models, name): + continue + for child_driver in self.drivers: setattr(child_driver.params.models, name, val) @@ -261,8 +265,6 @@ def validate_create_models(self): for model_type in self.models.model_types: if model_type in [ "petrophysical_model", - "gradient_dip", - "gradient_direction", "starting_inclination", "starting_declination", "reference_inclination", @@ -270,11 +272,11 @@ def validate_create_models(self): ]: continue - model = getattr(self.models, f"_{model_type}").model + model_collection = getattr(self.models, f"_{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_collection.model is not None: + model = np.kron(np.ones(len(self.mapping)), model_collection.model) # Concatenate models from individual drivers projected onto the global mesh else: @@ -287,34 +289,49 @@ def validate_create_models(self): model.append(None) continue - projection = child_driver.data_misfit.model_map.deriv(vec).T + if model_collection.trim_active_cells: + projection = child_driver.data_misfit.model_map.deriv(vec).T - if isinstance(model_local_values, float): - model_local_values = ( - np.ones(projection.shape[1]) * model_local_values - ) + 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.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, + norm = np.array(np.sum(projection, axis=1)).flatten() + model.append((projection * model_local_values) / (norm + 1e-8)) + else: + ind = child_driver.inversion_mesh.mesh.get_containing_cells( + self.inversion_mesh.mesh.cell_centers ) - model = None - else: + model.append(model_local_values[ind] / len(self.drivers)) + + model = self._validate_model_consistency(model, model_type) + if model: model = np.sum(model, axis=0) if model is not None: getattr(self.models, f"_{model_type}").model = model + @staticmethod + def _validate_model_consistency(model: list[None | Any], model_type: str): + """ + Check consistency of model values across drivers for a given model type. + If some drivers have None and others have values, log a warning and ignore the model for the inversion. + """ + 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 + + return model + @property def wires(self): """ @@ -359,7 +376,7 @@ def _get_drivers_directives(self) -> list[directives.Directive]: misfits = self.data_misfit.objfcts for driver in self.drivers: - driver_directives = DirectivesFactory(driver) + driver_directives = driver.directives if hasattr(driver.params.models, "model_type") and hasattr( self.params.models, "model_type" @@ -375,7 +392,7 @@ def _get_drivers_directives(self) -> list[directives.Directive]: directives_list.append(save_model) directives_list.append( SaveLPModelGroup( - driver.inversion_mesh.entity, + self.workspace.get_entity(save_model.h5_object)[0], self._directives.update_irls_directive, ) ) diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index d877639f..966984ff 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -44,11 +44,25 @@ def get_regularization(self): """ # regularizations = super().get_regularization() # reg_list, multipliers = self._overload_regularization(regularizations) + # Trick the drivers by swapping the inversion_mesh and models + # such that the regularization uses the global mesh multipliers, reg_list = [], [] for driver in self.drivers: + # Pre-store the saving directives before the swap + _ = driver.directives.save_directives + + driver._models = self.models # pylint: disable=protected-access + driver._inversion_mesh = self.inversion_mesh # pylint: disable=protected-access + driver._n_values = self.models.n_active # pylint: disable=protected-access + driver.mapping = [ + self._mapping[driver, mapping] for mapping in driver.mapping + ] + + # Swap in stored map + for mapping in driver.mapping: + self._mapping[driver, mapping] = mapping + for multiplier, objfct in driver.regularization: - objfct.mapping = objfct.mapping * driver.data_misfit.model_map - objfct.reference_model = self.models.reference_model multipliers.append(multiplier) reg_list.append(objfct) diff --git a/simpeg_drivers/joint/joint_surveys/options.py b/simpeg_drivers/joint/joint_surveys/options.py index 55c10af9..5acc7b21 100644 --- a/simpeg_drivers/joint/joint_surveys/options.py +++ b/simpeg_drivers/joint/joint_surveys/options.py @@ -31,7 +31,7 @@ class JointSurveysModelOptions(JointModelOptions): :param reference_model: The reference model for the inversion. """ - model_type: ModelTypeEnum | None = ModelTypeEnum.conductivity + model_type: ModelTypeEnum | None = None starting_model: float | FloatData | None = None reference_model: float | FloatData | None = None diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py index 0880761b..96917069 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py @@ -14,7 +14,8 @@ import sys from pathlib import Path -from simpeg.maps import IdentityMap +import numpy as np +from simpeg.maps import Projection from simpeg.objective_function import ComboObjectiveFunction from simpeg.regularization import BaseRegularization, VectorAmplitude @@ -34,26 +35,21 @@ def get_regularization(self): reg_funcs = [] is_rotated = self.params.models.gradient_rotation is not None - backward_mesh = None - forward_mesh = None - for mapping in self.mapping[:1]: - reg_func = VectorAmplitude( - forward_mesh or self.inversion_mesh.mesh, - active_cells=self.models.active_cells if forward_mesh is None else None, - mapping=IdentityMap(nP=self.n_values * 3), - reference_model=self.models.reference_model, - ) - - functions = self.get_modified_regularization( - reg_func, mapping, is_rotated, forward_mesh, backward_mesh - ) - - # Will avoid recomputing operators if the regularization mesh is the same - forward_mesh = functions[0].regularization_mesh - backward_mesh = functions[-1].regularization_mesh - reg_func.objfcts = functions - reg_func.norms = [fun.norm for fun in functions] - reg_funcs.append(reg_func) + indices = np.hstack([mapping.P.indices for mapping in self.mapping]) + mapping = Projection(self.mapping[0].shape[1], indices) + reg_func = VectorAmplitude( + self.inversion_mesh.mesh, + active_cells=self.models.active_cells, + mapping=mapping, + reference_model=self.models.reference_model, + ) + + functions = self.get_modified_regularization( + reg_func, self.mapping[0], is_rotated, None, None + ) + reg_func.objfcts = functions + reg_func.norms = [fun.norm for fun in functions] + reg_funcs.append(reg_func) return ComboObjectiveFunction(objfcts=reg_funcs) diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index 3acf48b5..bddd50e7 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -11,6 +11,7 @@ from pathlib import Path import numpy as np +from geoh5py.groups import GroupTypeEnum, PropertyGroup from geoh5py.objects import CurrentElectrode, Octree, Points from geoh5py.workspace import Workspace @@ -34,6 +35,10 @@ MagneticVectorInversionDriver, MagneticVectorInversionOptions, ) +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) from simpeg_drivers.utils.synthetics.driver import ( SyntheticsComponents, ) @@ -290,10 +295,6 @@ def test_joint_cross_gradient_inv_run( cross_gradient_weight_a_b=1e0, cross_gradient_weight_c_a=1e0, cross_gradient_weight_c_b=1e0, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, percentile=100, ) @@ -306,6 +307,8 @@ def test_joint_cross_gradient_inv_run( driver.run() + if not pytest: + return # Mix of scaling on misfits and tiles. # Expecting that gravity tiles are independently scaled, but MagneticVector tiles take # the scaling from its total misfit. @@ -331,13 +334,134 @@ def test_joint_cross_gradient_inv_run( check_target(output, target_run) +def test_joint_cross_gradient_rotated_run( + tmp_path, + max_iterations=1, + pytest=True, +): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = ( + tmp_path.parent + / "test_joint_cross_gradient_fwr_0" + / "inversion_test.ui.geoh5" + ) + + with Workspace(workpath) as geoh5: + topography = geoh5.get_entity("topography")[0] + drivers = [] + orig_data = [] + origin = None + for name in [ + "Magnetic Vector Forward", + "Direct Current 3D Forward", + ]: + group = geoh5.get_entity(name)[0] + mesh = next(child for child in group.children if isinstance(child, Octree)) + survey = next( + child + for child in group.children + if isinstance(child, Points) and not isinstance(child, CurrentElectrode) + ) + + if origin is None: + origin = mesh.origin + else: + mesh.origin = origin + + dip, direction = mesh.add_data( + { + "dip": {"values": np.full(mesh.n_cells, 45.0)}, + "direction": {"values": np.full(mesh.n_cells, 90.0)}, + } + ) + gradient_rotation = PropertyGroup( + name="gradient_rotations", + property_group_type=GroupTypeEnum.DIPDIR, + properties=[dip, direction], + parent=mesh, + ) + + data = next(k for k in survey.children if "Iteration_0" in k.name) + orig_data.append(data.values) + + if name == "Direct Current 3D Forward": + uncertainties = survey.add_data( + { + "Uncertainties": { + "values": np.abs(data.values) * 0.05 + 1e-4, + } + } + ) + params = DC3DInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + alpha_s=1.0, + topography_object=topography, + data_object=survey, + potential_channel=data, + model_type="Resistivity (Ohm-m)", + potential_uncertainty=uncertainties, + tile_spatial=1, + starting_model=100.0, + reference_model=100.0, + gradient_rotation=gradient_rotation, + save_sensitivities=True, + solver_type="Mumps", + ) + drivers.append(DC3DInversionDriver(params)) + else: + params = MagneticVectorPDEInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + alpha_s=1.0, + 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=1e-4, + reference_model=0.0, + tmi_channel=data, + tmi_uncertainty=1e1, + tile_spatial=2, + auto_scale_tiles=False, + ) + drivers.append(MagneticVectorPDEInversionDriver(params)) + + # Run the inverse + joint_params = JointCrossGradientOptions.build( + geoh5=geoh5, + topography_object=topography, + group_a=drivers[0].out_group, + group_a_multiplier=1.0, + group_b=drivers[1].out_group, + group_b_multiplier=1.0, + max_global_iterations=max_iterations, + initial_beta_ratio=1e-1, + cross_gradient_weight_a_b=1e0, + cross_gradient_weight_c_a=1e0, + cross_gradient_weight_c_b=1e0, + percentile=100, + ) + + driver = JointCrossGradientDriver(joint_params) + + # Check that chi factors set on the sub drivers are preserved forward + np.testing.assert_allclose( + driver.data_misfit.multipliers, [0.8, 0.8, 1.0, 1.0, 1.0], atol=1e-3 + ) + + driver.run() + + if __name__ == "__main__": # Full run test_joint_cross_gradient_fwr_run( Path("./"), n_grid_points=16, n_lines=5, - cell_size=(20.0, 20.0, 20.0), + cell_size=(10.0, 10.0, 10.0), refinement=(4, 4), ) test_joint_cross_gradient_inv_run( From 74029959e2864030a68c1e1def33cba2b86113f6 Mon Sep 17 00:00:00 2001 From: domfournier Date: Mon, 13 Apr 2026 12:24:31 -0700 Subject: [PATCH 17/27] Temp lock on simpeg@2799 --- .../py-3.12-linux-64-dev.conda.lock.yml | 34 +- environments/py-3.12-linux-64.conda.lock.yml | 26 +- .../py-3.12-win-64-dev.conda.lock.yml | 34 +- environments/py-3.12-win-64.conda.lock.yml | 26 +- .../py-3.13-linux-64-dev.conda.lock.yml | 40 +- environments/py-3.13-linux-64.conda.lock.yml | 28 +- .../py-3.13-win-64-dev.conda.lock.yml | 40 +- environments/py-3.13-win-64.conda.lock.yml | 28 +- .../py-3.14-linux-64-dev.conda.lock.yml | 40 +- environments/py-3.14-linux-64.conda.lock.yml | 28 +- .../py-3.14-win-64-dev.conda.lock.yml | 40 +- environments/py-3.14-win-64.conda.lock.yml | 28 +- py-3.12.conda-lock.yml | 386 ++++++------ py-3.13.conda-lock.yml | 590 +++++++++--------- py-3.14.conda-lock.yml | 590 +++++++++--------- pyproject.toml | 2 +- 16 files changed, 980 insertions(+), 980 deletions(-) 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 21db3393..0fa447be 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: aafe1c8abf5f2416d4f10fa06cf2d0c04c47baf7648a31102aaf49033caf8d1a +# input_hash: bc1aa2a955652416578d51e28958bc7e1094ef19db59b9958d4b2c9f021b97d7 channels: - conda-forge @@ -45,7 +45,7 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py312h460c074_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -74,7 +74,7 @@ dependencies: - geoana=0.8.1=np2py312h2a48985_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py312ha829cd9_101 + - h5py=3.16.0=nompi_py312ha829cd9_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -84,7 +84,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyha191276_1 - ipython=9.12.0=pyhecfbec7_0 @@ -141,16 +141,16 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libnghttp2=1.68.1=h877daf1_0 - libnsl=2.0.1=hb9d3cd8_1 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libsodium=1.0.21=h280c20c_3 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -163,7 +163,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h8a5da7c_1 @@ -193,7 +193,7 @@ dependencies: - numpy=2.4.3=py312h33ff503_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py312h7f6eeab_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py312h8ecdadd_0 @@ -204,9 +204,9 @@ dependencies: - pexpect=4.9.0=pyhd8ed1ab_1 - pillow=12.2.0=py312h50c33e8_0 - pip=26.0.1=pyh8b19718_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py312h5253ce2_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -221,7 +221,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyha55dd90_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - python=3.12.13=hd63d673_0_cpython - python-dateutil=2.9.0.post0=pyhe01879c_2 @@ -301,10 +301,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index 54d56e07..e02d9b42 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: aafe1c8abf5f2416d4f10fa06cf2d0c04c47baf7648a31102aaf49033caf8d1a +# input_hash: bc1aa2a955652416578d51e28958bc7e1094ef19db59b9958d4b2c9f021b97d7 channels: - conda-forge @@ -28,7 +28,7 @@ dependencies: - ca-certificates=2026.2.25=hbd8a1cb_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - contourpy=1.3.3=py312h0a2e395_4 - cycler=0.12.1=pyhcf101f3_2 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py312h2a48985_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py312ha829cd9_101 + - h5py=3.16.0=nompi_py312ha829cd9_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -79,15 +79,15 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libnghttp2=1.68.1=h877daf1_0 - libnsl=2.0.1=hb9d3cd8_1 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -99,7 +99,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h8a5da7c_1 - matplotlib-base=3.10.8=py312he3d6523_0 @@ -114,7 +114,7 @@ dependencies: - numpy=2.4.3=py312h33ff503_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py312h7f6eeab_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py312h8ecdadd_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -169,10 +169,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 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 07f8341a..e1fc9a5f 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 242cc486eeea4891712e6b25f7d1c4461e1caa4743b40d8b5da026391c01085c +# input_hash: 8ef22be36f27a804454bb91376e806f56305f64fc625cc801d62acd50efac5ea channels: - conda-forge @@ -44,7 +44,7 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py312he06e257_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -73,7 +73,7 @@ dependencies: - geoana=0.8.1=np2py312h7c90ba1_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py312h5ddec8c_101 + - h5py=3.16.0=nompi_py312h5ddec8c_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -82,7 +82,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyh6dadd2b_1 - ipython=9.12.0=pyhccfa634_0 @@ -133,13 +133,13 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 - - libpng=1.6.56=h7351971_0 + - liblzma=5.8.3=hfd05255_0 + - libpng=1.6.57=h7351971_0 - libsodium=1.0.21=h6a83c73_3 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -148,7 +148,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h05f76fc_1 @@ -175,7 +175,7 @@ dependencies: - numpy=2.4.3=py312ha3f287d_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py312h83acffa_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py312h95189c4_0 @@ -185,9 +185,9 @@ dependencies: - partd=1.4.2=pyhd8ed1ab_0 - pillow=12.2.0=py312h31f0997_0 - pip=26.0.1=pyh8b19718_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py312he5662c2_0 - pthread-stubs=0.4=h0e40799_1002 @@ -201,7 +201,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyh09c184e_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - python=3.12.13=h0159041_0_cpython - python-dateutil=2.9.0.post0=pyhe01879c_2 @@ -286,10 +286,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 107d1824..ce143cbe 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 242cc486eeea4891712e6b25f7d1c4461e1caa4743b40d8b5da026391c01085c +# input_hash: 8ef22be36f27a804454bb91376e806f56305f64fc625cc801d62acd50efac5ea channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - ca-certificates=2026.2.25=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.3=py312h78d62e6_4 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py312h7c90ba1_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py312h5ddec8c_101 + - h5py=3.16.0=nompi_py312h5ddec8c_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -72,12 +72,12 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 - - libpng=1.6.56=h7351971_0 + - liblzma=5.8.3=hfd05255_0 + - libpng=1.6.57=h7351971_0 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -86,7 +86,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h05f76fc_1 - matplotlib-base=3.10.8=py312h0ebf65c_0 @@ -98,7 +98,7 @@ dependencies: - numpy=2.4.3=py312ha3f287d_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py312h83acffa_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py312h95189c4_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -156,10 +156,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-linux-64-dev.conda.lock.yml b/environments/py-3.13-linux-64-dev.conda.lock.yml index f24320eb..6f82dd8a 100644 --- a/environments/py-3.13-linux-64-dev.conda.lock.yml +++ b/environments/py-3.13-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 9c084fb4e43ef817a9ccbd7d830c295486fa3a57249edd4c6a77fb42bd4c7ff0 +# input_hash: ab72b4bebbacd7a7ac0b51c81b4870bbcca4935daf3dca65ceddc78f745302e2 channels: - conda-forge @@ -45,13 +45,13 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py313hf46b229_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 - contourpy=1.3.3=py313hc8edb43_4 - coverage=7.13.5=py313h3dea7bd_0 - - cpython=3.13.12=py313hd8ed1ab_100 + - cpython=3.13.13=py313hd8ed1ab_100 - cycler=0.12.1=pyhcf101f3_2 - cytoolz=1.1.0=py313h07c4f96_2 - dask-core=2025.3.1=pyhd8ed1ab_0 @@ -74,7 +74,7 @@ dependencies: - geoana=0.8.1=np2py313h0f78c12_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py313h22c32d4_101 + - h5py=3.16.0=nompi_py313h22c32d4_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -84,7 +84,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyha191276_1 - ipython=9.12.0=pyhecfbec7_0 @@ -141,16 +141,16 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libmpdec=4.0.0=hb03c661_1 - libnghttp2=1.68.1=h877daf1_0 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libsodium=1.0.21=h280c20c_3 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -162,7 +162,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313h3dea7bd_1 @@ -192,7 +192,7 @@ dependencies: - numpy=2.4.3=py313hf6604e3_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py313ha4be090_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py313hbfd7664_0 @@ -203,9 +203,9 @@ dependencies: - pexpect=4.9.0=pyhd8ed1ab_1 - pillow=12.2.0=py313h80991f8_0 - pip=26.0.1=pyh145f28c_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py313h54dd161_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -220,12 +220,12 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyha55dd90_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - - python=3.13.12=hc97d973_100_cp313 + - python=3.13.13=h6add32d_100_cp313 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-fastjsonschema=2.21.2=pyhe01879c_0 - - python-gil=3.13.12=h4df99d1_100 + - python-gil=3.13.13=h4df99d1_100 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-mumps=0.0.6=nompi_h2980587 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -298,10 +298,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-linux-64.conda.lock.yml b/environments/py-3.13-linux-64.conda.lock.yml index a5eebe9f..1199be89 100644 --- a/environments/py-3.13-linux-64.conda.lock.yml +++ b/environments/py-3.13-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 9c084fb4e43ef817a9ccbd7d830c295486fa3a57249edd4c6a77fb42bd4c7ff0 +# input_hash: ab72b4bebbacd7a7ac0b51c81b4870bbcca4935daf3dca65ceddc78f745302e2 channels: - conda-forge @@ -28,7 +28,7 @@ dependencies: - ca-certificates=2026.2.25=hbd8a1cb_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - contourpy=1.3.3=py313hc8edb43_4 - cycler=0.12.1=pyhcf101f3_2 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py313h0f78c12_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py313h22c32d4_101 + - h5py=3.16.0=nompi_py313h22c32d4_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -79,15 +79,15 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libmpdec=4.0.0=hb03c661_1 - libnghttp2=1.68.1=h877daf1_0 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -98,7 +98,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313h3dea7bd_1 - matplotlib-base=3.10.8=py313h683a580_0 @@ -113,7 +113,7 @@ dependencies: - numpy=2.4.3=py313hf6604e3_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py313ha4be090_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py313hbfd7664_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -127,7 +127,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyha55dd90_7 - - python=3.13.12=hc97d973_100_cp313 + - python=3.13.13=h6add32d_100_cp313 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-mumps=0.0.6=nompi_h2980587 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -166,10 +166,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-win-64-dev.conda.lock.yml b/environments/py-3.13-win-64-dev.conda.lock.yml index 3bd6c28e..128c85c2 100644 --- a/environments/py-3.13-win-64-dev.conda.lock.yml +++ b/environments/py-3.13-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 634cec3ecb56deda7d45fbb3187fdfd23a39124f4735afaafd63281ac1d4e160 +# input_hash: 58c79e8597323e16f4e06e8d3de574e0edf3fffdd63e9aa1e24fc6b25b5e7c60 channels: - conda-forge @@ -44,13 +44,13 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py313h5ea7bf4_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 - contourpy=1.3.3=py313h1a38498_4 - coverage=7.13.5=py313hd650c13_0 - - cpython=3.13.12=py313hd8ed1ab_100 + - cpython=3.13.13=py313hd8ed1ab_100 - cycler=0.12.1=pyhcf101f3_2 - cytoolz=1.1.0=py313h5ea7bf4_2 - dask-core=2025.3.1=pyhd8ed1ab_0 @@ -73,7 +73,7 @@ dependencies: - geoana=0.8.1=np2py313hedd11bf_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py313hd050a09_101 + - h5py=3.16.0=nompi_py313hd050a09_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -82,7 +82,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyh6dadd2b_1 - ipython=9.12.0=pyhccfa634_0 @@ -133,14 +133,14 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 + - liblzma=5.8.3=hfd05255_0 - libmpdec=4.0.0=hfd05255_1 - - libpng=1.6.56=h7351971_0 + - libpng=1.6.57=h7351971_0 - libsodium=1.0.21=h6a83c73_3 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -149,7 +149,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313hd650c13_1 @@ -176,7 +176,7 @@ dependencies: - numpy=2.4.3=py313ha8dc839_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py313hc624790_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py313h26f5e95_0 @@ -186,9 +186,9 @@ dependencies: - partd=1.4.2=pyhd8ed1ab_0 - pillow=12.2.0=py313h38f99e1_0 - pip=26.0.1=pyh145f28c_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py313h5fd188c_0 - pthread-stubs=0.4=h0e40799_1002 @@ -202,12 +202,12 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyh09c184e_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - - python=3.13.12=h09917c8_100_cp313 + - python=3.13.13=h09917c8_100_cp313 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-fastjsonschema=2.21.2=pyhe01879c_0 - - python-gil=3.13.12=h4df99d1_100 + - python-gil=3.13.13=h4df99d1_100 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-mumps=0.0.6=nompi_h88661b0 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -285,10 +285,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-win-64.conda.lock.yml b/environments/py-3.13-win-64.conda.lock.yml index 9abd6c31..a2bd5430 100644 --- a/environments/py-3.13-win-64.conda.lock.yml +++ b/environments/py-3.13-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 634cec3ecb56deda7d45fbb3187fdfd23a39124f4735afaafd63281ac1d4e160 +# input_hash: 58c79e8597323e16f4e06e8d3de574e0edf3fffdd63e9aa1e24fc6b25b5e7c60 channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - ca-certificates=2026.2.25=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.3=py313h1a38498_4 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py313hedd11bf_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py313hd050a09_101 + - h5py=3.16.0=nompi_py313hd050a09_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -72,13 +72,13 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 + - liblzma=5.8.3=hfd05255_0 - libmpdec=4.0.0=hfd05255_1 - - libpng=1.6.56=h7351971_0 + - libpng=1.6.57=h7351971_0 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -87,7 +87,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313hd650c13_1 - matplotlib-base=3.10.8=py313he1ded55_0 @@ -99,7 +99,7 @@ dependencies: - numpy=2.4.3=py313ha8dc839_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py313hc624790_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py313h26f5e95_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -113,7 +113,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyh09c184e_7 - - python=3.13.12=h09917c8_100_cp313 + - python=3.13.13=h09917c8_100_cp313 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-mumps=0.0.6=nompi_h88661b0 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -155,10 +155,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64-dev.conda.lock.yml b/environments/py-3.14-linux-64-dev.conda.lock.yml index 790196a6..30fbc519 100644 --- a/environments/py-3.14-linux-64-dev.conda.lock.yml +++ b/environments/py-3.14-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 6b8cd4100493c90834719717e9dba0c8025d7cf52a516970a8ba54b345ad21d1 +# input_hash: 42453e2827c5fc22dbe670bd53c2f24f8ae50771c8aecf05f12ff7afb4a60ec6 channels: - conda-forge @@ -45,13 +45,13 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py314h4a8dc5f_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 - contourpy=1.3.3=py314h97ea11e_4 - coverage=7.13.5=py314h67df5f8_0 - - cpython=3.14.3=py314hd8ed1ab_101 + - cpython=3.14.4=py314hd8ed1ab_100 - cycler=0.12.1=pyhcf101f3_2 - cytoolz=1.1.0=py314h5bd0f2a_2 - dask-core=2025.3.1=pyhd8ed1ab_0 @@ -74,7 +74,7 @@ dependencies: - geoana=0.8.1=np2py314hb287c12_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py314hddf7a69_101 + - h5py=3.16.0=nompi_py314hddf7a69_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -84,7 +84,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyha191276_1 - ipython=9.12.0=pyhecfbec7_0 @@ -141,16 +141,16 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libmpdec=4.0.0=hb03c661_1 - libnghttp2=1.68.1=h877daf1_0 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libsodium=1.0.21=h280c20c_3 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -162,7 +162,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py314h67df5f8_1 @@ -192,7 +192,7 @@ dependencies: - numpy=2.4.3=py314h2b28147_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py314hf3b76af_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py314hb4ffadd_0 @@ -203,9 +203,9 @@ dependencies: - pexpect=4.9.0=pyhd8ed1ab_1 - pillow=12.2.0=py314h8ec4b1a_0 - pip=26.0.1=pyh145f28c_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py314h0f05182_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -220,12 +220,12 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyha55dd90_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - - python=3.14.3=h32b2ec7_101_cp314 + - python=3.14.4=habeac84_100_cp314 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-fastjsonschema=2.21.2=pyhe01879c_0 - - python-gil=3.14.3=h4df99d1_101 + - python-gil=3.14.4=h4df99d1_100 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-mumps=0.0.6=nompi_hd9a44b4 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -299,10 +299,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64.conda.lock.yml b/environments/py-3.14-linux-64.conda.lock.yml index 7bb0f6db..c53d66be 100644 --- a/environments/py-3.14-linux-64.conda.lock.yml +++ b/environments/py-3.14-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 6b8cd4100493c90834719717e9dba0c8025d7cf52a516970a8ba54b345ad21d1 +# input_hash: 42453e2827c5fc22dbe670bd53c2f24f8ae50771c8aecf05f12ff7afb4a60ec6 channels: - conda-forge @@ -28,7 +28,7 @@ dependencies: - ca-certificates=2026.2.25=hbd8a1cb_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyh8f84b5b_1 + - click=8.3.2=pyhc90fa1f_0 - cloudpickle=3.1.2=pyhcf101f3_1 - contourpy=1.3.3=py314h97ea11e_4 - cycler=0.12.1=pyhcf101f3_2 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py314hb287c12_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py314hddf7a69_101 + - h5py=3.16.0=nompi_py314hddf7a69_102 - hdf5=2.1.0=nompi_hd4fcb43_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -79,15 +79,15 @@ dependencies: - libgfortran5=15.2.0=h68bc16d_18 - libhwloc=2.12.2=default_hafda6a7_1000 - libiconv=1.18=h3b78370_2 - - libjpeg-turbo=3.1.2=hb03c661_0 + - libjpeg-turbo=3.1.4.1=hb03c661_0 - liblapack=3.11.0=6_h5e43f62_mkl - - liblzma=5.8.2=hb03c661_0 + - liblzma=5.8.3=hb03c661_0 - libmpdec=4.0.0=hb03c661_1 - libnghttp2=1.68.1=h877daf1_0 - - libpng=1.6.56=h421ea60_0 + - libpng=1.6.57=h421ea60_0 - libscotch=7.0.11=int64_hfcc3fd4_2 - libspatialindex=2.1.0=he57a185_0 - - libsqlite=3.52.0=h0c1763c_0 + - libsqlite=3.53.0=h0c1763c_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.2.0=h934c35e_18 - libstdcxx-ng=15.2.0=hdf11a46_18 @@ -98,7 +98,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_2 - - llvm-openmp=22.1.2=h4922eb0_0 + - llvm-openmp=22.1.3=h4922eb0_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py314h67df5f8_1 - matplotlib-base=3.10.8=py314h1194b4b_0 @@ -113,7 +113,7 @@ dependencies: - numpy=2.4.3=py314h2b28147_0 - openjpeg=2.5.4=h55fea9a_0 - openpyxl=3.1.5=py314hf3b76af_3 - - openssl=3.6.1=h35e630c_1 + - openssl=3.6.2=h35e630c_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py314hb4ffadd_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -127,7 +127,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyha55dd90_7 - - python=3.14.3=h32b2ec7_101_cp314 + - python=3.14.4=habeac84_100_cp314 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-mumps=0.0.6=nompi_hd9a44b4 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -167,10 +167,10 @@ dependencies: - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64-dev.conda.lock.yml b/environments/py-3.14-win-64-dev.conda.lock.yml index b65365f8..585dbd81 100644 --- a/environments/py-3.14-win-64-dev.conda.lock.yml +++ b/environments/py-3.14-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: b56575358cf9c86097af766e84815a217fa1f2932b34252343b018b28a5ce092 +# input_hash: 9223dd0910d3e96424d78fa72e026a9bf745e7b72f9e8f57200b871e3187bf84 channels: - conda-forge @@ -44,13 +44,13 @@ dependencies: - certifi=2026.2.25=pyhd8ed1ab_0 - cffi=2.0.0=py314h5a2d7ad_1 - charset-normalizer=3.4.7=pyhd8ed1ab_0 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 - contourpy=1.3.3=py314hf309875_4 - coverage=7.13.5=py314h2359020_0 - - cpython=3.14.3=py314hd8ed1ab_101 + - cpython=3.14.4=py314hd8ed1ab_100 - cycler=0.12.1=pyhcf101f3_2 - cytoolz=1.1.0=py314h5a2d7ad_2 - dask-core=2025.3.1=pyhd8ed1ab_0 @@ -73,7 +73,7 @@ dependencies: - geoana=0.8.1=np2py314h1495373_0 - h11=0.16.0=pyhcf101f3_1 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py314h02517ec_101 + - h5py=3.16.0=nompi_py314h02517ec_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -82,7 +82,7 @@ dependencies: - idna=3.11=pyhd8ed1ab_0 - imagesize=2.0.0=pyhd8ed1ab_0 - importlib-metadata=8.8.0=pyhcf101f3_0 - - importlib_resources=6.5.2=pyhd8ed1ab_0 + - importlib_resources=7.1.0=pyhd8ed1ab_0 - iniconfig=2.3.0=pyhd8ed1ab_0 - ipykernel=7.2.0=pyh6dadd2b_1 - ipython=9.12.0=pyhccfa634_0 @@ -133,14 +133,14 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 + - liblzma=5.8.3=hfd05255_0 - libmpdec=4.0.0=hfd05255_1 - - libpng=1.6.56=h7351971_0 + - libpng=1.6.57=h7351971_0 - libsodium=1.0.21=h6a83c73_3 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -149,7 +149,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py314h2359020_1 @@ -176,7 +176,7 @@ dependencies: - numpy=2.4.3=py314h02f10f6_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py314hccc76fc_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py314hf700ef7_0 @@ -186,9 +186,9 @@ dependencies: - partd=1.4.2=pyhd8ed1ab_0 - pillow=12.2.0=py314h61b30b5_0 - pip=26.0.1=pyh145f28c_0 - - platformdirs=4.9.4=pyhcf101f3_0 + - platformdirs=4.9.6=pyhcf101f3_0 - pluggy=1.6.0=pyhf9edf01_1 - - prometheus_client=0.24.1=pyhd8ed1ab_0 + - prometheus_client=0.25.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.52=pyha770c72_0 - psutil=7.2.2=py314hc5dbbe4_0 - pthread-stubs=0.4=h0e40799_1002 @@ -202,12 +202,12 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyh09c184e_7 - - pytest=9.0.2=pyhcf101f3_0 + - pytest=9.0.3=pyhc364b38_1 - pytest-cov=7.1.0=pyhcf101f3_0 - - python=3.14.3=h4b44e0e_101_cp314 + - python=3.14.4=h4b44e0e_100_cp314 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-fastjsonschema=2.21.2=pyhe01879c_0 - - python-gil=3.14.3=h4df99d1_101 + - python-gil=3.14.4=h4df99d1_100 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-mumps=0.0.6=nompi_h3182675 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -286,10 +286,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64.conda.lock.yml b/environments/py-3.14-win-64.conda.lock.yml index 69991d55..49c07b03 100644 --- a/environments/py-3.14-win-64.conda.lock.yml +++ b/environments/py-3.14-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: b56575358cf9c86097af766e84815a217fa1f2932b34252343b018b28a5ce092 +# input_hash: 9223dd0910d3e96424d78fa72e026a9bf745e7b72f9e8f57200b871e3187bf84 channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - ca-certificates=2026.2.25=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - - click=8.3.1=pyha7b4d00_1 + - click=8.3.2=pyh6dadd2b_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.3=py314hf309875_4 @@ -44,7 +44,7 @@ dependencies: - fsspec=2026.3.0=pyhd8ed1ab_0 - geoana=0.8.1=np2py314h1495373_0 - h2=4.3.0=pyhcf101f3_0 - - h5py=3.16.0=nompi_py314h02517ec_101 + - h5py=3.16.0=nompi_py314h02517ec_102 - hdf5=2.1.0=nompi_hd96b29f_104 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -72,13 +72,13 @@ dependencies: - libgomp=15.2.0=h8ee18e1_18 - libhwloc=2.12.2=default_h4379cf1_1000 - libiconv=1.18=hc1393d2_2 - - libjpeg-turbo=3.1.2=hfd05255_0 + - libjpeg-turbo=3.1.4.1=hfd05255_0 - liblapack=3.11.0=6_hf9ab0e9_mkl - - liblzma=5.8.2=hfd05255_0 + - liblzma=5.8.3=hfd05255_0 - libmpdec=4.0.0=hfd05255_1 - - libpng=1.6.56=h7351971_0 + - libpng=1.6.57=h7351971_0 - libspatialindex=2.1.0=h518811d_0 - - libsqlite=3.52.0=hf5d6505_0 + - libsqlite=3.53.0=hf5d6505_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.1=h8f73337_1 - libwebp-base=1.6.0=h4d5522a_0 @@ -87,7 +87,7 @@ dependencies: - libxml2=2.15.2=h5d26750_0 - libxml2-16=2.15.2=h692994f_0 - libzlib=1.3.2=hfd05255_2 - - llvm-openmp=22.1.2=h4fa8253_0 + - llvm-openmp=22.1.3=h4fa8253_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py314h2359020_1 - matplotlib-base=3.10.8=py314hfa45d96_0 @@ -99,7 +99,7 @@ dependencies: - numpy=2.4.3=py314h02f10f6_0 - openjpeg=2.5.4=h0e57b4f_0 - openpyxl=3.1.5=py314hccc76fc_3 - - openssl=3.6.1=hf411b9b_1 + - openssl=3.6.2=hf411b9b_0 - packaging=26.0=pyhcf101f3_0 - pandas=3.0.2=py314hf700ef7_0 - partd=1.4.2=pyhd8ed1ab_0 @@ -113,7 +113,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.3.2=pyhcf101f3_0 - pysocks=1.7.1=pyh09c184e_7 - - python=3.14.3=h4b44e0e_101_cp314 + - python=3.14.4=h4b44e0e_100_cp314 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-mumps=0.0.6=nompi_h3182675 - python-tzdata=2026.1=pyhd8ed1ab_0 @@ -156,10 +156,10 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 - - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 variables: KMP_WARNINGS: 0 diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index 00cbdfe9..f816feab 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: 242cc486eeea4891712e6b25f7d1c4461e1caa4743b40d8b5da026391c01085c - linux-64: aafe1c8abf5f2416d4f10fa06cf2d0c04c47baf7648a31102aaf49033caf8d1a + win-64: 8ef22be36f27a804454bb91376e806f56305f64fc625cc801d62acd50efac5ea + linux-64: bc1aa2a955652416578d51e28958bc7e1094ef19db59b9958d4b2c9f021b97d7 channels: - url: conda-forge used_env_vars: [] @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -764,7 +764,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1131,30 +1131,30 @@ package: category: dev optional: true - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: linux-64 dependencies: __unix: '' - python: '' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + python: '>=3.10' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda hash: - md5: ea8a6c3256897cc31263de9f455e25d9 - sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 + md5: 4d18bc3af7cfcea97bd817164672a08c + sha256: 526d434cf5390310f40f34ea6ec4f0c225cdf1e419010e624d399b13b2059f0f category: main optional: false - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: win-64 dependencies: __win: '' colorama: '' - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: - md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e - sha256: c3bc9a49930fa1c3383a1485948b914823290efac859a2587ca57a270a652e08 + md5: 290d6b8ba791f99e068327e5d17e8462 + sha256: e67e85d5837cf0b0151b58b449badb0a8c2018d209e05c28f1b0c079e6e93666 category: main optional: false - name: cloudpickle @@ -1174,7 +1174,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1222,7 +1222,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1339,7 +1339,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1542,7 +1542,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1934,7 +1934,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1963,7 +1963,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1982,10 +1982,10 @@ package: numpy: '>=1.23,<3' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_102.conda hash: - md5: ecb3d9fd8598b730103184f2559ecdc6 - sha256: 3779e40557eb6784750cf7c7a6dcfb2a1b0bee473eb096d5431840c2b6055a68 + md5: c6e5cf708b01707fe4cd5e4dc56cf4cc + sha256: 578ab0db104435ac003061e103789299720fc49b8b3e8401dabd5130a1ef8663 category: main optional: false - name: h5py @@ -2001,10 +2001,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py312h5ddec8c_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py312h5ddec8c_102.conda hash: - md5: 29b2c5e3b262709ff1a36665b3542bdd - sha256: dce4cf11fdbb967008abe051d8ae774b01e39a0730f7ce775c0b6d8f1e780364 + md5: c1973eb20afef124242b807fd28dea43 + sha256: 721837b0a457a399d43a431fb55203f5b0adc640c7ffa453d0aa921f9b61f1c9 category: main optional: false - name: hdf5 @@ -2107,7 +2107,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2251,7 +2251,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2260,29 +2260,29 @@ package: category: main optional: false - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: iniconfig @@ -2349,7 +2349,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2394,7 +2394,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2586,7 +2586,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2660,7 +2660,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2690,7 +2690,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2717,7 +2717,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2794,7 +2794,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2822,7 +2822,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2852,7 +2852,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2885,7 +2885,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2921,7 +2921,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2981,7 +2981,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -3012,7 +3012,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3128,7 +3128,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3890,30 +3890,30 @@ package: category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda hash: - md5: 8397539e3a0bbd1695584fb4f927485a - sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 + md5: 6178c6f2fb254558238ef4e6c56fb782 + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda hash: - md5: 56a686f92ac0273c0f6af58858a3f013 - sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 + md5: 25a127bad5470852b30b239f030ec95b + sha256: 698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d category: main optional: false - name: liblapack @@ -3941,30 +3941,30 @@ package: category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda hash: - md5: c7c83eecbb72d88b940c249af56c8b17 - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: b88d90cad08e6bc8ad540cb310a761fb + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda hash: - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c + md5: 8f83619ab1588b98dd99c90b0bfc5c6d + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 category: main optional: false - name: libnghttp2 @@ -3999,21 +3999,21 @@ package: category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libzlib: '>=1.3.2,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.57-h421ea60_0.conda hash: - md5: 97169784f0775c85683c3d8badcea2c3 - sha256: 4f9fca3bc21e485ec0b3eb88db108b6cf9ab9a481cdf7d2ac6f9d30350b45ead + md5: 06f225e6d8c549ad6c0201679828a882 + sha256: 06323fb0a831440f0b72a53013182e1d4bb219e3ea958bb37af98b25dc0cf518 category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: win-64 dependencies: @@ -4021,10 +4021,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.56-h7351971_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.57-h7351971_0.conda hash: - md5: bedc0fc6a8fb31b8013878ea20c76bae - sha256: 0ab8890b7551bae4fc2a1aada8937789a6205c9ba9f322552a24e97b2d9b33b8 + md5: 3e40866d979cf6faba7263de9c2b4b99 + sha256: e6bcba34dc6b4855f5fcd988980d06978ec33686dde8b99fe75fa76e6620d394 category: main optional: false - name: libscotch @@ -4101,31 +4101,31 @@ package: category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda + libzlib: '>=1.3.2,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.53.0-h0c1763c_0.conda hash: - md5: a7bda2babcbb004443cb1c0be9a8c353 - sha256: 1daeb5187efcdbe3bdf2dc66f1161e09cb8dfd01618015d2106feae13cf3390d + md5: 393c8b31bd128e3d979e7ec17e9507c6 + sha256: d1688f91c013f9be0ad46492d4ec976ccc1dff5705a0b42be957abb73bf853bf category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda hash: - md5: 8830689d537fda55f990620680934bb1 - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 + md5: 4152b5a8d2513fd7ae9fb9f221a5595d + sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 category: main optional: false - name: libssh2 @@ -4432,29 +4432,29 @@ package: category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.2-h4922eb0_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.3-h4922eb0_0.conda hash: - md5: 2a60ab96432bc74eedbcda8a528080a1 - sha256: 67fa0977eeb7f983b626aaa815b1e9eba3314f5ea5bf99ca0e91f26221dd9bbb + md5: f7781cb22afa62ef27fd0b3300c53c86 + sha256: 39ae724bd3cde1381df53bfb53e4d39da0dd613b180fdda5ac0a8ce1b43fb525 category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.3-h4fa8253_0.conda hash: - md5: 29407a30bd93dc8c11c03ca60249a340 - sha256: fa8bd542624507309cbdfc620bdfe546ed823d418e6ba878977d48da7a0f6212 + md5: fa585aca061eaaae7225df2e85370bf7 + sha256: b82d43c9c52287204c929542e146b54e3eab520dba47c7b3e973ec986bf40f92 category: main optional: false - name: locket @@ -4729,7 +4729,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4979,7 +4979,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5140,7 +5140,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5319,21 +5319,21 @@ package: category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' ca-certificates: '' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda hash: - md5: f61eb8cd60ff9057122a3d338b99c00f - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c + md5: da1b85b6a87e141f5140bb9924cecab0 + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: win-64 dependencies: @@ -5341,10 +5341,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda hash: - md5: eb585509b815415bc964b2c7e11c7eb3 - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 + md5: 05c7d624cff49dbd8db1ad5ba537a8a3 + sha256: feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154 category: main optional: false - name: overrides @@ -5390,7 +5390,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5497,7 +5497,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5625,27 +5625,27 @@ package: category: main optional: false - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: linux-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: pluggy @@ -5665,7 +5665,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5673,27 +5673,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: linux-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: win-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prompt-toolkit @@ -5833,7 +5833,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5864,7 +5864,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5999,7 +5999,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6057,7 +6057,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6092,7 +6092,7 @@ package: category: main optional: false - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: linux-64 dependencies: @@ -6104,14 +6104,14 @@ package: pygments: '>=2.7.2' python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: win-64 dependencies: @@ -6121,12 +6121,12 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest-cov @@ -6152,7 +6152,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6230,7 +6230,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6255,7 +6255,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6590,7 +6590,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6623,7 +6623,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6700,7 +6700,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6880,7 +6880,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6929,7 +6929,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7321,7 +7321,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7349,7 +7349,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7453,7 +7453,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7559,7 +7559,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7683,7 +7683,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8284,7 +8284,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8361,43 +8361,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: linux-64 dependencies: @@ -8405,16 +8405,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: win-64 dependencies: @@ -8422,54 +8422,54 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: linux-64 dependencies: @@ -8482,16 +8482,16 @@ package: pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: win-64 dependencies: @@ -8504,11 +8504,11 @@ package: pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false diff --git a/py-3.13.conda-lock.yml b/py-3.13.conda-lock.yml index 9e25e4fa..e88ba193 100644 --- a/py-3.13.conda-lock.yml +++ b/py-3.13.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: 634cec3ecb56deda7d45fbb3187fdfd23a39124f4735afaafd63281ac1d4e160 - linux-64: 9c084fb4e43ef817a9ccbd7d830c295486fa3a57249edd4c6a77fb42bd4c7ff0 + win-64: 58c79e8597323e16f4e06e8d3de574e0edf3fffdd63e9aa1e24fc6b25b5e7c60 + linux-64: ab72b4bebbacd7a7ac0b51c81b4870bbcca4935daf3dca65ceddc78f745302e2 channels: - url: conda-forge used_env_vars: [] @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -666,7 +666,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -751,7 +751,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -764,7 +764,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1131,30 +1131,30 @@ package: category: dev optional: true - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: linux-64 dependencies: __unix: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda hash: - md5: ea8a6c3256897cc31263de9f455e25d9 - sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 + md5: 4d18bc3af7cfcea97bd817164672a08c + sha256: 526d434cf5390310f40f34ea6ec4f0c225cdf1e419010e624d399b13b2059f0f category: main optional: false - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: win-64 dependencies: __win: '' colorama: '' - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: - md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e - sha256: c3bc9a49930fa1c3383a1485948b914823290efac859a2587ca57a270a652e08 + md5: 290d6b8ba791f99e068327e5d17e8462 + sha256: e67e85d5837cf0b0151b58b449badb0a8c2018d209e05c28f1b0c079e6e93666 category: main optional: false - name: cloudpickle @@ -1162,7 +1162,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1174,7 +1174,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1210,7 +1210,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1222,7 +1222,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1297,29 +1297,29 @@ package: category: dev optional: true - name: cpython - version: 3.13.12 + version: 3.13.13 manager: conda platform: linux-64 dependencies: python: '>=3.13,<3.14.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.13.13-py313hd8ed1ab_100.conda hash: - md5: 9a4b8a37303b933b847c14a310f0557b - sha256: 7636809bda35add7af66cda1fee156136fcba0a1e24bbef1d591ee859df755a8 + md5: 3a8a8b87e72f95b54689fb588e154ec9 + sha256: 836b92c209d4b6b9fb28bd51bd788b22a0c5492ae95eec2724e65a15ed4ab2e1 category: dev optional: true - name: cpython - version: 3.13.12 + version: 3.13.13 manager: conda platform: win-64 dependencies: python: '>=3.13,<3.14.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.13.13-py313hd8ed1ab_100.conda hash: - md5: 9a4b8a37303b933b847c14a310f0557b - sha256: 7636809bda35add7af66cda1fee156136fcba0a1e24bbef1d591ee859df755a8 + md5: 3a8a8b87e72f95b54689fb588e154ec9 + sha256: 836b92c209d4b6b9fb28bd51bd788b22a0c5492ae95eec2724e65a15ed4ab2e1 category: dev optional: true - name: cycler @@ -1327,7 +1327,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1339,7 +1339,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1530,7 +1530,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1542,7 +1542,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1557,7 +1557,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1572,7 +1572,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1885,7 +1885,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1901,7 +1901,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1919,7 +1919,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1932,7 +1932,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1947,7 +1947,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1961,7 +1961,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1980,10 +1980,10 @@ package: numpy: '>=1.23,<3' python: '>=3.13,<3.14.0a0' python_abi: 3.13.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py313h22c32d4_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py313h22c32d4_102.conda hash: - md5: 1ff13bf3fc5366d6c9de497379f424e4 - sha256: 1290902d886f4d19c929655e85fe01def942bb6ae2a4f37a2daff922d6b42d69 + md5: 37727e0bcda5059c33c83fdf5b13a9a1 + sha256: 3def6d562885610497befa9dd81c685c53bb027309407797ad9918d4179dda21 category: main optional: false - name: h5py @@ -1999,10 +1999,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py313hd050a09_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py313hd050a09_102.conda hash: - md5: c2a978228bf62d24e3355054ffec123b - sha256: 3f6a52ebb7e4498e32745171f41859bafd17d72700964f892f616c886eb4b855 + md5: 9e9b344f00e7fa96311ae54de9370a6e + sha256: 5ee4b5608dd1c65b21268627cd590989e4de972ffe2b8e4fe5a93c8c8ed7f54e category: main optional: false - name: hdf5 @@ -2088,7 +2088,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2105,7 +2105,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2236,7 +2236,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2249,7 +2249,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2258,29 +2258,29 @@ package: category: main optional: false - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: iniconfig @@ -2322,7 +2322,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2347,7 +2347,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2370,7 +2370,7 @@ package: pexpect: '>4.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda @@ -2392,7 +2392,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2571,7 +2571,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2584,7 +2584,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2646,7 +2646,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2658,7 +2658,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2672,7 +2672,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2688,7 +2688,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2702,7 +2702,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2715,7 +2715,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2775,7 +2775,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2792,7 +2792,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2806,7 +2806,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2820,7 +2820,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2833,7 +2833,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2850,7 +2850,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2883,7 +2883,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2899,7 +2899,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2919,7 +2919,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2949,7 +2949,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2979,7 +2979,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2997,7 +2997,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3010,7 +3010,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3107,7 +3107,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3126,7 +3126,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3888,30 +3888,30 @@ package: category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda hash: - md5: 8397539e3a0bbd1695584fb4f927485a - sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 + md5: 6178c6f2fb254558238ef4e6c56fb782 + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda hash: - md5: 56a686f92ac0273c0f6af58858a3f013 - sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 + md5: 25a127bad5470852b30b239f030ec95b + sha256: 698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d category: main optional: false - name: liblapack @@ -3939,30 +3939,30 @@ package: category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda hash: - md5: c7c83eecbb72d88b940c249af56c8b17 - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: b88d90cad08e6bc8ad540cb310a761fb + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda hash: - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c + md5: 8f83619ab1588b98dd99c90b0bfc5c6d + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 category: main optional: false - name: libmpdec @@ -4011,21 +4011,21 @@ package: category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libzlib: '>=1.3.2,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.57-h421ea60_0.conda hash: - md5: 97169784f0775c85683c3d8badcea2c3 - sha256: 4f9fca3bc21e485ec0b3eb88db108b6cf9ab9a481cdf7d2ac6f9d30350b45ead + md5: 06f225e6d8c549ad6c0201679828a882 + sha256: 06323fb0a831440f0b72a53013182e1d4bb219e3ea958bb37af98b25dc0cf518 category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: win-64 dependencies: @@ -4033,10 +4033,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.56-h7351971_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.57-h7351971_0.conda hash: - md5: bedc0fc6a8fb31b8013878ea20c76bae - sha256: 0ab8890b7551bae4fc2a1aada8937789a6205c9ba9f322552a24e97b2d9b33b8 + md5: 3e40866d979cf6faba7263de9c2b4b99 + sha256: e6bcba34dc6b4855f5fcd988980d06978ec33686dde8b99fe75fa76e6620d394 category: main optional: false - name: libscotch @@ -4113,31 +4113,31 @@ package: category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda + libzlib: '>=1.3.2,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.53.0-h0c1763c_0.conda hash: - md5: a7bda2babcbb004443cb1c0be9a8c353 - sha256: 1daeb5187efcdbe3bdf2dc66f1161e09cb8dfd01618015d2106feae13cf3390d + md5: 393c8b31bd128e3d979e7ec17e9507c6 + sha256: d1688f91c013f9be0ad46492d4ec976ccc1dff5705a0b42be957abb73bf853bf category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda hash: - md5: 8830689d537fda55f990620680934bb1 - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 + md5: 4152b5a8d2513fd7ae9fb9f221a5595d + sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 category: main optional: false - name: libssh2 @@ -4432,29 +4432,29 @@ package: category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.2-h4922eb0_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.3-h4922eb0_0.conda hash: - md5: 2a60ab96432bc74eedbcda8a528080a1 - sha256: 67fa0977eeb7f983b626aaa815b1e9eba3314f5ea5bf99ca0e91f26221dd9bbb + md5: f7781cb22afa62ef27fd0b3300c53c86 + sha256: 39ae724bd3cde1381df53bfb53e4d39da0dd613b180fdda5ac0a8ce1b43fb525 category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.3-h4fa8253_0.conda hash: - md5: 29407a30bd93dc8c11c03ca60249a340 - sha256: fa8bd542624507309cbdfc620bdfe546ed823d418e6ba878977d48da7a0f6212 + md5: fa585aca061eaaae7225df2e85370bf7 + sha256: b82d43c9c52287204c929542e146b54e3eab520dba47c7b3e973ec986bf40f92 category: main optional: false - name: locket @@ -4553,7 +4553,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4580,7 +4580,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4716,7 +4716,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4729,7 +4729,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4743,7 +4743,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '*' + _openmp_mutex: '>=4.5' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=22.1.1' @@ -4952,7 +4952,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4979,7 +4979,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5122,7 +5122,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5140,7 +5140,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5319,21 +5319,21 @@ package: category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' ca-certificates: '' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda hash: - md5: f61eb8cd60ff9057122a3d338b99c00f - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c + md5: da1b85b6a87e141f5140bb9924cecab0 + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: win-64 dependencies: @@ -5341,10 +5341,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda hash: - md5: eb585509b815415bc964b2c7e11c7eb3 - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 + md5: 05c7d624cff49dbd8db1ad5ba537a8a3 + sha256: feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154 category: main optional: false - name: overrides @@ -5378,7 +5378,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5390,7 +5390,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5405,7 +5405,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python_abi: 3.13.* @@ -5420,7 +5420,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5485,7 +5485,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5497,7 +5497,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5621,27 +5621,27 @@ package: category: main optional: false - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: linux-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: pluggy @@ -5649,7 +5649,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5661,7 +5661,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5669,27 +5669,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: linux-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: win-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prompt-toolkit @@ -5817,7 +5817,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5829,7 +5829,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5843,7 +5843,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5860,7 +5860,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5911,7 +5911,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5927,7 +5927,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5975,7 +5975,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5995,7 +5995,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6041,7 +6041,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6053,7 +6053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6088,7 +6088,7 @@ package: category: main optional: false - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: linux-64 dependencies: @@ -6098,16 +6098,16 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: win-64 dependencies: @@ -6117,12 +6117,12 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest-cov @@ -6133,7 +6133,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6148,7 +6148,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6156,47 +6156,47 @@ package: category: dev optional: true - name: python - version: 3.13.12 + version: 3.13.13 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' bzip2: '>=1.0.8,<2.0a0' ld_impl_linux-64: '>=2.36.1' - libexpat: '>=2.7.3,<3.0a0' + libexpat: '>=2.7.5,<3.0a0' libffi: '>=3.5.2,<3.6.0a0' libgcc: '>=14' liblzma: '>=5.8.2,<6.0a0' libmpdec: '>=4.0.0,<5.0a0' - libsqlite: '>=3.51.2,<4.0a0' - libuuid: '>=2.41.3,<3.0a0' - libzlib: '>=1.3.1,<2.0a0' + libsqlite: '>=3.52.0,<4.0a0' + libuuid: '>=2.42,<3.0a0' + libzlib: '>=1.3.2,<2.0a0' ncurses: '>=6.5,<7.0a0' - openssl: '>=3.5.5,<4.0a0' + openssl: '>=3.5.6,<4.0a0' pip: '' python_abi: 3.13.* readline: '>=8.3,<9.0a0' tk: '>=8.6.13,<8.7.0a0' tzdata: '' - url: https://repo.prefix.dev/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + url: https://repo.prefix.dev/conda-forge/linux-64/python-3.13.13-h6add32d_100_cp313.conda hash: - md5: 4c875ed0e78c2d407ec55eadffb8cf3d - sha256: 8a08fe5b7cb5a28aa44e2994d18dbf77f443956990753a4ca8173153ffb6eb56 + md5: 05051be49267378d2fcd12931e319ac3 + sha256: 7f77eb57648f545c1f58e10035d0d9d66b0a0efb7c4b58d3ed89ec7269afdde1 category: main optional: false - name: python - version: 3.13.12 + version: 3.13.13 manager: conda platform: win-64 dependencies: bzip2: '>=1.0.8,<2.0a0' - libexpat: '>=2.7.3,<3.0a0' + libexpat: '>=2.7.5,<3.0a0' libffi: '>=3.5.2,<3.6.0a0' liblzma: '>=5.8.2,<6.0a0' libmpdec: '>=4.0.0,<5.0a0' - libsqlite: '>=3.51.2,<4.0a0' - libzlib: '>=1.3.1,<2.0a0' - openssl: '>=3.5.5,<4.0a0' + libsqlite: '>=3.52.0,<4.0a0' + libzlib: '>=1.3.2,<2.0a0' + openssl: '>=3.5.6,<4.0a0' pip: '' python_abi: 3.13.* tk: '>=8.6.13,<8.7.0a0' @@ -6204,10 +6204,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda + url: https://repo.prefix.dev/conda-forge/win-64/python-3.13.13-h09917c8_100_cp313.conda hash: - md5: 4440c24966d0aa0c8f1e1d5006dac2d6 - sha256: da70aec20ff5a5ae18bbba9fdd1e18190b419605cafaafb3bdad8becf11ce94d + md5: 7065f7067762c4c2bda1912f18d16239 + sha256: b8108d7f83f71fb15fbb4a263406c2065a8990b3d7eba2cbd7a3075b9a6392ba category: main optional: false - name: python-dateutil @@ -6215,7 +6215,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6228,7 +6228,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6241,7 +6241,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6253,7 +6253,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6261,29 +6261,29 @@ package: category: dev optional: true - name: python-gil - version: 3.13.12 + version: 3.13.13 manager: conda platform: linux-64 dependencies: - cpython: 3.13.12.* + cpython: 3.13.13.* python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.13.13-h4df99d1_100.conda hash: - md5: 3d92938d5b83c49162ade038aab58a59 - sha256: f306304235197434494355351ac56020a65b7c5c56ff10ca1ed53356d575557a + md5: fd00e4b24ea88093c93f5c9bad27b52f + sha256: b2e51d83e5ebeb7e9fde1cde822a60e8564cc9dabd786ad853056afbf708a466 category: dev optional: true - name: python-gil - version: 3.13.12 + version: 3.13.13 manager: conda platform: win-64 dependencies: - cpython: 3.13.12.* + cpython: 3.13.13.* python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.13.13-h4df99d1_100.conda hash: - md5: 3d92938d5b83c49162ade038aab58a59 - sha256: f306304235197434494355351ac56020a65b7c5c56ff10ca1ed53356d575557a + md5: fd00e4b24ea88093c93f5c9bad27b52f + sha256: b2e51d83e5ebeb7e9fde1cde822a60e8564cc9dabd786ad853056afbf708a466 category: dev optional: true - name: python-json-logger @@ -6573,7 +6573,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6588,7 +6588,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6605,7 +6605,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6621,7 +6621,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6685,7 +6685,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6698,7 +6698,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6786,7 +6786,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6803,7 +6803,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6830,7 +6830,7 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.13,<3.14.0a0' python_abi: 3.13.* url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py313h4b8bb8b_0.conda @@ -6847,7 +6847,7 @@ package: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.13,<3.14.0a0' python_abi: 3.13.* ucrt: '>=10.0.20348.0' @@ -6865,7 +6865,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6878,7 +6878,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6915,7 +6915,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6927,7 +6927,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7307,7 +7307,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7319,7 +7319,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7333,7 +7333,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '>=3.10' + python: '' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7347,7 +7347,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7439,7 +7439,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7451,7 +7451,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7543,7 +7543,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7557,7 +7557,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7669,7 +7669,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7681,7 +7681,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8213,7 +8213,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8225,7 +8225,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8302,43 +8302,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: linux-64 dependencies: @@ -8346,16 +8346,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: win-64 dependencies: @@ -8363,54 +8363,54 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: linux-64 dependencies: @@ -8422,16 +8422,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: win-64 dependencies: @@ -8443,11 +8443,11 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false diff --git a/py-3.14.conda-lock.yml b/py-3.14.conda-lock.yml index dc67c8f3..87e0df66 100644 --- a/py-3.14.conda-lock.yml +++ b/py-3.14.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: b56575358cf9c86097af766e84815a217fa1f2932b34252343b018b28a5ce092 - linux-64: 6b8cd4100493c90834719717e9dba0c8025d7cf52a516970a8ba54b345ad21d1 + win-64: 9223dd0910d3e96424d78fa72e026a9bf745e7b72f9e8f57200b871e3187bf84 + linux-64: 42453e2827c5fc22dbe670bd53c2f24f8ae50771c8aecf05f12ff7afb4a60ec6 channels: - url: conda-forge used_env_vars: [] @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -666,7 +666,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -742,7 +742,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -755,7 +755,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1122,30 +1122,30 @@ package: category: dev optional: true - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: linux-64 dependencies: __unix: '' python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda hash: - md5: ea8a6c3256897cc31263de9f455e25d9 - sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 + md5: 4d18bc3af7cfcea97bd817164672a08c + sha256: 526d434cf5390310f40f34ea6ec4f0c225cdf1e419010e624d399b13b2059f0f category: main optional: false - name: click - version: 8.3.1 + version: 8.3.2 manager: conda platform: win-64 dependencies: __win: '' colorama: '' - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: - md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e - sha256: c3bc9a49930fa1c3383a1485948b914823290efac859a2587ca57a270a652e08 + md5: 290d6b8ba791f99e068327e5d17e8462 + sha256: e67e85d5837cf0b0151b58b449badb0a8c2018d209e05c28f1b0c079e6e93666 category: main optional: false - name: cloudpickle @@ -1153,7 +1153,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1165,7 +1165,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1201,7 +1201,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1213,7 +1213,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1288,29 +1288,29 @@ package: category: dev optional: true - name: cpython - version: 3.14.3 + version: 3.14.4 manager: conda platform: linux-64 dependencies: python: '>=3.14,<3.15.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda hash: - md5: 3bb89e4f795e5414addaa531d6b1500a - sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c + md5: f111d4cfaf1fe9496f386bc98ae94452 + sha256: 40dc224f2b718e5f034efd2332bc315a719063235f63673468d26a24770094ee category: dev optional: true - name: cpython - version: 3.14.3 + version: 3.14.4 manager: conda platform: win-64 dependencies: python: '>=3.14,<3.15.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda hash: - md5: 3bb89e4f795e5414addaa531d6b1500a - sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c + md5: f111d4cfaf1fe9496f386bc98ae94452 + sha256: 40dc224f2b718e5f034efd2332bc315a719063235f63673468d26a24770094ee category: dev optional: true - name: cycler @@ -1318,7 +1318,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1330,7 +1330,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1521,7 +1521,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1533,7 +1533,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1548,7 +1548,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1563,7 +1563,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1871,7 +1871,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1887,7 +1887,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1905,7 +1905,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1918,7 +1918,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1933,7 +1933,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1947,7 +1947,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1966,10 +1966,10 @@ package: numpy: '>=1.23,<3' python: '>=3.14,<3.15.0a0' python_abi: 3.14.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda hash: - md5: 33711e500e3f38afb55c07b998682291 - sha256: b3a1e9eafce21ab69fc66bd1f818a010e2ecd4d6a40e8680208d14d8bd30d7c4 + md5: d93afa30018997705dd04513eeb5ac0f + sha256: 48e18f20bc1ff15433299dd77c20a4160eb29572eea799ae5a73632c6c3d7dfd category: main optional: false - name: h5py @@ -1985,10 +1985,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda hash: - md5: 66999c8dccb39c3857298a2009cf6954 - sha256: ba38a5b6f00e72755b4bef537f5ffa10e2947019000ee36a0a4cca466b7794c9 + md5: 19bdd6358ce2be9ef29f92b1564db61d + sha256: 5ee88f1f691829d2430761a26a690c3d880e7cd41e40a4057131360a8904e0bd category: main optional: false - name: hdf5 @@ -2074,7 +2074,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2091,7 +2091,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2222,7 +2222,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2235,7 +2235,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2244,29 +2244,29 @@ package: category: main optional: false - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: importlib_resources - version: 6.5.2 + version: 7.1.0 manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '>=3.10' zipp: '>=3.1.0' - url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda hash: - md5: c85c76dc67d75619a92f51dfbce06992 - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a category: dev optional: true - name: iniconfig @@ -2308,7 +2308,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2333,7 +2333,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2356,7 +2356,7 @@ package: pexpect: '>4.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda @@ -2378,7 +2378,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2557,7 +2557,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2570,7 +2570,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2632,7 +2632,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2644,7 +2644,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2658,7 +2658,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2674,7 +2674,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2688,7 +2688,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2701,7 +2701,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2761,7 +2761,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2778,7 +2778,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2792,7 +2792,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2806,7 +2806,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2819,7 +2819,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2836,7 +2836,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2869,7 +2869,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2885,7 +2885,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2905,7 +2905,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2935,7 +2935,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2965,7 +2965,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2983,7 +2983,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2996,7 +2996,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3093,7 +3093,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3112,7 +3112,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3874,30 +3874,30 @@ package: category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda hash: - md5: 8397539e3a0bbd1695584fb4f927485a - sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 + md5: 6178c6f2fb254558238ef4e6c56fb782 + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 category: main optional: false - name: libjpeg-turbo - version: 3.1.2 + version: 3.1.4.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda hash: - md5: 56a686f92ac0273c0f6af58858a3f013 - sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 + md5: 25a127bad5470852b30b239f030ec95b + sha256: 698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d category: main optional: false - name: liblapack @@ -3925,30 +3925,30 @@ package: category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda hash: - md5: c7c83eecbb72d88b940c249af56c8b17 - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: b88d90cad08e6bc8ad540cb310a761fb + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d category: main optional: false - name: liblzma - version: 5.8.2 + version: 5.8.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda hash: - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c + md5: 8f83619ab1588b98dd99c90b0bfc5c6d + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 category: main optional: false - name: libmpdec @@ -3997,21 +3997,21 @@ package: category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libzlib: '>=1.3.2,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libpng-1.6.57-h421ea60_0.conda hash: - md5: 97169784f0775c85683c3d8badcea2c3 - sha256: 4f9fca3bc21e485ec0b3eb88db108b6cf9ab9a481cdf7d2ac6f9d30350b45ead + md5: 06f225e6d8c549ad6c0201679828a882 + sha256: 06323fb0a831440f0b72a53013182e1d4bb219e3ea958bb37af98b25dc0cf518 category: main optional: false - name: libpng - version: 1.6.56 + version: 1.6.57 manager: conda platform: win-64 dependencies: @@ -4019,10 +4019,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.56-h7351971_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libpng-1.6.57-h7351971_0.conda hash: - md5: bedc0fc6a8fb31b8013878ea20c76bae - sha256: 0ab8890b7551bae4fc2a1aada8937789a6205c9ba9f322552a24e97b2d9b33b8 + md5: 3e40866d979cf6faba7263de9c2b4b99 + sha256: e6bcba34dc6b4855f5fcd988980d06978ec33686dde8b99fe75fa76e6620d394 category: main optional: false - name: libscotch @@ -4099,31 +4099,31 @@ package: category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' - libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda + libzlib: '>=1.3.2,<2.0a0' + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.53.0-h0c1763c_0.conda hash: - md5: a7bda2babcbb004443cb1c0be9a8c353 - sha256: 1daeb5187efcdbe3bdf2dc66f1161e09cb8dfd01618015d2106feae13cf3390d + md5: 393c8b31bd128e3d979e7ec17e9507c6 + sha256: d1688f91c013f9be0ad46492d4ec976ccc1dff5705a0b42be957abb73bf853bf category: main optional: false - name: libsqlite - version: 3.52.0 + version: 3.53.0 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda hash: - md5: 8830689d537fda55f990620680934bb1 - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 + md5: 4152b5a8d2513fd7ae9fb9f221a5595d + sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 category: main optional: false - name: libssh2 @@ -4418,29 +4418,29 @@ package: category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.2-h4922eb0_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-22.1.3-h4922eb0_0.conda hash: - md5: 2a60ab96432bc74eedbcda8a528080a1 - sha256: 67fa0977eeb7f983b626aaa815b1e9eba3314f5ea5bf99ca0e91f26221dd9bbb + md5: f7781cb22afa62ef27fd0b3300c53c86 + sha256: 39ae724bd3cde1381df53bfb53e4d39da0dd613b180fdda5ac0a8ce1b43fb525 category: main optional: false - name: llvm-openmp - version: 22.1.2 + version: 22.1.3 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-22.1.3-h4fa8253_0.conda hash: - md5: 29407a30bd93dc8c11c03ca60249a340 - sha256: fa8bd542624507309cbdfc620bdfe546ed823d418e6ba878977d48da7a0f6212 + md5: fa585aca061eaaae7225df2e85370bf7 + sha256: b82d43c9c52287204c929542e146b54e3eab520dba47c7b3e973ec986bf40f92 category: main optional: false - name: locket @@ -4539,7 +4539,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4566,7 +4566,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4702,7 +4702,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4715,7 +4715,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4729,7 +4729,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '*' + _openmp_mutex: '>=4.5' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=22.1.1' @@ -4938,7 +4938,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4965,7 +4965,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5108,7 +5108,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5126,7 +5126,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5305,21 +5305,21 @@ package: category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' ca-certificates: '' libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda hash: - md5: f61eb8cd60ff9057122a3d338b99c00f - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c + md5: da1b85b6a87e141f5140bb9924cecab0 + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb category: main optional: false - name: openssl - version: 3.6.1 + version: 3.6.2 manager: conda platform: win-64 dependencies: @@ -5327,10 +5327,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda hash: - md5: eb585509b815415bc964b2c7e11c7eb3 - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 + md5: 05c7d624cff49dbd8db1ad5ba537a8a3 + sha256: feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154 category: main optional: false - name: overrides @@ -5364,7 +5364,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5376,7 +5376,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5391,7 +5391,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python_abi: 3.14.* @@ -5406,7 +5406,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5471,7 +5471,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5483,7 +5483,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5607,27 +5607,27 @@ package: category: main optional: false - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: linux-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: platformdirs - version: 4.9.4 + version: 4.9.6 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: - md5: 82c1787f2a65c0155ef9652466ee98d6 - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 category: dev optional: true - name: pluggy @@ -5635,7 +5635,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5647,7 +5647,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5655,27 +5655,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: linux-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prometheus_client - version: 0.24.1 + version: 0.25.0 manager: conda platform: win-64 dependencies: python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda hash: - md5: 7526d20621b53440b0aae45d4797847e - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 + md5: a11ab1f31af799dd93c3a39881528884 + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c category: dev optional: true - name: prompt-toolkit @@ -5803,7 +5803,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5815,7 +5815,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5829,7 +5829,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5846,7 +5846,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5897,7 +5897,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5913,7 +5913,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5961,7 +5961,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5981,7 +5981,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6027,7 +6027,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6039,7 +6039,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6074,7 +6074,7 @@ package: category: main optional: false - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: linux-64 dependencies: @@ -6084,16 +6084,16 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest - version: 9.0.2 + version: 9.0.3 manager: conda platform: win-64 dependencies: @@ -6103,12 +6103,12 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: - md5: 2b694bad8a50dc2f712f5368de866480 - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 + md5: 6a991452eadf2771952f39d43615bb3e + sha256: 960f59442173eee0731906a9077bd5ccf60f4b4226f05a22d1728ab9a21a879c category: dev optional: true - name: pytest-cov @@ -6119,7 +6119,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6134,7 +6134,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6142,48 +6142,48 @@ package: category: dev optional: true - name: python - version: 3.14.3 + version: 3.14.4 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' bzip2: '>=1.0.8,<2.0a0' ld_impl_linux-64: '>=2.36.1' - libexpat: '>=2.7.3,<3.0a0' + libexpat: '>=2.7.5,<3.0a0' libffi: '>=3.5.2,<3.6.0a0' libgcc: '>=14' liblzma: '>=5.8.2,<6.0a0' libmpdec: '>=4.0.0,<5.0a0' - libsqlite: '>=3.51.2,<4.0a0' - libuuid: '>=2.41.3,<3.0a0' - libzlib: '>=1.3.1,<2.0a0' + libsqlite: '>=3.52.0,<4.0a0' + libuuid: '>=2.42,<3.0a0' + libzlib: '>=1.3.2,<2.0a0' ncurses: '>=6.5,<7.0a0' - openssl: '>=3.5.5,<4.0a0' + openssl: '>=3.5.6,<4.0a0' pip: '' python_abi: 3.14.* readline: '>=8.3,<9.0a0' tk: '>=8.6.13,<8.7.0a0' tzdata: '' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda + url: https://repo.prefix.dev/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda hash: - md5: c014ad06e60441661737121d3eae8a60 - sha256: cb0628c5f1732f889f53a877484da98f5a0e0f47326622671396fb4f2b0cd6bd + md5: a443f87920815d41bfe611296e507995 + sha256: dec247c5badc811baa34d6085df9d0465535883cf745e22e8d79092ad54a3a7b category: main optional: false - name: python - version: 3.14.3 + version: 3.14.4 manager: conda platform: win-64 dependencies: bzip2: '>=1.0.8,<2.0a0' - libexpat: '>=2.7.3,<3.0a0' + libexpat: '>=2.7.5,<3.0a0' libffi: '>=3.5.2,<3.6.0a0' liblzma: '>=5.8.2,<6.0a0' libmpdec: '>=4.0.0,<5.0a0' - libsqlite: '>=3.51.2,<4.0a0' - libzlib: '>=1.3.1,<2.0a0' - openssl: '>=3.5.5,<4.0a0' + libsqlite: '>=3.52.0,<4.0a0' + libzlib: '>=1.3.2,<2.0a0' + openssl: '>=3.5.6,<4.0a0' pip: '' python_abi: 3.14.* tk: '>=8.6.13,<8.7.0a0' @@ -6192,10 +6192,10 @@ package: vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda + url: https://repo.prefix.dev/conda-forge/win-64/python-3.14.4-h4b44e0e_100_cp314.conda hash: - md5: 7ec2be7eaf59f83f3e5617665f3fbb2e - sha256: 3f99d83bfd95b9bdae64a42a1e4bf5131dc20b724be5ac8a9a7e1ac2c0f006d7 + md5: 40b6a8f438afb5e7b314cc5c4a43cd84 + sha256: e258d626b0ba778abb319f128de4c1211306fe86fe0803166817b1ce2514c920 category: main optional: false - name: python-dateutil @@ -6203,7 +6203,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6216,7 +6216,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6229,7 +6229,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6241,7 +6241,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6249,29 +6249,29 @@ package: category: dev optional: true - name: python-gil - version: 3.14.3 + version: 3.14.4 manager: conda platform: linux-64 dependencies: - cpython: 3.14.3.* + cpython: 3.14.4.* python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda + url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda hash: - md5: 235765e4ea0d0301c75965985163b5a1 - sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a + md5: e4e60721757979d01d3964122f674959 + sha256: 36ff7984e4565c85149e64f8206303d412a0652e55cf806dcb856903fa056314 category: dev optional: true - name: python-gil - version: 3.14.3 + version: 3.14.4 manager: conda platform: win-64 dependencies: - cpython: 3.14.3.* + cpython: 3.14.4.* python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda + url: https://repo.prefix.dev/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda hash: - md5: 235765e4ea0d0301c75965985163b5a1 - sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a + md5: e4e60721757979d01d3964122f674959 + sha256: 36ff7984e4565c85149e64f8206303d412a0652e55cf806dcb856903fa056314 category: dev optional: true - name: python-json-logger @@ -6561,7 +6561,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6576,7 +6576,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6593,7 +6593,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6609,7 +6609,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6673,7 +6673,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6686,7 +6686,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6774,7 +6774,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6791,7 +6791,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6818,7 +6818,7 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.14,<3.15.0a0' python_abi: 3.14.* url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda @@ -6835,7 +6835,7 @@ package: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.14,<3.15.0a0' python_abi: 3.14.* ucrt: '>=10.0.20348.0' @@ -6853,7 +6853,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6866,7 +6866,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6903,7 +6903,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6915,7 +6915,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7295,7 +7295,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7307,7 +7307,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7321,7 +7321,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '>=3.10' + python: '' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7335,7 +7335,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7427,7 +7427,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7439,7 +7439,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7531,7 +7531,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7545,7 +7545,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7657,7 +7657,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7669,7 +7669,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8232,7 +8232,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8244,7 +8244,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8321,43 +8321,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev14+f0289a8 + version: 0.7.0a3.dev16+2162766 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoh5py: 0.12.3.dev301+0128671d matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e hash: - sha256: f0289a846edfddcdcc58d44a6c04aae3af10931f + sha256: 21627661c16f137ffa5cfe9af35cc156ffe5929e source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@f0289a846edfddcdcc58d44a6c04aae3af10931f + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@21627661c16f137ffa5cfe9af35cc156ffe5929e category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: linux-64 dependencies: @@ -8365,16 +8365,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: geoh5py - version: 0.12.1rc2.dev296+f5eca373 + version: 0.12.3.dev301+0128671d manager: pip platform: win-64 dependencies: @@ -8382,54 +8382,54 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 hash: - sha256: f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@f5eca3735bbca573f4cac3925c6f4c0c341d8e28 + url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev5+0e66e6b + version: 0.2.0a3.dev7+57806e7 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev14+f0289a8 - geoh5py: 0.12.1rc2.dev296+f5eca373 + geoapps-utils: 0.7.0a3.dev16+2162766 + geoh5py: 0.12.3.dev301+0128671d numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 hash: - sha256: 0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + sha256: 57806e78469cb881a8d5dceae645336e77310bf4 source: type: url - url: git+https://github.com/MiraGeoscience/grid-apps.git@0e66e6b7a44ede34563da6a77ccd87a4cc7b5185 + url: git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: linux-64 dependencies: @@ -8441,16 +8441,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a2.dev18+g19624197c manager: pip platform: win-64 dependencies: @@ -8462,11 +8462,11 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 19624197c4e51c685be15ccfce33919cc834c405 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@19624197c4e51c685be15ccfce33919cc834c405 category: main optional: false diff --git a/pyproject.toml b/pyproject.toml index 97ed8df7..ea088d3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,7 +105,7 @@ grid-apps = {git = "https://github.com/MiraGeoscience/grid-apps.git", rev = "dev geoapps-utils = {git = "https://github.com/MiraGeoscience/geoapps-utils.git", rev = "develop"} #mira-simpeg = {version = ">=0.23.0.2, 0.23.0.* || >=0.25.0.1a, 0.25.0.*", source="pypi", allow-prereleases = true, extras = ["dask"]} -mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "develop", extras = ["dask"]} +mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "GEOPY-2799", extras = ["dask"]} ## about pip dependencies # to be specified to work with conda-lock From e2ea8de232becc7ad84a1fe2d01da3d729805e83 Mon Sep 17 00:00:00 2001 From: domfournier Date: Mon, 13 Apr 2026 12:34:45 -0700 Subject: [PATCH 18/27] Keep gradient_direction and dip in degrees until usage --- simpeg_drivers/components/models.py | 4 ++-- simpeg_drivers/joint/joint_cross_gradient/driver.py | 2 -- simpeg_drivers/utils/regularization.py | 8 +++++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index a73d13fd..eeb5f083 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -464,14 +464,14 @@ def gradient_dip(self) -> np.ndarray | None: if self._gradient_dip.model is None: return None - return np.deg2rad(self._gradient_dip.model) + return self._gradient_dip.model.copy() @property def gradient_direction(self) -> np.ndarray | None: if self._gradient_direction.model is None: return None - return np.deg2rad(self._gradient_direction.model) + return self._gradient_direction.model.copy() def remove_air(self, active_cells: np.ndarray): """Use active cells vector to remove air cells from model""" diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index 966984ff..fd693e44 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -42,8 +42,6 @@ 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) # Trick the drivers by swapping the inversion_mesh and models # such that the regularization uses the global mesh multipliers, reg_list = [], [] diff --git a/simpeg_drivers/utils/regularization.py b/simpeg_drivers/utils/regularization.py index a48bd95f..a109c7f6 100644 --- a/simpeg_drivers/utils/regularization.py +++ b/simpeg_drivers/utils/regularization.py @@ -486,8 +486,8 @@ def set_rotated_operators( :param function: Smoothness regularization to change operator for. :param neighbors: Cell neighbors array. :param axis: Regularization axis. - :param dip: Angle in radians for rotation from the horizon. - :param direction: Angle in radians for rotation about the z-axis. + :param dip: Angle in degrees for rotation from the horizon. + :param direction: Angle in degrees for rotation about the z-axis. :param forward: Whether to use forward or backward difference for derivative approximations. """ @@ -496,7 +496,9 @@ def set_rotated_operators( h_cell = mesh.mesh.h_gridded[:, axes.find(axis)] - unit_grad_op = rotated_gradient(mesh.mesh, neighbors, axis, dip, direction, forward) + unit_grad_op = rotated_gradient( + mesh.mesh, neighbors, axis, np.deg2rad(dip), np.deg2rad(direction), forward + ) vol_avg_op = abs(unit_grad_op) vol_avg_op.data = ( From 10f698c8b81e2c2e0ae2de7f9b01636173058c01 Mon Sep 17 00:00:00 2001 From: domfournier Date: Mon, 13 Apr 2026 13:17:06 -0700 Subject: [PATCH 19/27] Augment unitest for gradient_rotation passed from the sub-drivers --- simpeg_drivers/joint/driver.py | 4 -- .../driver_joint_cross_gradient_test.py | 39 ++++++++++++------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index e97d1823..56440dcd 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -265,10 +265,6 @@ def validate_create_models(self): for model_type in self.models.model_types: if model_type in [ "petrophysical_model", - "starting_inclination", - "starting_declination", - "reference_inclination", - "reference_declination", ]: continue diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index bddd50e7..4b33ab32 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -8,6 +8,7 @@ # ' # ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +import logging from pathlib import Path import numpy as np @@ -336,6 +337,7 @@ def test_joint_cross_gradient_inv_run( def test_joint_cross_gradient_rotated_run( tmp_path, + caplog, max_iterations=1, pytest=True, ): @@ -353,8 +355,8 @@ def test_joint_cross_gradient_rotated_run( orig_data = [] origin = None for name in [ - "Magnetic Vector Forward", "Direct Current 3D Forward", + "Magnetic Vector Forward", ]: group = geoh5.get_entity(name)[0] mesh = next(child for child in group.children if isinstance(child, Octree)) @@ -378,7 +380,7 @@ def test_joint_cross_gradient_rotated_run( gradient_rotation = PropertyGroup( name="gradient_rotations", property_group_type=GroupTypeEnum.DIPDIR, - properties=[dip, direction], + properties=[direction, dip], parent=mesh, ) @@ -437,22 +439,31 @@ def test_joint_cross_gradient_rotated_run( group_a_multiplier=1.0, group_b=drivers[1].out_group, group_b_multiplier=1.0, - max_global_iterations=max_iterations, - initial_beta_ratio=1e-1, - cross_gradient_weight_a_b=1e0, - cross_gradient_weight_c_a=1e0, - cross_gradient_weight_c_b=1e0, - percentile=100, ) - driver = JointCrossGradientDriver(joint_params) - - # Check that chi factors set on the sub drivers are preserved forward - np.testing.assert_allclose( - driver.data_misfit.multipliers, [0.8, 0.8, 1.0, 1.0, 1.0], atol=1e-3 + with caplog.at_level(logging.WARNING): + _ = JointCrossGradientDriver(joint_params) + + assert "Some drivers do not have a model" in caplog.text + + # Add gradient rotation to the mvi driver and check it is used + params.models.gradient_rotation = gradient_rotation + params.out_group = None + drivers[-1] = MagneticVectorPDEInversionDriver(params) + # Run the inverse + joint_params = JointCrossGradientOptions.build( + geoh5=geoh5, + topography_object=topography, + group_a=drivers[0].out_group, + group_a_multiplier=1.0, + group_b=drivers[1].out_group, + group_b_multiplier=1.0, + max_global_iterations=max_iterations, ) + joint_driver = JointCrossGradientDriver(joint_params) + assert joint_driver.models.gradient_dip is not None - driver.run() + joint_driver.run() if __name__ == "__main__": From 3d00034f69ec071ab088a2ab4cf62d31899a08ab Mon Sep 17 00:00:00 2001 From: domfournier Date: Mon, 13 Apr 2026 13:23:34 -0700 Subject: [PATCH 20/27] Fix joint survey to take into account driver.get_regularization. Augment unitest --- simpeg_drivers/joint/driver.py | 4 ++++ simpeg_drivers/joint/joint_surveys/driver.py | 14 +++++++++++++ tests/run_tests/driver_joint_surveys_test.py | 22 +++++++++++++++++--- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 56440dcd..e97d1823 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -265,6 +265,10 @@ def validate_create_models(self): for model_type in self.models.model_types: if model_type in [ "petrophysical_model", + "starting_inclination", + "starting_declination", + "reference_inclination", + "reference_declination", ]: continue diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py index ee46223e..cf213bbd 100644 --- a/simpeg_drivers/joint/joint_surveys/driver.py +++ b/simpeg_drivers/joint/joint_surveys/driver.py @@ -38,6 +38,20 @@ def __init__(self, params: JointSurveysOptions): with fetch_active_workspace(self.workspace, mode="r+"): self.initialize() + def get_regularization(self): + """ + Overload the regularization using the method of the first driver. + """ + driver = self.drivers[0] + # Pre-store the saving directives before the swap + _ = driver.directives.save_directives + + driver._models = self.models # pylint: disable=protected-access + driver._inversion_mesh = self.inversion_mesh # pylint: disable=protected-access + driver._n_values = self.models.n_active # pylint: disable=protected-access + driver.mapping = self.mapping + return driver.get_regularization() + def validate_create_models(self): """Check if all models were provided, otherwise use the first driver models.""" # Create projection for first driver to global mesh diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py index 5fd85868..aa7e0482 100644 --- a/tests/run_tests/driver_joint_surveys_test.py +++ b/tests/run_tests/driver_joint_surveys_test.py @@ -11,6 +11,7 @@ from pathlib import Path import numpy as np +import pytest from geoh5py.objects import Octree from geoh5py.workspace import Workspace from simpeg.directives import SaveModelGeoH5, SavePropertyGroup @@ -36,6 +37,10 @@ MagneticVectorInversionDriver, MagneticVectorInversionOptions, ) +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) from simpeg_drivers.utils.synthetics.driver import ( SyntheticsComponents, ) @@ -228,7 +233,14 @@ def test_joint_surveys_inv_run( check_target(output, target_run) -def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): +@pytest.mark.parametrize( + "option_class, driver_class", + [ + (MagneticVectorInversionOptions, MagneticVectorInversionDriver), + (MagneticVectorPDEInversionOptions, MagneticVectorPDEInversionDriver), + ], +) +def test_joint_surveys_mvi_run(tmp_path, option_class, driver_class, anomaly=0.05): drivers = [] with Workspace.create(tmp_path / f"{__name__}.geoh5") as geoh5: @@ -274,7 +286,7 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): else: inc_mod = None - params = MagneticVectorInversionOptions.build( + params = option_class.build( geoh5=geoh5, mesh=components.mesh, topography_object=components.topography, @@ -288,7 +300,7 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): starting_inclination=inc_mod, reference_model=0.0, ) - drivers.append(MagneticVectorInversionDriver(params)) + drivers.append(driver_class(params)) # Run the inverse joint_params = JointSurveysOptions.build( @@ -319,6 +331,10 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): == 3 ) + assert isinstance( + driver.regularization.objfcts[0], type(drivers[0].regularization.objfcts[0]) + ) + def test_joint_surveys_conductivity_run( tmp_path, From 0fe360f24346d9b5634f6fcedf562bd675a4bc13 Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 09:28:56 -0700 Subject: [PATCH 21/27] Fix pde test --- tests/run_tests/driver_mvi_pde_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index ff3b917c..b6584c5b 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -104,7 +104,7 @@ def test_mvi_pde_run( with Workspace(workpath) as geoh5: tmi = geoh5.get_entity("Iteration_0_tmi")[0] - + orig_tmi = tmi.values.copy() components = SyntheticsComponents(geoh5=geoh5) mesh = components.mesh topography = components.topography @@ -154,6 +154,7 @@ def test_mvi_pde_run( output = get_inversion_output( driver.params.geoh5.h5file, driver.params.out_group.uid ) + output["data"] = orig_tmi check_target(output, target_mvi_pde_run) From e825c7e0ddb330d3ad2b9a7b1cf89a4629db565d Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 10:37:40 -0700 Subject: [PATCH 22/27] Fix target for mvi pde --- tests/run_tests/driver_mvi_pde_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index b6584c5b..bf9970db 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -40,7 +40,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_mvi_pde_run = {"data_norm": 177.6657250156235, "phi_d": 15.6, "phi_m": 0.0556} +target_mvi_pde_run = {"data_norm": 117.68015433473916, "phi_d": 110, "phi_m": 0.00861} def test_mvi_pde_fwr_run( From 5caf0716bbec34365a9ca743939411f5f0b79081 Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 10:45:35 -0700 Subject: [PATCH 23/27] Copilot fixes --- .../uijson/apparent_conductivity_inversion.ui.json | 2 +- .../uijson/direct_current_2d_inversion.ui.json | 2 +- .../uijson/direct_current_3d_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/fdem_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/gravity_inversion.ui.json | 2 +- .../uijson/induced_polarization_2d_inversion.ui.json | 2 +- .../uijson/induced_polarization_3d_inversion.ui.json | 2 +- .../uijson/joint_cross_gradient_inversion.ui.json | 2 +- .../uijson/joint_petrophysics_inversion.ui.json | 2 +- .../uijson/joint_surveys_inversion.ui.json | 2 +- .../uijson/magnetic_scalar_inversion.ui.json | 2 +- .../uijson/magnetic_vector_inversion.ui.json | 2 +- .../uijson/magnetic_vector_pde_inversion.ui.json | 2 +- .../uijson/magnetotellurics_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/tdem_inversion.ui.json | 2 +- simpeg_drivers-assets/uijson/tipper_inversion.ui.json | 2 +- simpeg_drivers/components/models.py | 2 +- .../potential_fields/magnetic_vector_pde/options.py | 8 ++++---- tests/run_tests/driver_mvi_pde_test.py | 6 ------ 21 files changed, 23 insertions(+), 29 deletions(-) diff --git a/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json b/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json index 145a3cd4..9bb5f5fe 100644 --- a/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json @@ -226,7 +226,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json index 83f9d62f..045f4502 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json @@ -264,7 +264,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json index a87752ae..b6c83cfd 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json @@ -219,7 +219,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json index 632e65b8..88f68149 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json @@ -287,7 +287,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json index ece2e082..ca2cdc3f 100644 --- a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json @@ -409,7 +409,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json index 37e94675..8993ad5a 100644 --- a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json @@ -488,7 +488,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json index 051734a3..e8624d25 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json @@ -275,7 +275,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json index 9ef7b3f8..1b337393 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json @@ -235,7 +235,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json index 8712350a..5bf0fc78 100644 --- a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json @@ -191,7 +191,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index b9377ddf..55723cc7 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -167,7 +167,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "enabled": false }, diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json index 2a11c104..bfa35fe3 100644 --- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json @@ -226,7 +226,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json index f025304d..d3013771 100644 --- a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json @@ -521,7 +521,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json index 0060ded7..891be062 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json @@ -569,7 +569,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json index f2c71db0..8ef6fbb8 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json @@ -357,7 +357,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json index e782cb52..72a4df81 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json @@ -440,7 +440,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json index 2bffd167..53ade0fd 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json @@ -269,7 +269,7 @@ "min": 0.0, "group": "Regularization", "label": "Vertical-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json index 4cf11ccc..10d4fc85 100644 --- a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json @@ -324,7 +324,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json index 9c85c829..7e9c8be4 100644 --- a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json @@ -320,7 +320,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index eeb5f083..330b6b54 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -277,7 +277,7 @@ def lower_bound(self) -> np.ndarray | None: if self.driver.params.inversion_type in [ "magnetic vector", - "magnetic vectorp pde", + "magnetic vector pde", ]: bound_model = None diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py index 502259de..52d05099 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py @@ -48,9 +48,9 @@ class MagneticVectorPDEForwardOptions(BaseForwardOptions): name: ClassVar[str] = "Magnetic Vector Forward" default_ui_json: ClassVar[Path] = ( - assets_path() / "uijson/magnetic_vector_forward.ui.json" + assets_path() / "uijson/magnetic_vector_pde_forward.ui.json" ) - run_command: str = "simpeg_drivers.potential_fields.magnetic_vector.forward" + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector_pde.forward" title: str = "Magnetic Vector Forward" physical_property: str = "susceptibility" inversion_type: str = "magnetic vector pde" @@ -85,9 +85,9 @@ class MagneticVectorPDEInversionOptions(BaseInversionOptions): name: ClassVar[str] = "Magnetic Vector Inversion" default_ui_json: ClassVar[Path] = ( - assets_path() / "uijson/magnetic_vector_inversion.ui.json" + assets_path() / "uijson/magnetic_vector_pde_inversion.ui.json" ) - run_command: str = "simpeg_drivers.potential_fields.magnetic_vector.inversion" + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector_pde.inversion" title: str = "Magnetic Vector Inversion" physical_property: str = "susceptibility" inversion_type: str = "magnetic vector pde" diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index bf9970db..e1a9d8fb 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -68,12 +68,6 @@ def test_mvi_pde_fwr_run( ) with get_workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: components = SyntheticsComponents(geoh5, options=opts) - - # Unitest dealing with Curve - _ = Curve.create( - geoh5, name=components.survey.name, vertices=components.survey.vertices - ) - geoh5.remove_entity(components.survey) inducing_field = (50000.0, 90.0, 0.0) params = MagneticVectorPDEForwardOptions.build( forward_only=True, From b636fb36da8c7372ac841a48a1636a2f06bbc306 Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 11:33:06 -0700 Subject: [PATCH 24/27] Use directive on mvi pde to apply bounds --- simpeg_drivers/components/factories/directives_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 6cfa0390..24274226 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -349,7 +349,7 @@ def vector_inversion_directive(self): """Directive to update vector model.""" if ( self._vector_inversion_directive is None - and self.factory_type == "magnetic vector" + and "magnetic vector" in self.factory_type ): reference_angles = ( getattr(self.driver.params.models, "reference_model", None) is not None, From e12e395ada40f85cbfb645427b3706b952676289 Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 11:54:51 -0700 Subject: [PATCH 25/27] Revert "Use directive on mvi pde to apply bounds" This reverts commit b636fb36da8c7372ac841a48a1636a2f06bbc306. --- simpeg_drivers/components/factories/directives_factory.py | 2 +- tests/run_tests/driver_mvi_pde_test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 24274226..6cfa0390 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -349,7 +349,7 @@ def vector_inversion_directive(self): """Directive to update vector model.""" if ( self._vector_inversion_directive is None - and "magnetic vector" in self.factory_type + and self.factory_type == "magnetic vector" ): reference_angles = ( getattr(self.driver.params.models, "reference_model", None) is not None, diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py index e1a9d8fb..4befa952 100644 --- a/tests/run_tests/driver_mvi_pde_test.py +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -40,7 +40,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_mvi_pde_run = {"data_norm": 117.68015433473916, "phi_d": 110, "phi_m": 0.00861} +target_mvi_pde_run = {"data_norm": 181.99122096291276, "phi_d": 408, "phi_m": 0.013} def test_mvi_pde_fwr_run( @@ -89,7 +89,7 @@ def test_mvi_pde_fwr_run( def test_mvi_pde_run( tmp_path: Path, max_iterations=5, - upper_bound=2.5e-3, + upper_bound=1e-2, pytest=True, ): workpath = tmp_path / "inversion_test.ui.geoh5" From 99b34dd46fca24b91b239d825c256335361f387f Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 13:00:39 -0700 Subject: [PATCH 26/27] Add expection to not expand mesh size model --- simpeg_drivers/joint/driver.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index e97d1823..68dfd3b7 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -275,7 +275,10 @@ def validate_create_models(self): model_collection = getattr(self.models, f"_{model_type}") # If set on joint driver, repeat for all drivers - if model_collection.model is not None: + if ( + model_collection.model is not None + and model_collection.trim_active_cells + ): model = np.kron(np.ones(len(self.mapping)), model_collection.model) # Concatenate models from individual drivers projected onto the global mesh From 89047344792d4dca60d15b862bc64e1ac80e430e Mon Sep 17 00:00:00 2001 From: domfournier Date: Tue, 14 Apr 2026 20:57:27 -0700 Subject: [PATCH 27/27] Update simpeg_drivers/joint/driver.py Co-authored-by: benk-mira <81254271+benk-mira@users.noreply.github.com> --- simpeg_drivers/joint/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 68dfd3b7..cb62cb10 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -279,7 +279,7 @@ def validate_create_models(self): model_collection.model is not None and model_collection.trim_active_cells ): - model = np.kron(np.ones(len(self.mapping)), model_collection.model) + model = np.tile(model_collection.model, len(self.mapping)) # Concatenate models from individual drivers projected onto the global mesh else: