.. _whatsnew-5.1:
**************************
What's New in Astropy 5.1?
**************************
Overview
========
Astropy 5.1 is a major release that adds significant new functionality since
the 5.0 LTS release.
In particular, this release includes:
* :ref:`whatsnew-5.1-cosmology`
* :ref:`whatsnew-doppler-redshift-eq`
* :ref:`whatsnew-io-ascii-converters`
* :ref:`whatsnew-structured-columns`
* :ref:`whatsnew-fitters`
* :ref:`whatsnew-iers-handling`
* :ref:`whatsnew-uncertainty-represent`
* :ref:`whatsnew-schechter1d-model`
In addition to these major changes, Astropy v5.1 includes a large number of
smaller improvements and bug fixes, which are described in the Full Changelog.
By the numbers:
* 1077 commits have been added since 5.0
* 155 issues have been closed since 5.0
* 289 pull requests have been merged since 5.0
* 58 people have contributed since 5.0
* 13 of which are new contributors
.. _whatsnew-5.1-cosmology:
Updates to :mod:`~astropy.cosmology`
====================================
|Cosmology| is now an abstract base class, and subclasses must override the
abstract property :attr:`~astropy.cosmology.Cosmology.is_flat`. For |FLRW|,
:attr:`~astropy.cosmology.FLRW.is_flat` checks that ``Ok0 == 0`` and ``Otot0 ==
1``.
Astropy v5.0 introduced cosmological equivalency -- with method
:meth:`~astropy.cosmology.Cosmology.is_equivalent` -- where two cosmologies may
be equivalent even if not of the same class. For example, an instance of
|LambdaCDM| might have :math:`\Omega_0=1` and :math:`\Omega_k=0` and therefore
be flat, like |FlatLambdaCDM|. Now the keyword argument ``format`` is added to
extend the notion of equivalence to any Python object that can be converted to
a |Cosmology|::
>>> from astropy.cosmology import Planck18
>>> tbl = Planck18.to_format("astropy.table")
>>> Planck18.is_equivalent(tbl, format=True)
True
The list of valid formats, e.g. the |Table| in this example, may be
checked with ``Cosmology.from_format.list_formats()``.
A new property :attr:`~astropy.cosmology.FlatCosmologyMixin.nonflat` has been
added to flat cosmologies (|FlatCosmologyMixin| subclasses) to get an
equivalent |Cosmology|, but of the corresponding non-flat class::
>>> Planck18.nonflat
LambdaCDM(name="Planck18", H0=67.66 km / (Mpc s), ...
:meth:`astropy.cosmology.FlatCosmologyMixin.clone` has been enhanced to allow
for a flat |Cosmology| to clone on the equivalent non-flat |Cosmology|. For
example::
>>> Planck18.clone(to_nonflat=True, Ode0=1)
LambdaCDM(name="Planck18 (modified)", H0=67.66 km / (Mpc s), Om0=0.30966, Ode0=1.0, ...
.. _whatsnew-doppler-redshift-eq:
:func:`~astropy.units.equivalencies.doppler_redshift` equivalency
=================================================================
New :func:`astropy.units.equivalencies.doppler_redshift` is added to
provide conversion between Doppler redshift and radial velocity.
.. _whatsnew-io-ascii-converters:
Specifying data types when reading ASCII tables
===============================================
The syntax for specifying the data type of columns when reading a table using
:func:`astropy.io.ascii.read` has been simplified considerably. For instance,
to force every column in a table to be read as a `float` you can now do::
>>> from astropy.table import Table
>>> t = Table.read('table.dat', format='ascii', converters={'*': float}) # doctest: +SKIP
Previously, doing the same data type specification required using the
:func:`~astropy.io.ascii.convert_numpy` function and providing the `dict`
value as a `list` even for only one element::
>>> from astropy.io.ascii import convert_numpy
>>> t = Table.read('table.dat', format='ascii',
... converters={'*': [convert_numpy(float)]}) # doctest: +SKIP
Note that the previous syntax is still supported for backwards compatibility
and there is no intent to remove this. See :ref:`io-ascii-read-converters` for
details.
.. _whatsnew-structured-columns:
Structured Columns
==================
Columns which are ``numpy`` structured arrays are now fully supported,
effectively allowing tables within tables. This applies to |Column|,
|MaskedColumn|, and |Quantity| columns, and includes possible structured
units. These structured data columns can be stored in ECSV, FITS, and HDF5
formats. A new way to specify the formatting of a structured column is now
available using parameter substitutions corresponding to the structure field
names. See :ref:`format_stuctured_array_columns` for details and an example.
As part of this update, there is an API change in the behavior when a structured
|ndarray| is added as a column to a |Table|. Previously this was
converted to an :class:`~astropy.table.NdarrayMixin` subclass of |ndarray| and added as a mixin
column. This was because saving as a file (e.g. HDF5, FITS, ECSV) was not
supported for structured array columns. Now a structured |ndarray| is
added to a |Table| as a native |Column| and saving to file is supported.
.. _whatsnew-fitters:
New model fitters have been added
=================================
New fitters have been added to :mod:`~astropy.modeling.fitting` based around
the available algorithms provided by :func:`scipy.optimize.least_squares`,
which is now the recommended least-squares optimization algorithm from
``scipy``. These new fitters are:
* :class:`~astropy.modeling.fitting.TRFLSQFitter`, which uses the Trust Region
Reflective (TRF) algorithm.
* :class:`~astropy.modeling.fitting.LMLSQFitter`, which uses the
Levenberg-Marquardt (LM) algorithm, via the
:func:`scipy.optimize.least_squares` function.
* :class:`~astropy.modeling.fitting.DogBoxLSQFitter`, which uses the dogleg algorithm.
.. _whatsnew-iers-handling:
Allow time conversions without predictive Earth rotation data (IERS-A)
======================================================================
Some time conversions like UTC -> UT1 require additional Earth rotation data for
full accuracy. These data are provided by the online IERS service as the IERS-A
tables and are downloaded as required. In some use cases this download is not
desired or possible. Examples include an application where full accuracy is not
required, running on a cluster node without internet access, or the rare
instances when the IERS server and mirror are not available. For these cases
there is a new config item `iers.conf.iers_degraded_accuracy
` that specifies the behavior
when times are outside the range of available IERS data. The options are
``'error'`` (default to raise an :class:`~astropy.utils.iers.IERSRangeError`),
``'warn'`` (issue an :class:`~astropy.utils.iers.IERSDegradedAccuracyWarning`) or
``'ignore'`` (ignore the warning).
In addition, the logic for auto-downloads was changed to guarantee that no matter
what happens with the IERS download operations, only warnings will be issued.
These warnings can be ignored if desired.
.. _whatsnew-uncertainty-represent:
Uncertainty classes can be transformed into each other
======================================================
Subclasses of :class:`astropy.nddata.NDUncertainty` can now be
converted between each other. This is done via transforming the original
uncertainty values into a variance (if possible), and then transforming the
variance into the desired uncertainty. A simple example of this is::
>>> import numpy as np
>>> from astropy.nddata import InverseVariance, StdDevUncertainty
>>> StdDevUncertainty(np.arange(1, 10)).represent_as(InverseVariance)
InverseVariance([1. , 0.25 , 0.11111111, 0.0625 ,
0.04 , 0.02777778, 0.02040816, 0.015625 ,
0.01234568])
.. _whatsnew-schechter1d-model:
Schechter1D Model
=================
A new :class:`astropy.modeling.powerlaws.Schechter1D` model,
parameterized in terms of magnitudes, for luminosity functions was
added.
Full change log
===============
To see a detailed list of all changes in version v5.1, including changes in
API, please see the :ref:`changelog`.
Contributors to the v5.0 release
================================
The people who have contributed to the code for this release are:
.. hlist::
:columns: 4
- Aarya Patil
- Adam Broussard *
- Adam Ginsburg
- Adrian Price-Whelan
- Albert Y. Shih
- Andrii Oriekhov *
- Brian Soto
- Chiara Marmo
- Clare Shanahan
- Clément Robert
- David Stansby
- Derek Homeier
- E. Madison Bray
- Ed Slavich
- Eero Vaher
- Emir Karamehmetoglu
- Erik Tollerud
- Francesc Vilardell *
- Geert Barentsen
- Hans Moritz Günther
- Hsin Fan *
- James Tocknell
- Jero Bado
- Jerry Ma
- Jo Bovy *
- Jonas Kemmer *
- Karl Gordon
- Karl Wessel
- Kelle Cruz
- Kyle Conroy *
- Larry Bradley
- Laurie Stephey
- Leo Singer
- Malynda Chizek Frouard *
- Marten van Kerkwijk
- Matteo Bachetti
- Matthew Craig
- Maximilian Nöthe
- Mihai Cara
- Nabil Freij
- Nathaniel Starkman
- Neal McBurnett
- Ole Streicher
- Pey Lian Lim
- Robel Geda
- Roy Smart
- Sam Van Kooten
- Sarah Weissman *
- Sebastian Meßlinger *
- Simon Conseil
- Stuart Mumford
- Thomas Robitaille
- Tom Aldcroft
- William Jamieson
- github-actions *
- kYwzor *
- mzhengxi *
- orionlee
Where a * indicates that this release contains their first contribution to astropy.