**Release date**: 2016-11-27

**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)

**Deprecation**

- 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)

**Development/maintenance**

- 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`setup.py`

, 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)

**Release date**: 2016-04-05

**doi**: 10.5281/zenodo.49087

**Changes**:

**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)

**Release date**: 2014-10-28

**doi**: 10.5281/zenodo.16205

**Changes**:

**New module**fatiando.gravmag.normal_gravity to calculate normal gravity (the gravity of reference ellipsoids). (PR 133)- Using versioneer to manage
version numbers. Access the version number + git commit hash from
`fatiando.__version__`

. (PR 117) **BUG FIX**: fatiando.gravmag.prism gravitational field functions give correct results in all sides of the prism. There were singularities due to log(0) and weird results because of arctan2. (PR 113)- PEP8 compliance (started by @SamuelMarks). (PR 115)
- Multithreaded parallelism with OpenMP in
fatiando.gravmag.sphere,
fatiando.gravmag.polyprism and
fatiando.gravmag.prism.
Speedups are range from practically none to over 3x.
Works automatically.
**Windows users will have to install an extra dependency!**See the install instructions. (PR 106) - Faster Cython implementations of fatiando.gravmag.sphere and fatiando.gravmag.polyprism. Also separated gravmag forward modeling functions into “kernels” for gravity tensor components. This allows them to be reused in the magnetic field computations. (PR 105)
- Added
`xy2ne`

flag for`square`

and`points`

functions in fatiando.vis.mpl. (PR 94) **New**class`LCurve`

in fatiando.inversion.regularization for estimating the regularization parameter using an L-curve criterion. (PR 90)- Added support for
`vmin`

and`vmax`

arguments in fatiando.vis.mpl.contourf. (PR 89) **New**module fatiando.gravmag.magdir for estimating the total magnetization vector of multiple sources. (PR 87)

**Release date**: 2014-01-15

**doi**: 10.6084/m9.figshare.1115194

**Changes**:

- Complete re-implementation of fatiando.inversion and all modules that depended on it. Inversion routines now have a standard interface. (PR 72)
- Added moving window solution for Euler deconvolution in fatiando.gravmag.euler. (PR 85)
- Renamed the
`fatiando.io`

module to fatiando.datasets (PR 82) - fatiando.utils.contaminate can now take multiple data vectors and stddevs
- 2x speed-up of fatiando.gravmag.talwani with smarter numpy array usage. (PR 57)
- 300x speed-up of fatiando.seismic.ttime2d with new Cython code. (PR 62)
- Speed-up of fatiando.gravmag.tesseroid with better Cython code. (PR 58)
- Various tweaks to fatiando.vis.myv. (PR 56 and PR 60)
**New**gravity gradient tensor modeling with spheres in fatiando.gravmag.sphere. (PR 55 and PR 24, the first one by Vanderlei)**New**function fatiando.gridder.profile to extract a profile (cross-section) from map data. (PR 46)- Better support for random numbers.
`contaminate`

function now guaranteed to use errors with zero mean. Can now control the random seed used in all functions relying on random numbers. (PR 41) **New**scalar wave 2D finite differences modeling in fatiando.seismic.wavefd. (PR 38 the first by Andre)**New**algorithms in fatiando.seismic.wavefd for elastic waves and a new scalar wave solver! Using staggered grid finite differences makes elastic wave methods are more stable. (PR 52)**New**`extrapolate_nans`

function in fatiando.gridder to fill NaNs and masked values in arrays using the nearest data point.`interp`

function of fatiando.gridder has option to extrapolate values outside the convex hull of the data (enabled by default). Uses better cubic interpolation by default and returns 1D arrays like the rest of fatiando, instead of 2D. (PR 44 and PR 42)**New**function to load a grid in Surfer format. (PR the first by Henrique)**New**module fatiando.gravmag.eqlayer for equivalent layer processing of potential fields.- Refactored all magnetic modeling and inversion to use either scalar or vector magnetization.
`Seed`

class of fatiando.gravmag.harvester can now be used as a`Prism`

object.- fatiando.gravmag.harvester now supports data weights and magnetic data inversion.
- Removed module
`fatiando.logger`

. (PR 30)

**Release date**: 2013-04-12

**doi**: 10.5281/zenodo.16207

**Changes**:

- 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 fatiando.io 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.