Version 0.5

Release date: 2016-11-27

doi: 10.5281/zenodo.157746

Breaking changes

  • Moved function fatiando.utils.circular_points to fatiando.gridder.circular_scatter module because gridder is where point generation functions live. The function now returns the x, y coordinate arrays instead of a list of points. You can transform x, y to points by points = numpy.transpose([x, y]). Deleted the function utils.connect_points because it was only used in a single place and could be substituted by two list comprehensions. Deleted function utils.random_points because it has the exact same functionality as gridder.scatter. (PR 317)
  • Remove unused module fatiando.gravmag.half_sph_shell. It was used to test fatiando.gravmag.tesseroid but has been replaced by a full spherical shell solution that is coded in the tests. It serves no purpose so it should be removed to avoid having to maintain it. (PR 288)
  • Rename the Euler deconvolution classes to EulerDeconv (old Classic class, a terrible name choice in retrospect), EulerDeconvMW for the moving window solver, and EulerDeconvEW for the expanding window solver. These names are more unique and will not clash with any other class. This is crucial to establish a nice API for fatiando.gravmag. (PR 286)

Bug fixes

  • Fixes bug in fatiando.gravmag.tesseroid when running with the latest numba (0.28). The looplift argument to numba.jit doesn’t seem to work anymore. The workaround was to move array allocations out of the jit compiled functions. (PR 328)

New features and improvements

  • Change the behavior of gravmag.transform.upcontinue. Instead of raising an error when ‘height’ <= 0 (downward continuation) it now warns users that in this case the computation is unstable. (PR 337)
  • Add functions power_density_spectra and radial_average_spectrum to fatiando.gravmag.transform to calculate the radial average power density spectrum of gridded potential field data. (PR 303)
  • Add copy method to fatiando.mesher objects. (PR 301)
  • Enable fatiando.mesher.PointGrid to have points at different depths by passing it an array as the z argument. (PR 283)
  • Started an example gallery (matplotlib style) using the Sphinx plug-in sphinx-gallery. (PR 282)
  • Added several functions for padding arrays of arbitrary dimension. fatiando.gridder.pad_array pads an array with a variety of padding and taper options. fatiando.gridder.unpad_array returns the original, unpadded array. fatiando.gridder.pad_coords pads the coordinate vectors associated with the arrays padded above. Added Kass in the contributors. (PR 239)
  • Added function for tilt derivative filter for gravmag data. fatiando.gravmag.transform.tilt returns a value between -90 and 90 degrees, with the 0 value being located over or nearly over the edge of a given anomaly. (PR 261)


  • Warn users when importing fatiando.vis.myv that this module will be removed in version 0.7. In version 0.6, we’ll add 3D plotting functionality with matplotlib’s mpl3d or another suitable replacement. Users will be encouraged to switch to the new replacement. The fatiando.vis.myv might be kept as an optional module. (PR 336)
  • Warn users when importing fatiando.vis.mpl that this module will be removed in version 0.6. Using this module as a replacement for matplotlib.pyplot is strongly discouraged. The custom plotting functions, like seismic_wiggle, will be kept and moved to a new module. (PR 335)


  • Warn users that the code in fatiando.seismic.wavefd is experimental and may not provide accurate results. (PR 319)
  • Implement unit tests for the fatiando.seismic.srtomo module. Reached 100% test coverage. Now examples are only in the cookbook. (PR 316)
  • Move from distutils to setuptools in, as recommended in the Python Packaging User Guide. (PR 294)
  • Replace nose with py.test as our unit testing framework. Tests are now located in the package fatiando.tests and installed with Fatiando. This means that we can test an installed version of Fatiando, not just the code in the repository. (PR 290)
  • Added back-end support for decorators from duecredit to be added to methods. This allows a report for per-method citations based on the methods used in a given script. Currently only implemented for gravmag/magdir but will be added to all methods in time. (PR 293)
  • Better navigation for long pages in the docs by adding a sidebar with links to subsections. (PR 275)

Version 0.4

Release date: 2016-04-05

doi: 10.5281/zenodo.49087


  • New obtain a synthetic convolutional seismogram in fatiando.seismic.conv. It can be given a depth model that will be converted to a time model before generating the synthetic seismogram. (PR 190)
  • Refactor fatiando.inversion. Completely redesigned classes make implementing new inversions simpler. Subclassing Misfit is simpler, with fewer parameters necessary. The usage of existing inversions has changed little. A new dependency future was added to ease the transition to support Python 3. (PR 127)
  • Fix the broken software carpentry links in develop.rst. (PR 245)
  • Fix the doctest for fatiando.gravmag.tensor.center_of_mass. (PR 242)
  • BUG FIX: Tesseroid computations failed (silently) when tesseroids were smaller than 1e-6 degrees on a side (~ 10 cm). Code now ignores these tesseroids on input and warns the user about it. If a tesseroid becomes smaller than this during adaptive discretization, the tesseroid effect will be computed without division. The user will be warned when this happens. (PR 228)
  • New reduction to the pole and upward continuation with FFT in fatiando.gravmag.transform. The pole reduction allows both remanent and induced magnetization. Upward continuation is more stable and faster than the old space domain approach that was implemented. (PR 156)
  • IMPORTANT BUG FIX: Fixed wrong ordering of nodes in fatiando.mesher.PointGrid. The order of nodes had the same problem as the regular grids (fixed in 196). This was not caught before because PointGrid didn’t use gridder.regular to generate its internal regular grid. This is an example of why reuse is a good thing! Tests now should catch any future problems. (PR 209)
  • IMPORTANT BUG FIX: fatiando.gridder.regular and many other places in Fatiando were using the wrong convention for x, y dimensions. x should point North and y East. Thus, a data matrix (regular grid) should have x varying in the lines and y varying in the columns. This is opposite what we had. This fix also changes the shape argument to be (nx, ny) instead of (ny, nx). Users should be aware of this and double check their code. (PR 196)
  • More stable derivatives in fatiando.gravamag.transform. The horizontal derivatives default to central finite-differences for greater stability. The FFT based derivatives use a grid padding to avoid edge effects. Thanks to Matteo Niccoli for suggesting this fix. (PR 196)
  • Renamed fatiando.gravmag.fourier.ansig to fatiando.gravmag.transform.tga (PR 186)
  • Remove fatiando.gravmag.fourier by moving relevant functions into fatiando.gravmag.transform. (PR 186)
  • New seismic_wiggle and seismic_image plotting functions for seismic data in fatiando.vis.mpl (PR 192) plus cookbook
  • Remove OpenMP parallelism from the fatiando.gravmag Cython coded forward modeling. Caused the majority of our install problems and didn’t offer a great speed up anyway (< 2x). Can be replaced by multiprocessing parallelism without the install problems (PR 177)
  • Tesseroid forward modeling functions in fatiando.gravmag.tesseroid take an optional pool argument. Use it to pass an open multiprocessing.Pool for the function to use. Useful to avoid processes spawning overhead when calling the forward modeling many times (PR 183)
  • BUG FIX: Avoid weird numba error when tesseroid has zero volume. Let to better sanitizing the input model. Tesseroids with dimensions < 1cm are ignored because they have almost zero gravitational effect (PR 179)
  • Ported the tesseroid forward modeling code from Cython to numba. This is following the discussion on issue #169 to make installing less of burden by removing the compilation step. The numba code runs just as fast. New functions support multiprocessing parallelism. Thanks to new contributor Graham Markall for help with numba. (PR 175)
  • Better documentation and faster implementation of fatiando.gravmag.tesseroid (PR 118)
  • BUG FIX: Replace matplotlib.mlab.griddata with scipy.interpolate.griddata in fatiando.gridder.interp to avoid incompatibilities when using matplotlib > 1.3 (at least in MacOS). Nearest neighbor interpolation method flagged as nn was removed. Now it becomes only nearest. Also replace matplotlib with scipy in fatiando.mesher.PrismMesh.carvetopo (PR 148)
  • New class fatiando.gravmag.basin2d.PolygonalBasinGravity for 2D gravity inversion for the relief of a basin. (PR 149)
  • Significant progress on the Developer Guide. From getting started to making a release on PyPI. (PR 144)
  • Removed package fatiando.gui. This was an experimental and temporary package to explore interactivity. Given new developments, like the IPython HTML widgets, it is no longer relevant. The package will be replaced by package specific interactive modules. From the original classes implemented in this package, only Moulder has been saved. (PR 143)
  • Moved Moulder to the new module fatiando.gravmag.interactive. Completely rewrote the application. It now allows editing, moving, and deleting polygons, persisting the application to a pickle file and reloading, etc. (PR 143)

Version 0.3

Release date: 2014-10-28

doi: 10.5281/zenodo.16205


Version 0.2

Release date: 2014-01-15

doi: 10.6084/m9.figshare.1115194


Version 0.1

Release date: 2013-04-12

doi: 10.5281/zenodo.16207


  • Change license to BSD (see the license text).
  • The API is now fully accessible by only importing fatiando
  • Added a Cookbook section to the documentation with all the sample scripts from the cookbook folder.
  • Implemented “Robust 3D gravity gradient inversion by planting anomalous densities” by Uieda and Barbosa (2012) in fatiando.gravmag.harvester
  • Added harvester command line program that runs this new inversion
  • Added magnetic total field anomaly function to fatiando.gravmag.prism
  • Added fatiando.vis.myv.savefig3d to save a Mayavi scene
  • Added fatiando.vis.myv.polyprisms 3D plotter function for PolygonalPrism
  • Added fatiando.vis.myv.points3d 3D plotter function for points
  • Added gravity gradient tensor components and magnetic total field anomaly to fatiando.gravmag.polyprism
  • Added option to control the line width to prisms and polyprisms in fatiando.vis.myv
  • Added module fatiando.gravmag.tensor for processing gradient tensor data. Includes eigenvalues and eigenvectors, tensor invariants, center of mass estimation, etc.
  • Added module fatiando.gravmag.imaging with imaging methods for potential fields
  • Added module fatiando.gravmag.euler with Euler deconvolution methods for potential field data
  • Added module fatiando.seismic.wavefd with 2D Finite Difference simulations of elastic seismic waves
  • Added unit conversion functions to fatiando.utils
  • Added tesseroids forward modeling fatiando.gravmag.tesseroid, meshing and plotting with Mayavi
  • New module to fetch models and data from the web and convert them to useful formats (for now supports the CRUST2.0 global curstal model)
  • If building inplace or packaging, the setup script puts the Mercurial changeset hash in a file. Then fatiando.logger.header loads the hash from file and put a “Unknown” if it can’t read. This way importing fatiando won’t fail if the there is no changeset information available.
  • fatiando.mesher.PrismMesh.dump: takes a mesh file, a property file and a property name. Saves the output to these files.
  • Transformed all geometric elements (like Prism, Polygon, etc) into classes
  • Ported all C extensions to Python + Numpy. This way compiling is not a prerequisite to installing
  • Using Cython for optional extension modules. If they exist, they are loaded to replace the Python + Numpy versions. This all happens at runtime.
  • Move all physical constants used in fatiando to module fatiando.constants
  • Data modules hidden inside functions in fatiando.gravmag.basin2d
  • Functions in fatiando.gravmag.basin2d spit out Polygons instead of the vertices estimated. Now you don’t have to build the polygons by hand.