SimPEG 0.26.0 Release Notes#
October 26th, 2026
Updates#
New features#
Extended support to Python 3.15#
We extended support to Python 3.15 and Numpy 2.5. Starting from this release, we are running scheduled tests of SimPEG against the latest supported Python version and its dependencies.
Improvements to Natural Sources EM#
This release ships several improvements and additions to the natural source electromagnetic (NSEM) simulations, sources, and receivers.
We extended the capabilities of the
Impedance,
Tipper,
and
Admittance
for 2D NSEM problems, making it possible to invert for Tipper and admittance data in 2D.
See more details in simpeg/simpeg#1684.
The 3D NSEM simulations that use the primary-secondary formulation now implement more suitable boundary conditions for the 1D NSEM problem that gets solved to build the primary field and the right-hand side. See simpeg/simpeg#1661 for more details.
The number of padding cells that get added during 1D MT simulations are now estimated based on a certain number of skin depths. This makes the 1D MT simulations more robust for any type of mesh. See more details in simpeg/simpeg#1769.
Add new NSEM receivers used to predict different rotation invariant transfer functions such as Root Gram Determinant, Cross Product Amplitude, Horizontal Determinant.
The apparent conductivity
ApparentConductivity
receiver can be configured to generate the apparent conductivity datum through different transfer functions.
Add new natural source receiver classes
RootGramDeterminant,
CrossProductAmplitude,
and HorizontalDeterminant,
that can generate rotation invariant transfer functions as datum.
They are
primarily intended to be used for airborne NSEM systems, but can be used for
general survey configurations. Introduces a breaking change in the formula used
by ApparentConductivity
to compute its datum.
Also, add a new formula argument to the
ApparentConductivity
receiver to choose which method should be used to compute the transfer functions.
See more information in simpeg/simpeg#1779.
Thin plate and line conductors#
This release ships a nice addition to our electromagnetic simulations:
we introduced a new set of hierarchical 2D and 3D simulations for DC,
frequency domain (FEM) and time domain (TDEM) that can take edge and face
conductivities as physical properties, allowing users to forward model and
invert for thin plate and line conductors.
A few examples of these classes are:
resistivity.Simulation3DHierarchicalNodal,
frequency_domain.Simulation3DHierarchicalElectricField,
and
time_domain.Simulation3DHierarchicalMagneticFluxDensity.
In the pre-existing DC and EM simulations we assign physical properties (like conductivity, resistivity, chargeability parameters, etc.) to mesh cells. But these new simluations allow us to assign conductivities to edges and faces in the mesh, enabling users to model and invert for thin plate or line features.
See more details in simpeg/simpeg#1296.
Improvements to simulations that use multiprocessing#
We applied some improvements to increase robustness and memory efficiency in simulations that make use of multiprocessing for parallelization:
Enhance robustness and error handling in multiprocessing simulations by @jcapriot in simpeg/simpeg#1776
Make multiprocessing potential field kernel build using shared memory by @jcapriot in simpeg/simpeg#1816
General improvements and optimizations#
Finally, we list here some other general improvements and optimizations that were applied to several parts of the codebase:
Optimize
derivmethod in parametric maps by @santisoler in simpeg/simpeg#1754Better map shapes by @jcapriot in simpeg/simpeg#1787
Store TDEM factorizations by @jcapriot in simpeg/simpeg#1832
Nsem recursive add zyx by @dccowan in simpeg/simpeg#1766
Documentation#
We moved the Contributing Guide to its own separated section within the User Guide, and we included a new page explaining the process of deprecating and removing code.
The documentation also received some minor fixes in style and some mathematical expressions.
Bugfixes#
This release introduces the following bugfixes:
Fix line feeds in natural_source/simulation.py to be LF instead by @jcapriot in simpeg/simpeg#1772
Make
simpeg.utils.downloadrespect theverboseargument by @manduinca in simpeg/simpeg#1777Fix Maxwell equation in FDEM module description by @santisoler in simpeg/simpeg#1778
Fix bug in
getJmethod of FDEM simulations by @lheagy in simpeg/simpeg#1822Fix line current inconsistency between EB and HJ formulations by @lheagy in simpeg/simpeg#1812
Fix NSEM TreeMesh side columns, scalar
sigma_primary, FDEM multi-sourceb, and arraymuby @jcapriot in simpeg/simpeg#1815TileMap –> use the discretize volume averaging by @lheagy in simpeg/simpeg#1770
Breaking changes#
This release drops support for Python 3.11 (see #1802) since it reaches its end-of-life by the end of this month.
We removed some deprecated bits of code that were due for this minor release:
Remove the
warnargument inget_default_solverin simpeg/simpeg#1797Removed deprecated directives submodules in simpeg/simpeg#1798
Remove deprecated properties of optimizers in simpeg/simpeg#1799
Remove deprecated properties from directives in simpeg/simpeg#1800
And we introduced some breaking changes while fixing some bugs and adding more features:
We fixed an inconsistency between the direction of the line currents between EB and HJ formulations in TDEM and FDEM simulations. We updated the HJ implementation of the line current so the current flows in the same direction as in the EB formulation. See simpeg/simpeg#1812 for more details.
simpeg/simpeg#1779 introduced a change in how the
ApparentConductivityreceiver computes the apparent conductivity datum by default.
Contributors#
We would like to highlight the work made by new contributors:
@RylanDS7 made their first contribution in simpeg/simpeg#1774
@manduinca made their first contribution in simpeg/simpeg#1777
Pull Requests#
Update link to PyPI in release checklist by @santisoler in simpeg/simpeg#1755
NSEM receivers for 2D simulation by @dccowan in simpeg/simpeg#1684
Add patches to support Numpy 2.4 by @santisoler in simpeg/simpeg#1759
Replace LaTeX
alignforalignedin math directives by @santisoler in simpeg/simpeg#1758Improve type hints in
distance_weightingby @santisoler in simpeg/simpeg#1756Cherry-pick changelog for v0.25.2 by @santisoler in simpeg/simpeg#1762
Improved right-hand side for NSEM primary secondary by @dccowan in simpeg/simpeg#1661
Remove unused functions in NSEM source utils by @santisoler in simpeg/simpeg#1763
TileMap –> use the discretize volume averaging by @lheagy in simpeg/simpeg#1770
Add allow-unsafe-pr-checkout: true by @jcapriot in simpeg/simpeg#1773
Fix line feeds in natural_source/simulation.py to be LF instead by @jcapriot in simpeg/simpeg#1772
Fix math definition of RHS in FDEM simulations by @RylanDS7 in simpeg/simpeg#1774
Nsem recursive add zyx by @dccowan in simpeg/simpeg#1766
Stable padding for 1D MT solutions by @dccowan in simpeg/simpeg#1769
Make
simpeg.utils.downloadrespect theverboseargument by @manduinca in simpeg/simpeg#1777Remove non-existing function from API reference by @santisoler in simpeg/simpeg#1784
Move Contributing guide to its own section by @santisoler in simpeg/simpeg#1781
Minor fixes to Contributing guide by @santisoler in simpeg/simpeg#1782
Fix some
numpydocstyleissues by @santisoler in simpeg/simpeg#1785Update URL to
pymatsolverforintersphinxby @santisoler in simpeg/simpeg#1783Make
sphinx-galleryconfiguration pickable by @santisoler in simpeg/simpeg#1786Use dependabot to check for updates in GitHub Actions by @santisoler in simpeg/simpeg#1789
Remove Action that runs
reviewdogin PRs by @santisoler in simpeg/simpeg#1795Bump actions/checkout from 4 to 7 by @dependabot [bot] in simpeg/simpeg#1791
Bump actions/setup-python from 5 to 7 by @dependabot [bot] in simpeg/simpeg#1790
Drop support for Python 3.11 by @santisoler in simpeg/simpeg#1802
Add Actions workflow to test against latest dependencies by @santisoler in simpeg/simpeg#1807
Run Ruff to check some
pydocstyleerrors by @santisoler in simpeg/simpeg#1788Bump black from 24.3.0 to 26.3.1 by @dependabot [bot] in simpeg/simpeg#1809
Extend Black target-version up to py314 by @santisoler in simpeg/simpeg#1810
Remove the
warnargument inget_default_solverby @santisoler in simpeg/simpeg#1797Bump conda-incubator/setup-miniconda from 4.0.1 to 4.1.0 by @dependabot [bot] in simpeg/simpeg#1811
Removed deprecated directives submodules by @santisoler in simpeg/simpeg#1798
Remove deprecated properties of optimizers by @santisoler in simpeg/simpeg#1799
Replace the deprecated
typing.Typefortypeby @santisoler in simpeg/simpeg#1801Remove deprecated properties from directives by @santisoler in simpeg/simpeg#1800
Fix Maxwell equation in FDEM module description by @santisoler in simpeg/simpeg#1778
Bump Python version to 3.14 in
environment.ymlby @santisoler in simpeg/simpeg#1813Add page on deprecating code to Contributing Guide by @santisoler in simpeg/simpeg#1808
Enhance robustness and error handling in multiprocessing simulations by @jcapriot in simpeg/simpeg#1776
Make multiprocessing potential field kernel build using shared memory by @jcapriot in simpeg/simpeg#1816
Replace deprecated refine_tree_xyz across tests by @santisoler in simpeg/simpeg#1466
Replace
refine_tree_xyzin latest magnetic tests by @santisoler in simpeg/simpeg#1819Add rotation invariant transfer functions by @dccowan in simpeg/simpeg#1779
Replace
refine_tree_xyzin examples by @santisoler in simpeg/simpeg#1820Fix bug in
getJmethod of FDEM simulations by @lheagy in simpeg/simpeg#1822Minor updates to the release checklist by @santisoler in simpeg/simpeg#1828
EMsimulation face and edge conductivities by @dccowan in simpeg/simpeg#1296
Fix line current inconsistency between EB and HJ formulations by @lheagy in simpeg/simpeg#1812
Replace deprecated
discretize.utils.closest_points_indexby @santisoler in simpeg/simpeg#1827Optimize
derivmethod in parametric maps by @santisoler in simpeg/simpeg#1754Better map shapes by @jcapriot in simpeg/simpeg#1787
Fix NSEM TreeMesh side columns, scalar
sigma_primary, FDEM multi-sourceb, and arraymuby @jcapriot in simpeg/simpeg#1815Store TDEM factorizations by @jcapriot in simpeg/simpeg#1832
Bump Python to 3.15 in test against latest versions by @santisoler in simpeg/simpeg#1833