SimPEG 0.23.0 Release Notes#
November 3rd, 2024
Updates#
New features#
Full support for Numpy 2.0#
With this release SimPEG is fully compatible with Numpy 2.0.
Augmented receivers for airborne NSEM#
We added new types of receivers intended to be used for airborne natural-source EM simulations:
They extend the type of airborne NSEM surveys that can be simulated in SimPEG.
See simpeg/simpeg#1454 for more details.
Automatic selection of Solver#
This release includes a new
get_default_solver() function that
automatically selects a solver based on what you have installed on
your system.
For example, it’ll select Pardiso as the solver if you are running an Intel
CPU and have pydiso installed in your system. Alternatively, it can choose
Mumps if you are using Apple silicon and the python-mumps package is installed.
If no fast solver is available, it’ll choose SciPy’s SparseLU solver.
Note
For those installing through conda-forge, conda install simpeg will now also grab
better solvers for your system as well, consistent with simpeg’s solver priority.
Moreover, simulations will also use this function to get the default solver if no solver is being provided by the user, making it easier to run efficient finite volume simulations out of the box. See simpeg/simpeg#1511 for more information.
Support for magnetic gradiometry in Choclo-based magnetic simulations#
Now the magnetic simulations with engine="choclo" support forward modelling
the magnetic gradiometry components and TMI derivatives. This fully extends the
support of the Numba-based simulations to every field that can also be
computed using engine="geoana".
See simpeg/simpeg#1543 and simpeg/simpeg#1553 for more information.
Numba-based implementation of gravity and equivalent sources#
This release includes new implementations of the gravity and magnetic equivalent sources using Choclo’s kernels and forward modelling functions and Numba to just-in-time compilations and parallelization, making them faster and more memory efficient.
See simpeg/simpeg#1552 and simpeg/simpeg#1527.
New UpdateIRLS directive#
We have renamed the simpeg.directives.UpdateIRLS directive for
applying the Iterative Re-weighted Least-Squares during sparse norm inversions,
that includes better argument names and an improved implementation.
See simpeg/simpeg#1349 for more details.
Standardize arguments for active cells and random seeds#
We have standardize the name of the arguments for active cells in meshes through
all functions and methods in SimPEG. We have deprecated the old
names like indAct, ind_active and indActive in favor of
active_cells.
The arguments for passing random seeds have also been standardized to
random_seed. These arguments generalize a way to specify random states,
allowing to take seeds as integers or instances of
numpy.random.Generator.
Upgraded dependencies#
In SimPEG v0.23.0 we dropped support for Python versions <= 3.9. Python 3.8 met its end-of-life this year (October 2024). Python 3.10 is the minimum required version for Numpy 2.1.0. To keep up with the latest updates in the scientific Python ecosystem, we decided to set Python 3.10 as the minimum required version for SimPEG as well.
Moreover, we have increased the minimum required versions of discretize,
geoana and pymatsolver in order to support Numpy 2.0.
Lastly, now pandas, scikit-learn and empymod are optional
dependencies (instead of required ones).
Documentation#
This release includes a few fixes to the documentation pages, like improvements to some magnetic examples, and fixes to docstrings and math of a few classes.
Bugfixes#
We have fixed some issues of Dask-based simulations that were running into race-conditions after one of the latest Dask updates. See simpeg/simpeg#1469 for more information.
Contributors#
Pull Requests#
- Make - pandas&- scikit-learnoptional dependencies by @prisae in simpeg/simpeg#1514
- Dask races by @jcapriot in simpeg/simpeg#1469 
- Irls refactor by @domfournier in simpeg/simpeg#1349 
- Minimum python version update by @jcapriot in simpeg/simpeg#1522 
- Replace - ind_activefor- active_cellsin pf simulations by @santisoler in simpeg/simpeg#1520
- Move push to codecov to its own stage by @santisoler in simpeg/simpeg#1493 
- Minor fix in deprecation notice in docstrings by @santisoler in simpeg/simpeg#1535 
- Replace - indActiveand- actIndfor- active_cellsin maps by @santisoler in simpeg/simpeg#1534
- Update tests and examples to use the new - UpdateIRLSby @domfournier in simpeg/simpeg#1472
- Replace - indActivein VRM simulations for- active_cellsby @santisoler in simpeg/simpeg#1536
- Test assigned values when passing deprecated args by @santisoler in simpeg/simpeg#1544 
- Use random seed when using - make_synthetic_datain tests by @santisoler in simpeg/simpeg#1545
- Minor improvements to - UpdateIRLSclass by @santisoler in simpeg/simpeg#1529
- Replace - seedfor- random_seedin directives by @santisoler in simpeg/simpeg#1538
- Minor fixes to magnetic examples by @santisoler in simpeg/simpeg#1547 
- Support magnetic gradiometry using Choclo as engine by @santisoler in simpeg/simpeg#1543 
- Update usage of - random_seedin one example by @santisoler in simpeg/simpeg#1549
- Replace - seedfor- random_seedin- model_builderby @santisoler in simpeg/simpeg#1548
- Replace old args for - active_cellsin EM static functions by @santisoler in simpeg/simpeg#1550
- Implement gravity equivalent sources with Choclo as engine by @santisoler in simpeg/simpeg#1527 
- Implement tmi derivatives with Choclo in magnetic simulation by @santisoler in simpeg/simpeg#1553 
- Implement magnetic eq sources with Choclo by @santisoler in simpeg/simpeg#1552 
- Update links in PR template by @santisoler in simpeg/simpeg#1554 
- Default solver by @jcapriot in simpeg/simpeg#1511 
- Fixes for most recent geoana 0.7 by @jcapriot in simpeg/simpeg#1557 
- Numpy2.0 and discretize 0.11.0 updates by @jcapriot in simpeg/simpeg#1558 
- Add missing seeds by @jcapriot in simpeg/simpeg#1560 
- Make use of meshes’ - cell_boundsproperty by @santisoler in simpeg/simpeg#1559
- Fix docstring of - SmoothnessFullGradientby @santisoler in simpeg/simpeg#1562
- Fix math in docstring of eigenvalue_by_power_iteration by @santisoler in simpeg/simpeg#1564 
- Only warn about default solver when set in simulations by @santisoler in simpeg/simpeg#1565 
- Augmented receivers for airborne NSEM by @dccowan in simpeg/simpeg#1454 
- Try uploading all the coverage files at once. by @jcapriot in simpeg/simpeg#1569 
- Re-implement distance weighting and add a strategy comparison by @thibaut-kobold in simpeg/simpeg#1310 
- Remove empymod dependency by @jcapriot in simpeg/simpeg#1571 
