.. _changelog:
Changelog
=========
.. _changelog-0.5:
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 `__)
**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 `__)
.. _changelog-0.4:
Version 0.4
-----------
**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 :ref:`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 :ref:`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 `__
**Changes**:
* **New module** :ref:`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**: :ref:`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
:ref:`fatiando.gravmag.sphere `,
:ref:`fatiando.gravmag.polyprism ` and
:ref:`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 :ref:`install instructions `.
(`PR 106 `_)
* Faster Cython implementations of
:ref:`fatiando.gravmag.sphere ` and
:ref:`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
:ref:`fatiando.vis.mpl `.
(`PR 94 `_)
* **New** class ``LCurve`` in :ref:`fatiando.inversion.regularization
` for estimating the regularization
parameter using an L-curve criterion.
(`PR 90 `_)
* Added support for ``vmin`` and ``vmax`` arguments in
:ref:`fatiando.vis.mpl.contourf `.
(`PR 89 `_)
* **New** module :ref:`fatiando.gravmag.magdir ` for
estimating the total magnetization vector of multiple sources.
(`PR 87 `_)
Version 0.2
-----------
**Release date**: 2014-01-15
**doi**: `10.6084/m9.figshare.1115194 `__
**Changes**:
* Complete re-implementation of :ref:`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
:ref:`fatiando.gravmag.euler `.
(`PR 85 `_)
* Renamed the ``fatiando.io`` module to
:ref:`fatiando.datasets `
(`PR 82 `_)
* :ref:`fatiando.utils.contaminate ` can now take multiple data
vectors and stddevs
* 2x speed-up of :ref:`fatiando.gravmag.talwani `
with smarter numpy array usage. (`PR 57
`_)
* 300x speed-up of :ref:`fatiando.seismic.ttime2d `
with new Cython code. (`PR 62
`_)
* Speed-up of :ref:`fatiando.gravmag.tesseroid `
with better Cython code. (`PR 58
`_)
* Various tweaks to :ref:`fatiando.vis.myv `. (`PR 56
`_ and `PR 60
`_)
* **New** gravity gradient tensor modeling with spheres in
:ref:`fatiando.gravmag.sphere `. (`PR 55
`_ and `PR 24
`_, the first one by
Vanderlei)
* **New** function :ref:`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
:ref:`fatiando.seismic.wavefd `. (`PR 38
`_ the first by Andre)
* **New** algorithms in :ref:`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
:ref:`fatiando.gridder ` to fill NaNs and masked
values in arrays using the nearest data point.
* ``interp`` function of :ref:`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 :ref:`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
:ref:`fatiando.gravmag.harvester ` can now be
used as a ``Prism`` object.
* :ref:`fatiando.gravmag.harvester ` now supports
data weights and magnetic data inversion.
* Removed module ``fatiando.logger``. (`PR 30
`_)
Version 0.1
-----------
**Release date**: 2013-04-12
**doi**: `10.5281/zenodo.16207 `__
**Changes**:
* Change license to BSD (see the :ref:`license text `).
* The API is now fully accessible by only importing ``fatiando``
* Added a :ref:`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
:ref:`fatiando.gravmag.harvester `
* Added harvester command line program that runs this new inversion
* Added magnetic total field anomaly function to
:ref:`fatiando.gravmag.prism `
* Added :ref:`fatiando.vis.myv.savefig3d ` to save a Mayavi
scene
* Added :ref:`fatiando.vis.myv.polyprisms ` 3D plotter
function for PolygonalPrism
* Added :ref:`fatiando.vis.myv.points3d ` 3D plotter
function for points
* Added gravity gradient tensor components and magnetic total field anomaly to
:ref:`fatiando.gravmag.polyprism `
* Added option to control the line width to `prisms` and `polyprisms` in
:ref:`fatiando.vis.myv `
* Added module :ref:`fatiando.gravmag.tensor ` for
processing gradient tensor data. Includes eigenvalues and eigenvectors,
tensor invariants, center of mass estimation, etc.
* Added module :ref:`fatiando.gravmag.imaging ` with
imaging methods for potential fields
* Added module :ref:`fatiando.gravmag.euler ` with Euler
deconvolution methods for potential field data
* Added module :ref:`fatiando.seismic.wavefd ` with 2D
Finite Difference simulations of elastic seismic waves
* Added unit conversion functions to :ref:`fatiando.utils `
* Added tesseroids forward modeling :ref:`fatiando.gravmag.tesseroid
`, meshing and plotting with Mayavi
* New :ref:`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.
* :ref:`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
:ref:`fatiando.constants `
* Data modules hidden inside functions in
:ref:`fatiando.gravmag.basin2d `
* Functions in :ref:`fatiando.gravmag.basin2d ` spit
out Polygons instead of the vertices estimated. Now you don't have to build
the polygons by hand.