From 0421e86a4bc8cf7cc51adac084d570b7f58e1d00 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 30 May 2025 15:17:03 -0700 Subject: [PATCH 01/59] Start parsing out components --- simpeg_drivers/options.py | 248 +++++++++++++++++++++++--------------- 1 file changed, 153 insertions(+), 95 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 5ce01bc8..c9395dd9 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -31,6 +31,7 @@ from geoh5py.objects import DrapeModel, Grid2D, Octree, Points from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile +from geoh5py.ui_json.annotations import Deprecated from pydantic import BaseModel, ConfigDict, field_validator, model_validator from simpeg.utils.mat_utils import cartesian2amplitude_dip_azimuth @@ -78,6 +79,28 @@ class SolverType(str, Enum): Mumps = "Mumps" +class OptimizationOptions(BaseModel): + """ + Optimization parameters for inversion. + + :param max_global_iterations: Maximum global iterations. + :param max_line_search_iterations: Maximum line search iterations. + :param max_cg_iterations: Maximum CG iterations. + :param tol_cg: Tolerance CG. + :param f_min_change: F min change. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + max_global_iterations: int = 50 + max_line_search_iterations: int = 20 + max_cg_iterations: int = 30 + tol_cg: float = 1e-4 + f_min_change: float = 1e-2 + + class CoreOptions(BaseData): """ Core parameters shared by inverse and forward operations. @@ -122,10 +145,9 @@ class CoreOptions(BaseData): run_command: str = "simpeg_drivers.driver" conda_environment: str = "simpeg_drivers" inversion_type: str - data_object: Points - mesh: Octree | DrapeModel | None - starting_model: float | FloatData + active_cells: ActiveCellsOptions + tile_spatial: int = 1 n_cpu: int | None = None solver_type: SolverType = SolverType.Pardiso @@ -272,115 +294,85 @@ def active_components(self) -> list[str]: return [k for k in self.components if getattr(self, f"{k}_channel_bool")] -class BaseInversionOptions(CoreOptions): +class ModelOptions(BaseModel): """ - Base class for inversion parameters. - - See CoreData class docstring for addition parameters descriptions. + Base class for model parameters. :param reference_model: Reference model. :param lower_bound: Lower bound. :param upper_bound: Upper bound. - - :param alpha_s: Alpha s. - :param length_scale_x: Length scale x. - :param length_scale_y: Length scale y. - :param length_scale_z: Length scale z. - :param gradient_rotation: Property group for gradient rotation angles. - - :param s_norm: S norm. - :param x_norm: X norm. - :param y_norm: Y norm. - :param z_norm: Z norm. - :param gradient_type: Gradient type. - :param max_irls_iterations: Maximum IRLS iterations. - :param starting_chi_factor: Starting chi factor. - - :param percentile: Percentile. - :param beta_tol: Beta tolerance. - - :param chi_factor: Chi factor. - :param auto_scale_misfits: Automatically scale misfits. - :param initial_beta: Initial beta. - :param initial_beta_ratio: Initial beta ratio. - :param cooling_factor: Cooling factor. - - :param cooling_rate: Cooling rate. - :param max_global_iterations: Maximum global iterations. - :param max_line_search_iterations: Maximum line search iterations. - :param max_cg_iterations: Maximum CG iterations. - :param tol_cg: Tolerance CG. - :param f_min_change: F min change. - - :param sens_wts_threshold: Sensitivity weights threshold. - :param every_iteration_bool: Every iteration bool. - - :param solver_type: Direct solver provider. Either Mumps or Pardiso. - :param tile_spatial: Tile the data spatially. - :param store_sensitivities: Store sensitivities. - :param max_chunk_size: Maximum chunk size. - :param chunk_by_rows: Chunk by rows. - - :param out_group: Output group. - - :param generate_sweep: Generate sweep. - - :param coolEpsFact: Cool eps fact. - :param beta_search: Beta search. """ model_config = ConfigDict( arbitrary_types_allowed=True, ) - name: ClassVar[str] = "Inversion" - - title: str = "Geophysical inversion" - run_command: str = "simpeg_drivers.driver" - - forward_only: bool = False - conda_environment: str = "simpeg_drivers" - + starting_model: float | FloatData reference_model: float | FloatData | None = None lower_bound: float | FloatData | None = None upper_bound: float | FloatData | None = None - alpha_s: float | FloatData | None = 1.0 - length_scale_x: float | FloatData = 1.0 - length_scale_y: float | FloatData | None = 1.0 - length_scale_z: float | FloatData = 1.0 - gradient_rotation: PropertyGroup | None = None + +class IRLSOptions(BaseModel): + """ + IRLS (Iteratively Reweighted Least Squares) options for inversion. + + :param s_norm: Norm applied on the reference model. + :param x_norm: Norm applied on the smoothing along the u-direction. + :param y_norm: Norm applied on the smoothing along the v-direction. + :param z_norm: Norm applied on the smoothing along the w-direction. + :param gradient_type: Type of gradient to use for regularization. + :param max_irls_iterations: Maximum number of IRLS iterations. + :param starting_chi_factor: Starting chi factor for IRLS. + :param beta_tol: Tolerance for the beta parameter. + :param percentile: Percentile of the model values used to compute the initial epsilon value. + :param epsilon_cooling_factor: Factor by which the epsilon value is reduced + """ s_norm: float | FloatData | None = 0.0 x_norm: float | FloatData = 2.0 y_norm: float | FloatData | None = 2.0 z_norm: float | FloatData = 2.0 - gradient_type: str = "total" + gradient_type: Deprecated = "total" max_irls_iterations: int = 25 starting_chi_factor: float = 1.0 + beta_tol: float = 0.5 + percentile: float = 95.0 + epsilon_cooling_factor: float = 1.2 - chi_factor: float = 1.0 - auto_scale_misfits: bool = True - initial_beta_ratio: float | None = 100.0 - initial_beta: float | None = None - cooling_factor: float = 2.0 - cooling_rate: float = 1.0 - max_global_iterations: int = 50 - max_line_search_iterations: int = 20 - max_cg_iterations: int = 30 - tol_cg: float = 1e-4 - f_min_change: float = 1e-2 - solver_type: SolverType = SolverType.Pardiso +class RegularizationOptions(BaseModel): + """ + Regularization options for inversion. - sens_wts_threshold: float = 1e-3 - every_iteration_bool: bool = True + :param alpha_s: Scale on the reference model. + :param length_scale_x: Length scale along the u-direction. + :param length_scale_y: Length scale along the v-direction. + :param length_scale_z: Length scale along the z-direction. + :param gradient_rotation: Property group for gradient rotation angles. + """ - store_sensitivities: str = "ram" + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) - beta_tol: float = 0.5 - percentile: float = 95.0 - epsilon_cooling_factor: float = 1.2 + alpha_s: float | FloatData | None = 1.0 + length_scale_x: float | FloatData = 1.0 + length_scale_y: float | FloatData | None = 1.0 + length_scale_z: float | FloatData = 1.0 + gradient_rotation: PropertyGroup | None = None + + @property + def gradient_direction(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 0] + + @property + def gradient_dip(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 1] @property def gradient_orientations(self) -> tuple(float, float): @@ -398,17 +390,83 @@ def gradient_orientations(self) -> tuple(float, float): return None - @property - def gradient_direction(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 0] - @property - def gradient_dip(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 1] +class TradeOffOptions(BaseModel): + """ + Options controlling the trade-off schedule between data misfit and + model regularization. + + :param initial_beta_ratio: Initial ratio of regularization to data misfit. + :param initial_beta: Initial value of the regularization parameter. + :param cooling_factor: Factor by which the regularization parameter is reduced. + :param cooling_rate: Rate at which the regularization parameter is reduced. + :param chi_factor: Target chi factor for the data misfit. + """ + + initial_beta_ratio: float | None = 100.0 + initial_beta: float | None = None + cooling_factor: float = 2.0 + cooling_rate: float = 1.0 + chi_factor: float = 1.0 + + +class DirectiveOptions(BaseModel): + """ + Directive options for inversion. + + :param every_iteration_bool: Update the sensitivity weights every iteration. + :param sens_wts_threshold: Threshold for sensitivity weights. + :param beta_search: Beta search. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + every_iteration_bool: bool = False + sens_wts_threshold: float | None = 0.0 + beta_search: bool = True + + +class BaseInversionOptions(CoreOptions): + """ + Base class for inversion parameters. + + See CoreData class docstring for addition parameters descriptions. + + :param name: Name of the inversion. + :param title: Title of the inversion. + :param run_command: Command (module name) used to run the application from + command line. + :param forward_only: If True, only run the forward simulation. + :param conda_environment: Name of the conda environment used to run the program + :param regularization_options: Options specific to the regularization function. + :param irls_options: Options specific to the IRLS (Iteratively Reweighted Least Squares) directive. + :param extra_directives: Additional directives to be used in the inversion. + :param trade_off_options: Options controlling the trade-off schedule between data misfit and model regularization. + :param optimization_options: Options for the optimization algorithm used in the inversion. + :param store_sensitivities: Where to store sensitivities, either in RAM or on disk. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + name: ClassVar[str] = "Inversion" + + title: str = "Geophysical inversion" + run_command: str = "simpeg_drivers.driver" + + forward_only: bool = False + conda_environment: str = "simpeg_drivers" + + regularization_options: RegularizationOptions = RegularizationOptions() + irls_options: IRLSOptions = IRLSOptions() + extra_directives: DirectiveOptions = DirectiveOptions() + trade_off_options: TradeOffOptions = TradeOffOptions() + optimization_options: OptimizationOptions = OptimizationOptions() + + store_sensitivities: str = "ram" class EMDataMixin: From f5206e0e3c9b402ddda86ee5a9cbf4024c733bcb Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 2 Jun 2025 08:38:09 -0700 Subject: [PATCH 02/59] Update directives --- .../factories/directives_factory.py | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index cbbe98ab..6aad4cac 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -15,6 +15,7 @@ from __future__ import annotations from abc import ABC +from logging import getLogger from typing import TYPE_CHECKING import numpy as np @@ -29,6 +30,8 @@ if TYPE_CHECKING: from simpeg_drivers.driver import InversionDriver +logger = getLogger(__name__) + class DirectivesFactory: def __init__(self, driver: InversionDriver): @@ -54,12 +57,13 @@ def __init__(self, driver: InversionDriver): def beta_estimate_by_eigenvalues_directive(self): """""" if ( - self.params.initial_beta is None + self.params.cooling_schedule.initial_beta is None and self._beta_estimate_by_eigenvalues_directive is None ): self._beta_estimate_by_eigenvalues_directive = ( directives.BetaEstimateDerivative( - beta0_ratio=self.params.initial_beta_ratio, random_seed=0 + beta0_ratio=self.params.cooling_schedule.initial_beta_ratio, + random_seed=0, ) ) @@ -178,7 +182,7 @@ def save_sensitivities_directive(self): """""" if ( self._save_sensitivities_directive is None - and self.params.save_sensitivities + and self.params.directives.save_sensitivities ): self._save_sensitivities_directive = SaveSensitivitiesGeoh5Factory( self.params @@ -251,7 +255,7 @@ def save_iteration_residual_directive(self): def scale_misfits(self): if ( self._scale_misfits is None - and self.params.auto_scale_misfits + and self.params.directives.auto_scale_misfits and len(self.driver.data_misfit.objfcts) > 1 ): self._scale_misfits = directives.ScaleMisfitMultipliers( @@ -263,21 +267,28 @@ def scale_misfits(self): def update_irls_directive(self): """Directive to update IRLS.""" if self._update_irls_directive is None: - has_chi_start = self.params.starting_chi_factor is not None + start_chi_fact = self.params.irls.starting_chi_factor + + if ( + start_chi_fact is not None + and self.params.cooling_schedule.chi_factor > start_chi_fact + ): + logger.warning( + "Starting chi factor is greater than target chi factor.\n" + "Setting the target chi factor to the starting chi factor." + ) + start_chi_fact = self.params.irls.chi_factor + self._update_irls_directive = directives.UpdateIRLS( - f_min_change=self.params.f_min_change, - max_irls_iterations=self.params.max_irls_iterations, - misfit_tolerance=self.params.beta_tol, - percentile=self.params.percentile, - cooling_rate=self.params.cooling_rate, - cooling_factor=self.params.cooling_factor, - irls_cooling_factor=self.params.epsilon_cooling_factor, - chifact_start=( - self.params.starting_chi_factor - if has_chi_start - else self.params.chi_factor - ), - chifact_target=self.params.chi_factor, + f_min_change=self.params.optimization.f_min_change, + max_irls_iterations=self.params.irls.max_irls_iterations, + misfit_tolerance=self.params.irls.beta_tol, + percentile=self.params.irls.percentile, + cooling_rate=self.params.cooling_schedule.cooling_rate, + cooling_factor=self.params.cooling_schedule.cooling_factor, + irls_cooling_factor=self.params.irls.epsilon_cooling_factor, + chifact_start=start_chi_fact or self.params.cooling_schedule.chi_factor, + chifact_target=self.params.cooling_schedule.chi_factor, ) return self._update_irls_directive @@ -294,8 +305,8 @@ def update_sensitivity_weights_directive(self): if self._update_sensitivity_weights_directive is None: self._update_sensitivity_weights_directive = ( directives.UpdateSensitivityWeights( - every_iteration=self.params.every_iteration_bool, - threshold_value=self.params.sens_wts_threshold / 100.0, + every_iteration=self.params.directives.every_iteration_bool, + threshold_value=self.params.directives.sens_wts_threshold / 100.0, ) ) From dfbdc65ee93884859837db06b65b3fe6cca8ebc2 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 2 Jun 2025 10:45:03 -0700 Subject: [PATCH 03/59] Group parameters for Compute --- simpeg_drivers/options.py | 56 +++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index c6b20759..691e0194 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -101,6 +101,32 @@ class OptimizationOptions(BaseModel): f_min_change: float = 1e-2 +class ComputeOptions(BaseModel): + """ + Options related to compute resources and parallelization. + + :param distributed_workers: Distributed workers. + :param max_chunk_size: Maximum chunk size used for parallel operations. + :param max_ram: Maximum amount of RAM available + :param n_cpu: Number of CPUs to use for parallel operations. + :param n_threads: Number of threads per worker + :param n_workers: Number of distributed workers to use. + :param performance_report: Generate an HTML report from dask.diagnostics + :param solver_type: Type of solver to use for the inversion. + :param tile_spatial: Number of tiles to split the data. + """ + + distributed_workers: str | None = None + max_chunk_size: int = 128 + max_ram: float | None = None + n_cpu: int | None = None + n_threads: int | None = None + n_workers: int | None = 1 + performance_report: bool = False + solver_type: SolverType = SolverType.Pardiso + tile_spatial: int = 1 + + class CoreOptions(BaseData): """ Core parameters shared by inverse and forward operations. @@ -112,20 +138,10 @@ class CoreOptions(BaseData): :param inversion_type: Type of inversion. :param data_object: Data object containing survey geometry and data channels. - :param mesh: Mesh object containing models (starting, reference, active, etc..). - :param starting_model: Starting model used to start inversion or for simulating - data in the forward operation. :param active_cells: Active cell data as either a topography surface/data or a 3D model. - :param tile_spatial: Number of tiles to split the data. - :param max_chunk_size: Maximum chunk size used for parallel operations. - :param save_sensitivities: Save sensitivities to file. + :param out_group: Output group to save results. :param generate_sweep: Generate sweep file instead of running the app. - :param distributed_workers: Distributed workers. - :param n_threads: Number of threads per worker - :param n_workers: Number of distributed workers to use. - :param max_ram: Maximum amount of RAM available - :param performance_report: Generate an HTML report from dask.diagnostics """ # TODO: Refactor to allow frozen True. Currently params.data_object is @@ -139,26 +155,20 @@ class CoreOptions(BaseData): ) title: str | None = None + version: str = simpeg_drivers.__version__ icon: str | None = None + inversion_type: str documentation: str | None = None - version: str = simpeg_drivers.__version__ - run_command: str = "simpeg_drivers.driver" conda_environment: str = "simpeg_drivers" - inversion_type: str + run_command: str = "simpeg_drivers.driver" active_cells: ActiveCellsOptions + compute: ComputeOptions = ComputeOptions() + data_object: Points | None = None - tile_spatial: int = 1 - n_cpu: int | None = None - solver_type: SolverType = SolverType.Pardiso - max_chunk_size: int = 128 out_group: SimPEGGroup | UIJsonGroup | None = None + generate_sweep: bool = False - distributed_workers: str | None = None - n_workers: int | None = 1 - n_threads: int | None = None - max_ram: float | None = None - performance_report: bool = False @field_validator("mesh", mode="before") @classmethod From 36c2fdc66d53059fb3eb0e913db67cf8ede24d6b Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 3 Jun 2025 09:23:45 -0700 Subject: [PATCH 04/59] Re-shuffle on option classes --- simpeg_drivers/options.py | 448 +++++++++++++++++++------------------- 1 file changed, 228 insertions(+), 220 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 691e0194..e91e1369 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -79,28 +79,6 @@ class SolverType(str, Enum): Mumps = "Mumps" -class OptimizationOptions(BaseModel): - """ - Optimization parameters for inversion. - - :param max_global_iterations: Maximum global iterations. - :param max_line_search_iterations: Maximum line search iterations. - :param max_cg_iterations: Maximum CG iterations. - :param tol_cg: Tolerance CG. - :param f_min_change: F min change. - """ - - model_config = ConfigDict( - arbitrary_types_allowed=True, - ) - - max_global_iterations: int = 50 - max_line_search_iterations: int = 20 - max_cg_iterations: int = 30 - tol_cg: float = 1e-4 - f_min_change: float = 1e-2 - - class ComputeOptions(BaseModel): """ Options related to compute resources and parallelization. @@ -136,8 +114,6 @@ class CoreOptions(BaseData): :param conda_environment: Name of the conda environment used to run the application with all of its dependencies. :param inversion_type: Type of inversion. - :param data_object: Data object containing survey geometry and data - channels. :param active_cells: Active cell data as either a topography surface/data or a 3D model. :param out_group: Output group to save results. @@ -162,14 +138,25 @@ class CoreOptions(BaseData): conda_environment: str = "simpeg_drivers" run_command: str = "simpeg_drivers.driver" + mesh: Octree | Grid2D | DrapeModel | None = None active_cells: ActiveCellsOptions compute: ComputeOptions = ComputeOptions() - data_object: Points | None = None out_group: SimPEGGroup | UIJsonGroup | None = None generate_sweep: bool = False + @property + def components(self) -> list[str]: + """Return list of component names.""" + return [self._component_name(k) for k in self.__dict__ if "channel" in k] + + def _component_name(self, component: str) -> str: + """Strip the '_channel' and '_channel_bool' suffixes from data name.""" + return "_".join( + [k for k in component.split("_") if k not in ["channel", "bool"]] + ) + @field_validator("mesh", mode="before") @classmethod def mesh_cannot_be_rotated(cls, value: Octree): @@ -212,73 +199,13 @@ def update_out_group_options(self): def workpath(self): return Path(self.geoh5.h5file).parent - @property - def components(self) -> list[str]: - """Return list of component names.""" - return [self._component_name(k) for k in self.__dict__ if "channel" in k] - - @property - def active_components(self) -> list[str]: - """Return list of active components.""" - return [ - k - for k in self.components - if getattr(self, "_".join([k, "channel"])) is not None - ] - - @property - def data(self) -> InversionDataDict: - """Return dictionary of data components and associated values.""" - out = {} - for k in self.active_components: - out[k] = self.component_data(k) - return out - - @property - def uncertainties(self) -> InversionDataDict: - """Return dictionary of unceratinty components and associated values.""" - out = {} - for k in self.active_components: - out[k] = self.component_uncertainty(k) - return out - - def component_data(self, component: str) -> np.ndarray | None: - """Return data values associated with the component.""" - data = getattr(self, "_".join([component, "channel"]), None) - if isinstance(data, NumericData): - data = data.values - return data - - def component_uncertainty(self, component: str) -> np.ndarray | None: - """ - Return uncertainty values associated with the component. - - If the uncertainty is a float, it will be broadcasted to the same - shape as the data. - - :param component: Component name. - """ - data = getattr(self, "_".join([component, "uncertainty"]), None) - if isinstance(data, NumericData): - data = data.values - elif isinstance(data, float): - data *= np.ones_like(self.component_data(component)) - - return data - - def _component_name(self, component: str) -> str: - """Strip the '_channel' and '_channel_bool' suffixes from data name.""" - return "_".join( - [k for k in component.split("_") if k not in ["channel", "bool"]] - ) - @property def padding_cells(self) -> int: """ Default padding cells used for tiling. """ # Keep whole mesh for 1 tile - if self.tile_spatial == 1: + if self.compute.tile_spatial == 1: return 100 return 4 if self.inversion_type in ["fdem", "tdem"] else 6 @@ -293,9 +220,13 @@ class BaseForwardOptions(CoreOptions): """ Base class for forward parameters. - See CoreData class docstring for addition parameters descriptions.""" + See CoreData class docstring for addition parameters descriptions. + + :param data_object: Data object containing the survey data. + """ forward_only: bool = True + data_object: Points @property def active_components(self) -> list[str]: @@ -303,23 +234,110 @@ def active_components(self) -> list[str]: return [k for k in self.components if getattr(self, f"{k}_channel_bool")] -class ModelOptions(BaseModel): +class CoolingSceduleOptions(BaseModel): """ - Base class for model parameters. + Options controlling the trade-off schedule between data misfit and + model regularization. - :param reference_model: Reference model. - :param lower_bound: Lower bound. - :param upper_bound: Upper bound. + :param chi_factor: Target chi factor for the data misfit. + :param cooling_factor: Factor by which the regularization parameter is reduced. + :param cooling_rate: Rate at which the regularization parameter is reduced. + :param initial_beta: Initial regularization parameter. + :param initial_beta_ratio: Initial ratio of regularization to data misfit. + """ + + chi_factor: float = 1.0 + cooling_factor: float = 2.0 + cooling_rate: float = 1.0 + initial_beta: float | None = None + initial_beta_ratio: float | None = 100.0 + + +class DirectiveOptions(BaseModel): + """ + Directive options for inversion. + + :param auto_scale_misfits: Automatically scale misfits of sub objectives. + :param beta_search: Beta search. + :param every_iteration_bool: Update the sensitivity weights every iteration. + :param save_sensitivities: Save sensitivities to file. + :param sens_wts_threshold: Threshold for sensitivity weights. """ model_config = ConfigDict( arbitrary_types_allowed=True, ) + auto_scale_misfits: bool = True + beta_search: bool = True + every_iteration_bool: bool = False + save_sensitivities: bool = False + sens_wts_threshold: float | None = 0.0 - starting_model: float | FloatData - reference_model: float | FloatData | None = None - lower_bound: float | FloatData | None = None - upper_bound: float | FloatData | None = None + +class DrapeModelOptions(BaseModel): + """ + Drape model parameters for 2D simulation/inversion]. + + :param u_cell_size: Horizontal cell size for the drape model. + :param v_cell_size: Vertical cell size for the drape model. + :param depth_core: Depth of the core region. + :param horizontal_padding: Horizontal padding. + :param vertical_padding: Vertical padding. + :param expansion_factor: Expansion factor for the drape model. + """ + + u_cell_size: float | None = 25.0 + v_cell_size: float | None = 25.0 + depth_core: float | None = 100.0 + horizontal_padding: float | None = 100.0 + vertical_padding: float | None = 100.0 + expansion_factor: float | None = 1.1 + + +class EMDataMixin: + """ + Mixin class to add data and uncertainty access from property groups. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def component_data(self, component: str): + """Return data values associated with the component.""" + property_group = getattr(self, "_".join([component, "channel"]), None) + return self.property_group_data(property_group) + + def component_uncertainty(self, component: str): + """Return uncertainty values associated with the component.""" + property_group = getattr(self, "_".join([component, "uncertainty"]), None) + return self.property_group_data(property_group) + + def property_group_data(self, property_group: PropertyGroup): + """ + Return dictionary of channel/data. + + :param property_group: Property group uid + """ + frequencies = self.data_object.channels + if property_group is None: + return dict.fromkeys(frequencies) + + data = {} + group = next( + k for k in self.data_object.property_groups if k.uid == property_group.uid + ) + property_names = [self.geoh5.get_entity(p)[0].name for p in group.properties] + properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] + for i, f in enumerate(frequencies): + try: + f_ind = property_names.index( + next(k for k in property_names if f"{f:.2e}" in k) + ) # Safer if data was saved with geoapps naming convention + data[f] = properties[f_ind] + except StopIteration: + data[f] = properties[i] # in case of other naming conventions + + return data class IRLSOptions(BaseModel): @@ -338,6 +356,10 @@ class IRLSOptions(BaseModel): :param epsilon_cooling_factor: Factor by which the epsilon value is reduced """ + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + s_norm: float | FloatData | None = 0.0 x_norm: float | FloatData = 2.0 y_norm: float | FloatData | None = 2.0 @@ -350,6 +372,75 @@ class IRLSOptions(BaseModel): epsilon_cooling_factor: float = 1.2 +class LineSelectionOptions(BaseModel): + """ + Line selection parameters for 2D inversions. + + :param line_id: Line identifier for simulation/inversion. + :param line_object: Reference data categorizing survey by line ids. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + line_id: int = 1 + line_object: ReferencedData + + @field_validator("line_object", mode="before") + @classmethod + def validate_cell_association(cls, value): + if value.association is not DataAssociationEnum.CELL: + raise ValueError("Line identifier must be associated with cells.") + return value + + @model_validator(mode="after") + def line_id_referenced(self): + if self.line_id not in self.line_object.values: + raise ValueError("Line id isn't referenced in the line object.") + return self + + +class ModelOptions(BaseModel): + """ + Base class for model parameters. + + :param reference_model: Reference model. + :param lower_bound: Lower bound. + :param upper_bound: Upper bound. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + starting_model: float | FloatData + reference_model: float | FloatData | None = None + lower_bound: float | FloatData | None = None + upper_bound: float | FloatData | None = None + + +class OptimizationOptions(BaseModel): + """ + Optimization parameters for inversion. + + :param f_min_change: F min change. + :param max_cg_iterations: Maximum CG iterations. + :param max_global_iterations: Maximum global iterations. + :param max_line_search_iterations: Maximum line search iterations. + :param tol_cg: Tolerance CG. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + f_min_change: float = 1e-2 + max_cg_iterations: int = 30 + max_global_iterations: int = 50 + max_line_search_iterations: int = 20 + tol_cg: float = 1e-4 + + class RegularizationOptions(BaseModel): """ Regularization options for inversion. @@ -400,46 +491,6 @@ def gradient_orientations(self) -> tuple(float, float): return None -class CoolingSceduleOptions(BaseModel): - """ - Options controlling the trade-off schedule between data misfit and - model regularization. - - :param chi_factor: Target chi factor for the data misfit. - :param cooling_factor: Factor by which the regularization parameter is reduced. - :param cooling_rate: Rate at which the regularization parameter is reduced. - :param initial_beta: Initial regularization parameter. - :param initial_beta_ratio: Initial ratio of regularization to data misfit. - """ - - chi_factor: float = 1.0 - cooling_factor: float = 2.0 - cooling_rate: float = 1.0 - initial_beta: float | None = None - initial_beta_ratio: float | None = 100.0 - - -class DirectiveOptions(BaseModel): - """ - Directive options for inversion. - - :param auto_scale_misfits: Automatically scale misfits of sub objectives. - :param beta_search: Beta search. - :param every_iteration_bool: Update the sensitivity weights every iteration. - :param save_sensitivities: Save sensitivities to file. - :param sens_wts_threshold: Threshold for sensitivity weights. - """ - - model_config = ConfigDict( - arbitrary_types_allowed=True, - ) - auto_scale_misfits: bool = True - beta_search: bool = True - every_iteration_bool: bool = False - save_sensitivities: bool = False - sens_wts_threshold: float | None = 0.0 - - class BaseInversionOptions(CoreOptions): """ Base class for inversion parameters. @@ -452,6 +503,7 @@ class BaseInversionOptions(CoreOptions): command line. :param forward_only: If True, only run the forward simulation. :param conda_environment: Name of the conda environment used to run the program + :param data_object: Data object containing the survey data. :param regularization: Options specific to the regularization function. :param irls: Options specific to the IRLS (Iteratively Reweighted Least Squares) directive. :param directives: Additional directives to be used in the inversion. @@ -472,6 +524,8 @@ class BaseInversionOptions(CoreOptions): forward_only: bool = False conda_environment: str = "simpeg_drivers" + data_object: Points + regularization: RegularizationOptions = RegularizationOptions() irls: IRLSOptions = IRLSOptions() directives: DirectiveOptions = DirectiveOptions() @@ -480,97 +534,51 @@ class BaseInversionOptions(CoreOptions): store_sensitivities: str = "ram" + @property + def active_components(self) -> list[str]: + """Return list of active components.""" + return [ + k + for k in self.components + if getattr(self, "_".join([k, "channel"])) is not None + ] -class EMDataMixin: - """ - Mixin class to add data and uncertainty access from property groups. - """ + @property + def data(self) -> InversionDataDict: + """Return dictionary of data components and associated values.""" + out = {} + for k in self.active_components: + out[k] = self.component_data(k) + return out - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + @property + def uncertainties(self) -> InversionDataDict: + """Return dictionary of unceratinty components and associated values.""" + out = {} + for k in self.active_components: + out[k] = self.component_uncertainty(k) + return out - def component_data(self, component: str): + def component_data(self, component: str) -> np.ndarray | None: """Return data values associated with the component.""" - property_group = getattr(self, "_".join([component, "channel"]), None) - return self.property_group_data(property_group) - - def component_uncertainty(self, component: str): - """Return uncertainty values associated with the component.""" - property_group = getattr(self, "_".join([component, "uncertainty"]), None) - return self.property_group_data(property_group) + data = getattr(self, "_".join([component, "channel"]), None) + if isinstance(data, NumericData): + data = data.values + return data - def property_group_data(self, property_group: PropertyGroup): + def component_uncertainty(self, component: str) -> np.ndarray | None: """ - Return dictionary of channel/data. + Return uncertainty values associated with the component. - :param property_group: Property group uid - """ - frequencies = self.data_object.channels - if property_group is None: - return dict.fromkeys(frequencies) + If the uncertainty is a float, it will be broadcasted to the same + shape as the data. - data = {} - group = next( - k for k in self.data_object.property_groups if k.uid == property_group.uid - ) - property_names = [self.geoh5.get_entity(p)[0].name for p in group.properties] - properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] - for i, f in enumerate(frequencies): - try: - f_ind = property_names.index( - next(k for k in property_names if f"{f:.2e}" in k) - ) # Safer if data was saved with geoapps naming convention - data[f] = properties[f_ind] - except StopIteration: - data[f] = properties[i] # in case of other naming conventions + :param component: Component name. + """ + data = getattr(self, "_".join([component, "uncertainty"]), None) + if isinstance(data, NumericData): + data = data.values + elif isinstance(data, float): + data *= np.ones_like(self.component_data(component)) return data - - -class DrapeModelOptions(BaseModel): - """ - Drape model parameters for 2D simulation/inversion]. - - :param u_cell_size: Horizontal cell size for the drape model. - :param v_cell_size: Vertical cell size for the drape model. - :param depth_core: Depth of the core region. - :param horizontal_padding: Horizontal padding. - :param vertical_padding: Vertical padding. - :param expansion_factor: Expansion factor for the drape model. - """ - - u_cell_size: float | None = 25.0 - v_cell_size: float | None = 25.0 - depth_core: float | None = 100.0 - horizontal_padding: float | None = 100.0 - vertical_padding: float | None = 100.0 - expansion_factor: float | None = 1.1 - - -class LineSelectionOptions(BaseModel): - """ - Line selection parameters for 2D inversions. - - :param line_object: Reference data categorizing survey by line ids. - :param line_id: Line identifier for simulation/inversion. - """ - - model_config = ConfigDict( - arbitrary_types_allowed=True, - ) - - line_object: ReferencedData - line_id: int = 1 - - @field_validator("line_object", mode="before") - @classmethod - def validate_cell_association(cls, value): - if value.association is not DataAssociationEnum.CELL: - raise ValueError("Line identifier must be associated with cells.") - return value - - @model_validator(mode="after") - def line_id_referenced(self): - if self.line_id not in self.line_object.values: - raise ValueError("Line id isn't referenced in the line object.") - return self From 5b35e0024ba777bf18dce415b753fafcea1adaf7 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 3 Jun 2025 09:35:49 -0700 Subject: [PATCH 05/59] Refactoring of data class for latest changes. Run through grav fwr --- simpeg_drivers/components/data.py | 48 ++++++++++++------- .../factories/directives_factory.py | 6 +-- .../factories/simulation_factory.py | 2 +- simpeg_drivers/driver.py | 16 ++++--- simpeg_drivers/options.py | 5 ++ 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index 26be8d76..9479d695 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -43,7 +43,7 @@ class InversionData(InversionLocations): """ - Retrieve and store data from the workspace and apply transformations. + Retrieve and store data from the workspace and apply normalizations. Parameters --------- @@ -61,8 +61,6 @@ class InversionData(InversionLocations): Component names. observed : Components and associated observed geophysical data. - predicted : - Components and associated predicted geophysical data. uncertainties : Components and associated data uncertainties. normalizations : @@ -89,11 +87,10 @@ def __init__(self, workspace: Workspace, params: InversionBaseOptions): self.indices: np.ndarray | None = None self.vector: bool | None = None self.n_blocks: int | None = None - self.observed: dict[str, np.ndarray] = {} - self.predicted: dict[str, np.ndarray] = {} - self.uncertainties: dict[str, np.ndarray] = {} - self.normalizations: dict[str, Any] = {} - self.transformations: dict[str, Any] = {} + + self._observed: dict[str, np.ndarray] | None = None + self._uncertainties: dict[str, np.ndarray] | None = None + self.entity = None self.data_entity = None self._observed_data_types = {} @@ -101,13 +98,14 @@ def __init__(self, workspace: Workspace, params: InversionBaseOptions): self._initialize() + self.normalizations: dict[str, Any] = self.get_normalizations() + def _initialize(self) -> None: """Extract data from the workspace using params data.""" self.vector = True if self.params.inversion_type == "magnetic vector" else False self.n_blocks = 3 if self.params.inversion_type == "magnetic vector" else 1 self.components = self.params.active_components - self.observed = self.params.data - self.uncertainties = self.params.uncertainties + self.has_tensor = InversionData.check_tensor(self.params.components) self.locations = super().get_locations(self.params.data_object) @@ -119,16 +117,32 @@ def _initialize(self) -> None: else: self.mask = np.ones(len(self.locations), dtype=bool) - self.observed = self.filter(self.observed) - self.uncertainties = self.filter(self.uncertainties) - - self.normalizations = self.get_normalizations() - self.observed = self.normalize(self.observed) - self.uncertainties = self.normalize(self.uncertainties, absolute=True) self.entity = self.write_entity() self.params.data_object = self.entity self.locations = super().get_locations(self.entity) + @property + def observed(self): + """ + Return observed data filtered and normalized. + """ + if self._observed is None: + filtered = self.filter(self.params.data) + self._observed = self.normalize(filtered) + + return self._observed + + @property + def uncertainties(self): + """ + Return uncertainties filtered and normalized. + """ + if self._uncertainties is None and hasattr(self.params, "uncertainties"): + filtered = self.filter(self.params.uncertainties) + self._uncertainties = self.normalize(filtered, absolute=True) + + return self._uncertainties + def drape_locations(self, locations: np.ndarray) -> np.ndarray: """ Return pseudo locations along line in distance, depth. @@ -192,7 +206,7 @@ def write_entity(self): def save_data(self): """Write out the data to geoh5""" - data = self.predicted if self.params.forward_only else self.observed + data = self.observed basename = "Predicted" if self.params.forward_only else "Observed" self._observed_data_types = {c: {} for c in data.keys()} data_dict = {c: {} for c in data.keys()} diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 6aad4cac..56f52b38 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -25,6 +25,7 @@ from simpeg.utils.mat_utils import cartesian2amplitude_dip_azimuth from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory +from simpeg_drivers.options import BaseInversionOptions if TYPE_CHECKING: @@ -180,9 +181,8 @@ def save_property_group(self): @property def save_sensitivities_directive(self): """""" - if ( - self._save_sensitivities_directive is None - and self.params.directives.save_sensitivities + if self._save_sensitivities_directive is None and isinstance( + self.params, BaseInversionOptions ): self._save_sensitivities_directive = SaveSensitivitiesGeoh5Factory( self.params diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index 11809d91..404e7043 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -149,7 +149,7 @@ def assemble_keyword_arguments( kwargs = {} kwargs["survey"] = survey kwargs["sensitivity_path"] = sensitivity_path - kwargs["max_chunk_size"] = self.params.max_chunk_size + kwargs["max_chunk_size"] = self.params.compute.max_chunk_size kwargs["store_sensitivities"] = ( "forward_only" if self.params.forward_only diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 3b7ae6c4..d46f110f 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -129,7 +129,7 @@ def split_list(self): """ Number of splits for the data misfit to be distributed evenly among workers. """ - n_misfits = self.params.tile_spatial + n_misfits = self.params.compute.tile_spatial if isinstance(self.params.data_object, FEMSurvey): n_misfits *= len(self.params.data_object.channels) @@ -169,10 +169,12 @@ def data_misfit(self): self.models.active_cells, ) self.logger.write("Saving data to file...\n") - self.inversion_data.save_data() - self._data_misfit.multipliers = np.asarray( - self._data_misfit.multipliers, dtype=float - ) + + if isinstance(self.params, BaseInversionOptions): + self.inversion_data.save_data() + self._data_misfit.multipliers = np.asarray( + self._data_misfit.multipliers, dtype=float + ) if self.client: self.logger.write( @@ -593,7 +595,7 @@ def get_tiles(self): locations = self.inversion_data.locations tiles = tile_locations( locations, - self.params.tile_spatial, + self.params.compute.tile_spatial, method="kmeans", ) @@ -605,7 +607,7 @@ def configure_dask(self): if self.client: dconf.set(scheduler=self.client) else: - n_cpu = self.params.n_cpu + n_cpu = self.params.compute.n_cpu if n_cpu is None: n_cpu = int(multiprocessing.cpu_count()) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index e91e1369..40d0b838 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -233,6 +233,11 @@ def active_components(self) -> list[str]: """Return list of active components.""" return [k for k in self.components if getattr(self, f"{k}_channel_bool")] + @property + def data(self) -> InversionDataDict: + """Return dictionary of data components and associated values.""" + return dict.fromkeys(self.active_components) + class CoolingSceduleOptions(BaseModel): """ From c16f761b67e8e3e06ce181df7c3ec8a594dc28ba Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 3 Jun 2025 12:14:11 -0700 Subject: [PATCH 06/59] Fix model names. Gravity test runs --- .../components/factories/misfit_factory.py | 4 +- simpeg_drivers/components/models.py | 63 ++++---- simpeg_drivers/driver.py | 33 ++-- .../joint/joint_petrophysics/driver.py | 4 +- simpeg_drivers/options.py | 148 +++++++++--------- .../potential_fields/gravity/options.py | 4 +- tests/run_tests/driver_grav_test.py | 25 ++- 7 files changed, 143 insertions(+), 138 deletions(-) diff --git a/simpeg_drivers/components/factories/misfit_factory.py b/simpeg_drivers/components/factories/misfit_factory.py index 98177771..55e32493 100644 --- a/simpeg_drivers/components/factories/misfit_factory.py +++ b/simpeg_drivers/components/factories/misfit_factory.py @@ -140,7 +140,9 @@ def assemble_arguments( # pylint: disable=arguments-differ value_inactive=1e-8, ) - local_sim.sigma = proj * mapping * self.models.conductivity + local_sim.sigma = ( + proj * mapping * self.models.conductivity_model + ) simulation = meta.MetaSimulation( simulations=[local_sim], mappings=[mapping] diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index d12cc95b..9af39fab 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -32,11 +32,11 @@ MODEL_TYPES = [ - "starting", - "reference", + "starting_model", + "reference_model", "lower_bound", "upper_bound", - "conductivity", + "conductivity_model", "alpha_s", "length_scale_x", "length_scale_y", @@ -69,15 +69,21 @@ 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_sigma = self.driver.params.physical_property == "conductivity_model" is_vector = ( True if self.driver.params.inversion_type == "magnetic vector" else False ) - self._starting = InversionModel(driver, "starting", is_vector=is_vector) - self._reference = InversionModel(driver, "reference", is_vector=is_vector) + self._starting_model = InversionModel( + driver, "starting_model", is_vector=is_vector + ) + self._reference_model = InversionModel( + driver, "reference_model", is_vector=is_vector + ) self._lower_bound = InversionModel(driver, "lower_bound", is_vector=is_vector) self._upper_bound = InversionModel(driver, "upper_bound", is_vector=is_vector) - self._conductivity = InversionModel(driver, "conductivity", is_vector=is_vector) + self._conductivity_model = InversionModel( + driver, "conductivity_model", is_vector=is_vector + ) self._alpha_s = InversionModel(driver, "alpha_s", is_vector=is_vector) self._length_scale_x = InversionModel( driver, "length_scale_x", is_vector=is_vector @@ -149,11 +155,11 @@ def active_cells(self, active_cells: np.ndarray | NumericData | None): self._active_cells = active_cells @property - def starting(self) -> np.ndarray | None: - if self._starting.model is None: + def starting_model(self) -> np.ndarray | None: + if self._starting_model.model is None: return None - mstart = self._starting.model.copy() + mstart = self._starting_model.model.copy() if mstart is not None and self.is_sigma: if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": @@ -164,8 +170,8 @@ def starting(self) -> np.ndarray | None: return mstart @property - def reference(self) -> np.ndarray | None: - mref = self._reference.model + def reference_model(self) -> np.ndarray | None: + mref = self._reference_model.model if self.driver.params.forward_only: return mref @@ -244,11 +250,11 @@ def upper_bound(self) -> np.ndarray | None: return ubound @property - def conductivity(self) -> np.ndarray | None: - if self._conductivity.model is None: + def conductivity_model(self) -> np.ndarray | None: + if self._conductivity_model.model is None: return None - background_sigma = self._conductivity.model.copy() + background_sigma = self._conductivity_model.model.copy() if background_sigma is not None: if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": @@ -362,7 +368,7 @@ def permute_2_octree(self, name): Reorder model values stored in cell centers of a TreeMesh to their original octree mesh sorting. - :param: name: model type name ("starting", "reference", + :param: name: model type name ("starting_model", "reference_model", "lower_bound", or "upper_bound"). :return: Vector of model values reordered for octree mesh. @@ -416,7 +422,11 @@ def _initialize(self): are provided, then values are projected onto the direction of the inducing field. """ - if self.model_type in ["starting", "reference", "conductivity"]: + if self.model_type in [ + "starting_model", + "reference_model", + "conductivity_model", + ]: model = self._get(self.model_type) if self.is_vector: @@ -491,7 +501,7 @@ def save_model(self): return if self.is_vector: - if self.model_type in ["starting", "reference"]: + if self.model_type in ["starting_model", "reference_model"]: aid = cartesian2amplitude_dip_azimuth(remapped_model) aid[np.isnan(aid[:, 0]), 1:] = np.nan self.driver.inversion_mesh.entity.add_data( @@ -512,10 +522,10 @@ def save_model(self): model_type = self.model_type if ( - model_type == "conductivity" + model_type == "conductivity_model" and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" ): - model_type = "resistivity" + model_type = "resistivity_model" entity_type = None if isinstance(self._fetch_reference(self.model_type), NumericData): @@ -523,7 +533,7 @@ def save_model(self): self.driver.inversion_mesh.entity.add_data( { - f"{model_type}_model": { + f"{model_type}": { "values": remapped_model, "entity_type": entity_type, } @@ -535,7 +545,7 @@ def edit_ndv_model(self, model): for field in ["model", "inclination", "declination"]: model_type = self.model_type if ( - model_type == "conductivity" + model_type == "conductivity_model" and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" ): @@ -556,13 +566,10 @@ def edit_ndv_model(self, model): data_obj[0].values = values def _fetch_reference(self, name: str) -> NumericData | None: - if name in ["petrophysics", "starting", "reference", "conductivity"]: - name += "_model" - - value = getattr(self.driver.params, name, None) + value = getattr(self.driver.params.models, name, None) - if "reference" in name and value is None: - value = self._fetch_reference("starting") + if "reference_model" in name and value is None: + value = self._fetch_reference("starting_model") return value diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index d46f110f..ca998fbc 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -211,8 +211,11 @@ def inverse_problem(self): self.optimization, ) - if not self.params.forward_only and self.params.initial_beta: - self._inverse_problem.beta = self.params.initial_beta + if ( + not self.params.forward_only + and self.params.cooling_schedule.initial_beta + ): + self._inverse_problem.beta = self.params.cooling_schedule.initial_beta return self._inverse_problem @@ -295,12 +298,12 @@ def optimization(self): return optimization.ProjectedGNCG() self._optimization = optimization.ProjectedGNCG( - maxIter=self.params.max_global_iterations, + maxIter=self.params.optimization.max_global_iterations, lower=self.models.lower_bound, upper=self.models.upper_bound, - maxIterLS=self.params.max_line_search_iterations, - maxIterCG=self.params.max_cg_iterations, - tolCG=self.params.tol_cg, + maxIterLS=self.params.optimization.max_line_search_iterations, + maxIterCG=self.params.optimization.max_cg_iterations, + tolCG=self.params.optimization.tol_cg, stepOffBoundsFact=1e-8, LSshorten=0.25, ) @@ -401,12 +404,12 @@ def run(self): if self.params.forward_only: self.logger.write("Running the forward simulation ...\n") predicted = simpeg_inversion.invProb.get_dpred( - self.models.starting, None + self.models.starting_model, None ) else: # Run the inversion self.start_inversion_message() - simpeg_inversion.run(self.models.starting) + simpeg_inversion.run(self.models.starting_model) except np.core._exceptions._ArrayMemoryError as error: # pylint: disable=protected-access raise GeoAppsError( @@ -441,9 +444,11 @@ def run(self): def start_inversion_message(self): # SimPEG reports half phi_d, so we scale to match - has_chi_start = self.params.starting_chi_factor is not None + has_chi_start = self.params.irls.starting_chi_factor is not None chi_start = ( - self.params.starting_chi_factor if has_chi_start else self.params.chi_factor + self.params.irls.starting_chi_factor + if has_chi_start + else self.params.chi_factor ) if getattr(self, "drivers", None) is not None: # joint problem @@ -454,8 +459,8 @@ def start_inversion_message(self): data_count = self.inversion_data.n_data self.logger.write( - f"Target Misfit: {self.params.chi_factor * data_count:.2e} ({data_count} data " - f"with chifact = {self.params.chi_factor})\n" + f"Target Misfit: {self.params.cooling_schedule.chi_factor * data_count:.2e} ({data_count} data " + f"with chifact = {self.params.cooling_schedule.chi_factor})\n" ) self.logger.write( f"IRLS Start Misfit: {chi_start * data_count:.2e} ({data_count} data " @@ -491,7 +496,7 @@ def get_regularization(self): return BaseRegularization(mesh=self.inversion_mesh.mesh) reg_funcs = [] - is_rotated = self.params.gradient_rotation is not None + is_rotated = self.params.models.gradient_rotation is not None neighbors = None backward_mesh = None forward_mesh = None @@ -500,7 +505,7 @@ def get_regularization(self): forward_mesh or self.inversion_mesh.mesh, active_cells=self.models.active_cells if forward_mesh is None else None, mapping=mapping, - reference_model=self.models.reference, + reference_model=self.models.reference_model, ) if is_rotated and neighbors is None: diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 1e3ae3fd..59446a2f 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -169,7 +169,7 @@ def means(self) -> np.ndarray: """ means = [] for mapping in self.mapping: - model_vec = mapping @ self.models.reference + model_vec = mapping @ self.models.reference_model unit_mean = [] for uid in self.geo_units: unit_ind = self.models.petrophysics == uid @@ -216,7 +216,7 @@ def pgi_regularization(self): active_cells=self.models.active_cells, wiresmap=maps.Wires(*wires), maplist=maplist, - reference_model=self.models.reference, + reference_model=self.models.reference_model, ) return self._pgi_regularization diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 40d0b838..d53ba5f8 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -32,7 +32,14 @@ from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile from geoh5py.ui_json.annotations import Deprecated -from pydantic import BaseModel, ConfigDict, field_validator, model_validator +from pydantic import ( + AliasChoices, + BaseModel, + ConfigDict, + Field, + field_validator, + model_validator, +) from simpeg.utils.mat_utils import cartesian2amplitude_dip_azimuth import simpeg_drivers @@ -216,6 +223,68 @@ def _create_input_file_from_attributes(self) -> InputFile: return ifile +class ModelOptions(BaseModel): + """ + Base class for model parameters. + + :param reference_model: Reference model. + :param lower_bound: Lower bound. + :param upper_bound: Upper bound. + :param alpha_s: Scale on the reference model. + :param length_scale_x: Length scale along the u-direction. + :param length_scale_y: Length scale along the v-direction. + :param length_scale_z: Length scale along the z-direction. + :param gradient_rotation: Property group for gradient rotation angles. + """ + + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) + + starting_model: float | FloatData + reference_model: float | FloatData | None = None + conductivity_model: FloatData | None = None + lower_bound: float | FloatData | None = None + upper_bound: float | FloatData | None = None + s_norm: float | FloatData | None = 0.0 + x_norm: float | FloatData = 2.0 + y_norm: float | FloatData | None = 2.0 + z_norm: float | FloatData = 2.0 + alpha_s: float | FloatData | None = 1.0 + length_scale_x: float | FloatData = 1.0 + length_scale_y: float | FloatData | None = 1.0 + length_scale_z: float | FloatData = 1.0 + gradient_rotation: PropertyGroup | None = None + + @property + def gradient_direction(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 0] + + @property + def gradient_dip(self) -> np.ndarray: + if self.gradient_orientations is None: + return None + return self.gradient_orientations[:, 1] + + @property + def gradient_orientations(self) -> tuple(float, float): + """ + Direction and dip angles for rotated gradient regularization. + + Angles are in radians and are clockwise from North for direction + and clockwise from horizontal for dip. + """ + + if self.gradient_rotation is not None: + orientations = direction_and_dip(self.gradient_rotation) + + return np.deg2rad(orientations) + + return None + + class BaseForwardOptions(CoreOptions): """ Base class for forward parameters. @@ -227,6 +296,7 @@ class BaseForwardOptions(CoreOptions): forward_only: bool = True data_object: Points + models: ModelOptions @property def active_components(self) -> list[str]: @@ -365,10 +435,6 @@ class IRLSOptions(BaseModel): arbitrary_types_allowed=True, ) - s_norm: float | FloatData | None = 0.0 - x_norm: float | FloatData = 2.0 - y_norm: float | FloatData | None = 2.0 - z_norm: float | FloatData = 2.0 gradient_type: Deprecated = "total" max_irls_iterations: int = 25 starting_chi_factor: float = 1.0 @@ -405,25 +471,6 @@ def line_id_referenced(self): return self -class ModelOptions(BaseModel): - """ - Base class for model parameters. - - :param reference_model: Reference model. - :param lower_bound: Lower bound. - :param upper_bound: Upper bound. - """ - - model_config = ConfigDict( - arbitrary_types_allowed=True, - ) - - starting_model: float | FloatData - reference_model: float | FloatData | None = None - lower_bound: float | FloatData | None = None - upper_bound: float | FloatData | None = None - - class OptimizationOptions(BaseModel): """ Optimization parameters for inversion. @@ -446,56 +493,6 @@ class OptimizationOptions(BaseModel): tol_cg: float = 1e-4 -class RegularizationOptions(BaseModel): - """ - Regularization options for inversion. - - :param alpha_s: Scale on the reference model. - :param length_scale_x: Length scale along the u-direction. - :param length_scale_y: Length scale along the v-direction. - :param length_scale_z: Length scale along the z-direction. - :param gradient_rotation: Property group for gradient rotation angles. - """ - - model_config = ConfigDict( - arbitrary_types_allowed=True, - ) - - alpha_s: float | FloatData | None = 1.0 - length_scale_x: float | FloatData = 1.0 - length_scale_y: float | FloatData | None = 1.0 - length_scale_z: float | FloatData = 1.0 - gradient_rotation: PropertyGroup | None = None - - @property - def gradient_direction(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 0] - - @property - def gradient_dip(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 1] - - @property - def gradient_orientations(self) -> tuple(float, float): - """ - Direction and dip angles for rotated gradient regularization. - - Angles are in radians and are clockwise from North for direction - and clockwise from horizontal for dip. - """ - - if self.gradient_rotation is not None: - orientations = direction_and_dip(self.gradient_rotation) - - return np.deg2rad(orientations) - - return None - - class BaseInversionOptions(CoreOptions): """ Base class for inversion parameters. @@ -530,8 +527,7 @@ class BaseInversionOptions(CoreOptions): conda_environment: str = "simpeg_drivers" data_object: Points - - regularization: RegularizationOptions = RegularizationOptions() + models: ModelOptions irls: IRLSOptions = IRLSOptions() directives: DirectiveOptions = DirectiveOptions() cooling_schedule: CoolingSceduleOptions = CoolingSceduleOptions() diff --git a/simpeg_drivers/potential_fields/gravity/options.py b/simpeg_drivers/potential_fields/gravity/options.py index b95f850e..177231bf 100644 --- a/simpeg_drivers/potential_fields/gravity/options.py +++ b/simpeg_drivers/potential_fields/gravity/options.py @@ -41,7 +41,7 @@ class GravityForwardOptions(BaseForwardOptions): title: str = "Gravity Forward" physical_property: str = "density" inversion_type: str = "gravity" - workspace_geoh5: Path | None = None + gx_channel_bool: bool = False gy_channel_bool: bool = False gz_channel_bool: bool = True @@ -84,7 +84,7 @@ class GravityInversionOptions(BaseInversionOptions): title: str = "Gravity Inversion" physical_property: str = "density" inversion_type: str = "gravity" - workspace_geoh5: Path | None = None + gx_channel: FloatData | None = None gy_channel: FloatData | None = None gz_channel: FloatData | None = None diff --git a/tests/run_tests/driver_grav_test.py b/tests/run_tests/driver_grav_test.py index 83a6c86a..5508b02c 100644 --- a/tests/run_tests/driver_grav_test.py +++ b/tests/run_tests/driver_grav_test.py @@ -18,7 +18,7 @@ from geoh5py.workspace import Workspace from pytest import raises -from simpeg_drivers.options import ActiveCellsOptions +from simpeg_drivers.options import ActiveCellsOptions, ModelOptions from simpeg_drivers.potential_fields import ( GravityForwardOptions, GravityInversionOptions, @@ -33,7 +33,6 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. - target_run = {"data_norm": 0.0028055269276044915, "phi_d": 8.32e-05, "phi_m": 0.0038} @@ -43,7 +42,7 @@ def test_gravity_fwr_run( refinement=(2,), ): # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( + geoh5, mesh, model, survey, topography = setup_inversion_workspace( tmp_path, background=0.0, anomaly=0.75, @@ -54,11 +53,9 @@ def test_gravity_fwr_run( flatten=False, ) - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, - mesh=model.parent, - active_cells=active_cells, + mesh=mesh, topography_object=topography, data_object=survey, starting_model=model, @@ -79,11 +76,10 @@ def test_array_too_large_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=gz.parent, gz_channel=gz, gz_uncertainty=1e-4, @@ -133,14 +129,10 @@ def test_gravity_run( gz.values = values # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, data_object=gz.parent, - starting_model=1e-4, - reference_model=0.0, s_norm=0.0, x_norm=gradient_norms, y_norm=gradient_norms, @@ -152,6 +144,9 @@ def test_gravity_run( max_global_iterations=max_iterations, initial_beta_ratio=1e-2, percentile=100, + starting_model=1e-4, + topography_object=topography, + reference_model=0.0, store_sensitivities="ram", save_sensitivities=True, ) From 652cc9249c49204ca62145f917fb28b75d85aa88 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 3 Jun 2025 13:43:22 -0700 Subject: [PATCH 07/59] Fix mag --- simpeg_drivers/potential_fields/magnetic_scalar/options.py | 3 +++ tests/run_tests/driver_mag_test.py | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/potential_fields/magnetic_scalar/options.py b/simpeg_drivers/potential_fields/magnetic_scalar/options.py index 7e202416..3db6dfa9 100644 --- a/simpeg_drivers/potential_fields/magnetic_scalar/options.py +++ b/simpeg_drivers/potential_fields/magnetic_scalar/options.py @@ -55,6 +55,9 @@ class MagneticForwardOptions(BaseForwardOptions): byy_channel_bool: bool = False byz_channel_bool: bool = False bzz_channel_bool: bool = False + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData class MagneticInversionOptions(BaseInversionOptions): diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py index 20dff4dd..bb78fded 100644 --- a/tests/run_tests/driver_mag_test.py +++ b/tests/run_tests/driver_mag_test.py @@ -53,7 +53,7 @@ def test_susceptibility_fwr_run( ) inducing_field = (49999.8, 90.0, 0.0) active_cells = ActiveCellsOptions(topography_object=topography) - params = MagneticForwardOptions( + params = MagneticForwardOptions.build( forward_only=True, geoh5=geoh5, mesh=model.parent, @@ -94,7 +94,7 @@ def test_susceptibility_run( # Run the inverse active_cells = ActiveCellsOptions(active_model=active_cells) - params = MagneticInversionOptions( + params = MagneticInversionOptions.build( geoh5=geoh5, mesh=mesh, active_cells=active_cells, From aa8ea50265ec9d4c20231652c0c9a0ddcc0a4ad3 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 4 Jun 2025 09:47:04 -0700 Subject: [PATCH 08/59] Bring AliasChoice to known names change --- simpeg_drivers/options.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index d53ba5f8..347bba0e 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -322,8 +322,12 @@ class CoolingSceduleOptions(BaseModel): """ chi_factor: float = 1.0 - cooling_factor: float = 2.0 - cooling_rate: float = 1.0 + cooling_factor: float = Field( + 2.0, validation_alias=AliasChoices("cooling_factor", "coolingFactor") + ) + cooling_rate: int = Field( + 1, validation_alias=AliasChoices("cooling_rate", "coolingRate") + ) initial_beta: float | None = None initial_beta_ratio: float | None = 100.0 @@ -439,8 +443,12 @@ class IRLSOptions(BaseModel): max_irls_iterations: int = 25 starting_chi_factor: float = 1.0 beta_tol: float = 0.5 - percentile: float = 95.0 - epsilon_cooling_factor: float = 1.2 + epsilon_cooling_factor: float = Field( + 1.2, validation_alias=AliasChoices("epsilon_cooling_factor", "coolEpsFact") + ) + percentile: float = Field( + 95, validation_alias=AliasChoices("percentile", "prctile") + ) class LineSelectionOptions(BaseModel): From 4f71fc7d088524d0057191af00a6ff3e34134613 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 4 Jun 2025 09:50:21 -0700 Subject: [PATCH 09/59] Bring Deprecated Annotation from GEOPY-2234 --- simpeg_drivers/options.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 347bba0e..d55ebe5b 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -14,7 +14,7 @@ from enum import Enum from logging import getLogger from pathlib import Path -from typing import ClassVar, TypeAlias +from typing import Annotated, Any, ClassVar, TypeAlias import numpy as np from geoapps_utils.driver.data import BaseData @@ -31,10 +31,10 @@ from geoh5py.objects import DrapeModel, Grid2D, Octree, Points from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile -from geoh5py.ui_json.annotations import Deprecated from pydantic import ( AliasChoices, BaseModel, + BeforeValidator, ConfigDict, Field, field_validator, @@ -53,6 +53,22 @@ ) +def deprecate_warning(value, info): + """Issue deprecation warning.""" + logger.warning( + "Deprecated field '%s' will be ignored. Results may be affected.", + info.field_name, + ) + return value + + +Deprecated = Annotated[ + Any, + Field(default=None, exclude=True), + BeforeValidator(deprecate_warning), +] + + class ActiveCellsOptions(BaseModel): """ Active cells data as a topography surface or 3d model. From 2de5f7806a5353e356bec7e27da012f997ad23af Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 4 Jun 2025 11:23:57 -0700 Subject: [PATCH 10/59] Add test for alias in options --- tests/uijson_test.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/tests/uijson_test.py b/tests/uijson_test.py index 7f76b0c8..67ccced2 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -15,6 +15,7 @@ import numpy as np import pytest +from geoapps_utils.driver.data import BaseData from geoh5py import Workspace from geoh5py.ui_json import InputFile from geoh5py.ui_json.annotations import Deprecated @@ -24,7 +25,7 @@ import simpeg_drivers from simpeg_drivers.driver import InversionDriver from simpeg_drivers.line_sweep.driver import LineSweepDriver -from simpeg_drivers.options import ActiveCellsOptions +from simpeg_drivers.options import ActiveCellsOptions, IRLSOptions from simpeg_drivers.potential_fields.gravity.options import GravityInversionOptions from simpeg_drivers.potential_fields.gravity.uijson import GravityInversionUIJson from simpeg_drivers.uijson import SimPEGDriversUIJson @@ -175,7 +176,31 @@ class MyUIJson(SimPEGDriversUIJson): ) == SimPEGDriversUIJson.comparable_version(simpeg_drivers.__version__) -def test_deprecations(caplog, simpeg_uijson_factory): +def test_alias_options(): + geoh5 = Workspace() + + class Options(BaseData): + irls: IRLSOptions = IRLSOptions() + name: str = "My Inversion" + + options = Options.build(geoh5=geoh5, coolEpsFact=0.1) + assert options.irls.epsilon_cooling_factor == 0.1 + + +def test_deprecated_options(caplog): + geoh5 = Workspace() + + class Options(BaseData): + irls: IRLSOptions = IRLSOptions() + name: str = "My Inversion" + + with caplog.at_level(logging.WARNING): + Options.build(geoh5=geoh5, gradient_type="abc") + + assert "Deprecated field 'gradient_type' will be ignored" in caplog.text + + +def test_uijson_deprecations(caplog, simpeg_uijson_factory): class MyUIJson(SimPEGDriversUIJson): my_param: Deprecated @@ -184,7 +209,7 @@ class MyUIJson(SimPEGDriversUIJson): assert "Skipping deprecated field: my_param." in caplog.text -def test_pydantic_deprecation(simpeg_uijson_factory): +def test_pydantic_uijson_deprecation(simpeg_uijson_factory): class MyUIJson(SimPEGDriversUIJson): my_param: str = Field(deprecated="Use my_param2 instead.", exclude=True) @@ -192,7 +217,7 @@ class MyUIJson(SimPEGDriversUIJson): assert "my_param" not in uijson.model_dump() -def test_alias(simpeg_uijson_factory): +def test_uijson_alias(simpeg_uijson_factory): class MyUIJson(SimPEGDriversUIJson): my_param: str = Field(validation_alias=AliasChoices("my_param", "myParam")) From ca24d06b0b054e8aa68c169cc54827c938170495 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 4 Jun 2025 11:29:23 -0700 Subject: [PATCH 11/59] IMprove deprecated annotation --- simpeg_drivers/options.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index d55ebe5b..9c5b771a 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -64,7 +64,7 @@ def deprecate_warning(value, info): Deprecated = Annotated[ Any, - Field(default=None, exclude=True), + Field(default=None), BeforeValidator(deprecate_warning), ] @@ -455,7 +455,7 @@ class IRLSOptions(BaseModel): arbitrary_types_allowed=True, ) - gradient_type: Deprecated = "total" + gradient_type: Deprecated max_irls_iterations: int = 25 starting_chi_factor: float = 1.0 beta_tol: float = 0.5 From 2cc5955926eeb8ccc67449834f1b9c474dd10490 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 09:39:58 -0700 Subject: [PATCH 12/59] Update locks --- .../py-3.10-linux-64-dev.conda.lock.yml | 22 +- environments/py-3.10-linux-64.conda.lock.yml | 12 +- .../py-3.10-win-64-dev.conda.lock.yml | 24 +- environments/py-3.10-win-64.conda.lock.yml | 12 +- .../py-3.11-linux-64-dev.conda.lock.yml | 22 +- environments/py-3.11-linux-64.conda.lock.yml | 12 +- .../py-3.11-win-64-dev.conda.lock.yml | 24 +- environments/py-3.11-win-64.conda.lock.yml | 12 +- .../py-3.12-linux-64-dev.conda.lock.yml | 22 +- environments/py-3.12-linux-64.conda.lock.yml | 12 +- .../py-3.12-win-64-dev.conda.lock.yml | 24 +- environments/py-3.12-win-64.conda.lock.yml | 12 +- py-3.10.conda-lock.yml | 210 +++++++++--------- py-3.11.conda-lock.yml | 210 +++++++++--------- py-3.12.conda-lock.yml | 210 +++++++++--------- 15 files changed, 423 insertions(+), 417 deletions(-) diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml index bde1b9c2..50aab355 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py310ha75aee5_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -77,7 +77,7 @@ dependencies: - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 - - ipython=8.36.0=pyh907856f_0 + - ipython=8.37.0=pyh8f84b5b_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipywidgets=7.8.5=pyhd8ed1ab_0 - isoduration=20.11.0=pyhd8ed1ab_1 @@ -102,7 +102,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.7=py310h3788b33_0 - krb5=1.21.3=h659f571_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -196,7 +196,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py310ha75aee5_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -214,9 +214,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.10.17=hd6af730_0_cpython + - python=3.10.18=hd6af730_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -236,7 +236,7 @@ dependencies: - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -276,9 +276,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -302,7 +302,7 @@ dependencies: - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index 522d4586..32e9ff2e 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -55,7 +55,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -117,7 +117,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - python=3.10.17=hd6af730_0_cpython + - python=3.10.18=hd6af730_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py310h6410a28_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -127,7 +127,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -137,9 +137,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py310ha75aee5_0 - urllib3=2.4.0=pyhd8ed1ab_0 @@ -154,7 +154,7 @@ dependencies: - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml index 0564d90a..3a62b5af 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py310ha8f682b_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -40,7 +40,7 @@ dependencies: - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py310hc19bc0b_0 - coverage=7.8.2=py310h38315fa_0 - - cpython=3.10.17=py310hd8ed1ab_0 + - cpython=3.10.18=py310hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py310ha8f682b_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -77,7 +77,7 @@ dependencies: - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 - ipykernel=6.29.5=pyh4bbf305_0 - - ipython=8.36.0=pyh9ab4c32_0 + - ipython=8.37.0=pyha7b4d00_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipywidgets=7.8.5=pyhd8ed1ab_0 - isoduration=20.11.0=pyhd8ed1ab_1 @@ -102,7 +102,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - kiwisolver=1.4.7=py310hc19bc0b_0 - krb5=1.21.3=hdf4eb48_0 - latexcodec=2.0.1=pyh9f0ad1d_0 @@ -114,7 +114,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -180,7 +180,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py310ha8f682b_0 - pthread-stubs=0.4=h0e40799_1002 @@ -197,9 +197,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.10.17=h8c5b53a_0_cpython + - python=3.10.18=h8c5b53a_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -220,7 +220,7 @@ dependencies: - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -260,9 +260,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -292,7 +292,7 @@ dependencies: - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index 0c790229..66554eda 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -52,7 +52,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -101,7 +101,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - python=3.10.17=h8c5b53a_0_cpython + - python=3.10.18=h8c5b53a_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py310hb64895d_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -110,7 +110,7 @@ dependencies: - pyyaml=6.0.2=py310h38315fa_2 - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -120,9 +120,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 - unicodedata2=16.0.0=py310ha8f682b_0 @@ -142,7 +142,7 @@ dependencies: - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index e0a57db3..a5de704c 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py311h9ecbd09_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -78,7 +78,7 @@ dependencies: - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 - - ipython=9.2.0=pyhfb0248b_0 + - ipython=9.3.0=pyhfa0c392_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 - ipywidgets=7.8.5=pyhd8ed1ab_0 @@ -104,7 +104,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.7=py311hd18a35c_0 - krb5=1.21.3=h659f571_0 @@ -118,7 +118,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -198,7 +198,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py311h9ecbd09_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -216,9 +216,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.11.12=h9e4cc4f_0_cpython + - python=3.11.13=h9e4cc4f_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -238,7 +238,7 @@ dependencies: - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -278,9 +278,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -305,7 +305,7 @@ dependencies: - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index adc54e39..cf695d09 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -118,7 +118,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - python=3.11.12=h9e4cc4f_0_cpython + - python=3.11.13=h9e4cc4f_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py311h4b558b0_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -128,7 +128,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -138,9 +138,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py311h9ecbd09_0 - urllib3=2.4.0=pyhd8ed1ab_0 @@ -156,7 +156,7 @@ dependencies: - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index f5b676b4..411e62a3 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py311he736701_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -40,7 +40,7 @@ dependencies: - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py311h3257749_0 - coverage=7.8.2=py311h5082efb_0 - - cpython=3.11.12=py311hd8ed1ab_0 + - cpython=3.11.13=py311hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py311he736701_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -78,7 +78,7 @@ dependencies: - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 - ipykernel=6.29.5=pyh4bbf305_0 - - ipython=9.2.0=pyhca29cf9_0 + - ipython=9.3.0=pyh6be1c34_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 - ipywidgets=7.8.5=pyhd8ed1ab_0 @@ -104,7 +104,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - kiwisolver=1.4.7=py311h3257749_0 - krb5=1.21.3=hdf4eb48_0 - latexcodec=2.0.1=pyh9f0ad1d_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -182,7 +182,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py311he736701_0 - pthread-stubs=0.4=h0e40799_1002 @@ -199,9 +199,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.11.12=h3f84c4b_0_cpython + - python=3.11.13=h3f84c4b_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -222,7 +222,7 @@ dependencies: - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -262,9 +262,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -295,7 +295,7 @@ dependencies: - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index a565e61a..5a326a4d 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -53,7 +53,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -102,7 +102,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - python=3.11.12=h3f84c4b_0_cpython + - python=3.11.13=h3f84c4b_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py311h5bfbc98_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -111,7 +111,7 @@ dependencies: - pyyaml=6.0.2=py311h5082efb_2 - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -121,9 +121,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 - unicodedata2=16.0.0=py311he736701_0 @@ -144,7 +144,7 @@ dependencies: - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 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 55398d0c..d8c710ba 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py312h66e93f0_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -78,7 +78,7 @@ dependencies: - importlib_resources=6.5.2=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_1 - ipykernel=6.29.5=pyh3099207_0 - - ipython=9.2.0=pyhfb0248b_0 + - ipython=9.3.0=pyhfa0c392_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 - ipywidgets=7.8.5=pyhd8ed1ab_0 @@ -104,7 +104,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.8=py312h84d6215_0 - krb5=1.21.3=h659f571_0 @@ -118,7 +118,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -198,7 +198,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py312h66e93f0_0 - pthread-stubs=0.4=hb9d3cd8_1002 @@ -216,9 +216,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.12.10=h9e4cc4f_0_cpython + - python=3.12.11=h9e4cc4f_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -238,7 +238,7 @@ dependencies: - scikit-learn=1.4.2=py312h1fcc3ea_1 - scipy=1.14.1=py312h62794b6_2 - send2trash=1.8.3=pyh0d859eb_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -278,9 +278,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -305,7 +305,7 @@ dependencies: - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index dca98fa6..a384f31a 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -56,7 +56,7 @@ dependencies: - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=31_h372d94f_mkl - - libcurl=8.14.0=h332b0f4_0 + - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libedit=3.1.20250104=pl5321h7949ede_0 @@ -118,7 +118,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyha55dd90_7 - - python=3.12.10=h9e4cc4f_0_cpython + - python=3.12.11=h9e4cc4f_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py312h6ad3ee3_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -128,7 +128,7 @@ dependencies: - readline=8.2=h8c095d6_2 - scikit-learn=1.4.2=py312h1fcc3ea_1 - scipy=1.14.1=py312h62794b6_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=hceb3a55_1 @@ -138,9 +138,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h66e93f0_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - unicodedata2=16.0.0=py312h66e93f0_0 - urllib3=2.4.0=pyhd8ed1ab_0 @@ -156,7 +156,7 @@ dependencies: - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 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 45bf9920..f7bfde23 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -11,7 +11,7 @@ dependencies: - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.7.0=pyhd8ed1ab_1 - anyio=4.9.0=pyh29332c3_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py312h4389bb4_5 - arrow=1.3.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 @@ -40,7 +40,7 @@ dependencies: - comm=0.2.2=pyhd8ed1ab_1 - contourpy=1.3.2=py312hd5eb7cc_0 - coverage=7.8.2=py312h31fea79_0 - - cpython=3.12.10=py312hd8ed1ab_0 + - cpython=3.12.11=py312hd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py312h4389bb4_0 - dask-core=2025.3.0=pyhd8ed1ab_0 @@ -78,7 +78,7 @@ dependencies: - iniconfig=2.0.0=pyhd8ed1ab_1 - intel-openmp=2024.2.1=h57928b3_1083 - ipykernel=6.29.5=pyh4bbf305_0 - - ipython=9.2.0=pyhca29cf9_0 + - ipython=9.3.0=pyh6be1c34_0 - ipython_genutils=0.2.0=pyhd8ed1ab_2 - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 - ipywidgets=7.8.5=pyhd8ed1ab_0 @@ -104,7 +104,7 @@ dependencies: - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.27.3=pyhd8ed1ab_1 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 - - jupytext=1.17.1=pyh80e38bb_0 + - jupytext=1.17.2=pyh80e38bb_0 - kiwisolver=1.4.8=py312hc790b64_0 - krb5=1.21.3=hdf4eb48_0 - latexcodec=2.0.1=pyh9f0ad1d_0 @@ -116,7 +116,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -182,7 +182,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 - platformdirs=4.3.8=pyhe01879c_0 - pluggy=1.6.0=pyhd8ed1ab_0 - - prometheus_client=0.22.0=pyhd8ed1ab_0 + - prometheus_client=0.22.1=pyhd8ed1ab_0 - prompt-toolkit=3.0.51=pyha770c72_0 - psutil=7.0.0=py312h4389bb4_0 - pthread-stubs=0.4=h0e40799_1002 @@ -199,9 +199,9 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - pytest=8.3.5=pyhd8ed1ab_0 + - pytest=8.4.0=pyhd8ed1ab_0 - pytest-cov=6.1.1=pyhd8ed1ab_0 - - python=3.12.10=h3f84c4b_0_cpython + - python=3.12.11=h3f84c4b_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 @@ -222,7 +222,7 @@ dependencies: - scikit-learn=1.4.2=py312h816cc57_1 - scipy=1.14.1=py312h337df96_2 - send2trash=1.8.3=pyh5737063_1 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sniffio=1.3.1=pyhd8ed1ab_1 - snowballstemmer=3.0.1=pyhd8ed1ab_0 @@ -262,9 +262,9 @@ dependencies: - tqdm=4.67.1=pyhd8ed1ab_1 - traitlets=5.14.3=pyhd8ed1ab_1 - types-python-dateutil=2.9.0.20250516=pyhd8ed1ab_0 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - typing_utils=0.1.0=pyhd8ed1ab_1 - tzdata=2025b=h78e105d_0 - uc-micro-py=1.0.3=pyhd8ed1ab_1 @@ -295,7 +295,7 @@ dependencies: - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index cbbd416c..30311e03 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -53,7 +53,7 @@ dependencies: - libbrotlidec=1.1.0=h2466b09_2 - libbrotlienc=1.1.0=h2466b09_2 - libcblas=3.9.0=31_h5e41251_mkl - - libcurl=8.14.0=h88aaa65_0 + - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 - libdlf=0.3.0=pyhd8ed1ab_1 - libexpat=2.7.0=he0c23c2_0 @@ -102,7 +102,7 @@ dependencies: - pymatsolver=0.3.1=pyh48887ae_201 - pyparsing=3.2.3=pyhd8ed1ab_1 - pysocks=1.7.1=pyh09c184e_7 - - python=3.12.10=h3f84c4b_0_cpython + - python=3.12.11=h3f84c4b_0_cpython - python-dateutil=2.9.0.post0=pyhff2d567_1 - python-mumps=0.0.3=py312h8095395_0 - python-tzdata=2025.2=pyhd8ed1ab_0 @@ -111,7 +111,7 @@ dependencies: - pyyaml=6.0.2=py312h31fea79_2 - scikit-learn=1.4.2=py312h816cc57_1 - scipy=1.14.1=py312h337df96_2 - - setuptools=80.8.0=pyhff2d567_0 + - setuptools=80.9.0=pyhff2d567_0 - six=1.17.0=pyhd8ed1ab_0 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - tbb=2021.13.0=h62715c5_1 @@ -121,9 +121,9 @@ dependencies: - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h4389bb4_0 - tqdm=4.67.1=pyhd8ed1ab_1 - - typing-extensions=4.13.2=h0e9735f_0 + - typing-extensions=4.14.0=h32cad80_0 - typing-inspection=0.4.1=pyhd8ed1ab_0 - - typing_extensions=4.13.2=pyh29332c3_0 + - typing_extensions=4.14.0=pyhe01879c_0 - tzdata=2025b=h78e105d_0 - ucrt=10.0.22621.0=h57928b3_1 - unicodedata2=16.0.0=py312h4389bb4_0 @@ -144,7 +144,7 @@ dependencies: - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index 47336b15..af166023 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -163,31 +163,31 @@ package: category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: linux-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: win-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi-bindings @@ -984,16 +984,16 @@ package: category: dev optional: true - name: cpython - version: 3.10.17 + version: 3.10.18 manager: conda platform: win-64 dependencies: python: '>=3.10,<3.11.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda hash: - md5: e2b81369f0473107784f8b7da8e6a8e9 - sha256: 6944d47f2bf3c443d5af855ee0c77156da1b90c6f0e79cedc3b934bcd2794d64 + md5: 7004cb3fa62ad44d1cb70f3b080dfc8f + sha256: 44329b37f854a90b4b9bcf500c25c13dce91180eca26a9272f6a254725d2db8c category: dev optional: true - name: cycler @@ -2063,7 +2063,7 @@ package: category: dev optional: true - name: ipython - version: 8.36.0 + version: 8.37.0 manager: conda platform: linux-64 dependencies: @@ -2080,14 +2080,14 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-8.36.0-pyh907856f_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-8.37.0-pyh8f84b5b_0.conda hash: - md5: 886e40ae1c3851b6d348d4cd41e5de39 - sha256: 21e33e5c779227df52d443bf17e3f470c295a5b2ede5501e5e8eb90b9747f82e + md5: 177cfa19fe3d74c87a8889286dc64090 + sha256: e43fa762183b49c3c3b811d41259e94bb14b7bff4a239b747ef4e1c6bbe2702d category: dev optional: true - name: ipython - version: 8.36.0 + version: 8.37.0 manager: conda platform: win-64 dependencies: @@ -2104,10 +2104,10 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-8.36.0-pyh9ab4c32_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-8.37.0-pyha7b4d00_0.conda hash: - md5: 29ed2705fd3f71927cdde35874f29ae8 - sha256: 8ee58de26571788587c2b58bae8fdd11fdb9a089af52fe5253424d1a8c907998 + md5: 2ffea44095ca39b38b67599e8091bca3 + sha256: 4812e69a1c9d6d43746fa7e8efaf9127d257508249e7192e68cd163511a751ee category: dev optional: true - name: ipython_genutils @@ -2919,7 +2919,7 @@ package: category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: linux-64 dependencies: @@ -2930,14 +2930,14 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: win-64 dependencies: @@ -2948,10 +2948,10 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: keyutils @@ -3287,7 +3287,7 @@ package: category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: linux-64 dependencies: @@ -3299,14 +3299,14 @@ package: libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda hash: - md5: d1738cf06503218acee63669029fd8e8 - sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 + md5: 45f6713cb00f124af300342512219182 + sha256: b6c5cf340a4f80d70d64b3a29a7d9885a5918d16a5cb952022820e6d3e79dc8b category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: win-64 dependencies: @@ -3316,10 +3316,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.1-h88aaa65_0.conda hash: - md5: ae69647c79ac790aae707e6f3977152b - sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a + md5: 836b9c08f34d2017dbcaec907c6a1138 + sha256: b2cface2cf35d8522289df7fffc14370596db6f6dc481cc1b6ca313faeac19d8 category: main optional: false - name: libdeflate @@ -5425,27 +5425,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prompt-toolkit @@ -5950,39 +5950,41 @@ package: category: main optional: false - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: linux-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: win-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest-cov @@ -6016,7 +6018,7 @@ package: category: dev optional: true - name: python - version: 3.10.17 + version: 3.10.18 manager: conda platform: linux-64 dependencies: @@ -6028,7 +6030,7 @@ package: libgcc: '>=13' liblzma: '>=5.8.1,<6.0a0' libnsl: '>=2.0.1,<2.1.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libuuid: '>=2.38.1,<3.0a0' libxcrypt: '>=4.4.36' libzlib: '>=1.3.1,<2.0a0' @@ -6038,14 +6040,14 @@ package: readline: '>=8.2,<9.0a0' tk: '>=8.6.13,<8.7.0a0' tzdata: '' - url: https://repo.prefix.dev/conda-forge/linux-64/python-3.10.17-hd6af730_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda hash: - md5: 7bb89638dae9ce1b8e051d0b721e83c2 - sha256: 0ae32507817402bfad08fbf0f4a9b5ae26859d5390b98bc939da85fd0bd4239f + md5: 4ea0c77cdcb0b81813a0436b162d7316 + sha256: 4111e5504fa4f4fb431d3a73fa606daccaf23a5a1da0f17a30db70ffad9336a7 category: main optional: false - name: python - version: 3.10.17 + version: 3.10.18 manager: conda platform: win-64 dependencies: @@ -6053,7 +6055,7 @@ package: libexpat: '>=2.7.0,<3.0a0' libffi: '>=3.4,<4.0a0' liblzma: '>=5.8.1,<6.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' pip: '' @@ -6062,10 +6064,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/python-3.10.17-h8c5b53a_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda hash: - md5: 0c59918f056ab2e9c7bb45970d32b2ea - sha256: 071303a9bcbba4d79ab1ca61f34ec9f4ad65bc15d897828f5006ef9507094557 + md5: f1775dab55c8a073ebd024bfb2f689c1 + sha256: 548f9e542e72925d595c66191ffd17056f7c0029b7181e2d99dbef47e4f3f646 category: main optional: false - name: python-dateutil @@ -6647,27 +6649,27 @@ package: category: dev optional: true - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: six @@ -7735,27 +7737,27 @@ package: category: dev optional: true - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-inspection @@ -7785,27 +7787,27 @@ package: category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_utils @@ -8469,12 +8471,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoapps-utils @@ -8486,12 +8488,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoh5py diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index df71530d..225b51c4 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -163,31 +163,31 @@ package: category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: linux-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: win-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi-bindings @@ -982,16 +982,16 @@ package: category: dev optional: true - name: cpython - version: 3.11.12 + version: 3.11.13 manager: conda platform: win-64 dependencies: python: '>=3.11,<3.12.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.11.12-py311hd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.11.13-py311hd8ed1ab_0.conda hash: - md5: 451718359f1658c6819d8665f82585ab - sha256: 91e8da449682e37e326a560aa3575ee0f32ab697119e4cf4a76fd68af61fc1a0 + md5: 4666fd336f6d48d866a58490684704cd + sha256: ab70477f5cfb60961ba27d84a4c933a24705ac4b1736d8f3da14858e95bbfa7a category: dev optional: true - name: cycler @@ -2087,7 +2087,7 @@ package: category: dev optional: true - name: ipython - version: 9.2.0 + version: 9.3.0 manager: conda platform: linux-64 dependencies: @@ -2105,14 +2105,14 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.3.0-pyhfa0c392_0.conda hash: - md5: 7330ee1244209cfebfb23d828dd9aae5 - sha256: 539d003c379c22a71df1eb76cd4167a3e2d59f45e6dbc3416c45619f4c1381fb + md5: 270dbfb30fe759b39ce0c9fdbcd7be10 + sha256: ee5d526cba0c0a5981cbcbcadc37a76d257627a904ed2cd2db45821735c93ebd category: dev optional: true - name: ipython - version: 9.2.0 + version: 9.3.0 manager: conda platform: win-64 dependencies: @@ -2130,10 +2130,10 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.2.0-pyhca29cf9_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.3.0-pyh6be1c34_0.conda hash: - md5: a7b419c1d0ae931d86cd9cab158f698e - sha256: 83e4cfdcf09c1273ec31548aacf7f81076dc4245548e78ac3b47d1da361da03b + md5: 73e4ba4c8247f744be670f4da4f132e2 + sha256: b6189de4e9f3d007a11e6e1df023c2bb73cf1864f63ca154c5ff8f0cdf601a50 category: dev optional: true - name: ipython_genutils @@ -2971,7 +2971,7 @@ package: category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: linux-64 dependencies: @@ -2982,14 +2982,14 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: win-64 dependencies: @@ -3000,10 +3000,10 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: keyutils @@ -3339,7 +3339,7 @@ package: category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: linux-64 dependencies: @@ -3351,14 +3351,14 @@ package: libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda hash: - md5: d1738cf06503218acee63669029fd8e8 - sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 + md5: 45f6713cb00f124af300342512219182 + sha256: b6c5cf340a4f80d70d64b3a29a7d9885a5918d16a5cb952022820e6d3e79dc8b category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: win-64 dependencies: @@ -3368,10 +3368,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.1-h88aaa65_0.conda hash: - md5: ae69647c79ac790aae707e6f3977152b - sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a + md5: 836b9c08f34d2017dbcaec907c6a1138 + sha256: b2cface2cf35d8522289df7fffc14370596db6f6dc481cc1b6ca313faeac19d8 category: main optional: false - name: libdeflate @@ -5479,27 +5479,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prompt-toolkit @@ -6004,39 +6004,41 @@ package: category: main optional: false - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: linux-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: win-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest-cov @@ -6070,7 +6072,7 @@ package: category: dev optional: true - name: python - version: 3.11.12 + version: 3.11.13 manager: conda platform: linux-64 dependencies: @@ -6082,7 +6084,7 @@ package: libgcc: '>=13' liblzma: '>=5.8.1,<6.0a0' libnsl: '>=2.0.1,<2.1.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libuuid: '>=2.38.1,<3.0a0' libxcrypt: '>=4.4.36' libzlib: '>=1.3.1,<2.0a0' @@ -6092,14 +6094,14 @@ package: readline: '>=8.2,<9.0a0' tk: '>=8.6.13,<8.7.0a0' tzdata: '' - url: https://repo.prefix.dev/conda-forge/linux-64/python-3.11.12-h9e4cc4f_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/linux-64/python-3.11.13-h9e4cc4f_0_cpython.conda hash: - md5: b61d4fbf583b8393d9d00ec106ad3658 - sha256: 028a03968eb101a681fa4966b2c52e93c8db1e934861f8d108224f51ba2c1bc9 + md5: 8c399445b6dc73eab839659e6c7b5ad1 + sha256: 9979a7d4621049388892489267139f1aa629b10c26601ba5dce96afc2b1551d4 category: main optional: false - name: python - version: 3.11.12 + version: 3.11.13 manager: conda platform: win-64 dependencies: @@ -6107,7 +6109,7 @@ package: libexpat: '>=2.7.0,<3.0a0' libffi: '>=3.4.6,<3.5.0a0' liblzma: '>=5.8.1,<6.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' pip: '' @@ -6116,10 +6118,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/python-3.11.12-h3f84c4b_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/win-64/python-3.11.13-h3f84c4b_0_cpython.conda hash: - md5: c1f91331274f591340e2f50e737dfbe9 - sha256: 41e1c07eecff9436b9bb27724822229b2da6073af8461ede6c81b508c0677c56 + md5: bedbb6f7bb654839719cd528f9b298ad + sha256: 723dbca1384f30bd2070f77dd83eefd0e8d7e4dda96ac3332fbf8fe5573a8abb category: main optional: false - name: python-dateutil @@ -6701,27 +6703,27 @@ package: category: dev optional: true - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: six @@ -7789,27 +7791,27 @@ package: category: dev optional: true - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-inspection @@ -7839,27 +7841,27 @@ package: category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_utils @@ -8554,12 +8556,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoapps-utils @@ -8571,12 +8573,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoh5py diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index ac3afe87..b9b1aa91 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -163,31 +163,31 @@ package: category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: linux-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi - version: 23.1.0 + version: 25.1.0 manager: conda platform: win-64 dependencies: argon2-cffi-bindings: '' python: '>=3.9' typing-extensions: '' - url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda hash: - md5: a7ee488b71c30ada51c48468337b85ba - sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad category: dev optional: true - name: argon2-cffi-bindings @@ -982,16 +982,16 @@ package: category: dev optional: true - name: cpython - version: 3.12.10 + version: 3.12.11 manager: conda platform: win-64 dependencies: python: '>=3.12,<3.13.0a0' python_abi: '*' - url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/cpython-3.12.11-py312hd8ed1ab_0.conda hash: - md5: 7584a4b1e802afa25c89c0dcc72d0826 - sha256: acb47715abf1cd8177a5c20f42a34555b5d9cebb68ff39a58706e84effe218e2 + md5: e5279009e7a7f7edd3cd2880c502b3cc + sha256: 7e7bc8e73a2f3736444a8564cbece7216464c00f0bc38e604b0c792ff60d621a category: dev optional: true - name: cycler @@ -2087,7 +2087,7 @@ package: category: dev optional: true - name: ipython - version: 9.2.0 + version: 9.3.0 manager: conda platform: linux-64 dependencies: @@ -2105,14 +2105,14 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.3.0-pyhfa0c392_0.conda hash: - md5: 7330ee1244209cfebfb23d828dd9aae5 - sha256: 539d003c379c22a71df1eb76cd4167a3e2d59f45e6dbc3416c45619f4c1381fb + md5: 270dbfb30fe759b39ce0c9fdbcd7be10 + sha256: ee5d526cba0c0a5981cbcbcadc37a76d257627a904ed2cd2db45821735c93ebd category: dev optional: true - name: ipython - version: 9.2.0 + version: 9.3.0 manager: conda platform: win-64 dependencies: @@ -2130,10 +2130,10 @@ package: stack_data: '' traitlets: '>=5.13.0' typing_extensions: '>=4.6' - url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.2.0-pyhca29cf9_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.3.0-pyh6be1c34_0.conda hash: - md5: a7b419c1d0ae931d86cd9cab158f698e - sha256: 83e4cfdcf09c1273ec31548aacf7f81076dc4245548e78ac3b47d1da361da03b + md5: 73e4ba4c8247f744be670f4da4f132e2 + sha256: b6189de4e9f3d007a11e6e1df023c2bb73cf1864f63ca154c5ff8f0cdf601a50 category: dev optional: true - name: ipython_genutils @@ -2971,7 +2971,7 @@ package: category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: linux-64 dependencies: @@ -2982,14 +2982,14 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: jupytext - version: 1.17.1 + version: 1.17.2 manager: conda platform: win-64 dependencies: @@ -3000,10 +3000,10 @@ package: python: '>=3.9' pyyaml: '' tomli: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.1-pyh80e38bb_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupytext-1.17.2-pyh80e38bb_0.conda hash: - md5: 0fa86af955cc079bb31ac1783cf3cb0e - sha256: a438d610eba6e9dc8ad8e8578d71542f093e44d6cf1e59d92538e5a87059089c + md5: 6d0652a97ef103de0c77b9c610d0c20d + sha256: 48986a9c01f17d1d5a598af33814a877fd67a6a3287625718d76617a7d17f51d category: dev optional: true - name: keyutils @@ -3339,7 +3339,7 @@ package: category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: linux-64 dependencies: @@ -3351,14 +3351,14 @@ package: libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' zstd: '>=1.5.7,<1.6.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.0-h332b0f4_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda hash: - md5: d1738cf06503218acee63669029fd8e8 - sha256: ddfcb508b723e1ef4234c517da18820cdbb40cc060f3b120aaa8a18eb6ab0564 + md5: 45f6713cb00f124af300342512219182 + sha256: b6c5cf340a4f80d70d64b3a29a7d9885a5918d16a5cb952022820e6d3e79dc8b category: main optional: false - name: libcurl - version: 8.14.0 + version: 8.14.1 manager: conda platform: win-64 dependencies: @@ -3368,10 +3368,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.0-h88aaa65_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libcurl-8.14.1-h88aaa65_0.conda hash: - md5: ae69647c79ac790aae707e6f3977152b - sha256: 374d36c9e5163e8ac6a2b3e845200db8ecc16702dc85d4c1617c8047f3e2ba3a + md5: 836b9c08f34d2017dbcaec907c6a1138 + sha256: b2cface2cf35d8522289df7fffc14370596db6f6dc481cc1b6ca313faeac19d8 category: main optional: false - name: libdeflate @@ -5479,27 +5479,27 @@ package: category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prometheus_client - version: 0.22.0 + version: 0.22.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/prometheus_client-0.22.1-pyhd8ed1ab_0.conda hash: - md5: 7bfaef51c8364f6f5096a5a60bb83413 - sha256: 31d2fbd381d6ecc9f01d106da5e095104b235917a0b3c342887ee66ca0e85025 + md5: c64b77ccab10b822722904d889fa83b5 + sha256: 454e2c0ef14accc888dd2cd2e8adb8c6a3a607d2d3c2f93962698b5718e6176d category: dev optional: true - name: prompt-toolkit @@ -6004,39 +6004,41 @@ package: category: main optional: false - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: linux-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest - version: 8.3.5 + version: 8.4.0 manager: conda platform: win-64 dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2,>=1.5 + colorama: '>=0.4' + exceptiongroup: '>=1' + iniconfig: '>=1' + packaging: '>=20' + pluggy: '>=1.5,<2' + pygments: '>=2.7.2' python: '>=3.9' tomli: '>=1' - url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/pytest-8.4.0-pyhd8ed1ab_0.conda hash: - md5: c3c9316209dec74a705a36797970c6be - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 + md5: 516d31f063ce7e49ced17f105b63a1f1 + sha256: f8c5a65ff4216f7c0a9be1708be1ee1446ad678da5a01eeb2437551156e32a06 category: dev optional: true - name: pytest-cov @@ -6070,7 +6072,7 @@ package: category: dev optional: true - name: python - version: 3.12.10 + version: 3.12.11 manager: conda platform: linux-64 dependencies: @@ -6082,7 +6084,7 @@ package: libgcc: '>=13' liblzma: '>=5.8.1,<6.0a0' libnsl: '>=2.0.1,<2.1.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libuuid: '>=2.38.1,<3.0a0' libxcrypt: '>=4.4.36' libzlib: '>=1.3.1,<2.0a0' @@ -6092,14 +6094,14 @@ package: readline: '>=8.2,<9.0a0' tk: '>=8.6.13,<8.7.0a0' tzdata: '' - url: https://repo.prefix.dev/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda hash: - md5: a41d26cd4d47092d683915d058380dec - sha256: 4dc1da115805bd353bded6ab20ff642b6a15fcc72ac2f3de0e1d014ff3612221 + md5: 94206474a5608243a10c92cefbe0908f + sha256: 6cca004806ceceea9585d4d655059e951152fc774a471593d4f5138e6a54c81d category: main optional: false - name: python - version: 3.12.10 + version: 3.12.11 manager: conda platform: win-64 dependencies: @@ -6107,7 +6109,7 @@ package: libexpat: '>=2.7.0,<3.0a0' libffi: '>=3.4.6,<3.5.0a0' liblzma: '>=5.8.1,<6.0a0' - libsqlite: '>=3.49.1,<4.0a0' + libsqlite: '>=3.50.0,<4.0a0' libzlib: '>=1.3.1,<2.0a0' openssl: '>=3.5.0,<4.0a0' pip: '' @@ -6116,10 +6118,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/python-3.12.10-h3f84c4b_0_cpython.conda + url: https://repo.prefix.dev/conda-forge/win-64/python-3.12.11-h3f84c4b_0_cpython.conda hash: - md5: 495e849ebc04562381539d25cf303a9f - sha256: a791fa8f5ce68ab00543ecd3798bfa573db327902ccd5cb7598fd7e94ea194d3 + md5: 6aa5e62df29efa6319542ae5025f4376 + sha256: b69412e64971b5da3ced0fc36f05d0eacc9393f2084c6f92b8f28ee068d83e2e category: main optional: false - name: python-dateutil @@ -6701,27 +6703,27 @@ package: category: dev optional: true - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: setuptools - version: 80.8.0 + version: 80.9.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda hash: - md5: ea075e94dc0106c7212128b6a25bbc4c - sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: 4de79c071274a53dcaf2a8c749d1499e + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 category: main optional: false - name: six @@ -7789,27 +7791,27 @@ package: category: dev optional: true - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: - typing_extensions: ==4.13.2 - url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + typing_extensions: ==4.14.0 + url: https://repo.prefix.dev/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda hash: - md5: 568ed1300869dca0ba09fb750cda5dbb - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: a1cdd40fc962e2f7944bc19e01c7e584 + sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4 category: main optional: false - name: typing-inspection @@ -7839,27 +7841,27 @@ package: category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_extensions - version: 4.13.2 + version: 4.14.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda hash: - md5: 83fc6ae00127671e301c9f44254c31b8 - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 2adcd9bb86f656d3d43bf84af59a1faf + sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c category: main optional: false - name: typing_utils @@ -8554,12 +8556,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoapps-utils @@ -8571,12 +8573,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 hash: - sha256: 388f8f781c834f8f1d5c6243e636112bd2fd4dcb + sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@388f8f781c834f8f1d5c6243e636112bd2fd4dcb + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 category: main optional: false - name: geoh5py From c174a71295dd63d9785c19dd84a734dfd6505619 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 4 Jun 2025 12:06:25 -0700 Subject: [PATCH 13/59] Create deprecations attribute for all deprecated fields (cherry picked from commit 927b700ac52270e9b1129d3bea2cb5b37e0288ef) # Conflicts: # simpeg_drivers/options.py --- simpeg_drivers/options.py | 65 ++++++++++++++++++++++++++++----------- tests/uijson_test.py | 22 ++++--------- 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 9c5b771a..48a59a7b 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -128,6 +128,26 @@ class ComputeOptions(BaseModel): tile_spatial: int = 1 +class DeprecatedOptions(BaseModel): + """ + List of deprecated options. + """ + + gradient_type: Deprecated + chunk_by_rows: Deprecated + parallelized: Deprecated + ga_group: Deprecated + z_from_topo: Deprecated + receivers_radar_drape: Deprecated + receivers_offset_z: Deprecated + gps_receivers_offset: Deprecated + + +Deprecations = Annotated[ + DeprecatedOptions, Field(default=DeprecatedOptions(), exclude=True) +] + + class CoreOptions(BaseData): """ Core parameters shared by inverse and forward operations. @@ -160,15 +180,15 @@ class CoreOptions(BaseData): documentation: str | None = None conda_environment: str = "simpeg_drivers" run_command: str = "simpeg_drivers.driver" - mesh: Octree | Grid2D | DrapeModel | None = None active_cells: ActiveCellsOptions compute: ComputeOptions = ComputeOptions() - out_group: SimPEGGroup | UIJsonGroup | None = None - generate_sweep: bool = False + # List of deprecated parameters + deprecations: Deprecations + @property def components(self) -> list[str]: """Return list of component names.""" @@ -243,7 +263,10 @@ class ModelOptions(BaseModel): """ Base class for model parameters. + :param starting_model: Starting model. :param reference_model: Reference model. + :param conductivity_model: Conductivity model used for IP and NS inversions. + :param petrophysical_model: Petrophysical model used for joint inversions. :param lower_bound: Lower bound. :param upper_bound: Upper bound. :param alpha_s: Scale on the reference model. @@ -251,27 +274,37 @@ class ModelOptions(BaseModel): :param length_scale_y: Length scale along the v-direction. :param length_scale_z: Length scale along the z-direction. :param gradient_rotation: Property group for gradient rotation angles. + :param s_norm: Norm applied on the reference model. + :param x_norm: Norm applied on the smoothing along the u-direction. + :param y_norm: Norm applied on the smoothing along the v-direction. + :param z_norm: Norm applied on the smoothing along the w-direction. """ model_config = ConfigDict( arbitrary_types_allowed=True, ) + # Model options starting_model: float | FloatData reference_model: float | FloatData | None = None conductivity_model: FloatData | None = None + petrophysical_model: FloatData | None = None lower_bound: float | FloatData | None = None upper_bound: float | FloatData | None = None - s_norm: float | FloatData | None = 0.0 - x_norm: float | FloatData = 2.0 - y_norm: float | FloatData | None = 2.0 - z_norm: float | FloatData = 2.0 + + # Model values for regularization alpha_s: float | FloatData | None = 1.0 length_scale_x: float | FloatData = 1.0 length_scale_y: float | FloatData | None = 1.0 length_scale_z: float | FloatData = 1.0 gradient_rotation: PropertyGroup | None = None + # Model values for IRLS + s_norm: float | FloatData | None = 0.0 + x_norm: float | FloatData = 2.0 + y_norm: float | FloatData | None = 2.0 + z_norm: float | FloatData = 2.0 + @property def gradient_direction(self) -> np.ndarray: if self.gradient_orientations is None: @@ -308,6 +341,7 @@ class BaseForwardOptions(CoreOptions): See CoreData class docstring for addition parameters descriptions. :param data_object: Data object containing the survey data. + :param models: Model options for the forward simulation. """ forward_only: bool = True @@ -439,32 +473,26 @@ class IRLSOptions(BaseModel): """ IRLS (Iteratively Reweighted Least Squares) options for inversion. - :param s_norm: Norm applied on the reference model. - :param x_norm: Norm applied on the smoothing along the u-direction. - :param y_norm: Norm applied on the smoothing along the v-direction. - :param z_norm: Norm applied on the smoothing along the w-direction. - :param gradient_type: Type of gradient to use for regularization. - :param max_irls_iterations: Maximum number of IRLS iterations. - :param starting_chi_factor: Starting chi factor for IRLS. :param beta_tol: Tolerance for the beta parameter. - :param percentile: Percentile of the model values used to compute the initial epsilon value. :param epsilon_cooling_factor: Factor by which the epsilon value is reduced + :param max_irls_iterations: Maximum number of IRLS iterations. + :param percentile: Percentile of the model values used to compute the initial epsilon value. + :param starting_chi_factor: Starting chi factor for IRLS. """ model_config = ConfigDict( arbitrary_types_allowed=True, ) - gradient_type: Deprecated - max_irls_iterations: int = 25 - starting_chi_factor: float = 1.0 beta_tol: float = 0.5 epsilon_cooling_factor: float = Field( 1.2, validation_alias=AliasChoices("epsilon_cooling_factor", "coolEpsFact") ) + max_irls_iterations: int = 25 percentile: float = Field( 95, validation_alias=AliasChoices("percentile", "prctile") ) + starting_chi_factor: float = 1.0 class LineSelectionOptions(BaseModel): @@ -530,6 +558,7 @@ class BaseInversionOptions(CoreOptions): :param forward_only: If True, only run the forward simulation. :param conda_environment: Name of the conda environment used to run the program :param data_object: Data object containing the survey data. + :param models: Model options for the inversion. :param regularization: Options specific to the regularization function. :param irls: Options specific to the IRLS (Iteratively Reweighted Least Squares) directive. :param directives: Additional directives to be used in the inversion. diff --git a/tests/uijson_test.py b/tests/uijson_test.py index 67ccced2..a4a1f590 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -25,7 +25,7 @@ import simpeg_drivers from simpeg_drivers.driver import InversionDriver from simpeg_drivers.line_sweep.driver import LineSweepDriver -from simpeg_drivers.options import ActiveCellsOptions, IRLSOptions +from simpeg_drivers.options import ActiveCellsOptions, Deprecations from simpeg_drivers.potential_fields.gravity.options import GravityInversionOptions from simpeg_drivers.potential_fields.gravity.uijson import GravityInversionUIJson from simpeg_drivers.uijson import SimPEGDriversUIJson @@ -176,28 +176,18 @@ class MyUIJson(SimPEGDriversUIJson): ) == SimPEGDriversUIJson.comparable_version(simpeg_drivers.__version__) -def test_alias_options(): - geoh5 = Workspace() - - class Options(BaseData): - irls: IRLSOptions = IRLSOptions() - name: str = "My Inversion" - - options = Options.build(geoh5=geoh5, coolEpsFact=0.1) - assert options.irls.epsilon_cooling_factor == 0.1 - - def test_deprecated_options(caplog): geoh5 = Workspace() class Options(BaseData): - irls: IRLSOptions = IRLSOptions() - name: str = "My Inversion" + deprecations: Deprecations with caplog.at_level(logging.WARNING): - Options.build(geoh5=geoh5, gradient_type="abc") + options = Options.build(geoh5=geoh5, parallelized="abc") - assert "Deprecated field 'gradient_type' will be ignored" in caplog.text + assert "Deprecated field 'parallelized' will be ignored" in caplog.text + assert "deprecations" not in options.model_dump() + assert "parallelized" not in options.model_dump() def test_uijson_deprecations(caplog, simpeg_uijson_factory): From 1046c98b1ccb3819f087ac5149f0bb0a043fcb38 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 09:55:58 -0700 Subject: [PATCH 14/59] Cherry pick change to test --- tests/uijson_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/uijson_test.py b/tests/uijson_test.py index a4a1f590..7a3b40a6 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -331,6 +331,9 @@ def test_legacy_uijson(tmp_path: Path): ifile.data["data_object"] = survey ifile.data["topography_object"] = topo + # Test deprecated name + ifile.data["coolingFactor"] = 4.0 + if "2d" in inversion_type or "pseudo 3d" in inversion_type: line_id = geoh5.get_entity("line_ids")[0] ifile.data["line_object"] = line_id @@ -367,6 +370,9 @@ def test_legacy_uijson(tmp_path: Path): driver = InversionDriver.from_input_file(ifile) + if hasattr(driver.params, "cooling_factor"): + assert driver.params.cooling_factor == 4.0 + if isinstance(driver, LineSweepDriver): continue From 7e9e8536fd74d740e8ceaa252d96dff1930d7182 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 10:01:58 -0700 Subject: [PATCH 15/59] Merge unit test for deprecations --- tests/uijson_test.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tests/uijson_test.py b/tests/uijson_test.py index 7a3b40a6..39b1733b 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -25,7 +25,7 @@ import simpeg_drivers from simpeg_drivers.driver import InversionDriver from simpeg_drivers.line_sweep.driver import LineSweepDriver -from simpeg_drivers.options import ActiveCellsOptions, Deprecations +from simpeg_drivers.options import ActiveCellsOptions, Deprecations, IRLSOptions from simpeg_drivers.potential_fields.gravity.options import GravityInversionOptions from simpeg_drivers.potential_fields.gravity.uijson import GravityInversionUIJson from simpeg_drivers.uijson import SimPEGDriversUIJson @@ -176,16 +176,29 @@ class MyUIJson(SimPEGDriversUIJson): ) == SimPEGDriversUIJson.comparable_version(simpeg_drivers.__version__) +def test_alias_options(): + geoh5 = Workspace() + + class Options(BaseData): + irls: IRLSOptions = IRLSOptions() + name: str = "My Inversion" + + options = Options.build(geoh5=geoh5, coolEpsFact=0.1) + assert options.irls.epsilon_cooling_factor == 0.1 + + def test_deprecated_options(caplog): geoh5 = Workspace() class Options(BaseData): + irls: IRLSOptions = IRLSOptions() + name: str = "My Inversion" deprecations: Deprecations with caplog.at_level(logging.WARNING): - options = Options.build(geoh5=geoh5, parallelized="abc") + options = Options.build(geoh5=geoh5, gradient_type="abc") - assert "Deprecated field 'parallelized' will be ignored" in caplog.text + assert "Deprecated field 'gradient_type' will be ignored" in caplog.text assert "deprecations" not in options.model_dump() assert "parallelized" not in options.model_dump() From 9efd4879127a46cf09ce94c735549afc78b36771 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 10:22:39 -0700 Subject: [PATCH 16/59] Continue clean ups --- simpeg_drivers/components/data.py | 23 +++---------------- simpeg_drivers/driver.py | 4 ++-- .../electromagnetics/base_1d_driver.py | 2 +- simpeg_drivers/joint/driver.py | 8 +++---- .../run_tests/driver_airborne_fem_1d_test.py | 8 +++---- 5 files changed, 14 insertions(+), 31 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index 9479d695..e36bac1a 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -53,8 +53,6 @@ class InversionData(InversionLocations): mask : Mask accumulated by windowing and downsampling operations and applied to locations and data on initialization. - vector : - True if models are vector valued. n_blocks : Number of blocks if vector. components : @@ -84,8 +82,6 @@ def __init__(self, workspace: Workspace, params: InversionBaseOptions): super().__init__(workspace, params) self.locations: np.ndarray | None = None self.mask: np.ndarray | None = None - self.indices: np.ndarray | None = None - self.vector: bool | None = None self.n_blocks: int | None = None self._observed: dict[str, np.ndarray] | None = None @@ -102,7 +98,6 @@ def __init__(self, workspace: Workspace, params: InversionBaseOptions): def _initialize(self) -> None: """Extract data from the workspace using params data.""" - self.vector = True if self.params.inversion_type == "magnetic vector" else False self.n_blocks = 3 if self.params.inversion_type == "magnetic vector" else 1 self.components = self.params.active_components @@ -127,7 +122,7 @@ def observed(self): Return observed data filtered and normalized. """ if self._observed is None: - filtered = self.filter(self.params.data) + filtered = self.filter(self.params.data, mask=self.mask) self._observed = self.normalize(filtered) return self._observed @@ -138,7 +133,7 @@ def uncertainties(self): Return uncertainties filtered and normalized. """ if self._uncertainties is None and hasattr(self.params, "uncertainties"): - filtered = self.filter(self.params.uncertainties) + filtered = self.filter(self.params.uncertainties, mask=self.mask) self._uncertainties = self.normalize(filtered, absolute=True) return self._uncertainties @@ -165,18 +160,6 @@ def drape_locations(self, locations: np.ndarray) -> np.ndarray: return np.c_[distance_interp, locations[:, 2:]] - def filter(self, obj: dict[str, np.ndarray] | np.ndarray, mask=None): - """Remove vertices based on mask property.""" - if mask is None: - mask = self.mask - - if self.indices is None: - self.indices = np.where(mask)[0] - - obj = super().filter(obj, mask=self.indices) - - return obj - def get_data(self) -> tuple[list, dict, dict]: """ Get all data and uncertainty components and possibly set infinite uncertainties. @@ -435,7 +418,7 @@ def simulation( active_cells, local_mesh, enforce_active=True, - components=3 if self.vector else 1, + components=self.n_blocks, ) simulation = simulation_factory.build( survey=survey, diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index ca998fbc..d1c76e23 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -593,9 +593,9 @@ def get_regularization(self): def get_tiles(self): if "2d" in self.params.inversion_type: - tiles = [np.arange(len(self.inversion_data.indices))] + tiles = [np.arange(self.inversion_data.mask.sum())] elif "1d" in self.params.inversion_type: - tiles = np.arange(len(self.inversion_data.indices)).reshape((-1, 1)) + tiles = np.arange(self.inversion_data.mask.sum()).reshape((-1, 1)) else: locations = self.inversion_data.locations tiles = tile_locations( diff --git a/simpeg_drivers/electromagnetics/base_1d_driver.py b/simpeg_drivers/electromagnetics/base_1d_driver.py index d5f0db8b..d4ba8c16 100644 --- a/simpeg_drivers/electromagnetics/base_1d_driver.py +++ b/simpeg_drivers/electromagnetics/base_1d_driver.py @@ -125,7 +125,7 @@ def split_list(self): """ Split the list of data into chunks for parallel processing. """ - n_misfits = len(self.inversion_data.indices) + n_misfits = self.inversion_data.mask.sum() if isinstance(self.params.data_object, FEMSurvey): n_misfits *= len(self.params.data_object.channels) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 686246a1..f9b69391 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -123,7 +123,7 @@ def initialize(self): global_actives, driver.inversion_mesh.mesh, enforce_active=False, - components=3 if driver.inversion_data.vector else 1, + components=driver.inversion_data.n_blocks, ) driver.params.active_model = None driver.models.active_cells = projection.local_active @@ -206,7 +206,7 @@ def n_values(self): n_values = self.models.n_active count = [] for driver in self.drivers: - n_comp = 3 if driver.inversion_data.vector else 1 + n_comp = driver.inversion_data.n_blocks # If vector of scalar model count.append(n_values * n_comp) self._n_values = count @@ -228,7 +228,7 @@ def run(self): if self.params.forward_only: print("Running the forward simulation ...") predicted = self.inverse_problem.get_dpred( - self.models.starting, compute_J=False + self.models.starting_model, compute_J=False ) for sub, driver in zip(predicted, self.drivers, strict=True): @@ -240,7 +240,7 @@ def run(self): else: # Run the inversion self.start_inversion_message() - self.inversion.run(self.models.starting) + self.inversion.run(self.models.starting_model) self.logger.end() sys.stdout = self.logger.terminal diff --git a/tests/run_tests/driver_airborne_fem_1d_test.py b/tests/run_tests/driver_airborne_fem_1d_test.py index a38b25a0..9402011b 100644 --- a/tests/run_tests/driver_airborne_fem_1d_test.py +++ b/tests/run_tests/driver_airborne_fem_1d_test.py @@ -57,10 +57,10 @@ def test_fem_fwr_1d_run( inversion_type="fdem 1d", flatten=False, ) - params = FDEM1DForwardOptions( + params = FDEM1DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, z_real_channel_bool=True, @@ -126,10 +126,10 @@ def test_fem_1d_run(tmp_path: Path, max_iterations=1, pytest=True): orig_z_real_1 = geoh5.get_entity("Iteration_0_z_real_[0]")[0].values # Run the inverse - params = FDEM1DInversionOptions( + params = FDEM1DInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=1e-3, reference_model=1e-3, From 9db536a44d96c72774441b5b5df858259fc1eee6 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 11:03:54 -0700 Subject: [PATCH 17/59] Refactor saving method --- simpeg_drivers/components/data.py | 96 +++++++++---------- .../factories/directives_factory.py | 4 +- 2 files changed, 48 insertions(+), 52 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index e36bac1a..d51ee564 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -189,78 +189,74 @@ def write_entity(self): def save_data(self): """Write out the data to geoh5""" - data = self.observed - basename = "Predicted" if self.params.forward_only else "Observed" - self._observed_data_types = {c: {} for c in data.keys()} - data_dict = {c: {} for c in data.keys()} - uncert_dict = {c: {} for c in data.keys()} - - if self.params.inversion_type in [ + has_channels = self.params.inversion_type in [ "magnetotellurics", "tipper", "tdem", "fdem", "fdem 1d", "tdem 1d", - ]: - for component, channels in data.items(): - for ind, (channel, values) in enumerate(channels.items()): - dnorm = values / self.normalizations[channel][component] - data_channel = self.entity.add_data( - {f"{basename}_{component}_[{ind}]": {"values": dnorm}} - ) - data_dict[component] = self.entity.add_data_to_group( - data_channel, f"{basename}_{component}" - ) - if not self.params.forward_only: - self._observed_data_types[component][f"[{ind}]"] = ( - data_channel.entity_type - ) - uncerts = np.abs( - self.uncertainties[component][channel].copy() - / self.normalizations[channel][component] - ) - uncerts[np.isinf(uncerts)] = np.nan - uncert_entity = self.entity.add_data( - {f"Uncertainties_{component}_[{ind}]": {"values": uncerts}} - ) - uncert_dict[component] = self.entity.add_data_to_group( - uncert_entity, f"Uncertainties_{component}" - ) - else: - for component in data: - dnorm = data[component] / self.normalizations[None][component] - data_dict[component] = self.entity.add_data( - {f"{basename}_{component}": {"values": dnorm}} + ] + + # Pre-allocate dictionaries + data_types = {c: {} for c in self.observed.keys()} + data_dict = data_types.copy() + uncert_dict = data_types.copy() + + for component, channels in self.observed.items(): + if channels is None: + continue + + if not has_channels: + channels = {None: channels} + + for ind, (channel, values) in enumerate(channels.items()): + suffix = f"_{component}" + if has_channels: + suffix += f"_[{ind}]" + + normalized_data = values / self.normalizations[channel][component] + data_entity = self.entity.add_data( + {"Observed" + suffix: {"values": normalized_data}} ) - if not self.params.forward_only: - self._observed_data_types[component] = data_dict[ - component - ].entity_type - uncerts = np.abs( - self.uncertainties[component].copy() - / self.normalizations[None][component] - ) - uncerts[np.isinf(uncerts)] = np.nan + uncerts = np.abs( + self.uncertainties[component][channel].copy() + / self.normalizations[channel][component] + ) + uncerts[np.isinf(uncerts)] = np.nan + uncert_entity = self.entity.add_data( + {"Uncertainties" + suffix: {"values": uncerts}} + ) - uncert_dict[component] = self.entity.add_data( - {f"Uncertainties_{component}": {"values": uncerts}} + if has_channels: + data_dict[component] = self.entity.add_data_to_group( + data_entity, f"Observed_{component}" ) + uncert_dict[component] = self.entity.add_data_to_group( + uncert_entity, f"Uncertainties_{component}" + ) + else: + data_dict[component] = data_entity + uncert_dict[component] = uncert_entity + + data_types[component][f"[{ind}]"] = data_entity.entity_type + # Extra save for apparent resistivity if applicable if "direct current" in self.params.inversion_type: - apparent_property = data[component].copy() + apparent_property = values.copy() apparent_property *= self.survey.apparent_resistivity data_dict["apparent_resistivity"] = self.entity.add_data( { - f"{basename}_apparent_resistivity": { + "Observed_apparent_resistivity": { "values": apparent_property, "association": "CELL", } } ) + self._observed_data_types = data_types self.update_params(data_dict, uncert_dict) def normalize( diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 56f52b38..c2022c4b 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -546,7 +546,7 @@ def assemble_data_keywords_potential_fields( channels = [None] kwargs = { "data_type": { - comp: dict.fromkeys(channels, dtype) + comp: dtype["[0]"] for comp, dtype in inversion_object.observed_data_types.items() }, "transforms": [ @@ -598,7 +598,7 @@ def assemble_data_keywords_dcip( component = "dc" if is_dc else "ip" kwargs = { "data_type": { - comp: dict.fromkeys(channels, dtype) + comp: dtype["[0]"] for comp, dtype in inversion_object.observed_data_types.items() }, "transforms": [ From 9f68d9bb1c2b52e39e9ede169f4ee57c019a0ded Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 12:01:04 -0700 Subject: [PATCH 18/59] Continue cleaning up --- simpeg_drivers/components/data.py | 3 +-- .../components/factories/directives_factory.py | 18 ++++++++---------- .../electromagnetics/time_domain/options.py | 4 +--- simpeg_drivers/joint/options.py | 7 ++++--- simpeg_drivers/options.py | 14 ++------------ tests/run_tests/driver_airborne_tem_test.py | 12 ++++++------ tests/run_tests/driver_mag_test.py | 7 +++---- 7 files changed, 25 insertions(+), 40 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index d51ee564..ed07e6d3 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -219,9 +219,8 @@ def save_data(self): data_entity = self.entity.add_data( {"Observed" + suffix: {"values": normalized_data}} ) - uncerts = np.abs( - self.uncertainties[component][channel].copy() + self.uncertainties[component][channel].flatten() / self.normalizations[channel][component] ) uncerts[np.isinf(uncerts)] = np.nan diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index c2022c4b..12a8b7a6 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -545,10 +545,7 @@ def assemble_data_keywords_potential_fields( components = list(inversion_object.observed) channels = [None] kwargs = { - "data_type": { - comp: dtype["[0]"] - for comp, dtype in inversion_object.observed_data_types.items() - }, + "data_type": inversion_object.observed_data_types, "transforms": [ np.hstack( [ @@ -593,17 +590,18 @@ def assemble_data_keywords_dcip( name=None, ): components = list(inversion_object.observed) - channels = [""] + channels = [None] is_dc = True if "direct current" in self.factory_type else False component = "dc" if is_dc else "ip" kwargs = { - "data_type": { - comp: dtype["[0]"] - for comp, dtype in inversion_object.observed_data_types.items() - }, + "data_type": inversion_object.observed_data_types, "transforms": [ np.hstack( - [inversion_object.normalizations[None][c] for c in components] + [ + inversion_object.normalizations[chan][comp] + for chan in channels + for comp in components + ] ) ], "channels": channels, diff --git a/simpeg_drivers/electromagnetics/time_domain/options.py b/simpeg_drivers/electromagnetics/time_domain/options.py index 50dfd7e8..5500c5b5 100644 --- a/simpeg_drivers/electromagnetics/time_domain/options.py +++ b/simpeg_drivers/electromagnetics/time_domain/options.py @@ -44,6 +44,7 @@ class BaseTDEMOptions(EMDataMixin): physical_property: str = "conductivity" data_units: str = "dB/dt (T/s)" model_type: str = "Conductivity (S/m)" + inversion_type: str = "tdem" @property def unit_conversion(self): @@ -71,8 +72,6 @@ class TDEMForwardOptions(BaseTDEMOptions, BaseForwardOptions): default_ui_json: ClassVar[Path] = assets_path() / "uijson/tdem_forward.ui.json" title: str = "Time-domain EM (TEM) Forward" - physical_property: str = "conductivity" - inversion_type: str = "tdem" z_channel_bool: bool | None = None x_channel_bool: bool | None = None @@ -96,7 +95,6 @@ class TDEMInversionOptions(BaseTDEMOptions, BaseInversionOptions): name: ClassVar[str] = "Time Domain Electromagnetics Inversion" default_ui_json: ClassVar[Path] = assets_path() / "uijson/tdem_inversion.ui.json" title: str = "Time-domain EM (TEM) Inversion" - inversion_type: str = "tdem" z_channel: PropertyGroup | None = None z_uncertainty: PropertyGroup | None = None diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index 5248d499..0b908c07 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -12,6 +12,7 @@ from __future__ import annotations import multiprocessing +from typing import Literal import numpy as np from geoapps_utils.driver.data import BaseData @@ -22,7 +23,7 @@ from pydantic import ConfigDict, field_validator, model_validator import simpeg_drivers -from simpeg_drivers.options import ActiveCellsOptions, SolverType +from simpeg_drivers.options import ActiveCellsOptions from simpeg_drivers.utils.regularization import direction_and_dip @@ -60,7 +61,7 @@ class BaseJointOptions(BaseData): active_cells: ActiveCellsOptions tile_spatial: int = 1 parallelized: bool = True - solver_type: SolverType = SolverType.Pardiso + save_sensitivities: bool = False n_cpu: int | None = None max_chunk_size: int = 128 @@ -92,7 +93,7 @@ class BaseJointOptions(BaseData): max_cg_iterations: int = 30 tol_cg: float = 1e-4 f_min_change: float = 1e-2 - solver_type: SolverType = SolverType.Pardiso + solver_type: Literal["Pardiso", "Mumps"] = "Pardiso" sens_wts_threshold: float = 1e-3 every_iteration_bool: bool = True diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 48a59a7b..13a740dc 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -11,10 +11,9 @@ from __future__ import annotations -from enum import Enum from logging import getLogger from pathlib import Path -from typing import Annotated, Any, ClassVar, TypeAlias +from typing import Annotated, Any, ClassVar, Literal, TypeAlias import numpy as np from geoapps_utils.driver.data import BaseData @@ -93,15 +92,6 @@ def at_least_one(cls, data): return data -class SolverType(str, Enum): - """ - Supported solvers. - """ - - Pardiso = "Pardiso" - Mumps = "Mumps" - - class ComputeOptions(BaseModel): """ Options related to compute resources and parallelization. @@ -124,7 +114,7 @@ class ComputeOptions(BaseModel): n_threads: int | None = None n_workers: int | None = 1 performance_report: bool = False - solver_type: SolverType = SolverType.Pardiso + solver_type: Literal["Pardiso", "Mumps"] = "Pardiso" tile_spatial: int = 1 diff --git a/tests/run_tests/driver_airborne_tem_test.py b/tests/run_tests/driver_airborne_tem_test.py index 1ad5f7ae..22291716 100644 --- a/tests/run_tests/driver_airborne_tem_test.py +++ b/tests/run_tests/driver_airborne_tem_test.py @@ -50,10 +50,10 @@ def test_bad_waveform(tmp_path: Path): padding_distance=400.0, flatten=False, ) - params = TDEMForwardOptions( + params = TDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, x_channel_bool=True, @@ -89,10 +89,10 @@ def test_airborne_tem_fwr_run( padding_distance=400.0, flatten=False, ) - params = TDEMForwardOptions( + params = TDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, x_channel_bool=True, @@ -162,10 +162,10 @@ def test_airborne_tem_run(tmp_path: Path, max_iterations=1, pytest=True): orig_dBzdt = geoh5.get_entity("Iteration_0_z_[0]")[0].values # Run the inverse - params = TDEMInversionOptions( + params = TDEMInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=1e-3, reference_model=1e-3, diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py index bb78fded..dc94a71d 100644 --- a/tests/run_tests/driver_mag_test.py +++ b/tests/run_tests/driver_mag_test.py @@ -52,12 +52,12 @@ def test_susceptibility_fwr_run( flatten=False, ) inducing_field = (49999.8, 90.0, 0.0) - active_cells = ActiveCellsOptions(topography_object=topography) + params = MagneticForwardOptions.build( forward_only=True, geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], @@ -93,11 +93,10 @@ def test_susceptibility_run( inducing_field = (50000.0, 90.0, 0.0) # Run the inverse - active_cells = ActiveCellsOptions(active_model=active_cells) params = MagneticInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + active_model=active_cells, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], From af7c9f64a5067525cdff1d689e1a540f7105bf73 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 12:30:14 -0700 Subject: [PATCH 19/59] Move responsaiblity of saving data to inversion_data init --- simpeg_drivers/components/data.py | 5 +++-- simpeg_drivers/driver.py | 1 - simpeg_drivers/electricals/driver.py | 1 - simpeg_drivers/electromagnetics/base_1d_driver.py | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index ed07e6d3..ee16b632 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -94,8 +94,6 @@ def __init__(self, workspace: Workspace, params: InversionBaseOptions): self._initialize() - self.normalizations: dict[str, Any] = self.get_normalizations() - def _initialize(self) -> None: """Extract data from the workspace using params data.""" self.n_blocks = 3 if self.params.inversion_type == "magnetic vector" else 1 @@ -112,7 +110,10 @@ def _initialize(self) -> None: else: self.mask = np.ones(len(self.locations), dtype=bool) + self.normalizations: dict[str, Any] = self.get_normalizations() + self.entity = self.write_entity() + self.save_data() self.params.data_object = self.entity self.locations = super().get_locations(self.entity) diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index d1c76e23..67bd3e13 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -171,7 +171,6 @@ def data_misfit(self): self.logger.write("Saving data to file...\n") if isinstance(self.params, BaseInversionOptions): - self.inversion_data.save_data() self._data_misfit.multipliers = np.asarray( self._data_misfit.multipliers, dtype=float ) diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py index 66f96779..5644f08e 100644 --- a/simpeg_drivers/electricals/driver.py +++ b/simpeg_drivers/electricals/driver.py @@ -131,7 +131,6 @@ def write_files(self, lookup): with fetch_active_workspace(self.workspace, mode="r+"): self._window = InversionWindow(self.workspace, self.batch2d_params) self._inversion_data = InversionData(self.workspace, self.batch2d_params) - self._inversion_data.save_data() self._inversion_topography = InversionTopography( self.workspace, self.batch2d_params ) diff --git a/simpeg_drivers/electromagnetics/base_1d_driver.py b/simpeg_drivers/electromagnetics/base_1d_driver.py index d4ba8c16..e5befd66 100644 --- a/simpeg_drivers/electromagnetics/base_1d_driver.py +++ b/simpeg_drivers/electromagnetics/base_1d_driver.py @@ -110,7 +110,6 @@ def data_misfit(self): ) logger.info("Done.") - self.inversion_data.save_data() self._data_misfit.multipliers = np.asarray( self._data_misfit.multipliers, dtype=float ) From 9ba5139fb6ede8b0607bb850e232e1ea6da7236f Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 13:01:04 -0700 Subject: [PATCH 20/59] Bring back model_type. Fix name change --- simpeg_drivers/components/models.py | 18 +++++++++--------- simpeg_drivers/options.py | 4 ++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 9af39fab..8437c566 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -69,7 +69,7 @@ def __init__(self, driver: InversionDriver): """ self._active_cells: np.ndarray | None = None self._driver = driver - self.is_sigma = self.driver.params.physical_property == "conductivity_model" + self.is_sigma = self.driver.params.physical_property == "conductivity" is_vector = ( True if self.driver.params.inversion_type == "magnetic vector" else False ) @@ -162,7 +162,7 @@ def starting_model(self) -> np.ndarray | None: mstart = self._starting_model.model.copy() if mstart is not None and self.is_sigma: - if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": + if self.driver.params.models.model_type == "Resistivity (Ohm-m)": mstart = 1 / mstart mstart = np.log(mstart) @@ -185,7 +185,7 @@ def reference_model(self) -> np.ndarray | None: if ( self.is_sigma - and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + and self.driver.params.models.model_type == "Resistivity (Ohm-m)" ): ref_model = 1 / ref_model @@ -196,7 +196,7 @@ def reference_model(self) -> np.ndarray | None: @property def lower_bound(self) -> np.ndarray | None: if ( - getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + self.driver.params.models.model_type == "Resistivity (Ohm-m)" and self.is_sigma ): bound_model = self._upper_bound.model @@ -217,7 +217,7 @@ def lower_bound(self) -> np.ndarray | None: if self.is_sigma: is_finite = np.isfinite(lbound) - if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": + if self.driver.params.models.model_type == "Resistivity (Ohm-m)": lbound[is_finite] = 1 / lbound[is_finite] lbound[is_finite] = np.log(lbound[is_finite]) @@ -227,7 +227,7 @@ def lower_bound(self) -> np.ndarray | None: @property def upper_bound(self) -> np.ndarray | None: if ( - getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + self.driver.params.models.model_type == "Resistivity (Ohm-m)" and self.is_sigma ): bound_model = self._lower_bound.model @@ -242,7 +242,7 @@ def upper_bound(self) -> np.ndarray | None: if self.is_sigma: is_finite = np.isfinite(ubound) - if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": + if self.driver.params.models.model_type == "Resistivity (Ohm-m)": ubound[is_finite] = 1 / ubound[is_finite] ubound[is_finite] = np.log(ubound[is_finite]) @@ -257,7 +257,7 @@ def conductivity_model(self) -> np.ndarray | None: background_sigma = self._conductivity_model.model.copy() if background_sigma is not None: - if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)": + if self.driver.params.models.model_type == "Resistivity (Ohm-m)": background_sigma = 1 / background_sigma # Don't apply log if IP inversion @@ -523,7 +523,7 @@ def save_model(self): model_type = self.model_type if ( model_type == "conductivity_model" - and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + and self.driver.params.models.model_type == "Resistivity (Ohm-m)" ): model_type = "resistivity_model" diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 13a740dc..b1cde3ee 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -274,6 +274,10 @@ class ModelOptions(BaseModel): arbitrary_types_allowed=True, ) + model_type: Literal["Conductivity (S/m)", "Resistivity (Ohm-m)"] = ( + "Conductivity (S/m)" + ) + # Model options starting_model: float | FloatData reference_model: float | FloatData | None = None From 68fa306f2e0994e1bbe25805879f2ab5474b5e3c Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 13:21:41 -0700 Subject: [PATCH 21/59] Update mvi test --- tests/run_tests/driver_mvi_test.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py index ca0ee227..359d23f7 100644 --- a/tests/run_tests/driver_mvi_test.py +++ b/tests/run_tests/driver_mvi_test.py @@ -59,12 +59,11 @@ def test_magnetic_vector_fwr_run( survey = Curve.create(geoh5, name=points.name, vertices=points.vertices) geoh5.remove_entity(points) inducing_field = (50000.0, 90.0, 0.0) - active_cells = ActiveCellsOptions(topography_object=topography) - params = MVIForwardOptions( + params = MVIForwardOptions.build( forward_only=True, geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], @@ -111,11 +110,10 @@ def test_magnetic_vector_run( ) # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], @@ -186,12 +184,11 @@ def test_magnetic_vector_bounds_run( inducing_field = (50000.0, 90.0, 0.0) # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) with caplog.at_level(logging.WARNING): - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], From 20265e00a3bec331aad1e67633afb543a2eaffcd Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 13:52:18 -0700 Subject: [PATCH 22/59] Sub class vector models for MVI --- .../magnetic_vector/options.py | 49 +++++++++++++++---- tests/run_tests/driver_mvi_test.py | 4 +- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/simpeg_drivers/potential_fields/magnetic_vector/options.py b/simpeg_drivers/potential_fields/magnetic_vector/options.py index 562b7262..9e8b69a5 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector/options.py @@ -16,10 +16,45 @@ from geoh5py.data import FloatData from geoh5py.ui_json.annotations import Deprecated -from pydantic import model_validator +from pydantic import AliasChoices, Field from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ModelOptions, +) + + +class VectorModelOptions(ModelOptions): + """ + Magnetic Vector Model options. + """ + + starting_model_inclination: float | FloatData | None = Field( + None, + validation_alias=AliasChoices( + "starting_model_inclination", "starting_inclination" + ), + ) + starting_model_declination: float | FloatData | None = Field( + None, + validation_alias=AliasChoices( + "starting_model_declination", "starting_declination" + ), + ) + reference_model_inclination: float | FloatData | None = Field( + None, + validation_alias=AliasChoices( + "reference_model_inclination", "reference_inclination" + ), + ) + reference_model_declination: float | FloatData | None = Field( + None, + validation_alias=AliasChoices( + "reference_model_declination", "reference_declination" + ), + ) class MVIForwardOptions(BaseForwardOptions): @@ -47,6 +82,7 @@ class MVIForwardOptions(BaseForwardOptions): physical_property: str = "susceptibility" inversion_type: str = "magnetic vector" + models: VectorModelOptions tmi_channel_bool: bool = True bx_channel_bool: bool = False by_channel_bool: bool = False @@ -60,8 +96,6 @@ class MVIForwardOptions(BaseForwardOptions): inducing_field_strength: float | FloatData = 50000.0 inducing_field_inclination: float | FloatData = 90.0 inducing_field_declination: float | FloatData = 0.0 - starting_inclination: float | FloatData | None = None - starting_declination: float | FloatData | None = None class MVIInversionOptions(BaseInversionOptions): @@ -106,6 +140,8 @@ class MVIInversionOptions(BaseInversionOptions): physical_property: str = "susceptibility" inversion_type: str = "magnetic vector" + models: VectorModelOptions + tmi_channel: FloatData | None = None bx_channel: FloatData | None = None by_channel: FloatData | None = None @@ -131,8 +167,3 @@ class MVIInversionOptions(BaseInversionOptions): inducing_field_declination: float | FloatData = 0.0 lower_bound: Deprecated | None = None - - starting_inclination: float | FloatData | None = None - starting_declination: float | FloatData | None = None - reference_inclination: float | FloatData | None = None - reference_declination: float | FloatData | None = None diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py index 359d23f7..75aedc85 100644 --- a/tests/run_tests/driver_mvi_test.py +++ b/tests/run_tests/driver_mvi_test.py @@ -69,8 +69,8 @@ def test_magnetic_vector_fwr_run( inducing_field_declination=inducing_field[2], data_object=survey, starting_model=model, - starting_inclination=45, - starting_declination=270, + starting_model_inclination=45, + starting_model_declination=270, ) fwr_driver = MVIForwardDriver(params) fwr_driver.run() From e1f11213a8f575b5d52cbcb312bc1fb25bdd9af8 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 14:01:50 -0700 Subject: [PATCH 23/59] Re-instate default sens_wts_threshold --- simpeg_drivers/options.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index b1cde3ee..5947abe7 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -394,7 +394,7 @@ class DirectiveOptions(BaseModel): beta_search: bool = True every_iteration_bool: bool = False save_sensitivities: bool = False - sens_wts_threshold: float | None = 0.0 + sens_wts_threshold: float | None = 1e-3 class DrapeModelOptions(BaseModel): From 9402de49052249a52ae8836ee41feb809def489d Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 16:40:40 -0700 Subject: [PATCH 24/59] Fix saving directives. Channels as int or str --- simpeg_drivers/components/data.py | 4 +++- simpeg_drivers/components/factories/directives_factory.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index ee16b632..b039f89a 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -205,9 +205,11 @@ def save_data(self): uncert_dict = data_types.copy() for component, channels in self.observed.items(): + # Forward only if channels is None: continue + # Non-EM methods if not has_channels: channels = {None: channels} @@ -240,7 +242,7 @@ def save_data(self): data_dict[component] = data_entity uncert_dict[component] = uncert_entity - data_types[component][f"[{ind}]"] = data_entity.entity_type + data_types[component][ind] = data_entity.entity_type # Extra save for apparent resistivity if applicable if "direct current" in self.params.inversion_type: diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 12a8b7a6..8667f509 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -455,7 +455,7 @@ def volume_normalization(val): } if self.factory_type == "magnetic vector": - kwargs["channels"] = [""] + kwargs["channels"] = [None] kwargs["transforms"] = [ lambda x: x.reshape((-1, 3), order="F"), lambda x: np.linalg.norm(x, axis=1), @@ -674,7 +674,7 @@ def reshape(values): for comp in components ] ), - "channels": [f"[{ind}]" for ind, _ in enumerate(channels)], + "channels": channels, "components": components, "sorting": sorting, "_reshape": reshape, From 092b53f0a445167d5bb5d2902b7a881f31ef9879 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 16:53:35 -0700 Subject: [PATCH 25/59] Point locks to simpeg branch --- .../py-3.10-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.10-linux-64.conda.lock.yml | 8 +- .../py-3.10-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.10-win-64.conda.lock.yml | 8 +- .../py-3.11-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.11-linux-64.conda.lock.yml | 8 +- .../py-3.11-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.11-win-64.conda.lock.yml | 8 +- .../py-3.12-linux-64-dev.conda.lock.yml | 12 +-- environments/py-3.12-linux-64.conda.lock.yml | 8 +- .../py-3.12-win-64-dev.conda.lock.yml | 12 +-- environments/py-3.12-win-64.conda.lock.yml | 8 +- py-3.10.conda-lock.yml | 84 +++++++++---------- py-3.11.conda-lock.yml | 84 +++++++++---------- py-3.12.conda-lock.yml | 84 +++++++++---------- pyproject.toml | 2 +- 16 files changed, 187 insertions(+), 187 deletions(-) diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml index 50aab355..abf3c7bf 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb +# input_hash: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db channels: - conda-forge @@ -49,7 +49,7 @@ dependencies: - decorator=5.2.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py310ha2bacc8_1 + - discretize=0.11.3=py310ha2bacc8_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.19=py310hff52083_1 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -60,7 +60,7 @@ dependencies: - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310ha2bacc8_0 - - greenlet=3.2.2=py310hf71b8c6_0 + - greenlet=3.2.3=py310hf71b8c6_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py310h2a0e991_101 @@ -184,7 +184,7 @@ dependencies: - openssl=3.5.0=h7b32b05_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py310h5eaa309_3 + - pandas=2.3.0=py310h5eaa309_0 - pandoc=3.7.0.2=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -270,7 +270,7 @@ dependencies: - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -304,7 +304,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index 32e9ff2e..d211220a 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb +# input_hash: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py310ha75aee5_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - - discretize=0.11.2=py310ha2bacc8_1 + - discretize=0.11.3=py310ha2bacc8_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py310h89163eb_0 @@ -104,7 +104,7 @@ dependencies: - openjpeg=2.5.3=h5fbd93e_0 - openssl=3.5.0=h7b32b05_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py310h5eaa309_3 + - pandas=2.3.0=py310h5eaa309_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py310hebfe307_1 - pip=25.1.1=pyh8b19718_0 @@ -156,7 +156,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml index 3a62b5af..7f14541b 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 +# input_hash: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f channels: - conda-forge @@ -49,7 +49,7 @@ dependencies: - decorator=5.2.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py310h3e8ed56_1 + - discretize=0.11.3=py310h3e8ed56_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.19=py310h5588dad_1 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -60,7 +60,7 @@ dependencies: - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310h3e8ed56_0 - - greenlet=3.2.2=py310h9e98ed7_0 + - greenlet=3.2.3=py310h9e98ed7_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py310hd6dd405_101 @@ -169,7 +169,7 @@ dependencies: - openssl=3.5.0=ha4e3fda_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py310hb4db72f_3 + - pandas=2.3.0=py310hb4db72f_0 - pandoc=3.7.0.2=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -254,7 +254,7 @@ dependencies: - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -294,7 +294,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index 66554eda..185efec1 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 +# input_hash: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f channels: - conda-forge @@ -26,7 +26,7 @@ dependencies: - cycler=0.12.1=pyhd8ed1ab_1 - cytoolz=1.0.1=py310ha8f682b_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - - discretize=0.11.2=py310h3e8ed56_1 + - discretize=0.11.3=py310h3e8ed56_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py310h38315fa_0 @@ -88,7 +88,7 @@ dependencies: - openjpeg=2.5.3=h4d64b90_0 - openssl=3.5.0=ha4e3fda_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py310hb4db72f_3 + - pandas=2.3.0=py310hb4db72f_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py310h3e38d90_1 - pip=25.1.1=pyh8b19718_0 @@ -144,7 +144,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index a5de704c..084a3b52 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 +# input_hash: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 channels: - conda-forge @@ -50,7 +50,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py311h5b7b71f_1 + - discretize=0.11.3=py311h5b7b71f_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.19=py311h38be061_1 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -61,7 +61,7 @@ dependencies: - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h5b7b71f_0 - - greenlet=3.2.2=py311hfdbb021_0 + - greenlet=3.2.3=py311hfdbb021_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py311h38436b4_101 @@ -186,7 +186,7 @@ dependencies: - openssl=3.5.0=h7b32b05_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py311h7db5c69_3 + - pandas=2.3.0=py311h7db5c69_0 - pandoc=3.7.0.2=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -272,7 +272,7 @@ dependencies: - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -307,7 +307,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index cf695d09..156cb6e5 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 +# input_hash: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 channels: - conda-forge @@ -28,7 +28,7 @@ dependencies: - cytoolz=1.0.1=py311h9ecbd09_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - - discretize=0.11.2=py311h5b7b71f_1 + - discretize=0.11.3=py311h5b7b71f_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py311h2dc5d0c_0 @@ -105,7 +105,7 @@ dependencies: - openjpeg=2.5.3=h5fbd93e_0 - openssl=3.5.0=h7b32b05_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py311h7db5c69_3 + - pandas=2.3.0=py311h7db5c69_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py311h82a398c_1 - pip=25.1.1=pyh8b19718_0 @@ -158,7 +158,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index 411e62a3..10b330e8 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad +# input_hash: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 channels: - conda-forge @@ -50,7 +50,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py311h9b10771_0 + - discretize=0.11.3=py311h9b10771_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.19=py311h1ea47a8_1 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -61,7 +61,7 @@ dependencies: - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h9b10771_0 - - greenlet=3.2.2=py311hda3d55a_0 + - greenlet=3.2.3=py311hda3d55a_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py311hc74fd12_101 @@ -171,7 +171,7 @@ dependencies: - openssl=3.5.0=ha4e3fda_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py311hcf9f919_3 + - pandas=2.3.0=py311hcf9f919_0 - pandoc=3.7.0.2=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -256,7 +256,7 @@ dependencies: - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -297,7 +297,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index 5a326a4d..694f197e 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad +# input_hash: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - cytoolz=1.0.1=py311he736701_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - - discretize=0.11.2=py311h9b10771_0 + - discretize=0.11.3=py311h9b10771_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py311h5082efb_0 @@ -89,7 +89,7 @@ dependencies: - openjpeg=2.5.3=h4d64b90_0 - openssl=3.5.0=ha4e3fda_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py311hcf9f919_3 + - pandas=2.3.0=py311hcf9f919_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py311h5592be9_1 - pip=25.1.1=pyh8b19718_0 @@ -146,7 +146,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index d8c710ba..a344fd0b 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: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e +# input_hash: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e channels: - conda-forge @@ -50,7 +50,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py312hc39e661_1 + - discretize=0.11.3=py312hc39e661_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.18.1=py312h7900ff3_0 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -61,7 +61,7 @@ dependencies: - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hc39e661_0 - - greenlet=3.2.2=py312h2ec8cdc_0 + - greenlet=3.2.3=py312h2ec8cdc_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py312h01d377b_101 @@ -186,7 +186,7 @@ dependencies: - openssl=3.5.0=h7b32b05_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py312hf9745cd_3 + - pandas=2.3.0=py312hf9745cd_0 - pandoc=3.7.0.2=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -272,7 +272,7 @@ dependencies: - tk=8.6.13=noxft_hd72426e_102 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h66e93f0_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -307,7 +307,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index a384f31a..1675e6be 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: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e +# input_hash: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e channels: - conda-forge @@ -28,7 +28,7 @@ dependencies: - cytoolz=1.0.1=py312h66e93f0_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - - discretize=0.11.2=py312hc39e661_1 + - discretize=0.11.3=py312hc39e661_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py312h178313f_0 @@ -105,7 +105,7 @@ dependencies: - openjpeg=2.5.3=h5fbd93e_0 - openssl=3.5.0=h7b32b05_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py312hf9745cd_3 + - pandas=2.3.0=py312hf9745cd_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py312h287a98d_1 - pip=25.1.1=pyh8b19718_0 @@ -158,7 +158,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index f7bfde23..24e58649 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: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c +# input_hash: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae channels: - conda-forge @@ -50,7 +50,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - dill=0.4.0=pyhd8ed1ab_0 - - discretize=0.11.2=py312hbaa7e33_1 + - discretize=0.11.3=py312hbaa7e33_0 - distributed=2025.3.0=pyhd8ed1ab_0 - docutils=0.18.1=py312h2e8e312_0 - exceptiongroup=1.3.0=pyhd8ed1ab_0 @@ -61,7 +61,7 @@ dependencies: - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hbaa7e33_0 - - greenlet=3.2.2=py312h275cf98_0 + - greenlet=3.2.3=py312h275cf98_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - h5py=3.13.0=nompi_py312h4e244af_101 @@ -171,7 +171,7 @@ dependencies: - openssl=3.5.0=ha4e3fda_1 - overrides=7.7.0=pyhd8ed1ab_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py312h72972c8_3 + - pandas=2.3.0=py312h72972c8_0 - pandoc=3.7.0.2=h57928b3_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_1 @@ -256,7 +256,7 @@ dependencies: - tk=8.6.13=h2c6b04d_2 - toml=0.10.2=pyhd8ed1ab_1 - tomli=2.2.1=pyhd8ed1ab_1 - - tomlkit=0.13.2=pyha770c72_1 + - tomlkit=0.13.3=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_1 - tornado=6.5.1=py312h4389bb4_0 - tqdm=4.67.1=pyhd8ed1ab_1 @@ -297,7 +297,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 30311e03..f388e4c8 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: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c +# input_hash: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae channels: - conda-forge @@ -27,7 +27,7 @@ dependencies: - cytoolz=1.0.1=py312h4389bb4_0 - dask-core=2025.3.0=pyhd8ed1ab_0 - deprecated=1.2.18=pyhd8ed1ab_0 - - discretize=0.11.2=py312hbaa7e33_1 + - discretize=0.11.3=py312hbaa7e33_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - fonttools=4.58.1=py312h31fea79_0 @@ -89,7 +89,7 @@ dependencies: - openjpeg=2.5.3=h4d64b90_0 - openssl=3.5.0=ha4e3fda_1 - packaging=25.0=pyh29332c3_1 - - pandas=2.2.3=py312h72972c8_3 + - pandas=2.3.0=py312h72972c8_0 - partd=1.4.2=pyhd8ed1ab_0 - pillow=10.3.0=py312h381445a_1 - pip=25.1.1=pyh8b19718_0 @@ -146,7 +146,7 @@ dependencies: - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index af166023..6ea7e0ca 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 - linux-64: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb + win-64: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f + linux-64: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db channels: - url: conda-forge used_env_vars: [] @@ -1222,7 +1222,7 @@ package: category: dev optional: true - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: linux-64 dependencies: @@ -1233,14 +1233,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* scipy: '>=1.8' - url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.2-py310ha2bacc8_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.3-py310ha2bacc8_0.conda hash: - md5: d32664b47026c5d23de390d8b46a2701 - sha256: d065d856c25e199a77115a4d8fd54139ee699724a3f1dda6a3f45f33589a66a7 + md5: dec42d7ab3eb8ee69946eeb5de6eaeb8 + sha256: 8724a644a7170b16e11a4206062e1778ea3a4068691945017060f5d24432d5d0 category: main optional: false - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: win-64 dependencies: @@ -1251,10 +1251,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.2-py310h3e8ed56_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.3-py310h3e8ed56_0.conda hash: - md5: c9cecabe0352f8d1b7ff7e9d52df7270 - sha256: e9b03398c7bd480b6e9e287fe673bf767694bdb96cc8d95bb9500bcd25766b5e + md5: a8ba6acb343f5c9c018a89d1d64acc51 + sha256: 6275debf3044a84b85c5298540d0b208a02f0dad5357744eaa6802779ebed175 category: main optional: false - name: distributed @@ -1565,7 +1565,7 @@ package: category: main optional: false - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: linux-64 dependencies: @@ -1574,14 +1574,14 @@ package: libstdcxx: '>=13' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* - url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.2-py310hf71b8c6_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.3-py310hf71b8c6_0.conda hash: - md5: 74508d6d78a4d6728bc2dce25b5e48a5 - sha256: 7cdd88e8584b9142a54d735c71fd6d1b2d138ca738848aab26548cf6013aaf87 + md5: 8455091aed2d84aa239354f67cbdfe74 + sha256: 9d02287ff70b5734ee7a23acde4012df62f851e787aad4219d4259b591aeb054 category: dev optional: true - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: win-64 dependencies: @@ -1590,10 +1590,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.2-py310h9e98ed7_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.3-py310h9e98ed7_0.conda hash: - md5: 6a44b70dc89c6da74b21d9d39b7f5255 - sha256: b21d7033583a09092c9b54bbbc9b2d7bdf49cf245cccd2e4aa8cdf135db37868 + md5: 91c8d80e04ca8d01f79a1143f6b80392 + sha256: d5f4d8a0fc7d83baaf957966cc2e17cca82e2950d45c91bd759c09e010038bde category: dev optional: true - name: h11 @@ -5102,7 +5102,7 @@ package: category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: linux-64 dependencies: @@ -5115,14 +5115,14 @@ package: python-tzdata: '>=2022.7' python_abi: 3.10.* pytz: '>=2020.1' - url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.3.0-py310h5eaa309_0.conda hash: - md5: 07697a584fab513ce895c4511f7a2403 - sha256: 43fd80e57ebc9e0c00d169aafce533c49359174dea327a7fa8ca7454628a56f7 + md5: 379844614e3a24e59e59d8c69c6e9403 + sha256: 7d1ab7bdc471df8059a3787f05dd04371a8d7f2672999a784427f9aee59513ee category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: win-64 dependencies: @@ -5135,10 +5135,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_3.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.3.0-py310hb4db72f_0.conda hash: - md5: 60c6ae5813eb1cbc4f7774fb69623db8 - sha256: fa3986017273899fd21aa14a524469bedac3923e2ecfdfdba59a34769b56b9b8 + md5: 8ecb05a061225c9fd9bb65b9a5f7297c + sha256: 8a7887e2532c928de70e9051b6d34772642200cfafca7e7aed59c63f630d09c9 category: main optional: false - name: pandoc @@ -7584,27 +7584,27 @@ package: category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: toolz @@ -8531,7 +8531,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: linux-64 dependencies: @@ -8543,16 +8543,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: win-64 dependencies: @@ -8564,12 +8564,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: octree-creation-app diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index 225b51c4..bfe080d6 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad - linux-64: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 + win-64: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 + linux-64: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 channels: - url: conda-forge used_env_vars: [] @@ -1246,7 +1246,7 @@ package: category: dev optional: true - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: linux-64 dependencies: @@ -1257,14 +1257,14 @@ package: python: '>=3.11,<3.12.0a0' python_abi: 3.11.* scipy: '>=1.8' - url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.2-py311h5b7b71f_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.3-py311h5b7b71f_0.conda hash: - md5: 46691a03f4c2317ec8c798dc8575bf48 - sha256: 147f8e5403fe7cc0cab3eb8e5cb362347728fe5e485e7c6ca76f5139447b1960 + md5: a7407d831a3b494a143c5e69f83fb0a8 + sha256: 68c39916cff90c5ddf30144096189f3b54d41507dd85023543f03d7cfd5851b4 category: main optional: false - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: win-64 dependencies: @@ -1275,10 +1275,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.2-py311h9b10771_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.3-py311h9b10771_0.conda hash: - md5: 67a5b84650218196cfef1b647c6a9140 - sha256: 0bda0975ae4898c3887be171c9888fd57a20379c129e3149a4708c9d3edf5a2b + md5: 7de8d3ea58f928e4507713d7b35ce1d9 + sha256: 0499b57534162b58677de77dbb0c3dc11dd17ee27043ae5871db2d89e27b8e0d category: main optional: false - name: distributed @@ -1589,7 +1589,7 @@ package: category: main optional: false - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: linux-64 dependencies: @@ -1598,14 +1598,14 @@ package: libstdcxx: '>=13' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* - url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.2-py311hfdbb021_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.3-py311hfdbb021_0.conda hash: - md5: 34b4bcafb8cb6851446a41ed6f23c40c - sha256: 141a48e6e04ca32cd22d698b07c44760cba95820ad7ccfaeefbc80a5b0a73d49 + md5: 6da38c50cd487d2e2b98f8421bbe0f6a + sha256: 29b46ef4338f297987bbaada35bada314de411d43b5a1edecb97b264214fa593 category: dev optional: true - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: win-64 dependencies: @@ -1614,10 +1614,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.2-py311hda3d55a_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.3-py311hda3d55a_0.conda hash: - md5: 435745005f95acbb0802fedb1198674a - sha256: 6d8df7d01e7fd1391f1b6dd57ec65ded3bac2d1fa81a91327d6e8cc561b249f7 + md5: 00d29571d33ae7e1c74486a3e53a953a + sha256: ee485694a61f45822deca736b6b16eed55dc2fdc0e3fc5ede7c52aed98756795 category: dev optional: true - name: h11 @@ -5156,7 +5156,7 @@ package: category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: linux-64 dependencies: @@ -5169,14 +5169,14 @@ package: python-tzdata: '>=2022.7' python_abi: 3.11.* pytz: '>=2020.1' - url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.2.3-py311h7db5c69_3.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.3.0-py311h7db5c69_0.conda hash: - md5: c9f8fe78840d5c04e61666474bd739b2 - sha256: 98cd49bfc4b803d950f9dbc4799793903aec1eaacd388c244a0b46d644159831 + md5: 805040d254f51cb15df55eff6e213d09 + sha256: 402602238308e04062e599b2df0984ed77beca8f9fe49cc78559cc716d816e2d category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: win-64 dependencies: @@ -5189,10 +5189,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.2.3-py311hcf9f919_3.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.3.0-py311hcf9f919_0.conda hash: - md5: 84c8b4aab176baefd352cd34f7e69469 - sha256: 7aabb8d23a6817844a7f1b402e7e147e341cade5f470a908b8239f969c7b681c + md5: 5856ab7c6cd759b51b7d80ad0b7b92e7 + sha256: b785d7a6d3146b4b9b13d200bb410ba2db31fa69da500e47be8e9f617e34d170 category: main optional: false - name: pandoc @@ -7638,27 +7638,27 @@ package: category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: toolz @@ -8616,7 +8616,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: linux-64 dependencies: @@ -8628,16 +8628,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: win-64 dependencies: @@ -8649,12 +8649,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: octree-creation-app diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index b9b1aa91..7d1a8131 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: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c - linux-64: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e + win-64: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae + linux-64: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e channels: - url: conda-forge used_env_vars: [] @@ -1246,7 +1246,7 @@ package: category: dev optional: true - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: linux-64 dependencies: @@ -1257,14 +1257,14 @@ package: python: '>=3.12,<3.13.0a0' python_abi: 3.12.* scipy: '>=1.8' - url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.2-py312hc39e661_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/discretize-0.11.3-py312hc39e661_0.conda hash: - md5: e9c071bcefeb0f70dd18a20f88bb844f - sha256: 605ee14cdad67f8797a54853d8030295b522ba478e6759a5bc1f4fec3ac2e225 + md5: f4156fbef76257cc385c0ad71444079c + sha256: ff530b6e50d2b9bc8f60f7261987abccc97afe868b35b70479a47f0edd3fe2bb category: main optional: false - name: discretize - version: 0.11.2 + version: 0.11.3 manager: conda platform: win-64 dependencies: @@ -1275,10 +1275,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.2-py312hbaa7e33_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/discretize-0.11.3-py312hbaa7e33_0.conda hash: - md5: 43aa663b1fd1787fbbeca5a9a954dc57 - sha256: 259979385edfa18bcbb5b9776490d53026a6bfaf6f738369b49b0a0b2a839303 + md5: 95022b30369053ba80ed47dc00ebc0e3 + sha256: 61a69ffd1484d45d4adf21d1bb4b13e3cf65a74570b7694563ff45376ee9d222 category: main optional: false - name: distributed @@ -1589,7 +1589,7 @@ package: category: main optional: false - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: linux-64 dependencies: @@ -1598,14 +1598,14 @@ package: libstdcxx: '>=13' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.2-py312h2ec8cdc_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/greenlet-3.2.3-py312h2ec8cdc_0.conda hash: - md5: 57479f460e512017f9e94299fabac297 - sha256: df5365f7ea6ab7650de17a762341bdfed9a68717f9ac01839337ff56a37dfd01 + md5: 78380a74e2375eb8244290e181b2738b + sha256: 99a0e1937ba0a6ec31802d7d732270873ee39f5ad9235626d21dc0edcb3840b6 category: dev optional: true - name: greenlet - version: 3.2.2 + version: 3.2.3 manager: conda platform: win-64 dependencies: @@ -1614,10 +1614,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.2-py312h275cf98_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/greenlet-3.2.3-py312h275cf98_0.conda hash: - md5: f3198cf88db3e3f205c3c0ff239ed754 - sha256: 96a59518acb0e91a782e9dc429d7d298d6a1d4b5995041aa5d375c596be3d801 + md5: 0697d4cc1f64299d43f26dbdfc2c6ee1 + sha256: dc86c99941221b6c056407934a46de85fddc8ef1d4c1d031f8819d8f957f61c9 category: dev optional: true - name: h11 @@ -5156,7 +5156,7 @@ package: category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: linux-64 dependencies: @@ -5169,14 +5169,14 @@ package: python-tzdata: '>=2022.7' python_abi: 3.12.* pytz: '>=2020.1' - url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda + url: https://repo.prefix.dev/conda-forge/linux-64/pandas-2.3.0-py312hf9745cd_0.conda hash: - md5: 2979458c23c7755683a0598fb33e7666 - sha256: b0bed36b95757bbd269d30b2367536b802158bdf7947800ee7ae55089cfa8b9c + md5: ac82ac336dbe61106e21fb2e11704459 + sha256: 44f5587c1e1a9f0257387dd18735bcf65a67a6089e723302dc7947be09d9affe category: main optional: false - name: pandas - version: 2.2.3 + version: 2.3.0 manager: conda platform: win-64 dependencies: @@ -5189,10 +5189,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.2.3-py312h72972c8_3.conda + url: https://repo.prefix.dev/conda-forge/win-64/pandas-2.3.0-py312h72972c8_0.conda hash: - md5: 08b4650b022c9f3233d45f231fb9471f - sha256: 86fe04c5f0dcae3644e3d2d892ddf6760d89eeb8fe1a31ef30290ac5a6a9f125 + md5: e2ab2d8cc52281c9ebe19451936802eb + sha256: e4c8a685cfa1334a566b642523c9584d79ba78ed05888c7b7809d9116b6e9e25 category: main optional: false - name: pandoc @@ -7638,27 +7638,27 @@ package: category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: tomlkit - version: 0.13.2 + version: 0.13.3 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda hash: - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 category: dev optional: true - name: toolz @@ -8616,7 +8616,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: linux-64 dependencies: @@ -8628,16 +8628,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev28+g447de6c5c + version: 0.23.0.1a5.dev29+g02100624a manager: pip platform: win-64 dependencies: @@ -8649,12 +8649,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 hash: - sha256: 447de6c5c257883c4eea045cb3372bf6a1051ad1 + sha256: 02100624a89f3acdf5757da69051e0e69ce27843 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@447de6c5c257883c4eea045cb3372bf6a1051ad1 + url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 category: main optional: false - name: octree-creation-app diff --git a/pyproject.toml b/pyproject.toml index e1a46b02..a799e606 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,7 +84,7 @@ octree-creation-app = {git = "https://github.com/MiraGeoscience/octree-creation- geoapps-utils = {git = "https://github.com/MiraGeoscience/geoapps-utils.git", rev = "develop"} #mira-simpeg = {version = ">=0.23.0.1b1, <0.23.1.dev", 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-2232", extras = ["dask"]} #param-sweeps = {version = ">=0.3.0a, <0.4.dev", source = "pypi", allow-prereleases = true} param-sweeps = {git = "https://github.com/MiraGeoscience/param-sweeps.git", rev = "develop"} From 2d90a896b3c9f62170ea7648d0117795a8876a46 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 19:04:07 -0700 Subject: [PATCH 26/59] Bulk adjust tests --- tests/data_test.py | 6 ++-- tests/driver_test.py | 11 ++++--- tests/locations_test.py | 4 +-- tests/meshes_test.py | 2 +- tests/models_test.py | 4 +-- .../driver_2d_rotated_gradients_test.py | 8 ++--- .../run_tests/driver_airborne_tem_1d_test.py | 8 ++--- tests/run_tests/driver_dc_2d_test.py | 8 ++--- tests/run_tests/driver_dc_b2d_test.py | 8 ++--- tests/run_tests/driver_dc_test.py | 16 ++++------ tests/run_tests/driver_fem_test.py | 12 ++++---- tests/run_tests/driver_ground_tem_test.py | 12 ++++---- tests/run_tests/driver_ip_2d_test.py | 8 ++--- tests/run_tests/driver_ip_b2d_test.py | 6 ++-- tests/run_tests/driver_ip_test.py | 8 ++--- .../driver_joint_cross_gradient_test.py | 30 ++++++++----------- .../driver_joint_pgi_homogeneous_test.py | 20 ++++++------- tests/run_tests/driver_joint_surveys_test.py | 13 ++++---- tests/run_tests/driver_mag_automesh_test.py | 5 ++-- tests/run_tests/driver_mt_test.py | 12 ++++---- .../driver_rotated_gradients_test.py | 9 ++---- tests/run_tests/driver_tile_estimator_test.py | 4 +-- tests/run_tests/driver_tipper_test.py | 10 +++---- tests/run_tests/sensitivity_cutoff_test.py | 5 ++-- tests/topography_test.py | 2 +- tests/uijson_test.py | 2 +- 26 files changed, 107 insertions(+), 126 deletions(-) diff --git a/tests/data_test.py b/tests/data_test.py index 5f01de33..f914ff97 100644 --- a/tests/data_test.py +++ b/tests/data_test.py @@ -46,11 +46,11 @@ def get_mvi_params(tmp_path: Path, **kwargs) -> MVIInversionOptions: tmi_channel = survey.add_data( {"tmi": {"values": np.random.rand(survey.n_vertices)}} ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, mesh=model.parent, starting_model=model, **kwargs, @@ -115,7 +115,7 @@ def test_survey_data(tmp_path: Path): active_cells = ActiveCellsOptions( topography_object=test_topo_object, topography=topo ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=workspace, data_object=test_data_object, active_cells=active_cells, diff --git a/tests/driver_test.py b/tests/driver_test.py index 03b69ea6..243aab26 100644 --- a/tests/driver_test.py +++ b/tests/driver_test.py @@ -35,11 +35,11 @@ def test_smallness_terms(tmp_path: Path): with geoh5.open(): gz = survey.add_data({"gz": {"values": np.ones(survey.n_vertices)}}) mesh = model.parent - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=gz.parent, starting_model=1e-4, reference_model=0.0, @@ -76,11 +76,10 @@ def test_target_chi(tmp_path: Path, caplog): with geoh5.open(): gz = survey.add_data({"gz": {"values": np.ones(survey.n_vertices)}}) mesh = model.parent - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=gz.parent, gz_channel=gz, gz_uncertainty=2e-3, diff --git a/tests/locations_test.py b/tests/locations_test.py index b654cdc7..cf10d284 100644 --- a/tests/locations_test.py +++ b/tests/locations_test.py @@ -36,12 +36,12 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: tmi_channel = survey.add_data( {"tmi": {"values": np.random.rand(survey.n_vertices)}} ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, tmi_uncertainty=1.0, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, mesh=model.parent, starting_model=model, ) diff --git a/tests/meshes_test.py b/tests/meshes_test.py index e8a02391..4b09f949 100644 --- a/tests/meshes_test.py +++ b/tests/meshes_test.py @@ -47,7 +47,7 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: {"elevation": {"values": topography.vertices[:, 2]}} ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, diff --git a/tests/models_test.py b/tests/models_test.py index d8208574..a61cfee8 100644 --- a/tests/models_test.py +++ b/tests/models_test.py @@ -48,7 +48,7 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: elevation = topography.add_data( {"elevation": {"values": topography.vertices[:, 2]}} ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, @@ -89,7 +89,7 @@ def test_collection(tmp_path: Path): models.remove_air(driver.models.active_cells) starting = InversionModel(driver, "starting", is_vector=True) starting.remove_air(driver.models.active_cells) - np.testing.assert_allclose(models.starting, starting.model, atol=1e-7) + np.testing.assert_allclose(models.starting_model, starting.model, atol=1e-7) def test_initialize(tmp_path: Path): diff --git a/tests/run_tests/driver_2d_rotated_gradients_test.py b/tests/run_tests/driver_2d_rotated_gradients_test.py index 74a3790e..0c62a3c3 100644 --- a/tests/run_tests/driver_2d_rotated_gradients_test.py +++ b/tests/run_tests/driver_2d_rotated_gradients_test.py @@ -64,7 +64,7 @@ def test_dc2d_rotated_grad_fwr_run( line_object=geoh5.get_entity("line_ids")[0], line_id=101, ) - params = DC2DForwardOptions( + params = DC2DForwardOptions.build( geoh5=geoh5, data_object=survey, line_selection=line_selection, @@ -77,7 +77,7 @@ def test_dc2d_rotated_grad_fwr_run( expansion_factor=1.1, ), starting_model=model, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, ) fwr_driver = DC2DForwardDriver(params) fwr_driver.run() @@ -118,7 +118,7 @@ def test_dc2d_rotated_grad_run( ) # Run the inverse - params = DC2DInversionOptions( + params = DC2DInversionOptions.build( geoh5=geoh5, drape_model=DrapeModelOptions( u_cell_size=5.0, @@ -128,7 +128,7 @@ def test_dc2d_rotated_grad_run( vertical_padding=100.0, expansion_factor=1.1, ), - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, line_selection=LineSelectionOptions( line_object=geoh5.get_entity("line_ids")[0], line_id=101, diff --git a/tests/run_tests/driver_airborne_tem_1d_test.py b/tests/run_tests/driver_airborne_tem_1d_test.py index bddf1d09..3f706843 100644 --- a/tests/run_tests/driver_airborne_tem_1d_test.py +++ b/tests/run_tests/driver_airborne_tem_1d_test.py @@ -55,10 +55,10 @@ def test_airborne_tem_1d_fwr_run( padding_distance=400.0, flatten=False, ) - params = TDEM1DForwardOptions( + params = TDEM1DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, z_channel_bool=True, @@ -127,10 +127,10 @@ def test_airborne_tem_1d_run(tmp_path: Path, max_iterations=1, pytest=True): orig_dBzdt = geoh5.get_entity("Iteration_0_z_[0]")[0].values # Run the inverse - params = TDEM1DInversionOptions( + params = TDEM1DInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=5e-1, reference_model=1e-1, diff --git a/tests/run_tests/driver_dc_2d_test.py b/tests/run_tests/driver_dc_2d_test.py index 3edd585d..bb22b669 100644 --- a/tests/run_tests/driver_dc_2d_test.py +++ b/tests/run_tests/driver_dc_2d_test.py @@ -66,7 +66,7 @@ def test_dc_2d_fwr_run( line_object=geoh5.get_entity("line_ids")[0], line_id=101, ) - params = DC2DForwardOptions( + params = DC2DForwardOptions.build( geoh5=geoh5, data_object=survey, line_selection=line_selection, @@ -79,7 +79,7 @@ def test_dc_2d_fwr_run( expansion_factor=1.1, ), starting_model=model, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, ) fwr_driver = DC2DForwardDriver(params) fwr_driver.run() @@ -95,7 +95,7 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True): topography = geoh5.get_entity("topography")[0] # Run the inverse - params = DC2DInversionOptions( + params = DC2DInversionOptions.build( geoh5=geoh5, drape_model=DrapeModelOptions( u_cell_size=5.0, @@ -105,7 +105,7 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True): vertical_padding=100.0, expansion_factor=1.1, ), - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, line_selection=LineSelectionOptions( line_object=geoh5.get_entity("line_ids")[0], line_id=101, diff --git a/tests/run_tests/driver_dc_b2d_test.py b/tests/run_tests/driver_dc_b2d_test.py index 5368b407..cffd0337 100644 --- a/tests/run_tests/driver_dc_b2d_test.py +++ b/tests/run_tests/driver_dc_b2d_test.py @@ -61,7 +61,7 @@ def test_dc_p3d_fwr_run( drape_height=0.0, flatten=False, ) - params = DCBatch2DForwardOptions( + params = DCBatch2DForwardOptions.build( geoh5=geoh5, mesh=model.parent, drape_model=DrapeModelOptions( @@ -72,7 +72,7 @@ def test_dc_p3d_fwr_run( horizontal_padding=1000.0, vertical_padding=1000.0, ), - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, line_selection=LineSelectionOptions( @@ -99,7 +99,7 @@ def test_dc_p3d_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - params = DCBatch2DInversionOptions( + params = DCBatch2DInversionOptions.build( geoh5=geoh5, mesh=mesh, drape_model=DrapeModelOptions( @@ -110,7 +110,7 @@ def test_dc_p3d_run( horizontal_padding=1000.0, vertical_padding=1000.0, ), - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=potential.parent, potential_channel=potential, potential_uncertainty=1e-3, diff --git a/tests/run_tests/driver_dc_test.py b/tests/run_tests/driver_dc_test.py index c13e64c6..f844c80c 100644 --- a/tests/run_tests/driver_dc_test.py +++ b/tests/run_tests/driver_dc_test.py @@ -65,12 +65,10 @@ def test_dc_3d_fwr_run( survey.ab_cell_id = tx_id survey.cells = cells - active_cells = ActiveCellsOptions(topography_object=topography) - - params = DC3DForwardOptions( + params = DC3DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) @@ -94,11 +92,10 @@ def test_dc_3d_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - params = DC3DInversionOptions( + params = DC3DInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=potential.parent, starting_model=1e-2, reference_model=1e-2, @@ -156,11 +153,10 @@ def test_dc_single_line_fwr_run( inversion_type="dcip", flatten=False, ) - active_cells = ActiveCellsOptions(topography_object=topography) - params = DC3DForwardOptions( + params = DC3DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) diff --git a/tests/run_tests/driver_fem_test.py b/tests/run_tests/driver_fem_test.py index 6f9054f4..720e8e3d 100644 --- a/tests/run_tests/driver_fem_test.py +++ b/tests/run_tests/driver_fem_test.py @@ -52,10 +52,10 @@ def test_fem_name_change(tmp_path, caplog): inversion_type="fdem", ) with caplog.at_level(logging.WARNING): - FDEMForwardOptions( + FDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, z_real_channel_bool=True, @@ -85,10 +85,10 @@ def test_fem_fwr_run( inversion_type="fdem", flatten=True, ) - params = FDEMForwardOptions( + params = FDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, z_real_channel_bool=True, @@ -154,10 +154,10 @@ def test_fem_run(tmp_path: Path, max_iterations=1, pytest=True): orig_z_real_1 = geoh5.get_entity("Iteration_0_z_real_[0]")[0].values # Run the inverse - params = FDEMInversionOptions( + params = FDEMInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=1e-3, reference_model=1e-3, diff --git a/tests/run_tests/driver_ground_tem_test.py b/tests/run_tests/driver_ground_tem_test.py index 38b2d8ac..1313687d 100644 --- a/tests/run_tests/driver_ground_tem_test.py +++ b/tests/run_tests/driver_ground_tem_test.py @@ -60,10 +60,10 @@ def test_tiling_ground_tem( flatten=True, ) - params = TDEMForwardOptions( + params = TDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, x_channel_bool=True, @@ -107,10 +107,10 @@ def test_ground_tem_fwr_run( padding_distance=1000.0, flatten=True, ) - params = TDEMForwardOptions( + params = TDEMForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, x_channel_bool=True, @@ -192,10 +192,10 @@ def test_ground_tem_run(tmp_path: Path, max_iterations=1, pytest=True): orig_dBzdt = geoh5.get_entity("Iteration_0_z_[0]")[0].values # Run the inverse - params = TDEMInversionOptions( + params = TDEMInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=1e-3, reference_model=1e-3, diff --git a/tests/run_tests/driver_ip_2d_test.py b/tests/run_tests/driver_ip_2d_test.py index 26daff56..ff72cee6 100644 --- a/tests/run_tests/driver_ip_2d_test.py +++ b/tests/run_tests/driver_ip_2d_test.py @@ -52,11 +52,11 @@ def test_ip_2d_fwr_run( flatten=False, drape_height=0.0, ) - params = IP2DForwardOptions( + params = IP2DForwardOptions.build( geoh5=geoh5, data_object=survey, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, starting_model=model, conductivity_model=1e2, model_type="Resistivity (Ohm-m)", @@ -85,10 +85,10 @@ def test_ip_2d_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - params = IP2DInversionOptions( + params = IP2DInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=chargeability.parent, chargeability_channel=chargeability, chargeability_uncertainty=2e-4, diff --git a/tests/run_tests/driver_ip_b2d_test.py b/tests/run_tests/driver_ip_b2d_test.py index f19ad257..0e344019 100644 --- a/tests/run_tests/driver_ip_b2d_test.py +++ b/tests/run_tests/driver_ip_b2d_test.py @@ -61,7 +61,7 @@ def test_ip_p3d_fwr_run( flatten=False, ) - params = IPBatch2DForwardOptions( + params = IPBatch2DForwardOptions.build( geoh5=geoh5, mesh=model.parent, drape_model=DrapeModelOptions( @@ -103,7 +103,7 @@ def test_ip_p3d_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - params = IPBatch2DInversionOptions( + params = IPBatch2DInversionOptions.build( geoh5=geoh5, mesh=mesh, drape_model=DrapeModelOptions( @@ -114,7 +114,7 @@ def test_ip_p3d_run( horizontal_padding=1000.0, vertical_padding=1000.0, ), - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=chargeability.parent, chargeability_channel=chargeability, chargeability_uncertainty=2e-4, diff --git a/tests/run_tests/driver_ip_test.py b/tests/run_tests/driver_ip_test.py index c191590e..13efe9d8 100644 --- a/tests/run_tests/driver_ip_test.py +++ b/tests/run_tests/driver_ip_test.py @@ -51,10 +51,10 @@ def test_ip_3d_fwr_run( inversion_type="induced polarization 3d", flatten=False, ) - params = IP3DForwardOptions( + params = IP3DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, conductivity_model=1e-2, @@ -80,10 +80,10 @@ def test_ip_3d_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - params = IP3DInversionOptions( + params = IP3DInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=potential.parent, conductivity_model=1e2, model_type="Resistivity (Ohm-m)", diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index cbf3cdfb..d2ff6017 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -66,11 +66,10 @@ def test_joint_cross_gradient_fwr_run( n_electrodes=n_grid_points, n_lines=n_grid_points, ) - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) @@ -89,10 +88,10 @@ def test_joint_cross_gradient_fwr_run( flatten=False, ) inducing_field = (50000.0, 90.0, 0.0) - params = MVIForwardOptions( + params = MVIForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], @@ -115,10 +114,10 @@ def test_joint_cross_gradient_fwr_run( flatten=False, ) - params = DC3DForwardOptions( + params = DC3DForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, ) @@ -184,13 +183,11 @@ def test_joint_cross_gradient_inv_run( orig_data.append(data.values) if group.options["inversion_type"] == "gravity": - data.values = data.values + np.random.randn(data.values.size) * 1e-2 - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, alpha_s=1.0, - active_cells=active_cells, + topography_object=topography, data_object=survey, gz_channel=data, gz_uncertainty=1e-2, @@ -200,12 +197,11 @@ def test_joint_cross_gradient_inv_run( drivers.append(GravityInversionDriver(params)) elif group.options["inversion_type"] == "direct current 3d": data.values = data.values + np.random.randn(data.values.size) * 5e-4 - active_cells = ActiveCellsOptions(topography_object=topography) - params = DC3DInversionOptions( + params = DC3DInversionOptions.build( geoh5=geoh5, mesh=mesh, alpha_s=1.0, - active_cells=active_cells, + topography_object=topography, data_object=survey, potential_channel=data, model_type="Resistivity (Ohm-m)", @@ -219,11 +215,11 @@ def test_joint_cross_gradient_inv_run( drivers.append(DC3DInversionDriver(params)) else: data.values = data.values + np.random.randn(data.values.size) * 10.0 - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, mesh=mesh, alpha_s=1.0, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, inducing_field_strength=group.options["inducing_field_strength"][ "value" ], @@ -245,7 +241,7 @@ def test_joint_cross_gradient_inv_run( # Run the inverse joint_params = JointCrossGradientOptions( geoh5=geoh5, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, group_a=drivers[0].params.out_group, group_a_multiplier=1.0, group_b=drivers[1].params.out_group, diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 1b06d0c6..6434a93f 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -78,11 +78,10 @@ def test_homogeneous_fwr_run( ind = mesh.centroids[:, 0] > 0 model.values[ind] = 0.05 - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) @@ -105,10 +104,10 @@ def test_homogeneous_fwr_run( ind = mesh.centroids[:, 0] > 0 model.values[ind] = 0.01 - params = MVIForwardOptions( + params = MVIForwardOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], @@ -196,11 +195,10 @@ def test_homogeneous_run( ref_model.values = ref_model.values / 2.0 if group.options["inversion_type"] == "gravity": - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=survey, gz_channel=data, gz_uncertainty=1e-2, @@ -209,10 +207,10 @@ def test_homogeneous_run( ) drivers.append(GravityInversionDriver(params)) else: - params = MagneticInversionOptions( + params = MagneticInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, inducing_field_strength=group.options["inducing_field_strength"][ "value" ], @@ -232,7 +230,7 @@ def test_homogeneous_run( drivers.append(MagneticInversionDriver(params)) params = JointPetrophysicsOptions( - active_cells=active_cells, + topography_object=topography, geoh5=geoh5, group_a=drivers[0].params.out_group, group_a_multiplier=1.0, diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py index 214aceb2..5dd95f95 100644 --- a/tests/run_tests/driver_joint_surveys_test.py +++ b/tests/run_tests/driver_joint_surveys_test.py @@ -46,11 +46,10 @@ def test_joint_surveys_fwr_run( n_electrodes=n_grid_points, n_lines=n_grid_points, ) - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) @@ -72,12 +71,10 @@ def test_joint_surveys_fwr_run( geoh5=geoh5, drape_height=10.0, ) - active_cells = ActiveCellsOptions(topography_object=topography) - - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, + topography_object=topography, data_object=survey, starting_model=model, ) @@ -129,7 +126,7 @@ def test_joint_surveys_inv_run( gz = survey.get_data("Iteration_0_gz")[0] orig_data.append(gz.values) active_cells = ActiveCellsOptions(active_model=active_model) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, active_cells=active_cells, diff --git a/tests/run_tests/driver_mag_automesh_test.py b/tests/run_tests/driver_mag_automesh_test.py index 8ac5db4d..1ff96236 100644 --- a/tests/run_tests/driver_mag_automesh_test.py +++ b/tests/run_tests/driver_mag_automesh_test.py @@ -48,12 +48,11 @@ def test_automesh( flatten=False, ) inducing_field = (49999.8, 90.0, 0.0) - active_cells = ActiveCellsOptions(topography_object=topography) - params = MagneticForwardOptions( + params = MagneticForwardOptions.build( forward_only=True, geoh5=geoh5, mesh=None, - active_cells=active_cells, + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py index e9cb1b04..5ee3bdc6 100644 --- a/tests/run_tests/driver_mt_test.py +++ b/tests/run_tests/driver_mt_test.py @@ -104,10 +104,10 @@ def test_magnetotellurics_fwr_run( inversion_type="magnetotellurics", flatten=False, ) - params = MTForwardOptions( + params = MTForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, background_conductivity=1e-2, @@ -149,10 +149,10 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True): orig_zyy_real_1 = geoh5.get_entity("Iteration_0_zyy_real_[0]")[0].values # Run the inverse - params = MTInversionOptions( + params = MTInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=100.0, reference_model=100.0, @@ -191,10 +191,10 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True): # test that one channel works data_kwargs = {k: v for k, v in data_kwargs.items() if "zxx_real" in k} geoh5.open() - params = MTInversionOptions( + params = MTInversionOptions.build( geoh5=geoh5, mesh=geoh5.get_entity("mesh")[0], - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=0.01, background_conductivity=1e-2, diff --git a/tests/run_tests/driver_rotated_gradients_test.py b/tests/run_tests/driver_rotated_gradients_test.py index ec6664b8..aa6cd026 100644 --- a/tests/run_tests/driver_rotated_gradients_test.py +++ b/tests/run_tests/driver_rotated_gradients_test.py @@ -55,11 +55,9 @@ def test_gravity_rotated_grad_fwr_run( flatten=False, ) - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityForwardOptions( + params = GravityForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=active_cells, topography_object=topography, data_object=survey, starting_model=model, @@ -103,11 +101,10 @@ def test_rotated_grad_run( topography = geoh5.get_entity("topography")[0] # Run the inverse - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=gz.parent, gradient_rotation=pg, starting_model=1e-4, diff --git a/tests/run_tests/driver_tile_estimator_test.py b/tests/run_tests/driver_tile_estimator_test.py index ddb0ae92..93617415 100644 --- a/tests/run_tests/driver_tile_estimator_test.py +++ b/tests/run_tests/driver_tile_estimator_test.py @@ -46,10 +46,10 @@ def test_tile_estimator_run( "tmi": {"values": np.random.rand(survey.n_vertices)}, } ) - params = MagneticInversionOptions( + params = MagneticInversionOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, inducing_field_strength=inducing_field[0], inducing_field_inclination=inducing_field[1], inducing_field_declination=inducing_field[2], diff --git a/tests/run_tests/driver_tipper_test.py b/tests/run_tests/driver_tipper_test.py index d87f2a4a..16416743 100644 --- a/tests/run_tests/driver_tipper_test.py +++ b/tests/run_tests/driver_tipper_test.py @@ -55,10 +55,10 @@ def test_tipper_fwr_run( flatten=False, ) - params = TipperForwardOptions( + params = TipperForwardOptions.build( geoh5=geoh5, mesh=model.parent, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=model, model_type="Resistivity (Ohm-m)", @@ -72,7 +72,7 @@ def test_tipper_fwr_run( fwr_driver = TipperForwardDriver(params) # Should always be returning conductivity for simpeg simulations - assert not np.any(np.exp(fwr_driver.models.starting) > 1.01) + assert not np.any(np.exp(fwr_driver.models.starting_model) > 1.01) fwr_driver.run() @@ -131,10 +131,10 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True): orig_tyz_real_1 = geoh5.get_entity("Iteration_0_tyz_real_[0]")[0].values # Run the inverse - params = TipperInversionOptions( + params = TipperInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=ActiveCellsOptions(topography_object=topography), + topography_object=topography, data_object=survey, starting_model=1e2, reference_model=1e2, diff --git a/tests/run_tests/sensitivity_cutoff_test.py b/tests/run_tests/sensitivity_cutoff_test.py index 15cc11ef..3c4d9d4a 100644 --- a/tests/run_tests/sensitivity_cutoff_test.py +++ b/tests/run_tests/sensitivity_cutoff_test.py @@ -46,11 +46,10 @@ def setup_inversion_results( with geoh5.open(): gz = survey.add_data({"gz": {"values": np.random.randn(len(survey.vertices))}}) - active_cells = ActiveCellsOptions(topography_object=topography) - params = GravityInversionOptions( + params = GravityInversionOptions.build( geoh5=geoh5, mesh=mesh, - active_cells=active_cells, + topography_object=topography, data_object=gz.parent, starting_model=1e-4, reference_model=0.0, diff --git a/tests/topography_test.py b/tests/topography_test.py index de8bebb8..4ced8b63 100644 --- a/tests/topography_test.py +++ b/tests/topography_test.py @@ -40,7 +40,7 @@ def test_get_locations(tmp_path: Path): elevation = topography.add_data( {"elevation": {"values": topography.vertices[:, 2]}} ) - params = MVIInversionOptions( + params = MVIInversionOptions.build( geoh5=geoh5, mesh=mesh, data_object=survey, diff --git a/tests/uijson_test.py b/tests/uijson_test.py index 39b1733b..59987942 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -242,7 +242,7 @@ def test_gravity_uijson(tmp_path): gz_channel = survey.add_data({"gz": {"values": np.ones(survey.n_vertices)}}) gz_uncerts = survey.add_data({"gz_unc": {"values": np.ones(survey.n_vertices)}}) - opts = GravityInversionOptions( + opts = GravityInversionOptions.build( version="old news", geoh5=geoh5, data_object=survey, From b035a9494b1b683768305cdde7c6086b001486f7 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Thu, 5 Jun 2025 19:49:09 -0700 Subject: [PATCH 27/59] Continue cleaning up of option classes --- .../factories/simulation_factory.py | 2 +- .../components/factories/source_factory.py | 2 +- .../pseudo_three_dimensions/options.py | 10 -- .../three_dimensions/options.py | 6 - .../direct_current/two_dimensions/options.py | 8 - .../pseudo_three_dimensions/options.py | 16 +- .../three_dimensions/options.py | 10 +- .../two_dimensions/options.py | 12 -- .../frequency_domain/options.py | 1 - .../frequency_domain_1d/options.py | 17 +- .../electromagnetics/time_domain/options.py | 6 - .../time_domain_1d/options.py | 18 +- .../joint/joint_petrophysics/options.py | 20 ++- simpeg_drivers/joint/joint_surveys/options.py | 8 +- simpeg_drivers/joint/options.py | 161 ++---------------- .../magnetotellurics/options.py | 7 - .../natural_sources/tipper/options.py | 8 - simpeg_drivers/options.py | 6 +- .../magnetic_scalar/options.py | 1 - .../magnetic_vector/options.py | 15 +- 20 files changed, 58 insertions(+), 276 deletions(-) diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index 404e7043..d15e6559 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -54,7 +54,7 @@ def __init__(self, params: BaseParams | BaseOptions): ]: import pymatsolver.direct as solver_module - self.solver = getattr(solver_module, params.solver_type) + self.solver = getattr(solver_module, params.compute.solver_type) def concrete_object(self): if self.factory_type in ["magnetic scalar", "magnetic vector"]: diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index efbb1fb7..be958ce7 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -132,7 +132,7 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ "declination": self.params.inducing_field_declination, } if self.factory_type in ["magnetotellurics", "tipper"]: - background = deepcopy(self.params.background_conductivity) + background = deepcopy(self.params.models.conductivit_model) if getattr(self.params, "model_type", None) == "Resistivity (Ohm-m)": background **= -1.0 diff --git a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py index 54300f91..86c94dd2 100644 --- a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py @@ -38,8 +38,6 @@ class DCBatch2DForwardOptions(BaseForwardOptions): :param line_selection: Line selection parameters. :param mesh: Optional mesh object if providing a heterogeneous model. :param drape_model: Drape model parameters common to all 2D simulations. - :param model_type: Specify whether the models are provided in resistivity - or conductivity. :param file_control: File control parameters. """ @@ -57,7 +55,6 @@ class DCBatch2DForwardOptions(BaseForwardOptions): line_selection: LineSelectionOptions mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" file_control: FileControlOptions = FileControlOptions() @@ -71,11 +68,7 @@ class DCBatch2DInversionOptions(BaseInversionOptions): :param line_selection: Line selection parameters. :param mesh: Optional mesh object if providing a heterogeneous model. :param drape_model: Drape model parameters. - :param model_type: Specify whether the models are provided in resistivity - or conductivity. :param file_control: File control parameters. - :param length_scale_y: Inactive length scale for y direction. - :param y_norm: Inactive y normalization factor. """ name: ClassVar[str] = "Direct Current Pseudo 3D Inversion" @@ -93,7 +86,4 @@ class DCBatch2DInversionOptions(BaseInversionOptions): line_selection: LineSelectionOptions mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" file_control: FileControlOptions = FileControlOptions() - length_scale_y: None = None - y_norm: None = None diff --git a/simpeg_drivers/electricals/direct_current/three_dimensions/options.py b/simpeg_drivers/electricals/direct_current/three_dimensions/options.py index 5417c484..d79d6e33 100644 --- a/simpeg_drivers/electricals/direct_current/three_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/three_dimensions/options.py @@ -25,8 +25,6 @@ class DC3DForwardOptions(BaseForwardOptions): Direct Current 3D forward options. :param potential_channel_bool: Potential channel boolean. - :param model_type: Specify whether the models are provided in - resistivity or conductivity. """ name: ClassVar[str] = "Direct Current 3D Forward" @@ -39,7 +37,6 @@ class DC3DForwardOptions(BaseForwardOptions): inversion_type: str = "direct current 3d" potential_channel_bool: bool = True - model_type: str = "Conductivity (S/m)" class DC3DInversionOptions(BaseInversionOptions): @@ -48,8 +45,6 @@ class DC3DInversionOptions(BaseInversionOptions): :param potential_channel: Potential data channel. :param potential_uncertainty: Potential data uncertainty channel. - :param model_type: Specify whether the models are provided in - resistivity or conductivity. """ name: ClassVar[str] = "Direct Current 3D Inversion" @@ -63,4 +58,3 @@ class DC3DInversionOptions(BaseInversionOptions): potential_channel: FloatData potential_uncertainty: float | FloatData | None = None - model_type: str = "Conductivity (S/m)" diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/options.py b/simpeg_drivers/electricals/direct_current/two_dimensions/options.py index e168a689..dd00320c 100644 --- a/simpeg_drivers/electricals/direct_current/two_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/two_dimensions/options.py @@ -34,8 +34,6 @@ class DC2DForwardOptions(BaseForwardOptions): :param potential_channel_bool: Potential channel boolean. :param line_selection: Line selection parameters. :param drape_model: Drape model parameters. - :param model_type: Specify whether the models are provided in - resistivity or conductivity. """ name: ClassVar[str] = "Direct Current 2D Forward" @@ -51,7 +49,6 @@ class DC2DForwardOptions(BaseForwardOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions - model_type: str = "Conductivity (S/m)" class DC2DInversionOptions(BaseInversionOptions): @@ -62,8 +59,6 @@ class DC2DInversionOptions(BaseInversionOptions): :param potential_uncertainty: Potential data uncertainty channel. :param line_selection: Line selection parameters. :param drape_model: Drape model parameters. - :param model_type: Specify whether the models are provided in - resistivity or conductivity. """ name: ClassVar[str] = "Direct Current 2D Inversion" @@ -80,6 +75,3 @@ class DC2DInversionOptions(BaseInversionOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions - model_type: str = "Conductivity (S/m)" - length_scale_y: None = None - y_norm: None = None diff --git a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py index 3d4732de..422e9fdc 100644 --- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py @@ -38,8 +38,6 @@ class IPBatch2DForwardOptions(BaseForwardOptions): :param line_selection: Line selection parameters. :param mesh: Optional mesh object if providing a heterogeneous model. :param drape_model: Drape model parameters common to all 2D simulations. - :param model_type: Specify whether the models are provided in resistivity - or conductivity. :param file_control: File control parameters. """ @@ -54,11 +52,11 @@ class IPBatch2DForwardOptions(BaseForwardOptions): data_object: PotentialElectrode chargeability_channel_bool: bool = True + line_selection: LineSelectionOptions mesh: Octree | None = None - conductivity_model: float | FloatData + drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" file_control: FileControlOptions = FileControlOptions() @@ -72,10 +70,7 @@ class IPBatch2DInversionOptions(BaseInversionOptions): :param line_selection: Line selection parameters. :param mesh: Optional mesh object if providing a heterogeneous model. :param drape_model: Drape model parameters common to all 2D simulations. - :param conductivity_model: Conductivity model. :param file_control: File control parameters. - :param length_scale_y: Inactive length scale for y direction. - :param y_norm: Inactive y normalization factor. """ name: ClassVar[str] = "Induced Polarization Pseudo 3D Inversion" @@ -91,11 +86,8 @@ class IPBatch2DInversionOptions(BaseInversionOptions): chargeability_channel: FloatData chargeability_uncertainty: float | FloatData line_selection: LineSelectionOptions + mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" - conductivity_model: float | FloatData - lower_bound: float | FloatData | None = 0.0 + file_control: FileControlOptions = FileControlOptions() - length_scale_y: None = None - y_norm: None = None diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py index ddad7421..dce8e2b6 100644 --- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py @@ -15,6 +15,7 @@ from typing import ClassVar from geoh5py.data import FloatData +from geoh5py.objects.surveys.direct_current import PotentialElectrode from simpeg_drivers import assets_path from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions @@ -25,7 +26,6 @@ class IP3DForwardOptions(BaseForwardOptions): Induced Polarization 3D forward options. :param chargeability_channel_bool: Chargeability channel boolean. - :param conductivity_model: Conductivity model. """ name: ClassVar[str] = "Induced Polarization 3D Forward" @@ -37,9 +37,8 @@ class IP3DForwardOptions(BaseForwardOptions): physical_property: str = "chargeability" inversion_type: str = "induced polarization 3d" + data_object: PotentialElectrode chargeability_channel_bool: bool = True - model_type: str = "Conductivity (S/m)" - conductivity_model: float | FloatData class IP3DInversionOptions(BaseInversionOptions): @@ -48,7 +47,6 @@ class IP3DInversionOptions(BaseInversionOptions): :param chargeability_channel: Chargeability data channel. :param chargeability_uncertainty: Chargeability data uncertainty channel. - :param conductivity_model: Conductivity model. """ name: ClassVar[str] = "Induced Polarization 3D Inversion" @@ -60,8 +58,6 @@ class IP3DInversionOptions(BaseInversionOptions): physical_property: str = "chargeability" inversion_type: str = "induced polarization 3d" + data_object: PotentialElectrode chargeability_channel: FloatData chargeability_uncertainty: float | FloatData | None = None - model_type: str = "Conductivity (S/m)" - conductivity_model: float | FloatData - lower_bound: float | FloatData | None = 0.0 diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py index 1bbef88f..a640dff2 100644 --- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py @@ -34,7 +34,6 @@ class IP2DForwardOptions(BaseForwardOptions): :param mesh: Optional mesh object if providing a heterogeneous model. :param drape_model: Drape model parameters. :param line_selection: Line selection parameters. - :param conductivity_model: Conductivity model. """ name: ClassVar[str] = "Induced Polarization 2D Forward" @@ -50,8 +49,6 @@ class IP2DForwardOptions(BaseForwardOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" - conductivity_model: float | FloatData class IP2DInversionOptions(BaseInversionOptions): @@ -62,10 +59,6 @@ class IP2DInversionOptions(BaseInversionOptions): :param chargeability_uncertainty: Chargeability data uncertainty channel. :param line_selection: Line selection parameters. :param drape_model: Drape model parameters. - :param conductivity_model: Conductivity model. - :param lower_bound: Lower bound for the inversion. - :param length_scale_y: Inactive length scale in the y direction. - :param y_norm: Inactive y normalization factor. """ name: ClassVar[str] = "Induced Polarization 2D Inversion" @@ -82,8 +75,3 @@ class IP2DInversionOptions(BaseInversionOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - model_type: str = "Conductivity (S/m)" - conductivity_model: float | FloatData - lower_bound: float | FloatData | None = 0.0 - length_scale_y: None = None - y_norm: None = None diff --git a/simpeg_drivers/electromagnetics/frequency_domain/options.py b/simpeg_drivers/electromagnetics/frequency_domain/options.py index 261b7fa1..ee264147 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain/options.py @@ -42,7 +42,6 @@ class BaseFDEMOptions(EMDataMixin): physical_property: str = "conductivity" data_object: Receivers inversion_type: str = "fdem" - model_type: str = "Conductivity (S/m)" @property def tx_offsets(self): diff --git a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py index 2ea767d9..f2455213 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py @@ -31,11 +31,9 @@ class FDEM1DForwardOptions(BaseFDEMOptions, BaseForwardOptions): """ Frequency Domain Electromagnetic forward options. - :param z_channel_bool: Z-component data channel boolean. - :param x_channel_bool: X-component data channel boolean. - :param y_channel_bool: Y-component data channel boolean. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the FEM data + :param z_real_channel_bool: Z-component data channel boolean. + :param z_imag_channel_bool: X-component data channel boolean. + :param drape_model: Drape model options. """ name: ClassVar[str] = "Frequency Domain 1D Electromagnetics Forward" @@ -65,8 +63,7 @@ class FDEM1DInversionOptions(BaseFDEMOptions, BaseInversionOptions): :param z_real_uncertainty: Real Z-component data channel uncertainty. :param z_imag_channel: Imaginary Z-component data channel. :param z_imag_uncertainty: Imaginary Z-component data channel uncertainty. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the FEM data + :param drape_model: Drape model options. """ name: ClassVar[str] = "Frequency Domain 1D Electromagnetics Inversion" @@ -83,12 +80,6 @@ class FDEM1DInversionOptions(BaseFDEMOptions, BaseInversionOptions): expansion_factor=1.1, ) - # 1D specific options - auto_scale_misfits: bool = False - sens_wts_threshold: float = 100.0 - length_scale_y: None = None - y_norm: None = None - z_real_channel: PropertyGroup | None = None z_real_uncertainty: PropertyGroup | None = None z_imag_channel: PropertyGroup | None = None diff --git a/simpeg_drivers/electromagnetics/time_domain/options.py b/simpeg_drivers/electromagnetics/time_domain/options.py index 5500c5b5..42f51a0a 100644 --- a/simpeg_drivers/electromagnetics/time_domain/options.py +++ b/simpeg_drivers/electromagnetics/time_domain/options.py @@ -37,13 +37,11 @@ class BaseTDEMOptions(EMDataMixin): :param data_object: The data object containing the TDEM data. :param physical_property: The physical property being modeled (e.g., conductivity). :param data_units: The units of the TDEM data (e.g., "dB/dt (T/s)"). - :param model_type: The type of model used (e.g., "Conductivity (S/m)"). """ data_object: Receivers physical_property: str = "conductivity" data_units: str = "dB/dt (T/s)" - model_type: str = "Conductivity (S/m)" inversion_type: str = "tdem" @property @@ -64,8 +62,6 @@ class TDEMForwardOptions(BaseTDEMOptions, BaseForwardOptions): :param z_channel_bool: Z-component data channel boolean. :param x_channel_bool: X-component data channel boolean. :param y_channel_bool: Y-component data channel boolean. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the TEM data """ name: ClassVar[str] = "Time Domain Electromagnetics Forward" @@ -88,8 +84,6 @@ class TDEMInversionOptions(BaseTDEMOptions, BaseInversionOptions): :param x_uncertainty: X-component data channel uncertainty. :param y_channel: Y-component data channel. :param y_uncertainty: Y-component data channel uncertainty. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the TEM data """ name: ClassVar[str] = "Time Domain Electromagnetics Inversion" diff --git a/simpeg_drivers/electromagnetics/time_domain_1d/options.py b/simpeg_drivers/electromagnetics/time_domain_1d/options.py index 120e40a3..6ad75c80 100644 --- a/simpeg_drivers/electromagnetics/time_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/time_domain_1d/options.py @@ -41,10 +41,7 @@ class TDEM1DForwardOptions(BaseTDEMOptions, BaseForwardOptions): Time Domain Electromagnetic forward options. :param z_channel_bool: Z-component data channel boolean. - :param x_channel_bool: X-component data channel boolean. - :param y_channel_bool: Y-component data channel boolean. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the TEM data + :param drape_model: Options for drape mesh. """ name: ClassVar[str] = "Time Domain Electromagnetics Forward" @@ -53,7 +50,7 @@ class TDEM1DForwardOptions(BaseTDEMOptions, BaseForwardOptions): title: str = "Time-domain EM-1D (TEM-1D) Forward" inversion_type: str = "tdem 1d" - z_channel_bool: bool + z_channel_bool: bool = True drape_model: DrapeModelOptions = DrapeModelOptions( u_cell_size=10.0, @@ -71,12 +68,7 @@ class TDEM1DInversionOptions(BaseTDEMOptions, BaseInversionOptions): :param z_channel: Z-component data channel. :param z_uncertainty: Z-component data channel uncertainty. - :param x_channel: X-component data channel. - :param x_uncertainty: X-component data channel uncertainty. - :param y_channel: Y-component data channel. - :param y_uncertainty: Y-component data channel uncertainty. - :param model_type: Specify whether the models are provided in resistivity or conductivity. - :param data_units: Units for the TEM data + :param drape_model: Options for drape mesh. """ name: ClassVar[str] = "Time Domain Electromagnetics Inversion" @@ -87,8 +79,6 @@ class TDEM1DInversionOptions(BaseTDEMOptions, BaseInversionOptions): z_channel: PropertyGroup | None = None z_uncertainty: PropertyGroup | None = None - length_scale_y: None = None - y_norm: None = None drape_model: DrapeModelOptions = DrapeModelOptions( u_cell_size=10.0, @@ -98,5 +88,3 @@ class TDEM1DInversionOptions(BaseTDEMOptions, BaseInversionOptions): vertical_padding=100.0, expansion_factor=1.1, ) - auto_scale_misfits: bool = False - sens_wts_threshold: float = 100.0 diff --git a/simpeg_drivers/joint/joint_petrophysics/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py index b0d0562d..70ac6e68 100644 --- a/simpeg_drivers/joint/joint_petrophysics/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -20,6 +20,17 @@ from simpeg_drivers import assets_path from simpeg_drivers.joint.options import BaseJointOptions +from simpeg_drivers.options import ModelOptions + + +class JointPetrophysicsModelOptions(ModelOptions): + """ + Model options with petrophysics reference model. + + :param petrophysics: The reference geology data. + """ + + petrophysics_model: ReferencedData class JointPetrophysicsOptions(BaseJointOptions): @@ -27,7 +38,7 @@ class JointPetrophysicsOptions(BaseJointOptions): Joint Petrophysically Guided Inversion (PGI) driver. :param mesh: The global mesh entity containing the reference geology. - :param petrophysics: The reference geology data. + :param petrophysics_model: The reference geology data. """ name: ClassVar[str] = "Petrophysically Guided Inversion (PGI)" @@ -41,10 +52,5 @@ class JointPetrophysicsOptions(BaseJointOptions): inversion_type: str = "joint petrophysics" mesh: Octree - petrophysics_model: ReferencedData - group_a: SimPEGGroup - group_a_multiplier: float | None = 1.0 - group_b: SimPEGGroup | None = None + petrophysics_model: JointPetrophysicsModelOptions group_b_multiplier: float | None = None - group_c: SimPEGGroup | None = None - group_c_multiplier: float | None = None diff --git a/simpeg_drivers/joint/joint_surveys/options.py b/simpeg_drivers/joint/joint_surveys/options.py index 79c46069..4f08c5e3 100644 --- a/simpeg_drivers/joint/joint_surveys/options.py +++ b/simpeg_drivers/joint/joint_surveys/options.py @@ -14,11 +14,11 @@ from pathlib import Path from typing import ClassVar -from geoh5py.data import FloatData from pydantic import model_validator from simpeg_drivers import assets_path from simpeg_drivers.joint.options import BaseJointOptions +from simpeg_drivers.options import ModelOptions class JointSurveysOptions(BaseJointOptions): @@ -33,11 +33,7 @@ class JointSurveysOptions(BaseJointOptions): inversion_type: str = "joint surveys" - model_type: str = "Conductivity (S/m)" - starting_model: float | FloatData - reference_model: float | FloatData | None = None - lower_bound: float | FloatData | None = None - upper_bound: float | FloatData | None = None + models: ModelOptions @model_validator(mode="after") def all_groups_same_physical_property(self): diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index 0b908c07..423e42ce 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -11,23 +11,20 @@ from __future__ import annotations -import multiprocessing -from typing import Literal +from geoh5py.groups import SimPEGGroup +from pydantic import ConfigDict -import numpy as np -from geoapps_utils.driver.data import BaseData -from geoh5py.data import FloatData -from geoh5py.groups import PropertyGroup, SimPEGGroup, UIJsonGroup -from geoh5py.objects import DrapeModel, Octree -from geoh5py.shared.utils import fetch_active_workspace -from pydantic import ConfigDict, field_validator, model_validator +from simpeg_drivers.options import ( + CoolingSceduleOptions, + CoreOptions, + DirectiveOptions, + IRLSOptions, + ModelOptions, + OptimizationOptions, +) -import simpeg_drivers -from simpeg_drivers.options import ActiveCellsOptions -from simpeg_drivers.utils.regularization import direction_and_dip - -class BaseJointOptions(BaseData): +class BaseJointOptions(CoreOptions): """ Base Joint Options. @@ -41,14 +38,6 @@ class BaseJointOptions(BaseData): model_config = ConfigDict(frozen=False) - icon: str | None = None - documentation: str | None = None - version: str = simpeg_drivers.__version__ - run_command: str = "simpeg_drivers.driver" - conda_environment: str = "simpeg-drivers" - forward_only: bool = False - physical_property: str | None = None - group_a: SimPEGGroup group_a_multiplier: float = 1.0 group_b: SimPEGGroup @@ -56,133 +45,15 @@ class BaseJointOptions(BaseData): group_c: SimPEGGroup | None = None group_c_multiplier: float | None = None - mesh: Octree | DrapeModel | None - - active_cells: ActiveCellsOptions - tile_spatial: int = 1 - parallelized: bool = True - - save_sensitivities: bool = False - n_cpu: int | None = None - max_chunk_size: int = 128 - out_group: SimPEGGroup | UIJsonGroup | None = None - generate_sweep: bool = False - distributed_workers: str | None = None - alpha_s: float | FloatData | None = 1.0 - length_scale_x: float | FloatData = 1.0 - length_scale_y: float | FloatData | None = 1.0 - length_scale_z: float | FloatData = 1.0 - gradient_rotation: PropertyGroup | None = None - s_norm: float | FloatData | None = 0.0 - x_norm: float | FloatData = 2.0 - y_norm: float | FloatData | None = 2.0 - z_norm: float | FloatData = 2.0 - gradient_type: str = "total" - max_irls_iterations: int = 25 - starting_chi_factor: float = 1.0 - - chi_factor: float = 1.0 - auto_scale_misfits: bool = True - initial_beta_ratio: float | None = 100.0 - initial_beta: float | None = None - cooling_factor: float = 2.0 - - cooling_rate: int = 1 - max_global_iterations: int = 50 - max_line_search_iterations: int = 20 - max_cg_iterations: int = 30 - tol_cg: float = 1e-4 - f_min_change: float = 1e-2 - solver_type: Literal["Pardiso", "Mumps"] = "Pardiso" - - sens_wts_threshold: float = 1e-3 - every_iteration_bool: bool = True + models: ModelOptions + irls: IRLSOptions = IRLSOptions() + directives: DirectiveOptions = DirectiveOptions() + cooling_schedule: CoolingSceduleOptions = CoolingSceduleOptions() + optimization: OptimizationOptions = OptimizationOptions() store_sensitivities: str = "ram" - beta_tol: float = 0.5 - percentile: float = 95.0 - epsilon_cooling_factor: float = 1.2 - - n_workers: int | None = 1 - n_threads: int | None = None - max_ram: float | None = None - performance_report: bool = False - @property def groups(self) -> list[SimPEGGroup]: """List all active groups.""" return [k for k in [self.group_a, self.group_b, self.group_c] if k is not None] - - @field_validator("n_cpu", mode="before") - @classmethod - def maximize_cpu_if_none(cls, value): - if value is None: - value = int(multiprocessing.cpu_count()) - return value - - @field_validator("mesh", mode="before") - @classmethod - def mesh_cannot_be_rotated(cls, value: Octree): - if isinstance(value, Octree) and value.rotation not in [0.0, None]: - raise ValueError( - "Rotated meshes are not supported. Please use a mesh with an angle of 0.0." - ) - return value - - @model_validator(mode="before") - @classmethod - def out_group_if_none(cls, data): - group = data.get("out_group", None) - - if isinstance(group, SimPEGGroup): - return data - - if isinstance(group, UIJsonGroup | type(None)): - name = ( - cls.model_fields["title"].default # pylint: disable=unsubscriptable-object - if group is None - else group.name - ) - with fetch_active_workspace(data["geoh5"], mode="r+") as geoh5: - group = SimPEGGroup.create(geoh5, name=name) - - data["out_group"] = group - - return data - - @model_validator(mode="after") - def update_out_group_options(self): - assert self.out_group is not None - with fetch_active_workspace(self.geoh5, mode="r+"): - self.out_group.options = self.serialize() - self.out_group.metadata = None - return self - - @property - def gradient_orientations(self) -> tuple(float, float): - """ - Direction and dip angles for rotated gradient regularization. - - Angles are in radians and are clockwise from North for direction - and clockwise from horizontal for dip. - """ - - if self.gradient_rotation is not None: - orientations = direction_and_dip(self.gradient_rotation) - - return np.deg2rad(orientations) - - return None - - @property - def gradient_direction(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 0] - - @property - def gradient_dip(self) -> np.ndarray: - if self.gradient_orientations is None: - return None - return self.gradient_orientations[:, 1] diff --git a/simpeg_drivers/natural_sources/magnetotellurics/options.py b/simpeg_drivers/natural_sources/magnetotellurics/options.py index ff78a043..c29889ed 100644 --- a/simpeg_drivers/natural_sources/magnetotellurics/options.py +++ b/simpeg_drivers/natural_sources/magnetotellurics/options.py @@ -34,7 +34,6 @@ class MTForwardOptions(EMDataMixin, BaseForwardOptions): :param zyx_imag_channel_bool: Boolean for zyx imaginary channel. :param zyy_real_channel_bool: Boolean for zyy real channel. :param zyy_imag_channel_bool: Boolean for zyy imaginary channel. - :param background_conductivity: Background conductivity model. :param model_type: Specify whether the models are provided in resistivity or conductivity. """ @@ -56,8 +55,6 @@ class MTForwardOptions(EMDataMixin, BaseForwardOptions): zyx_imag_channel_bool: bool | None = None zyy_real_channel_bool: bool | None = None zyy_imag_channel_bool: bool | None = None - background_conductivity: float | FloatData - model_type: str = "Conductivity (S/m)" @property def channels(self) -> list[str]: @@ -84,8 +81,6 @@ class MTInversionOptions(EMDataMixin, BaseInversionOptions): :param zyy_real_uncertainty: Real component of Zyy uncertainty. :param zyy_imag_channel: Imaginary component of Zyy data. :param zyy_imag_uncertainty: Imaginary component of Zyy uncertainty. - :param background_conductivity: Background conductivity model. - :param model_type: Specify whether the models are provided in resistivity or conductivity. """ name: ClassVar[str] = "Magnetotellurics Inversion" @@ -114,5 +109,3 @@ class MTInversionOptions(EMDataMixin, BaseInversionOptions): zyy_real_uncertainty: PropertyGroup | None = None zyy_imag_channel: PropertyGroup | None = None zyy_imag_uncertainty: PropertyGroup | None = None - background_conductivity: float | FloatData - model_type: str = "Conductivity (S/m)" diff --git a/simpeg_drivers/natural_sources/tipper/options.py b/simpeg_drivers/natural_sources/tipper/options.py index b657a0dd..765ce228 100644 --- a/simpeg_drivers/natural_sources/tipper/options.py +++ b/simpeg_drivers/natural_sources/tipper/options.py @@ -30,8 +30,6 @@ class TipperForwardOptions(EMDataMixin, BaseForwardOptions): :param txz_imag_channel_bool: Boolean for txz imaginary channel. :param tyz_real_channel_bool: Boolean for tyz real channel. :param tyz_imag_channel_bool: Boolean for tyz imaginary channel. - :param background_conductivity: Background conductivity model. - :param model_type: Specify whether the models are provided in resistivity or conductivity. """ name: ClassVar[str] = "Tipper Forward" @@ -46,8 +44,6 @@ class TipperForwardOptions(EMDataMixin, BaseForwardOptions): txz_imag_channel_bool: bool | None = None tyz_real_channel_bool: bool | None = None tyz_imag_channel_bool: bool | None = None - background_conductivity: float | FloatData - model_type: str = "Conductivity (S/m)" class TipperInversionOptions(EMDataMixin, BaseInversionOptions): @@ -62,8 +58,6 @@ class TipperInversionOptions(EMDataMixin, BaseInversionOptions): :param tyz_real_uncertainty: Real component of Tyz tipper uncertainty. :param tyz_imag_channel: Imaginary component of Tyz tipper data. :param tyz_imag_uncertainty: Imaginary component of Tyz tipper uncertainty. - :param background_conductivity: Background conductivity model. - :param model_type: Specify whether the models are provided in resistivity or conductivity. """ name: ClassVar[str] = "Tipper Inversion" @@ -82,5 +76,3 @@ class TipperInversionOptions(EMDataMixin, BaseInversionOptions): tyz_real_uncertainty: PropertyGroup | None = None tyz_imag_channel: PropertyGroup | None = None tyz_imag_uncertainty: PropertyGroup | None = None - background_conductivity: float | FloatData - model_type: str = "Conductivity (S/m)" diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 5947abe7..7366beeb 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -281,8 +281,10 @@ class ModelOptions(BaseModel): # Model options starting_model: float | FloatData reference_model: float | FloatData | None = None - conductivity_model: FloatData | None = None - petrophysical_model: FloatData | None = None + conductivity_model: float | FloatData | None = Field( + None, + validation_alias=AliasChoices("background_conductivity", "conductivity_model"), + ) lower_bound: float | FloatData | None = None upper_bound: float | FloatData | None = None diff --git a/simpeg_drivers/potential_fields/magnetic_scalar/options.py b/simpeg_drivers/potential_fields/magnetic_scalar/options.py index 3db6dfa9..1db17196 100644 --- a/simpeg_drivers/potential_fields/magnetic_scalar/options.py +++ b/simpeg_drivers/potential_fields/magnetic_scalar/options.py @@ -121,4 +121,3 @@ class MagneticInversionOptions(BaseInversionOptions): inducing_field_strength: float | FloatData inducing_field_inclination: float | FloatData inducing_field_declination: float | FloatData - lower_bound: float | FloatData | None = 0.0 diff --git a/simpeg_drivers/potential_fields/magnetic_vector/options.py b/simpeg_drivers/potential_fields/magnetic_vector/options.py index 9e8b69a5..17bd8a0b 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector/options.py @@ -31,6 +31,7 @@ class VectorModelOptions(ModelOptions): Magnetic Vector Model options. """ + lower_bound: Deprecated | None = None starting_model_inclination: float | FloatData | None = Field( None, validation_alias=AliasChoices( @@ -93,9 +94,9 @@ class MVIForwardOptions(BaseForwardOptions): byy_channel_bool: bool = False byz_channel_bool: bool = False bzz_channel_bool: bool = False - inducing_field_strength: float | FloatData = 50000.0 - inducing_field_inclination: float | FloatData = 90.0 - inducing_field_declination: float | FloatData = 0.0 + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData class MVIInversionOptions(BaseInversionOptions): @@ -162,8 +163,6 @@ class MVIInversionOptions(BaseInversionOptions): byy_uncertainty: float | FloatData | None = None byz_uncertainty: float | FloatData | None = None bzz_uncertainty: float | FloatData | None = None - inducing_field_strength: float | FloatData = 50000.0 - inducing_field_inclination: float | FloatData = 90.0 - inducing_field_declination: float | FloatData = 0.0 - - lower_bound: Deprecated | None = None + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData From ce3ebf5d51cba6e14b0a51b77794b464944f9017 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 09:21:35 -0700 Subject: [PATCH 28/59] Clean out "gradient_type" from ui_jsons --- .../uijson/direct_current_2d_inversion.ui.json | 1 - .../uijson/direct_current_3d_inversion.ui.json | 1 - .../uijson/direct_current_batch2d_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/fdem_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/gravity_forward.ui.json | 1 - simpeg_drivers-assets/uijson/gravity_inversion.ui.json | 2 -- .../uijson/induced_polarization_2d_inversion.ui.json | 1 - .../uijson/induced_polarization_3d_inversion.ui.json | 1 - .../uijson/induced_polarization_batch2d_inversion.ui.json | 1 - .../uijson/joint_cross_gradient_inversion.ui.json | 1 - .../uijson/joint_petrophysics_inversion.ui.json | 2 -- simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/tdem_inversion.ui.json | 1 - simpeg_drivers-assets/uijson/tipper_inversion.ui.json | 1 - 19 files changed, 21 deletions(-) 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 5b0d3ccf..b7ae8fab 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json @@ -342,7 +342,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function." }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", 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 77346710..c2701f7c 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json @@ -312,7 +312,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json index f798ead5..9de22370 100644 --- a/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json @@ -324,7 +324,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json index e163fe82..56f7a54c 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json @@ -347,7 +347,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json index 2254cbab..7d601306 100644 --- a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json @@ -348,7 +348,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/gravity_forward.ui.json b/simpeg_drivers-assets/uijson/gravity_forward.ui.json index be3dcfb6..fd49b8d7 100644 --- a/simpeg_drivers-assets/uijson/gravity_forward.ui.json +++ b/simpeg_drivers-assets/uijson/gravity_forward.ui.json @@ -7,7 +7,6 @@ "run_command": "simpeg_drivers.driver", "geoh5": "", "monitoring_directory": "", - "workspace_geoh5": "", "inversion_type": "gravity", "forward_only": true, "physical_property": "density", diff --git a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json index 5efc0c32..73266d23 100644 --- a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json @@ -7,7 +7,6 @@ "run_command": "simpeg_drivers.driver", "geoh5": "", "monitoring_directory": "", - "workspace_geoh5": "", "inversion_type": "gravity", "forward_only": false, "physical_property": "density", @@ -582,7 +581,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", 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 6294ff19..28174987 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json @@ -353,7 +353,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function." }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", 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 72871576..ca6acf7d 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json @@ -328,7 +328,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json index 30dc2be9..f34894ce 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json @@ -336,7 +336,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", 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 5b448f2c..18e8234f 100644 --- a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json @@ -238,7 +238,6 @@ "lineEdit": false, "enabled": false }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index 95d201b5..7ab7d224 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -7,7 +7,6 @@ "run_command": "simpeg_drivers.driver", "geoh5": "", "monitoring_directory": "", - "workspace_geoh5": "", "group_a": { "main": true, "group": "Joint", @@ -222,7 +221,6 @@ "lineEdit": false, "enabled": false }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json index 8918b092..2ffd200c 100644 --- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json @@ -317,7 +317,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json index 8ba44d51..51a372b6 100644 --- a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json @@ -613,7 +613,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json index 4e2e9aeb..0f43ece5 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json @@ -678,7 +678,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json index b06e9359..d171acef 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json @@ -533,7 +533,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json index 3b49335f..3ffd62b1 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json @@ -325,7 +325,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json index 068ef9d6..df2b9aa8 100644 --- a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json @@ -385,7 +385,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", diff --git a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json index e2038f84..2fd5c1f2 100644 --- a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json @@ -413,7 +413,6 @@ "enabled": true, "tooltip": "Lp-norm used in the z-smoothness term of the objective function" }, - "gradient_type": "total", "max_irls_iterations": { "min": 0, "group": "Sparse/blocky model", From 3f864db95b50dca923ccdd02e9e984f3cd37d161 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 09:23:46 -0700 Subject: [PATCH 29/59] Review cleanup option classes with new monde definition --- simpeg_drivers/components/models.py | 8 ++-- .../pseudo_three_dimensions/options.py | 3 ++ .../three_dimensions/options.py | 11 ++++- .../direct_current/two_dimensions/options.py | 10 +++-- .../pseudo_three_dimensions/options.py | 7 ++-- .../three_dimensions/options.py | 8 +++- .../two_dimensions/options.py | 7 +++- .../frequency_domain/options.py | 11 ++++- .../electromagnetics/time_domain/options.py | 11 ++++- .../time_domain_1d/options.py | 1 - .../joint/joint_petrophysics/options.py | 3 +- simpeg_drivers/joint/joint_surveys/options.py | 5 +-- .../magnetotellurics/options.py | 10 ++++- .../natural_sources/tipper/options.py | 9 +++- simpeg_drivers/options.py | 41 +++++++++++-------- .../magnetic_vector/options.py | 5 +-- 16 files changed, 104 insertions(+), 46 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 8437c566..cf5cc982 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -196,8 +196,8 @@ def reference_model(self) -> np.ndarray | None: @property def lower_bound(self) -> np.ndarray | None: if ( - self.driver.params.models.model_type == "Resistivity (Ohm-m)" - and self.is_sigma + self.is_sigma + and self.driver.params.models.model_type == "Resistivity (Ohm-m)" ): bound_model = self._upper_bound.model else: @@ -227,8 +227,8 @@ def lower_bound(self) -> np.ndarray | None: @property def upper_bound(self) -> np.ndarray | None: if ( - self.driver.params.models.model_type == "Resistivity (Ohm-m)" - and self.is_sigma + self.is_sigma + and self.driver.params.models.model_type == "Resistivity (Ohm-m)" ): bound_model = self._lower_bound.model else: diff --git a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py index 86c94dd2..fd1edd04 100644 --- a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/options.py @@ -24,6 +24,7 @@ from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, + ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -56,6 +57,7 @@ class DCBatch2DForwardOptions(BaseForwardOptions): mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() file_control: FileControlOptions = FileControlOptions() + models: ConductivityModelOptions class DCBatch2DInversionOptions(BaseInversionOptions): @@ -87,3 +89,4 @@ class DCBatch2DInversionOptions(BaseInversionOptions): mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() file_control: FileControlOptions = FileControlOptions() + models: ConductivityModelOptions diff --git a/simpeg_drivers/electricals/direct_current/three_dimensions/options.py b/simpeg_drivers/electricals/direct_current/three_dimensions/options.py index d79d6e33..323c0d95 100644 --- a/simpeg_drivers/electricals/direct_current/three_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/three_dimensions/options.py @@ -15,9 +15,14 @@ from typing import ClassVar from geoh5py.data import FloatData +from geoh5py.objects import PotentialElectrode from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, +) class DC3DForwardOptions(BaseForwardOptions): @@ -36,7 +41,9 @@ class DC3DForwardOptions(BaseForwardOptions): physical_property: str = "conductivity" inversion_type: str = "direct current 3d" + data_object: PotentialElectrode potential_channel_bool: bool = True + models: ConductivityModelOptions class DC3DInversionOptions(BaseInversionOptions): @@ -56,5 +63,7 @@ class DC3DInversionOptions(BaseInversionOptions): physical_property: str = "conductivity" inversion_type: str = "direct current 3d" + data_object: PotentialElectrode potential_channel: FloatData potential_uncertainty: float | FloatData | None = None + models: ConductivityModelOptions diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/options.py b/simpeg_drivers/electricals/direct_current/two_dimensions/options.py index dd00320c..544a691e 100644 --- a/simpeg_drivers/electricals/direct_current/two_dimensions/options.py +++ b/simpeg_drivers/electricals/direct_current/two_dimensions/options.py @@ -14,14 +14,14 @@ from pathlib import Path from typing import ClassVar -from geoh5py.data import DataAssociationEnum, FloatData, ReferencedData -from geoh5py.objects import DrapeModel -from pydantic import BaseModel, ConfigDict, field_validator, model_validator +from geoh5py.data import FloatData +from geoh5py.objects import DrapeModel, PotentialElectrode from simpeg_drivers import assets_path from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, + ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -45,10 +45,12 @@ class DC2DForwardOptions(BaseForwardOptions): physical_property: str = "conductivity" inversion_type: str = "direct current 2d" + data_object: PotentialElectrode potential_channel_bool: bool = True line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions + models: ConductivityModelOptions class DC2DInversionOptions(BaseInversionOptions): @@ -70,8 +72,10 @@ class DC2DInversionOptions(BaseInversionOptions): physical_property: str = "conductivity" inversion_type: str = "direct current 2d" + data_object: PotentialElectrode potential_channel: FloatData potential_uncertainty: float | FloatData | None = None line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions + models: ConductivityModelOptions diff --git a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py index 422e9fdc..99b7e066 100644 --- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py @@ -24,6 +24,7 @@ from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, + ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -52,12 +53,11 @@ class IPBatch2DForwardOptions(BaseForwardOptions): data_object: PotentialElectrode chargeability_channel_bool: bool = True - line_selection: LineSelectionOptions mesh: Octree | None = None - drape_model: DrapeModelOptions = DrapeModelOptions() file_control: FileControlOptions = FileControlOptions() + models: ConductivityModelOptions class IPBatch2DInversionOptions(BaseInversionOptions): @@ -86,8 +86,7 @@ class IPBatch2DInversionOptions(BaseInversionOptions): chargeability_channel: FloatData chargeability_uncertainty: float | FloatData line_selection: LineSelectionOptions - mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - file_control: FileControlOptions = FileControlOptions() + models: ConductivityModelOptions diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py index dce8e2b6..b7e8990d 100644 --- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py @@ -18,7 +18,11 @@ from geoh5py.objects.surveys.direct_current import PotentialElectrode from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, +) class IP3DForwardOptions(BaseForwardOptions): @@ -39,6 +43,7 @@ class IP3DForwardOptions(BaseForwardOptions): data_object: PotentialElectrode chargeability_channel_bool: bool = True + models: ConductivityModelOptions class IP3DInversionOptions(BaseInversionOptions): @@ -61,3 +66,4 @@ class IP3DInversionOptions(BaseInversionOptions): data_object: PotentialElectrode chargeability_channel: FloatData chargeability_uncertainty: float | FloatData | None = None + models: ConductivityModelOptions diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py index a640dff2..27e8d749 100644 --- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py @@ -15,12 +15,13 @@ from typing import ClassVar from geoh5py.data import FloatData -from geoh5py.objects import DrapeModel +from geoh5py.objects import DrapeModel, PotentialElectrode from simpeg_drivers import assets_path from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, + ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -45,10 +46,12 @@ class IP2DForwardOptions(BaseForwardOptions): physical_property: str = "chargeability" inversion_type: str = "induced polarization 2d" + data_object: PotentialElectrode chargeability_channel_bool: bool = True line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() + models: ConductivityModelOptions class IP2DInversionOptions(BaseInversionOptions): @@ -70,8 +73,10 @@ class IP2DInversionOptions(BaseInversionOptions): physical_property: str = "chargeability" inversion_type: str = "induced polarization 2d" + data_object: PotentialElectrode chargeability_channel: FloatData chargeability_uncertainty: float | FloatData | None = None line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() + models: ConductivityModelOptions diff --git a/simpeg_drivers/electromagnetics/frequency_domain/options.py b/simpeg_drivers/electromagnetics/frequency_domain/options.py index ee264147..70e317a0 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain/options.py @@ -24,7 +24,12 @@ from pydantic import field_validator from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions, EMDataMixin +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, + EMDataMixin, +) Receivers: TypeAlias = ( @@ -40,9 +45,11 @@ class BaseFDEMOptions(EMDataMixin): """ physical_property: str = "conductivity" - data_object: Receivers inversion_type: str = "fdem" + data_object: Receivers + models: ConductivityModelOptions + @property def tx_offsets(self): """Return transmitter offsets from frequency metadata""" diff --git a/simpeg_drivers/electromagnetics/time_domain/options.py b/simpeg_drivers/electromagnetics/time_domain/options.py index 42f51a0a..17e67237 100644 --- a/simpeg_drivers/electromagnetics/time_domain/options.py +++ b/simpeg_drivers/electromagnetics/time_domain/options.py @@ -22,7 +22,12 @@ ) from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions, EMDataMixin +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, + EMDataMixin, +) Receivers: TypeAlias = ( @@ -39,11 +44,13 @@ class BaseTDEMOptions(EMDataMixin): :param data_units: The units of the TDEM data (e.g., "dB/dt (T/s)"). """ - data_object: Receivers physical_property: str = "conductivity" data_units: str = "dB/dt (T/s)" inversion_type: str = "tdem" + data_object: Receivers + models: ConductivityModelOptions + @property def unit_conversion(self): """Return time unit conversion factor.""" diff --git a/simpeg_drivers/electromagnetics/time_domain_1d/options.py b/simpeg_drivers/electromagnetics/time_domain_1d/options.py index 6ad75c80..ba7ca7ca 100644 --- a/simpeg_drivers/electromagnetics/time_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/time_domain_1d/options.py @@ -27,7 +27,6 @@ BaseForwardOptions, BaseInversionOptions, DrapeModelOptions, - EMDataMixin, ) diff --git a/simpeg_drivers/joint/joint_petrophysics/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py index 70ac6e68..926a3097 100644 --- a/simpeg_drivers/joint/joint_petrophysics/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -15,7 +15,6 @@ from typing import ClassVar from geoh5py.data import ReferencedData -from geoh5py.groups import SimPEGGroup from geoh5py.objects import Octree from simpeg_drivers import assets_path @@ -51,6 +50,6 @@ class JointPetrophysicsOptions(BaseJointOptions): inversion_type: str = "joint petrophysics" + group_b_multiplier: float | None = None mesh: Octree petrophysics_model: JointPetrophysicsModelOptions - group_b_multiplier: float | None = None diff --git a/simpeg_drivers/joint/joint_surveys/options.py b/simpeg_drivers/joint/joint_surveys/options.py index 4f08c5e3..0b2c8548 100644 --- a/simpeg_drivers/joint/joint_surveys/options.py +++ b/simpeg_drivers/joint/joint_surveys/options.py @@ -18,7 +18,7 @@ from simpeg_drivers import assets_path from simpeg_drivers.joint.options import BaseJointOptions -from simpeg_drivers.options import ModelOptions +from simpeg_drivers.options import ConductivityModelOptions class JointSurveysOptions(BaseJointOptions): @@ -30,10 +30,9 @@ class JointSurveysOptions(BaseJointOptions): ) title: str = "Joint Surveys Inversion" - inversion_type: str = "joint surveys" - models: ModelOptions + models: ConductivityModelOptions @model_validator(mode="after") def all_groups_same_physical_property(self): diff --git a/simpeg_drivers/natural_sources/magnetotellurics/options.py b/simpeg_drivers/natural_sources/magnetotellurics/options.py index c29889ed..4bff4768 100644 --- a/simpeg_drivers/natural_sources/magnetotellurics/options.py +++ b/simpeg_drivers/natural_sources/magnetotellurics/options.py @@ -19,7 +19,12 @@ from geoh5py.objects import MTReceivers from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions, EMDataMixin +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, + EMDataMixin, +) class MTForwardOptions(EMDataMixin, BaseForwardOptions): @@ -55,6 +60,7 @@ class MTForwardOptions(EMDataMixin, BaseForwardOptions): zyx_imag_channel_bool: bool | None = None zyy_real_channel_bool: bool | None = None zyy_imag_channel_bool: bool | None = None + models: ConductivityModelOptions @property def channels(self) -> list[str]: @@ -109,3 +115,5 @@ class MTInversionOptions(EMDataMixin, BaseInversionOptions): zyy_real_uncertainty: PropertyGroup | None = None zyy_imag_channel: PropertyGroup | None = None zyy_imag_uncertainty: PropertyGroup | None = None + + models: ConductivityModelOptions diff --git a/simpeg_drivers/natural_sources/tipper/options.py b/simpeg_drivers/natural_sources/tipper/options.py index 765ce228..36c59b80 100644 --- a/simpeg_drivers/natural_sources/tipper/options.py +++ b/simpeg_drivers/natural_sources/tipper/options.py @@ -19,7 +19,12 @@ from geoh5py.objects import TipperReceivers from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions, EMDataMixin +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, + EMDataMixin, +) class TipperForwardOptions(EMDataMixin, BaseForwardOptions): @@ -44,6 +49,7 @@ class TipperForwardOptions(EMDataMixin, BaseForwardOptions): txz_imag_channel_bool: bool | None = None tyz_real_channel_bool: bool | None = None tyz_imag_channel_bool: bool | None = None + models: ConductivityModelOptions class TipperInversionOptions(EMDataMixin, BaseInversionOptions): @@ -76,3 +82,4 @@ class TipperInversionOptions(EMDataMixin, BaseInversionOptions): tyz_real_uncertainty: PropertyGroup | None = None tyz_imag_channel: PropertyGroup | None = None tyz_imag_uncertainty: PropertyGroup | None = None + models: ConductivityModelOptions diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 18035e61..cfd7267f 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -121,14 +121,15 @@ class DeprecatedOptions(BaseModel): List of deprecated options. """ - gradient_type: Deprecated + beta_search: Deprecated chunk_by_rows: Deprecated - parallelized: Deprecated ga_group: Deprecated - z_from_topo: Deprecated - receivers_radar_drape: Deprecated - receivers_offset_z: Deprecated gps_receivers_offset: Deprecated + gradient_type: Deprecated + receivers_offset_z: Deprecated + receivers_radar_drape: Deprecated + parallelized: Deprecated + z_from_topo: Deprecated Deprecations = Annotated[ @@ -173,7 +174,10 @@ class CoreOptions(BaseData): compute: ComputeOptions = ComputeOptions() out_group: SimPEGGroup | UIJsonGroup | None = None generate_sweep: bool = False - + workspace_geoh5: Path | None = Field( + default=None, + exclude=True, + ) # List of deprecated parameters deprecations: Deprecations @@ -253,8 +257,6 @@ class ModelOptions(BaseModel): :param starting_model: Starting model. :param reference_model: Reference model. - :param conductivity_model: Conductivity model used for IP and NS inversions. - :param petrophysical_model: Petrophysical model used for joint inversions. :param lower_bound: Lower bound. :param upper_bound: Upper bound. :param alpha_s: Scale on the reference model. @@ -272,17 +274,9 @@ class ModelOptions(BaseModel): arbitrary_types_allowed=True, ) - model_type: Literal["Conductivity (S/m)", "Resistivity (Ohm-m)"] = ( - "Conductivity (S/m)" - ) - # Model options starting_model: float | FloatData reference_model: float | FloatData | None = None - conductivity_model: float | FloatData | None = Field( - None, - validation_alias=AliasChoices("background_conductivity", "conductivity_model"), - ) lower_bound: float | FloatData | None = None upper_bound: float | FloatData | None = None @@ -328,6 +322,20 @@ def gradient_orientations(self) -> tuple(float, float): return None +class ConductivityModelOptions(ModelOptions): + """ + Options for the conductivity model used in all of EM methods. + """ + + model_type: Literal["Conductivity (S/m)", "Resistivity (Ohm-m)"] = ( + "Conductivity (S/m)" + ) + conductivity_model: float | FloatData | None = Field( + None, + validation_alias=AliasChoices("background_conductivity", "conductivity_model"), + ) + + class BaseForwardOptions(CoreOptions): """ Base class for forward parameters. @@ -391,7 +399,6 @@ class DirectiveOptions(BaseModel): arbitrary_types_allowed=True, ) auto_scale_misfits: bool = True - beta_search: bool = True every_iteration_bool: bool = False save_sensitivities: bool = False sens_wts_threshold: float | None = 1e-3 diff --git a/simpeg_drivers/potential_fields/magnetic_vector/options.py b/simpeg_drivers/potential_fields/magnetic_vector/options.py index 17bd8a0b..4010ad0e 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector/options.py @@ -83,7 +83,6 @@ class MVIForwardOptions(BaseForwardOptions): physical_property: str = "susceptibility" inversion_type: str = "magnetic vector" - models: VectorModelOptions tmi_channel_bool: bool = True bx_channel_bool: bool = False by_channel_bool: bool = False @@ -97,6 +96,7 @@ class MVIForwardOptions(BaseForwardOptions): inducing_field_strength: float | FloatData inducing_field_inclination: float | FloatData inducing_field_declination: float | FloatData + models: VectorModelOptions class MVIInversionOptions(BaseInversionOptions): @@ -141,8 +141,6 @@ class MVIInversionOptions(BaseInversionOptions): physical_property: str = "susceptibility" inversion_type: str = "magnetic vector" - models: VectorModelOptions - tmi_channel: FloatData | None = None bx_channel: FloatData | None = None by_channel: FloatData | None = None @@ -166,3 +164,4 @@ class MVIInversionOptions(BaseInversionOptions): inducing_field_strength: float | FloatData inducing_field_inclination: float | FloatData inducing_field_declination: float | FloatData + models: VectorModelOptions From 66ffa3b0d3b84ade591a718c93c47dd9d11bffa3 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 09:25:39 -0700 Subject: [PATCH 30/59] Adjust test --- tests/uijson_test.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/uijson_test.py b/tests/uijson_test.py index 59987942..1a63769a 100644 --- a/tests/uijson_test.py +++ b/tests/uijson_test.py @@ -250,9 +250,7 @@ def test_gravity_uijson(tmp_path): gz_uncertainty=gz_uncerts, mesh=starting_model.parent, starting_model=starting_model, - active_cells=ActiveCellsOptions( - topography_object=topography, - ), + topography_object=topography, ) params_uijson_path = tmp_path / "from_params.ui.json" opts.write_ui_json(params_uijson_path) From 5a5aab4d1db5a90835753131c5df44145d7f0b38 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 10:07:13 -0700 Subject: [PATCH 31/59] Fix referencing to params.models --- simpeg_drivers/components/factories/directives_factory.py | 2 +- simpeg_drivers/joint/driver.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 8667f509..2bafd471 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -404,7 +404,7 @@ def assemble_keyword_arguments( inversion_object.permutation.T, ] - if self.params.model_type == "Resistivity (Ohm-m)": + if self.params.models.model_type == "Resistivity (Ohm-m)": kwargs["transforms"].append(lambda x: 1 / x) if "1d" in self.factory_type: diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index f9b69391..88519e59 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -355,11 +355,10 @@ def _get_drivers_directives(self) -> list[directives.Directive]: for driver in self.drivers: driver_directives = DirectivesFactory(driver) - if ( - getattr(driver.params, "model_type", None) is not None - and getattr(self.params, "model_type", None) is not None + if hasattr(driver.params.models, "model_type") and hasattr( + self.params.models, "model_type" ): - driver.params.model_type = self.params.model_type + driver.params.models.model_type = self.params.models.model_type save_model = driver_directives.save_iteration_model_directive save_model.transforms = [ From df71e065815097fb5cf29919067a334469327933 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 13:23:47 -0700 Subject: [PATCH 32/59] Force mesh validation on 2D problem --- simpeg_drivers/electricals/driver.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py index 5644f08e..6b5c0e31 100644 --- a/simpeg_drivers/electricals/driver.py +++ b/simpeg_drivers/electricals/driver.py @@ -42,6 +42,19 @@ class Base2DDriver(InversionDriver): """Base class for 2D DC and IP forward and inversion drivers.""" + @property + def inversion_data(self) -> InversionData: + """Inversion data""" + if getattr(self, "_inversion_data", None) is None: + with fetch_active_workspace(self.workspace, mode="r+"): + if not isinstance(self.inversion_mesh.entity, DrapeModel): + raise ValueError( + "Inversion mesh must be a DrapeModel for 2D drivers." + ) + self._inversion_data = InversionData(self.workspace, self.params) + + return self._inversion_data + @property def inversion_mesh(self) -> InversionMesh: """Inversion mesh""" From 05f82946bc527e1bb5a93d37c5f1cdf1d272e845 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 13:56:39 -0700 Subject: [PATCH 33/59] Remove saving of app res to avoid linkage between drape mesh creation and data init --- simpeg_drivers/components/data.py | 18 +----------------- simpeg_drivers/electricals/driver.py | 13 ------------- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index b039f89a..20a78b74 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -113,8 +113,8 @@ def _initialize(self) -> None: self.normalizations: dict[str, Any] = self.get_normalizations() self.entity = self.write_entity() + self.save_data() - self.params.data_object = self.entity self.locations = super().get_locations(self.entity) @property @@ -244,20 +244,6 @@ def save_data(self): data_types[component][ind] = data_entity.entity_type - # Extra save for apparent resistivity if applicable - if "direct current" in self.params.inversion_type: - apparent_property = values.copy() - apparent_property *= self.survey.apparent_resistivity - - data_dict["apparent_resistivity"] = self.entity.add_data( - { - "Observed_apparent_resistivity": { - "values": apparent_property, - "association": "CELL", - } - } - ) - self._observed_data_types = data_types self.update_params(data_dict, uncert_dict) @@ -468,9 +454,7 @@ def update_params(self, data_dict, uncert_dict): """ Update pointers to newly created object and data. """ - self.params.data_object = self.entity - for comp in self.params.components: if getattr(self.params, "_".join([comp, "channel"]), None) is None: continue diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py index 6b5c0e31..5644f08e 100644 --- a/simpeg_drivers/electricals/driver.py +++ b/simpeg_drivers/electricals/driver.py @@ -42,19 +42,6 @@ class Base2DDriver(InversionDriver): """Base class for 2D DC and IP forward and inversion drivers.""" - @property - def inversion_data(self) -> InversionData: - """Inversion data""" - if getattr(self, "_inversion_data", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - if not isinstance(self.inversion_mesh.entity, DrapeModel): - raise ValueError( - "Inversion mesh must be a DrapeModel for 2D drivers." - ) - self._inversion_data = InversionData(self.workspace, self.params) - - return self._inversion_data - @property def inversion_mesh(self) -> InversionMesh: """Inversion mesh""" From 55c5630729135fc0ee7b42a2b82a84503f738e31 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 15:06:29 -0700 Subject: [PATCH 34/59] Fix inheritance of 1D options. --- .../components/factories/directives_factory.py | 2 +- .../electromagnetics/frequency_domain/options.py | 16 +++++++++------- .../frequency_domain_1d/options.py | 9 ++++----- .../electromagnetics/time_domain/options.py | 14 ++++++++------ .../electromagnetics/time_domain_1d/options.py | 11 ++++++----- simpeg_drivers/options.py | 4 ++++ 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 2bafd471..6e4a84b6 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -674,7 +674,7 @@ def reshape(values): for comp in components ] ), - "channels": channels, + "channels": np.arange(len(channels)), "components": components, "sorting": sorting, "_reshape": reshape, diff --git a/simpeg_drivers/electromagnetics/frequency_domain/options.py b/simpeg_drivers/electromagnetics/frequency_domain/options.py index 70e317a0..ec7928b7 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain/options.py @@ -44,12 +44,6 @@ class BaseFDEMOptions(EMDataMixin): Base Frequency Domain Electromagnetic options. """ - physical_property: str = "conductivity" - inversion_type: str = "fdem" - - data_object: Receivers - models: ConductivityModelOptions - @property def tx_offsets(self): """Return transmitter offsets from frequency metadata""" @@ -87,7 +81,7 @@ def name_change(cls, value: str): return value -class FDEMForwardOptions(BaseFDEMOptions, BaseForwardOptions): +class FDEMForwardOptions(BaseForwardOptions, BaseFDEMOptions): """ Frequency Domain Electromagnetic Forward options. @@ -99,9 +93,13 @@ class FDEMForwardOptions(BaseFDEMOptions, BaseForwardOptions): name: ClassVar[str] = "Frequency Domain Electromagnetics Forward" default_ui_json: ClassVar[Path] = assets_path() / "uijson/fdem_forward.ui.json" title: str = "Frequency-domain EM (FEM) Forward" + physical_property: str = "conductivity" + inversion_type: str = "fdem" + data_object: Receivers z_real_channel_bool: bool z_imag_channel_bool: bool + models: ConductivityModelOptions class FDEMInversionOptions(BaseFDEMOptions, BaseInversionOptions): @@ -118,8 +116,12 @@ class FDEMInversionOptions(BaseFDEMOptions, BaseInversionOptions): name: ClassVar[str] = "Frequency Domain Electromagnetics Inversion" default_ui_json: ClassVar[Path] = assets_path() / "uijson/fdem_inversion.ui.json" title: str = "Frequency-domain EM (FEM) Inversion" + physical_property: str = "conductivity" + inversion_type: str = "fdem" + data_object: Receivers z_real_channel: PropertyGroup | None = None z_real_uncertainty: PropertyGroup | None = None z_imag_channel: PropertyGroup | None = None z_imag_uncertainty: PropertyGroup | None = None + models: ConductivityModelOptions diff --git a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py index f2455213..73af599a 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py @@ -18,16 +18,15 @@ from simpeg_drivers import assets_path from simpeg_drivers.electromagnetics.frequency_domain.options import ( - BaseFDEMOptions, + FDEMForwardOptions, + FDEMInversionOptions, ) from simpeg_drivers.options import ( - BaseForwardOptions, - BaseInversionOptions, DrapeModelOptions, ) -class FDEM1DForwardOptions(BaseFDEMOptions, BaseForwardOptions): +class FDEM1DForwardOptions(FDEMForwardOptions): """ Frequency Domain Electromagnetic forward options. @@ -55,7 +54,7 @@ class FDEM1DForwardOptions(BaseFDEMOptions, BaseForwardOptions): ) -class FDEM1DInversionOptions(BaseFDEMOptions, BaseInversionOptions): +class FDEM1DInversionOptions(FDEMInversionOptions): """ Frequency Domain Electromagnetic Inversion options. diff --git a/simpeg_drivers/electromagnetics/time_domain/options.py b/simpeg_drivers/electromagnetics/time_domain/options.py index 17e67237..2010e1e9 100644 --- a/simpeg_drivers/electromagnetics/time_domain/options.py +++ b/simpeg_drivers/electromagnetics/time_domain/options.py @@ -44,12 +44,7 @@ class BaseTDEMOptions(EMDataMixin): :param data_units: The units of the TDEM data (e.g., "dB/dt (T/s)"). """ - physical_property: str = "conductivity" data_units: str = "dB/dt (T/s)" - inversion_type: str = "tdem" - - data_object: Receivers - models: ConductivityModelOptions @property def unit_conversion(self): @@ -73,12 +68,15 @@ class TDEMForwardOptions(BaseTDEMOptions, BaseForwardOptions): name: ClassVar[str] = "Time Domain Electromagnetics Forward" default_ui_json: ClassVar[Path] = assets_path() / "uijson/tdem_forward.ui.json" - title: str = "Time-domain EM (TEM) Forward" + physical_property: str = "conductivity" + inversion_type: str = "tdem" + data_object: Receivers z_channel_bool: bool | None = None x_channel_bool: bool | None = None y_channel_bool: bool | None = None + models: ConductivityModelOptions class TDEMInversionOptions(BaseTDEMOptions, BaseInversionOptions): @@ -96,10 +94,14 @@ class TDEMInversionOptions(BaseTDEMOptions, BaseInversionOptions): name: ClassVar[str] = "Time Domain Electromagnetics Inversion" default_ui_json: ClassVar[Path] = assets_path() / "uijson/tdem_inversion.ui.json" title: str = "Time-domain EM (TEM) Inversion" + physical_property: str = "conductivity" + inversion_type: str = "tdem" + data_object: Receivers z_channel: PropertyGroup | None = None z_uncertainty: PropertyGroup | None = None x_channel: PropertyGroup | None = None x_uncertainty: PropertyGroup | None = None y_channel: PropertyGroup | None = None y_uncertainty: PropertyGroup | None = None + models: ConductivityModelOptions diff --git a/simpeg_drivers/electromagnetics/time_domain_1d/options.py b/simpeg_drivers/electromagnetics/time_domain_1d/options.py index ba7ca7ca..78b1ecd8 100644 --- a/simpeg_drivers/electromagnetics/time_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/time_domain_1d/options.py @@ -22,10 +22,11 @@ ) from simpeg_drivers import assets_path -from simpeg_drivers.electromagnetics.time_domain.options import BaseTDEMOptions +from simpeg_drivers.electromagnetics.time_domain.options import ( + TDEMForwardOptions, + TDEMInversionOptions, +) from simpeg_drivers.options import ( - BaseForwardOptions, - BaseInversionOptions, DrapeModelOptions, ) @@ -35,7 +36,7 @@ ) -class TDEM1DForwardOptions(BaseTDEMOptions, BaseForwardOptions): +class TDEM1DForwardOptions(TDEMForwardOptions): """ Time Domain Electromagnetic forward options. @@ -61,7 +62,7 @@ class TDEM1DForwardOptions(BaseTDEMOptions, BaseForwardOptions): ) -class TDEM1DInversionOptions(BaseTDEMOptions, BaseInversionOptions): +class TDEM1DInversionOptions(TDEMInversionOptions): """ Time Domain Electromagnetic Inversion options. diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index cfd7267f..916edb6e 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -27,8 +27,10 @@ ) from geoh5py.groups import PropertyGroup, SimPEGGroup, UIJsonGroup from geoh5py.objects import DrapeModel, Grid2D, Octree, Points +from geoh5py.objects.surveys.electromagnetics.base import BaseEMSurvey from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile +from geoh5py.ui_json.templates import data_parameter from pydantic import ( AliasChoices, BaseModel, @@ -429,6 +431,8 @@ class EMDataMixin: Mixin class to add data and uncertainty access from property groups. """ + data_object: BaseEMSurvey + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) From f5dd1f4db51cf5bc9d201b3f8a59d17cab62dec6 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 15:09:47 -0700 Subject: [PATCH 35/59] Bump test --- tests/run_tests/driver_2d_rotated_gradients_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_2d_rotated_gradients_test.py b/tests/run_tests/driver_2d_rotated_gradients_test.py index 0c62a3c3..b51daa38 100644 --- a/tests/run_tests/driver_2d_rotated_gradients_test.py +++ b/tests/run_tests/driver_2d_rotated_gradients_test.py @@ -39,7 +39,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 0.5963828772690819, "phi_d": 2870, "phi_m": 18.7} +target_run = {"data_norm": 0.5963140277544549, "phi_d": 2860, "phi_m": 17.7} def test_dc2d_rotated_grad_fwr_run( From dea7c3d8c38bdca092c5f71b28140fcf8f8f6324 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 16:11:32 -0700 Subject: [PATCH 36/59] More typos --- simpeg_drivers/components/factories/misfit_factory.py | 2 +- simpeg_drivers/components/factories/source_factory.py | 2 +- tests/run_tests/driver_dc_test.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/components/factories/misfit_factory.py b/simpeg_drivers/components/factories/misfit_factory.py index 55e32493..ae3d18f6 100644 --- a/simpeg_drivers/components/factories/misfit_factory.py +++ b/simpeg_drivers/components/factories/misfit_factory.py @@ -65,7 +65,7 @@ def assemble_arguments( # pylint: disable=arguments-differ ): # Base slice over frequencies if self.factory_type in ["magnetotellurics", "tipper", "fdem"]: - channels = np.unique([list(v) for v in inversion_data.observed.values()]) + channels = inversion_data.entity.channels else: channels = [None] diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index be958ce7..78dbd19e 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -132,7 +132,7 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ "declination": self.params.inducing_field_declination, } if self.factory_type in ["magnetotellurics", "tipper"]: - background = deepcopy(self.params.models.conductivit_model) + background = deepcopy(self.params.models.conductivity_model) if getattr(self.params, "model_type", None) == "Resistivity (Ohm-m)": background **= -1.0 diff --git a/tests/run_tests/driver_dc_test.py b/tests/run_tests/driver_dc_test.py index f844c80c..564c9c1c 100644 --- a/tests/run_tests/driver_dc_test.py +++ b/tests/run_tests/driver_dc_test.py @@ -150,7 +150,7 @@ def test_dc_single_line_fwr_run( n_lines=n_lines, refinement=refinement, drape_height=0.0, - inversion_type="dcip", + inversion_type="direct current 3d", flatten=False, ) params = DC3DForwardOptions.build( From 0a9812b51ec28696d8694e46d85cb847e4c495d8 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 16:56:26 -0700 Subject: [PATCH 37/59] Revert "Bump test" This reverts commit f5dd1f4db51cf5bc9d201b3f8a59d17cab62dec6. --- tests/run_tests/driver_2d_rotated_gradients_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_2d_rotated_gradients_test.py b/tests/run_tests/driver_2d_rotated_gradients_test.py index b51daa38..0c62a3c3 100644 --- a/tests/run_tests/driver_2d_rotated_gradients_test.py +++ b/tests/run_tests/driver_2d_rotated_gradients_test.py @@ -39,7 +39,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 0.5963140277544549, "phi_d": 2860, "phi_m": 17.7} +target_run = {"data_norm": 0.5963828772690819, "phi_d": 2870, "phi_m": 18.7} def test_dc2d_rotated_grad_fwr_run( From 09d03670f7ca02fa89d55fc3b9ffa8374b1b7b58 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 17:00:52 -0700 Subject: [PATCH 38/59] Change defaults --- simpeg_drivers/options.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 916edb6e..01869a03 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -400,8 +400,8 @@ class DirectiveOptions(BaseModel): model_config = ConfigDict( arbitrary_types_allowed=True, ) - auto_scale_misfits: bool = True - every_iteration_bool: bool = False + auto_scale_misfits: bool = False + every_iteration_bool: bool = True save_sensitivities: bool = False sens_wts_threshold: float | None = 1e-3 From dcc49eb5850711f6540fc955d035542ee2673249 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Fri, 6 Jun 2025 19:55:57 -0700 Subject: [PATCH 39/59] Bulk save --- simpeg_drivers/components/data.py | 2 +- .../components/factories/directives_factory.py | 2 +- .../three_dimensions/options.py | 8 ++++++++ .../joint/joint_petrophysics/options.py | 2 -- simpeg_drivers/joint/options.py | 3 +++ .../magnetic_scalar/options.py | 18 +++++++++++++++++- .../driver_joint_cross_gradient_test.py | 2 +- .../driver_joint_pgi_homogeneous_test.py | 2 +- tests/run_tests/driver_joint_surveys_test.py | 2 +- tests/run_tests/driver_mag_test.py | 2 +- 10 files changed, 34 insertions(+), 9 deletions(-) diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index 20a78b74..836c17e9 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -242,7 +242,7 @@ def save_data(self): data_dict[component] = data_entity uncert_dict[component] = uncert_entity - data_types[component][ind] = data_entity.entity_type + data_types[component][channel] = data_entity.entity_type self._observed_data_types = data_types self.update_params(data_dict, uncert_dict) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 6e4a84b6..2bafd471 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -674,7 +674,7 @@ def reshape(values): for comp in components ] ), - "channels": np.arange(len(channels)), + "channels": channels, "components": components, "sorting": sorting, "_reshape": reshape, diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py index b7e8990d..18d7efef 100644 --- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py @@ -25,6 +25,14 @@ ) +class IP3DModelOptions(ConductivityModelOptions): + """ + ModelOptions class with defaulted lower bound. + """ + + lower_bound: float | FloatData | None = 0 + + class IP3DForwardOptions(BaseForwardOptions): """ Induced Polarization 3D forward options. diff --git a/simpeg_drivers/joint/joint_petrophysics/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py index 926a3097..6ee2cc71 100644 --- a/simpeg_drivers/joint/joint_petrophysics/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -46,8 +46,6 @@ class JointPetrophysicsOptions(BaseJointOptions): ) title: str = "Joint Petrophysically Guided Inversion (PGI)" - physical_property: list[str] = [""] - inversion_type: str = "joint petrophysics" group_b_multiplier: float | None = None diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index 423e42ce..228fe5f9 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -38,6 +38,9 @@ class BaseJointOptions(CoreOptions): model_config = ConfigDict(frozen=False) + forward_only: bool = False + physical_property: str = "" + group_a: SimPEGGroup group_a_multiplier: float = 1.0 group_b: SimPEGGroup diff --git a/simpeg_drivers/potential_fields/magnetic_scalar/options.py b/simpeg_drivers/potential_fields/magnetic_scalar/options.py index 1db17196..8b462b7d 100644 --- a/simpeg_drivers/potential_fields/magnetic_scalar/options.py +++ b/simpeg_drivers/potential_fields/magnetic_scalar/options.py @@ -17,7 +17,19 @@ from geoh5py.data import FloatData from simpeg_drivers import assets_path -from simpeg_drivers.options import BaseForwardOptions, BaseInversionOptions +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ModelOptions, +) + + +class MagneticModelOptions(ModelOptions): + """ + ModelOptions class with defaulted lower bound. + """ + + lower_bound: float | FloatData | None = 0 class MagneticForwardOptions(BaseForwardOptions): @@ -59,6 +71,8 @@ class MagneticForwardOptions(BaseForwardOptions): inducing_field_inclination: float | FloatData inducing_field_declination: float | FloatData + models: MagneticModelOptions + class MagneticInversionOptions(BaseInversionOptions): """ @@ -121,3 +135,5 @@ class MagneticInversionOptions(BaseInversionOptions): inducing_field_strength: float | FloatData inducing_field_inclination: float | FloatData inducing_field_declination: float | FloatData + + models: MagneticModelOptions diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index d2ff6017..2d2ce48d 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -239,7 +239,7 @@ def test_joint_cross_gradient_inv_run( drivers.append(MVIInversionDriver(params)) # Run the inverse - joint_params = JointCrossGradientOptions( + joint_params = JointCrossGradientOptions.build( geoh5=geoh5, topography_object=topography, group_a=drivers[0].params.out_group, diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 6434a93f..6cdec651 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -229,7 +229,7 @@ def test_homogeneous_run( ) drivers.append(MagneticInversionDriver(params)) - params = JointPetrophysicsOptions( + params = JointPetrophysicsOptions.build( topography_object=topography, geoh5=geoh5, group_a=drivers[0].params.out_group, diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py index 5dd95f95..0cdd4d24 100644 --- a/tests/run_tests/driver_joint_surveys_test.py +++ b/tests/run_tests/driver_joint_surveys_test.py @@ -139,7 +139,7 @@ def test_joint_surveys_inv_run( active_model = drivers[0].params.mesh.get_entity("active_cells")[0] # Run the inverse - joint_params = JointSurveysOptions( + joint_params = JointSurveysOptions.build( geoh5=geoh5, active_cells=ActiveCellsOptions(active_model=active_model), mesh=drivers[0].params.mesh, diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py index dc94a71d..54383ec4 100644 --- a/tests/run_tests/driver_mag_test.py +++ b/tests/run_tests/driver_mag_test.py @@ -116,7 +116,7 @@ def test_susceptibility_run( ) params.write_ui_json(path=tmp_path / "Inv_run.ui.json") - assert params.lower_bound == 0.0 + assert params.models.lower_bound == 0.0 driver = MagneticInversionDriver.start(str(tmp_path / "Inv_run.ui.json")) with Workspace(driver.params.geoh5.h5file) as run_ws: From ba8aba3926652f5a5d919e1cc351e413eabe3403 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 11:50:34 -0700 Subject: [PATCH 40/59] Simplify models module for vector inversion --- simpeg_drivers/components/models.py | 318 ++++++++++-------- simpeg_drivers/joint/options.py | 1 - .../magnetic_vector/options.py | 33 +- 3 files changed, 176 insertions(+), 176 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index cf5cc982..c60a415f 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -33,7 +33,11 @@ MODEL_TYPES = [ "starting_model", + "starting_inclination", + "starting_declination", "reference_model", + "reference_inclination", + "reference_declination", "lower_bound", "upper_bound", "conductivity_model", @@ -47,7 +51,7 @@ "x_norm", "y_norm", "z_norm", - "petrophysics", + "petrophysical_model", ] @@ -70,41 +74,32 @@ def __init__(self, driver: InversionDriver): self._active_cells: np.ndarray | None = None self._driver = driver self.is_sigma = self.driver.params.physical_property == "conductivity" - is_vector = ( - True if self.driver.params.inversion_type == "magnetic vector" else False - ) - self._starting_model = InversionModel( - driver, "starting_model", is_vector=is_vector - ) - self._reference_model = InversionModel( - driver, "reference_model", is_vector=is_vector - ) - self._lower_bound = InversionModel(driver, "lower_bound", is_vector=is_vector) - self._upper_bound = InversionModel(driver, "upper_bound", is_vector=is_vector) - self._conductivity_model = InversionModel( - driver, "conductivity_model", is_vector=is_vector - ) - self._alpha_s = InversionModel(driver, "alpha_s", is_vector=is_vector) - self._length_scale_x = InversionModel( - driver, "length_scale_x", is_vector=is_vector - ) - self._length_scale_y = InversionModel( - driver, "length_scale_y", is_vector=is_vector - ) - self._length_scale_z = InversionModel( - driver, "length_scale_z", is_vector=is_vector - ) + self.is_vector = self.driver.params.inversion_type == "magnetic vector" + + self._starting_model = InversionModel(driver, "starting_model") + self._starting_inclination = InversionModel(driver, "starting_inclination") + self._starting_declination = InversionModel(driver, "starting_declination") + self._reference_model = InversionModel(driver, "reference_model") + self._reference_inclination = InversionModel(driver, "reference_inclination") + self._reference_declination = InversionModel(driver, "reference_declination") + self._lower_bound = InversionModel(driver, "lower_bound") + self._upper_bound = InversionModel(driver, "upper_bound") + self._conductivity_model = InversionModel(driver, "conductivity_model") + self._alpha_s = InversionModel(driver, "alpha_s") + self._length_scale_x = InversionModel(driver, "length_scale_x") + self._length_scale_y = InversionModel(driver, "length_scale_y") + self._length_scale_z = InversionModel(driver, "length_scale_z") self._gradient_dip = InversionModel( driver, "gradient_dip", trim_active_cells=False ) self._gradient_direction = InversionModel( driver, "gradient_direction", trim_active_cells=False ) - self._s_norm = InversionModel(driver, "s_norm", is_vector=is_vector) - self._x_norm = InversionModel(driver, "x_norm", is_vector=is_vector) - self._y_norm = InversionModel(driver, "y_norm", is_vector=is_vector) - self._z_norm = InversionModel(driver, "z_norm", is_vector=is_vector) - self._petrophysics = InversionModel(driver, "petrophysics", is_vector=False) + self._s_norm = InversionModel(driver, "s_norm") + self._x_norm = InversionModel(driver, "x_norm") + self._y_norm = InversionModel(driver, "y_norm") + self._z_norm = InversionModel(driver, "z_norm") + self._petrophysical_model = InversionModel(driver, "petrophysical_model") @property def n_active(self) -> int: @@ -167,8 +162,42 @@ def starting_model(self) -> np.ndarray | None: mstart = np.log(mstart) + if self.is_vector: + field_vecs = dip_azimuth2cartesian( + self.starting_inclination, + self.starting_declination, + ) + mstart = (field_vecs.T * mstart).flatten() + return mstart + @property + def starting_inclination(self) -> np.ndarray | None: + value = self._starting_inclination.model + + if value is None and self.is_vector: + return ( + np.ones(self.active_cells.sum()) + * self.driver.params.inducing_field_inclination + ) + + if value is not None: + value[np.isnan(value)] = 0 + + return value + + @property + def starting_declination(self) -> np.ndarray | None: + value = self._starting_declination.model + + if value is None and self.is_vector: + return ( + np.ones(self.active_cells.sum()) + * self.driver.params.inducing_field_declination + ) + + return value + @property def reference_model(self) -> np.ndarray | None: mref = self._reference_model.model @@ -191,8 +220,39 @@ def reference_model(self) -> np.ndarray | None: ref_model = np.log(ref_model) if self.is_sigma else ref_model + if self.is_vector: + field_vecs = dip_azimuth2cartesian( + self.starting_inclination, + self.starting_declination, + ) + ref_model = (field_vecs.T * ref_model).flatten() + return ref_model + @property + def reference_inclination(self) -> np.ndarray | None: + value = self._reference_inclination.model + + if value is None and self.is_vector: + return ( + np.ones(self.active_cells.sum()) + * self.driver.params.inducing_field_inclination + ) + + return value + + @property + def reference_declination(self) -> np.ndarray | None: + value = self._reference_declination.model + + if value is None and self.is_vector: + return ( + np.ones(self.active_cells.sum()) + * self.driver.params.inducing_field_declination + ) + + return value + @property def lower_bound(self) -> np.ndarray | None: if ( @@ -222,6 +282,9 @@ def lower_bound(self) -> np.ndarray | None: lbound[is_finite] = np.log(lbound[is_finite]) + if self.is_vector: + lbound = np.tile(lbound, 3) + return lbound @property @@ -247,6 +310,9 @@ def upper_bound(self) -> np.ndarray | None: ubound[is_finite] = np.log(ubound[is_finite]) + if self.is_vector: + ubound = np.tile(ubound, 3) + return ubound @property @@ -271,49 +337,45 @@ def alpha_s(self) -> np.ndarray | None: if self._alpha_s.model is None: return None - return self._alpha_s.model.copy() + alpha = self._alpha_s.model.copy() + + if self.is_vector: + alpha = np.tile(alpha, 3) + + return alpha @property def length_scale_x(self) -> np.ndarray | None: if self._length_scale_x.model is None: return None - return self._length_scale_x.model.copy() + length_scale = self._length_scale_x.model.copy() + + if self.is_vector: + length_scale = np.tile(length_scale, 3) + return length_scale @property def length_scale_y(self) -> np.ndarray | None: if self._length_scale_y.model is None: return None - return self._length_scale_y.model.copy() + length_scale = self._length_scale_y.model.copy() + + if self.is_vector: + length_scale = np.tile(length_scale, 3) + return length_scale @property def length_scale_z(self) -> np.ndarray | None: if self._length_scale_z.model is None: return None - return self._length_scale_z.model.copy() - - @property - def petrophysics(self) -> np.ndarray | None: - if self._petrophysics.model is None: - return None - - return self._petrophysics.model.copy() - - @property - def gradient_dip(self) -> np.ndarray | None: - if self._gradient_dip.model is None: - return None - - return self._gradient_dip.model.copy() - - @property - def gradient_direction(self) -> np.ndarray | None: - if self._gradient_direction.model is None: - return None + length_scale = self._length_scale_z.model.copy() - return self._gradient_direction.model.copy() + if self.is_vector: + length_scale = np.tile(length_scale, 3) + return length_scale @property def s_norm(self) -> np.ndarray | None: @@ -321,6 +383,10 @@ def s_norm(self) -> np.ndarray | None: return None s_norm = self._s_norm.model.copy() + + if self.is_vector: + s_norm = np.tile(s_norm, 3) + return s_norm @property @@ -329,6 +395,10 @@ def x_norm(self) -> np.ndarray | None: return None x_norm = self._x_norm.model.copy() + + if self.is_vector: + x_norm = np.tile(x_norm, 3) + return x_norm @property @@ -337,6 +407,10 @@ def y_norm(self) -> np.ndarray | None: return None y_norm = self._y_norm.model.copy() + + if self.is_vector: + y_norm = np.tile(y_norm, 3) + return y_norm @property @@ -345,6 +419,10 @@ def z_norm(self) -> np.ndarray | None: return None z_norm = self._z_norm.model.copy() + + if self.is_vector: + z_norm = np.tile(z_norm, 3) + return z_norm def _model_method_wrapper(self, method, name=None, **kwargs): @@ -359,6 +437,27 @@ def _model_method_wrapper(self, method, name=None, **kwargs): if name is not None: return returned_items[name] + @property + def petrophysical_model(self) -> np.ndarray | None: + if self._petrophysical_model.model is None: + return None + + return self._petrophysical_model.model.copy() + + @property + def gradient_dip(self) -> np.ndarray | None: + if self._gradient_dip.model is None: + return None + + return self._gradient_dip.model.copy() + + @property + def gradient_direction(self) -> np.ndarray | None: + if self._gradient_direction.model is None: + return None + + return self._gradient_direction.model.copy() + def remove_air(self, active_cells: np.ndarray): """Use active cells vector to remove air cells from model""" self._model_method_wrapper("remove_air", active_cells=active_cells) @@ -398,7 +497,6 @@ def __init__( self, driver: InversionDriver, model_type: str, - is_vector: bool = False, trim_active_cells: bool = True, ): """ @@ -410,7 +508,6 @@ def __init__( self.driver = driver self.model_type = model_type self.model: np.ndarray | None = None - self.is_vector = is_vector self.trim_active_cells = trim_active_cells self._initialize() @@ -422,49 +519,7 @@ def _initialize(self): are provided, then values are projected onto the direction of the inducing field. """ - if self.model_type in [ - "starting_model", - "reference_model", - "conductivity_model", - ]: - model = self._get(self.model_type) - - if self.is_vector: - inclination = self._get(self.model_type + "_inclination") - declination = self._get(self.model_type + "_declination") - - if inclination is None: - inclination = ( - np.ones(self.driver.inversion_mesh.n_cells) - * self.driver.params.inducing_field_inclination - ) - - if declination is None: - declination = ( - np.ones(self.driver.inversion_mesh.n_cells) - * self.driver.params.inducing_field_declination - ) - - inclination[np.isnan(inclination)] = 0 - declination[np.isnan(declination)] = 0 - field_vecs = dip_azimuth2cartesian( - inclination, - declination, - ) - - if model is not None: - model += 1e-8 # make sure the incl/decl don't zero out - model = (field_vecs.T * model).T - - else: - model = self._get(self.model_type) - - if ( - model is not None - and self.is_vector - and model.shape[0] == self.driver.inversion_mesh.n_cells - ): - model = np.tile(model, 3 if self.is_vector else 1) + model = self._get(self.model_type) if model is not None: self.model = mkvc(model) @@ -474,7 +529,7 @@ def remove_air(self, active_cells): """Use active cells vector to remove air cells from model""" if self.model is not None and self.trim_active_cells: - self.model = self.model[np.tile(active_cells, 3 if self.is_vector else 1)] + self.model = self.model[active_cells] def permute_2_octree(self) -> np.ndarray | None: """ @@ -486,11 +541,6 @@ def permute_2_octree(self) -> np.ndarray | None: if self.model is None: return None - if self.is_vector: - return mkvc( - self.driver.inversion_mesh.permutation.T - @ self.model.reshape((-1, 3), order="F") - ) return self.driver.inversion_mesh.permutation.T @ self.model def save_model(self): @@ -500,26 +550,6 @@ def save_model(self): if remapped_model is None: return - if self.is_vector: - if self.model_type in ["starting_model", "reference_model"]: - aid = cartesian2amplitude_dip_azimuth(remapped_model) - aid[np.isnan(aid[:, 0]), 1:] = np.nan - self.driver.inversion_mesh.entity.add_data( - {f"{self.model_type}_inclination": {"values": aid[:, 1]}} - ) - self.driver.inversion_mesh.entity.add_data( - {f"{self.model_type}_declination": {"values": aid[:, 2]}} - ) - remapped_model = aid[:, 0] - elif "norm" in self.model_type: - remapped_model = np.mean( - remapped_model.reshape((-1, 3), order="F"), axis=1 - ) - else: - remapped_model = np.linalg.norm( - remapped_model.reshape((-1, 3), order="F"), axis=1 - ) - model_type = self.model_type if ( model_type == "conductivity_model" @@ -542,28 +572,24 @@ def save_model(self): def edit_ndv_model(self, model): """Change values to NDV on models and save to workspace.""" - for field in ["model", "inclination", "declination"]: - model_type = self.model_type - if ( - model_type == "conductivity_model" - and getattr(self.driver.params, "model_type", None) - == "Resistivity (Ohm-m)" - ): - model_type = "resistivity" - - data_obj = self.driver.inversion_mesh.entity.get_data( - f"{model_type}_{field}" + model_type = self.model_type + if ( + model_type == "conductivity_model" + and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + ): + model_type = "resistivity_model" + + data_obj = self.driver.inversion_mesh.entity.get_data(model_type) + if ( + any(data_obj) + and isinstance(data_obj[0], NumericData) + and data_obj[0].values is not None + ): + values = data_obj[0].values.copy() + values[~model.astype(bool)] = ( + np.nan if isinstance(data_obj[0], FloatData) else 0 ) - if ( - any(data_obj) - and isinstance(data_obj[0], NumericData) - and data_obj[0].values is not None - ): - values = data_obj[0].values.copy() - values[~model.astype(bool)] = ( - np.nan if isinstance(data_obj[0], FloatData) else 0 - ) - data_obj[0].values = values + data_obj[0].values = values def _fetch_reference(self, name: str) -> NumericData | None: value = getattr(self.driver.params.models, name, None) diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index 228fe5f9..eb3eb56f 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -48,7 +48,6 @@ class BaseJointOptions(CoreOptions): group_c: SimPEGGroup | None = None group_c_multiplier: float | None = None - models: ModelOptions irls: IRLSOptions = IRLSOptions() directives: DirectiveOptions = DirectiveOptions() cooling_schedule: CoolingSceduleOptions = CoolingSceduleOptions() diff --git a/simpeg_drivers/potential_fields/magnetic_vector/options.py b/simpeg_drivers/potential_fields/magnetic_vector/options.py index 4010ad0e..726e71d1 100644 --- a/simpeg_drivers/potential_fields/magnetic_vector/options.py +++ b/simpeg_drivers/potential_fields/magnetic_vector/options.py @@ -16,7 +16,6 @@ from geoh5py.data import FloatData from geoh5py.ui_json.annotations import Deprecated -from pydantic import AliasChoices, Field from simpeg_drivers import assets_path from simpeg_drivers.options import ( @@ -32,30 +31,10 @@ class VectorModelOptions(ModelOptions): """ lower_bound: Deprecated | None = None - starting_model_inclination: float | FloatData | None = Field( - None, - validation_alias=AliasChoices( - "starting_model_inclination", "starting_inclination" - ), - ) - starting_model_declination: float | FloatData | None = Field( - None, - validation_alias=AliasChoices( - "starting_model_declination", "starting_declination" - ), - ) - reference_model_inclination: float | FloatData | None = Field( - None, - validation_alias=AliasChoices( - "reference_model_inclination", "reference_inclination" - ), - ) - reference_model_declination: float | FloatData | None = Field( - None, - validation_alias=AliasChoices( - "reference_model_declination", "reference_declination" - ), - ) + starting_inclination: float | FloatData | None = None + starting_declination: float | FloatData | None = None + reference_inclination: float | FloatData | None = None + reference_declination: float | FloatData | None = None class MVIForwardOptions(BaseForwardOptions): @@ -126,10 +105,6 @@ class MVIInversionOptions(BaseInversionOptions): :param inducing_field_strength: Inducing field strength. :param inducing_field_inclination: Inducing field inclination. :param inducing_field_declination: Inducing field declination. - :param starting_inclination: Starting inclination. - :param starting_declination: Starting declination. - :param reference_inclination: Reference inclination. - :param reference_declination: Reference declination. """ name: ClassVar[str] = "Magnetic Vector Inversion" From 89bf57572229a60e8edcd89bfb4d0a6780f6d9df Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 11:52:25 -0700 Subject: [PATCH 41/59] Updates to joints --- simpeg_drivers/joint/driver.py | 10 +++++++--- .../joint/joint_cross_gradient/options.py | 6 +++--- simpeg_drivers/joint/joint_petrophysics/driver.py | 14 +++++++------- simpeg_drivers/joint/joint_petrophysics/options.py | 7 ++++--- .../run_tests/driver_joint_pgi_homogeneous_test.py | 4 ++-- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 88519e59..243cbc5a 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -267,7 +267,11 @@ def validate_create_mesh(self): def validate_create_models(self): """Create stacked model vectors from all drivers provided.""" for model_type in self.models.model_types: - if model_type in ["petrophysics", "gradient_dip", "gradient_direction"]: + if model_type in [ + "petrophysical_model", + "gradient_dip", + "gradient_direction", + ]: continue model = getattr(self.models, f"_{model_type}").model @@ -417,8 +421,8 @@ def _get_local_model_save_directives( ) model_directive.label = driver.params.physical_property - if getattr(driver.params, "model_type", None) == "Resistivity (Ohm-m)": - model_directive.label = "resistivity" + if getattr(driver.params.models, "model_type", None) == "Resistivity (Ohm-m)": + model_directive.label = "resistivity_model" model_directive.transforms = [wire, *model_directive.transforms] diff --git a/simpeg_drivers/joint/joint_cross_gradient/options.py b/simpeg_drivers/joint/joint_cross_gradient/options.py index 3c79e150..a5b3b5a9 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/options.py +++ b/simpeg_drivers/joint/joint_cross_gradient/options.py @@ -25,11 +25,11 @@ class JointCrossGradientOptions(BaseJointOptions): Joint Cross Gradient inversion options. :param cross_gradient_weight_a_b: Weight applied to the cross gradient - regularizations. + regularization between the first and second models. :param cross_gradient_weight_c_a: Weight applied to the cross gradient - regularizations. + regularization between the first and third models. :param cross_gradient_weight_c_b: Weight applied to the cross gradient - regularizations. + regularization between the second and third model. """ name: ClassVar[str] = "Joint Cross Gradient Inversion" diff --git a/simpeg_drivers/joint/joint_petrophysics/driver.py b/simpeg_drivers/joint/joint_petrophysics/driver.py index 59446a2f..a3542e8f 100644 --- a/simpeg_drivers/joint/joint_petrophysics/driver.py +++ b/simpeg_drivers/joint/joint_petrophysics/driver.py @@ -74,7 +74,7 @@ def directives(self): self.inversion_mesh.mesh, self.models.active_cells, 0 ), ], - reference_type=self.params.petrophysics_model.entity_type, + reference_type=self.params.models.petrophysical_model.entity_type, ) ) directives_list.append( @@ -97,7 +97,7 @@ def get_regularization(self): regularizations = super().get_regularization() reg_list, multipliers = self._overload_regularization(regularizations) reg_list.append(self.pgi_regularization) - multipliers.append(self.params.alpha_s) + multipliers.append(self.params.models.alpha_s) return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) @@ -141,9 +141,9 @@ def n_units(self) -> int: @property def geo_units(self) -> dict: """Model units.""" - units = np.unique(self.models.petrophysics) + units = np.unique(self.models.petrophysical_model) model_map = { - unit: self.params.petrophysics_model.entity_type.value_map()[unit] + unit: self.params.models.petrophysical_model.entity_type.value_map()[unit] for unit in units if unit != 0 } @@ -155,7 +155,7 @@ def membership(self) -> np.ndarray[np.int]: if self._membership is None: self._membership = np.empty(self.models.n_active, dtype=int) for ii, unit in enumerate(self.geo_units): - unit_ind = self.models.petrophysics == unit + unit_ind = self.models.petrophysical_model == unit self._membership[unit_ind] = self.class_mapping[ii] return self._membership @@ -172,7 +172,7 @@ def means(self) -> np.ndarray: model_vec = mapping @ self.models.reference_model unit_mean = [] for uid in self.geo_units: - unit_ind = self.models.petrophysics == uid + unit_ind = self.models.petrophysical_model == uid start_values = np.mean(model_vec[unit_ind]) unit_mean.append(start_values) @@ -199,7 +199,7 @@ def weights(self) -> np.ndarray: weights = [] volumes = self.inversion_mesh.mesh.cell_volumes[self.models.active_cells] for uid in self.geo_units: - weights.append(volumes[self.models.petrophysics == uid].sum()) + weights.append(volumes[self.models.petrophysical_model == uid].sum()) return np.r_[weights] / np.sum(weights) @property diff --git a/simpeg_drivers/joint/joint_petrophysics/options.py b/simpeg_drivers/joint/joint_petrophysics/options.py index 6ee2cc71..d51e6d06 100644 --- a/simpeg_drivers/joint/joint_petrophysics/options.py +++ b/simpeg_drivers/joint/joint_petrophysics/options.py @@ -26,10 +26,11 @@ class JointPetrophysicsModelOptions(ModelOptions): """ Model options with petrophysics reference model. - :param petrophysics: The reference geology data. + :param petrophysical: The reference geology data. """ - petrophysics_model: ReferencedData + starting_model: None = None + petrophysical_model: ReferencedData class JointPetrophysicsOptions(BaseJointOptions): @@ -50,4 +51,4 @@ class JointPetrophysicsOptions(BaseJointOptions): group_b_multiplier: float | None = None mesh: Octree - petrophysics_model: JointPetrophysicsModelOptions + models: JointPetrophysicsModelOptions diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index 6cdec651..b87813c7 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -241,7 +241,7 @@ def test_homogeneous_run( length_scale_x=1.0, length_scale_y=1.0, length_scale_z=1.0, - petrophysics_model=petrophysics, + petrophysical_model=petrophysics, initial_beta_ratio=1e2, max_global_iterations=max_iterations, ) @@ -258,7 +258,7 @@ def test_homogeneous_run( out_group = run_ws.get_entity(driver.params.out_group.uid)[0] mesh = out_group.get_entity("mesh")[0] - petro_model = mesh.get_entity("petrophysics_model")[0] + petro_model = mesh.get_entity("petrophysical_model")[0] assert len(np.unique(petro_model.values)) == 4 From 8099763ea7efb4b791c12fd8b002e06bd50719df Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 11:53:53 -0700 Subject: [PATCH 42/59] Update mvi test --- tests/run_tests/driver_mvi_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py index 75aedc85..359d23f7 100644 --- a/tests/run_tests/driver_mvi_test.py +++ b/tests/run_tests/driver_mvi_test.py @@ -69,8 +69,8 @@ def test_magnetic_vector_fwr_run( inducing_field_declination=inducing_field[2], data_object=survey, starting_model=model, - starting_model_inclination=45, - starting_model_declination=270, + starting_inclination=45, + starting_declination=270, ) fwr_driver = MVIForwardDriver(params) fwr_driver.run() From 9580e7b1fd4924e95269d7e0517a2276a0987b35 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 12:18:38 -0700 Subject: [PATCH 43/59] Remove old re-route of reference model on start. Only save FloatData models --- simpeg_drivers/components/models.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index c60a415f..4638d8ff 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -523,7 +523,9 @@ def _initialize(self): if model is not None: self.model = mkvc(model) - self.save_model() + + if isinstance(self._fetch_reference(self.model_type), FloatData): + self.save_model() def remove_air(self, active_cells): """Use active cells vector to remove air cells from model""" @@ -593,10 +595,6 @@ def edit_ndv_model(self, model): def _fetch_reference(self, name: str) -> NumericData | None: value = getattr(self.driver.params.models, name, None) - - if "reference_model" in name and value is None: - value = self._fetch_reference("starting_model") - return value def _get(self, name: str) -> np.ndarray | None: From 5b9130303ceead7642ecfec1e6c944457ee1acb4 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 21:14:22 -0700 Subject: [PATCH 44/59] Fix reference to compute.tile_spatial --- simpeg_drivers/electromagnetics/time_domain/driver.py | 4 ++-- tests/run_tests/driver_grav_test.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/electromagnetics/time_domain/driver.py b/simpeg_drivers/electromagnetics/time_domain/driver.py index ef02069e..66b4e779 100644 --- a/simpeg_drivers/electromagnetics/time_domain/driver.py +++ b/simpeg_drivers/electromagnetics/time_domain/driver.py @@ -100,7 +100,7 @@ def get_tiles(self) -> list[np.ndarray]: return tile_large_group_transmitters( self.params.data_object, - self.params.tile_spatial, + self.params.compute.tile_spatial, ) @@ -123,5 +123,5 @@ def get_tiles(self) -> list[np.ndarray]: return tile_large_group_transmitters( self.params.data_object, - self.params.tile_spatial, + self.params.compute.tile_spatial, ) diff --git a/tests/run_tests/driver_grav_test.py b/tests/run_tests/driver_grav_test.py index 5508b02c..65dba597 100644 --- a/tests/run_tests/driver_grav_test.py +++ b/tests/run_tests/driver_grav_test.py @@ -105,9 +105,10 @@ def test_gravity_run( workpath = tmp_path.parent / "test_gravity_fwr_run0" / "inversion_test.ui.geoh5" with Workspace(workpath) as geoh5: + group = geoh5.get_entity("Gravity Forward")[0] gz = geoh5.get_entity("Iteration_0_gz")[0] orig_gz = gz.values.copy() - mesh = geoh5.get_entity("mesh")[0] + mesh = group.get_entity("mesh")[0] model = mesh.get_entity("starting_model")[0] inds = (mesh.centroids[:, 0] > -35) & (mesh.centroids[:, 0] < 35) From 585fc9876edfcc7e3ca3e32448180712e67c2d21 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sat, 7 Jun 2025 21:54:56 -0700 Subject: [PATCH 45/59] Bring back default threshold for tem --- .../electromagnetics/frequency_domain_1d/options.py | 5 ++++- simpeg_drivers/electromagnetics/time_domain_1d/options.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py index 73af599a..5bbbe3ee 100644 --- a/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/frequency_domain_1d/options.py @@ -22,6 +22,7 @@ FDEMInversionOptions, ) from simpeg_drivers.options import ( + DirectiveOptions, DrapeModelOptions, ) @@ -78,7 +79,9 @@ class FDEM1DInversionOptions(FDEMInversionOptions): vertical_padding=100.0, expansion_factor=1.1, ) - + directives: DirectiveOptions = DirectiveOptions( + sens_wts_threshold=100.0, + ) z_real_channel: PropertyGroup | None = None z_real_uncertainty: PropertyGroup | None = None z_imag_channel: PropertyGroup | None = None diff --git a/simpeg_drivers/electromagnetics/time_domain_1d/options.py b/simpeg_drivers/electromagnetics/time_domain_1d/options.py index 78b1ecd8..60dd7af0 100644 --- a/simpeg_drivers/electromagnetics/time_domain_1d/options.py +++ b/simpeg_drivers/electromagnetics/time_domain_1d/options.py @@ -27,6 +27,7 @@ TDEMInversionOptions, ) from simpeg_drivers.options import ( + DirectiveOptions, DrapeModelOptions, ) @@ -80,6 +81,9 @@ class TDEM1DInversionOptions(TDEMInversionOptions): z_channel: PropertyGroup | None = None z_uncertainty: PropertyGroup | None = None + directives: DirectiveOptions = DirectiveOptions( + sens_wts_threshold=100.0, + ) drape_model: DrapeModelOptions = DrapeModelOptions( u_cell_size=10.0, v_cell_size=10.0, From 8f33aee2c6e5e6a645d5b9c5486e01daaa03e4a8 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sun, 8 Jun 2025 06:44:08 -0700 Subject: [PATCH 46/59] Bring back auto scaling for joints --- simpeg_drivers/joint/options.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpeg_drivers/joint/options.py b/simpeg_drivers/joint/options.py index eb3eb56f..2a22f4b9 100644 --- a/simpeg_drivers/joint/options.py +++ b/simpeg_drivers/joint/options.py @@ -49,7 +49,7 @@ class BaseJointOptions(CoreOptions): group_c_multiplier: float | None = None irls: IRLSOptions = IRLSOptions() - directives: DirectiveOptions = DirectiveOptions() + directives: DirectiveOptions = DirectiveOptions(auto_scale_misfits=True) cooling_schedule: CoolingSceduleOptions = CoolingSceduleOptions() optimization: OptimizationOptions = OptimizationOptions() From d564968800b4bb93775b2d984a6e1559a22d9ca2 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sun, 8 Jun 2025 14:34:51 -0700 Subject: [PATCH 47/59] Default back lower_bound on IP --- .../pseudo_three_dimensions/options.py | 6 +++--- .../three_dimensions/options.py | 14 +++----------- .../induced_polarization/two_dimensions/options.py | 6 +++--- simpeg_drivers/electricals/options.py | 11 +++++++++++ 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py index 99b7e066..0e3e65b6 100644 --- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/options.py @@ -20,11 +20,11 @@ from simpeg_drivers import assets_path from simpeg_drivers.electricals.options import ( FileControlOptions, + IPModelOptions, ) from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, - ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -57,7 +57,7 @@ class IPBatch2DForwardOptions(BaseForwardOptions): mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() file_control: FileControlOptions = FileControlOptions() - models: ConductivityModelOptions + models: IPModelOptions class IPBatch2DInversionOptions(BaseInversionOptions): @@ -89,4 +89,4 @@ class IPBatch2DInversionOptions(BaseInversionOptions): mesh: Octree | None = None drape_model: DrapeModelOptions = DrapeModelOptions() file_control: FileControlOptions = FileControlOptions() - models: ConductivityModelOptions + models: IPModelOptions diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py index 18d7efef..1f9c51c3 100644 --- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/options.py @@ -18,21 +18,13 @@ from geoh5py.objects.surveys.direct_current import PotentialElectrode from simpeg_drivers import assets_path +from simpeg_drivers.electricals.options import IPModelOptions from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, - ConductivityModelOptions, ) -class IP3DModelOptions(ConductivityModelOptions): - """ - ModelOptions class with defaulted lower bound. - """ - - lower_bound: float | FloatData | None = 0 - - class IP3DForwardOptions(BaseForwardOptions): """ Induced Polarization 3D forward options. @@ -51,7 +43,7 @@ class IP3DForwardOptions(BaseForwardOptions): data_object: PotentialElectrode chargeability_channel_bool: bool = True - models: ConductivityModelOptions + models: IPModelOptions class IP3DInversionOptions(BaseInversionOptions): @@ -74,4 +66,4 @@ class IP3DInversionOptions(BaseInversionOptions): data_object: PotentialElectrode chargeability_channel: FloatData chargeability_uncertainty: float | FloatData | None = None - models: ConductivityModelOptions + models: IPModelOptions diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py index 27e8d749..01608d2c 100644 --- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py +++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/options.py @@ -18,10 +18,10 @@ from geoh5py.objects import DrapeModel, PotentialElectrode from simpeg_drivers import assets_path +from simpeg_drivers.electricals.options import IPModelOptions from simpeg_drivers.options import ( BaseForwardOptions, BaseInversionOptions, - ConductivityModelOptions, DrapeModelOptions, LineSelectionOptions, ) @@ -51,7 +51,7 @@ class IP2DForwardOptions(BaseForwardOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - models: ConductivityModelOptions + models: IPModelOptions class IP2DInversionOptions(BaseInversionOptions): @@ -79,4 +79,4 @@ class IP2DInversionOptions(BaseInversionOptions): line_selection: LineSelectionOptions mesh: DrapeModel | None = None drape_model: DrapeModelOptions = DrapeModelOptions() - models: ConductivityModelOptions + models: IPModelOptions diff --git a/simpeg_drivers/electricals/options.py b/simpeg_drivers/electricals/options.py index 574172b3..06e43a11 100644 --- a/simpeg_drivers/electricals/options.py +++ b/simpeg_drivers/electricals/options.py @@ -11,8 +11,19 @@ from __future__ import annotations +from geoh5py.data import FloatData from pydantic import BaseModel +from simpeg_drivers.options import ConductivityModelOptions + + +class IPModelOptions(ConductivityModelOptions): + """ + ModelOptions class with defaulted lower bound. + """ + + lower_bound: float | FloatData | None = 0 + class FileControlOptions(BaseModel): """ From 05e3676929584b814572f9fa281fe6370ee81d6b Mon Sep 17 00:00:00 2001 From: dominiquef Date: Sun, 8 Jun 2025 14:36:58 -0700 Subject: [PATCH 48/59] Fixes for Joint Cross --- simpeg_drivers/joint/driver.py | 4 ++++ .../joint/joint_cross_gradient/options.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 243cbc5a..5bdb7660 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -271,6 +271,10 @@ def validate_create_models(self): "petrophysical_model", "gradient_dip", "gradient_direction", + "starting_inclination", + "starting_declination", + "reference_inclination", + "reference_declination", ]: continue diff --git a/simpeg_drivers/joint/joint_cross_gradient/options.py b/simpeg_drivers/joint/joint_cross_gradient/options.py index a5b3b5a9..fec6ce54 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/options.py +++ b/simpeg_drivers/joint/joint_cross_gradient/options.py @@ -18,6 +18,17 @@ from simpeg_drivers import assets_path from simpeg_drivers.joint.options import BaseJointOptions +from simpeg_drivers.options import ModelOptions + + +class JointCrossGradientModelOptions(ModelOptions): + """ + Model options with petrophysics reference model. + + :param petrophysical: The reference geology data. + """ + + starting_model: None = None class JointCrossGradientOptions(BaseJointOptions): @@ -44,3 +55,5 @@ class JointCrossGradientOptions(BaseJointOptions): cross_gradient_weight_a_b: float = 1.0 cross_gradient_weight_c_a: float | None = None cross_gradient_weight_c_b: float | None = None + + models: JointCrossGradientModelOptions = JointCrossGradientModelOptions() From 45650505857305371afa989e29db4435295e7489 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 08:06:10 -0700 Subject: [PATCH 49/59] Adjust reference to tile_spatial --- simpeg_drivers/utils/tile_estimate.py | 4 ++-- tests/run_tests/driver_tile_estimator_test.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simpeg_drivers/utils/tile_estimate.py b/simpeg_drivers/utils/tile_estimate.py index 11b9e1a0..ca31fe43 100644 --- a/simpeg_drivers/utils/tile_estimate.py +++ b/simpeg_drivers/utils/tile_estimate.py @@ -103,7 +103,7 @@ def get_results(self, max_tiles: int = 13) -> dict: ) # Get the median tile ind = int(np.argsort([len(tile) for tile in tiles])[int(count / 2)]) - self.driver.params.tile_spatial = int(count) + self.driver.params.compute.tile_spatial = int(count) sim, _, _, mapping = MisfitFactory.create_nested_simulation( self.driver.inversion_data, self.driver.inversion_mesh, @@ -221,7 +221,7 @@ def generate_optimal_group(self, optimal: int): Generate a new SimPEGGroup with the optimal number of tiles. """ out_group = self.params.simulation.copy(copy_children=False) - self.driver.params.tile_spatial = optimal + self.driver.params.compute.tile_spatial = optimal self.driver.params.out_group = out_group out_group.options = self.driver.params.serialize() out_group.metadata = None diff --git a/tests/run_tests/driver_tile_estimator_test.py b/tests/run_tests/driver_tile_estimator_test.py index 93617415..0c74ef21 100644 --- a/tests/run_tests/driver_tile_estimator_test.py +++ b/tests/run_tests/driver_tile_estimator_test.py @@ -69,7 +69,7 @@ def test_tile_estimator_run( driver = simpeg_group_to_driver(simpeg_group, geoh5) assert driver.inversion_type == "magnetic scalar" - assert driver.params.tile_spatial == 2 + assert driver.params.compute.tile_spatial == 2 assert ( len(simpeg_group.children) == 2 and simpeg_group.children[0].name == "tile_estimator.png" From e7d69ab2d92e9d7234c62baf95ea88fbb8771437 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 08:13:57 -0700 Subject: [PATCH 50/59] Remove unused imports --- tests/run_tests/driver_joint_pgi_homogeneous_test.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index b87813c7..be24f90c 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -19,34 +19,24 @@ from geoh5py.groups.property_group import GroupTypeEnum, PropertyGroup from geoh5py.groups.simpeg import SimPEGGroup from geoh5py.workspace import Workspace -from pytest import raises -from simpeg_drivers.electricals import DC3DForwardOptions, DC3DInversionOptions -from simpeg_drivers.electricals.direct_current.three_dimensions.driver import ( - DC3DForwardDriver, - DC3DInversionDriver, -) from simpeg_drivers.joint.joint_petrophysics.driver import JointPetrophysicsDriver from simpeg_drivers.joint.joint_petrophysics.options import JointPetrophysicsOptions -from simpeg_drivers.options import ActiveCellsOptions from simpeg_drivers.potential_fields import ( GravityForwardOptions, GravityInversionOptions, MagneticInversionOptions, MVIForwardOptions, - MVIInversionOptions, ) from simpeg_drivers.potential_fields.gravity.driver import ( GravityForwardDriver, GravityInversionDriver, ) from simpeg_drivers.potential_fields.magnetic_scalar.driver import ( - MagneticForwardDriver, MagneticInversionDriver, ) from simpeg_drivers.potential_fields.magnetic_vector.driver import ( MVIForwardDriver, - MVIInversionDriver, ) from simpeg_drivers.utils.utils import get_inversion_output from tests.testing_utils import check_target, setup_inversion_workspace From b77d463660e7c0e98f518963698f1c2c18d25953 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 08:24:28 -0700 Subject: [PATCH 51/59] Resolve micro differences in mvi forward values --- tests/run_tests/driver_joint_pgi_homogeneous_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_joint_pgi_homogeneous_test.py b/tests/run_tests/driver_joint_pgi_homogeneous_test.py index be24f90c..e1cfe7eb 100644 --- a/tests/run_tests/driver_joint_pgi_homogeneous_test.py +++ b/tests/run_tests/driver_joint_pgi_homogeneous_test.py @@ -45,7 +45,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 390.6585155910284, "phi_d": 2320, "phi_m": 0.642} +target_run = {"data_norm": 390.65805009978556, "phi_d": 2470, "phi_m": 0.674} def test_homogeneous_fwr_run( From c6e49385f445bca2c152b18c51572a76c22677f2 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 09:47:34 -0700 Subject: [PATCH 52/59] Remove reference to save_sensitivities in forward uijson --- simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json | 1 - simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json | 1 - .../uijson/direct_current_batch2d_forward.ui.json | 1 - simpeg_drivers-assets/uijson/fdem1d_forward.ui.json | 1 - simpeg_drivers-assets/uijson/fdem_forward.ui.json | 1 - simpeg_drivers-assets/uijson/gravity_forward.ui.json | 1 - .../uijson/induced_polarization_2d_forward.ui.json | 1 - .../uijson/induced_polarization_3d_forward.ui.json | 1 - .../uijson/induced_polarization_batch2d_forward.ui.json | 1 - simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json | 1 - simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json | 1 - simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json | 1 - simpeg_drivers-assets/uijson/tdem1d_forward.ui.json | 1 - simpeg_drivers-assets/uijson/tdem_forward.ui.json | 1 - simpeg_drivers-assets/uijson/tipper_forward.ui.json | 1 - 15 files changed, 15 deletions(-) diff --git a/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json index 5fd3ef84..b46df77d 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json @@ -175,7 +175,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json index d262e4b6..a4448f10 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json @@ -104,7 +104,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json index d4502c29..d9fb5357 100644 --- a/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json @@ -158,7 +158,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json b/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json index 399943c5..55e08aec 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json @@ -157,7 +157,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/fdem_forward.ui.json b/simpeg_drivers-assets/uijson/fdem_forward.ui.json index 9e9fd756..191bfc00 100644 --- a/simpeg_drivers-assets/uijson/fdem_forward.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_forward.ui.json @@ -117,7 +117,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/gravity_forward.ui.json b/simpeg_drivers-assets/uijson/gravity_forward.ui.json index fd49b8d7..429b7842 100644 --- a/simpeg_drivers-assets/uijson/gravity_forward.ui.json +++ b/simpeg_drivers-assets/uijson/gravity_forward.ui.json @@ -160,7 +160,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json index fa99cfca..471faf4a 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json @@ -187,7 +187,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json index c884fb90..c8fd9d36 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json @@ -120,7 +120,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json index 235a93ec..1cc1505a 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json @@ -169,7 +169,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json index b2a40f85..cb27d889 100644 --- a/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json @@ -190,7 +190,6 @@ "property": "", "value": 0.0001 }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json index 96e140ce..674168ce 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json @@ -222,7 +222,6 @@ "property": "", "value": 0.0 }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json index b1f7f72a..3fec26b6 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json @@ -158,7 +158,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json b/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json index 846e7cac..6d85105e 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json @@ -165,7 +165,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/tdem_forward.ui.json b/simpeg_drivers-assets/uijson/tdem_forward.ui.json index 8a6dfd5c..b48dbfde 100644 --- a/simpeg_drivers-assets/uijson/tdem_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_forward.ui.json @@ -136,7 +136,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", diff --git a/simpeg_drivers-assets/uijson/tipper_forward.ui.json b/simpeg_drivers-assets/uijson/tipper_forward.ui.json index 0c89241f..a58c8f31 100644 --- a/simpeg_drivers-assets/uijson/tipper_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_forward.ui.json @@ -134,7 +134,6 @@ "parent": "mesh", "value": "" }, - "save_sensitivities": false, "n_cpu": { "min": 1, "group": "Compute", From cf600f01a39f9e85da7989dde68828cf9b08484a Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 09:48:29 -0700 Subject: [PATCH 53/59] Remove reference to deprecated "gradient_type" in tests --- tests/driver_test.py | 1 - tests/run_tests/driver_2d_rotated_gradients_test.py | 1 - tests/run_tests/driver_airborne_fem_1d_test.py | 1 - tests/run_tests/driver_airborne_tem_test.py | 1 - tests/run_tests/driver_dc_2d_test.py | 1 - tests/run_tests/driver_dc_b2d_test.py | 1 - tests/run_tests/driver_dc_test.py | 1 - tests/run_tests/driver_fem_test.py | 1 - tests/run_tests/driver_grav_test.py | 1 - tests/run_tests/driver_ground_tem_test.py | 1 - tests/run_tests/driver_ip_2d_test.py | 1 - tests/run_tests/driver_ip_b2d_test.py | 1 - tests/run_tests/driver_ip_test.py | 1 - tests/run_tests/driver_mag_test.py | 1 - tests/run_tests/driver_mt_test.py | 1 - tests/run_tests/driver_mvi_test.py | 1 - tests/run_tests/driver_rotated_gradients_test.py | 1 - tests/run_tests/driver_tipper_test.py | 1 - tests/run_tests/sensitivity_cutoff_test.py | 1 - 19 files changed, 19 deletions(-) diff --git a/tests/driver_test.py b/tests/driver_test.py index 243aab26..8666c05f 100644 --- a/tests/driver_test.py +++ b/tests/driver_test.py @@ -45,7 +45,6 @@ def test_smallness_terms(tmp_path: Path): reference_model=0.0, alpha_s=1.0, s_norm=0.0, - gradient_type="components", gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, diff --git a/tests/run_tests/driver_2d_rotated_gradients_test.py b/tests/run_tests/driver_2d_rotated_gradients_test.py index 0c62a3c3..37793b85 100644 --- a/tests/run_tests/driver_2d_rotated_gradients_test.py +++ b/tests/run_tests/driver_2d_rotated_gradients_test.py @@ -143,7 +143,6 @@ def test_dc2d_rotated_grad_run( s_norm=0.0, x_norm=0.0, z_norm=0.0, - gradient_type="components", max_global_iterations=max_iterations, initial_beta=None, initial_beta_ratio=1e0, diff --git a/tests/run_tests/driver_airborne_fem_1d_test.py b/tests/run_tests/driver_airborne_fem_1d_test.py index 9402011b..b5ab4f22 100644 --- a/tests/run_tests/driver_airborne_fem_1d_test.py +++ b/tests/run_tests/driver_airborne_fem_1d_test.py @@ -137,7 +137,6 @@ def test_fem_1d_run(tmp_path: Path, max_iterations=1, pytest=True): s_norm=0.0, x_norm=0.0, z_norm=0.0, - gradient_type="components", upper_bound=0.75, max_global_iterations=max_iterations, initial_beta_ratio=1e1, diff --git a/tests/run_tests/driver_airborne_tem_test.py b/tests/run_tests/driver_airborne_tem_test.py index 22291716..be971724 100644 --- a/tests/run_tests/driver_airborne_tem_test.py +++ b/tests/run_tests/driver_airborne_tem_test.py @@ -175,7 +175,6 @@ def test_airborne_tem_run(tmp_path: Path, max_iterations=1, pytest=True): y_norm=2.0, z_norm=2.0, alpha_s=1e-4, - gradient_type="total", lower_bound=2e-6, upper_bound=1e2, max_global_iterations=max_iterations, diff --git a/tests/run_tests/driver_dc_2d_test.py b/tests/run_tests/driver_dc_2d_test.py index bb22b669..b2b14f7c 100644 --- a/tests/run_tests/driver_dc_2d_test.py +++ b/tests/run_tests/driver_dc_2d_test.py @@ -119,7 +119,6 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True): s_norm=0.0, x_norm=1.0, z_norm=1.0, - gradient_type="components", max_global_iterations=max_iterations, initial_beta=None, initial_beta_ratio=1e0, diff --git a/tests/run_tests/driver_dc_b2d_test.py b/tests/run_tests/driver_dc_b2d_test.py index cffd0337..b0f406da 100644 --- a/tests/run_tests/driver_dc_b2d_test.py +++ b/tests/run_tests/driver_dc_b2d_test.py @@ -122,7 +122,6 @@ def test_dc_p3d_run( s_norm=0.0, x_norm=1.0, z_norm=1.0, - gradient_type="components", max_global_iterations=max_iterations, initial_beta=None, initial_beta_ratio=10.0, diff --git a/tests/run_tests/driver_dc_test.py b/tests/run_tests/driver_dc_test.py index 564c9c1c..b5fe26cd 100644 --- a/tests/run_tests/driver_dc_test.py +++ b/tests/run_tests/driver_dc_test.py @@ -103,7 +103,6 @@ def test_dc_3d_run( x_norm=1.0, y_norm=1.0, z_norm=1.0, - gradient_type="components", potential_channel=potential, potential_uncertainty=1e-3, max_global_iterations=max_iterations, diff --git a/tests/run_tests/driver_fem_test.py b/tests/run_tests/driver_fem_test.py index 720e8e3d..25d57011 100644 --- a/tests/run_tests/driver_fem_test.py +++ b/tests/run_tests/driver_fem_test.py @@ -166,7 +166,6 @@ def test_fem_run(tmp_path: Path, max_iterations=1, pytest=True): x_norm=0.0, y_norm=0.0, z_norm=0.0, - gradient_type="components", upper_bound=0.75, max_global_iterations=max_iterations, initial_beta_ratio=1e1, diff --git a/tests/run_tests/driver_grav_test.py b/tests/run_tests/driver_grav_test.py index 65dba597..251e2014 100644 --- a/tests/run_tests/driver_grav_test.py +++ b/tests/run_tests/driver_grav_test.py @@ -138,7 +138,6 @@ def test_gravity_run( x_norm=gradient_norms, y_norm=gradient_norms, z_norm=gradient_norms, - gradient_type="components", gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, diff --git a/tests/run_tests/driver_ground_tem_test.py b/tests/run_tests/driver_ground_tem_test.py index 1313687d..2331acb0 100644 --- a/tests/run_tests/driver_ground_tem_test.py +++ b/tests/run_tests/driver_ground_tem_test.py @@ -205,7 +205,6 @@ def test_ground_tem_run(tmp_path: Path, max_iterations=1, pytest=True): y_norm=2.0, z_norm=2.0, alpha_s=0e-1, - gradient_type="total", lower_bound=2e-6, upper_bound=1e2, max_global_iterations=max_iterations, diff --git a/tests/run_tests/driver_ip_2d_test.py b/tests/run_tests/driver_ip_2d_test.py index ff72cee6..ab1f7be1 100644 --- a/tests/run_tests/driver_ip_2d_test.py +++ b/tests/run_tests/driver_ip_2d_test.py @@ -102,7 +102,6 @@ def test_ip_2d_run( s_norm=0.0, x_norm=0.0, z_norm=0.0, - gradient_type="components", max_global_iterations=max_iterations, initial_beta=None, initial_beta_ratio=1e0, diff --git a/tests/run_tests/driver_ip_b2d_test.py b/tests/run_tests/driver_ip_b2d_test.py index 0e344019..769a24ab 100644 --- a/tests/run_tests/driver_ip_b2d_test.py +++ b/tests/run_tests/driver_ip_b2d_test.py @@ -129,7 +129,6 @@ def test_ip_p3d_run( z_norm=0.0, length_scale_x=1.0, length_scale_z=1.0, - gradient_type="components", max_global_iterations=max_iterations, initial_beta=None, initial_beta_ratio=1e0, diff --git a/tests/run_tests/driver_ip_test.py b/tests/run_tests/driver_ip_test.py index 13efe9d8..afc32f10 100644 --- a/tests/run_tests/driver_ip_test.py +++ b/tests/run_tests/driver_ip_test.py @@ -93,7 +93,6 @@ def test_ip_3d_run( x_norm=0.0, y_norm=0.0, z_norm=0.0, - gradient_type="components", chargeability_channel=potential, chargeability_uncertainty=2e-4, max_global_iterations=max_iterations, diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py index 54383ec4..0ec4891c 100644 --- a/tests/run_tests/driver_mag_test.py +++ b/tests/run_tests/driver_mag_test.py @@ -108,7 +108,6 @@ def test_susceptibility_run( y_norm=1.0, z_norm=1.0, initial_beta_ratio=1e1, - gradient_type="components", tmi_channel=tmi, tmi_uncertainty=1.0, max_global_iterations=max_iterations, diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py index 5ee3bdc6..bd05e66c 100644 --- a/tests/run_tests/driver_mt_test.py +++ b/tests/run_tests/driver_mt_test.py @@ -161,7 +161,6 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True): x_norm=1.0, y_norm=1.0, z_norm=1.0, - gradient_type="components", cooling_rate=1, lower_bound=0.75, model_type="Resistivity (Ohm-m)", diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py index 359d23f7..53553bad 100644 --- a/tests/run_tests/driver_mvi_test.py +++ b/tests/run_tests/driver_mvi_test.py @@ -199,7 +199,6 @@ def test_magnetic_vector_bounds_run( x_norm=1.0, y_norm=1.0, z_norm=1.0, - gradient_type="components", tmi_channel=tmi, tmi_uncertainty=4.0, lower_bound=1e-6, diff --git a/tests/run_tests/driver_rotated_gradients_test.py b/tests/run_tests/driver_rotated_gradients_test.py index aa6cd026..f13cfd0d 100644 --- a/tests/run_tests/driver_rotated_gradients_test.py +++ b/tests/run_tests/driver_rotated_gradients_test.py @@ -113,7 +113,6 @@ def test_rotated_grad_run( x_norm=0.0, y_norm=0.0, z_norm=0.0, - gradient_type="components", gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, diff --git a/tests/run_tests/driver_tipper_test.py b/tests/run_tests/driver_tipper_test.py index 16416743..919643c4 100644 --- a/tests/run_tests/driver_tipper_test.py +++ b/tests/run_tests/driver_tipper_test.py @@ -144,7 +144,6 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True): y_norm=1.0, z_norm=1.0, alpha_s=1.0, - gradient_type="components", model_type="Resistivity (Ohm-m)", lower_bound=0.75, max_global_iterations=max_iterations, diff --git a/tests/run_tests/sensitivity_cutoff_test.py b/tests/run_tests/sensitivity_cutoff_test.py index 3c4d9d4a..da0d2bab 100644 --- a/tests/run_tests/sensitivity_cutoff_test.py +++ b/tests/run_tests/sensitivity_cutoff_test.py @@ -54,7 +54,6 @@ def setup_inversion_results( starting_model=1e-4, reference_model=0.0, s_norm=0.0, - gradient_type="components", gz_channel=gz, gz_uncertainty=2e-3, lower_bound=0.0, From 2f0da422510030c2ceeff9cea2f448c729fb36df Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 10:17:00 -0700 Subject: [PATCH 54/59] Fix more old referencing to options --- simpeg_drivers/components/factories/directives_factory.py | 4 ++-- simpeg_drivers/driver.py | 2 +- simpeg_drivers/electricals/driver.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 2bafd471..a1672fbe 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -277,7 +277,7 @@ def update_irls_directive(self): "Starting chi factor is greater than target chi factor.\n" "Setting the target chi factor to the starting chi factor." ) - start_chi_fact = self.params.irls.chi_factor + start_chi_fact = self.params.cooling_schedule.chi_factor self._update_irls_directive = directives.UpdateIRLS( f_min_change=self.params.optimization.f_min_change, @@ -325,7 +325,7 @@ def vector_inversion_directive(self): self._vector_inversion_directive = directives.VectorInversion( [objective.simulation for objective in self.driver.data_misfit.objfcts], self.driver.regularization, - chifact_target=self.driver.params.chi_factor * 2, + chifact_target=self.driver.params.cooling_schedule.chi_factor * 2, reference_angles=reference_angles, ) return self._vector_inversion_directive diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 67bd3e13..48be8882 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -447,7 +447,7 @@ def start_inversion_message(self): chi_start = ( self.params.irls.starting_chi_factor if has_chi_start - else self.params.chi_factor + else self.params.cooling_schedule.chi_factor ) if getattr(self, "drivers", None) is not None: # joint problem diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py index 5644f08e..c96c4325 100644 --- a/simpeg_drivers/electricals/driver.py +++ b/simpeg_drivers/electricals/driver.py @@ -96,14 +96,14 @@ def transfer_models(self, mesh: DrapeModel) -> dict[str, uuid.UUID | float]: :param mesh: Destination DrapeModel object. """ - models = {"starting_model": self.batch2d_params.starting_model} + models = {"starting_model": self.batch2d_params.models.starting_model} for model in self._model_list: models[model] = getattr(self.batch2d_params, model) if not self.batch2d_params.forward_only: for model in ["reference_model", "lower_bound", "upper_bound"]: - models[model] = getattr(self.batch2d_params, model) + models[model] = getattr(self.batch2d_params.models, model) if self.batch2d_params.mesh is not None: xyz_in = get_locations(self.workspace, self.batch2d_params.mesh) From 83eb22266e9a7de863143fd038ecd2e55bd9cdc9 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 10:55:20 -0700 Subject: [PATCH 55/59] Fix bad referencing to model_type --- simpeg_drivers/components/factories/source_factory.py | 2 +- simpeg_drivers/components/models.py | 3 ++- simpeg_drivers/joint/joint_surveys/driver.py | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index 78dbd19e..2431a0ae 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -134,7 +134,7 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ if self.factory_type in ["magnetotellurics", "tipper"]: background = deepcopy(self.params.models.conductivity_model) - if getattr(self.params, "model_type", None) == "Resistivity (Ohm-m)": + if getattr(self.params.models, "model_type", None) == "Resistivity (Ohm-m)": background **= -1.0 kwargs["sigma_primary"] = [background] diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 4638d8ff..15879c78 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -577,7 +577,8 @@ def edit_ndv_model(self, model): model_type = self.model_type if ( model_type == "conductivity_model" - and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)" + and getattr(self.driver.params.models, "model_type", None) + == "Resistivity (Ohm-m)" ): model_type = "resistivity_model" diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py index 8e3aa744..5916cbb1 100644 --- a/simpeg_drivers/joint/joint_surveys/driver.py +++ b/simpeg_drivers/joint/joint_surveys/driver.py @@ -65,13 +65,13 @@ def validate_create_models(self): ]: model = np.exp(model) if ( - getattr(self.params, "model_type", None) + getattr(self.params.models, "model_type", None) == "Resistivity (Ohm-m)" ): logger.info( "Converting input %s model to %s", model_type, - getattr(self.params, "model_type", None), + getattr(self.params.models, "model_type", None), ) model = 1.0 / model From ae76fc2d7a9daea5b2597bf1fb9cfd8a3e8c7c68 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 11:09:14 -0700 Subject: [PATCH 56/59] More inner fixes --- simpeg_drivers/components/models.py | 2 +- simpeg_drivers/electricals/driver.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 15879c78..762d50fd 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -524,7 +524,7 @@ def _initialize(self): if model is not None: self.model = mkvc(model) - if isinstance(self._fetch_reference(self.model_type), FloatData): + if isinstance(self._fetch_reference(self.model_type), Data): self.save_model() def remove_air(self, active_cells): diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py index c96c4325..ccb34c92 100644 --- a/simpeg_drivers/electricals/driver.py +++ b/simpeg_drivers/electricals/driver.py @@ -99,7 +99,7 @@ def transfer_models(self, mesh: DrapeModel) -> dict[str, uuid.UUID | float]: models = {"starting_model": self.batch2d_params.models.starting_model} for model in self._model_list: - models[model] = getattr(self.batch2d_params, model) + models[model] = getattr(self.batch2d_params, model, None) if not self.batch2d_params.forward_only: for model in ["reference_model", "lower_bound", "upper_bound"]: From 85e61c2c244347baa729c9d5b34f9e175bf31d51 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 15:06:57 -0700 Subject: [PATCH 57/59] Re-lock on develops --- .../py-3.10-linux-64-dev.conda.lock.yml | 32 +-- environments/py-3.10-linux-64.conda.lock.yml | 30 +-- .../py-3.10-win-64-dev.conda.lock.yml | 32 +-- environments/py-3.10-win-64.conda.lock.yml | 30 +-- .../py-3.11-linux-64-dev.conda.lock.yml | 32 +-- environments/py-3.11-linux-64.conda.lock.yml | 30 +-- .../py-3.11-win-64-dev.conda.lock.yml | 32 +-- environments/py-3.11-win-64.conda.lock.yml | 30 +-- .../py-3.12-linux-64-dev.conda.lock.yml | 32 +-- environments/py-3.12-linux-64.conda.lock.yml | 30 +-- .../py-3.12-win-64-dev.conda.lock.yml | 32 +-- environments/py-3.12-win-64.conda.lock.yml | 30 +-- py-3.10.conda-lock.yml | 212 +++++++++--------- py-3.11.conda-lock.yml | 212 +++++++++--------- py-3.12.conda-lock.yml | 212 +++++++++--------- pyproject.toml | 2 +- 16 files changed, 505 insertions(+), 505 deletions(-) diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml index abf3c7bf..ae1cc0ce 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db +# input_hash: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py310hf71b8c6_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py310hf71b8c6_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -55,7 +55,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py310h89163eb_0 + - fonttools=4.58.2=py310h89163eb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -63,7 +63,7 @@ dependencies: - greenlet=3.2.3=py310hf71b8c6_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py310h2a0e991_101 + - h5py=3.14.0=nompi_py310hea1e86d_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -112,9 +112,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -133,13 +133,13 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -229,7 +229,7 @@ dependencies: - readline=8.2=h8c095d6_2 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py310hbcd0ec0_0 @@ -298,13 +298,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index d211220a..702e8c21 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db +# input_hash: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py310hf71b8c6_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py310hf71b8c6_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -30,12 +30,12 @@ dependencies: - discretize=0.11.3=py310ha2bacc8_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py310h89163eb_0 + - fonttools=4.58.2=py310h89163eb_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310ha2bacc8_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py310h2a0e991_101 + - h5py=3.14.0=nompi_py310hea1e86d_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -51,9 +51,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -72,12 +72,12 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -150,13 +150,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha75aee5_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml index 7f14541b..77493fd5 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f +# input_hash: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py310h9e98ed7_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py310h9e98ed7_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -55,7 +55,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py310h38315fa_0 + - fonttools=4.58.2=py310h38315fa_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -63,7 +63,7 @@ dependencies: - greenlet=3.2.3=py310h9e98ed7_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py310hd6dd405_101 + - h5py=3.14.0=nompi_py310h877c39c_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -110,9 +110,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -127,10 +127,10 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -213,7 +213,7 @@ dependencies: - pyzmq=26.4.0=py310h656833d_0 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py310hed05c55_0 @@ -288,13 +288,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index 185efec1..41323b48 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f +# input_hash: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py310h9e98ed7_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py310h9e98ed7_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -29,12 +29,12 @@ dependencies: - discretize=0.11.3=py310h3e8ed56_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py310h38315fa_0 + - fonttools=4.58.2=py310h38315fa_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py310h3e8ed56_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py310hd6dd405_101 + - h5py=3.14.0=nompi_py310h877c39c_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -48,9 +48,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -65,9 +65,9 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -138,13 +138,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py310ha8f682b_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index 084a3b52..c550e8bc 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 +# input_hash: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py311hfdbb021_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py311hfdbb021_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py311h2dc5d0c_0 + - fonttools=4.58.2=py311h2dc5d0c_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -64,7 +64,7 @@ dependencies: - greenlet=3.2.3=py311hfdbb021_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py311h38436b4_101 + - h5py=3.14.0=nompi_py311h7f87ba5_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -114,9 +114,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -135,13 +135,13 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -231,7 +231,7 @@ dependencies: - readline=8.2=h8c095d6_2 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py311hdae7d1d_0 @@ -301,13 +301,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index 156cb6e5..d9e9a7e3 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 +# input_hash: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py311hfdbb021_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py311hfdbb021_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -31,12 +31,12 @@ dependencies: - discretize=0.11.3=py311h5b7b71f_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py311h2dc5d0c_0 + - fonttools=4.58.2=py311h2dc5d0c_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h5b7b71f_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py311h38436b4_101 + - h5py=3.14.0=nompi_py311h7f87ba5_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -52,9 +52,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -73,12 +73,12 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -152,13 +152,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311h9ecbd09_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index 10b330e8..4a2286a8 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 +# input_hash: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py311hda3d55a_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py311hda3d55a_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py311h5082efb_0 + - fonttools=4.58.2=py311h5082efb_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -64,7 +64,7 @@ dependencies: - greenlet=3.2.3=py311hda3d55a_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py311hc74fd12_101 + - h5py=3.14.0=nompi_py311h97e6cc2_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -112,9 +112,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -129,10 +129,10 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -215,7 +215,7 @@ dependencies: - pyzmq=26.4.0=py311h484c95c_0 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py311hc4022dc_0 @@ -291,13 +291,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index 694f197e..0d709ab1 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 +# input_hash: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py311hda3d55a_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py311hda3d55a_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -30,12 +30,12 @@ dependencies: - discretize=0.11.3=py311h9b10771_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py311h5082efb_0 + - fonttools=4.58.2=py311h5082efb_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py311h9b10771_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py311hc74fd12_101 + - h5py=3.14.0=nompi_py311h97e6cc2_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -49,9 +49,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -66,9 +66,9 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -140,13 +140,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py311he736701_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index a344fd0b..6ce8b051 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: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e +# input_hash: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py312h2ec8cdc_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py312h2ec8cdc_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py312h178313f_0 + - fonttools=4.58.2=py312h178313f_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -64,7 +64,7 @@ dependencies: - greenlet=3.2.3=py312h2ec8cdc_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py312h01d377b_101 + - h5py=3.14.0=nompi_py312h3faca00_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -114,9 +114,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -135,13 +135,13 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - libsodium=1.0.20=h4ab18f5_0 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -231,7 +231,7 @@ dependencies: - readline=8.2=h8c095d6_2 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py312h680f630_0 @@ -301,13 +301,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3b0a872_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index 1675e6be..d9c84d00 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: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e +# input_hash: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=hb9d3cd8_2 - - brotli-bin=1.1.0=hb9d3cd8_2 - - brotli-python=1.1.0=py312h2ec8cdc_2 + - brotli=1.1.0=hb9d3cd8_3 + - brotli-bin=1.1.0=hb9d3cd8_3 + - brotli-python=1.1.0=py312h2ec8cdc_3 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.34.5=hb9d3cd8_0 - ca-certificates=2025.4.26=hbd8a1cb_0 @@ -31,12 +31,12 @@ dependencies: - discretize=0.11.3=py312hc39e661_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py312h178313f_0 + - fonttools=4.58.2=py312h178313f_0 - freetype=2.13.3=ha770c72_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hc39e661_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py312h01d377b_101 + - h5py=3.14.0=nompi_py312h3faca00_100 - hdf5=1.14.6=nompi_h2d575fe_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -52,9 +52,9 @@ dependencies: - lerc=4.0.0=h0aef613_1 - libaec=1.1.3=h59595ed_0 - libblas=3.9.0=31_hfdb39a5_mkl - - libbrotlicommon=1.1.0=hb9d3cd8_2 - - libbrotlidec=1.1.0=hb9d3cd8_2 - - libbrotlienc=1.1.0=hb9d3cd8_2 + - libbrotlicommon=1.1.0=hb9d3cd8_3 + - libbrotlidec=1.1.0=hb9d3cd8_3 + - libbrotlienc=1.1.0=hb9d3cd8_3 - libcblas=3.9.0=31_h372d94f_mkl - libcurl=8.14.1=h332b0f4_0 - libdeflate=1.24=h86f0d12_0 @@ -73,12 +73,12 @@ dependencies: - libiconv=1.18=h4ce23a2_1 - libjpeg-turbo=3.1.0=hb9d3cd8_0 - liblapack=3.9.0=31_hc41d3b0_mkl - - liblzma=5.8.1=hb9d3cd8_1 + - liblzma=5.8.1=hb9d3cd8_2 - libnghttp2=1.64.0=h161d5f1_0 - libnsl=2.0.1=hd590300_0 - libpng=1.6.47=h943b412_0 - libscotch=7.0.6=hea33c07_1 - - libsqlite=3.50.0=hee588c1_0 + - libsqlite=3.50.1=hee588c1_0 - libssh2=1.11.1=hcf80075_0 - libstdcxx=15.1.0=h8f9b012_2 - libstdcxx-ng=15.1.0=h4852527_2 @@ -152,13 +152,13 @@ dependencies: - yaml=0.2.5=h7f98852_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h66e93f0_2 - zstd=1.5.7=hb8e6e7a_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index 24e58649..73237185 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: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae +# input_hash: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c channels: - conda-forge @@ -24,9 +24,9 @@ dependencies: - bleach=6.2.0=pyh29332c3_4 - bleach-with-css=6.2.0=h82add2a_4 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py312h275cf98_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py312h275cf98_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -56,7 +56,7 @@ dependencies: - exceptiongroup=1.3.0=pyhd8ed1ab_0 - executing=2.2.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py312h31fea79_0 + - fonttools=4.58.2=py312h31fea79_0 - fqdn=1.5.1=pyhd8ed1ab_1 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 @@ -64,7 +64,7 @@ dependencies: - greenlet=3.2.3=py312h275cf98_0 - h11=0.16.0=pyhd8ed1ab_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py312h4e244af_101 + - h5py=3.14.0=nompi_py312h6cc2a29_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - httpcore=1.0.9=pyh29332c3_0 @@ -112,9 +112,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -129,10 +129,10 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - libsodium=1.0.20=hc70643c_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -215,7 +215,7 @@ dependencies: - pyzmq=26.4.0=py312hd7027bb_0 - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 - referencing=0.36.2=pyh29332c3_0 - - requests=2.32.3=pyhd8ed1ab_1 + - requests=2.32.4=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_1 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rpds-py=0.25.1=py312h8422cdd_0 @@ -291,13 +291,13 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=ha9f60a1_7 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index f388e4c8..58dc0ef4 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: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae +# input_hash: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c channels: - conda-forge @@ -10,9 +10,9 @@ dependencies: - annotated-types=0.7.0=pyhd8ed1ab_1 - asciitree=0.3.3=py_2 - bokeh=3.6.3=pyhd8ed1ab_0 - - brotli=1.1.0=h2466b09_2 - - brotli-bin=1.1.0=h2466b09_2 - - brotli-python=1.1.0=py312h275cf98_2 + - brotli=1.1.0=h2466b09_3 + - brotli-bin=1.1.0=h2466b09_3 + - brotli-python=1.1.0=py312h275cf98_3 - bzip2=1.0.8=h2466b09_7 - ca-certificates=2025.4.26=h4c7d964_0 - cached-property=1.5.2=hd8ed1ab_1 @@ -30,12 +30,12 @@ dependencies: - discretize=0.11.3=py312hbaa7e33_0 - distributed=2025.3.0=pyhd8ed1ab_0 - fasteners=0.19=pyhd8ed1ab_1 - - fonttools=4.58.1=py312h31fea79_0 + - fonttools=4.58.2=py312h31fea79_0 - freetype=2.13.3=h57928b3_1 - fsspec=2025.5.1=pyhd8ed1ab_0 - geoana=0.7.2=py312hbaa7e33_0 - h2=4.2.0=pyhd8ed1ab_0 - - h5py=3.13.0=nompi_py312h4e244af_101 + - h5py=3.14.0=nompi_py312h6cc2a29_100 - hdf5=1.14.6=nompi_hd5d9e70_101 - hpack=4.1.0=pyhd8ed1ab_0 - hyperframe=6.1.0=pyhd8ed1ab_0 @@ -49,9 +49,9 @@ dependencies: - lerc=4.0.0=h6470a55_1 - libaec=1.1.3=h63175ca_0 - libblas=3.9.0=31_h641d27c_mkl - - libbrotlicommon=1.1.0=h2466b09_2 - - libbrotlidec=1.1.0=h2466b09_2 - - libbrotlienc=1.1.0=h2466b09_2 + - libbrotlicommon=1.1.0=h2466b09_3 + - libbrotlidec=1.1.0=h2466b09_3 + - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=31_h5e41251_mkl - libcurl=8.14.1=h88aaa65_0 - libdeflate=1.24=h76ddb4d_0 @@ -66,9 +66,9 @@ dependencies: - libiconv=1.18=h135ad9c_1 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=31_h1aa476e_mkl - - liblzma=5.8.1=h2466b09_1 + - liblzma=5.8.1=h2466b09_2 - libpng=1.6.47=h7a4582a_0 - - libsqlite=3.50.0=h67fdade_0 + - libsqlite=3.50.1=h67fdade_0 - libssh2=1.11.1=h9aa295b_0 - libtiff=4.7.0=h05922d8_5 - libwebp-base=1.5.0=h3b0e114_0 @@ -140,13 +140,13 @@ dependencies: - yaml=0.2.5=h8ffe710_2 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.22.0=pyhd8ed1ab_0 + - zipp=3.23.0=pyhd8ed1ab_0 - zstandard=0.23.0=py312h4389bb4_2 - zstd=1.5.7=hbeecb71_2 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@02fbd85bf7d54b8f4336f1f0094c1c3e27714e81 - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@d5959a0e19b45a89eb8a02cd608bc8accb74adb7 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index 6ea7e0ca..1a472f53 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: 19b3c609da3100c5b24164ea5e3720bddce2b063a3fb32e0685f533768903c0f - linux-64: f519a30b5d3d32bb146ece92c2693c88fc5f1ffc739b3c35c6759503145552db + win-64: eaae335cf36adc80372dc46b8513b3371068cb4b78164f9bf33218ae884e5a43 + linux-64: d20cb4f62773f79495ca5432e662a34453afa41e6084f06c349fbb84600a44bb channels: - url: conda-forge used_env_vars: [] @@ -535,10 +535,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda hash: - md5: 98514fe74548d768907ce7a13f680e8f - sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + md5: 5d08a0ac29e6a5a984817584775d4131 + sha256: c969baaa5d7a21afb5ed4b8dd830f82b78e425caaa13d717766ed07a61630bec category: main optional: false - name: brotli @@ -552,10 +552,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_3.conda hash: - md5: 378f1c9421775dfe644731cb121c8979 - sha256: d8fd7d1b446706776117d2dcad1c0289b9f5e1521cb13405173bad38568dd252 + md5: c2a23d8a8986c72148c63bdf855ac99a + sha256: d57cd6ea705c9d2a8a2721f083de247501337e459f5498726b564cfca138e192 category: main optional: false - name: brotli-bin @@ -567,10 +567,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda hash: - md5: c63b5e52939e795ba8d26e35d767a843 - sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + md5: 58178ef8ba927229fba6d84abf62c108 + sha256: ab74fa8c3d1ca0a055226be89e99d6798c65053e2d2d3c6cb380c574972cd4a7 category: main optional: false - name: brotli-bin @@ -583,10 +583,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_3.conda hash: - md5: d22534a9be5771fc58eb7564947f669d - sha256: f3bf2893613540ac256c68f211861c4de618d96291719e32178d894114ac2bc2 + md5: c7c345559c1ac25eede6dccb7b931202 + sha256: 85aac1c50a426be6d0cc9fd52480911d752f4082cb78accfdb257243e572c7eb category: main optional: false - name: brotli-python @@ -599,10 +599,10 @@ package: libstdcxx: '>=13' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_3.conda hash: - md5: bf502c169c71e3c6ac0d6175addfacc2 - sha256: 14f1e89d3888d560a553f40ac5ba83e4435a107552fa5b2b2029a7472554c1ef + md5: 63d24a5dd21c738d706f91569dbd1892 + sha256: 313cd446b1a42b55885741534800a1d69bd3816eeef662f41fc3ac26e16d537e category: main optional: false - name: brotli-python @@ -615,10 +615,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_3.conda hash: - md5: 3a10a1d0cf3ece273195f26191fd6cc6 - sha256: 1b7893a07f2323410b09b63b4627103efa86163be835ac94966333b37741cdc7 + md5: 52d37d0f3a9286d295fbf72cf0aa99ee + sha256: 6eac109d40bd36d158064a552babc3da069662ad93712453eb43320f330b7c82 category: main optional: false - name: bzip2 @@ -1414,7 +1414,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: linux-64 dependencies: @@ -1425,14 +1425,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py310h89163eb_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.2-py310h89163eb_0.conda hash: - md5: f4f46207c6defa5ea17b0299298ba849 - sha256: 4478c8c3948d36e18b212de9fdc0c2654e4c380ab915d0aa130e7fafb7d123a2 + md5: 3af603de53814258a536b268ad2ae5ff + sha256: e01ccdcfcb6c6aa57fadee4475bbbf9a66fa942abc46a677a27926df851f1679 category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: win-64 dependencies: @@ -1444,10 +1444,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py310h38315fa_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.2-py310h38315fa_0.conda hash: - md5: 76a9c04ac1c23cee8b00733eb942f8e5 - sha256: 7ff47ff80fe7bce1a6695f717c6fdfc1a0bd3490b0bdaa6c2b5b3378555c5a16 + md5: b8f853b33c315e7cab172ab4303ecf06 + sha256: 85cf312fd1ebe07bae419b3b5a84fba72da077587d270046a1595ef8698177ee category: main optional: false - name: fqdn @@ -1651,7 +1651,7 @@ package: category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: linux-64 dependencies: @@ -1659,32 +1659,32 @@ package: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' libgcc: '>=13' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.13.0-nompi_py310h2a0e991_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.14.0-nompi_py310hea1e86d_100.conda hash: - md5: 5b603121de5b7e3f59ff4b051e6d81e1 - sha256: 5caf8567d9b73fb06501484d80d0e43eab46975b9573ec1346066c2e6848089a + md5: f6879e3fc12006cffde701eb08ce1f09 + sha256: 8c7d6fea5345596f1fbef21b99fbc04cef6e7cfa5023619232da52fab80b554f category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: win-64 dependencies: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.13.0-nompi_py310hd6dd405_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.14.0-nompi_py310h877c39c_100.conda hash: - md5: a15a47ee280b57c98ed3500c0ac36d5a - sha256: 09b7d7bfd58523ed9527ffd7ec3b155d429a0258d4c9639cb1050adc5cb4d8d3 + md5: 5b861086c5a7689a6d95c4df10d211e4 + sha256: 754155af401cb3577c3e76ed7a4427ad9928c210d32b8571f84492c54b67f5a4 category: main optional: false - name: hdf5 @@ -3184,10 +3184,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda hash: - md5: 41b599ed2b02abcfdd84302bff174b23 - sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + md5: cb98af5db26e3f482bebb80ce9d947d3 + sha256: 462a8ed6a7bb9c5af829ec4b90aab322f8bcd9d8987f793e6986ea873bbd05cf category: main optional: false - name: libbrotlicommon @@ -3198,10 +3198,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_3.conda hash: - md5: f7dc9a8f21d74eab46456df301da2972 - sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c + md5: cf20c8b8b48ab5252ec64b9c66bfe0a4 + sha256: e70ea4b773fadddda697306a80a29d9cbd36b7001547cd54cbfe9a97a518993f category: main optional: false - name: libbrotlidec @@ -3212,10 +3212,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda hash: - md5: 9566f0bd264fbd463002e759b8a82401 - sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + md5: 1c6eecffad553bde44c5238770cfb7da + sha256: 3eb27c1a589cbfd83731be7c3f19d6d679c7a444c3ba19db6ad8bf49172f3d83 category: main optional: false - name: libbrotlidec @@ -3227,10 +3227,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_3.conda hash: - md5: 9bae75ce723fa34e98e239d21d752a7e - sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f + md5: a342933dbc6d814541234c7c81cb5205 + sha256: a35a0db7e3257e011b10ffb371735b2b24074412d0b27c3dab7ca9f2c549cfcf category: main optional: false - name: libbrotlienc @@ -3241,10 +3241,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda hash: - md5: 06f70867945ea6a84d35836af780f1de - sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + md5: 3facafe58f3858eb95527c7d3a3fc578 + sha256: 76e8492b0b0a0d222bfd6081cae30612aa9915e4309396fdca936528ccf314b7 category: main optional: false - name: libbrotlienc @@ -3256,10 +3256,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_3.conda hash: - md5: 85741a24d97954a991e55e34bc55990b - sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 + md5: 7ef0af55d70cbd9de324bb88b7f9d81e + sha256: 9d0703c5a01c10d346587ff0535a0eb81042364333caa4a24a0e4a0c08fd490b category: main optional: false - name: libcblas @@ -3701,10 +3701,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda hash: - md5: a76fd702c93cd2dfd89eff30a5fd45a8 - sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c + md5: 1a580f7796c7bf6393fddb8bbbde58dc + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 category: main optional: false - name: liblzma @@ -3715,10 +3715,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda hash: - md5: 14a1042c163181e143a7522dfb8ad6ab - sha256: adbf6c7bde70536ada734a81b8b5aa23654f2b95445204404622e0cc40e921a0 + md5: c15148b2e18da456f5108ccb5e411446 + sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc category: main optional: false - name: libnghttp2 @@ -3825,31 +3825,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.1-hee588c1_0.conda hash: - md5: 71888e92098d0f8c41b09a671ad289bc - sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 + md5: 96a7e36bff29f1d0ddf5b771e0da373a + sha256: cd15ab1b9f0d53507e7ad7a01e52f6756ab3080bf623ab0e438973b6e4dba3c0 category: main optional: false - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.1-h67fdade_0.conda hash: - md5: 92b11b0b2120d563caa1629928122cee - sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 + md5: 0e11a893eeeb46510520fd3fdd9c346a + sha256: 0dda5b3f21ad2c7e823f21b0e173194347fbfccb73a06ddc9366da1877020bda category: main optional: false - name: libssh2 @@ -6427,7 +6427,7 @@ package: category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: linux-64 dependencies: @@ -6436,14 +6436,14 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: win-64 dependencies: @@ -6452,10 +6452,10 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: rfc3339-validator @@ -8376,27 +8376,27 @@ package: category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zstandard @@ -8471,12 +8471,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoapps-utils @@ -8488,12 +8488,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoh5py @@ -8505,12 +8505,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: geoh5py @@ -8522,16 +8522,16 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: linux-64 dependencies: @@ -8543,16 +8543,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: win-64 dependencies: @@ -8564,12 +8564,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: octree-creation-app diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index bfe080d6..45bd452a 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -15,8 +15,8 @@ version: 1 metadata: content_hash: - win-64: 7c6c2fc6637d6c4daacd5593e8926c2966d0ee4145f52f043e70d10d1f79d488 - linux-64: 71ec2ae597e97db1dd9b633a8429478821a679da3ec31b51aee5dcf79930bdd1 + win-64: 2d7c4e988ae2df2fbd8349e86ba264f7eb281505021cebbdb8d9a2d3b0dda7ad + linux-64: c83206a2eacb4c3e0efe0aa15f924d81adc9fe1f02d077a12434b468bb2045e6 channels: - url: conda-forge used_env_vars: [] @@ -533,10 +533,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda hash: - md5: 98514fe74548d768907ce7a13f680e8f - sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + md5: 5d08a0ac29e6a5a984817584775d4131 + sha256: c969baaa5d7a21afb5ed4b8dd830f82b78e425caaa13d717766ed07a61630bec category: main optional: false - name: brotli @@ -550,10 +550,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_3.conda hash: - md5: 378f1c9421775dfe644731cb121c8979 - sha256: d8fd7d1b446706776117d2dcad1c0289b9f5e1521cb13405173bad38568dd252 + md5: c2a23d8a8986c72148c63bdf855ac99a + sha256: d57cd6ea705c9d2a8a2721f083de247501337e459f5498726b564cfca138e192 category: main optional: false - name: brotli-bin @@ -565,10 +565,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda hash: - md5: c63b5e52939e795ba8d26e35d767a843 - sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + md5: 58178ef8ba927229fba6d84abf62c108 + sha256: ab74fa8c3d1ca0a055226be89e99d6798c65053e2d2d3c6cb380c574972cd4a7 category: main optional: false - name: brotli-bin @@ -581,10 +581,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_3.conda hash: - md5: d22534a9be5771fc58eb7564947f669d - sha256: f3bf2893613540ac256c68f211861c4de618d96291719e32178d894114ac2bc2 + md5: c7c345559c1ac25eede6dccb7b931202 + sha256: 85aac1c50a426be6d0cc9fd52480911d752f4082cb78accfdb257243e572c7eb category: main optional: false - name: brotli-python @@ -597,10 +597,10 @@ package: libstdcxx: '>=13' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py311hfdbb021_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py311hfdbb021_3.conda hash: - md5: d21daab070d76490cb39a8f1d1729d79 - sha256: 949913bbd1f74d1af202d3e4bff2e0a4e792ec00271dc4dd08641d4221aa2e12 + md5: 8565f7297b28af62e5de2d968ca32e31 + sha256: 4fab04fcc599853efb2904ea3f935942108613c7515f7dd57e7f034650738c52 category: main optional: false - name: brotli-python @@ -613,10 +613,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py311hda3d55a_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py311hda3d55a_3.conda hash: - md5: a0ea2839841a06740a1c110ba3317b42 - sha256: aa3ac5dbf63db2f145235708973c626c2189ee4040d769fdf0076286fa45dc26 + md5: 2d99144abeb3b6b65608fdd7810dbcbd + sha256: a602b15fe1b3a6b40aab7d99099a410b69ccad9bb273779531cef00fc52d762e category: main optional: false - name: bzip2 @@ -1438,7 +1438,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: linux-64 dependencies: @@ -1449,14 +1449,14 @@ package: python: '>=3.11,<3.12.0a0' python_abi: 3.11.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py311h2dc5d0c_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.2-py311h2dc5d0c_0.conda hash: - md5: 9af5d6c8703be9bbe200aeae13a5e6ef - sha256: 8ef83f209dfc3f5b808e583bedd129ca95c9f2cb72645540e01d90f82bde9e0d + md5: c58ce3ab3833471964d7ee6b83203425 + sha256: 50a028c44427d51c467905d01129f0ca234007359331282aac374370e1e2e158 category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: win-64 dependencies: @@ -1468,10 +1468,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py311h5082efb_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.2-py311h5082efb_0.conda hash: - md5: 88930bd9938a31990c3b9b0f86930e57 - sha256: c806a73ae3fe27c3ff4fd7a564632d617aa630ec856e5289bb22936fe78355e5 + md5: b2aa1abdfadfdf8deb04ac6a9b64e11d + sha256: 40d319bdb90178680e91046dce7cbdb1764489e7ba7efad4ecc2d9cd00690f18 category: main optional: false - name: fqdn @@ -1675,7 +1675,7 @@ package: category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: linux-64 dependencies: @@ -1683,32 +1683,32 @@ package: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' libgcc: '>=13' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.13.0-nompi_py311h38436b4_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.14.0-nompi_py311h7f87ba5_100.conda hash: - md5: 0a24ff81763ff208d8485354cb9d347e - sha256: 7c4586e214e4844c6115032a2db43bbcf3aa059374ba691fce57acd51e156d44 + md5: ecfcdeb88c8727f3cf67e1177528a498 + sha256: cd2bd076c9d9bd8d8021698159e694a8600d8349e3208719c422af2c86b9c184 category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: win-64 dependencies: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.13.0-nompi_py311hc74fd12_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.14.0-nompi_py311h97e6cc2_100.conda hash: - md5: 4495f7a36edc99f21d3f8d1ba03734eb - sha256: 7ba0e3e3eb85a0a158dfdf97aa6bf5f66d5aee116339ad187a617cc78ce3467f + md5: f806b981514c8d3e567a2b7d5a8569ff + sha256: 600c7089e5fd40d9592d2d881192052b8c6df5f3afe9cd5e51fb8ef2bc8df1bc category: main optional: false - name: hdf5 @@ -3236,10 +3236,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda hash: - md5: 41b599ed2b02abcfdd84302bff174b23 - sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + md5: cb98af5db26e3f482bebb80ce9d947d3 + sha256: 462a8ed6a7bb9c5af829ec4b90aab322f8bcd9d8987f793e6986ea873bbd05cf category: main optional: false - name: libbrotlicommon @@ -3250,10 +3250,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_3.conda hash: - md5: f7dc9a8f21d74eab46456df301da2972 - sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c + md5: cf20c8b8b48ab5252ec64b9c66bfe0a4 + sha256: e70ea4b773fadddda697306a80a29d9cbd36b7001547cd54cbfe9a97a518993f category: main optional: false - name: libbrotlidec @@ -3264,10 +3264,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda hash: - md5: 9566f0bd264fbd463002e759b8a82401 - sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + md5: 1c6eecffad553bde44c5238770cfb7da + sha256: 3eb27c1a589cbfd83731be7c3f19d6d679c7a444c3ba19db6ad8bf49172f3d83 category: main optional: false - name: libbrotlidec @@ -3279,10 +3279,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_3.conda hash: - md5: 9bae75ce723fa34e98e239d21d752a7e - sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f + md5: a342933dbc6d814541234c7c81cb5205 + sha256: a35a0db7e3257e011b10ffb371735b2b24074412d0b27c3dab7ca9f2c549cfcf category: main optional: false - name: libbrotlienc @@ -3293,10 +3293,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda hash: - md5: 06f70867945ea6a84d35836af780f1de - sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + md5: 3facafe58f3858eb95527c7d3a3fc578 + sha256: 76e8492b0b0a0d222bfd6081cae30612aa9915e4309396fdca936528ccf314b7 category: main optional: false - name: libbrotlienc @@ -3308,10 +3308,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_3.conda hash: - md5: 85741a24d97954a991e55e34bc55990b - sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 + md5: 7ef0af55d70cbd9de324bb88b7f9d81e + sha256: 9d0703c5a01c10d346587ff0535a0eb81042364333caa4a24a0e4a0c08fd490b category: main optional: false - name: libcblas @@ -3753,10 +3753,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda hash: - md5: a76fd702c93cd2dfd89eff30a5fd45a8 - sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c + md5: 1a580f7796c7bf6393fddb8bbbde58dc + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 category: main optional: false - name: liblzma @@ -3767,10 +3767,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda hash: - md5: 14a1042c163181e143a7522dfb8ad6ab - sha256: adbf6c7bde70536ada734a81b8b5aa23654f2b95445204404622e0cc40e921a0 + md5: c15148b2e18da456f5108ccb5e411446 + sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc category: main optional: false - name: libnghttp2 @@ -3877,31 +3877,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.1-hee588c1_0.conda hash: - md5: 71888e92098d0f8c41b09a671ad289bc - sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 + md5: 96a7e36bff29f1d0ddf5b771e0da373a + sha256: cd15ab1b9f0d53507e7ad7a01e52f6756ab3080bf623ab0e438973b6e4dba3c0 category: main optional: false - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.1-h67fdade_0.conda hash: - md5: 92b11b0b2120d563caa1629928122cee - sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 + md5: 0e11a893eeeb46510520fd3fdd9c346a + sha256: 0dda5b3f21ad2c7e823f21b0e173194347fbfccb73a06ddc9366da1877020bda category: main optional: false - name: libssh2 @@ -6481,7 +6481,7 @@ package: category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: linux-64 dependencies: @@ -6490,14 +6490,14 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: win-64 dependencies: @@ -6506,10 +6506,10 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: rfc3339-validator @@ -8461,27 +8461,27 @@ package: category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zstandard @@ -8556,12 +8556,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoapps-utils @@ -8573,12 +8573,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoh5py @@ -8590,12 +8590,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: geoh5py @@ -8607,16 +8607,16 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: linux-64 dependencies: @@ -8628,16 +8628,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: win-64 dependencies: @@ -8649,12 +8649,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: octree-creation-app diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index 7d1a8131..3aa26912 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: 6cc6193c96710355cb06cd26f3f0ccf0546cb72e6fb6e3e2751fc3512e5d80ae - linux-64: 3f5a974c96720106251f601bd774f1b9d66a8e5cc34c5466c38642f478d7332e + win-64: dd5f3d6403d5db52a5e41fb35b60dce2df1a615f984bba47e191a2a14a68dd3c + linux-64: 86d8c36c4b440eac7a217d19ba6775b033719c3606e19d205f30e9bf039ae01e channels: - url: conda-forge used_env_vars: [] @@ -533,10 +533,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda hash: - md5: 98514fe74548d768907ce7a13f680e8f - sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + md5: 5d08a0ac29e6a5a984817584775d4131 + sha256: c969baaa5d7a21afb5ed4b8dd830f82b78e425caaa13d717766ed07a61630bec category: main optional: false - name: brotli @@ -550,10 +550,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-1.1.0-h2466b09_3.conda hash: - md5: 378f1c9421775dfe644731cb121c8979 - sha256: d8fd7d1b446706776117d2dcad1c0289b9f5e1521cb13405173bad38568dd252 + md5: c2a23d8a8986c72148c63bdf855ac99a + sha256: d57cd6ea705c9d2a8a2721f083de247501337e459f5498726b564cfca138e192 category: main optional: false - name: brotli-bin @@ -565,10 +565,10 @@ package: libbrotlidec: 1.1.0 libbrotlienc: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda hash: - md5: c63b5e52939e795ba8d26e35d767a843 - sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + md5: 58178ef8ba927229fba6d84abf62c108 + sha256: ab74fa8c3d1ca0a055226be89e99d6798c65053e2d2d3c6cb380c574972cd4a7 category: main optional: false - name: brotli-bin @@ -581,10 +581,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_3.conda hash: - md5: d22534a9be5771fc58eb7564947f669d - sha256: f3bf2893613540ac256c68f211861c4de618d96291719e32178d894114ac2bc2 + md5: c7c345559c1ac25eede6dccb7b931202 + sha256: 85aac1c50a426be6d0cc9fd52480911d752f4082cb78accfdb257243e572c7eb category: main optional: false - name: brotli-python @@ -597,10 +597,10 @@ package: libstdcxx: '>=13' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda hash: - md5: b0b867af6fc74b2a0aa206da29c0f3cf - sha256: f2a59ccd20b4816dea9a2a5cb917eb69728271dbf1aeab4e1b7e609330a50b6f + md5: a32e0c069f6c3dcac635f7b0b0dac67e + sha256: dc27c58dc717b456eee2d57d8bc71df3f562ee49368a2351103bc8f1b67da251 category: main optional: false - name: brotli-python @@ -613,10 +613,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py312h275cf98_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py312h275cf98_3.conda hash: - md5: a99aec1ac46794a5fb1cd3cf5d2b6110 - sha256: f83baa6f6bcba7b73f6921d5c1aa95ffc5d8b246ade933ade79250de0a4c9c4c + md5: a87a39f9eb9fd5f171b13d8c79f7a99a + sha256: d5c18a90220853c86f7cc23db62b32b22c6c5fe5d632bc111fc1e467c9fd776f category: main optional: false - name: bzip2 @@ -1438,7 +1438,7 @@ package: category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: linux-64 dependencies: @@ -1449,14 +1449,14 @@ package: python: '>=3.12,<3.13.0a0' python_abi: 3.12.* unicodedata2: '>=15.1.0' - url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.1-py312h178313f_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/fonttools-4.58.2-py312h178313f_0.conda hash: - md5: 59ac6c124428928a1a41691eedf2b3bd - sha256: e393557ad5ca31f71ec59da7035eea0d8d9a87ef1807fda832d2953112e71588 + md5: 286068e5706fa6eacce413a594cf0d4b + sha256: aa2dbfcc173c1fe4e0e1c54ff07e98f36edfc6bbbd7e49ea9ff60541d37e648d category: main optional: false - name: fonttools - version: 4.58.1 + version: 4.58.2 manager: conda platform: win-64 dependencies: @@ -1468,10 +1468,10 @@ package: unicodedata2: '>=15.1.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.1-py312h31fea79_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/fonttools-4.58.2-py312h31fea79_0.conda hash: - md5: fbe3cbbe4fc661f033725bd9a958bb52 - sha256: 67721282cc0cad4b9d2fb1a6a9987b3090cd6c5a516ffef293e4f8181556c20a + md5: 300dfab2dac1c966c6fc52c2ee442287 + sha256: a314886c4a0baaf00526ded33104fd09fd7044393395f24fd33696beee601c4d category: main optional: false - name: fqdn @@ -1675,7 +1675,7 @@ package: category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: linux-64 dependencies: @@ -1683,32 +1683,32 @@ package: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' libgcc: '>=13' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.13.0-nompi_py312h01d377b_101.conda + url: https://repo.prefix.dev/conda-forge/linux-64/h5py-3.14.0-nompi_py312h3faca00_100.conda hash: - md5: ea7ee61f4c0dc9c155e22bfae306e42f - sha256: f31fb94114cc5826cd32f8d227ffccd63b2ec3fd10c6d3a1181d35bc8da9d88a + md5: 2e1c2a9e706c74c4dd6f990a680f3f90 + sha256: 9d23b72ee1138e14d379bb4c415cfdfc6944824e1844ff16ebf44e0defd1eddc category: main optional: false - name: h5py - version: 3.13.0 + version: 3.14.0 manager: conda platform: win-64 dependencies: cached-property: '' hdf5: '>=1.14.6,<1.14.7.0a0' - numpy: '>=1.19,<3' + numpy: '>=1.21,<3' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.13.0-nompi_py312h4e244af_101.conda + url: https://repo.prefix.dev/conda-forge/win-64/h5py-3.14.0-nompi_py312h6cc2a29_100.conda hash: - md5: 5b949c5099bb9fc1f8382f23c66fefcd - sha256: 7fbca39e04fade12fb7de01ae640916f897c6fe7fbb4e7bf3d3b67f898d185fb + md5: 7505235f79c9deb9e69fba7cca1a7c97 + sha256: 836d84ebf958e74a154406e785b32c973eaad12163f1b7dae2c0448626acea9c category: main optional: false - name: hdf5 @@ -3236,10 +3236,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda hash: - md5: 41b599ed2b02abcfdd84302bff174b23 - sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + md5: cb98af5db26e3f482bebb80ce9d947d3 + sha256: 462a8ed6a7bb9c5af829ec4b90aab322f8bcd9d8987f793e6986ea873bbd05cf category: main optional: false - name: libbrotlicommon @@ -3250,10 +3250,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_3.conda hash: - md5: f7dc9a8f21d74eab46456df301da2972 - sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c + md5: cf20c8b8b48ab5252ec64b9c66bfe0a4 + sha256: e70ea4b773fadddda697306a80a29d9cbd36b7001547cd54cbfe9a97a518993f category: main optional: false - name: libbrotlidec @@ -3264,10 +3264,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda hash: - md5: 9566f0bd264fbd463002e759b8a82401 - sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + md5: 1c6eecffad553bde44c5238770cfb7da + sha256: 3eb27c1a589cbfd83731be7c3f19d6d679c7a444c3ba19db6ad8bf49172f3d83 category: main optional: false - name: libbrotlidec @@ -3279,10 +3279,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_3.conda hash: - md5: 9bae75ce723fa34e98e239d21d752a7e - sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f + md5: a342933dbc6d814541234c7c81cb5205 + sha256: a35a0db7e3257e011b10ffb371735b2b24074412d0b27c3dab7ca9f2c549cfcf category: main optional: false - name: libbrotlienc @@ -3293,10 +3293,10 @@ package: __glibc: '>=2.17,<3.0.a0' libbrotlicommon: 1.1.0 libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda hash: - md5: 06f70867945ea6a84d35836af780f1de - sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + md5: 3facafe58f3858eb95527c7d3a3fc578 + sha256: 76e8492b0b0a0d222bfd6081cae30612aa9915e4309396fdca936528ccf314b7 category: main optional: false - name: libbrotlienc @@ -3308,10 +3308,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_3.conda hash: - md5: 85741a24d97954a991e55e34bc55990b - sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 + md5: 7ef0af55d70cbd9de324bb88b7f9d81e + sha256: 9d0703c5a01c10d346587ff0535a0eb81042364333caa4a24a0e4a0c08fd490b category: main optional: false - name: libcblas @@ -3753,10 +3753,10 @@ package: dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' - url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda hash: - md5: a76fd702c93cd2dfd89eff30a5fd45a8 - sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c + md5: 1a580f7796c7bf6393fddb8bbbde58dc + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 category: main optional: false - name: liblzma @@ -3767,10 +3767,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda hash: - md5: 14a1042c163181e143a7522dfb8ad6ab - sha256: adbf6c7bde70536ada734a81b8b5aa23654f2b95445204404622e0cc40e921a0 + md5: c15148b2e18da456f5108ccb5e411446 + sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc category: main optional: false - name: libnghttp2 @@ -3877,31 +3877,31 @@ package: category: dev optional: true - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc: '>=13' libzlib: '>=1.3.1,<2.0a0' - url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.0-hee588c1_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/libsqlite-3.50.1-hee588c1_0.conda hash: - md5: 71888e92098d0f8c41b09a671ad289bc - sha256: b3dcd409c96121c011387bdf7f4b5758d876feeb9d8e3cfc32285b286931d0a7 + md5: 96a7e36bff29f1d0ddf5b771e0da373a + sha256: cd15ab1b9f0d53507e7ad7a01e52f6756ab3080bf623ab0e438973b6e4dba3c0 category: main optional: false - name: libsqlite - version: 3.50.0 + version: 3.50.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.0-h67fdade_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/libsqlite-3.50.1-h67fdade_0.conda hash: - md5: 92b11b0b2120d563caa1629928122cee - sha256: 92546e3ea213ee7b11385b22ea4e7c69bbde1c25586288765b37bc5e96b20dd9 + md5: 0e11a893eeeb46510520fd3fdd9c346a + sha256: 0dda5b3f21ad2c7e823f21b0e173194347fbfccb73a06ddc9366da1877020bda category: main optional: false - name: libssh2 @@ -6481,7 +6481,7 @@ package: category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: linux-64 dependencies: @@ -6490,14 +6490,14 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: requests - version: 2.32.3 + version: 2.32.4 manager: conda platform: win-64 dependencies: @@ -6506,10 +6506,10 @@ package: idna: '>=2.5,<4' python: '>=3.9' urllib3: '>=1.21.1,<3' - url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda hash: - md5: a9b9368f3701a417eac9edbcae7cb737 - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: f6082eae112814f1447b56a5e1f6ed05 + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 category: dev optional: true - name: rfc3339-validator @@ -8461,27 +8461,27 @@ package: category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zipp - version: 3.22.0 + version: 3.23.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.22.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda hash: - md5: 234be740b00b8e41567e5b0ed95aaba9 - sha256: 3f7a58ff4ff1d337d56af0641a7eba34e7eea0bf32e49934c96ee171640f620b + md5: df5e78d904988eb55042c0c97446079f + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad category: main optional: false - name: zstandard @@ -8556,12 +8556,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoapps-utils @@ -8573,12 +8573,12 @@ package: numpy: '>=1.26.0,<1.27.0' pydantic: '>=2.5.2,<3.0.0' scipy: '>=1.14.0,<1.15.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 hash: - sha256: 3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + sha256: 8d46ccb686e4206683862ec803fc709b26271cd8 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@3deb5f2d2cd1ee39e796fa30a5fcff899e635ba0 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@8d46ccb686e4206683862ec803fc709b26271cd8 category: main optional: false - name: geoh5py @@ -8590,12 +8590,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: geoh5py @@ -8607,16 +8607,16 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 hash: - sha256: 2b2b72f906d85bf460292f66e763ff2331017b02 + sha256: 585c89094e3eff35df10d3076964bf154b24d575 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@2b2b72f906d85bf460292f66e763ff2331017b02 + url: git+https://github.com/MiraGeoscience/geoh5py.git@585c89094e3eff35df10d3076964bf154b24d575 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: linux-64 dependencies: @@ -8628,16 +8628,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: mira-simpeg - version: 0.23.0.1a5.dev29+g02100624a + version: 0.23.0.1a5.dev33+gf72a1367e manager: pip platform: win-64 dependencies: @@ -8649,12 +8649,12 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 hash: - sha256: 02100624a89f3acdf5757da69051e0e69ce27843 + sha256: f72a1367edcb2da969002ca06f18f532340b3c27 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@02100624a89f3acdf5757da69051e0e69ce27843 + url: git+https://github.com/MiraGeoscience/simpeg.git@f72a1367edcb2da969002ca06f18f532340b3c27 category: main optional: false - name: octree-creation-app diff --git a/pyproject.toml b/pyproject.toml index a799e606..e1a46b02 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,7 +84,7 @@ octree-creation-app = {git = "https://github.com/MiraGeoscience/octree-creation- geoapps-utils = {git = "https://github.com/MiraGeoscience/geoapps-utils.git", rev = "develop"} #mira-simpeg = {version = ">=0.23.0.1b1, <0.23.1.dev", source="pypi", allow-prereleases = true, extras = ["dask"]} -mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "GEOPY-2232", extras = ["dask"]} +mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "develop", extras = ["dask"]} #param-sweeps = {version = ">=0.3.0a, <0.4.dev", source = "pypi", allow-prereleases = true} param-sweeps = {git = "https://github.com/MiraGeoscience/param-sweeps.git", rev = "develop"} From 50bc86a9f9eaa9df80d32db3ca6da77e1d21a4a1 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 9 Jun 2025 16:18:19 -0700 Subject: [PATCH 58/59] Fix model_tests --- tests/models_test.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/models_test.py b/tests/models_test.py index a61cfee8..e221dc8e 100644 --- a/tests/models_test.py +++ b/tests/models_test.py @@ -60,6 +60,7 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: inducing_field_inclination=79.0, inducing_field_declination=11.0, reference_model=0.0, + inducing_field_strength=50000.0, reference_inclination=79.0, reference_declination=11.0, ) @@ -72,7 +73,7 @@ def test_zero_reference_model(tmp_path: Path): geoh5 = params.geoh5 with geoh5.open(): driver = MVIInversionDriver(params) - _ = InversionModel(driver, "reference", is_vector=True) + _ = InversionModel(driver, "reference_model") incl = np.unique(geoh5.get_entity("reference_inclination")[0].values) decl = np.unique(geoh5.get_entity("reference_declination")[0].values) assert len(incl) == 1 @@ -87,7 +88,7 @@ def test_collection(tmp_path: Path): driver = MVIInversionDriver(params) models = InversionModelCollection(driver) models.remove_air(driver.models.active_cells) - starting = InversionModel(driver, "starting", is_vector=True) + starting = InversionModel(driver, "starting_model") starting.remove_air(driver.models.active_cells) np.testing.assert_allclose(models.starting_model, starting.model, atol=1e-7) @@ -96,7 +97,7 @@ def test_initialize(tmp_path: Path): params = get_mvi_params(tmp_path) with params.geoh5.open(): driver = MVIInversionDriver(params) - starting_model = InversionModel(driver, "starting", is_vector=True) + starting_model = InversionModel(driver, "starting_model") assert len(starting_model.model) == 3 * driver.inversion_mesh.n_cells assert len(np.unique(starting_model.model)) == 3 @@ -116,11 +117,11 @@ def test_model_from_object(tmp_path: Path): point_object = Points.create(geoh5, name="test_point", vertices=cc) point_object.add_data({"test_data": {"values": vals}}) data_object = geoh5.get_entity("test_data")[0] - params.lower_bound = data_object - lower_bound = InversionModel(driver, "lower_bound", is_vector=True) - nc = int(len(lower_bound.model) / 3) + params.models.upper_bound = data_object + upper_bound = InversionModel(driver, "upper_bound") + A = driver.inversion_mesh.mesh.cell_centers - b = lower_bound.model[:nc] + b = upper_bound.model from scipy.linalg import lstsq m = lstsq(A, b)[0] From 3802046716e5eab0ada735c1cc90afa8303009ad Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 10 Jun 2025 08:28:27 -0700 Subject: [PATCH 59/59] Bulk fixing of tests --- simpeg_drivers/components/models.py | 4 ++-- tests/data_test.py | 11 +++++++++-- tests/driver_test.py | 2 +- tests/locations_test.py | 3 +++ tests/meshes_test.py | 4 ++++ tests/models_test.py | 22 +++++++++++++++++----- tests/topography_test.py | 4 ++++ 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 762d50fd..6792f9fc 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -177,7 +177,7 @@ def starting_inclination(self) -> np.ndarray | None: if value is None and self.is_vector: return ( - np.ones(self.active_cells.sum()) + np.ones_like(self._starting_model.model) * self.driver.params.inducing_field_inclination ) @@ -192,7 +192,7 @@ def starting_declination(self) -> np.ndarray | None: if value is None and self.is_vector: return ( - np.ones(self.active_cells.sum()) + np.ones_like(self._starting_model.model) * self.driver.params.inducing_field_declination ) diff --git a/tests/data_test.py b/tests/data_test.py index f914ff97..e829caa6 100644 --- a/tests/data_test.py +++ b/tests/data_test.py @@ -50,9 +50,13 @@ def get_mvi_params(tmp_path: Path, **kwargs) -> MVIInversionOptions: geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, + tmi_uncertainty=1.0, topography_object=topography, mesh=model.parent, starting_model=model, + inducing_field_strength=50000.0, + inducing_field_inclination=60.0, + inducing_field_declination=30.0, **kwargs, ) return params @@ -128,6 +132,9 @@ def test_survey_data(tmp_path: Path): mesh=mesh, starting_model=0.0, tile_spatial=2, + inducing_field_strength=50000.0, + inducing_field_inclination=60.0, + inducing_field_declination=30.0, ) driver = MVIInversionDriver(params) @@ -201,7 +208,7 @@ def test_has_tensor(): def test_get_uncertainty_component(tmp_path: Path): - params = get_mvi_params(tmp_path, tmi_uncertainty=1.0) + params = get_mvi_params(tmp_path) geoh5 = params.geoh5 with geoh5.open(): data = InversionData(geoh5, params) @@ -223,7 +230,7 @@ def test_normalize(tmp_path: Path): def test_get_survey(tmp_path: Path): - params = get_mvi_params(tmp_path, tmi_uncertainty=1.0) + params = get_mvi_params(tmp_path) geoh5 = params.geoh5 with geoh5.open(): data = InversionData(geoh5, params) diff --git a/tests/driver_test.py b/tests/driver_test.py index 8666c05f..345edcea 100644 --- a/tests/driver_test.py +++ b/tests/driver_test.py @@ -55,7 +55,7 @@ def test_smallness_terms(tmp_path: Path): ) params.alpha_s = None driver = GravityInversionDriver(params) - assert driver.regularization.objfcts[0].alpha_s == 0.0 + assert driver.regularization.objfcts[0].alpha_s == 1.0 def test_target_chi(tmp_path: Path, caplog): diff --git a/tests/locations_test.py b/tests/locations_test.py index cf10d284..6754485d 100644 --- a/tests/locations_test.py +++ b/tests/locations_test.py @@ -44,6 +44,9 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: topography_object=topography, mesh=model.parent, starting_model=model, + inducing_field_strength=50000.0, + inducing_field_inclination=60.0, + inducing_field_declination=30.0, ) return params diff --git a/tests/meshes_test.py b/tests/meshes_test.py index 4b09f949..d492c1c8 100644 --- a/tests/meshes_test.py +++ b/tests/meshes_test.py @@ -51,9 +51,13 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, + tmi_uncertainty=0.01, active_cells=ActiveCellsOptions( topography_object=topography, topography=elevation ), + inducing_field_strength=50000.0, + inducing_field_inclination=60.0, + inducing_field_declination=30.0, mesh=mesh, starting_model=model, ) diff --git a/tests/models_test.py b/tests/models_test.py index e221dc8e..0352c22c 100644 --- a/tests/models_test.py +++ b/tests/models_test.py @@ -40,6 +40,12 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: ) with geoh5.open(): mesh = model.parent + ref_inducing = mesh.add_data( + { + "reference_inclination": {"values": np.ones(mesh.n_cells) * 79.0}, + "reference_declination": {"values": np.ones(mesh.n_cells) * 11.0}, + } + ) tmi_channel = survey.add_data( { "tmi": {"values": np.random.rand(survey.n_vertices)}, @@ -52,6 +58,7 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: geoh5=geoh5, data_object=survey, tmi_channel=tmi_channel, + tmi_uncertainty=1.0, mesh=mesh, active_cells=ActiveCellsOptions( topography_object=topography, topography=elevation @@ -61,8 +68,8 @@ def get_mvi_params(tmp_path: Path) -> MVIInversionOptions: inducing_field_declination=11.0, reference_model=0.0, inducing_field_strength=50000.0, - reference_inclination=79.0, - reference_declination=11.0, + reference_inclination=ref_inducing[0], + reference_declination=ref_inducing[1], ) return params @@ -90,7 +97,12 @@ def test_collection(tmp_path: Path): models.remove_air(driver.models.active_cells) starting = InversionModel(driver, "starting_model") starting.remove_air(driver.models.active_cells) - np.testing.assert_allclose(models.starting_model, starting.model, atol=1e-7) + assert len(models.starting_model) == 3 * len(starting.model) + np.testing.assert_allclose( + np.linalg.norm(models.starting_model.reshape((-1, 3), order="F"), axis=1), + starting.model, + atol=1e-7, + ) def test_initialize(tmp_path: Path): @@ -98,8 +110,8 @@ def test_initialize(tmp_path: Path): with params.geoh5.open(): driver = MVIInversionDriver(params) starting_model = InversionModel(driver, "starting_model") - assert len(starting_model.model) == 3 * driver.inversion_mesh.n_cells - assert len(np.unique(starting_model.model)) == 3 + assert len(starting_model.model) == driver.inversion_mesh.n_cells + assert len(np.unique(starting_model.model)) == 1 def test_model_from_object(tmp_path: Path): diff --git a/tests/topography_test.py b/tests/topography_test.py index 4ced8b63..26fc148f 100644 --- a/tests/topography_test.py +++ b/tests/topography_test.py @@ -45,9 +45,13 @@ def test_get_locations(tmp_path: Path): mesh=mesh, data_object=survey, tmi_channel=tmi_channel, + tmi_uncertainty=0.01, active_cells=ActiveCellsOptions( topography_object=topography, topography=elevation ), + inducing_field_strength=50000.0, + inducing_field_inclination=60.0, + inducing_field_declination=0.0, starting_model=1.0, )