SimPEG 0.19.0 Release Notes#

April 10th, 2023

This minor release contains many bugfixes and improvements to the code base, including the start of a new experimental approach to parallelism in SimPEG.


Getting started guides#

We have updated the getting started guides for users and developers pointing to our current recommended paths of installation. We also codified some of our expected path of contributing codes and improvements to SimPEG.

Code style improvements#

The internal code style of SimPEG has undergone many improvements in style checking. We now actively test new Pull Requests against black version 23.1. We also run linters to check for common style conventions and catch common errors. These tests are run prior to the full test sweet on the continuous integration service.


SimPEG contains a new simulation class called SimPEG.meta.MetaSimulation. This experimental simulation essentially wraps together many simulations into a single simulation. Several common problems can fit into this simulation of simulations model, including tiled (domain decomposition) simulations, time-lapse simulations, or laterally constrained simulations. This approach also is embarrassingly parallel, which we will use this class to extend different parallelism strategies to every SimPEG simulation.

DC improvements#

The 1D DC resistivity simulation now supports arbitrary combinations of pole and dipole sources and receivers. The 2D and 3D simulations are now slightly more flexible in there mesh requirements. The robin boundary conditions are now implemented for Triangular and Tetrahedral meshes on the nodal formulation.

Github forms#

New issues submitted to SimPEG on github now follow fillable forms to give users a guide on creating better issue forms. They also now quickly point users to the slack and discourse channels for communicating with the developers.

New pull requests are also opened with a default template now to, highlighting the steps of a pull request that you should follow.

Directive updates#

There are a few new options for determining an initial trade-off parameter for the regularization functions in inversions. You can now use SimPEG.directives.BetaEstimateMaxDerivative

There are also a few more nobs to turn on SimPEG.directives.UpdateSensitivityWeights, controlling how the weights are thresholded and normalized.

JointTotalVariation extension#

SimPEG.regularization.JointTotalVariation now supports an arbitrary number of physical properties models (instead of just two).

Many bug fixes#

In addition to the new features, there were many, many bugfixes along the way. Including:

  • Changing the default n_processes to 1 on potential fields simulations to avoid multiprocessing unexpectedly crashing users’ computers.

  • A fix for using apparent resistivity as a data type on DC simulations.

  • Initializing IdentityMaps with nP=”*”

  • Re-defaulting to caching of fields objects in DataMisfit functions

  • Fixing the 1D DC resistivity class to be actually correct for non-symmetric arrays.

  • Fix saving the state of inversions in a dictionary for Sparse regularization.

  • Enabling inactive cells in an equivalent source model.

  • updates for PGI with new versions of scikit-learn.

  • update requirements to be consistent with modern versions of numpy/scipy/etc.

  • Fixing the length scale getters on the WeightedLeastSquares regularizer.

  • And many more.


This is a combination of contributors and reviewers who’ve made contributions towards this release (in no particular order).

Pull requests#

  • #729: Addition regarding inversion to big_picture

  • #1104: Update SimPEG.Report()

  • #1130: Fix broken math in regularization docs

  • #1132: Remove unused imports across SimPEG

  • #1133: Fix (and test) the pgi tutorials.

  • #1134: Run style checks in Azure Pipelines

  • #1135: Add property to control number of processes created.

  • #1136: Use r-strings on strings and docstrings that contain backslashes

  • #1137: Rename variables to avoid shadowing builtins

  • #1138: Remove unused loop variables

  • #1139: Avoid using getattr with fixed constant strings

  • #1140: Avoid using bare excepts that catch every possible exception

  • #1141: Run flake8 in CI against a selection of rules

  • #1142: Avoid using mutables as default parameters

  • #1143: Avoid calling functions in default arguments

  • #1145: Avoid using variables not binded in function definition

  • #1147: Enable use of inactive cells in equivalent source models

  • #1149: Ignore flake warning over empty docstrings

  • #1150: Separate flake 8 ignores by line breaks

  • #1155: Ignore b028

  • #1156: fix gmm.plot_pdf new error from sklearn >=1.2

  • #1157: fix mref depreciation in regularization/

  • #1159: Fix

  • #1160: Avoid comparing bool variables to True or False

  • #1161: Start removing unused variables

  • #1163: Add option for amplitude threshold on UpdateSens directive

  • #1166: Update

  • #1168: Flexible dc boundary

  • #1170: Do not use multiprocessing on single thread.

  • #1171: Use discretize.utils.active_from_xyz to get active topography cells

  • #1173: Mira review beta estimator

  • #1174: Black 23.1

  • #1175: Fix for _has_fields

  • #1176: Do not import deprecated discretize utilities

  • #1177: Linear mapping

  • #1178: update codecov script

  • #1179: Update minimum versions

  • #1181: Add B028 to flake8 ignore

  • #1182: Add possibility to pass fields to getJtJdiag

  • #1183: Simulation of Simulations

  • #1186: Change default n_processes for potential fields

  • #1188: Update getting started guides

  • #1189: Add issue forms for github

  • #1190: Do not store real lambdas as complex

  • #1191: Update DC1D for flexibility and speed

  • #1192: Improve docstring of depth_weighting

  • #1194: Update deprecation usage in optimization module

  • #1196: Fix check for reference_model in PGI regularization

  • #1197: update JTV to work for an arbitrary number of models

  • #1200: Fix flake8 B015 errors: solve unused comparisons

  • #1202: Fix flake E401 error: multiple imports in one line

  • #1203: Remove flake errors that were already solved

  • #1205: Patch/identity map init

  • #1206: Patch/fix save sparse dict

  • #1207: Fix length scale getters

  • #1208: Add PR template file

  • #1209: 0.19.0 Staging