astropy.coordinates
The ephemeris used in astropy.coordinates can now be set to any version of
the JPL ephemeris available from https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/. [#12541]
Angle.to_string() now accepts the 'latex_inline' unit format. [#13056]
astropy.cosmology
π Cosmology instance can be parsed from or converted to a YAML string using
the new "yaml" format in Cosmology's to/from_format I/O. [#12279]
Register "astropy.row" into Cosmology's to/from format I/O, allowing a Cosmology instance to be parse from or converted to an Astropy Table Row. [#12313]
π― A method clone has been added to Parameter to quickly deep copy the
object and change any constructor argument.
A supporting equality method is added, and repr is enhanced to be able to
roundtrip -- eval(repr(Parameter())) -- if the Parameter's arguments can
similarly roundtrip.
Parameter's arguments are made keyword-only. [#12479]
β Add methods Otot and Otot0 to FLRW cosmologies to calculate the total
energy density of the Universe. [#12590]
β Add property is_flat to cosmologies to calculate the curvature of the Universe.
Cosmology is now an abstract class and subclasses must override the
abstract property is_flat. [#12606]
For converting a cosmology to a mapping, two new boolean keyword arguments are
added: cosmology_as_str for turning the class reference to a string,
instead of the class object itself, and move_from_meta to merge the
metadata with the rest of the returned mapping instead of adding it as a
nested dictionary. [#12710]
Register format "astropy.cosmology" with Cosmology I/O. [#12736]
Cosmological equivalency (Cosmology.is_equivalent) can now be extended
to any Python object that can be converted to a Cosmology, using the new
keyword argument format.
This allows e.g. a properly formatted Table to be equivalent to a Cosmology. [#12740]
β
The new module cosmology/tests/helper.py has been added to provide tools
for testing the cosmology module and related extensions. [#12966]
A new property nonflat has been added to flat cosmologies
(FlatCosmologyMixin subclasses) to get an equivalent cosmology, but of the
corresponding non-flat class. [#13076]
π― clone has been enhanced to allow for flat cosmologies to clone on the
equivalent non-flat cosmology. [#13099]
cosmology file I/O uses the Unified Table I/O interface, which has added
support for reading and writing file paths of the form ~/file.ecsv or
~<username>/file.ecsv, referring to the home directory of the current user
or the specified user, respectively. [#13129]
astropy.io.ascii ^
Simplify the way that the converters argument of io.ascii.read is
provided. Previously this required wrapping each data type as the tuple returned
by the io.ascii.convert_numpy() function and ensuring that the value is a
list. With this update you can write converters={'col1': bool} to force
conversion as a bool instead of the previous syntax converters={'col1':
[io.ascii.convert_numpy(bool)]}. Note that this update is back-compatible with
the old behavior. [#13073]
β Added support in io.ascii for reading and writing file paths of the form
~/file.csv or ~<username>/file.csv, referring to the home directory of
the current user or the specified user, respectively. [#13130]
astropy.io.fits ^
π Add option unit_parse_strict to astropy.io.fits.connect.read_table_fits
to enable warnings or errors about invalid FITS units when using astropy.table.Table.read.
The default for this new option is "warn", which means warnings are now raised for
columns with invalid units. [#11843]
π Changes default FITS behavior to use buffered I/O rather than unbuffered I/O for performance reasons. [#12081]
astropy.io.fits.Header now has a method to calculate the size
(in bytes) of the data portion (with or without padding) following
that header. [#12110]
astropy.io.misc ^
π Allow serialization of model unit equivalencies. [#10198]
Built-in Cosmology subclasses can now be converted to/from YAML with the
functions dump and load in astropy.io.misc.yaml. [#12279]
β Add asdf support for Cosine1D, Tangent1D, ArcSine1D,
ArcCosine1D, and ArcTangent1D models. [#12895]
β Add asdf support for Spline1D models. [#12897]
astropy.io.registry
~/file.csv or ~<username>/file.csv, referring to the
home directory of the current user or the specified user, respectively. [#13129]astropy.modeling ^
β Add new fitters based on scipy.optimize.least_squares method of non-linear
least-squares optimization: [#12051]
TRFLSQFitter using the Trust Region Reflective algorithm.LMLSQFitter using the Levenberg-Marquardt algorithm (implemented by scipy.optimize.least_squares).DogBoxLSQFitter using the dogleg algorithm.Enable direct use of the ignored feature of ModelBoundingBox by users in
addition to its use as part of enabling CompoundBoundingBox. [#12384]
Switch modeling.projections to use astropy.wcs.Prjprm wrapper internally and provide access to the astropy.wcs.Prjprm structure. [#12558]
β Add error to non-finite inputs to the LevMarLSQFitter, to protect against soft scipy failure. [#12811]
π Allow the Ellipse2D and Sersic2D theta parameter to be input as
an angular quantity. [#13030]
β Added Schechter1D model. [#13116]
astropy.nddata ^
β Add support for converting between uncertainty types. This uncertainty conversion system uses a similar flow to the coordinate subsystem, where Cartesian is used as the common system. In this case, variance is used as the common system. [#12057]
The as_image_hdu option is now available for CCDData.to_hdu and
CCDData.write. This option allows the user to get an ImageHDU as the
first item of the returned HDUList, instead of the default PrimaryHDU. [#12962]
File I/O through nddata.CCDData uses the Unified I/O interface, which has
added support for reading and writing file paths of the form ~/file.csv or
~<username>/file.csv, referring to the home directory of the current user
or the specified user, respectively. [#13129]
astropy.table ^
A new keyword-only argument kind was added to the Table.sort method to
specify the sort algorithm. [#12637]
π Columns which are numpy structured arrays are now fully supported,
effectively allowing tables within tables. This applies to Column,
MaskedColumn, and Quantity columns. These structured data columns
can be stored in ECSV, FITS, and HDF5 formats. [#12644]
π Improve the performance of np.searchsorted by a factor of 1000 for a
bytes-type Column when the search value is str or an array of str.
This happens commonly for string data stored in FITS or HDF5 format files. [#12680]
β Add support for using mixin columns in group aggregation operations when the
mixin supports the specified operation (e.g. np.sum works for Quantity
but not Time). In cases where the operation is not supported the code now
issues a warning and drops the column instead of raising an exception. [#12825]
β Added support to the Unified Table I/O interface for reading and writing file
paths of the form ~/file.csv or ~<username>/file.csv, referring to the
home directory of the current user or the specified user, respectively. [#13129]
astropy.time ^
numpy.linspace() with two Time instances to
generate a or multiple linearly spaced set(s) of times. [#13132]astropy.units ^
structured_to_unstructured and unstructured_to_structured in
numpy.lib.recfunctions now work with Quantity. [#12486]
Implement multiplication and division of LogQuantities and numbers [#12566]
π New doppler_redshift equivalency to convert between
Doppler redshift and radial velocity. [#12709]
β Added the where keyword argument to the mean(),var(), std() and nansum() methods of
astropy.units.Quantity. Also added the intial keyword argument to astropy.units.Quantity.nansum(). [#12891]
β Added "Maxwell" as a unit for magnetic flux to the CGS module. [#12975]
Quantity.to_string() and FunctionUnitBase.to_string() now accept the
'latex_inline' unit format. The output of StructuredUnit.to_string()
when called with format='latex_inline' is now more consistent with the
output when called with format='latex'. [#13056]
astropy.utils ^
β Added the where keyword argument to the mean(), var(), std(), any(), and all() methods of
astropy.utils.masked.MaskedNDArray. [#12891]
π Improve handling of unavailable IERS-A (predictive future Earth rotation) data
in two ways. First, allow conversions with degraded accuracy if the IERS-A data
are missing or do not cover the required time span. This is done with a new
config item conf.iers_degraded_accuracy which specifies the behavior when
times are outside the range of IERS table. The options are 'error' (raise an
IERSRangeError, default), 'warn' (issue a IERSDegradedAccuracyWarning)
or 'ignore' (ignore the problem). Second, the logic for auto-downloads was
changed to guarantee that no matter what happens with the IERS download
operations, only warnings will be issued. [#13052]
astropy.wcs ^
astropy.wcs.Celprm and astropy.wcs.Prjprm have been added
to allow access to lower level WCSLIB functionality and to allow direct
access to the cel and prj members of Wcsprm. [#12514]
β Add temporal properties for convenient access of/selection of/testing for
the TIME axis introduced in WCSLIB version 7.8. [#13094]
astropy.coordinates
dms_to_degrees and hms_to_hours functions (and implicitly
tuple-based initialization of Angle) is now deprecated, as it was
difficult to be sure about the intent of the user for signed values of
the degrees/hours, minutes, and seconds. [#13162]astropy.cosmology
The already deprecated Planck18_arXiv_v2 has been removed.
Use Planck18 instead [#12354]
default_cosmology.get_cosmology_from_string is deprecated and will be
removed in two minor versions.
Use getattr(astropy.cosmology, <str>) instead. [#12375]
π In I/O, conversions of Parameters move more relevant information from the
Parameter to the Column.
The default Parameter format_spec is changed from ".3g" to "". [#12612]
π Units of redshift are added to z_reion in built-in realizations' metadata. [#12624]
Cosmology realizations (e.g. Planck18) and parameter dictionaries are now
lazily loaded from source files. [#12746]
The Cosmology Parameter argument "fmt" for specifying a format spec has been deprecated in favor of using the built-in string representation from the Parameter's value's dtype. [#13072]
astropy.io.ascii ^
InvalidEcsvDatatypeWarning instead of raising a ValueError
exception if the datatype of a column is not recognized in the ECSV standard.
This also applies to older versions of ECSV files which used to silently
proceed but now warn first. [#12841]astropy.io.fits ^
β Removed deprecated clobber argument from functions in astropy.io.fits. [#12258]
β Add -s/--sort argument to fitsheader to sort the fitsort-mode output. [#13106]
astropy.io.misc ^
astropy.modeling ^
astropy.modeling.fitting._fitter_to_model_params and astropy.modeling.fitting._model_to_fit_params
public methods. [#12585]astropy.table ^
π Change the repr of the Table object to replace embedded newlines and tabs with
r'\n' and r'\t' respectively. This improves the display of such tables. [#12631]
A new keyword-only argument kind was added to the Table.sort method to
specify the sort algorithm. The signature of Table.sort was modified so that
the reverse argument is now keyword-only. Previously reverse could be
specified as the second positional argument. [#12637]
π Changed behavior when a structured numpy.ndarray is added as a column to a
Table. Previously this was converted to a 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 numpy.ndarray is added to the table as a native Column and
saving to file is supported. [#13236]
β astropy.tests ^
β
Backward-compatible import of astropy.tests.disable_internet
has been removed; use pytest_remotedata.disable_internet
from pytest-remotedata instead. [#12633]
β
Backward-compatible import of astropy.tests.helper.remote_data
has been removed; use pytest.mark.remote_data from pytest-remotedata
instead. [#12633]
π The following are deprecated and will be removed in a future release.
Use pytest warning and exception handling instead: [#12633]
astropy.io.ascii.tests.common.raisesastropy.tests.helper.catch_warningsastropy.tests.helper.ignore_warningsastropy.tests.helper.raisesastropy.tests.helper.enable_deprecations_as_exceptionsastropy.tests.helper.treat_deprecations_as_exceptionsβ
Backward-compatible plugin astropy.tests.plugins.display
has been removed; use pytest-astropy-header instead. [#12633]
astropy.time ^
~astropy.time.TimeDelta object with numerical inputs
that do not have a unit and without specifying an explicit format,
for example TimeDelta(5),
now results in a ~astropy.time.TimeDeltaMissingUnitWarning.
This also affects statements like Time("2020εΉ΄01ζ01ζ₯") + 5 or
Time("2020εΉ΄01ζ05ζ₯") - Time("2020εΉ΄01ζ03ζ₯") < 5, which implicitly
transform the right-hand side into an ~astropy.time.TimeDelta instance. [#12888]astropy.coordinates
EarthLocation
objects is now smarter about processing observatory names from its data files.
More names are available for use and the empty string is no longer considered
to be a valid name. [#12721]astropy.io.ascii ^
π Fixed io.ascii read and write functions for most formats to correctly handle
data fields with embedded newlines for both the fast and pure-Python readers and
writers. [#12631]
π Fix an issue when writing Time table columns to a file when the time
format is one of datetime, datetime64, or ymdhms. Previously,
writing a Time column with one of these formats could result in an exception
or else an incorrect output file that cannot be read back in. [#12842]
astropy.io.fits ^
β Add a mask_invalid option to Table.read to allow deactivating the
masking of NaNs in float columns and empty strings in string columns. This
option is necessary to allow effective use of memory-mapped reading with
memmap=True. [#12544]
π Fix CompImageHeader.clear(). [#13102]
astropy.modeling ^
ignore functionality failing in ModelBoundingBox when using
ignore option alongside passing bounding box data as tuples. [#13032]astropy.table ^
Fixed a bug in Table.show_in_browser using the jsviewer=True option
to display the table with sortable columns. Previously the sort direction arrows
were not being shown due to missing image files for the arrows. [#12716]
π Fix an issue when writing Time table columns to a file when the time
format is one of datetime, datetime64, or ymdhms. Previously,
writing a Time column with one of these formats could result in an exception
or else an incorrect output file that cannot be read back in. [#12842]
π Fixed a bug where it is not possible to set the .info.format property of a
table structured column and get formatted output. [#13233]
π Fixed a bug when adding a masked structured array to a table. Previously this
was auto-converted to a NdarrayMixin which loses the mask. With this fix
the data are added to the table as a MaskedColumn and the mask is preserved. [#13236]
astropy.time ^
Time table columns to a file when the time
format is one of datetime, datetime64, or ymdhms. Previously,
writing a Time column with one of these formats could result in an exception
or else an incorrect output file that cannot be read back in. [#12842]astropy.utils ^
π Fixed a bug which caused numpy.interp to produce incorrect
results when Masked arrays were passed. [#12978]
π Fixed HAS_YAML not working as intended. [#13066]
astropy.wcs ^
Convert NoConvergence errors to warnings in world_to_pixel_values so that callers can work at least with the non converged solution. [#11693]
π¦ Expose the ability to select TIME axis introduced in WCSLIB version 7.8. [#13062]
Do not call wcstab on wcscopy and copy wtb members from the original WCS. [#13063]
β‘οΈ Updated bundled WCSLIB version to 7.11. This update together with 7.10
includes bug fixes to tabini() and tabcpy() as well as several
print formatting enhancements. For a full list of
changes - see http://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES [#13171]
Fixed error that occurred in WCS.world_to_pixel for WCS objects with a
spectral axis and observer location information when passing a SpectralCoord
that had missing observer or target information. [#13228]
astropy.modeling ^
Gaussian2D bounding_box when theta is an angular
Quantity. [#13021]astropy.utils ^
astropy.utils.iers.iers.IERS_A_URL to maia.usno.navy.mil domain instead
of NASA FTP to work around server issues. [#13004]wcsset() and wcssub(). The
four-digit type code for the time axis will have the first digit set to 4,
i.e., four digit code will be 4xxx where x is a digit 0-9. For a full list of
bug fixes see https://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES [#12994]astropy.convolution
astropy.convolution.utils.discretize_model which allows the function to handle a CompoundModel.
Before this fix, discretize_model was confusing CompoundModel with a callable function. [#12959]astropy.io.fits ^
from_columns
without previousely defined ColDefs structure. [#12863]astropy.io.votable
astropy.utils ^
astropy.io.ascii ^
object, str, datetime64,
etc.), which would raise a ValueError in ECSV version 1.0. [#12880]astropy.io.misc ^
units_mapping schema's property name conflicts. Changes:
inputs to unit_inputsoutputs to unit_outputs [#12800]astropy.io.votable
astropy.io.votable.validate was printing output to
sys.stdout when the output paramter was set to None. validate
now returns a string when output is set to None, as documented.
[#12604]astropy.modeling ^
π Fix handling of units on scale parameter in BlackBody model. [#12318]
Indexing on models can now be used with all types of integers
(like numpy.int64) instead of just int. [#12561]
π Fix computation of the separability of a CompoundModel where another
CompoundModel is on the right hand side of the & operator. [#12907]
Provide a hook (Model._calculate_separability_matrix) to allow subclasses
of Model to define how to compute their separability matrix. [#12900]
astropy.stats ^
kuiper_false_positive_probability(D,N) on
distributions with many data points could produce NaN values for the false
positive probability of the Kuiper statistic. [#12896]astropy.wcs ^
naxis, pixel_shape, and
pixel_bounds attributes of astropy.wcs.WCS were not restored when
an astropy.wcs.WCS object was unpickled. This fix also eliminates
FITSFixedWarning warning issued during unpiclikng of the WCS objects
related to the number of axes. This fix also eliminates errors when
unpickling WCS objects originally created using non-default values for
key, colsel, and keysel parameters. [#12844]astropy.coordinates
Trying to create an instance of astropy.coordinates.Distance by providing
both z and parallax now raises the expected ValueError. [#12531]
π Fixed a bug where changing the wrap angle of the longitude component of a representation could raise a warning or error in certain situations. [#12556]
astropy.coordinates.Distance constructor no longer ignores the unit
keyword when parallax is provided. [#12569]
astropy.cosmology
astropy.cosmology.utils.aszarr can now convert Column objects. [#12525]
Reading a cosmology from an ECSV will load redshift and Hubble parameter units from the cosmology units module. [#12636]
astropy.io.fits ^
_dump_coldefs and add tests for tabledump and
tableload convenience functions. [#12526]astropy.io.misc ^
np.void. [#12509]astropy.modeling ^
π Fixes error when fitting multiplication or division based compound models where the sub-models have different output units. [#12475]
π Bugfix for incorrectly initialized and filled parameters data for Spline1D model. [#12523]
Bugfix for keyerror thrown by Model.input_units_equivalencies when
used on fix_inputs models which have no set unit equivalencies. [#12597]
astropy.table ^
astropy.table.Table.keep_columns() and
astropy.table.Table.remove_columns() now work with generators of column
names. [#12529]
Avoid duplicate storage of info in serialized columns if the column used to serialize already can hold that information. [#12607]
astropy.timeseries
aggregate_downsample with custom bins. [#12527]astropy.units ^
Structured units can be serialized to/from yaml. [#12492]
Fix bad typing problems by removing interaction with NDArray.__class_getitem__. [#12511]
Ensure that Quantity.to_string(format='latex') properly typesets exponents
also when u.quantity.conf.latex_array_threshold = -1 (i.e., when the threshold
is taken from numpy). [#12573]
Structured units can now be copied with copy.copy and copy.deepcopy
and also pickled and unpicked also for protocol >= 2.
This does not work for big-endian architecture with older numpy<1.21.1. [#12583]
astropy.utils ^
Ensure that a Masked instance can be used to initialize (or viewed
as) a numpy.ma.Maskedarray. [#12482]
Ensure Masked also works with numpy >=1.22, which has a keyword argument
name change for np.quantile. [#12511]
astropy.utils.iers.LeapSeconds.auto_open() no longer emits unnecessary
warnings when astropy.utils.iers.conf.auto_max_age is set to None. [#12713]
astropy.convolution
convolve_fft. [#11495]astropy.coordinates
β Added missing coordinate transformations where the starting and ending frames are the same (i.e., loopback transformations). [#10909]
π Allow negation, multiplication and division also of representations that
include a differential (e.g., SphericalRepresentation with a
SphericalCosLatDifferential). For all operations, the outcome is
equivalent to transforming the representation and differential to cartesian,
then operating on those, and transforming back to the original representation
(except for UnitSphericalRepresentation, which will return a
SphericalRepresentation if there is a scale change). [#11470]
RadialRepresentation.transform can work with a multiplication matrix only.
All other matrices still raise an exception. [#11576]
transform methods are added to BaseDifferential and CartesianDifferential.
All transform methods on Representations now delegate transforming differentials
to the differential objects. [#11654]
β Adds new HADec built-in frame with transformations to/from ICRS and CIRS.
This frame complements AltAz to give observed coordinates (hour angle and declination)
in the ITRS for an equatorially mounted telescope. [#11676]
SkyCoord objects now have a to_table() method, which allows them to be
converted to a QTable. [#11743]
astropy.cosmology
π Cosmologies now store metadata in a mutable parameter meta.
The initialization arguments name and meta are keyword-only. [#11542]
A new unit, redshift, is defined. It is a dimensionless unit to distinguish
redshift quantities from other non-redshift values. For compatibility with
dimensionless quantities the equivalency dimensionless_redshift is added.
This equivalency is enabled by default. [#11786]
β Add equality operator for comparing Cosmology instances. Comparison is done on all immutable fields (this excludes 'meta').
Now the following will work:
.. code-block:: python
>>> from astropy.cosmology import Planck13, Planck18
>>> Planck13 == Planck18
False
>>> Planck18 == Planck18
True [#11813]
β Added read/write methods to Cosmology using the Unified I/O registry.
Now custom file format readers, writers, and format-identifier functions
can be registered to read, write, and identify, respectively, Cosmology
objects. Details are discussed in an addition to the docs. [#11948]
Added to_format/from_format methods to Cosmology using the Unified I/O
registry. Now custom format converters and format-identifier functions
can be registered to transform Cosmology objects.
The transformation between Cosmology and dictionaries is pre-registered.
Details are discussed in an addition to the docs. [#11998]
β Added units module for defining and collecting cosmological units and equivalencies. [#12092]
Flat cosmologies are now set by a mixin class, FlatCosmologyMixin and its
FLRW-specific subclass FlatFLRWMixin. All FlatCosmologyMixin are flat,
but not all flat cosmologies are instances of FlatCosmologyMixin. As
example, LambdaCDM may be flat (for the a specific set of parameter
values), but FlatLambdaCDM will be flat.
Cosmology parameters are now descriptors. When accessed from a class they
transparently stores information, like the units and accepted equivalencies.
On a cosmology instance, the descriptor will return the parameter value.
Parameters can have custom getter methods.
Cosmological equality is refactored to check Parameters (and the name)
A new method, is_equivalent, is added to check Cosmology equivalence, so
a FlatLambdaCDM and flat LambdaCDM are equivalent. [#12136]
Replaced z = np.asarray(z) with z = u.Quantity(z, u.dimensionless_unscaled).value
in Cosmology methods. Input of values with incorrect units raises a UnitConversionError
or TypeError. [#12145]
Cosmology Parameters allow for custom value setters.
Values can be set once, but will error if set a second time.
If not specified, the default setter is used, which will assign units
using the Parameters units and equivalencies (if present).
Alternate setters may be registered with Parameter to be specified by a str,
not a decorator on the Cosmology. [#12190]
Cosmology instance conversion to dict now accepts keyword argument cls to
determine dict type, e.g. OrderedDict. [#12209]
A new equivalency is added between redshift and the Hubble parameter and values
with units of little-h.
This equivalency is also available in the catch-all equivalency with_redshift. [#12211]
A new equivalency is added between redshift and distance -- comoving, lookback,
and luminosity. This equivalency is also available in the catch-all equivalency
with_redshift. [#12212]
Register Astropy Table into Cosmology's to/from_format I/O, allowing
a Cosmology instance to be parsed from or converted to a Table instance.
Also adds the __astropy_table__ method allowing Table(cosmology). [#12213]
The WMAP1 and WMAP3 are accessible as builtin cosmologies. [#12248]
Register Astropy Model into Cosmology's to/from_format I/O, allowing
a Cosmology instance to be parsed from or converted to a Model instance. [#12269]
Register an ECSV reader and writer into Cosmology's I/O, allowing a Cosmology instance to be read from from or written to an ECSV file. [#12321]
astropy.io.ascii ^
β Added new way to specify the dtype for tables that are read: converters
can specify column names with wildcards. [#11892]
β Added a new astropy.io.ascii.Mrt class to write tables in the American
Astronomical Society Machine-Readable Table format,
including documentation and tests for the same. [#11897, #12301, #12302]
π When writing, the input data are no longer copied, improving performance. Metadata that might be changed, such as format and serialization information, is copied, hence users can continue to count on no changes being made to the input data. [#11919]
astropy.io.misc ^
astropy.modeling ^
β Added fittable spline models to modeling. [#11634]
π¨ Extensive refactor of BoundingBox for better usability and maintainability. [#11930]
β Added CompoundBoundingBox feature to ~astropy.modeling, which allows more flexibility in
defining bounding boxes for models that are applied to images with many slices. [#11942]
π Improved parameter support for astropy.modeling.core.custom_model created models. [#11984]
β Added the following trigonometric models and linked them to their appropriate inverse models:
Cosine1D [#12158]Tangent1DArcSine1DArcCosine1DArcTangent1D [#12185]astropy.table ^
β Added a new method Table.update() which does a dictionary-style update of a
Table by adding or replacing columns. [#11904]
π Masked quantities are now fully supported in tables. This includes QTable
automatically converting MaskedColumn instances to MaskedQuantity,
and Table doing the reverse. [#11914]
Added new keyword arguments keys_left and keys_right to the table join
function to support joining tables on key columns with different names. In
addition the new keywords can accept a list of column-like objects which are
used as the match keys. This allows joining on arbitrary data which are not part
of the tables being joined. [#11954]
Formatting of any numerical values in the output of Table.info() and
Column.info() has been improved. [#12022]
It is now possible to add dask arrays as columns in tables and have them remain as dask arrays rather than be converted to Numpy arrays. [#12219]
β Added a new registry for mixin handlers, which can be used to automatically convert array-like Python objects into mixin columns when assigned to a table column. [#12219]
astropy.time ^
earth_rotation_angle to calculate the Local Earth Rotation Angle.
Also adjusts Local Sidereal Time for the Terrestrial Intermediate Origin (TIO)
and adds a rigorous correction for polar motion. The TIO adjustment is approximately
3 microseconds per century from J2000 and the polar motion correction is at most
about +/-50 nanoseconds. For models IAU1982 and IAU1994, no such adjustments are
made as they pre-date the TIO concept. [#11680]astropy.timeseries
aggregate_downsample.
It allows time_bin_start and time_bin_size to be arrays, and adds
an optional time_bin_end.
This scheme mirrors the API for BinnedTimeSeries. [#11266]astropy.units ^
Quantity gains a __class_getitem__ to create unit-aware annotations
with the syntax Quantity[unit or physical_type, shape, numpy.dtype].
If the python version is 3.9+ or typing_extensions is installed,
these are valid static type annotations. [#10662]
Each physical type is added to astropy.units.physical
(e.g., physical.length or physical.electrical_charge_ESU).
The attribute-accessible names (underscored, without parenthesis) also
work with astropy.units.physical.get_physical_type. [#11691]
It is now possible to have quantities based on structured arrays in
which the unit has matching structure, giving each field its own unit,
using units constructed like Unit('AU,AU/day'). [#11775]
The milli- prefix has been added to astropy.units.Angstrom. [#11788]
β Added attributes base, coords, and index and method copy() to
QuantityIterator to match numpy.ndarray.flatiter. [#11796]
β Added "angular frequency" and "angular velocity" as aliases for the "angular speed" physical type. [#11865]
β Add light-second to units of length [#12128]
astropy.utils ^
π The astropy.utils.deprecated_renamed_argument() decorator now supports
custom warning messages. [#12305]
The NaN-aware numpy functions such as np.nansum now work on Masked
arrays, with masked values being treated as NaN, but without raising
warnings or exceptions. [#12454]
astropy.visualization
astropy.wcs ^
astropy.wcs.utils.obsgeo_to_frame has been added to convert the obsgeo coordinate
array on astropy.wcs.WCS objects to an ITRS coordinate frame instance. [#11716]
π Updated bundled WCSLIB to version 7.7 with several bugfixes. [#12034]
astropy.config ^
update_default_config and ConfigurationMissingWarning are deprecated. [#11502]astropy.constants
astropy.constants.set_enabled_constants context manager. [#12105]astropy.coordinates
Positions for the Moon using the 'builtin' ephemeris now use the new
erfa.moon98 function instead of our own implementation of the Meeus
algorithm. As this also corrects a misunderstanding of the frame returned by
the Meeus, this improves the agreement with the JPL ephemeris from about 30 to
about 6 km rms. [#11753]
β Removed deprecated representation attribute from
astropy.coordinates.BaseCoordinateFrame class. [#12257]
SpectralQuantity and SpectralCoord .to_value method can now be called without
unit argument in order to maintain a consistent interface with Quantity.to_value [#12440]
astropy.cosmology
z_at_value now works with arrays for all arguments (except func,
verbose, and method). Consequently, coordinates.Distance.z can
be used when Distance is an array. [#11778]
β Remove deprecation warning and error remapping in Cosmology.clone.
Now unknown arguments will raise a TypeError, not an AttributeError. [#11785]
The read/write and to/from_format Unified I/O registries are separated
and apply only to Cosmology. [#12015]
Cosmology parameters in cosmology.parameters.py now have units,
where applicable. [#12116]
π The function astropy.cosmology.utils.inf_like() is deprecated. [#12175]
The function astropy.cosmology.utils.vectorize_if_needed() is deprecated.
A new function astropy.cosmology.utils.vectorize_redshift_method() is added
as replacement. [#12176]
Cosmology base class constructor now only accepts arguments name and meta.
Subclasses should add relevant arguments and not pass them to the base class. [#12191]
astropy.io ^
astropy raises an OSError because a file it was told to write
already exists, the error message now always suggests the use of the
overwrite=True argument. The wording is now consistent for all I/O formats. [#12179]astropy.io.ascii ^
overwrite=None option for
astropy.io.ascii.ui.write(). Overwriting existing files now only happens if
overwrite=True. [#12171]astropy.io.fits ^
The internal class _CardAccessor is no longer registered as a subclass of the Sequence or Mapping ABCs. [#11923]
π The deprecated clobber argument will be removed from the
astropy.io.fits functions in version 5.1, and the deprecation warnings now
announce that too. [#12311]
astropy.io.registry
The write function now is allowed to return possible content results, which
means that custom writers could, for example, create and return an instance of
some container class rather than a file on disk. [#11916]
π¨ The registry functions are refactored into a class-based system.
New Read-only, write-only, and read/write registries can be created.
All functions accept a new argument registry, which if not specified,
defaults to the global default registry. [#12015]
astropy.io.votable
pedantic keyword argument in the
astropy.io.votable.table.parse function and the corresponding configuration
setting. It has been replaced by the verify option. [#12129]astropy.modeling ^
π¨ Refactored how astropy.modeling.Model handles model evaluation in order to better
organize the code. [#11931]
β Removed the following deprecated modeling features:
astropy.modeling.utils.ExpressionTree class,
astropy.modeling.functional_models.MexicanHat1D model,
astropy.modeling.functional_models.MexicanHat2D model,
astropy.modeling.core.Model.inputs setting in model initialize,
astropy.modeling.core.CompoundModel.inverse setting in model initialize, and
astropy.modeling.core.CompoundModel.both_inverses_exist() method. [#11978]
π Deprecated the AliasDict class in modeling.utils. [#12411]
astropy.nddata ^
block_reduce and block_replicate functions from
nddata.utils. These deprecated functions in nddata.utils were
moved to nddata.blocks. [#12288]astropy.stats ^
β Removed the following deprecated features from astropy.stats:
conf argument for funcs.binom_conf_interval() and
funcs.binned_binom_proportion(),conflevel argument for funcs.poisson_conf_interval(), andconf_lvl argument for jackknife.jackknife_stats(). [#12200]astropy.table ^
π¨ Printing a Table now shows the qualified class name of mixin columns in the
dtype header row instead of "object". This applies to all the Table formatted output
methods whenever show_dtype=True is selected. [#11660]
The 'overwrite' argument has been added to the jsviewer table writer. Overwriting an existing file requires 'overwrite' to be True. [#11853]
The 'overwrite' argument has been added to the pandas table writers. Overwriting an existing file requires 'overwrite' to be True. [#11854]
The table join function now accepts only the first four arguments left,
right, keys, and join_type as positional arguments. All other
arguments must be supplied as keyword arguments. [#11954]
β Adding a dask array to a Table will no longer convert that dask to a Numpy array, so accessing t['dask_column'] will now return a dask array instead of a Numpy array. [#12219]
astropy.time ^
earth_rotation_angle, sidereal_time now accepts
an EarthLocation as the longitude argument. [#11680]astropy.units ^
littleh and equivalency with_H0 have been moved to the
cosmology module and are deprecated from astropy.units. [#12092]astropy.utils ^
astropy.utils.introspection.minversion() now uses
importlib.metadata.version(). Therefore, its version_path keyword is no
longer used and deprecated. This keyword will be removed in a future release. [#11714]
β‘οΈ Updated utils.console.Spinner to better resemble the API of
utils.console.ProgressBar, including an update() method and
iterator support. [#11772]
Removed deprecated check_hashes in check_download_cache(). The function also
no longer returns anything. [#12293]
Removed unused download_cache_lock_attempts configuration item in
astropy.utils.data. Deprecation was not possible. [#12293]
Removed deprecated hexdigest keyword from import_file_to_cache(). [#12293]
π§ Setting remote_timeout configuration item in astropy.utils.data to 0 will
no longer disable download from the Internet; Set allow_internet configuration
item to False instead. [#12293]
astropy.visualization
imshow_only_kwargs keyword from imshow_norm. [#12290]astropy.wcs ^
HighLevelWCSMixin.pixel_to_world and
HighLevelWCSMixin.world_to_pixel into the helper functions
astropy.wcs.wcsapi.high_level_api.high_level_objects_to_values and
astropy.wcs.wcsapi.high_level_api.values_to_high_level_objects to allow
reuse in other places. [#11950]astropy.config ^
generate_config no longer outputs wrong syntax for list type. [#12037]astropy.constants
astropy.convolution
array argument for any Kernel1D or Kernel2D subclasses (with the
exception of CustomKernel) will now raise a TypeError. [#11969]astropy.coordinates
If a Table containing a SkyCoord object as a column is written to a
FITS, ECSV or HDF5 file then any velocity information that might be present
will be retained. [#11750]
The output of SkyCoord.apply_space_motion() now always has the same
differential type as the SkyCoord itself. [#11932]
π Fixed bug where Angle, Latitude and Longitude with NaN values could not be printed. [#11943]
π Fixed a bug with the transformation from PrecessedGeocentric to GCRS
where changes in obstime, obsgeoloc, or obsgeovel were ignored.
This bug would also affect loopback transformations from one PrecessedGeocentric
frame to another PrecessedGeocentric frame. [#12152]
π Fixed a bug with the transformations between TEME and ITRS or between TEME
and itself where a change in obstime was ignored. [#12152]
Avoid unnecessary transforms through CIRS for AltAz and HADec and use ICRS as intermediate frame for these transformations instead. [#12203]
π Fixed a bug where instantiating a representation with a longitude component could mutate input provided for that component even when copying is specified. [#12307]
Wrapping an Angle array will now ignore NaN values instead of attempting to wrap
them, which would produce unexpected warnings/errors when working with coordinates
and representations due to internal broadcasting. [#12317]
astropy.cosmology
astropy.io.fits ^
Prevent zero-byte writes for FITS binary tables to speed up writes on the Lustre filesystem. [#11955]
Enable json.dump for FITS_rec with variable length (VLF) arrays. [#11957]
β Add support for reading and writing int8 images [#11996]
Ensure header passed to astropy.io.fits.CompImageHDU does not need to contain
standard cards that can be automatically generated, such as BITPIX and NAXIS. [#12061]
Fixed a bug where astropy.io.fits.HDUDiff would ignore the ignore_blank_cards
keyword argument. [#12122]
Open uncompressed file even if extension says it's compressed [#12135]
π Fix the computation of the DATASUM in a CompImageHDU when the data is >1D. [#12138]
Reading files where the SIMPLE card is present but with an invalid format now issues a warning instead of raising an exception [#12234]
Convert UNDEFINED to None when iterating over card values. [#12310]
astropy.io.misc ^
β‘οΈ Update ASDF tag versions in ExtensionType subclasses to match ASDF Standard 1.5.0. [#11986]
π Fix ASDF serialization of model inputs and outputs and add relevant assertion to test helper. [#12381]
π Fix bug preventing ASDF serialization of bounding box for models with only one input. [#12385]
astropy.io.votable
astropy.modeling ^
β Added Parameter descriptions to the implemented models which were
missing. [#11232]
The separable property is now correctly set on models constructed with
astropy.modeling.custom_model. [#11744]
π Minor bugfixes and improvements to modeling including the following:
convolution.py and functional_models.py.Ring2D model's init to properly accept all combinations
of r_in, r_out, and width.tau validator for the Logarithmic1D and
Exponential1D models when using them as model sets.copy method for Parameter in order to prevent an
automatic KeyError, and fixed bool for Parameter so
that it functions with vector values.Parameter, the _Tabular model,
and the Drude1D model.Drude1D model so that it functions in a
model set.polynomial.py for handing of
domain and window.Pix2Sky_HEALPixPolar and Sky2Pix_HEALPixPolar modes
so that their evaluate and inverse methods actually work
without raising an error. [#12232]astropy.nddata ^
wcs= argument to NDData is always parsed into a high
level WCS object. [#11985]astropy.stats ^
π Fixed a bug in sigma clipping where the bounds would not be returned for completely empty or masked data. [#11994]
Fixed a bug in biweight_midvariance and biweight_scale where
output data units would be dropped for constant data and where the
result was a scalar NaN. [#12146]
astropy.table ^
Ensured that MaskedColumn.info is propagated in all cases, so that when
tables are sliced, writing will still be as requested on
info.serialize_method. [#11917]
β table.conf.replace_warnings and table.jsviewer.conf.css_urls configuration
items now have correct 'string_list' type. [#12037]
π Fixed an issue where initializing from a list of dict-like rows (Mappings) did
not work unless the row values were instances of dict. Now any object that
is an instance of the more general collections.abc.Mapping will work. [#12417]
astropy.uncertainty
QuantityDistribution unit conversion in ufuncs
works properly again. [#12471]astropy.units ^
β Add quantity support for scipy.special dimensionless functions
erfinv, erfcinv, gammaln and loggamma. [#10934]
VOUnit.to_string output is now compliant with IVOA VOUnits 1.0 standards. [#11565]
Units initialization with unicode has been expanded to include strings such as 'Mβ' and 'eβ'. [#11827]
π Give a more informative NotImplementedError when trying to parse a unit
using an output-only format such as 'unicode' or 'latex'. [#11829]
astropy.utils ^
Fixed a bug in get_readable_fileobj that prevented the unified file read
interface from closing ASCII files. [#11809]
π The function astropy.utils.decorators.deprecated_attribute() no longer
ignores its message, alternative, and pending arguments. [#12184]
Ensure that when taking the minimum or maximum of a Masked array,
any masked NaN values are ignored. [#12454]
astropy.visualization
π The tick labelling for radians has been fixed to remove a redundant .0 in
the label for integer multiples of pi at 2pi and above. [#12221]
π Fix a bug where non-astropy.wcs.WCS WCS instances were not accepted in
WCSAxes.get_transform. [#12286]
π Fix compatibility with Matplotlib 3.5 when using the grid_type='contours'
mode for drawing grid lines. [#12447]
astropy.wcs ^
SlicedLowLevelWCS.pixel_to_world_values to handle slices including
non-int integers, e.g. numpy.int64. [#11980]π In docstrings, Sphinx cross-reference targets now use intersphinx, even if the
target is an internal link (link is now 'astropy:link).
When built in Astropy these links are interpreted as internal links. When built
in affiliate packages, the link target is set by the key 'astropy' in the
intersphinx mapping. [#11690]
Made PyYaml >= 3.13 a strict runtime dependency. [#11903]
Minimum version of required Python is now 3.8. [#11934]
Minimum version of required Scipy is now 1.3. [#11934]
Minimum version of required Matplotlib is now 3.1. [#11934]
Minimum version of required Numpy is now 1.18. [#11935]
π Fix deprecation warnings with Python 3.10 [#11962]
π Speed up minversion() in cases where a module with a __version__
attribute is passed. [#12174]
astropy now requires packaging. [#12199]
β‘οΈ Updated the bundled CFITSIO library to 4.0.0. When compiling with an external library, version 3.35 or later is required. [#12272]
astropy.io.fits ^
In fits.io.getdata do not fall back to first non-primary extension when
user explicitly specifies an extension. [#11860]
Ensure multidimensional masked columns round-trip properly to FITS. [#11911]
Ensure masked times round-trip to FITS, even if multi-dimensional. [#11913]
Raise ValueError if an np.float32 NaN/Inf value is assigned to a
header keyword. [#11922]
astropy.modeling ^
fix_inputs handling of bounding boxes. [#11908]astropy.table ^
Table subclass that
automatically adds a table index when the table is created. An example is a
binned TimeSeries table. [#12018]astropy.units ^
Ensure that unpickling quantities and units in new sessions does not change
hashes and thus cause problems with (de)composition such as getting different
answers from the .si attribute. [#11879]
π Fixed cannot import name imperial from astropy.units namespace. [#11977]
astropy.utils ^
.info on Masked instances is propagated correctly when
viewing or slicing. As a consequence, MaskedQuantity can now be correctly
written to, e.g., ECSV format with serialize_method='data_mask'. [#11910]astropy.convolution
fft_pad in convolve_fft from powers of
2 only to scipy-optimized numbers, applied separately to each dimension;
yielding some performance gains and avoiding potential large memory
impact for certain multi-dimensional inputs. [#11533]astropy.coordinates
β Adds the ability to create topocentric CIRS frames. Using these,
AltAz calculations are now accurate down to the milli-arcsecond
level. [#10994]
β Adds a direct transformation from ICRS to AltAz frames. This
provides a modest speedup of approximately 10 percent. [#11079]
β Adds new WGS84GeodeticRepresentation, WGS72GeodeticRepresentation,
and GRS80GeodeticRepresentation. These are mostly for use inside
EarthLocation but can also be used to convert between geocentric
(cartesian) and different geodetic representations directly. [#11086]
SkyCoord.guess_from_table now also searches for differentials in the table.
In addition, multiple regex matches can be resolved when they are exact
component names, e.g. having both columns "dec" and "pm_dec" no longer errors
and will be included in the SkyCoord. [#11417]
All representations now have a transform method, which allows them to be
transformed by a 3x3 matrix in a Cartesian basis. By default, transformations
are routed through CartesianRepresentation. SphericalRepresentation and
PhysicssphericalRepresentation override this for speed and to prevent NaN
leakage from the distance to the angular components.
Also, the functions is_O3 and is_rotation have been added to
matrix_utities for checking whether a matrix is in the O(3) group or is a
rotation (proper or improper), respectively. [#11444]
π Moved angle formatting and parsing utilities to
astropy.coordinates.angle_formats.
Added new functionality to astropy.coordinates.angle_utilities for
generating points on or in spherical surfaces, either randomly or on a grid. [#11628]
Added a new method to SkyCoord, spherical_offsets_by(), which is the
conceptual inverse of spherical_offsets_to(): Given angular offsets in
longitude and latitude, this method returns a new coordinate with the offsets
applied. [#11635]
π¨ Refactor conversions between GCRS and CIRS,TETE for better accuracy
and substantially improved speed. [#11069]
π Also refactor EarthLocation.get_gcrs for an increase in performance of
an order of magnitude, which enters as well in getting observed positions of
planets using get_body. [#11073]
π¨ Refactored the usage of metaclasses in astropy.coordinates to instead use
__init_subclass__ where possible. [#11090]
Removed duplicate calls to transform_to from match_to_catalog_sky
and match_to_catalog_3d, improving their performance. [#11449]
The new DE440 and DE440s ephemerides are now available via shortcuts 'de440' and 'de440s'. The DE 440s ephemeris will probably become the default ephemeris when chosing 'jpl' in 5.0. [#11601]
astropy.cosmology
astropy.cosmology.parameters.Planck18 has the added key-value pair
("cosmology", "FlatLambdaCDM"). [#11530]astropy.io.ascii ^
β Added support for reading and writing ASCII tables in QDP (Quick and Dandy Plotter) format. [#11256]
β Added support for reading and writing multidimensional column data (masked and unmasked) to ECSV. Also added formal support for reading and writing object-type column data which can contain items consisting of lists, dicts, and basic scalar types. This can be used to store columns of variable-length arrays. Both of these features use JSON to convert the object to a string that is stored in the ECSV output. [#11569, #11662, #11720]
astropy.io.fits ^
β Added append keyword to append table objects to an existing FITS file [#2632, #11149]
Check that the SIMPLE card is present when opening a file, to ensure that the
file is a valid FITS file and raise a better error when opening a non FITS
one. ignore_missing_simple can be used to skip this verification. [#10895]
π¦ Expose Header.strip as a public method, to remove the most common
structural keywords. [#11174]
Enable the use of os.PathLike objects when dealing with (mainly FITS) files. [#11580]
astropy.io.registry
astropy.io.votable
π Version 1.4 VOTables now use the VOUnit format specification. [#11032]
When reading VOTables using the Unified File Read/Write Interface (i.e. using
the Table.read() or QTable.read() functions) it is now possible to
specify all keyword arguments that are valid for
astropy.io.votable.table.parse(). [#11643]
astropy.modeling ^
β Added a state attribute to models to allow preventing the synching of constraint values from the constituent models. This synching can greatly slow down fitting if there are large numbers of fit parameters. model.sync_constraints = True means check constituent model constraints for compound models every time the constraint is accessed, False, do not. Fitters that support constraints will set this to False on the model copy and then set back to True when the fit is complete before returning. [#11365]
The convolve_models_fft function implements model convolution so that one
insures that the convolution remains consistent across multiple different
inputs. [#11456]
astropy.nddata ^
Prevent unnecessary copies of the data during NDData arithmetic when units
need to be added. [#11107]
NDData str representations now show units, if present. [#11553]
astropy.stats ^
β Added the ability to specify stdfunc='mad_std' when doing sigma clipping, which will use a built-in function and lead to significant performance improvements if cenfunc is 'mean' or 'median'. [#11664]
π Significantly improved the performance of sigma clipping when cenfunc and
stdfunc are passed as strings and the grow option is not used. [#11219]
π Improved performance of bayesian_blocks() by removing one np.log()
call [#11356]
astropy.table ^
β Add table attributes to include or exclude columns from the output when printing a table. This functionality includes a context manager to include/exclude columns temporarily. [#11190]
π Improved the string representation of objects related to Table.indices so
they now indicate the object type and relevant attributes. [#11333]
astropy.timeseries
n_bins is passed as an argument while
any of the parameters time_bin_start or time_bin_size is not
scalar. [#11463]astropy.units ^
The physical_type attributes of each unit are now objects of the (new)
astropy.units.physical.PhysicalType class instead of strings and the
function astropy.units.physical.get_physical_type can now translate
strings to these objects. [#11204]
The function astropy.units.physical.def_physical_type was created to
either define entirely new physical types, or to add more physical type
names to an existing physical types. [#11204]
PhysicalType's can be operated on using operations multiplication,
division, and exponentiation are to facilitate dimensional analysis. [#11204]
It is now possible to define aliases for units using
astropy.units.set_enabled_aliases. This can be used when reading files
that have misspelled units. [#11258]
β Add a new "DN" unit, units.dn or units.DN, representing data number
for a detector. [#11591]
astropy.utils ^
Added ssl_context and allow_insecure options to download_file,
as well as the ability to optionally use the certifi package to provide
root CA certificates when downloading from sites secured with
TLS/SSL. [#10434]
astropy.utils.data.get_pkg_data_path is publicly scoped (previously the
private function _find_pkg_data_path) for obtaining file paths without
checking if the file/directory exists, as long as the package and module
do. [#11006]
π Deprecated astropy.utils.OrderedDescriptor and
astropy.utils.OrderedDescriptorContainer, as new features in Python 3
make their use less compelling. [#11094, #11099]
astropy.utils.masked provides a new Masked class/factory that can be
used to represent masked ndarray and all its subclasses, including
Quantity and its subclasses. These classes can be used inside
coordinates, but the mask is not yet exposed. Generally, the interface should
be considered experimental. [#11127, #11792]
β Add new utils.parsing module to with helper wrappers around
ply. [#11227]
π Change the Time and IERS leap second handling so that the leap second table is
updated only when a Time transform involving UTC is performed. Previously this
update check was done the first time a Time object was created, which in
practice occured when importing common astropy subpackages like
astropy.coordinates. Now you can prevent querying internet resources (for
instance on a cluster) by setting iers.conf.auto_download = False. This
can be done after importing astropy but prior to performing any Time
scale transformations related to UTC. [#11638]
β Added a new module at astropy.utils.compat.optional_deps to consolidate
the definition of HAS_x optional dependency flag variables,
like HAS_SCIPY. [#11490]
astropy.wcs ^
β Add IVOA UCD mappings for some FITS WCS keywords commonly used in solar physics. [#10965]
β Add STOKES FITS WCS keyword to the IVOA UCD mapping. [#11236]
β‘οΈ Updated bundled version of WCSLIB to version 7.6. See https://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES for a list of included changes. [#11549]
astropy.coordinates
For input to representations, subclasses of the class required for a given attribute will now be allowed in. [#11113]
Except for UnitSphericalRepresentation, shortcuts in representations now
allow for attached differentials. [#11467]
π Allow coordinate name strings as input to
SkyCoord.is_transformable_to. [#11552]
astropy.cosmology
Change z_at_value to use scipy.optimize.minimize_scalar with default
method Brent (other options Bounded and Golden) and accept
bracket option to set initial search region. [#11080]
Clarified definition of inputs to angular_diameter_distance_z1z2.
The function now emits AstropyUserWarning when z2 is less than
z1. [#11197]
Split cosmology realizations from core classes, moving the former to new file
realizations. [#11345]
Since cosmologies are immutable, the initialization signature and values can be stored, greatly simplifying cloning logic and extending it to user-defined cosmology classes that do not have attributes with the same name as each initialization argument. [#11515]
Cloning a cosmology with changed parameter(s) now appends "(modified)" to the
new instance's name, unless a name is explicitly passed to clone. [#11536]
π Allow m_nu to be input as any quantity-like or array-like -- Quantity,
array, float, str, etc. Input is passed to the Quantity constructor and
converted to eV, still with the prior mass-energy equivalence
enabled. [#11640]
astropy.io.fits ^
Table, the standard mask
values of NaN for float and null string for string are now properly
recognized, leading to a MaskedColumn with appropriately set mask
instead of a Column with those values exposed. Conversely, when writing
an astropy Table to a FITS tables, masked values are now consistently
converted to the standard FITS mask values of NaN for float and null
string for string (i.e., not just for tables with masked=True, which no
longer is guaranteed to signal the presence of MaskedColumn). [#11222]astropy.io.votable
version='1.0' is now fully deprecated in constructing
a astropy.io.votable.tree.VOTableFile. [#11659]astropy.modeling ^
astropy.modeling.blackbody module. [#10972]astropy.table ^
β Added Column.value as an alias for the existing Column.data attribute.
This makes accessing a column's underlying data array consistent with the
.value attribute available for Time and Quantity objects. [#10962]
In reading from a FITS tables, the standard mask values of NaN for float
and null string for string are properly recognized, leading to a
MaskedColumn with appropriately set mask. [#11222]
π Changed the implementation of the table.index.Index class so instantiating
from this class now returns an Index object as expected instead of a
SlicedIndex object. [#11333]
astropy.units ^
The physical_type attribute of units now returns an instance of
astropy.units.physical.PhysicalType instead of a string. Because
PhysicalType instances can be compared to strings, no code changes
should be necessary when making comparisons. The string representations
of different physical types will differ from previous releases. [#11204]
Calling Unit() with no argument now returns a dimensionless unit,
as was documented but not implemented. [#11295]
astropy.utils ^
β Removed deprecated utils.misc.InheritDocstrings and utils.timer. [#10281]
β Removed usage of deprecated ipython stream in utils.console. [#10942]
astropy.wcs ^
accuracy argument in all_world2pix which was mistakenly
documented, in the case accuracy was ever used. [#11055]astropy.convolution
convolve_fft documentation examples. [#11510]astropy.coordinates
π Allow Distance instances with negative distance values as input for
SphericalRepresentation. This was always noted as allowed in an
exception message when a negative Quantity with length units was
passed in, but was not actually possible to do. [#11113]
π Makes the Angle.to_string method to follow the format described in the
docstring with up to 8 significant decimals instead of 4. [#11153]
Ensure that proper motions can be calculated when converting a SkyCoord
with cartesian representation to unit-spherical, by fixing the conversion of
CartesianDifferential to UnitSphericalDifferential. [#11469]
When re-representing coordinates from spherical to unit-spherical and vice versa, the type of differential will now be preserved. For instance, if only a radial velocity was present, that will remain the case (previously, a zero proper motion component was added). [#11482]
β Ensure that wrapping of Angle does not raise a warning even if nan are
present. Also try to make sure that the result is within the wrapped range
even in the presence of rounding errors. [#11568]
Comparing a non-SkyCoord object to a SkyCoord using == no longer
raises an error. [#11666]
Different SkyOffsetFrame classes no longer interfere with each other,
causing difficult to debug problems with the origin attribute. The
origin attribute now no longer is propagated, so while it remains
available on a SkyCoord that is an offset, it no longer is available once
that coordinate is transformed to another frame. [#11730] [#11730]
astropy.cosmology
astropy.io.ascii ^
π Fixed bug where writing a table that has comments defined (via
tbl.meta['comments']) with the 'csv' format was failing. Since the
formally defined CSV format does not support comments, the comments are now
just ignored unless comment=<comment prefix> is supplied to the
write() call. [#11475]
π Fixed the issue where the CDS reader failed to treat columns as nullable if the ReadMe file contains a limits specifier. [#11531]
Made sure that the CDS reader does not ignore an order specifier that may be present after the null specifier '?'. Also made sure that it checks null values only when an '=' symbol is present and reads description text even if there is no whitespace after '?'. [#11593]
astropy.io.fits ^
Fix ColDefs.add_col/del_col to allow in-place addition or removal of
a column. [#11338]
π Fix indexing of fits.Header with Numpy integers. [#11387]
0οΈβ£ Do not delete EXTNAME for compressed image header if a default and
non-default EXTNAME are present. [#11396]
β Prevent warnings about HIERARCH with CompImageHeader class. [#11404]
π Fixed regression introduced in Astropy 4.0.5 and 4.2.1 with verification of FITS headers with HISTORY or COMMENT cards with long (> 72 characters) values. [#11487]
π Fix reading variable-length arrays when there is a gap between the data and the heap. [#11688]
astropy.io.votable
NumericArray converter now properly broadcasts scalar mask to array. [#11157]
VOTables are now written with the correct namespace and schema location attributes. [#11659]
astropy.modeling ^
π Fixes the improper propagation of bounding_box from
astropy.modeling.models to their inverses. For cases in which the inverses
bounding_box can be determined, the proper calculation has been
implemented. [#11414]
π Bugfix to allow rotation models to accept arbitrarily-shaped inputs. [#11435]
π Bugfixes for astropy.modeling to allow fix_inputs to accept empty
dictionaries and dictionaries with numpy integer keys. [#11443]
π Bugfix for how SPECIAL_OPERATORS are handled. [#11512]
π Fixes Model crashes when some inputs are scalars and during some types of
output reshaping. [#11548]
π Fixed bug in LevMarLSQFitter when using weights and vector inputs. [#11603]
astropy.stats ^
copy=False option when carrying out sigma
clipping - previously if masked=False this still copied the data,
but this will now change the array in-place. [#11219]astropy.table ^
Ensure that adding a Quantity or other mixin column to a Table
does not have side effects, such as creating an associated info
instance (which would lead to slow-down of, e.g., slicing afterwards). [#11077]
When writing to a FITS tables, masked values are again always converted to
the standard FITS mask values of NaN for float and null string
for string, not just for table with masked=True. [#11222]
Using Table.to_pandas() on an indexed Table with masked integer values
now correctly construct the pandas.DataFrame. [#11432]
π Fixed Table HTML representation in Jupyter notebooks so that it is
horizontally scrollable within Visual Studio Code. This was done by wrapping
the <table> in a <div> element. [#11476]
π Fix a bug where a string-valued Column that happened to have a unit
attribute could not be added to a QTable. Such columns are now simply
kept as Column instances (with a warning). [#11585]
π Fix an issue in Table.to_pandas(index=<colname>) where the index column name
was not being set properly for the DataFrame index. This was introduced by
an API change in pandas version 1.3.0. Previously when creating a DataFrame
with the index set to an astropy Column, the DataFrame index name was
automatically set to the column name. [#11921]
astropy.time ^
π Fix a thread-safety issue with initialization of the leap-second table (which is only an issue when ERFA's built-in table is out of date). [#11234]
π Fixed converting a zero-length time object from UTC to UT1 when an empty array is passed. [#11516]
astropy.uncertainty
Distribution instances can now be used as input to Quantity to
initialize QuantityDistribution. Hence, distribution * unit
and distribution << unit will work too. [#11210]astropy.units ^
π Move non-astronomy units from astrophys.py to a new misc.py file. [#11142]
The physical type of astropy.units.mol / astropy.units.m ** 3 is now
defined as molar concentration. It was previously incorrectly defined
as molar volume. [#11204]
π Make ufunc helper lookup thread-safe. [#11226]
π Make Unit string parsing (as well as Angle parsing) thread-safe. [#11227]
Decorator astropy.units.decorators.quantity_input now only evaluates
return type annotations based on UnitBase or FunctionUnitBase types.
Other annotations are skipped over and are not attempted to convert to the
correct type. [#11506]
astropy.utils ^
lazyproperty and classdecorator thread-safe. This should fix a
number of thread safety issues. [#11224]astropy.visualization
π Fixed a bug that resulted in some parts of grid lines being visible when they should have been hidden. [#11380]
π Fixed a bug that resulted in time_support() failing for intervals of
a few months if one of the ticks was the month December. [#11615]
astropy.wcs ^
fit_wcs_from_points now produces a WCS with integer NAXIXn
values. [#10865]
β‘οΈ Updated bundled version of WCSLIB to v7.4, fixing a bug that caused
the coefficients of the TPD distortion function to not be written to the
header. [#11260]
π Fixed a bug in assigning type when converting colsel to
numpy.ndarray. [#11431]
β Added WCSCOMPARE_* constants to the list of WCSLIB constants
available/exposed through the astropy.wcs module. [#11647]
π Fix a bug that caused APE 14 WCS transformations for FITS WCS with ZOPT, BETA, VELO, VOPT, or VRAD CTYPE to not work correctly. [#11781]
π§ The configuration file is no longer created by default when importing astropy
and its existence is no longer required. Affiliated packages should update their
__init__.py module to remove the block using update_default_config and
ConfigurationDefaultMissingWarning. [#10877]
π Replace pkg_resources (from setuptools) with importlib.metadata which
comes from the stdlib, except for Python 3.7 where the backport package is added
as a new dependency. [#11091]
Turn on numpydoc's numpydoc_xref_param_type to create cross-references
for the parameter types in the Parameters, Other Parameters, Returns and Yields
sections of the docstrings. [#11118]
π Docstrings across the package are standardized to enable references.
Also added is an Astropy glossary-of-terms to define standard inputs,
e.g. quantity-like indicates an input that can be interpreted by
astropy.units.Quantity. [#11118]
π§ Binary wheels are now built to the manylinux2010 specification. These wheels should be supported on all versions of pip shipped with Python 3.7+. [#11377]
0οΈβ£ The name of the default branch for the astropy git repository has been renamed
to main, and the documentation and tooling has been updated accordingly.
If you have made a local clone you may wish to update it following the
instructions in the repository's README. [#11379]
Sphinx cross-reference link targets are added for every PhysicalType.
Now in the parameter types in the Parameters, Other Parameters, Returns and
Yields sections of the docstring, the physical type of a quantity can be
annotated in square brackets.
E.g. distance : `~astropy.units.Quantity` ['length'] [#11595]
π The minimum supported version of ipython is now 4.2. [#10942]
π The minimum supported version of pyerfa is now 1.7.3. [#11637]
astropy.cosmology
astropy.io.fits ^
astropy.io.votable
NumericArray converter now properly broadcasts scalar mask to array.
[#11157]astropy.table ^
Table subclass that uses TableAttribute's.
If the data were an instance of the table then attributes provided in the
table initialization call could be ignored. [#11217]astropy.time ^
TimeUnixTAI ("unix_tai") from 1970εΉ΄01ζ01ζ₯T00:00:00 UTC
to 1970εΉ΄01ζ01ζ₯T00:00:00 TAI to match the intended and documented behaviour.
This essentially changes the resulting times by 8.000082 seconds, the initial
offset between TAI and UTC. [#11249]astropy.units ^
quantity_input decorator where allowing
dimensionless inputs for an argument inadvertently disabled any checking of
compatible units for that argument. [#11283]astropy.utils ^
np.shape, np.ndim and np.size again work on
classes that use ShapedLikeNDArray, like representations, frames,
sky coordinates, and times. [#11133]astropy.wcs ^
proj_point parameter is passed to fit_wcs_from_points. [#11139]TimeUnixTAI ("unix_tai") from 1970εΉ΄01ζ01ζ₯T00:00:00 UTC
to 1970εΉ΄01ζ01ζ₯T00:00:00 TAI to match the intended and documented behaviour.
This essentially changes the resulting times by 8.000082 seconds, the initial
offset between TAI and UTC. [#11249]astropy.convolution
convolve and convolve_fft both now return Quantity arrays
if user input is given in one. [#10822]astropy.coordinates
Numpy functions that broadcast, change shape, or index (like
np.broadcast_to, np.rot90, or np.roll) now work on
coordinates, frames, and representations. [#10337]
Add a new science state astropy.coordinates.erfa_astrom.erfa_astrom and
two classes ErfaAstrom, ErfaAstromInterpolator as wrappers to
the pyerfa astrometric functions used in the coordinate transforms.
Using ErfaAstromInterpolator, which interpolates astrometric properties for
SkyCoord instances with arrays of obstime, can dramatically speed up
coordinate transformations while keeping microarcsecond resolution.
Depending on needed precision and the obstime array in question, speed ups
reach factors of 10x to >100x. [#10647]
galactocentric_frame_defaults can now also be used as a registry, with
user-defined parameter values and metadata. [#10624]
Method .realize_frame from coordinate frames now accepts **kwargs,
including representation_type. [#10727]
Avoid an unnecessary call to erfa.epv00 in transformations between
CIRS and ICRS, improving performance by 50 %. [#10814]
A new equatorial coordinate frame, with RA and Dec measured w.r.t to the True Equator and Equinox (TETE). This frame is commonly known as "apparent place" and is the correct frame for coordinates returned from JPL Horizons. [#10867]
Added a context manager impose_finite_difference_dt to the
TransformGraph class to override the finite-difference time step
attribute (finite_difference_dt) for all transformations in the graph
with that attribute. [#10341]
π Improve performance of SpectralCoord by refactoring internal
implementation. [#10398]
astropy.cosmology
Planck18 object, which is now the default cosmology. The
parameters are identical to those of the Planck18_arXiv_v2 object,
which is now deprecated and will be removed in a future release. [#10915]astropy.modeling ^
β Added NFW profile and tests to modeling package [#10505]
β Added missing logic for evaluate to compound models [#10002]
Stop iteration in FittingWithOutlierRemoval before reaching niter if
the masked points are no longer changing. [#10642]
Keep a (shallow) copy of fit_info from the last iteration of the wrapped
fitter in FittingWithOutlierRemoval and also record the actual number of
iterations performed in it. [#10642]
β Added attributes for fitting uncertainties (covariance matrix, standard
deviations) to models. Parameter covariance matrix can be accessed via
model.cov_matrix, standard deviations by model.stds or individually
for each parameter by parameter.std. Currently implemented for
LinearLSQFitter and LevMarLSQFitter. [#10552]
N-dimensional least-squares statistic and specific 1,2,3-D methods [#10670]
astropy.stats ^
circstd function to obtain a circular standard deviation. [#10690]astropy.table ^
Table using a list of names in conjunction with
a dtype from a numpy structured array. The list of names overrides the
names specified in the dtype. [#10419]astropy.time ^
β Add new isclose() method to Time and TimeDelta classes to allow
comparison of time objects to within a specified tolerance. [#10646]
π Improve initialization time by a factor of four when creating a scalar Time
object in a format like unix or cxcsec (time delta from a reference
epoch time). [#10406]
π Improve initialization time by a factor of ~25 or more for large arrays of string times in ISO, ISOT or year day-of-year formats. This is done with a new C-based time parser that can be adapted for other fixed-format custom time formats. [#10360]
Numpy functions that broadcast, change shape, or index (like
np.broadcast_to, np.rot90, or np.roll) now work on times.
[#10337, #10502]
astropy.timeseries
TimeSeries object. Previously this involved O(N2) operations
and memory. [#10889]astropy.units ^
Quantity.to has gained a copy option to allow copies to be avoided
when the units do not change. [#10517]
β Added the spat unit of solid angle that represents the full sphere.
[#10726]
astropy.utils ^
ShapedLikeNDArray has gained the capability to use numpy functions
that broadcast, change shape, or index. [#10337]
π get_free_space_in_dir now takes a new unit keyword and
check_free_space_in_dir takes size defined as Quantity. [#10627]
π New astropy.utils.data.conf.allow_internet configuration item to
control downloading data from the Internet. Setting allow_internet=False
is the same as remote_timeout=0. Using remote_timeout=0 to control
internet access will stop working in a future release. [#10632]
π New is_url function so downstream packages do not have to secretly use
the hidden _is_url anymore. [#10684]
astropy.visualization
β Added the Quadrangle patch for WCSAxes for a latitude-longitude
quadrangle. Unlike matplotlib.patches.Rectangle, the edges of this
patch will be rendered as curved lines if appropriate for the WCS
transformation. [#10862]
The position of tick labels are now only calculated when needed. If any text parameters are changed (color, font weight, size etc.) that don't effect the tick label position, the positions are not recomputed, improving performance. [#10806]
astropy.wcs ^
WCS.to_header() now appends comments to SIP coefficients. [#10480]
A new property dropped_world_dimensions has been added to
SlicedLowLevelWCS to record information about any world axes removed by
slicing a WCS. [#10195]
New WCS.proj_plane_pixel_scales() and WCS.proj_plane_pixel_area()
methods to return pixel scales and area, respectively, as Quantity. [#10872]
astropy.config ^
set_temp_config now preserves the existing cache rather than deleting
it and relying on reloading it from the previous config file. This ensures
that any programmatically made changes are preserved as well. [#10474]
π§ Configuration path detection logic has changed: Now, it looks for ~ first
before falling back to older logic. In addition, HOMESHARE is no longer
used in Windows. [#10705]
astropy.coordinates
transform_to() methods of low-level coordinate-frame classes has been
deprecated. Frame classes can still be passed to the transform_to()
method of the high-level SkyCoord class, and using SkyCoord is
recommended for all typical use cases of transforming coordinates. [#10475]astropy.stats ^
β Added a grow parameter to SigmaClip, sigma_clip and
sigma_clipped_stats, to allow expanding the masking of each deviant
value to its neighbours within a specified radius. [#10613]
Passing float n to poisson_conf_interval when using
interval='kraft-burrows-nousek' now raises TypeError as its value
must be an integer. [#10838]
astropy.table ^
π Change Table.columns.keys() and Table.columns.values() to both return
generators instead of a list. This matches the behavior for Python dict
objects. [#10543]
β Removed the FastBST and FastRBT indexing engines because they depend
on the bintrees package, which is no longer maintained and is deprecated.
Instead, use the SCEngine indexing engine, which is similar in
performance and relies on the sortedcontainers package. [#10622]
When slicing a mixin column in a table that had indices, the indices are no
longer copied since they generally are not useful, having the wrong shape.
With this, the behaviour becomes the same as that for a regular Column.
(Note that this does not affect slicing of a table; sliced columns in those
will continue to carry a sliced version of any indices). [#10890]
π Change behavior so that when getting a single item out of a mixin column such
as Time, TimeDelta, SkyCoord or Quantity, the info
attribute is no longer copied. This improves performance, especially when the
object is an indexed column in a Table. [#10889]
Raise a TypeError when a scalar column is added to an unsized table. [#10476]
The order of columns when creating a table from a list of dict may be
changed. Previously, the order was alphabetical because the dict keys
were assumed to be in random order. Since Python 3.7, the keys are always in
order of insertion, so Table now uses the order of keys in the first row
to set the column order. To alphabetize the columns to match the previous
behavior, use t = t[sorted(t.colnames)]. [#10900]
astropy.time ^
Time and TimeDelta classes to inherit from a common
TimeBase class. The TimeDelta class no longer inherits from Time.
A number of methods that only apply to Time (e.g. light_travel_time)
are no longer available in the TimeDelta class. [#10656]astropy.units ^
bar unit is no longer wrongly considered an SI unit, meaning that
SI decompositions like (u.kg*u.s**-2* u.sr**-1 * u.nm**-1).si will
no longer include it. [#10586]astropy.utils ^
Shape-related items from astropy.utils.misc -- ShapedLikeNDArray,
check_broadcast, unbroadcast, and IncompatibleShapeError --
have been moved to their own module, astropy.utils.shapes. They remain
importable from astropy.utils. [#10337]
check_hashes keyword in check_download_cache is deprecated and will
be removed in a future release. [#10628]
hexdigest keyword in import_file_to_cache is deprecated and will
be removed in a future release. [#10628]
astropy.config ^
generate_config when used with other packages.
[#10893]astropy.coordinates
CoordinateAttribute where
the internal transformation could behave differently depending on whether
the input was a low-level coordinate frame or a high-level SkyCoord.
CoordinateAttribute now always performs a SkyCoord-style internal
transformation, including the by-default merging of frame attributes. [#10475]astropy.modeling ^
Model.render when the input out datatype is not
float64. [#10542]astropy.visualization
astropy.wcs ^
astropy.wcs.fit_wcs_from_points were
treating longitude and latitude distances equally. Now longitude scaled
properly. [#10759]Minimum version of required Python is now 3.7. [#10900]
Minimum version of required Numpy is now 1.17. [#10664]
Minimum version of required Scipy is now 1.1. [#10900]
Minimum version of required PyYAML is now 3.13. [#10900]
Minimum version of required Matplotlib is now 3.0. [#10900]
π¦ The private _erfa module has been converted to its own package,
pyerfa, which is a required dependency for astropy, and can be imported
with import erfa. Importing _erfa from astropy will give a
deprecation warning. [#10329]
β Added optimize=True flag to calls of yacc.yacc (as already done for
lex.lex) to allow running in python -OO session without raising an
exception in astropy.units.format. [#10379]
Shortened FITS comment strings for some D2IM and CPDIS FITS keywords to
reduce the number of FITS VerifyWarning warnings when working with WCSes
containing lookup table distortions. [#10513]
π When importing astropy without first building the extension modules first, raise an error directly instead of trying to auto-build. [#10883]