Full Changelog#
Version 6.0.dev728+g0c73d13 (2023-09-26)#
New Features#
astropy.coordinates#
Support has been added to create geodetic representations not just for existing ellipsoids from ERFA, but also with explicitly provided values, by defining a subclass of
BaseGeodeticRepresentation
with the equatorial radius and flattening assigned to_equatorial_radius
and_flattening
attributes. [#14763]Add
BaseBodycentricRepresentation
, a new spheroidal representation for bodycentric latitudes and longitudes. [#14851]
astropy.cosmology#
Added a
write_latex()
method for exporting a Cosmology object to a LaTex table. [#14701]Added argument
rename
to Cosmology’s I/O, allowing for input and output symbols to be renamed. [#14780]All non-abstract Cosmology subclasses are now automatically registered to work with Astropy’s YAML serialization. [#14979]
Cosmology I/O now auto-identifies the ‘.tex’ suffix with the ‘ascii.latex’ format. [#15088]
astropy.table#
The new
Row.get()
method, analogous todict.get()
, returns the value of the specified column from the row if the column present, otherwise it returns a fallback value, which by default isNone
. [#14878]
astropy.uncertainty#
Uncertainty
Distribution
now support structured data types, and as a result it now works also withEarthLocation
. [#15304]
astropy.units#
Add support for gc2gde and gd2gce erfa functions to allow geodetic representations using equatorial radius and flattening. [#14729]
astropy.utils#
The
astropy.utils.metadata.MetaData
default dictionary can now be set with thedefault_factory
keyword argument. [#15265]astropy.utils.decorators.deprecated
now adds the__deprecated__
attribute to the objects it wraps, following the practice in https://peps.python.org/pep-0702/. [#15310]
astropy.visualization#
Add
WCSAxes.text_coord
method to print text usingSkyCoord
objects parallel to plotting data points withWCSAxes.plot_coord
. [#14661]
astropy.wcs#
Support WCS descriptions of basic planetary coordinate frames. [#14820]
Updated bundled WCSLIB version to 8.1. This update adds support planetary keywords
A_RADIUS
,B_RADIUS
,C_RADIUS
,BLON_OBS
,BLAT_OBS
, andBDIS_OBS
inauxprm
and addswcsprm::time
to thewcsprm
struct to record theTIME
axis. This update also includes several bug fixes. For a full list of changes - see http://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES [#15035]
API Changes#
astropy.convolution#
Invalid kernel arithmetic operations now raise a
KernelArithmeticError
instead of a bareException
. [#14728]Added base
KernelError
error class and removedDiscretizationError
error class (aValueError
will be raised instead). [#14732]discretize_model
will now raise aValueError
ifmode='oversample'
andfactor
does not have an integer value. [#14794]
astropy.coordinates#
Removed deprecated angle parsing and formatting utilities from
angle_utilities
. Use the functions fromangle_formats
instead. [#14675]The deprecated functionality of initializing
Angle
orLongitude
from atuple
is no longer supported. [#15205]Angle-related classes and functions have been moved within
astropy.coordinates
. There is no change to public API as everything moved should still be imported fromastropy.coordinates
, not a sub-module. If you are using private API, try importing fromastropy.coordinates
instead. If you need something that has been moved and is not available inastropy.coordinates
, please open an issue on the Astropy issue tracker. [#15220]
astropy.cosmology#
Removed support of importing private constants and functions from
astropy.cosmology.flrw
. [#14672]Removed deprecated Cosmology Parameter argument
fmt
. [#14673]Removed deprecated
vectorize_if_needed
andinf_like
fromcosmology.utils
. [#14677]Removed deprecated import paths from
astropy.cosmology.core
. [#14782]Cosmology
Parameter
is now adataclass
, and can work with all of Python’s dataclasses machinery, like field introspection and type conversion. [#14874]A new property –
scale_factor0
– has been added to Cosmology objects. This is the scale factor at redshift 0, and is defined to be 1.0. [#14931]Added registration label
ascii.latex
to Cosmology IO. [#14938]The private module
astropy.cosmology.utils
has been deprecated. [#14980]
astropy.io.misc#
Removed deprecated
astropy.io.misc.asdf
subpackage. Useasdf-astropy
package instead. [#14668]
astropy.io.votable#
Removed deprecated
pedantic
option from theastropy.io.votable.table.parse()
function and the corresponding configuration setting. Use theverify
option instead. [#14669]
astropy.modeling#
astropy.tests#
astropy.uncertainty#
The
.dtype
attribute exposed byDistribution
is now that of the samples, rather than one that has a “samples” entry. This makes quantities with structured data types and units easier to support, and generally makes theDistribution
appear more similar to regular arrays. It should have little effect on code. For instance,distribution["samples"]
still will return the actual distribution.As a consequence of this refactoring, most arrays that are not C-contiguous can now be viewed and will thus not be copied on input any more. The only exceptions are arrays for which the strides are negative.
Note that the true data type is considered an implementation detail. But for reference, it now is a structured data type with a single field, “samples”, which itself is an array of “sample” fields, which contain the actual data. [#15304]
astropy.units#
Like
np.ndarray
, under numpy 2.0Quantity
and all its subclasses (Angle
,Masked
, etc.) will no longer support the.ptp()
method. Usenp.ptp(...)
instead.Similarly, support for the much less frequently used
.newbyteorder()
and.itemset()
methods has been removed. [#15378]
astropy.utils#
Removed deprecated
OrderedDescriptor
,OrderedDescriptorContainer
, andset_locale
inastropy.utils.misc
. [#14679]is_path_hidden()
andwalk_skip_hidden()
are deprecated. [#14759]The structure of
utils.metadata
has been refactored, but all the available functions and classes are still present and should be imported as before. [#15166]The
astropy.utils.metadata.MetaData
class, which is used throughout astropy to carry metadata on tables, columns, etc., can now also be used on dataclasses.When accessing the meta attribute on a class
astropy.utils.metadata.MetaData
now returns None instead of itself. [#15237]
astropy.visualization#
It is now not possible to pass any keyword arguments to
astropy.visualization.wcsaxes.WCSAxes.draw()
. Previously passing any keyword arguments would have errored anyway, asmatplotlib.axes.Axes.draw()
does not accept keyword arguments. [#14772]
Bug Fixes#
astropy.cosmology#
The exponent in
w0wzCDM.de_density_scale
has been corrected to 3, from -3. This correction has also been made to the scalarinv_efunc
cpython functions. [#14991]
astropy.io.fits#
Fix crash when a PrimaryHDU has a GROUPS keyword with a non-boolean value (i.e. not a random-groups HDU). [#14998]
Fixed a bug that caused
Cutout2D
to not work correctly withCompImageHDU.section
[#14999]Fixed a bug that caused compressed images with TFORM missing the optional ‘1’ prefix to not be readable. [#15001]
astropy.io.misc#
Updated
astropy.io.misc.yaml
sodump()` with a numpy object array or ``load()
with YAML representing a numpy object array both raiseTypeError
. This prevents problems like a segmentation fault. [#15373]
astropy.io.votable#
astropy.modeling#
All models can be pickled now. [#14902]
astropy.nddata#
Restore bitmask propagation behavior in
NDData.mask
, plus a fix for arithmetic between masked and unmaskedNDData
objects. [#14995]
astropy.table#
Fix a bug where table indexes were not using a stable sort order. This was causing the order of rows within groups to not match the original table order when an indexed table was grouped. [#14907]
Fixed issue #14964 that when grouping a Table on a mixin column such as
Quantity
orTime
, the grouped table keys did not reflect the original column values. ForQuantity
this meant that the key values were pure float values without the unit, while forTime
the key values were the pair ofjd1
andjd2
float values. [#14966]
astropy.units#
astropy.utils#
For
Masked
,np.ptp
and the.ptp()
method now properly account for the mask, ensuring the result is identical to subtracting the maximum and minimum (with the same arguments). [#15380]
astropy.wcs#
wcs.validate(filename)
now properly closes the file handler. [#15054]
Other Changes and Additions#
Compatibility with Python 3.12. [#14784]
Moved International Earth Rotation and Reference Systems (IERS) and Leap Second files out into standalone astropy-iers-data package, maintaining full backward-compatibility in the astropy.utils.iers API, but deprecation warnings may be issued when certain files are accessed directly. [#14819]
The minimum supported version of NumPy is now 1.22. [#15006]
Switch from using
setup.cfg
for project configuration to usingpyproject.toml
. [#15247]
Version v5.3.3 (2023-09-07)#
Bug Fixes#
astropy.coordinates#
TransformGraph.to_dot_graph()
now throws an exception for invalidsavelayout
.
astropy.cosmology#
The exponent of
w0wzCDM
functions ininv_efunc
has been corrected to 3, from -3. [#15224]
astropy.modeling#
Astropy modeling can filter non-finite data values using the
filter_non_finite
keyword argument in a fitter call. Now whenfilter_non_finite
is True, non-finite weights will also be filtered to prevent crashes inLevMarLSQFitter
. [#15215]
astropy.units#
Fixed
astropy.units.Quantity
’s implementation ofnumpy.nanmedian()
, where for Numpy >= 1.25 an exception was raised for some array shapes and axis combinations. [#15228]
Other Changes and Additions#
v5.3.x will not support NumPy 2.0 or later. [#15234]
Version 5.3.2 (2023-08-11)#
Bug Fixes#
astropy.coordinates#
Fixed import when called with Python
-OO
flag. [#15037]
astropy.nddata#
Fix for collapse operations on
NDData
without masks or units. [#15082]
astropy.units#
Modified the implementation of
np.power()
for instances ofQuantity
to allow any array as the second operand if all its elements have the same value. [#15101]
Version 5.3.1 (2023-07-06)#
Bug Fixes#
astropy.cosmology#
The exponent in
wowzCDM.de_density_scale
has been corrected to 3, from -3. [#14991]
astropy.io.fits#
Fix crash when a PrimaryHDU has a GROUPS keyword with a non-boolean value (i.e. not a random-groups HDU). [#14998]
Fixed a bug that caused
Cutout2D
to not work correctly withCompImageHDU.section
[#14999]Fixed a bug that caused compressed images with TFORM missing the optional ‘1’ prefix to not be readable. [#15001]
astropy.modeling#
All models can be pickled now. [#14902]
astropy.nddata#
Restore bitmask propagation behavior in
NDData.mask
, plus a fix for arithmetic between masked and unmaskedNDData
objects. [#14995]
astropy.table#
Fix a bug where table indexes were not using a stable sort order. This was causing the order of rows within groups to not match the original table order when an indexed table was grouped. [#14907]
astropy.units#
In VOunits, “pix”, “au”, “a”, and “ct” are removed from the list of deprecated units. [#14885]
Version 5.3 (2023-05-22)#
New Features#
astropy.coordinates#
Add optional parameter
refresh_cache
toEarthLocation.of_site()
andEarthLocation.get_site_names()
to force the download of the latest site registry. [#13993]Added
atol
argument to functionis_O3
andis_rotation
in matrix utilities. [#14371]A new class
astropy.coordinates.StokesCoord
has been added to represent world coordinates describing polarization state. This change introduces a breaking change to the return value ofastropy.wcs.WCS.pixel_to_world
where before au.Quantity
object would be returned containing numerical values representing a Stokes profile now aStokesCoord
object is returned. The previous numerical values can be accessed withStokesCoord.value
. [#14482]Add an optional parameter
location
toEarthLocation.get_itrs()
to allow the generation of topocentric ITRS coordinates with respect to a specific location. [#14628]
astropy.cosmology#
Two new cosmologies have been added,
FlatwpwaCDM
andFlatw0wzCDM
, which are the flat variants ofwpwaCDM
andw0wzCDM
, respectively. [#12353]
astropy.io.ascii#
Add ability to read and write an RST (reStructuredText) ASCII table that includes additional header rows specifying any or all of the column dtype, unit, format, and description. This is available via the new
header_rows
keyword argument. [#14182]
astropy.io.fits#
Added support for >3D data in CompImageHDU [#14252]
Added a
CompImageHDU.section
property which can be used to efficiently access subsets of the data, similarly toImageHDU.section
. When using this, only the tiles required to cover the section are read from disk and decompressed. [#14353]Added support for
'NOCOMPRESS'
for thecompression_type
option inCompImageHDU
. [#14408]Added new properties
compression_type
andtile_shape
onCompImageHDU
, giving the name of the compression algorithm and the shape of the tiles in the tiled compression respectively. [#14428]Do not call
gc.collect()
when closing aCompImageHDU
object as it has a large performance penalty. [#14576]VLA tables can now be written with the unified I/O interface. When object types are present or the VLA contains different types a
TypeError
is thrown. [#14578]
astropy.io.misc#
Add support for writing/reading fixed-size and variable-length array columns to the parquet formatter. [#14237]
astropy.io.votable#
astropy.modeling#
Enable check for poorly conditioned fits in
LinearLSQFitter
for polynomial models with fixed inputs. [#14037]
astropy.nddata#
astropy.nddata.NDDataArray
now has collapsing methods likesum
,mean
,min
, andmax
which operate along any axes, and better support forastropy.utils.Masked
objects. [#14175]
astropy.stats#
vonmisesmle
has now functioning “weights” and “axis” parameters that work equivalently to the rest of the functions in thecircstats
module (circmean
,rayleightest
, etc.) [#14533]
astropy.table#
Table
andQTable
can now use the|
and|=
operators for dictionary-style merge and update. [#14187]
astropy.time#
Add a
leap_second_strict
argument to theTime.to_datetime()
method. This controls the behavior when converting a time within a leap second to thedatetime
format and can take the valuesraise
(the default),warn
, orsilent
. [#14606]
astropy.timeseries#
Adds the
astropy.timeseries.LombScargleMultiband
class, which is an extension of theastropy.timeseries.LombScargle
class. It enables the generation of periodograms for datasets with measurements taken in more than one photometric band. [#14016]Add
unit_parse_strict
parameter to the Kepler reader to control the warnings emitted when reading files. [#14294]
astropy.units#
Add support for degrees Celsius for FITS. Parsing “Celsius” and “deg C” is now supported and astropy will output “Celsius” into FITS.
Note that “deg C” is only provided for compatibility with existing FITS files, as it does not conform to the normal unit standard, where this should be read as “degree * Coulomb”. Indeed, compound units like “deg C kg-1” will still be parsed as “Coulomb degree per kilogram”. [#14042]
Enabled the
equal_nan
keyword argument fornp.array_equal()
when the arguments areastropy.units.Quantity
instances. [#14135]Allow “console” and “unicode” formats for conversion to string of function units. [#14407]
Add a “fraction” options to all the unit
format
classes, which determine whether, if a unit has bases raised to a negative power, a string representation should just show the negative powers (fraction=False
) or use a fraction, and, in the latter case, whether to use a single-line representation using a solidus (fraction='inline'
orfraction=True
) or, if the format supports it, a multi-line presentation with the numerator and denominator separated by a horizontal line (fraction='multiline'
). [#14449]
astropy.utils#
The
mean
method onNDDataArray
now avoids a division by zero warning when taking the mean of a fully-masked slice (and still returnsnp.nan
). [#14341]Ensure we can read the newer
IERS_B
files produced by the International Earth Rotation and Reference Systems Service, and pointastropy.utils.iers.IERS_B_URL
to the new location. [#14382]
API Changes#
astropy.coordinates#
get_moon()
is deprecated and may be removed in a future version ofastropy
. Callingget_moon(...)
should be replaced withget_body("moon", ...)
. [#14354]
astropy.io.fits#
Deprecate the auto-fixing of tile sizes for HCOMPRESS_1 tiled image compression when the tile size could be changed by +1 to make it acceptable. [#14410]
The
tile_size=
argument toCompImageHDU
has been deprecated as it was confusing that it was required to be in the opposite order to the data shape (it was in header rather than Numpy order). Instead, users should make use of thetile_shape=
argument which is in Numpy shape order. [#14428]
astropy.modeling#
Deprecate the
humlicek2
method forVoigt1D
in favor of using thewofz
method using thescipy.special.wofz
implementation of the Fadeeva function wheneverscipy
is installed. [#14013]Deprecated
astropy.modeling.utils.comb()
function in favor ofcomb()
frommath
standard library. [#14038]Propagate measurement uncertainties via the
weights
keyword argument into the parameter covariances. [#14519]
astropy.units#
The conversion of
astropy.units.Quantity
tobool
that was deprecated since astropy 3.0 now raises aValueError
. This affects statements likeif quantity
. Use explicit comparisons likeif quantity.value != 0
orif quantity is not None
instead. [#14124]Operations on
Quantity
in tables are sped up by only copyinginfo
when it makes sense (i.e., when the object can still logically be thought of as the same, such as in unit changes or slicing).info
is no longer copied if aQuantity
is part of an operation. [#14253]The
Quantity.nansum
method has been deprecated. It was always weird that it was present, sincendarray
does not have a similar method, and the othernan*
functions such asnanmean
did not have a corresponding method. Usenp.nansum(quantity)
instead. [#14267]The unused
units.format.Unscaled
format class has been deprecated. [#14417]The order in which unit bases are displayed has been changed to match the order bases are stored in internally, which is by descending power to which the base is raised, and alphabetical after. This helps avoid monstrosities like
beam^-1 Jy
forformat='fits'
.Note that this may affect doctests that use quantities with complicated units. [#14439]
astropy.utils#
For
Masked
instances, thewhere
argument for any ufunc can now also be masked (with any masked elements masked in the output as well). This is not very useful in itself, but avoids problems in conditional functions (likenp.add(ma, 1, where=ma>10)
). [#14590]
astropy.visualization#
The pixel attribute of
astropy.visualization.wcsaxes.frame.Spine
is deprecated and will be removed in a future astropy version. Because it is (in general) not possible to correctly calculate pixel coordinates before Matplotlib is drawing a figure, instead set the world or data coordinates of theSpine
using the appropriate setters. [#13989]Passing a bare number as the
coord_wrap
argument toCoordinateHelper.set_coord_type
is deprecated. Pass aQuantity
with units equivalent to angular degrees instead.The
.coord_wrap
attribute ofCoordinateHelper
is now aQuantity
instead of a bare number. [#14050]
Bug Fixes#
astropy.coordinates#
Angle.to_string()
was changed to ensure it matches the behaviour ofQuantity.to_string()
in having a space between the value and the unit for display with non-degree and hourangle units (i.e., the case in which units are displayed by their name; the sexagesimal case for degrees or hourangle that uses symbols is not changed). [#14379]
astropy.io.ascii#
Fix an issue in the
io.ascii
QDP format reader to allow lower-case commands in the table data file. Previously it required all upper case in order to parse QDP files. [#14365]
astropy.io.fits#
Compressing/decompressing a floating point dataset containing NaN values will no longer read in the whole tile as NaNs.
Fixed segmentation faults that occurred when compressing/decompressing data with the PLIO_1 algorithm. [#14252]
Card
now uses the default Python representation for floating point values. [#14508]ImageHDU
now properly rejects Numpy scalars, avoiding data corruption. [#14528]Fix issues with double quotes in CONTINUE cards. [#14598]
Fixes an issue where FITS_rec was incorrectly raising a ValueError exception when the heapsize was greater than 2**31 when the Column type was ‘Q’ instead of ‘P’. [#14810]
astropy.io.misc#
Columns with big-endian byte ordering (such as those read in from a FITS table) can now be serialized with Parquet. [#14373]
astropy.modeling#
Bugfix for using
getter/setter
in properties to adjust the internal (computational) value of a property vs its external proxy value when the values involve units. [#14512]Fix issue with
filter_non_finite
option when fitting withweights
via passing theweights
through the non-finite-filter alongside the input data. [#14695]Fixed an issue with Parameter where a getter could be input without a setter (or vice versa). [#14708]
astropy.time#
Using quantities with units of time for
Time
format ‘decimalyear’ will now raise an error instead of converting the quantity to days and then interpreting the value as years. An error is raised instead of attempting to interpret the unit as years, since the interpretation is ambiguous: in ‘decimaltime’ years are equal to 365 or 366 days, while for regular time units the year is defined as 365.25 days. [#14566]
astropy.uncertainty#
Ensure that
Distribution
can be compared with==
and!=
with regular arrays or scalars, and that inplace operations likedist[dist<0] *= -1
work. [#14421]
astropy.units#
Modified
astropy.units.Quantity.__array_ufunc__()
to returnNotImplemented
instead of raising aValueError
if the inputs are incompatible. [#13977]Modified the behavior of
numpy.array_equal()
andnumpy.array_equiv()
to returnFalse
instead of raising an error if their arguments areastropy.units.Quantity
instances with incompatible units. [#14163]Spaces have been regularized for the
unicode
andconsole
output formats: no extraneous spaces in front of the unit, and always a space between a possible scale factor and the unit. [#14413]Prefixed degrees and arcmin are now typeset without using the symbol in
latex
andunicode
formats (i.e.,mdeg
instead ofm°
), as was already the case for arcsec. [#14419]Ensure the unit is kept in
np.median
even if the result is a scalarnan
(the unit was lost for numpy < 1.22). [#14635]Ensure that
Quantity
with structured dtype can be set using non-structuredQuantity
(if units match), and that structured dtype names are inferred correctly in the creation ofStructuredUnit
, thus avoiding mismatches when setting units. [#14680]
astropy.utils#
When using astropy in environments with sparse file systems (e.g., where the temporary directory and astropy data directory resides in different volumes),
os.rename
may fail withOSError: [Errno 18] Invalid cross-device link
. This may affect some clean-up operations executed by thedata
module, causing them to fail. This patch is to catchOSError
witherrno == EXDEV
(i.e., Errno 18) when performing these operations and try to useshutil.move
instead to relocate the data. [#13730]Ensure masks are propagated correctly for
outer
methods of ufuncs also if one of the inputs is not actually masked. [#14624]
astropy.visualization#
The location of a
astropy.visualization.wcsaxes.frame.Spine
in a plot is now correctly calculated when the DPI of a figure changes between a WCSAxes being created and the figure being drawn. [#13989]CoordinateHelper.set_ticks()
now acceptsnumber=0
. Previously it errored. [#14160]WCSAxes.plot_coord
andplot_scatter
now work correctly for APE 14 compliant WCSes where the units are not always converted to degrees. [#14251]Fixed a bug where coordinate overlays did not automatically determine the longitude wrap angle or the appropriate units. [#14326]
astropy.wcs#
Other Changes and Additions#
The minimum supported version of Python is now 3.9, changing from 3.8. [#14286]
The minimum supported version of Numpy is now 1.21. [#14349]
The minimum supported version of matplotlib is now 3.3. [#14286, #14321]
astropy
no longer publishes wheels for i686 architecture. [#14517]Added a pre-commit configuration for codespell. [#13985]
Removed a large fraction of the bundled CFITSIO code and internally refactored FITS compression-related code, which has resulted in a speedup when compiling astropy from source (40% faster in some cases). [#14252]
The CFITSIO library is no longer bundled in full with astropy and the option to build against an external installation of CFITSIO has now been removed, so the ASTROPY_USE_SYSTEM_CFITSIO environment variable will be ignored during building. [#14311]
Updated CDS URL for Sesame look-up as the old URL is deprecated. [#14681]
Version 5.2.2 (2023-03-28)#
Bug Fixes#
astropy.io.ascii#
CDS and MRT tables with units that contain with multiple divisions, such as
km/s/Mpc
now parse correctly as being equal tokm/(s.Mpc)
. [#14369]
astropy.io.fits#
Fix
FITSDiff
when table contains a VLA column with the Q type. [#14539]
astropy.table#
Fix a bug when creating a
QTable
when aQuantity
input column is present and theunits
argument modifies the unit of that column. This now works as expected where previously this caused an exception. [#14357]
astropy.units#
CDS units with multiple divisions, such as
km/s/Mpc
now parse correctly as being equal tokm/(s.Mpc)
. [#14369]
astropy.wcs#
Fixed a bug that caused subclasses of BaseHighLevelWCS and HighLevelWCSMixin to not work correctly under certain conditions if they did not have
world_n_dim
andpixel_n_dim
defined on them. [#14495]
Version 5.2.1 (2023-01-06)#
Bug Fixes#
astropy.coordinates#
Fix to ITRS frame
earth_location
attribute to give the correct result for a topocentric frame. [#14180]
astropy.cosmology#
Bounds are no longer passed to the scipy minimizer for methods Brent and Golden. The scipy minimizer never used the bounds but silently accepted them. In scipy v1.11.0.dev0+ an error is raised, so we now pass None as the bounds to the minimizer. Users should not be affected by this change. [#14232]
astropy.io.fits#
Tables with multidimensional variable length array can now be properly read and written. [#13417]
astropy.units#
Modified the behavior of
numpy.histogram()
,numpy.histogram_bin_edges()
,numpy.histogram2d()
, andnumpy.histogramdd()
so that therange
argument must a compatible instance ofastropy.units.Quantity
if the other arguments are instances ofastropy.units.Quantity
. [#14213]
astropy.visualization#
Other Changes and Additions#
Fix compatibility with Numpy 1.24. [#14193]
Version 5.2 (2022-12-12)#
New Features#
astropy.coordinates#
Adds new topocentric ITRS frame and direct transforms to and from the observed frames
AltAz
andHADec
with the ability to add or remove refraction corrections as required. Since these frames are all within the ITRS, there are no corrections applied other than refraction in the transforms. This makes the topocentric ITRS frame and these transforms convenient for observers of near Earth objects where stellar aberration should be omitted. [#13398]Allow comparing
SkyCoord
to frames with data. [#13477]
astropy.cosmology#
Cosmology instance can be parsed from or converted to a HTML table using the new HTML methods in Cosmology’s
to/from_format
I/O. [#13075]A new comparison function has been added –
cosmology_equal()
– that mirrors itsnumpy
counterpart but allows for the arguments to be converted to aCosmology
and to compare flat cosmologies with their non-flat equivalents. [#13104]Cosmology equivalence for flat FLRW cosmologies has been generalized to apply to all cosmologies using the FlatCosmology mixin. [#13261]
The cosmological redshift unit now has a physical type of
"redshift"
. [#13561]
astropy.io.ascii#
Add ability to read and write a fixed width ASCII table that includes additional header rows specifying any or all of the column dtype, unit, format, and description. This is available in the
fixed_width
andfixed_width_two_line
formats via the newheader_rows
keyword argument. [#13734]
astropy.io.fits#
Added support to the
io.fits
API for reading and writing file paths of the form~/file.fits
or~<username>/file.fits
, referring to the home directory of the current user or the specified user, respectively. [#13131]Added support for opening remote and cloud-hosted FITS files using the
fsspec
package, which has been added as an optional dependency. [#13238]
astropy.io.votable#
Added support in
io.votable
for reading and writing file paths of the form~/file.xml
or~<username>/file.xml
, referring to the home directory of the current user or the specified user, respectively. [#13149]
astropy.modeling#
Add option to non-linear fitters which enables automatic exclusion of non-finite values from the fit data. [#13259]
astropy.nddata#
astropy.table#
An Astropy table can now be converted to a scalar NumPy object array. For NumPy >= 1.20, a list of Astropy tables can be converted to an NumPy object array of tables. [#13469]
astropy.time#
Added the
astropy.time.Time.mean()
method which also enables thenumpy.mean()
function to be used on instances ofastropy.time.Time
. [#13508]Improve the performance of getting the string representation of a large
Time
orTimeDelta
object. This is done via a newto_string()
method that does the time string format conversion only for the outputted values. Previously the entire array was formatted in advance. [#13555]
astropy.units#
It is now possible to use unit format names as string format specifiers for a
Quantity
, e.g.f'{1e12*u.m/u.s:latex_inline}'
now produces the string'$1 \\times 10^{12} \\; \\mathrm{m\\,s^{-1}}$'
. [#13050]Ensure that the
argmin
andargmax
methods ofQuantity
support thekeepdims
argument when numpy does (numpy version 1.22 and later). [#13329]numpy.lib.recfunctions.merge_arrays()
is registered with numpy overload forQuantity
. [#13669]Added SI prefixes for quecto (“q”, \(10^{-30}\)), ronto (“r”, \(10^{-27}\)), ronna (“R”, \(10^{27}\)), and quetta (“Q”, \(10^{30}\)). [#14046]
astropy.utils#
astropy.visualization#
Add helper functions for WCSAxes instances to draw the instrument beam and a physical scale. [#12102]
Add a
scatter_coord
method to thewcsaxes
functionality based on the existingplot_coord
method but that callsmatplotlib.pyplot.scatter
. [#13562]Added a
sinh
stretch option tosimple_norm
. [#13746]It is now possible to define “tickable” gridlines for the purpose of placing ticks or tick labels in the interior of WCSAxes plots. [#13829]
API Changes#
astropy.convolution#
Removed deprecated
MexicanHat1DKernel
andMexicanHat2DKernel
classes. Please useRickerWavelet1DKernel
andRickerWavelet2DKernel
instead. [#13300]
astropy.units#
Multiplying a
LogQuantity
likeMagnitude
with dimensionless physical units by an array will no longer downcast toQuantity
. [#12579]Quantity normally upcasts integer dtypes to floats, unless the dtype is specifically provided. Before this happened when
dtype=None
; now the default has been changed todtype=numpy.inexact
anddtype=None
has the same meaning as innumpy
. [#12941]In “in-place unit changes” of the form
quantity <<= new_unit
, the result will now share memory with the original only if the conversion could be done through a simple multiplication with a scale factor. Hence, memory will not be shared if the quantity has integer`dtype`
or is structured, or when the conversion is through an equivalency. [#13638]When
Quantity
is constructed from a structured array andunit
isNone
, the default unit is now structured like the input data. [#13676]
astropy.utils#
astropy.utils.misc.suppress
has been removed, usecontextlib.suppress
instead.astropy.utils.namedtuple_asdict
has been removed, instead use method._asdict
on anamedtuple
.override__dir__
has been deprecated and will be removed in a future version, see the docstring for the better alternative. [#13636]astropy.utils.misc.possible_filename
has been removed. [#13661]
astropy.visualization#
Rename number-of-samples keyword
nsamples
inZScaleInterval
to align with then_samples
keyword used in all otherInterval
classes in this module. [#13810]
Bug Fixes#
astropy.convolution#
Fixed convolution Kernels to ensure the that returned kernels are normalized to sum to one (e.g.,
Gaussian1DKernel
,Gaussian2DKernel
). Also fixed the Kerneltruncation
calculation. [#13299]Fix import error with setuptools v65.6.0 by replacing
numpy.ctypeslib.load_library
with Cython to load the C convolution extension. [#14035]
astropy.coordinates#
BaseCoordinateFrame.get_frame_attr_names()
had a misleading name, because it actually provided adict
of attribute names and their default values. It is now deprecated and replaced byBaseCoordinateFrame.get_frame_attr_defaults()
. The fastest way to obtain the attribute names isBaseFrame.frame_attributes.keys()
. [#13484]Fixed bug that caused
earth_orientation.nutation_matrix()
to error instead of returning output. [#13572]Ensure that
angle.to_string()
continues to work after pickling, and that units passed on toto_string()
or theAngle
initializer can be composite units (likeu.hour**1
), which might result from preceding calculations. [#13933]
astropy.io.fits#
report_diff_values()
have now two new parametersrtol
andatol
to make the report consistent withnumpy.allclose
results. This fixesFITSDiff
with multi-dimensional columns. [#13465]
astropy.io.votable#
Fixed two bugs in validator.validator.make_validation_report: - ProgressBar iterator was not called correctly. - make_validation_report now handles input string urls correctly. [#14102]
astropy.timeseries#
Fixed a performance regression in
timeseries.aggregate_downsample
introduced in Astropy 5.0 / #11266. [#13069]
astropy.units#
astropy.utils#
astropy.visualization#
Significantly improve performance of
ManualInterval
when both limits are specified manually. [#13898]
Other Changes and Additions#
The deprecated private
astropy._erfa
module has been removed. Usepyerfa
, which is a dependency ofastropy
and can be imported directly usingimport erfa
. [#13317]The minimum version required for numpy is now 1.20 and that for scipy 1.5. [#13885]
Updated the bundled CFITSIO library to 4.2.0. [#14020]
Version 5.1.1 (2022-10-23)#
API Changes#
astropy.wcs#
The
pixel
argument toastropy.visualization.wcsaxes.ticklabels.TickLabels.add
no longer does anything, is deprecated, and will be removed in a future astropy version. It has been replaced by a new requireddata
argument, which should be used to specify the data coordinates of the tick label being added.This changes has been made because it is (in general) not possible to correctly calculate pixel coordinates before Matplotlib is drawing a figure. [#12630]
Bug Fixes#
astropy.coordinates#
Fixed a bug that prevented
SkyOffsetFrame
instances to be pickled by adding a custom__reduce__
method to the class (see issue #9249). [#13305]Fixed the check for invalid
Latitude
values for float32 values.Latitude
now accepts the float32 value of pi/2, which was rejected before because a comparison was made using the slightly smaller float64 representation. See issue #13708. [#13745]
astropy.io.ascii#
astropy.io.fits#
heapsize
is now checked for VLA tables. An error is thrown whether P format is used but the heap size is bigger than what can be indexed with a 32 bit signed int. [#13429]Fix parsing of ascii TFORM when precision is missing. [#13520]
A compressed image HDU created from the header of a PRIMARY HDU, now correctly updates ‘XTENSION’ and ‘SIMPLE’ keywords. [#13557]
Empty variable-length arrays are now properly handled when pathological combinations of heapoffset and heapsize are encountered. [#13621]
PCOUNT
andGCOUNT
keywords are now removed from an uncompressed Primary header, for compliance withfitsverify
behavior. [#13753]
astropy.modeling#
astropy.table#
Fix a problem where accessing one field of a structured column returned a Column with the same info as the original column. This resulted in unintuitive behavior in general and an exception if the format for the column was set. [#13269]
Tables with columns with structured data can now be properly stacked and joined. [#13306]
Update jQuery to 3.6.0, to pick up security fixes. [#13438]
Fix a Python 3.11 compatibility issue. Ensure that when removing a table column that the
pprint_include_names
orpprint_exclude_names
attributes get updated correctly. [#13639]When using
add_columns
with same indexes inindexes
option or without specifying the option, the order of the new columns will now be kept. [#13783]Fix a bug when printing or getting the representation of a multidimensional table column that has a zero dimension. [#13838]
Ensure that mixin columns and their
info
are not shared between tables even when their underlying data is shared withcopy=False
. [#13842]
astropy.time#
Fix
Time.insert()
on times which have theirout_subfmt
set. [#12732]Prevent
Time()
from being initialized with an invalid precision leading to incorrect results when representing the time as a string. [#13068]Fix a bug in Time where a date string like “2022-08-01.123” was being parsed as an ISO-format time “2022-08-01 00:00:00.123”. The fractional part at the end of the string was being taken as seconds. Now this raises an exception because the string is not in ISO format. [#13731]
astropy.units#
Significantly improved the performance of parsing composite units with the FITS format, by ensuring the
detailed_exception
argument is properly passed on and thus used. [#12699]Ensure that
np.concatenate
on quantities can take adtype
argument (added in numpy 1.20). [#13323]Ensure that the units of any
initial
argument to reductions such asnp.add.reduce
(which underliesnp.sum
) are properly taken into account. [#13340]
astropy.utils#
Ensure that
np.concatenate
on masked data can take adtype
argument (added in numpy 1.20). [#13323]Fix error when suppressing download progress bar while using non-default
sys.stdout
stream. [#13352]Ensure
str
andrepr
work properly forMasked
versions of structured subarrays. [#13404]If an attribute is created using
deprecated_attribute()
with thealternative
argument then getting or setting the value of the deprecated attribute now accesses its replacement. [#13824]
astropy.visualization#
Fixed calling
.tight_layout()
on a WCSAxes. [#12418]
astropy.wcs#
WCS.pixel_to_world
now creates anEarthLocation
object usingMJD-AVG
if present before falling back to the old behaviour of usingMJD-OBS
. [#12598]The locations of
WCSAxes
ticks and tick-labels are now correctly calculated when the DPI of a figure changes between a WCSAxes being created and the figure being drawn, or when a rasterized artist is added to the WCSAxes. [#12630]Fix a bug where
SlicedLowLevelWCS.world_to_pixel_values
would break when the result of the transform is dependent on the coordinate of a sliced out pixel. [#13579]Updated bundled WCSLIB version to 7.12. This update includes bug fixes to
wcssub()
in how it handles temporal axes with -TAB and fixes handling of status returns fromlinp2x()
andlinx2p()
relating to distortion functions, in particular affecting TPV distortions - see #13509. For a full list of changes - see http://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES or astropy/cextern/wcslib/CHANGES. [#13635]Fixed WCS validation not working properly if HDUList is needed for multi-extension FITS file. [#13668]
Other Changes and Additions#
Development wheels of astropy should now be installed from https://pypi.anaconda.org/astropy/simple instead of from https://pkgs.dev.azure.com/astropy-project/astropy/_packaging/nightly/pypi/simple. [#13431]
Compatibility with Python 3.11, 3.10.7, 3.9.14, 3.8.14 [#13614]
Version 5.1 (2022-05-24)#
New Features#
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 toParameter
to quickly deep copy the object and change any constructor argument. A supporting equality method is added, andrepr
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
andOtot0
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 propertyis_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, andmove_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 argumentformat
. 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 ofio.ascii.read
is provided. Previously this required wrapping each data type as the tuple returned by theio.ascii.convert_numpy()
function and ensuring that the value is alist
. With this update you can writeconverters={'col1': bool}
to force conversion as abool
instead of the previous syntaxconverters={'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
toastropy.io.fits.connect.read_table_fits
to enable warnings or errors about invalid FITS units when usingastropy.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
andload
inastropy.io.misc.yaml
. [#12279]Add asdf support for
Cosine1D
,Tangent1D
,ArcSine1D
,ArcCosine1D
, andArcTangent1D
models. [#12895]Add asdf support for
Spline1D
models. [#12897]
astropy.io.registry#
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.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 byscipy.optimize.least_squares
).DogBoxLSQFitter
using the dogleg algorithm.
Enable direct use of the
ignored
feature ofModelBoundingBox
by users in addition to its use as part of enablingCompoundBoundingBox
. [#12384]Switch
modeling.projections
to useastropy.wcs.Prjprm
wrapper internally and provide access to theastropy.wcs.Prjprm
structure. [#12558]Add error to non-finite inputs to the
LevMarLSQFitter
, to protect against soft scipy failure. [#12811]Allow the
Ellipse2D
andSersic2D
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 forCCDData.to_hdu
andCCDData.write
. This option allows the user to get anImageHDU
as the first item of the returnedHDUList
, instead of the defaultPrimaryHDU
. [#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 theTable.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 toColumn
,MaskedColumn
, andQuantity
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-typeColumn
when the search value isstr
or an array ofstr
. 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 forQuantity
but notTime
). 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#
Add support for calling
numpy.linspace()
with twoTime
instances to generate a or multiple linearly spaced set(s) of times. [#13132]
astropy.units#
structured_to_unstructured
andunstructured_to_structured
innumpy.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 themean()
,``var()``,std()
andnansum()
methods ofastropy.units.Quantity
. Also added theintial
keyword argument toastropy.units.Quantity.nansum()
. [#12891]Added “Maxwell” as a unit for magnetic flux to the CGS module. [#12975]
Quantity.to_string()
andFunctionUnitBase.to_string()
now accept the'latex_inline'
unit format. The output ofStructuredUnit.to_string()
when called withformat='latex_inline'
is now more consistent with the output when called withformat='latex'
. [#13056]
astropy.utils#
Added the
where
keyword argument to themean()
,var()
,std()
,any()
, andall()
methods ofastropy.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 anIERSRangeError
, default), ‘warn’ (issue aIERSDegradedAccuracyWarning
) 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
andastropy.wcs.Prjprm
have been added to allow access to lower level WCSLIB functionality and to allow direct access to thecel
andprj
members ofWcsprm
. [#12514]Add
temporal
properties for convenient access of/selection of/testing for theTIME
axis introduced in WCSLIB version 7.8. [#13094]
API Changes#
astropy.coordinates#
The
dms_to_degrees
andhms_to_hours
functions (and implicitly tuple-based initialization ofAngle
) 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. UsePlanck18
instead [#12354]default_cosmology.get_cosmology_from_string
is deprecated and will be removed in two minor versions. Usegetattr(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#
When reading an ECSV file, changed the type checking to issue an
InvalidEcsvDatatypeWarning
instead of raising aValueError
exception if thedatatype
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#
astropy.io.misc#
astropy.modeling#
Made
astropy.modeling.fitting._fitter_to_model_params
andastropy.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'
andr'\t'
respectively. This improves the display of such tables. [#12631]A new keyword-only argument
kind
was added to theTable.sort
method to specify the sort algorithm. The signature ofTable.sort
was modified so that thereverse
argument is now keyword-only. Previouslyreverse
could be specified as the second positional argument. [#12637]Changed behavior when a structured
numpy.ndarray
is added as a column to aTable
. Previously this was converted to aNdarrayMixin
subclass ofndarray
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 structurednumpy.ndarray
is added to the table as a nativeColumn
and saving to file is supported. [#13236]
astropy.tests#
Backward-compatible import of
astropy.tests.disable_internet
has been removed; usepytest_remotedata.disable_internet
frompytest-remotedata
instead. [#12633]Backward-compatible import of
astropy.tests.helper.remote_data
has been removed; usepytest.mark.remote_data
frompytest-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.raises
astropy.tests.helper.catch_warnings
astropy.tests.helper.ignore_warnings
astropy.tests.helper.raises
astropy.tests.helper.enable_deprecations_as_exceptions
astropy.tests.helper.treat_deprecations_as_exceptions
Backward-compatible plugin
astropy.tests.plugins.display
has been removed; usepytest-astropy-header
instead. [#12633]
astropy.time#
Creating an
TimeDelta
object with numerical inputs that do not have a unit and without specifying an explicit format, for exampleTimeDelta(5)
, now results in aTimeDeltaMissingUnitWarning
. This also affects statements likeTime("2020-01-01") + 5
orTime("2020-01-05") - Time("2020-01-03") < 5
, which implicitly transform the right-hand side into anTimeDelta
instance. [#12888]
Bug Fixes#
astropy.coordinates#
The machinery that makes observatory locations available as
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 timeformat
is one ofdatetime
,datetime64
, orymdhms
. Previously, writing aTime
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#
astropy.modeling#
Bugfix for
ignore
functionality failing inModelBoundingBox
when usingignore
option alongside passing bounding box data as tuples. [#13032]
astropy.table#
Fixed a bug in
Table.show_in_browser
using thejsviewer=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 timeformat
is one ofdatetime
,datetime64
, orymdhms
. Previously, writing aTime
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 aMaskedColumn
and the mask is preserved. [#13236]
astropy.time#
Fix an issue when writing
Time
table columns to a file when the timeformat
is one ofdatetime
,datetime64
, orymdhms
. Previously, writing aTime
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#
astropy.wcs#
Convert
NoConvergence
errors to warnings inworld_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
onwcscopy
and copywtb
members from the original WCS. [#13063]Updated bundled WCSLIB version to 7.11. This update together with 7.10 includes bug fixes to
tabini()
andtabcpy()
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
forWCS
objects with a spectral axis and observer location information when passing aSpectralCoord
that had missing observer or target information. [#13228]
Version 5.0.4 (2022-03-31)#
Bug Fixes#
astropy.modeling#
Fixed the
Gaussian2D
bounding_box
whentheta
is an angularQuantity
. [#13021]
astropy.utils#
Reverted
astropy.utils.iers.iers.IERS_A_URL
tomaia.usno.navy.mil
domain instead of NASA FTP to work around server issues. [#13004]
Other Changes and Additions#
Updated bundled WCSLIB to version 7.9 with several bugfixes and added support for time coordinate axes in
wcsset()
andwcssub()
. 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]
Version 5.0.3 (2022-03-25)#
Bug Fixes#
astropy.convolution#
Bugfix in
astropy.convolution.utils.discretize_model
which allows the function to handle aCompoundModel
. Before this fix,discretize_model
was confusingCompoundModel
with a callable function. [#12959]
astropy.io.fits#
Fix write and read FITS tables with multidimensional items, using
from_columns
without previousely definedColDefs
structure. [#12863]
astropy.io.votable#
Fix VOTable linting to avoid use of shell option. [#12985]
astropy.utils#
Fix XML linting to avoid use of shell option. [#12985]
Other Changes and Additions#
Updated the bundled CFITSIO library to 4.1.0. [#12967]
Version 5.0.2 (2022-03-10)#
Bug Fixes#
astropy.io.ascii#
Bugfix to add backwards compatibility for reading ECSV version 0.9 files with non-standard column datatypes (such as
object
,str
,datetime64
, etc.), which would raise a ValueError in ECSV version 1.0. [#12880]
astropy.io.misc#
- Bugfix for
units_mapping
schema’s property name conflicts. Changes: inputs
tounit_inputs
outputs
tounit_outputs
[#12800]
- Bugfix for
astropy.io.votable#
Fixed a bug where
astropy.io.votable.validate
was printing output tosys.stdout
when theoutput
parameter was set toNone
.validate
now returns a string whenoutput
is set toNone
, 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 justint
. [#12561]Fix computation of the separability of a
CompoundModel
where anotherCompoundModel
is on the right hand side of the&
operator. [#12907]Provide a hook (
Model._calculate_separability_matrix
) to allow subclasses ofModel
to define how to compute their separability matrix. [#12900]
astropy.stats#
Fixed a bug in which running
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#
Fixed a bug due to which
naxis
,pixel_shape
, andpixel_bounds
attributes ofastropy.wcs.WCS
were not restored when anastropy.wcs.WCS
object was unpickled. This fix also eliminatesFITSFixedWarning
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 forkey
,colsel
, andkeysel
parameters. [#12844]
Version 5.0.1 (2022-01-26)#
Bug Fixes#
astropy.coordinates#
Trying to create an instance of
astropy.coordinates.Distance
by providing bothz
andparallax
now raises the expectedValueError
. [#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 theunit
keyword whenparallax
is provided. [#12569]
astropy.cosmology#
astropy.io.fits#
Fix formatting issue in
_dump_coldefs
and add tests fortabledump
andtableload
convenience functions. [#12526]
astropy.io.misc#
YAML can now also represent quantities and arrays with structured dtype, as well as structured scalars based on
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 forSpline1D
model. [#12523]Bugfix for
keyerror
thrown byModel.input_units_equivalencies
when used onfix_inputs
models which have no set unit equivalencies. [#12597]
astropy.table#
astropy.timeseries#
Fixed edge case bugs which emerged when using
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 whenu.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
andcopy.deepcopy
and also pickled and unpicked also forprotocol
>= 2. This does not work for big-endian architecture with oldernumpy<1.21.1
. [#12583]
astropy.utils#
Ensure that a
Masked
instance can be used to initialize (or viewed as) anumpy.ma.Maskedarray
. [#12482]Ensure
Masked
also works with numpy >=1.22, which has a keyword argument name change fornp.quantile
. [#12511]astropy.utils.iers.LeapSeconds.auto_open()
no longer emits unnecessary warnings whenastropy.utils.iers.conf.auto_max_age
is set toNone
. [#12713]
Version 5.0 (2021-11-15)#
New Features#
astropy.convolution#
Added dealiasing support to
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 aSphericalCosLatDifferential
). 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 forUnitSphericalRepresentation
, which will return aSphericalRepresentation
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 toBaseDifferential
andCartesianDifferential
. All transform methods on Representations now delegate transforming differentials to the differential objects. [#11654]Adds new
HADec
built-in frame with transformations to/fromICRS
andCIRS
. This frame complementsAltAz
to give observed coordinates (hour angle and declination) in theITRS
for an equatorially mounted telescope. [#11676]SkyCoord
objects now have ato_table()
method, which allows them to be converted to aQTable
. [#11743]
astropy.cosmology#
Cosmologies now store metadata in a mutable parameter
meta
. The initialization argumentsname
andmeta
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 equivalencydimensionless_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:
>>> 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 subclassFlatFLRWMixin
. AllFlatCosmologyMixin
are flat, but not all flat cosmologies are instances ofFlatCosmologyMixin
. As example,LambdaCDM
may be flat (for the a specific set of parameter values), butFlatLambdaCDM
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 aFlatLambdaCDM
and flatLambdaCDM
are equivalent. [#12136]Replaced
z = np.asarray(z)
withz = 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
andequivalencies
(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 allowingTable(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#
Add Parquet serialization of Tables with pyarrow, including metadata support and columnar access. [#12215]
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]
astropy.table#
Added a new method
Table.update()
which does a dictionary-style update of aTable
by adding or replacing columns. [#11904]Masked quantities are now fully supported in tables. This includes
QTable
automatically convertingMaskedColumn
instances toMaskedQuantity
, andTable
doing the reverse. [#11914]Added new keyword arguments
keys_left
andkeys_right
to the tablejoin
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()
andColumn.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#
Adds a new method
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. TheTIO
adjustment is approximately 3 microseconds per century fromJ2000
and the polar motion correction is at most about +/-50 nanoseconds. For modelsIAU1982
andIAU1994
, no such adjustments are made as they pre-date the TIO concept. [#11680]
astropy.timeseries#
A custom binning scheme is now available in
aggregate_downsample
. It allowstime_bin_start
andtime_bin_size
to be arrays, and adds an optionaltime_bin_end
. This scheme mirrors the API forBinnedTimeSeries
. [#11266]
astropy.units#
Quantity
gains a__class_getitem__
to create unit-aware annotationswith the syntax
Quantity[unit or physical_type, shape, numpy.dtype]
. If the python version is 3.9+ ortyping_extensions
is installed, these are valid static type annotations. [#10662]
Each physical type is added to
astropy.units.physical
(e.g.,physical.length
orphysical.electrical_charge_ESU
). The attribute-accessible names (underscored, without parenthesis) also work withastropy.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
, andindex
and methodcopy()
toQuantityIterator
to matchnumpy.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#
astropy.visualization#
Added a feature so that SphericalCircle will accept center parameter as a SkyCoord object. [#11790]
astropy.wcs#
API Changes#
astropy.config#
update_default_config
andConfigurationMissingWarning
are deprecated. [#11502]
astropy.constants#
Removed deprecated
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 fromastropy.coordinates.BaseCoordinateFrame
class. [#12257]SpectralQuantity
andSpectralCoord
.to_value
method can now be called withoutunit
argument in order to maintain a consistent interface withQuantity.to_value
[#12440]
astropy.cosmology#
z_at_value
now works with arrays for all arguments (exceptfunc
,verbose
, andmethod
). 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 aTypeError
, not anAttributeError
. [#11785]The
read/write
andto/from_format
Unified I/O registries are separated and apply only toCosmology
. [#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 functionastropy.cosmology.utils.vectorize_redshift_method()
is added as replacement. [#12176]Cosmology base class constructor now only accepts arguments
name
andmeta
. Subclasses should add relevant arguments and not pass them to the base class. [#12191]
astropy.io#
When
astropy
raises anOSError
because a file it was told to write already exists, the error message now always suggests the use of theoverwrite=True
argument. The wording is now consistent for all I/O formats. [#12179]
astropy.io.ascii#
Removed deprecated
overwrite=None
option forastropy.io.ascii.ui.write()
. Overwriting existing files now only happens ifoverwrite=True
. [#12171]
astropy.io.fits#
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#
Deprecated the
pedantic
keyword argument in theastropy.io.votable.table.parse
function and the corresponding configuration setting. It has been replaced by theverify
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, andastropy.modeling.core.CompoundModel.both_inverses_exist()
method. [#11978]
Deprecated the
AliasDict
class inmodeling.utils
. [#12411]
astropy.nddata#
Removed
block_reduce
andblock_replicate
functions fromnddata.utils
. These deprecated functions innddata.utils
were moved tonddata.blocks
. [#12288]
astropy.stats#
Removed the following deprecated features from
astropy.stats
:conf
argument forfuncs.binom_conf_interval()
andfuncs.binned_binom_proportion()
,conflevel
argument forfuncs.poisson_conf_interval()
, andconf_lvl
argument forjackknife.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 theTable
formatted output methods whenevershow_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 argumentsleft
,right
,keys
, andjoin_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#
Along with the new method
earth_rotation_angle
,sidereal_time
now accepts anEarthLocation
as thelongitude
argument. [#11680]
astropy.units#
Unit
littleh
and equivalencywith_H0
have been moved to thecosmology
module and are deprecated fromastropy.units
. [#12092]
astropy.utils#
astropy.utils.introspection.minversion()
now usesimportlib.metadata.version()
. Therefore, itsversion_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 ofutils.console.ProgressBar
, including anupdate()
method and iterator support. [#11772]Removed deprecated
check_hashes
incheck_download_cache()
. The function also no longer returns anything. [#12293]Removed unused
download_cache_lock_attempts
configuration item inastropy.utils.data
. Deprecation was not possible. [#12293]Removed deprecated
hexdigest
keyword fromimport_file_to_cache()
. [#12293]Setting
remote_timeout
configuration item inastropy.utils.data
to 0 will no longer disable download from the Internet; Setallow_internet
configuration item toFalse
instead. [#12293]
astropy.visualization#
Removed deprecated
imshow_only_kwargs
keyword fromimshow_norm
. [#12290]
astropy.wcs#
Move complex logic from
HighLevelWCSMixin.pixel_to_world
andHighLevelWCSMixin.world_to_pixel
into the helper functionsastropy.wcs.wcsapi.high_level_api.high_level_objects_to_values
andastropy.wcs.wcsapi.high_level_api.values_to_high_level_objects
to allow reuse in other places. [#11950]
Bug Fixes#
astropy.config#
generate_config
no longer outputs wrong syntax for list type. [#12037]
astropy.constants#
Fixed a bug where an older constants version cannot be set directly after astropy import. [#12084]
astropy.convolution#
Passing an
array
argument for any Kernel1D or Kernel2D subclasses (with the exception of CustomKernel) will now raise aTypeError
. [#11969]
astropy.coordinates#
If a
Table
containing aSkyCoord
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 theSkyCoord
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
toGCRS
where changes inobstime
,obsgeoloc
, orobsgeovel
were ignored. This bug would also affect loopback transformations from onePrecessedGeocentric
frame to anotherPrecessedGeocentric
frame. [#12152]Fixed a bug with the transformations between
TEME
andITRS
or betweenTEME
and itself where a change inobstime
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#
Dictionaries for in-built cosmology realizations are not altered by creating the realization and are also made immutable. [#12278]
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 asBITPIX
andNAXIS
. [#12061]Fixed a bug where
astropy.io.fits.HDUDiff
would ignore theignore_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#
astropy.io.votable#
Now accepting UCDs containing phot.color. [#11982]
astropy.modeling#
Added
Parameter
descriptions to the implemented models which were missing. [#11232]The
separable
property is now correctly set on models constructed withastropy.modeling.custom_model
. [#11744]- Minor bugfixes and improvements to modeling including the following:
Fixed typos and clarified several errors and their messages throughout modeling.
Removed incorrect try/except blocks around scipy code in
convolution.py
andfunctional_models.py
.Fixed
Ring2D
model’s init to properly accept all combinations ofr_in
,r_out
, andwidth
.Fixed bug in
tau
validator for theLogarithmic1D
andExponential1D
models when using them as model sets.Fixed
copy
method forParameter
in order to prevent an automaticKeyError
, and fixedbool
forParameter
so that it functions with vector values.Removed unreachable code from
Parameter
, the_Tabular
model, and theDrude1D
model.Fixed validators in
Drude1D
model so that it functions in a model set.Removed duplicated code from
polynomial.py
for handing ofdomain
andwindow
.Fixed the
Pix2Sky_HEALPixPolar
andSky2Pix_HEALPixPolar
modes so that theirevaluate
andinverse
methods actually work without raising an error. [#12232]
astropy.nddata#
Ensure that the
wcs=
argument toNDData
is always parsed into a high level WCS object. [#11985]
astropy.stats#
astropy.table#
Ensured that
MaskedColumn.info
is propagated in all cases, so that when tables are sliced, writing will still be as requested oninfo.serialize_method
. [#11917]table.conf.replace_warnings
andtable.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 generalcollections.abc.Mapping
will work. [#12417]
astropy.uncertainty#
Ensure that scalar
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 itsmessage
,alternative
, andpending
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 inWCSAxes.get_transform
. [#12286]Fix compatibility with Matplotlib 3.5 when using the
grid_type='contours'
mode for drawing grid lines. [#12447]
astropy.wcs#
Enabled
SlicedLowLevelWCS.pixel_to_world_values
to handle slices including non-int
integers, e.g.numpy.int64
. [#11980]
Other Changes and Additions#
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 requirespackaging
. [#12199]Updated the bundled CFITSIO library to 4.0.0. When compiling with an external library, version 3.35 or later is required. [#12272]
Version 4.3.1 (2021-08-11)#
Bug Fixes#
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 annp.float32
NaN/Inf value is assigned to a header keyword. [#11922]
astropy.modeling#
Fixed bug in
fix_inputs
handling of bounding boxes. [#11908]
astropy.table#
Fix an error when converting to pandas any
Table
subclass that automatically adds a table index when the table is created. An example is a binnedTimeSeries
table. [#12018]
astropy.units#
astropy.utils#
Ensure any
.info
onMasked
instances is propagated correctly when viewing or slicing. As a consequence,MaskedQuantity
can now be correctly written to, e.g., ECSV format withserialize_method='data_mask'
. [#11910]
Version 4.3 (2021-07-26)#
New Features#
astropy.convolution#
Change padding sizes for
fft_pad
inconvolve_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
toAltAz
frames. This provides a modest speedup of approximately 10 percent. [#11079]Adds new
WGS84GeodeticRepresentation
,WGS72GeodeticRepresentation
, andGRS80GeodeticRepresentation
. These are mostly for use insideEarthLocation
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 throughCartesianRepresentation
.SphericalRepresentation
andPhysicssphericalRepresentation
override this for speed and to prevent NaN leakage from the distance to the angular components. Also, the functionsis_O3
andis_rotation
have been added tomatrix_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 toastropy.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 ofspherical_offsets_to()
: Given angular offsets in longitude and latitude, this method returns a new coordinate with the offsets applied. [#11635]Refactor conversions between
GCRS
andCIRS,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 usingget_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 choosing ‘jpl’ in 5.0. [#11601]
astropy.cosmology#
Cosmology parameter dictionaries now also specify the Cosmology class to which the parameters correspond. For example, the dictionary for
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#
Readers and writers can now set a priority, to assist with resolving which format to use. [#11214]
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()
orQTable.read()
functions) it is now possible to specify all keyword arguments that are valid forastropy.io.votable.table.parse()
. [#11643]
astropy.modeling#
Added a state attribute to models to allow preventing the syncing of constraint values from the constituent models. This syncing 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#
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 onenp.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#
An exception is raised when
n_bins
is passed as an argument while any of the parameterstime_bin_start
ortime_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 functionastropy.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
orunits.DN
, representing data number for a detector. [#11591]
astropy.utils#
Added
ssl_context
andallow_insecure
options todownload_file
, as well as the ability to optionally use thecertifi
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
andastropy.utils.OrderedDescriptorContainer
, as new features in Python 3 make their use less compelling. [#11094, #11099]astropy.utils.masked
provides a newMasked
class/factory that can be used to represent maskedndarray
and all its subclasses, includingQuantity
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 aroundply
. [#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 occurred when importing common astropy subpackages likeastropy.coordinates
. Now you can prevent querying internet resources (for instance on a cluster) by settingiers.conf.auto_download = False
. This can be done after importing astropy but prior to performing anyTime
scale transformations related to UTC. [#11638]Added a new module at
astropy.utils.compat.optional_deps
to consolidate the definition ofHAS_x
optional dependency flag variables, likeHAS_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]
API Changes#
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 usescipy.optimize.minimize_scalar
with default methodBrent
(other optionsBounded
andGolden
) and acceptbracket
option to set initial search region. [#11080]Clarified definition of inputs to
angular_diameter_distance_z1z2
. The function now emitsAstropyUserWarning
whenz2
is less thanz1
. [#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#
For conversion between FITS tables and astropy
Table
, the standard mask values ofNaN
for float and null string for string are now properly recognized, leading to aMaskedColumn
with appropriately set mask instead of aColumn
with those values exposed. Conversely, when writing an astropyTable
to a FITS tables, masked values are now consistently converted to the standard FITS mask values ofNaN
for float and null string for string (i.e., not just for tables withmasked=True
, which no longer is guaranteed to signal the presence ofMaskedColumn
). [#11222]
astropy.io.votable#
The use of
version='1.0'
is now fully deprecated in constructing aastropy.io.votable.tree.VOTableFile
. [#11659]
astropy.modeling#
Removed deprecated
astropy.modeling.blackbody
module. [#10972]
astropy.table#
Added
Column.value
as an alias for the existingColumn.data
attribute. This makes accessing a column’s underlying data array consistent with the.value
attribute available forTime
andQuantity
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 aMaskedColumn
with appropriately set mask. [#11222]Changed the implementation of the
table.index.Index
class so instantiating from this class now returns anIndex
object as expected instead of aSlicedIndex
object. [#11333]
astropy.units#
The
physical_type
attribute of units now returns an instance ofastropy.units.physical.PhysicalType
instead of a string. BecausePhysicalType
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#
astropy.wcs#
Deprecate
accuracy
argument inall_world2pix
which was mistakenly documented, in the caseaccuracy
was ever used. [#11055]
Bug Fixes#
astropy.convolution#
Fixes for
convolve_fft
documentation examples. [#11510]
astropy.coordinates#
Allow
Distance
instances with negative distance values as input forSphericalRepresentation
. This was always noted as allowed in an exception message when a negativeQuantity
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 ofCartesianDifferential
toUnitSphericalDifferential
. [#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 ifnan
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 theorigin
attribute. Theorigin
attribute now no longer is propagated, so while it remains available on aSkyCoord
that is an offset, it no longer is available once that coordinate is transformed to another frame. [#11730] [#11730]
astropy.cosmology#
Cosmology instance names are now immutable. [#11535]
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 unlesscomment=<comment prefix>
is supplied to thewrite()
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]Do not delete
EXTNAME
for compressed image header if a default and non-defaultEXTNAME
are present. [#11396]Prevent warnings about
HIERARCH
withCompImageHeader
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#
astropy.modeling#
Fixes the improper propagation of
bounding_box
fromastropy.modeling.models
to their inverses. For cases in which the inversesbounding_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 allowfix_inputs
to accept empty dictionaries and dictionaries withnumpy
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#
Fixed a bug with the
copy=False
option when carrying out sigma clipping - previously ifmasked=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 aTable
does not have side effects, such as creating an associatedinfo
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 withmasked=True
. [#11222]Using
Table.to_pandas()
on an indexedTable
with masked integer values now correctly construct thepandas.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 aunit
attribute could not be added to aQTable
. Such columns are now simply kept asColumn
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 theDataFrame
index. This was introduced by an API change in pandas version 1.3.0. Previously when creating aDataFrame
with the index set to an astropyColumn
, theDataFrame
index name was automatically set to the column name. [#11921]
astropy.time#
astropy.uncertainty#
Distribution
instances can now be used as input toQuantity
to initializeQuantityDistribution
. Hence,distribution * unit
anddistribution << 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 asAngle
parsing) thread-safe. [#11227]Decorator
astropy.units.decorators.quantity_input
now only evaluates return type annotations based onUnitBase
orFunctionUnitBase
types. Other annotations are skipped over and are not attempted to convert to the correct type. [#11506]
astropy.utils#
Make
lazyproperty
andclassdecorator
thread-safe. This should fix a number of thread safety issues. [#11224]
astropy.visualization#
astropy.wcs#
fit_wcs_from_points
now produces a WCS with integerNAXIXn
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
tonumpy.ndarray
. [#11431]Added
WCSCOMPARE_*
constants to the list of WCSLIB constants available/exposed through theastropy.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]
Other Changes and Additions#
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 usingupdate_default_config
andConfigurationDefaultMissingWarning
. [#10877]Replace
pkg_resources
(from setuptools) withimportlib.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 byastropy.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]
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 :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]
Version 4.2.1 (2021-04-01)#
Bug Fixes#
astropy.cosmology#
Fixed an issue where specializations of the comoving distance calculation for certain cosmologies could not handle redshift arrays. [#10980]
astropy.io.fits#
Fix bug where manual fixes to invalid header cards were not preserved when saving a FITS file. [#11108]
astropy.io.votable#
NumericArray
converter now properly broadcasts scalar mask to array. [#11157]
astropy.table#
Fix bug when initializing a
Table
subclass that usesTableAttribute
’s. If the data were an instance of the table then attributes provided in the table initialization call could be ignored. [#11217]
astropy.time#
Change epoch of
TimeUnixTAI
("unix_tai"
) from1970-01-01T00:00:00 UTC
to1970-01-01T00: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#
Fixed a bug with the
quantity_input
decorator where allowing dimensionless inputs for an argument inadvertently disabled any checking of compatible units for that argument. [#11283]
astropy.utils#
Fix a bug so that
np.shape
,np.ndim
andnp.size
again work on classes that useShapedLikeNDArray
, like representations, frames, sky coordinates, and times. [#11133]
astropy.wcs#
Fix error when a user defined
proj_point
parameter is passed tofit_wcs_from_points
. [#11139]
Other Changes and Additions#
Change epoch of
TimeUnixTAI
("unix_tai"
) from1970-01-01T00:00:00 UTC
to1970-01-01T00: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]
Version 4.2 (2020-11-24)#
New Features#
astropy.convolution#
Methods
convolve
andconvolve_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
, ornp.roll
) now work on coordinates, frames, and representations. [#10337]Add a new science state
astropy.coordinates.erfa_astrom.erfa_astrom
and two classesErfaAstrom
,ErfaAstromInterpolator
as wrappers to thepyerfa
astrometric functions used in the coordinate transforms. UsingErfaAstromInterpolator
, which interpolates astrometric properties forSkyCoord
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
, includingrepresentation_type
. [#10727]Avoid an unnecessary call to
erfa.epv00
in transformations betweenCIRS
andICRS
, 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 theTransformGraph
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#
The final version of the Planck 2018 cosmological parameters are included as the
Planck18
object, which is now the default cosmology. The parameters are identical to those of thePlanck18_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 reachingniter
if the masked points are no longer changing. [#10642]Keep a (shallow) copy of
fit_info
from the last iteration of the wrapped fitter inFittingWithOutlierRemoval
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 bymodel.stds
or individually for each parameter byparameter.std
. Currently implemented forLinearLSQFitter
andLevMarLSQFitter
. [#10552]N-dimensional least-squares statistic and specific 1,2,3-D methods [#10670]
astropy.stats#
Added
circstd
function to obtain a circular standard deviation. [#10690]
astropy.table#
Allow initializing a
Table
using a list ofnames
in conjunction with adtype
from a numpy structured array. The list ofnames
overrides the names specified in thedtype
. [#10419]
astropy.time#
Add new
isclose()
method toTime
andTimeDelta
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 likeunix
orcxcsec
(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
, ornp.roll
) now work on times. [#10337, #10502]
astropy.timeseries#
Improve memory and speed performance when iterating over the entire time column of a
TimeSeries
object. Previously this involved O(N^2) operations and memory. [#10889]
astropy.units#
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 newunit
keyword andcheck_free_space_in_dir
takessize
defined asQuantity
. [#10627]New
astropy.utils.data.conf.allow_internet
configuration item to control downloading data from the Internet. Settingallow_internet=False
is the same asremote_timeout=0
. Usingremote_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 forWCSAxes
for a latitude-longitude quadrangle. Unlikematplotlib.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 toSlicedLowLevelWCS
to record information about any world axes removed by slicing a WCS. [#10195]New
WCS.proj_plane_pixel_scales()
andWCS.proj_plane_pixel_area()
methods to return pixel scales and area, respectively, as Quantity. [#10872]
API Changes#
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#
The passing of frame classes (as opposed to frame instances) to the
transform_to()
methods of low-level coordinate-frame classes has been deprecated. Frame classes can still be passed to thetransform_to()
method of the high-levelSkyCoord
class, and usingSkyCoord
is recommended for all typical use cases of transforming coordinates. [#10475]
astropy.stats#
Added a
grow
parameter toSigmaClip
,sigma_clip
andsigma_clipped_stats
, to allow expanding the masking of each deviant value to its neighbours within a specified radius. [#10613]Passing float
n
topoisson_conf_interval
when usinginterval='kraft-burrows-nousek'
now raisesTypeError
as its value must be an integer. [#10838]
astropy.table#
Change
Table.columns.keys()
andTable.columns.values()
to both return generators instead of a list. This matches the behavior for Pythondict
objects. [#10543]Removed the
FastBST
andFastRBT
indexing engines because they depend on thebintrees
package, which is no longer maintained and is deprecated. Instead, use theSCEngine
indexing engine, which is similar in performance and relies on thesortedcontainers
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
orQuantity
, theinfo
attribute is no longer copied. This improves performance, especially when the object is an indexed column in aTable
. [#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
ofdict
may be changed. Previously, the order was alphabetical because thedict
keys were assumed to be in random order. Since Python 3.7, the keys are always in order of insertion, soTable
now uses the order of keys in the first row to set the column order. To alphabetize the columns to match the previous behavior, uset = t[sorted(t.colnames)]
. [#10900]
astropy.time#
Refactor
Time
andTimeDelta
classes to inherit from a commonTimeBase
class. TheTimeDelta
class no longer inherits fromTime
. A number of methods that only apply toTime
(e.g.light_travel_time
) are no longer available in theTimeDelta
class. [#10656]
astropy.units#
The
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
, andIncompatibleShapeError
– have been moved to their own module,astropy.utils.shapes
. They remain importable fromastropy.utils
. [#10337]check_hashes
keyword incheck_download_cache
is deprecated and will be removed in a future release. [#10628]hexdigest
keyword inimport_file_to_cache
is deprecated and will be removed in a future release. [#10628]
Bug Fixes#
astropy.config#
Fix a few issues with
generate_config
when used with other packages. [#10893]
astropy.coordinates#
Fixed a bug in the coordinate-frame attribute
CoordinateAttribute
where the internal transformation could behave differently depending on whether the input was a low-level coordinate frame or a high-levelSkyCoord
.CoordinateAttribute
now always performs aSkyCoord
-style internal transformation, including the by-default merging of frame attributes. [#10475]
astropy.modeling#
Fixed an issue of
Model.render
when the inputout
datatype is not float64. [#10542]
astropy.visualization#
Fix support for referencing WCSAxes coordinates by their world axes names. [#10484]
astropy.wcs#
Objective functions called by
astropy.wcs.fit_wcs_from_points
were treating longitude and latitude distances equally. Now longitude scaled properly. [#10759]
Other Changes and Additions#
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 withimport erfa
. Importing_erfa
fromastropy
will give a deprecation warning. [#10329]Added
optimize=True
flag to calls ofyacc.yacc
(as already done forlex.lex
) to allow running inpython -OO
session without raising an exception inastropy.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]
Version 4.1 (2020-10-21)#
New Features#
astropy.config#
astropy.coordinates#
Added a new
SpectralCoord
class that can be used to define spectral coordinates and transform them between different velocity frames. [#10185]Angle parsing now supports
cardinal direction
in the cases where angles are initialized asstring
instances. eg"17°53'27"W"
.[#9859]Allow in-place modification of array-valued
Frame
andSkyCoord
objects. This provides limited support for updating coordinate data values from another coordinate object of the same class and equivalent frame attributes. [#9857]Added a robust equality operator for comparing
SkyCoord
, frame, and representation objects. A comparison likesc1 == sc2
will now return a boolean or boolean array where the objects are strictly equal in all relevant frame attributes and coordinate representation values. [#10154]Added the True Equator Mean Equinox (TEME) frame. [#10149]
The
Galactocentric
frame will now use the “latest” parameter definitions by default. This currently corresponds to the values defined in v4.0, but will change with future releases. [#10238]The
SkyCoord.from_name()
and Sesame name resolving functionality now is able to cache results locally and will do so by default. [#9162]Allow in-place modification of array-valued
Representation
andDifferential
objects, including of representations with attached differentials. [#10210]
astropy.io.ascii#
Functional Units can now be processed in CDS-tables. [#9971]
Allow reading in ASCII tables which have duplicate column names. [#9939]
Fixed failure of ASCII
fast_reader
to handlenames
,include_names
,exclude_names
arguments forRDB
formatted tables. Homogenised checks and exceptions for invalidnames
arguments. Improved performance when parsing “wide” tables with many columns. [#10306]Added type validation of key arguments in calls to
io.ascii.read()
andio.ascii.write()
functions. [#10005]
astropy.io.misc#
Added serialization of parameter constraints fixed and bounds. [#10082]
Added ‘functional_models.py’ and ‘physical_models.py’ to asdf/tags/transform, with to allow serialization of all functional and physical models. [#10028, #10293]
Fix ASDF serialization of circular model inverses, and remove explicit calls to
asdf.yamlutil
functions that became unnecessary in asdf 2.6.0. [#10189, #10384]
astropy.io.fits#
astropy.io.votable#
astropy.modeling#
Added Plummer1D model to
functional_models
. [#9896]Added
UnitsMapping
model andModel.coerce_units
to support units on otherwise unitless models. [#9936]Added
domain
andwindow
attributes torepr
andstr
. Fixed bug with_format_repr
in core.py. [#9941]Polynomial attributes
domain
andwindow
are now tuples of size 2 and are validated.repr
andprint
show only their non-default values. [#10145]Added
replace_submodel()
method toCompoundModel
to modify an existing instance. [#10176]Delay construction of
CompoundModel
inverse until property is accessed, to support ASDF deserialization of circular inverses in component models. [#10384]
astropy.nddata#
Added support in the
bitmask
module for using mnemonic bit flag names when specifying the bit flags to be used or ignored when converting a bit field to a boolean. [#10095, #10208]Added
reshape_as_blocks
function to reshape a data array into blocks, which is useful to efficiently apply functions on block subsets of the data instead of using loops. The reshaped array is a view of the input data array. [#10214]Added a
cache
keyword option to allow caching forCCDData.read
if filename is a URL. [#10265]
astropy.table#
Added ability to specify a custom matching function for table joins. In particular this makes it possible to do cross-match table joins on
SkyCoord
,Quantity
, or standard columns, where column entries within a specified distance are considered to be matched. [#10169]Added
units
anddescriptions
keyword arguments to the Table object initialization andTable.read()
methods. This allows directly setting theunit
anddescription
for the table columns at the time of creating or reading the table. [#9671]Make table
Row
work as mappings, by adding.keys()
and.values()
methods. With this**row
becomes possible, as does, more simply, turning aRow
into a dictionary withdict(row)
. [#9712]Added two new
Table
methods.items()
and.values()
, which return respectivelytbl.columns.items()
(iterator over name, column tuples) andtbl.columns.values()
(list of columns) for aTable
objecttbl
. [#9780]Added new
Table
method.round()
, which rounds numeric columns to the specified number of decimals. [#9862]Updated
to_pandas()
andfrom_pandas()
to use and support Pandas nullable integer data type for masked integer data. [#9541]The HDF5 writer,
write_table_hdf5()
, now allows passing through additional keyword arguments to theh5py.Group.create_dataset()
. [#9602]Added capability to add custom table attributes to a
Table
subclass. These attributes are persistent and can be set during table creation. [#10097]Added support for
SkyCoord
mixin columns indstack
,vstack
andinsert_row
functions. [#9857]Added support for coordinate
Representation
andDifferential
mixin columns. [#10210]
astropy.time#
Added a new time format
unix_tai
which is essentially Unix time but with leap seconds included. More precisely, this is the number of seconds since1970-01-01 00:00:08 TAI
and corresponds to theCLOCK_TAI
clock available on some linux platforms. [#10081]
astropy.units#
Added
torr
pressure unit. [#9787]Added the
equal_nan
keyword argument toisclose
andallclose
, and updated the docstrings. [#9849]Added
Rankine
temperature unit. [#9916]Added integrated flux unit conversion to
spectral_density
equivalency. [#10015]Changed
pixel_scale
equivalency to allow scales defined in any unit. [#10123]The
quantity_input
decorator now optionally allows passing through numeric values or numpy arrays with numeric dtypes to arguments wheredimensionless_unscaled
is an allowed unit. [#10232]
astropy.utils#
Added a new
MetaAttribute
class to support easily adding custom attributes to a subclass of classes likeTable
orNDData
that have ameta
attribute. [#10097]
astropy.visualization#
astropy.wcs#
WCS objects with a spectral axis will now return
SpectralCoord
objects when callingpixel_to_world
instead ofQuantity
, and can now take eitherQuantity
orSpectralCoord
as input topixel_to_world
. [#10185]Implemented support for the
-TAB
algorithm (WCS Paper III). [#9641]Added an
_as_mpl_axes
method to theHightLevelWCSWrapper
class. [#10138]Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from unintended lower/upper case issues [#10557]
API Changes#
astropy.coordinates#
The equality operator for comparing
SkyCoord
, frame, and representation objects was changed. A comparison likesc1 == sc2
was previously equivalent tosc1 is sc2
. It will now return a boolean or boolean array where the objects are strictly equal in all relevant frame attributes and coordinate representation values. If the objects have different frame attributes or representation types then an exception will be raised. [#10154]`SkyCoord.radial_velocity_correction`
now allows you to pass an`obstime`
directly when the`SkyCoord`
also has an`obstime`
set. In this situation, the position of the`SkyCoord`
has space motion applied to correct to the passed`obstime`
. This allows mm/s radial velocity precision for objects with large space motion. [#10094]For consistency with other astropy classes, coordinate
Representations
andDifferentials
can now be initialized with an instance of their own class if that instance is passed in as the first argument. [#10210]
astropy.io.ascii#
Changed the behavior when reading a table where both the
names
argument is provided (to specify the output column names) and theconverters
argument is provided (to specify column conversion functions). Previously theconverters
dict names referred to the input table column names, but now they refer to the output table column names. [#9739]
astropy.io.votable#
For FIELDs with datatype=”char”, store the values as strings instead of bytes. [#9505]
astropy.table#
Table.from_pandas
now supports aunits
dictionary as argument to pass units for columns in theDataFrame
. [#9472]
astropy.time#
Require that
in_subfmt
andout_subfmt
properties of aTime
object have allowed values at the time of being set, either when creating the object or when setting those properties on an existingTime
instance. Previously the validation of those properties was not strictly enforced. [#9868]
astropy.utils#
Changed the exception raised by
get_readable_fileobj
on missing compression modules (forbz2
orlzma
/xz
support) toModuleNotFoundError
, consistent withio.fits
file handlers. [#9761]
astropy.visualization#
Deprecated the
imshow_only_kwargs
keyword inimshow_norm
. [#9915]Non-finite input values are now automatically excluded in
HistEqStretch
andInvertedHistEqStretch
. [#10177]The
PowerDistStretch
andInvertedPowerDistStretch
a
value is restricted to bea >= 0
in addition toa != 1
. [#10177]The
PowerStretch
,LogStretch
, andInvertedLogStretch
a
value is restricted to bea > 0
. [#10177]The
AsinhStretch
andSinhStretch
a
value is restricted to be0 < a <= 1
. [#10177]
Bug Fixes#
astropy.coordinates#
Fix a bug where for light deflection by the Sun it was always assumed that the source was at infinite distance, which in the (rare and) absolute worst-case scenario could lead to errors up to 3 arcsec. [#10666]
astropy.io.votable#
For FIELDs with datatype=”char”, store the values as strings instead of bytes. [#9505]
astropy.table#
Fix a bug that prevented
Time
columns from being used to sort a table. [#10824]
astropy.wcs#
WCS objects with a spectral axis will now return
SpectralCoord
objects when callingpixel_to_world
instead ofQuantity
(note thatSpectralCoord
is a sub-class ofQuantity
). [#10185]Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from unintended lower/upper case issues [#10557]
Added bounds to
fit_wcs_from_points
to ensure CRPIX is on input image. [#10346]
Other Changes and Additions#
The way in which users can specify whether to build astropy against existing installations of C libraries rather than the bundled one has changed, and should now be done via environment variables rather than setup.py flags (e.g. –use-system-erfa). The available variables are
ASTROPY_USE_SYSTEM_CFITSIO
,ASTROPY_USE_SYSTEM_ERFA
,ASTROPY_USE_SYSTEM_EXPAT
,ASTROPY_USE_SYSTEM_WCSLIB
, andASTROPY_USE_SYSTEM_ALL
. These should be set to1
to build against the system libraries. [#9730]The infrastructure of the package has been updated in line with the APE 17 roadmap (astropy/astropy-APEs). The main changes are that the
python setup.py test
andpython setup.py build_docs
commands will no longer work. The easiest way to replicate these commands is to install the tox (https://tox.readthedocs.io) package and runtox -e test
andtox -e build_docs
. It is also possible to run pytest and sphinx directly. Other significant changes include switching to setuptools_scm to manage the version number, and adding apyproject.toml
to opt in to isolated builds as described in PEP 517/518. [#9726]Bundled
expat
is updated to version 2.2.9. [#10038]Increase minimum asdf version to 2.6.0. [#10189]
The bundled version of PLY was updated to 3.11. [#10258]
Removed dependency on scikit-image. [#10214]
Version 4.0.5 (2021-03-26)#
Bug Fixes#
astropy.io.fits#
Fix bug where manual fixes to invalid header cards were not preserved when saving a FITS file. [#11108]
Fix parsing of RVKC header card patterns that were not recognised where multiple spaces were separating field-specifier and value like “DP1.AXIS.1: 1”. [#11301]
Fix misleading missing END card error when extra data are found at the end of the file. [#11285]
Fix incorrect wrapping of long card values as CONTINUE cards when some words in the value are longer than a single card. [#11304]
astropy.io.misc#
Fixed problem when writing serialized metadata to HDF5 using h5py >= 3.0. With the newer h5py this was writing the metadata table as a variable-length string array instead of the previous fixed-length bytes array. Fixed astropy to force using a fixed-length bytes array. [#11359]
astropy.modeling#
Change
Voigt1D
function to use Humlicek’s approximation to avoid serious inaccuracies + option to use (compiled)scipy.special.wofz
error function for yet more accurate results. [#11177]
astropy.table#
Fixed bug when initializing a
Table
with a column as list ofQuantity
, for exampleTable({'x': [1*u.m, 2*u.m]})
. Previously this resulted in anobject
dtype with no columnunit
set, but now gives a float array with the correct unit. [#11329]Fixed byteorder conversion in
to_pandas()
, which had incorrectly triggered swapping when native endianness was stored with explicitdtype
code'<'
(or'>'
) instead of'='
. [#11288, #11294]Fixed a compatibility issue with numpy 1.21. Initializing a Table with a column like
['str', np.ma.masked]
was failing in tests due to a change in numpy. [#11364]Fixed bug when validating the inputs to
table.hstack
,table.vstack
, andtable.dstack
. Previously, mistakenly callingtable.hstack(t1, t2)
(instead oftable.hstack([t1, t2]))
would returnt1
instead of raising an exception. [#11336]Fixed byteorder conversion in
to_pandas()
, which had incorrectly triggered swapping when native endianness was stored with explicitdtype
code'<'
(or'>'
) instead of'='
. [#11288]
astropy.time#
astropy.units#
astropy.wcs#
Allow “un-setting” of auxiliary WCS parameters in the
aux
attribute ofWcsprm
. [#11166]
Version 4.0.4 (2020-11-24)#
Bug Fixes#
astropy.coordinates#
The
norm()
method forRadialDifferential
no longer requiresbase
to be specified. Thenorm()
method for other non-Cartesian differential classes now gives a clearer error message ifbase
is not specified. [#10969]The transformations between
ICRS
and any of the heliocentric ecliptic frames (HeliocentricMeanEcliptic
,HeliocentricTrueEcliptic
, andHeliocentricEclipticIAU76
) now correctly account for the small motion of the Sun when transforming a coordinate with velocity information. [#10970]
astropy.io.ascii#
Partially fixed a performance issue when reading in parallel mode. Parallel reading currently has substantially worse performance than the default serial reading, so we now ignore the parallel option and fall back to serial reading. [#10880]
Fixed a bug where “” (blank string) as input data for a boolean type column was causing an exception instead of indicating a masked value. As a consequence of the fix, the values “0” and “1” are now also allowed as valid inputs for boolean type columns. These new allowed values apply for both ECSV and for basic character-delimited data files (‘basic’ format with appropriate
converters
specified). [#10995]
astropy.modeling#
Fixed use of weights with
LinearLSQFitter
. [#10687]
astropy.stats#
Fixed an issue in biweight stats when MAD=0 to give the same output with and without an input
axis
. [#10912]
astropy.time#
Fix a problem with the
plot_date
format for matplotlib >= 3.3 caused by a change in the matplotlib plot date default reference epoch in that release. [#10876]Improve initialization time by a factor of four when creating a scalar
Time
object in a format likeunix
orcxcsec
(time delta from a reference epoch time). [#10406]
astropy.visualization#
Fixed the calculation of the tight bounding box of a
WCSAxes
. This should also significantly improve the application oftight_layout()
to figures containingWCSAxes
. [#10797]
Version 4.0.3 (2020-10-14)#
Bug Fixes#
astropy.table#
Fixed a small bug where initializing an empty
Column
with a structured dtype with a length and a shape failed to give the requested dtype. [#10819]
Other Changes and Additions#
Version 4.0.2 (2020-10-10)#
New Features#
astropy.utils#
astropy.utils.data.download_file
now supports FTPS/FTP over TLS. [#9964]astropy.utils.data
now uses a lock-free mechanism for caching. This new mechanism uses a new cache layout and so ignores caches created using earlier mechanisms (which were causing lockups on clusters). The two cache formats can coexist but do not share any files. [#10437, #10683]astropy.utils.data
now ignores the config itemastropy.utils.data.conf.download_cache_lock_attempts
since no locking is done. [#10437, #10683]astropy.utils.data.download_file
and related functions now interpret the parameter or config file settingtimeout=0
to mean they should make no attempt to download files. [#10437, #10683]astropy.utils.import_file_to_cache
now accepts a keyword-only argumentreplace
, defaulting to True, to determine whether it should replace existing files in the cache, in a way as close to atomic as possible. [#10437, #10683]astropy.utils.data.download_file
and related functions now treathttp://example.com
andhttp://example.com/
as equivalent. [#10631]
astropy.wcs#
Bug fixes#
astropy.config#
Added an extra fallback to
os.expanduser('~')
when trying to find the user home directory. [#10570]
astropy.constants#
Corrected definition of parsec to 648 000 / pi AU following IAU 2015 B2 [#10569]
astropy.convolution#
Fixed a bug where a float-typed integers in the argument
x_range
ofastropy.convolution.utils.discretize_oversample_1D
(and the 2D version as well) fails because it usesnumpy.linspace
, which requires anint
. [#10696]
astropy.coordinates#
Ensure that for size-1 array
SkyCoord
and coordinate frames the attributes also properly become scalars when indexed with 0. [#10113]Fixed a bug where
SkyCoord.separation()
andSkyCoord.separation_3d
were not accepting a frame object. [#10332]Ensure that the
lon
values inSkyOffsetFrame
are wrapped correctly at 180 degree regardless of how the underlying data is represented. [#10163]Fixed an error in the obliquity of the ecliptic when transforming to/from the
*TrueEcliptic
coordinate frames. The error would primarily result in an inaccuracy in the ecliptic latitude on the order of arcseconds. [#10129]Fixed an error in the computation of the location of solar system bodies where the Earth location of the observer was ignored during the correction for light travel time. [#10292]
Ensure that coordinates with proper motion that are transformed to other coordinate frames still can be represented properly. [#10276]
Improve the error message given when trying to get a cartesian representation for coordinates that have both proper motion and radial velocity, but no distance. [#10276]
Fixed an error where
SkyCoord.apply_space_motion
would return incorrect results when no distance is set and proper motion is high. [#10296]Make the parsing of angles thread-safe so that
Angle
can be used in Python multithreading. [#10556]Fixed reporting of
EarthLocation.info
which previously raised an exception. [#10592]
astropy.io.ascii#
Fixed a bug with the C
fast_reader
not correctly parsing newlines whendelimiter
was also set to\n
or\r
; ensured consistent handling of input strings without newline characters. [#9929]
astropy.io.fits#
Fix integer formats of
TFORMn=Iw
columns in ASCII tables to correctly read values exceeding int32 - setting int16, int32 or int64 according tow
. [#9901]Fix unclosed memory-mapped FITS files in
FITSDiff
when difference found. [#10159]Fix crash when reading an invalid table file. [#10171]
Fix duplication issue when setting a keyword ending with space. [#10482]
Fix ResourceWarning with
fits.writeto
andpathlib.Path
object. [#10599]Fix repr for commentary cards and strip spaces for commentary keywords. [#10640]
Fix compilation of cfitsio with Xcode 12. [#10772]
Fix handling of 1-dimensional arrays with a single element in
BinTableHDU
[#10768]
astropy.io.misc#
astropy.io.registry#
Fix
Table.(read|write).help
when reader or writer has no docstring. [#10460]
astropy.io.votable#
Fixed parsing failure of VOTable with no fields. When detecting a non-empty table with no fields, the following warning/exception is issued: E25 “No FIELDs are defined; DATA section will be ignored.” [#10192]
astropy.modeling#
Fixed a problem with mapping
input_units
andreturn_units
of aCompoundModel
to the units of the constituent models. [#10158]Removed hard-coded names of inputs and outputs. [#10174]
Fixed a problem where slicing a
CompoundModel
by name will crash if therefix_inputs
operators are present. [#10224]Removed a limitation of fitting of data with units with compound models without units when the expression involves operators other than addition and subtraction. [#10415]
Fixed a problem with fitting
Linear1D
andPlanar2D
in model sets. [#10623]Fixed reported module name of
math_functions
model classes. [#10694]Fixed reported module name of
tabular
model classes. [#10709]Do not create new
math_functions
models for ufuncs that are only aliases (divide and mod). [#10697]Fix calculation of the
Moffat2D
derivative with respect to gamma. [#10784]
astropy.stats#
Fixed an API regression where
SigmaClip.__call__
would convert masked elements tonan
and upcast the dtype tofloat64
in its outputMaskedArray
when using theaxis
parameter along with the defaultsmasked=True
andcopy=True
. [#10610]Fixed an issue where fully masked
MaskedArray
input tosigma_clipped_stats
gave incorrect results. [#10099]Fixed an issue where
sigma_clip
andSigmaClip.__call__
would return a masked array instead of andarray
whenmasked=False
and the input was a full-maskedMaskedArray
. [#10099]Fixed bug with
funcs.poisson_conf_interval
where an integer for N withinterval='kraft-burrows-nousek'
would throw an error with mpmath backend. [#10427]Fixed bug in
funcs.poisson_conf_interval
withinterval='kraft-burrows-nousek'
where certain combinations of source and background count numbers led toValueError
due to the choice of starting value for numerical optimization. [#10618]
astropy.table#
Fixed a bug when writing a table with mixin columns to FITS, ECSV or HDF5. If one of the data attributes of the mixin (e.g.
skycoord.ra
) had the same name as one of the table column names (ra
), the column (ra
) would be dropped when reading the table back. [#10222]Fixed a bug when sorting an indexed table on the indexed column after first sorting on another column. [#10103]
Fixed a bug in table argsort when called with
reverse=True
for an indexed table. [#10103]Fixed a performance regression introduced in #9048 when initializing a table from Python lists. Also fixed incorrect behavior (for data types other than float) when those lists contain
np.ma.masked
elements to indicate masked data. [#10636]Avoid modifying
.meta
when serializing columns to FITS. [#10485]Avoid crash when reading a FITS table that contains mixin info and PyYAML is missing. [#10485]
astropy.time#
Ensure that for size-1 array
Time
, the location also properly becomes a scalar when indexed with 0. [#10113]
astropy.units#
Refined test_parallax to resolve difference between 2012 and 2015 definitions. [#10569]
astropy.utils#
astropy.visualization#
astropy.wcs#
Other Changes and Additions#
Improved the speed of sorting a large
Table
on a single column by a factor of around 5. [#10103]Ensure that astropy can be used inside Application bundles built with pyinstaller. [#8795]
Updated the bundled CFITSIO library to 3.49. See
cextern/cfitsio/docs/changes.txt
for additional information. [#10256, #10665]extract_array
raises aValueError
if the data type of the input array is inconsistent with thefill_value
. [#10602]
Version 4.0.1 (2020-03-27)#
Bug fixes#
astropy.config#
Fixed a bug where importing a development version of a package that uses
astropy
configuration system can result in a~/.astropy/config/package..cfg
file. [#9975]
astropy.coordinates#
Fixed a bug where a vestigal trace of a frame class could persist in the transformation graph even after the removal of all transformations involving that frame class. [#9815]
Fixed a bug with
TransformGraph.remove_transform()
when the “from” and “to” frame classes are not explicitly specified. [#9815]Read-only longitudes can now be passed in to
EarthLocation
even if they include angles outside of the range of -180 to 180 degrees. [#9900]`SkyCoord.radial_velocity_correction`
no longer raises an Exception when space motion information is present on the SkyCoord. [#9980]
astropy.io#
Fixed a bug that prevented the unified I/O infrastructure from working with datasets that are represented by directories rather than files. [#9866]
astropy.io.ascii#
Fixed a bug in the
fast_reader
C parsers incorrectly returning entries of isolated positive/negative signs asfloat
instead ofstr
. [#9918]Fixed a segmentation fault in the
fast_reader
C parsers when parsing an invalid file withguess=True
and the file contains inconsistent column numbers in combination with a quoted field; e.g.,"1 2\n 3 4 '5'"
. [#9923]Magnitude, decibel, and dex can now be stored in
ecsv
files. [#9933]
astropy.io.misc#
Magnitude, decibel, and dex can now be stored in
hdf5
files. [#9933]Fixed serialization of polynomial models to include non default values of domain and window values. [#9956, #9961]
Fixed a bug which affected overwriting tables within
hdf5
files. Overwriting an existing path with associated column meta data now also overwrites the meta data associated with the table. [#9950]Fixed serialization of Time objects with location under time-1.0.0 ASDF schema. [#9983]
astropy.io.fits#
Fix regression with
GroupsHDU
which needs to modify the header to handle invalid headers, and fix accessing.data
for empty HDU. [#9711, #9934]Fix
fitsdiff
when its arguments are directories that contain other directories. [#9711]Fix writing noncontiguous data to a compressed HDU. [#9958]
Added verification of
disp
(TDISP
) keyword tofits.Column
and extended tests forTFORM
andTDISP
validation. [#9978]Fix checksum verification to process all HDUs instead of only the first one because of the lazy loading feature. [#10012]
Allow passing
output_verify
to.close
when using the context manager. [#10030]Prevent instantiation of
PrimaryHDU
andImageHDU
with a scalar. [#10041]Fix column access by attribute with FITS_rec: columns with scaling or columns from ASCII tables where not properly converted when accessed by attribute name. [#10069]
astropy.io.misc#
Magnitude, decibel, and dex can now be stored in
hdf5
files. [#9933]Fixed serialization of polynomial models to include non default values of domain and window values. [#9956, #9961]
Fixed a bug which affected overwriting tables within
hdf5
files. Overwriting an existing path with associated column meta data now also overwrites the meta data associated with the table. [#9950]Fixed serialization of Time objects with location under time-1.0.0 ASDF schema. [#9983]
astropy.modeling#
Fixed a bug in setting default values of parameters of orthonormal polynomials when constructing a model set. [#9987]
astropy.table#
Fixed bug in
Table.reverse
for tables that contain non-mutable mixin columns (likeSkyCoord
) for which in-place item update is not allowed. [#9839]Tables containing Magnitude, decibel, and dex columns can now be saved to
ecsv
files. [#9933]Fixed bug where adding or inserting a row fails on a table with an index defined on a column that is not the first one. [#10027]
Ensured that
table.show_in_browser
also worked for mixin columns likeTime
andSkyCoord
. [#10068]
astropy.time#
Fix inaccuracy when converting between TimeDelta and datetime.timedelta. [#9679]
Fixed exception when changing
format
in the case whenout_subfmt
is defined and is incompatible with the new format. [#9812]Fixed exceptions in
Time.to_value()
: when supplying anysubfmt
argument for string-based formats like ‘iso’, and forsubfmt='long'
for the formats ‘byear’, ‘jyear’, and ‘decimalyear’. [#9812]Fixed bug where the location attribute was lost when creating a new
Time
object from an existingTime
or list ofTime
objects. [#9969]Fixed a bug where an exception occurred when creating a
Time
object if theval1
argument was a regular double and theval2
argument was alongdouble
. [#10034]
astropy.timeseries#
Fixed issue with reference time for the
transit_time
parameter returned by theBoxLeastSquares
periodogram. Now, thetransit_time
will be within the range of the input data and arbitrary time offsets/zero points no longer affect results. [#10013]
astropy.units#
Fix for
quantity_input
annotation raising an exception on iterable types that don’t define a general__contains__
for checking ifNone
is contained (e.g. Enum as of python3.8), by instead checking for instance of Sequence. [#9948]Fix for
u.Quantity
not taking into accountndmin
if constructed from anotheru.Quantity
instance with different but convertible unit [#10066]
astropy.utils#
Fixed
deprecated_renamed_argument
not passing in user value to deprecated keyword when the keyword has no new name. [#9981]Fixed
deprecated_renamed_argument
not issuing a deprecation warning when deprecated keyword without new name is passed in as positional argument. [#9985]Fixed detection of read-only filesystems in the caching code. [#10007]
astropy.visualization#
Fixed bug from matplotlib >=3.1 where an empty Quantity array is sent for unit conversion as an empty list. [#9848]
Fix bug in
ZScaleInterval
to return the array minimum and maximum when there are less thenmin_npixels
in the input array. [#9913]Fix a bug in simplifying axis labels that affected non-rectangular frames. [#8004, #9991]
Other Changes and Additions#
Version 4.0 (2019-12-16)#
New Features#
astropy.config#
The config and cache directories and the name of the config file are now customizable. This allows affiliated packages to put their configuration files in locations other than
CONFIG_DIR/.astropy/
. [#8237]
astropy.constants#
astropy.convolution#
astropy.coordinates#
Changed
coordinates.solar_system_ephemeris
to also accept local files as input. The ephemeris can now be selected by either keyword (e.g. ‘jpl’, ‘de430’), URL or file path. [#8767]Added a
cylindrical
property toSkyCoord
for shorthand access to aCylindricalRepresentation
of the coordinate, as is already available for other common representations. [#8857]The default parameters for the
Galactocentric
frame are now controlled by aScienceState
subclass,galactocentric_frame_defaults
. New parameter sets will be added to this object periodically to keep up with ever-improved measurements of the solar position and motion. [#9346]Coordinate frame classes can now have multiple aliases by assigning a list of aliases to the class variable
name
. Any of the aliases can be used for attribute-style access or as the target oftranform_to()
calls. [#8834]Passing a NaN to
Distance
no longer raises a warning. [#9598]
astropy.cosmology#
The pre-publication Planck 2018 cosmological parameters are included as the
Planck2018_arXiv_v2
object. Please note that the values are preliminary, and when the paper is accepted a final version will be included asPlanck18
. [#8111]
astropy.io.ascii#
Removed incorrect warnings on
Overflow
when reading inFloatType
0.0 withuse_fast_converter
; synchronisedIntType
Overflow
warning messages. [#9082]
astropy.io.misc#
astropy.io.fits#
astropy.io.votable#
Support VOTable version 1.4. The main addition is the new element, TIMESYS, which allows defining of metadata for temporal coordinates much like COOSYS defines metadata for celestial coordinates. [#9475]
astropy.logger#
Added a configuration option to specify the text encoding of the log file, with the default behavior being the platform-preferred encoding. [#9203]
astropy.modeling#
Major rework of modeling internals. See modeling documentation for details. . [#8769]
Add
Tabular1D.inverse
. [#9083]Model.rename
was changed to add the ability to renameModel.inputs
andModel.outputs
. [#9220]New function
fix_inputs
to generate new models from others by fixing specific inputs variable values to constants. [#9135]inputs
andoutputs
are now model instance attributes, andn_inputs
andn_outputs
are class attributes. Backwards compatible default values ofinputs
andoutputs
are generated.Model.inputs
andModel.outputs
are now settable which allows renaming them on per user case. [#9298]Add a new model representing a sequence of rotations in 3D around an arbitrary number of axes. [#9369]
Add many of the numpy ufunc functions as models. [#9401]
Add
BlackBody
model. [#9282]Add
Drude1D
model. [#9452]Added analytical King model (KingProjectedAnalytic1D). [#9084]
Added Exponential1D and Logarithmic1D models. [#9351]
astropy.nddata#
Add a way for technically invalid but unambiguous units in a fits header to be parsed by
CCDData
. [#9397]NDData
now only accepts WCS objects which implement either the high, or low level APE 14 WCS API. All WCS objects are converted to a high level WCS object, soNDData.wcs
now always returns a high level APE 14 object. Not all array slices are valid for wcs objects, so some slicing operations which used to work may now fail. [#9067]
astropy.stats#
The
biweight_location
,biweight_scale
, andbiweight_midvariance
functions now allow for theaxis
keyword to be a tuple of integers. [#9309]Added an
ignore_nan
option to thebiweight_location
,biweight_scale
, andbiweight_midvariance
functions. [#9457]A numpy
MaskedArray
can now be input to thebiweight_location
,biweight_scale
, andbiweight_midvariance
functions. [#9466]Removed the warning related to p0 in the Bayesian blocks algorithm. The caveat related to p0 is described in the docstring for
Events
. [#9567]
astropy.table#
Improved the implementation of
Table.replace_column()
to provide a speed-up of 5 to 10 times for wide tables. The method can now accept any input which convertible to a column of the correct length, not justColumn
subclasses. [#8902]Improved the implementation of
Table.add_column()
to provide a speed-up of 2 to 10 (or more) when adding a column to tables, with increasing benefit as the number of columns increases. The method can now accept any input which is convertible to a column of the correct length, not justColumn
subclasses. [#8933]Changed the implementation of
Table.add_columns()
to use the newTable.add_column()
method. In most cases the performance is similar or slightly faster to the previous implementation. [#8933]MaskedColumn.data
will now return a plainMaskedArray
rather than the previous (unintended)masked_BaseColumn
. [#8855]Added depth-wise stacking
dstack()
in higher level table operation. It help will in stacking table column depth-wise. [#8939]Added a new table equality method
values_equal()
which allows comparison table values to another table, list, or value, and returns an element-by-element equality table. [#9068]Added new
join_type='cartesian'
option to thejoin
operation. [#9288]Allow adding a table column as a list of mixin-type objects, for instance
t['q'] = [1 * u.m, 2 * u.m]
. [#9165]Allow table
join()
using any sortable key column (e.g. Time), not just ndarray subclasses. A column is considered sortable if there is a<column>.info.get_sortable_arrays()
method that is implemented. [#9340]Added
Table.iterrows()
for making row-wise iteration faster. [#8969]Allow table to be initialized with a list of dict where the dict keys are not the same in every row. The table column names are the set of all keys found in the input data, and any missing key/value pairs are turned into missing data in the table. [#9425]
Prevent unnecessary ERFA warnings when indexing by
Time
columns. [#9545]Added support for sorting tables which contain non-mutable mixin columns (like
SkyCoord
) for which in-place item update is not allowed. [#9549]Ensured that inserting
np.ma.masked
(or any other value with a mask) into aMaskedColumn
causes a masked entry to be inserted. [#9623]Fixed a bug that caused an exception when initializing a
MaskedColumn
from anotherMaskedColumn
that has a structured dtype. [#9651]
astropy.tests#
The plugin that handles the custom header in the test output has been moved to the
pytest-astropy-header plugin
package. See the README at for information about using this new plugin. [#9214]
astropy.time#
Added a new time format
ymdhms
for representing times via year, month, day, hour, minute, and second attributes. [#7644]TimeDelta
gained ato_value
method, so that it becomes easier to use it wherever aQuantity
with units of time could be used. [#8762]Made scalar
Time
andTimeDelta
objects hashable based on JD, time scale, and location attributes. [#8912]Improved error message when bad input is used to initialize a
Time
orTimeDelta
object and the format is specified. [#9296]Allow numeric time formats to be initialized with numpy
longdouble
,Decimal
instances, and strings. One can select just one of these usingin_subfmt
. The output can be similarly set usingout_subfmt
. [#9361]Introduce a new
.to_value()
method forTime
(and adjusted the existing method forTimeDelta
) so that one can get values in a givenformat
and possiblesubfmt
(e.g.,to_value('mjd', 'str')
. [#9361]Prevent unnecessary ERFA warnings when sorting
Time
objects. [#9545]
astropy.timeseries#
Adding
epoch_phase
,wrap_phase
andnormalize_phase
keywords toTimeSeries.fold()
to control the phase of the epoch and to return normalized phase rather than time for the folded TimeSeries. [#9455]
astropy.uncertainty#
Distribution
was rewritten such that it deals better with subclasses. As a result, Quantity distributions now behave correctly withto
methods yielding new distributions of the kind expected for the starting distribution, andto_value
yieldingNdarrayDistribution
instances. [#9429, #9442]The
pdf_*
properties that were used to calculate statistical properties ofDistrubution
instances were changed into methods. This allows one to pass parameters such asddof
topdf_std
andpdf_var
(which generally should equal 1 instead of the default 0), and reflects that these are fairly involved calculations, not just “properties”. [#9613]
astropy.units#
Support for unicode parsing. Currently supported are superscripts, Ohm, Ångström, and the micro-sign. [#9348]
Accept non-unit type annotations in @quantity_input. [#8984]
For numpy 1.17 and later, the new
__array_function__
protocol is used to ensure that all top-level numpy functions interact properly withQuantity
, preserving units also in operations likenp.concatenate
. [#8808]Add equivalencies for surface brightness units to spectral_density. [#9282]
astropy.utils#
astropy.utils.data.download_file
andastropy.utils.data.get_readable_fileobj
now provides anhttp_headers
keyword to pass in specific request headers for the download. It also now defaults to providingUser-Agent: Astropy
andAccept: */*
headers. The defaultUser-Agent
value can be set with a newastropy.data.conf.default_http_user_agent
configuration item. [#9508, #9564]Added a new
astropy.utils.misc.unbroadcast
function which can be used to return the smallest array that can be broadcasted back to the initial array. [#9209]The specific IERS Earth rotation parameter table used for time and coordinate transformations can now be set, either in a context or per session, using
astropy.utils.iers.earth_rotation_table
. [#9244]Added
export_cache
andimport_cache
to permit transporting downloaded data to machines with no Internet connection. Several new functions are available to investigate the cache contents; e.g.,check_download_cache
can be used to confirm that the persistent cache has not become damaged. [#9182]A new
astropy.utils.iers.LeapSeconds
class has been added to track leap seconds. [#9365]
astropy.visualization#
Added a new
time_support
context manager/function for making it easy to plot and formatTime
objects in Matplotlib. [#8782]Added support for plotting any WCS compliant with the generalized (APE 14) WCS API with WCSAxes. [#8885, #9098]
Improved display of information when inspecting
WCSAxes.coords
. [#9098]Improved error checking for the
slices=
argument toWCSAxes
. [#9098]Added support for more solar frames in WCSAxes. [#9275]
Add support for one dimensional plots to
WCSAxes
. [#9266]Add a
get_format_unit
towcsaxes.CoordinateHelper
. [#9392]WCSAxes
now, by default, sets a default label for plot axes which is the WCS physical type (and unit) for that axis. This can be disabled using thecoords[i].set_auto_axislabel(False)
or by explicitly setting an axis label. [#9392]Fixed the display of tick labels when plotting all sky images that have a coord_wrap less than 360. [#9542]
astropy.wcs#
Added a
astropy.wcs.wcsapi.pixel_to_pixel
function that can be used to transform pixel coordinates in one dataset with a WCS to pixel coordinates in another dataset with a different WCS. This function is designed to be efficient when the input arrays are broadcasted views of smaller arrays. [#9209]Added a
local_partial_pixel_derivatives
function that can be used to determine a matrix of partial derivatives of each world coordinate with respect to each pixel coordinate. [#9392]Updated wcslib to v6.4. [#9125]
Improved the
SlicedLowLevelWCS
class inastropy.wcs.wcsapi
to avoid storing chains of nestedSlicedLowLevelWCS
objects when applying multiple slicing operations in turn. [#9210]Added a
wcs_info_str
function toastropy.wcs.wcsapi
to show a summary of an APE-14-compliant WCS as a string. [#8546, #9207]Added two new optional attributes to the APE 14 low-level WCS:
pixel_axis_names
andworld_axis_names
. [#9156]Updated the WCS class to now correctly take and return
Time
objects in the high-level APE 14 API (e.g.pixel_to_world
. [#9376]SlicedLowLevelWCS
now raisesIndexError
rather thanValueError
on an invalid slice. [#9067]Added
fit_wcs_from_points
function toastropy.wcs.utils
. Fits a WCS object to set of matched detector/sky coordinates. [#9469]Fix various bugs in
SlicedLowLevelWCS
when the WCS being sliced was one dimensional. [#9693]
API Changes#
astropy.constants#
Deprecated
set_enabled_constants
context manager. Useastropy.physical_constants
andastropy.astronomical_constants
. [#9025]
astropy.convolution#
astropy.coordinates#
Removed the
recommended_units
attribute from Representations; it was deprecated since 3.0. [#8892]Removed the deprecated frame attribute classes,
FrameAttribute
,TimeFrameAttribute
,QuantityFrameAttribute
,CartesianRepresentationFrameAttribute
; deprecated since 3.0. [#9326]Removed
longitude
andlatitude
attributes fromEarthLocation
; deprecated since 2.0. [#9326]The
DifferentialAttribute
for frame classes now passes through any input to theallowed_classes
if only one allowed class is specified, i.e. this now allows passing a quantity in for frame attributes that useDifferentialAttribute
. [#9325]Removed the deprecated
galcen_ra
andgalcen_dec
attributes from theGalactocentric
frame. [#9346]
astropy.extern#
Remove the bundled
six
module. [#8315]
astropy.io.ascii#
Masked column handling has changed, see
astropy.table
entry below. [#8789]
astropy.io.misc#
astropy.io.fits#
Masked column handling has changed, see
astropy.table
entry below. [#8789]io.fits.Header
has been made safe for subclasses for copying and slicing. As a result of this change, the private subclassCompImageHeader
now always should be passed an explicitimage_header
. [#9229]Removed the deprecated
tolerance
option infitsdiff
andio.fits.diff
classes. [#9520]Removed deprecated keyword arguments for
CompImageHDU
:compressionType
,tileSize
,hcompScale
,hcompSmooth
,quantizeLevel
. [#9520]
astropy.io.votable#
Changed
pedantic
argument toverify
and change it to have three string-based options (ignore
,warn
, andexception
) instead of just being a boolean. In addition, changed default toignore
, which means that warnings will not be shown by default when loading VO tables. [#8715]
astropy.modeling#
Eliminates support for compound classes (but not compound instances!) [#8769]
Slicing compound models more restrictive. [#8769]
Shape of parameters now includes n_models as dimension. [#8769]
Parameter instances now hold values instead of models. [#8769]
Compound model parameters now share instance and value with constituent models. [#8769]
No longer possible to assign slices of parameter values to model parameters attribute (it is possible to replace it with a complete array). [#8769]
Many private attributes and methods have changed (see documentation). [#8769]
Deprecated
BlackBody1D
model andblackbody_nu
andblackbody_lambda
functions. [#9282]The deprecated
rotations.rotation_matrix_from_angle
was removed. [#9363]Deprecated and renamed
MexicanHat1D
andMexicanHat2D
toRickerWavelet1D
andRickerWavelet2D
. [#9445]Deprecated
modeling.utils.ExpressionTree
. [#9576]
astropy.stats#
Removed the
iters
keyword from sigma clipping stats functions. [#8948]Renamed the
a
parameter todata
in biweight stat functions. [#8948]Renamed the
a
parameter todata
inmedian_absolute_deviation
. [#9011]Renamed the
conflevel
keyword toconfidence_level
inpoisson_conf_interval
. Usage ofconflevel
now issuesAstropyDeprecationWarning
. [#9408]Renamed the
conf
keyword toconfidence_level
inbinom_conf_interval
andbinned_binom_proportion
. Usage ofconf
now issuesAstropyDeprecationWarning
. [#9408]Renamed the
conf_lvl
keyword toconfidence_level
injackknife_stats
. Usage ofconf_lvl
now issuesAstropyDeprecationWarning
. [#9408]
astropy.table#
The handling of masked columns in the
Table
class has changed in a way that may impact program behavior. Now aTable
withmasked=False
may contain bothColumn
andMaskedColumn
objects, and adding a masked column or row to a table no longer “upgrades” the table and columns to masked. This means that tables with masked data which are read viaTable.read()
will now always havemasked=False
, though specific columns will be masked as needed. Two new table propertieshas_masked_columns
andhas_masked_values
were added. See the Masking change in astropy 4.0 section within for details. [#8789]Table operation functions such as
join
,vstack
,hstack
, etc now always return a table withmasked=False
, though the individual columns may be masked as necessary. [#8957]Changed implementation of
Table.add_column()
andTable.add_columns()
methods. Now it is possible add any object(s) which can be converted or broadcasted to a valid column for the table.Table.__setitem__
now just callsadd_column
. [#8933]Changed default table configuration setting
replace_warnings
from['slice']
to[]
. This removes the default warning when replacing a table column that is a slice of another column. [#9144]Removed the non-public method
astropy.table.np_utils.recarray_fromrecords
. [#9165]
astropy.tests#
In addition to
DeprecationWarning
, nowFutureWarning
andImportWarning
would also be turned into exceptions. [#8506]warnings_to_ignore_by_pyver
option inenable_deprecations_as_exceptions()
has changed. Please refer to API documentation. [#8506]Default settings for
warnings_to_ignore_by_pyver
are updated to remove very old warnings that are no longer relevant and to add a new warning caused bypytest-doctestplus
. [#8506]
astropy.time#
Time.get_ut1_utc
now uses the auto-updatedIERS_Auto
by default, instead of the bundledIERS_B
file. [#9226]Time formats that do not use
val2
now raise ValueError instead of silently ignoring a provided value. [#9373]Custom time formats can now accept floating-point types with extended precision. Existing time formats raise exceptions rather than discarding extended precision through conversion to ordinary floating-point. [#9368]
Time formats (implemented in subclasses of
TimeFormat
) now have their input and output routines more thoroughly validated, making it more difficult to create damagedTime
objects. [#9375]The
TimeDelta.to_value()
method now can also take theformat
name as its argument, in which case the value will be calculated using theTimeFormat
machinery. For this case, one can also pass asubfmt
argument to retrieve the value in another form thanfloat
. [#9361]
astropy.timeseries#
Keyword
midpoint_epoch
is renamed toepoch_time
. [#9455]
astropy.uncertainty#
Distribution
was rewritten such that it deals better with subclasses. As a result, Quantity distributions now behave correctly withto
methods yielding new distributions of the kind expected for the starting distribution, andto_value
yieldingNdarrayDistribution
instances. [#9442]
astropy.units#
For consistency with
ndarray
, scalarQuantity.value
will now return a numpy scalar rather than a python one. This should help keep track of precision better, but may lead to unexpected results for the rare cases where numpy scalars behave differently than python ones (e.g., taking the square root of a negative number). [#8876]Removed the
magnitude_zero_points
module, which was deprecated in favour ofastropy.units.photometric
since 3.1. [#9353]EquivalentUnitsList
now has a_repr_html_
method to output a HTML table on a call tofind_equivalent_units
in Jupyter notebooks. [#9495]
astropy.utils#
download_file
and related functions now accept a list of fallback sources, and they are able to update the cache at the user’s request. [#9182]Allow
astropy.utils.console.ProgressBarOrSpinner.map
and.map_unordered
to take an argumentmultiprocessing_start_method
to control how subprocesses are started; the different methods (fork
,spawn
, andforkserver
) have different implications in terms of security, efficiency, and behavioural anomalies. The option is useful in particular for cross-platform testing because Windows supports onlyspawn
while Linux defaults tofork
. [#9182]All operations that act on the astropy download cache now take an argument
pkgname
that allows one to specify which package’s cache to use. [#8237, #9182]Removed deprecated
funcsigs
andfutures
fromastropy.utils.compat
. [#8909]Removed the deprecated
astropy.utils.compat.numpy
module. [#8910]Deprecated
InheritDocstrings
as it is natively supported by Sphinx 1.7 or higher. [#8881]Deprecated
astropy.utils.timer
module, which has been moved toastroquery.utils.timer
and will be part ofastroquery
0.4.0. [#9038]Deprecated
astropy.utils.misc.set_locale
function, as it is meant for internal use only. [#9471]The implementation of
data_info.DataInfo
has changed (for a considerable performance boost). Generally, this should not affect simple subclasses, but because the class now uses__slots__
any attributes on the class have to be explicitly given a slot. [#8998]IERS
tables now usenan
to mark missing values (rather than1e20
). [#9226]
astropy.visualization#
Bug Fixes#
astropy.convolution#
Fixed
nan_treatment='interpolate'
option toconvolve_fft
to properly take into accountfill_value
. [#8122]
astropy.coordinates#
The
QuantityAttribute
class now supports a None default value if a unit is specified. [#9345]When
Representation
classes with the same name are defined, this no longer leads to aValueError
, but instead to a warning and the removal of both from the name registry (i.e., one either has to use the class itself to set, e.g.,representation_type
, or refer to the class by its fully qualified name). [#8561]
astropy.io.fits#
astropy.io.votable#
Address issue #8995 by ignoring BINARY2 null mask bits for string values on parsing a VOTable. In this way, the reader should never create masked values for string types. [#9057]
Corrected a spurious warning issued for the
value
attribute of the<OPTION>
element in VOTable, as well as a test that erroneously treated the warning as acceptable. [#9470]
astropy.nddata#
astropy.stats#
astropy.table#
Fix bug where adding a column consisting of a list of masked arrays was dropping the masks. [#9048]
Quantity
columns with custom units can now round-trip via FITS tables, as long as the custom unit is enabled during reading (otherwise, the unit will become anUnrecognizedUnit
). [#9015]Fix bug where string values could be truncated when inserting into a
Column
orMaskedColumn
, or when adding or inserting a row containing string values. [#9559]
astropy.time#
astropy.units#
Ensure that output from test functions of and comparisons between quantities can be stored into pre-allocated output arrays (using
out=array
) [#9273]
astropy.utils#
For the default
IERS_Auto
table, which combines IERS A and B values, the IERS nutation parameters “dX_2000A” and “dY_2000A” are now also taken from the actual IERS B file rather than from the B values stored in the IERS A file. Any differences should be negligible for any practical application, but this may help exactly reproducing results. [#9237]
astropy.visualization#
Calling
WCSAxes.set_axis_off()
now correctly turns off drawing the Axes. [#9411]Fix incorrect transformation behavior in
WCSAxes.plot_coord
and correctly handle when input coordinates are not already in spherical representations. [#8927]Fixed
ImageNormalize
so that when it is initialized withoutdata
it will still use the inputinterval
class. [#9698]Fixed
ImageNormalize
to handle input data with non-finite values. [#9698]
astropy.wcs#
Fix incorrect value returned by
wcsapi.HighLevelWCSWrapper.axis_correlation_matrix
. [#9554]Fix NaN-masking of world coordinates when some but not all of the coordinates were flagged as invalid by WCSLIB. This occurred for example with WCS with >2 dimensions where two of the dimensions were celestial coordinates and pixel coordinates outside of the ‘sky’ were converted to world coordinates - previously all world coordinates were masked even if uncorrelated with the celestial axes, but this is no longer the case. [#9688]
The default WCS to celestial frame mapping for world coordinate systems that specify
TLON
andTLAT
coordinates will now return an ITRS frame with the representation class set toSphericalRepresentation
. This fixes a bug that causedWCS.pixel_to_world
to raise an error for such world coordinate systems. [#9609]FITSWCSAPIMixin
now returns tuples not lists frompixel_to_world
andworld_to_pixel
. [#9678]
Other Changes and Additions#
Versions of Python <3.6 are no longer supported. [#8955]
Matplotlib 2.1 and later is now required. [#8787]
Versions of Numpy <1.16 are no longer supported. [#9292]
Updated the bundled CFITSIO library to 3.470. See
cextern/cfitsio/docs/changes.txt
for additional information. [#9233]The bundled ERFA was updated to version 1.7.0. This is based on SOFA 20190722. This includes a fix to avoid precision loss for negative JDs, and also includes additional routines to allow updates to the leap-second table. [#9323, #9734]
The default server for the IERS data files has been updated to reflect long-term downtime of the canonical USNO server. [#9487, #9508]
Version 3.2.3 (2019-10-27)#
Other Changes and Additions#
Updated IERS A URLs due to USNO prolonged maintenance. [#9443]
Version 3.2.2 (2019-10-07)#
Bug fixes#
astropy.convolution#
Fixed a bug in
discretize_oversample_1D/2D()
fromastropy.convolution.utils
, which might occasionally introduce unexpected oversampling grid dimensions due to a numerical precision issue. [#9293]Fixed a bug [#9168] where having a kernel defined using unitless astropy quantity objects would result in a crash [#9300]
astropy.coordinates#
Fix concatenation of representations for cases where the units were different. [#8877]
Check for NaN values in catalog and match coordinates before building and querying the
KDTree
for coordinate matching. [#9007]Fix sky coordinate matching when a dimensionless distance is provided. [#9008]
Raise a faster and more meaningful error message when differential data units are not compatible with a containing representation’s units. [#9064]
Changed the timescale in ICRS to CIRS from ‘tdb’ to ‘tt’ conversion and vice-versa, as the erfa function that gets called in the process, pnm06a accepts time in TT. [#9079]
astropy.io.ascii#
Fixed the fast reader when used in parallel and with the multiprocessing ‘spawn’ method (which is the default on MacOS X with Python 3.8 and later), and enable parallel fast reader on Windows. [#8853]
astropy.io.fits#
Fixes bug where an invalid TRPOS<n> keyword was being generated for FITS time column when no location was available. [#8784]
Fixed a wrong exception when converting a Table with a unit that is not FITS compliant and not convertible to a string using
format='fits'
. [#8906]Fixed an issue with A3DTABLE extension that could not be read. [#9012]
Fixed the update of the header when creating GroupsHDU from data. [#9216]
astropy.nddata#
Fix to
add_array
, which now acceptsarray_small
having dimensions equal toarray_large
, instead of only allowing smaller sizes of arrays. [#9118]
astropy.stats#
Fixed
median_absolute_deviation
for the case whereignore_nan=True
and an input masked array contained both NaNs and infs. [#9307]
astropy.table#
Comparisons between
Column
instances andQuantity
will now correctly take into account the unit (as was already the case for regular operations such as addition). [#8904]
astropy.time#
astropy.timeseries#
Fixed handling of
Quantity
input data for all methods ofLombScarge.false_alarm_probabilty
. [#9246]
astropy.units#
Allow conversion of
Column
with logarithmic units to a suitableQuantity
subclass ifsubok=True
. [#9188]Ensured that we simplify powers to smaller denominators if that is consistent within rounding precision. [#9267]
Ensured that the powers shown in a unit’s repr are always correct, not oversimplified. [#9267]
astropy.utils#
Fixed
find_api_page
access by using custom request headers and HTTPS when version is specified. [#9032]Make
download_file
(and by extensionget_readable_fileobj
and others) check the size of downloaded files against the size claimed by the server. [#9302]Fix
find_current_module
so that it works properly if astropy is being used inside a bundle such as that produced by PyInstaller. [#8845]Fix path to renamed classes, which previously included duplicate path/module information under certain circumstances. [#8845]
astropy.visualization#
Silence numpy runtime warnings in
WCSAxes
when drawing grids. [#8882]
astropy.wcs#
Fixed equality test between
cunit
where the first element was equal but the following elements differed. [#9154]Fixed a crash while loading a WCS from headers containing duplicate SIP keywords. [#8893]
Fixed a possible buffer overflow when using too large negative indices for
cunit
orctype
[#9151]Fixed reference counting in
WCSBase.__init__
[#9166]Fix
SlicedLowLevelWCS
world_to_pixel_values
andpixel_to_world_values
when inputs need broadcasting to the same shape. (i.e. when one input is sliced out) [#9250]Fixed a bug that caused
WCS.array_shape
,WCS.pixel_shape
andWCS.pixel_bounds
to be incorrect after usingWCS.sub
. [#9095]
Other Changes and Additions#
Fixed a bug that caused files outside of the astropy module directory to be included as package data, resulting in some cases in errors when doing repeated builds. [#9039]
Version 3.2.1 (2019-06-14)#
Bug fixes#
astropy.io.fits#
astropy.table#
Fix a problem where mask was dropped when creating a
MaskedColumn
from a list ofMaskedArray
objects. [#8826]
astropy.wcs#
Added
None
to be displayed as aworld_axis_physical_types
in theWCS
repr, asNone
values are now supported inAPE14
. [#8811]
Version 3.2 (2019-06-10)#
New Features#
astropy.constants#
Add CODATA 2018 constants but not make them default because the redefinition of SI units that will follow has not been implemented yet. [#8595]
astropy.coordinates#
New
BarycentricMeanEcliptic
,HeliocentricTrueEcliptic
andGeocentricTrueEcliptic
frames. The ecliptic frames are no longer considered experimental. [#8394]The default time scale for epochs like ‘J2000’ or ‘B1975’ is now “tt”, which is the correct one for ‘J2000’ and avoids leap-second warnings for epochs in the far future or past. [#8600]
astropy.extern#
Bundled
six
now emitsAstropyDeprecationWarning
. It will be removed in 4.0. [#8323]
astropy.io.ascii#
IPAC tables now output data types of
float
instead ofdouble
, orint
instead oflong
, based on the columndtype.itemsize
. [#8216]Update handling of MaskedColumn columns when using the ‘data_mask’ serialization method. This can make writing ECSV significantly faster if the data do not actually have any masked values. [#8447]
Fixed a bug that caused newlines to be incorrect when writing out ASCII tables on Windows (they were
\r\r\n
instead of\r\n
). [#8659]
astropy.io.misc#
Implement serialization of
TimeDelta
in ASDF. [#8285]Implement serialization of
EarthLocation
in ASDF. [#8286]Implement serialization of
SkyCoord
in ASDF. [#8284]Support serialization of Astropy tables with mixin columns in ASDF. [#8337]
No warnings when reading HDF5 files with only one table and no
path=
argument [#8483]The HDF5 writer will now create a default table instead of raising an exception when
path=
is not specified and when writing to empty/new HDF5 files. [#8553]
astropy.io.fits#
Optimize parsing of cards within the
Header
class. [#8428]Optimize the parsing of headers to get the structural keywords that are needed to find extensions. Thanks to this, getting a random HDU from a file with many extensions is much faster than before, in particular when the extension headers contain many keywords. [#8502]
Change behavior of FITS undefined value in
Header
such thatNone
is used in Python to represent FITS undefined when using dict interface.Undefined
can also be assigned and is translated toNone
. Previously setting a header card value toNone
resulted in an empty string field rather than a FITS undefined value. [#8572]Allow
Header.fromstring
andCard.fromstring
to acceptbytes
. [#8707]
astropy.io.registry#
Implement
Table
reader and writer forASDF
. [#8261]Implement
Table
reader and writer methods to wrappandas
I/O methods for CSV, Fixed width format, HTML, and JSON. [#8381]Add
help()
andlist_formats()
methods to unified I/Oread
andwrite
methods. For exampleTable.read.help()
gives help on availableTable
read formats andTable.read.help('fits')
gives detailed help on the arguments for reading FITS table file. [#8255]
astropy.table#
Initializing a table with
Table(rows=...)
, if the first item is anOrderedDict
, now uses the column order of the first row. [#8587]Added new pprint_all() and pformat_all() methods to Table. These two new methods print the entire table by default. [#8577]
Removed restriction of initializing a Table from a dict with copy=False. [#8541]
Improved speed of table row access by a factor of about 2-3. Improved speed of Table len() by a factor of around 3-10 (depending on the number of columns). [#8494]
Improved the Table - pandas
DataFrame
interface (to_pandas()
andfrom_pandas()
). Mixin columns likeTime
andQuantity
can now be converted to pandas by flattening the columns as necessary to plain columns.Time
andTimeDelta
columns get converted to corresponding pandas date or time delta types. TheDataFrame
index is now handled in the conversion methods. [#8247]Added
rename_columns
method to rename multiple columns in one call. [#5159, #8070]Improved Table performance by reducing unnecessary calls to copy and deepcopy, especially as related to the table and column
meta
attributes. Changed the behavior when slicing a table (either in rows or with a list of column names) so now the sliced output gets a light (key-only) copy ofmeta
instead of a deepcopy. Changed theTable.meta
class-level descriptor so that assigning directly tometa
, e.g.tbl.meta = new_meta
no longer does a deepcopy and instead just directly assigns thenew_meta
object reference. Changed Table initialization so that inputmeta
is copied only ifcopy=True
. [#8404]Improved Table slicing performance with internal implementation changes related to column attribute access and certain input validation. [#8493]
Added
reverse
argument to thesort
andargsort
methods to allow sorting in reverse order. [#8528]Improved
Table.sort()
performance by removingself[keys]
from code which is creating deep copies ofmeta
attribute and adding a new keywordnames
inget_index()
to get index by using a list or tuple containing names of columns. [#8570]Expose
represent_mixins_as_columns
as a public function in theastropy.table
subpackage. This previously-private function in thetable.serialize
module is used to represent mixin columns in a Table as one or more plain Column objects. [#7729]
astropy.timeseries#
Added a new astropy.timeseries sub-package to represent and manipulate sampled and binned time series. [#8540]
The
BoxLeastSquares
andLombScargle
classes have been moved toastropy.timeseries.periodograms
fromastropy.stats
. [#8591]Added the ability to provide absolute
Time
objects to theBoxLeastSquares
andLombScargle
periodogram classes. [#8599]Added model inspection methods (
model_parameters()
,design_matrix()
, andoffset()
) toastropy.timeseries.LombScargle
class [#8397].
astropy.units#
Quantity
overrides ofndarray
methods such assum
,min
,max
, which are implemented via reductions, have been removed since they are dealt with inQuantity.__array_ufunc__
. This should not affect subclasses, but they may consider doing similarly. [#8316] Note that this does not include methods that use more complicated python code such asmean
,std
andvar
. [#8370]
astropy.visualization#
Added
CompositeStretch
, which inherits fromCompositeTransform
and alsoBaseStretch
so that it can be used withImageNormalize
. [#8564]Added a
log_a
argument to thesimple_norm
method. Similar to the exposing of theasinh_a
argument forAsinhStretch
, the newlog_a
argument is now exposed forLogStretch
. [#8436]
astropy.wcs#
WCSLIB was updated to v 6.2. This adds support for time-related WCS keywords (WCS Paper VII). FITS headers containing
Time
axis are parsed and the axis is included in the WCS object. [#8592]The
OBSGEO
attribute as expanded to 6 members -XYZLBH
. [#8592]Added a new class
SlicedLowLevelWCS
inastropy.wcs.wcsapi
that can be used to slice any WCS that conforms to theBaseLowLevelWCS
API. [#8546]Updated implementation of
WCS.__getitem__
andWCS.slice
to now return aSlicedLowLevelWCS
rather than raising an error when reducing the dimensionality of the WCS. [#8546]
API Changes#
astropy.coordinates#
astropy.io.ascii#
IPAC tables now output data types of
float
instead ofdouble
, orint
instead oflong
, based on the columndtype.itemsize
. [#8216]
astropy.io.misc#
Unit equivalencies can now be serialized to ASDF. [#8252]
astropy.modeling#
astropy.stats#
The
BoxLeastSquares
andLombScargle
classes have been moved to theastropy.timeseries.periodograms
module and will now emit a deprecation warning when imported fromastropy.stats
. [#8591]
astropy.table#
Converting an empty table to an array using
as_array
method now returns an empty array instead ofNone
. [#8647]Changed the behavior when slicing a table (either in rows or with a list of column names) so now the sliced output gets a light (key-only) copy of
meta
instead of a deepcopy. Changed theTable.meta
class-level descriptor so that assigning directly tometa
, e.g.tbl.meta = new_meta
no longer does a deepcopy and instead just directly assigns thenew_meta
object reference. Changed Table initialization so that inputmeta
is copied only ifcopy=True
. [#8404]Added a keyword
names
inTable.as_array()
. If provided this specifies a list of column names to include for the returned structured array. [#8532]
astropy.tests#
astropy.time#
The default time scale for epochs like ‘J2000’ or ‘B1975’ is now “tt”, which is the correct one for ‘J2000’ and avoids leap-second warnings for epochs in the far future or past. [#8600]
astropy.units#
Unit equivalencies can now be introspected. [#8252]
astropy.wcs#
The
world_to_pixel
,world_to_array_index*
,pixel_to_world*
andarray_index_to_world*
methods now all consistently return scalars, arrays, or objects not wrapped in a one-element tuple/list when only one scalar, array, or object (as was previously already the case forWCS.pixel_to_world
andWCS.array_index_to_world
). [#8663]
astropy.utils#
It is now possible to control the number of cores used by
ProgressBar.map
by passing a positive integer as themultiprocess
keyword argument. UseTrue
to use all cores. [#8083]
Bug Fixes#
astropy.coordinates#
BarycentricTrueEcliptic
,HeliocentricTrueEcliptic
andGeocentricTrueEcliptic
now use the correct transformation (including nutation), whereas the new*MeanEcliptic
classes use the nutation-free transformation. [#8394]Representations with
float32
coordinates can now be transformed, although the output will always befloat64
. [#8759]Fixed bug that prevented using differentials with HCRS<->ICRS transformations. [#8794]
astropy.io.ascii#
Fixed a bug where an exception was raised when writing a table which includes mixin columns (e.g. a Quantity column) and the output format was specified using the
formats
keyword. [#8681]
astropy.io.misc#
Fixed bug in ASDF tag that inadvertently introduced dependency on
pytest
. [#8456]
astropy.modeling#
astropy.nddata#
Fixed bug in reading multi-extension FITS files written by earlier versions of
CCDData
. [#8534]Fixed two errors in the way
CCDData
handles FITS files with WCS in the header. Some of the WCS keywords that should have been removed from the header were not, potentially leading to FITS files with inconsistent WCS. [#8602]
astropy.table#
Fixed a bug when initializing from an empty list:
Table([])
no longer results in a crash. [#8647]Fixed a bug when initializing from an existing
Table
. In this case the inputmeta
argument was being ignored. Now the inputmeta
, if supplied, will be used as themeta
for the newTable
. [#8404]Fix the conversion of bytes values to Python
str
withTable.tolist
. [#8739]
astropy.time#
Fixed a number of issues to ensure a consistent output type resulting from multiplication or division involving a
TimeDelta
instance. The output is now always aTimeDelta
if the result is a time unit (like u.s or u.d), otherwise it will be aQuantity
. [#8356]Multiplication between two
TimeDelta
instances is now possible, resulting in aQuantity
with units of time squared (division already correctly resulted in a dimensionlessQuantity
). [#8356]Like for comparisons, addition, and subtraction of
Time
instances with with non-time instances, multiplication and division ofTimeDelta
instances with incompatible other instances no longer immediately raise anUnitsError
orTypeError
(depending on the other instance), but rather go through the regular Python mechanism ofTimeDelta
returningNotImplemented
(which will lead to a regularTypeError
unless the other instance can handleTimeDelta
). [#8356]Corrected small rounding errors that could cause the
jd2
values inTime
to fall outside the range of -0.5 to 0.5. [#8763]
astropy.units#
Added a
Quantity.to_string
method to add flexibility to the string formatting of quantities. It produces unadorned or LaTeX strings, and accepts two different sets of delimiters in the latter case:inline
anddisplay
. [#8313]Ensure classes that mimic quantities by having a
unit
attribute and/orto
andto_value
methods can be properly used to initializeQuantity
or setQuantity
instance items. [#8535]Add support for
<<
to create logarithmic units. [#8290]Add support for the
clip
ufunc, which in numpy 1.17 is used to implementnp.clip
. As part of that, remove theQuantity.clip
method under numpy 1.17. [#8747]Fix parsing of numerical powers in FITS-compatible units. [#8251]
astropy.wcs#
Added a
PyUnitListProxy_richcmp
method inUnitListProxy
class to enableWCS.wcs.cunit
equality testing. It helps to check whether the two instances ofWCS.wcs.cunit
are equal or not by comparing the data members ofUnitListProxy
class [#8480]Fixed
SlicedLowLevelWCS
whenarray_shape
isNone
. [#8649]Do not attempt to delete repeated distortion keywords multiple times when loading distortions with
_read_distortion_kw
and_read_det2im_kw
. [#8777]
Other Changes and Additions#
Update bundled expat to 2.2.6. [#8343]
Added instructions for uploading releases to Zenodo. [#8395]
The bug fixes to the behaviour of
TimeDelta
for multiplcation and division, which ensure that the output is now always aTimeDelta
if the result is a time unit (like u.s or u.d) and otherwise aQuantity
, imply that sometimes the output type will be different than it was before. [#8356]For types unrecognized by
TimeDelta
, multiplication and division now will consistently return aTypeError
if the other instance cannot handleTimeDelta
(rather thanUnitsError
orTypeError
depending on presumed abilities of the other instance). [#8356]Multiplication between two
TimeDelta
instances will no longer result in anOperandTypeError
, but rather result in aQuantity
with units of time squared (division already correctly resulted in a dimensionlessQuantity
). [#8356]Made running the tests insensitive to local user configuration when running the tests in parallel mode or directly with pytest. [#8727]
Added a narrative style guide to the documentation for contributor reference. [#8588]
Ensure we call numpy equality functions in a way that reduces the number of
DeprecationWarning
. [#8755]
Installation#
Version 3.1.2 (2019-02-23)#
Bug fixes#
astropy.coordinates#
Convert the default of
QuantityAttribute
, thereby catching the error case case of it being set to None at attribute creation, and giving a more useful error message in the process. [#8300]
astropy.cosmology#
Fix elliptic analytical solution for comoving distance. Only relevant for non-flat cosmologies without radiation and
Om0
>Ode0
. [#8391]
astropy.modeling#
astropy.visualization.wcsaxes#
Version 3.1.1 (2018-12-31)#
Bug fixes#
astropy.io.ascii#
Fix error when writing out empty table. [#8279]
astropy.io.fits#
fitsdiff --ignore-hdus
now prints input filenames in the diff report instead of<HDUList object at 0x1150f9778>
. [#8295]
astropy.units#
Version 3.1 (2018-12-06)#
New Features#
astropy.convolution#
astropy.coordinates#
The
SkyCoord.from_name
constructor now has the ability to create coordinate objects by parsing object catalogue names that have embedded J-coordinates. [#7830]The new function
make_transform_graph_docs
can be used to create a docstring graph from a customTransformGraph
object. [#7135]KDTree
for catalog matching is now built with sliding midpoint rule rather than standard. In code, this means settingcompact_nodes=False
andbalanced_tree=False
incKDTree
. The sliding midpoint rule is much more suitable for catalog matching, and results in 1000x speedup in some cases. [#7324]Additional information about a site loaded from the Astropy sites registry is now available in
EarthLocation.info.meta
. [#7857]Added a
concatenate_representations
function to combine coordinate representation data and any associated differentials. [#7922]BaseCoordinateFrame
will now check for a method named_astropy_repr_in_frame
when constructing the string forms of attributes. Allowing any class to control howBaseCoordinateFrame
represents it when it is an attribute of a frame. [#7745]Some rarely-changed attributes of frame classes are now cached, resulting in speedups (up to 50% in some cases) when creating new scalar frame or
SkyCoord
objects. [#7949, #5952]Added a
directional_offset_by
method toSkyCoord
that computes a new coordinate given a coordinate, position angle, and angular separation [#5727]
astropy.cosmology#
The default cosmology has been changed from
WMAP9
toPlanck15
. [#8123]Distance calculations with
LambaCDM
with no radiation (T_CMB0=0) are now 20x faster by using elliptic integrals for non-flat cases. [#7155]Distance calculations with
FlatLambaCDM
with no radiation (T_CMB0=0) are now 20x faster by using the hypergeometric function solution for this special case. [#7087]Age calculations with
FlatLambdaCDM
with no radiation (Tcmb0=0) are now 1000x faster by using analytic solutions instead of integrating. [#7117]
astropy.io.ascii#
Latex reader now ignores
\toprule
,\midrule
, and\bottomrule
commands. [#7349]Added the RST (Restructured-text) table format and the fast version of the RDB reader to the set of formats that are guessed by default. [#5578]
The read trace (used primarily for debugging) now includes guess argument sets that were skipped entirely e.g. for not supporting user-supplied kwargs. All guesses thus removed from
filtered_guess_kwargs
are now listed as “Disabled” at the beginning of the trace. [#5578]Emit a warning when reading an ECSV file without specifying the
format
and without PyYAML installed. Previously this silently fell through to parsing as a basic format file and the file metadata was lost. [#7580]Optionally allow writing masked columns to ECSV with the mask explicitly specified as a separate column instead of marking masked elements with “” (empty string). This allows handling the case of a masked string column with “” data rows. [#7481]
astropy.io.misc#
Added support for saving all representation classes and many coordinate frames to the asdf format. [#7079]
Added support for saving models with units to the asdf format. [#7237]
Added a new
character_as_bytes
keyword to the HDF5 Table reading function to control whether byte string columns in the HDF5 file are left as bytes or converted to unicode. The default is to read as bytes (character_as_bytes=True
). [#7024, #8017]
astropy.io.fits#
HDUList.pop()
now accepts string and tuple extension name specifications. [#7236]Add an
ignore_hdus
keyword toFITSDiff
to allow ignoring HDUs by NAME when diffing two FITS files [#7538]Optionally allow writing masked columns to FITS with the mask explicitly specified as a separate column instead of using the FITS standard of certain embedded null values (
NaN
for float,TNULL
for integers). This can be used to work around limitations in the FITS standard. [#7481]All time coordinates can now be written to and read from FITS binary tables, including those with vectorized locations. [#7430]
The
fitsheader
command line tool now supports adfits+fitsort
mode, and the dotted notation for keywords (e.g.ESO.INS.ID
). [#7240]Fall back to reading arrays using mode=’denywrite’ if mode=’readonly’ fails when using memory-mapping. This solves cases on some platforms when the available address space was less than the file size (even when using memory mapping). [#7926]
astropy.modeling#
Add a
Multiply
model which preserves unit through evaluate, unlikeScale
which is dimensionless. [#7210]Add a
uses_quantity
property toModel
which allows introspection of if theModel
can acceptQuantity
objects. [#7417]Add a
separability_matrix
function which returns the correlation matrix of inputs and outputs. [#7803]Fixed compatibility of
JointFitter
with the latest version of Numpy. [#7984]Add
prior
andposterior
constraints to modeling parameters. These are not used by any current fitters, but are provided to allow user code to experiment with Bayesian fitters. [#7558]
astropy.nddata#
astropy.stats#
Add an
astropy.stats.bls
module with an implementation of the “box least squares” periodogram that is commonly used for discovering transiting exoplanets and eclipsing binaries. [#7391]
astropy.table#
Added support for full use of
Time
mixin column for join, hstack, and vstack table operations. [#6888]Added a new table index engine,
SCEngine
, based on the Sorted Containers package. [#7574]Add a new keyword argument
serialize_method
toTable.write
to control howTime
andMaskedColumn
columns are written. [#7481]Allow mixin columns to be used in table
group
andunique
functions. This applies to both the key columns and the other data columns. [#7712]Added support for stacking
Column
, mixin column (e.g.Quantity
,Time
) or column-like objects. [#7674]Added support for inserting a row into a Table that has
Time
orTimeDelta
column(s). [#7897]
astropy.tests#
Added an option
--readonly
to the test command to change the permissions on the temporary installation location to read-only. [#7598]
astropy.time#
Allow array-valued
Time
object to be modified in place. [#6028]Added support for missing values (masking) to the
Time
class. [#6028]Added supper for a ‘local’ time scale (for free-running clocks, etc.), and round-tripping to the corresponding FITS time scale. [#7122]
Added
datetime.timedelta
format class forTimeDelta
. [#7441]Added
strftime
andstrptime
methods toTime
class. These methods are similar to those in the Python standard librarytime
package and provide flexible input and output formatting. [#7323]Added
datetime64
format to theTime
class to support working withnumpy.datetime64
dtype arrays. [#7361]Add fractional second support for
strftime
andstrptime
methods ofTime
class. [#7705]Added an
insert
method to allow inserting one or more values into aTime
orTimeDelta
object. [#7897]Remove timescale from string version of FITS format time string. The timescale is not part of the FITS standard and should not be included. This change may cause some compatibility issues for code that relies on round-tripping a FITS format string with a timescale. Strings generated from previous versions of this package are still understood but a DeprecationWarning will be issued. [#7870]
astropy.uncertainty#
This sub-package was added as a “preview” (i.e. API unstable), containing the
Distribution
class and associated convenience functions. [#6945]
astropy.units#
Add complex numbers support for
Quantity._repr_latex_
. [#7676]Add
thermodynamic_temperature
equivalency to convert between Jy/sr and “thermodynamic temperature” for cosmology. [#7054]Add millibar unit. [#7863]
Add maggy and nanomaggy unit, as well as associated
zero_point_flux
equivalency. [#7891]AB
andST
are now enabled by default, and have alternate namesABflux
andSTflux
. [#7891]Added
littleh
unit and associatedwith_H0
equivalency. [#7970]
astropy.visualization#
Added
imshow_norm
function, which combines imshow and creation of aImageNormalize
object. [#7785]
astropy.visualization.wcsaxes#
Add support for setting
set_separator(None)
in WCSAxes to use default separators. [#7570]Added two keyword argument options to
CoordinateHelper.set_format_unit
:decimal
can be used to specify whether to use decimal formatting for the labels (by default this is False for degrees and hours and True otherwise), andshow_decimal_unit
can be used to determine whether the units should be shown for decimal labels. [#7318]Added documentation for
transform=
andcoord_meta=
. [#7698]Allow
coord_meta=
to optionally includeformat_unit=
. [#7848]Add support for more rcParams related to the grid, ticks, and labels, and should work with most built-in Matplotlib styles. [#7961]
Improved rendering of outward-facing ticks. [#7961]
Add support for
tick_params
(which is a standard Matplotlib function/method) on both theWCSAxes
class and the individualCoordinateHelper
classes. Note that this is provided for compatibility with Matplotlib syntax users may be familiar with, but it is not the preferred way to change settings. Instead, methods such asset_ticks
should be preferred. [#7969]Moved the argument
exclude_overlapping
fromset_ticks
toset_ticklabel
. [#7969]Added a
pad=
argument toset_ticklabel
to provide a way to control the padding between ticks and tick labels. [#7969]Added support for setting the tick direction in
set_ticks
using thedirection=
keyword argument. [#7969]
astropy.wcs#
Map ITRS frames to terrestrial WCS coordinates. This will make it possible to use WCSAxes to make figures that combine both celestial and terrestrial features. An example is plotting the coordinates of an astronomical transient over an all- sky satellite image to illustrate the position relative to the Earth at the time of the event. The ITRS frame is identified with WCSs that use the
TLON-
andTLAT-
coordinate types. There are several examples of WCSs where this syntax is used to describe terrestrial coordinate systems: Section 7.4.1 of WCS in FITS “Paper II” and the WCSTools documentation. [#6990]Added the abstract base class for the low-level WCS API described in APE 14 (https://doi.org/10.5281/zenodo.1188875). [#7325]
Add
WCS.footprint_contains()
function to check if the WCS footprint contains a given sky coordinate. [#7273]Added the abstract base class for the high-level WCS API described in APE 14 (https://doi.org/10.5281/zenodo.1188875). [#7325]
Added the high-level wrapper class for low-level WCS objects as described in APE 14 (https://doi.org/10.5281/zenodo.1188875). [#7326]
Added a new property
WCS.has_distortion
. [#7326]Deprecated
_naxis1
and_naxis2
in favor ofpixel_shape
. [#7973]Added compatibility to wcslib version 6. [#8093]
API Changes#
astropy.convolution#
kernel
can now be a tuple. [#7561]Not technically an API changes, however, the doc string indicated that
boundary=None
was the default when actually it isboundary='fill'
. The doc string has been corrected, however, someone may interpret this as an API change not realising that nothing has actually changed. [#7293]interpolate_replace_nans()
can no longer accept the keyword argumentpreserve_nan
. It is explicitly set toFalse
. [#8088]
astropy.coordinates#
Fixed
astropy.coordinates.concatenate
to include velocity data in the concatenation. [#7922]Changed the name of the single argument to
Frame.realize_frame()
from the (incorrect)representation_type
todata
. [#7923]Negative parallaxes passed to
Distance()
now raise an error by default (allow_negative=False
), or are converted to NaN values with a warning (allow_negative=True
). [#7988]Negating a
SphericalRepresentation
object now changes the angular coordinates (by rotating 180º) instead of negating the distance. [#7988]Creation of new frames now generally creates copies of frame attributes, rather than inconsistently either copying or making references. [#8204]
The frame class method
is_equivalent_frame
now checks for equality of components to determine if a frame is the same when it has frame attributes that are representations, rather than checking if they are the same object. [#8218]
astropy.io.ascii#
If a fast reader is explicitly selected (e.g.
fast_reader='force'
) and options which are incompatible with the fast reader are provided (e.g.quotechar='##'
) then now aParameterError
exception will be raised. [#5578]The fast readers will now raise
InconsistentTableError
instead ofCParserError
if the number of data and header columns do not match. [#5578]Changed a number of
ValueError
exceptions toInconsistentTableError
in places where the exception is related to parsing a table which is inconsistent with the specified table format. Note thatInconsistentTableError
inherits fromValueError
so no user code changes are required. [#7425]
astropy.io.fits#
The
fits.table_to_hdu()
function will translate any columnformat
attributes to a TDISPn format string, if possible, and store it as a TDISPn keyword in theHDU
header. [#7226]
astropy.modeling#
Change the order of the return values from
FittingWithOutlierRemoval
, such thatfitted_model
comes first, for consistency with other fitters. For the second value, return only a boolean outliermask
, instead of the previousMaskedArray
(which included a copy of the input data that was both redundant and inadvertently corrupted at masked points). Return a consistent type for the second value whenniter=0
. [#7407]Set the minimum value for the
bolometric_flux
parameter of theBlackBody1D
model to zero. [#7045]
astropy.nddata#
Add two new uncertainty classes,
astropy.nddata.VarianceUncertainty
andastropy.nddata.InverseVariance
. [#6971]
astropy.stats#
String values can now be used for the
cenfunc
andstdfunc
keywords in theSigmaClip
class andsigma_clip
andsigma_clipped_stats
functions. [#7478]The
SigmaClip
class andsigma_clip
andsigma_clipped_stats
functions now have amasked
keyword, which can be used to return either a masked array (default) or an ndarray with the min/max values. [#7478]The
iters
keyword has been renamed (and deprecated) tomaxiters
in theSigmaClip
class andsigma_clip
andsigma_clipped_stats
functions. [#7478]
astropy.table#
astropy.tests#
from astropy.tests.helper import *
no longer includesquantity_allclose
. However,from astropy.tests.helper import quantity_allclose
would still work. [#7381]warnings_to_ignore_by_pyver
option inenable_deprecations_as_exceptions()
now takesNone
as key. Any deprecation message that is mapped toNone
will be ignored regardless of the Python version. [#7790]
astropy.time#
Added the ability to use
local
as time scale inTime
andTimeDelta
. [#6487]Comparisons, addition, and subtraction of
Time
instances with non-time instances will now returnNotImplemented
rather than raise theTime
-specificOperandTypeError
. This will generally lead to a regularTypeError
. As a result,OperandTypeError
now only occurs if the operation is betweenTime
instances of incompatible type or scale. [#7584]
astropy.units#
astropy.utils#
InheritDocstrings
now also works on class properties. [#7166]diff_values()
,report_diff_values()
, andwhere_not_allclose()
utility functions are moved fromastropy.io.fits.diff
. [#7444]invalidate_caches()
has been removed from theastropy.utils.compat
namespace, use it directly fromimportlib
. [#7872]
astropy.visualization#
In
ImageNormalize
, the default forclip
is set toTrue
. [#7800]Changed
AsymmetricPercentileInterval
andMinMaxInterval
to ignore NaN values in arrays. [#7360]Automatically default to using
grid_type='contours'
in WCSAxes when using a customTransform
object if the transform has no inverse. [#7847]
Performance Improvements#
Reduced import time by more cautious use of the standard library. [#7647]
astropy.convolution#
Major performance overhaul to
convolve()
. [#7293]convolve()
: Boundariesfill
,extend
, andwrap
now use a single implementation that pads the image with the correct boundary values before convolving. The runtimes of these three were significantly skewed. They now have equivalent runtimes that are also faster than before due to performant contiguous memory access. However, this does increase the memory footprint as an entire new image array is required plus that needed for the padded region.[#7293]convolve()
: Core computation ported from Cython to C. Several optimization techniques have been implemented to achieve performance gains, e.g. compiler hoisting, and vectorization, etc. Compiler optimization level-O2
required for hoisting and-O3
for vectorization. [#7293]convolve()
:nan_treatment=‘interpolate’
was slow to compute irrespective of whether any NaN values exist within the array. The input array is now checked for NaN values and interpolation is disabled if non are found. This is a significant performance boost for arrays without NaN values. [#7293]
astropy.coordinates#
Sped up creating SkyCoord objects by a factor of ~2 in some cases. [#7615]
Sped up getting xyz vectors from
CartesianRepresentation
(which is used a lot internally). [#7638]Sped up transformations and some representation methods by replacing python code with (compiled)
erfa
ufuncs. [#7639]Sped up adding differential (velocity) data to representations by a factor of ~20, which improves the speed of frame and SkyCoord initialization. [#7924]
Refactored
SkyCoord
initializer to improve performance and code clarity. [#7958]Sped up initialization of
Longitude
by ~40%. [#7616]
astropy.stats#
The
SigmaClip
class andsigma_clip
andsigma_clipped_stats
functions are now significantly faster. [#7478]A Cython implementation for
astropy.stats.kuiper_two
and a vectorized implementation forastropy.stats.kuiper_false_positive_probability
have been added, speeding up both functions. [#8104]
astropy.units#
astropy.visualization#
Significantly sped up drawing of contours in WCSAxes. [#7568]
Bug Fixes#
astropy.convolution#
Fixed bug in
convolve_fft
where masked input was copied withnumpy.asarray
instead ofnumpy.asanyarray
.numpy.asarray
removes the mask subclass causingnumpy.ma.ismasked(input)
to fail, causingconvolve_fft
to ignore all masked input. [#8137]Remove function side-effects of input data from
convolve_fft
. It was possible for input data to remain modified if particular exceptions were raised. [#8152]
astropy.coordinates#
EarthLocation.of_address
now uses the OpenStreetMap geocoding API by default to retrieve coordinates, with the Google API (which now requires an API key) as an option. [#7918]Fixed a bug that caused frame objects with NaN distances to have NaN sky positions, even if valid sky coordinates were specified. [#7988]
Fixed
represent_as()
to not round-trip through cartesian if the same representation class as the instance is passed in. [#7988]
astropy.io.ascii#
astropy.io.misc#
Fixed bug when writing a table with masked columns to HDF5. Previously the mask was being silently dropped. If the
serialize_meta
option is enabled the data mask will now be written as an additional column and the masked columns will round-trip correctly. [#7481]Fixed a bug where writing to HDF5 failed for for tables with columns of unicode strings. Now those columns are first encoded to UTF-8 and written as byte strings. [#7024, #8017]
Fixed a bug with serializing the bounding_box of models initialized with
Quantities
. [#8052]
astropy.io.fits#
astropy.modeling#
astropy.nddata#
astropy.stats#
Fix errors in
kuiper_false_positive_probability
. [#7975]
astropy.tests#
Fixing bug that prevented to run the doctests on only a single rst documentation file rather than all of them. [#8055]
astropy.time#
Fix a bug when setting a
TimeDelta
array item with plain float value(s). This was always interpreted as a JD (day) value regardless of theTimeDelta
format. [#7990]
astropy.units#
To simplify fast creation of
Quantity
instances from arrays, one can now writearray << unit
(equivalent toQuantity(array, unit, copy=False)
). Ifarray
is already aQuantity
, this will convert the quantity to the requested units; in-place conversion can be done withquantity <<= unit
. [#7734]
astropy.utils#
astropy.visualization#
Right ascension coordinates are now shown in hours by default, and the
set_format_unit
method onCoordinateHelper
now works correctly with angle coordinates. [#7215]
Other Changes and Additions#
The documentation build now uses the Sphinx configuration from sphinx-astropy rather than from astropy-helpers. [#7139]
Versions of Numpy <1.13 are no longer supported. [#7058]
Running tests now suppresses the output of the installation stage by default, to allow easier viewing of the test results. To re-enable the output as before, use
python setup.py test --verbose-install
. [#7512]The ERFA functions are now wrapped in ufuncs instead of custom C code, leading to some speed improvements, and setting the stage for allowing overrides with
__array_ufunc__
. [#7502]Updated the bundled CFITSIO library to 3.450. See
cextern/cfitsio/docs/changes.txt
for additional information. [#8014]The
representation
keywords in coordinate frames are now deprecated in favor of therepresentation_type
keywords (which are less ambiguously named). [#8119]
Version 3.0.5 (2018-10-14)#
Bug Fixes#
astropy.coordinates#
Fixed bug in which consecutive
StaticMatrixTransform
’s in a frame transform path would be combined in the incorrect order. [#7707]
astropy.tests#
Fixing bug that doctests were not picked up from the narrative documentation when tests were run for all modules. [#7767]
Version 3.0.4 (2018-08-02)#
API Changes#
astropy.table#
The private
_parent
attribute in theinfo
attribute of table columns was changed from a direct reference to the parent column to a weak reference. This was in response to a memory leak caused by having a circular reference cycle. This change means that expressions likecol[3:5].info
will now fail because at the point of theinfo
property being evaluated thecol[3:5]
weak reference is dead. Instead force a reference withc = col[3:5]
followed byc.info.indices
. [#6277, #7448]
Bug Fixes#
astropy.nddata#
Fixed an bug when creating the
WCS
of a cutout (seenddata.Cutout2D
) when input image’sWCS
containsSIP
distortion corrections by adjusting thecrpix
of theastropy.wcs.Sip
(in addition to adjusting thecrpix
of theastropy.wcs.WCS
object). This bug had the potential to produce large errors inWCS
coordinate transformations depending on the position of the cutout relative to the input image’scrpix
. [#7556, #7550]
astropy.table#
astropy.wcs#
Fixed an bug when creating the
WCS
slice (seeWCS.slice()
) whenWCS
containsSIP
distortion corrections by adjusting theWCS.sip.crpix
in addition to adjustingWCS.wcs.crpix
. This bug had the potential to produce large errors inWCS
coordinate transformations depending on the position of the slice relative toWCS.wcs.crpix
. [#7556, #7550]
Other Changes and Additions#
Updated bundled wcslib to v 5.19.1 [#7688]
Version 3.0.3 (2018-06-01)#
Bug Fixes#
astropy.io.ascii#
Fix stripping correct (header) comment line from
meta['comments']
in theCommentedHeader
reader for allheader_start
settings. [#7508]
astropy.io.fits#
astropy.tests#
Enabling running tests for multiple packages when specified comma separated. [#7463]
Version 3.0.2 (2018-04-23)#
Bug Fixes#
astropy.coordinates#
Computing a 3D separation between two
SkyCoord
objects (with theseparation_3d
method) now works with or without velocity data attached to the objects. [#7387]
astropy.io.votable#
astropy.modeling#
FittingWithOutlierRemoval
now handles model sets, as long as the underlying fitter supports masked values. [#7199]Remove assumption that
model_set_axis == 0
for 2D models inLinearLSQFitter
. [#7317, #7199]Fix the shape of the outputs when a model set is evaluated with
model_set_axis=False
. [#7317]
astropy.stats#
Accept a tuple for the
axis
parameter insigma_clip
, like the underlyingnumpy
functions and some other functions instats
. [#7199]
astropy.tests#
The function
quantity_allclose
was moved to theunits
package with the new, shorter nameallclose
. This eliminates a runtime dependency onpytest
which was causing issues for some affiliated packages. The old import will continue to work but may be deprecated in the future. [#7252]
astropy.units#
Added a units-aware
allclose
function (this was previously available in thetests
module asquantity_allclose
). To complementallclose
, a newisclose
function is also added and backported. [#7252]
Version 3.0.1 (2018-03-12)#
Bug Fixes#
astropy.io.ascii#
Fix a unicode decode error when reading a table with non-ASCII characters. The fast C reader cannot handle unicode so the code now uses the pure-Python reader in this case. [#7103]
astropy.io.fits#
Updated the bundled CFITSIO library to 3.430. This is to remedy a critical security vulnerability that was identified by NASA. See
cextern/cfitsio/docs/changes.txt
for additional information. [#7274]
astropy.io.misc#
Make sure that a sufficiently recent version of ASDF is installed when running test suite against ASDF tags and schemas. [#7205]
astropy.io.registry#
Fix reading files with serialized metadata when using a Table subclass. [#7213]
astropy.io.votable#
Fix lookup fields by ID. [#7208]
astropy.modeling#
astropy.units#
quantity_helper
no longer requiresscipy>=0.18
. [#7219]
Version 3.0 (2018-02-12)#
New Features#
astropy.constants#
New context manager
set_enabled_constants
to temporarily use an older version. [#7008]
astropy.coordinates#
The
Distance
object now acceptsparallax
as a keyword in the initializer, and supports retrieving a parallax (as anAngle
) via the.parallax
attributes. [#6855]The coordinate frame classes (subclasses of
BaseCoordinateFrame
) now always have.velocity
,.proper_motion
, and.radial_velocity
properties that provide shorthands to the full-space Cartesian velocity as aCartesianDifferential
, the 2D proper motion as aQuantity
, and the radial or line-of-sight velocity as aQuantity
. [#6869]SkyCoord
objects now support storing and transforming differentials - i.e., both radial velocities and proper motions. [#6944]All frame classes now automatically get sensible representation mappings for velocity components. For example,
d_x
,d_y
,d_z
are all automatically mapped to frame component namsev_x
,v_y
,v_z
. [#6856]SkyCoord
objects now support updating the position of a source given its space motion and a new time or time difference. [#6872]The frame classes now accept a representation class or differential class, or string names for either, through the keyword arguments
representation_type
anddifferential_type
instead ofrepresentation
anddifferential_cls
. [#6873]The frame classes (and
SkyCoord
) now give more useful error messages when incorrect attribute names are given. Instead of using the representation attribute names, they use the frame attribute names. [#7106]EarthLocation
now has a method to compute the gravitational redshift due due to solar system bodies. [#6861, #6935]EarthLocation
now has aget_gcrs
convenience method to get the location in GCRS coordinates. [#6861, #6935]
astropy.io.fits#
Expanded the FITS
Column
interface to accept attributes pertaining to the FITS World Coordinate System, which includes spatial(celestial) and time coordinates. [#6359]Added
ver
attribute to set theEXTVER
header keyword toImageHDU
andTableHDU
. [#6454]The performance for reading FITS tables has been significantly improved, in particular for cases where the tables contain one or more string columns and when done through
Table.read
. [#6821]The performance for writing tables from
Table.write
has now been significantly improved for tables containing one or more string columns. [#6920]The
Table.read
now supports amemmap=
keyword argument to control whether or not to use memory mapping when reading the table. [#6821]When reading FITS tables with
fits.open
, a new keyword argumentcharacter_as_bytes
can be passed - when set toTrue
, character columns are returned as Numpy byte arrays (Numpy type S) while when set toFalse
, the same columns are decoded to Unicode strings (Numpy type U) which uses more memory. [#6821]The
table_to_hdu
function and theBinTableHDU.from_columns
andFITS_rec.from_columns
methods now include acharacter_as_bytes
keyword argument - if set toTrue
, then when string columns are accessed, byte columns will be returned, which can provide significantly improved performance. [#6920]Added support for writing and reading back a table which has “mixin columns” such as
SkyCoord
orEarthLocation
with no loss of information. [#6912]Enable tab-completion for
FITS_rec
column names andHeader
keywords with IPython 5 and later. [#7071]
astropy.io.misc#
When writing to HDF5 files, the serialized metadata are now saved in a new dataset, instead of the HDF5 dataset attributes. This allows for metadata of any dimensions. [#6304]
Added support in HDF5 for writing and reading back a table which has “mixin columns” such as
SkyCoord
orEarthLocation
with no loss of information. [#7007]Add implementations of astropy-specific ASDF tag types. [#6790]
Add ASDF tag and schema for ICRSCoord. [#6904]
astropy.modeling#
Add unit support for tabular models. [#6529]
A
deepcopy()
method was added to models. [#6515]Added units support to
AffineTransformation
. [#6853]Added
is_separable
function to modeling to test the separability of a model. [#6746]Added
Model.separable
property. It returns a boolean value orNone
if not set. [#6746]Support masked array values in
LinearLSQFitter
(instead of silently ignoring the mask). [#6927]
astropy.stats#
astropy.table#
Added support for reading and writing
astropy.time.Time
Table columns to and from FITS tables, to the extent supported by the FITS standard. [#6176]Improved exception handling and error messages when column
format
attribute is incorrect for the column type. [#6385]Allow to pass
htmldict
option to the jsviewer writer. [#6551]Added new table operation
astropy.table.setdiff
that returns the set difference of table rows for two tables. [#6443]Added support for reading time columns in FITS compliant binary tables as
astropy.time.Time
Table columns. [#6442]Allowed to remove table rows through the
__delitem__
method. [#5839]Added a new
showtable
command-line script to view binary or ASCII table files. [#6859]Added new table property
astropy.table.Table.loc_indices
that returns the location of rows by indexes. [#6831]Allow updating of table by indices through the property
astropy.table.Table.loc
. [#6831]Enable tab-completion for column names with IPython 5 and later. [#7071]
Allow getting and setting a table Row using multiple column names. [#7107]
astropy.tests#
Split pytest plugins into separate modules. Move remotedata, openfiles, doctestplus plugins to standalone repositories. [#6384, #6606]
When testing, astropy (or the package being tested) is now installed to a temporary directory instead of copying the build. This allows entry points to work correctly. [#6890]
The tests_require setting in setup.py now works properly when running ‘python setup.py test’. [#6892]
astropy.units#
Deprecated conversion of quantities to truth values. Currently, the expression
bool(0 * u.dimensionless_unscaled)
evaluates toTrue
. In the future, attempting to convert aQuantity
to abool
will raiseValueError
. [#6580, #6590]Modify the
brightness_temperature
equivalency to provide a surface brightness equivalency instead of the awkward assumed-per-beam equivalency that previously existed [#5173, #6663]Support was added for a number of
scipy.special
functions. [#6852]
astropy.utils#
The
astropy.utils.console.ProgressBar.map
class method now supports theipython_widget
option. You can now pass it bothmultiprocess=True
andipython_widget=True
to get both multiprocess speedup and a progress bar widget in an IPython Notebook. [#6368]The
astropy.utils.compat.funcsigs
module has now been deprecated. Use the Python ‘inspect’ module directly instead. [#6598]The
astropy.utils.compat.futures
module has now been deprecated. Use the Python ‘concurrent.futures’ module directly instead. [#6598]JsonCustomEncoder
is expanded to handleQuantity
andUnitBase
. [#5471]Added a
dcip_xy
method to IERS that interpolates along the dX_2000A and dY_2000A columns of the IERS table. Hence, the data for the CIP offsets is now available for use in coordinate frame conversion. [#5837]The functions
matmul
,broadcast_arrays
,broadcast_to
of theastropy.utils.compat.numpy
module have been deprecated. Use the NumPy functions directly. [#6691]The
astropy.utils.console.ProgressBar.map
class method now returns results in sequential order. Previously, if you setmultiprocess=True
, then the results could arrive in any arbitrary order, which could be a nasty shock. Although the function will still be evaluated on the items in arbitrary order, the return values will arrive in the same order in which the input items were provided. The method is now a thin wrapper aroundastropy.utils.console.ProgressBar.map_unordered
, which preserves the old behavior. [#6439]
astropy.visualization#
Enable Matplotlib’s subtraction shorthand syntax for composing and inverting transformations for the
WCSWorld2PixelTransform
andWCSPixel2WorldTransform
classes by settinghas_inverse
toTrue
. In order to implement a unit test, also implement the equality comparison operator for both classes. [#6531]Added automatic hiding of axes labels when no tick labels are drawn on that axis. This parameter can be configured with
WCSAxes.coords[*].set_axislabel_visibility_rule
so that labels are automatically hidden when no ticks are drawn or always shown. [#6774]
astropy.wcs#
API Changes#
astropy.convolution#
astropy.coordinates#
Deprecated
recommended_units
for representations. These were used to ensure that any angle was presented in degrees in sky coordinates and frames. This is more logically done in the frame itself. [#6858]As noted above, the frame class attributes
representation
anddifferential_cls
are being replaced byrepresentation_type
anddifferential_type
. In the next version, usingrepresentation
will raise a deprecation warning. [#6873]Coordinate frame classes now can’t be added to the frame transform graph if they have frame attribute names that conflict with any component names. This is so
SkyCoord
can uniquely identify and distinguish frame attributes from frame components. [#6871]Slicing and reshaping of
SkyCoord
and coordinate frames no longer passes the new object through__init__
, but directly sets attributes on a new instance. This speeds up those methods by an order of magnitude, but means that any customization done in__init__
is by-passed. [#6941]
astropy.io.ascii#
Allow ECSV files to be auto-identified by
Table.read
orTable.write
based on the.ecsv
file name suffix. In this case it is not required to provide theformat
keyword. [#6552]
astropy.io.fits#
astropy.io.misc#
astropy.io.votable#
Add handling of
tree.Group
elements totree.Resource
. Unified I/O or conversion to astropy tables is not affected. [#6262]
astropy.modeling#
astropy.table#
When setting the column
format
attribute the value is now immediately validated. Previously one could set to any value and it was only checked when actually formatting the column. [#6385]Deprecated the
python3_only
kwarg of theconvert_bytestring_to_unicode
andconvert_unicode_to_bytestring
methods it was needed only for Python2 usage. [#6655]When reading in FITS tables with
Table.read
, string columns are now represented using Numpy byte (dtypeS
) arrays rather than Numpy unicode arrays (dtypeU
). TheColumn
class then ensures the bytes are automatically converted to string as needed. [#6821]When getting a table row using multiple column names, if one of the names is not a valid column name then a
KeyError
exception is now raised (previouslyValueError
). When setting a table row, if the right hand side is not a sequence with the correct length then aValueError
is now raised (previously in certain cases aTypeError
was raised). [#7107]
astropy.utils#
download_files_in_parallel
now always usescache=True
to make the function work on Windows. [#6671]
astropy.visualization#
The Astropy matplotlib plot style has been deprecated. It will continue to work in future but is no longer documented. [#6991]
Bug Fixes#
astropy.coordinates#
Frame objects now use the default differential even if the representation is explicitly provided as long as the representation provided is the same type as the default representation. [#6944]
Coordinate frame classes now raise an error when they are added to the frame transform graph if they have frame attribute names that conflict with any component names. [#6871]
astropy.io.ascii#
astropy.io.fits#
Properly handle opening of FITS files from
http.client.HTTPResponse
(i.e. it now works correctly when passing the results ofurllib.request.urlopen
tofits.open
). [#6378]Fix the
fitscheck
script for updating invalid checksums, or removing checksums. [#6571]Fixed potential problems with the compression module [#6732]
Always use the ‘D’ format for floating point values in ascii tables. [#6938]
astropy.table#
Fix getting a table row when using multiple column names (for example
t[3]['a', 'b', 'c']
). Also fix a problem when setting an entire row: if setting one of the right-hand side values failed this could result in a partial update of the referenced parent table before the exception is raised. [#7107]
astropy.time#
astropy.units#
Fixed a bug that caused PLY files to not be generated correctly in Python 3. [#7174]
astropy.utils#
The
deprecated
decorator applied to a class will now modify the class itself, rather than to create a class that just looks and behave like the original. This is needed so that the Python 3super
without arguments works for decorated classes. [#6615]Fixed
HomogeneousList
when setting one item or a slice. [#6773]Also check the type when creating a new instance of
HomogeneousList
. [#6773]Make
HomogeneousList
work with iterators and generators when creating the instance, extending it, or using when setting a slice. [#6773]
Other Changes and Additions#
Versions of Python <3.5 are no longer supported. [#6556]
Versions of Pytest <3.1 are no longer supported. [#6419]
Versions of Numpy <1.10 are no longer supported. [#6593]
The bundled CFITSIO was updated to version 3.41 [#6477]
analytic_functions
sub-package is removed. Useastropy.modeling.blackbody
. [#6541]astropy.vo
sub-package is removed. Useastropy.samp
for SAMP andastroquery
for VO cone search. [#6540]The guide to setting up Emacs for code development was simplified, and updated to recommend
flycheck
andflake8
for syntax checks. [#6692]The bundled version of PLY was updated to 3.10. [#7174]
Version 2.0.16 (2019-10-27)#
Bug Fixes#
astropy.time#
Fixed a troubling bug in which
Time
could loose precision, with deviations of 300 ns. [#9328]
Other Changes and Additions#
Updated IERS A URLs due to USNO prolonged maintenance. [#9443]
Version 2.0.15 (2019-10-06)#
Bug Fixes#
astropy.coordinates#
Fixed a bug where the string representation of a
BaseCoordinateFrame
object could become garbled under specific circumstances when the frame defines custom component names viaRepresentationMapping
. [#8869]
astropy.io.fits#
astropy.nddata#
astropy.samp#
Fixed a bug that caused an incorrectly constructed warning message to raise an error. [#8966]
astropy.table#
astropy.units#
Quantity
now preserves thedtype
for anything that is floating point, includingfloat16
. [#8872]Unit()
now accepts units with fractional exponents such asm(3/2)
in the default/fits
andvounit
formats that would previously have been rejected for containing multiple solidi (/
). [#9000]Fixed the LaTeX representation of units containing a superscript. [#9218]
astropy.visualization#
Fixed compatibility issues with latest versions of Matplotlib. [#8961]
Other Changes and Additions#
Updated required version of Cython to v0.29.13 to make sure that generated C files are compatible with the upcoming Python 3.8 release as well as earlier supported versions of Python. [#9198]
Version 2.0.14 (2019-06-14)#
Bug Fixes#
astropy.io.fits#
Fix
Header.update
which was dropping the comments when passed aHeader
object. [#8840]
astropy.modeling#
astropy.units#
Fixed a bug that prevented
EarthLocation
from being initialized with numpy >=1.17. [#8849]
astropy.visualization#
Version 2.0.13 (2019-06-08)#
Bug Fixes#
astropy.io.fits#
Fixed bug in
ColDefs._init_from_array()
that caused unsigned datatypes with the opposite endianness as the host architecture to fail the TestColumnFunctions.test_coldefs_init_from_array unit test. [#8460]
astropy.io.misc#
Explicitly set PyYAML default flow style to None to ensure consistent astropy YAML output for PyYAML version 5.1 and later. [#8500]
astropy.io.votable#
Block floating-point columns from using repr format when converted to Table [#8358]
astropy.stats#
Fixed issue in
bayesian_blocks
when called with thencp_prior
keyword. [#8339]
astropy.units#
Fix
take
when one gets only a single element from aQuantity
, ensuring it returns aQuantity
rather than a scalar. [#8617]
Version 2.0.12 (2019-02-23)#
New Features#
astropy.utils#
The
deprecated_renamed_argument
decorator now capable deprecating an argument without renaming it. It also got a newalternative
keyword argument to suggest alternative functionality instead of the removed one. [#8324]
Bug Fixes#
astropy.io.fits#
Fixed bug in
ColDefs._init_from_array()
that caused non-scalar unsigned entries to not have the correct bzero value set. [#8353]
astropy.modeling#
Fixed compatibility of
JointFitter
with the latest version of Numpy. [#7984]
astropy.table#
Fix
.quantity
property ofColumn
class for function-units (e.g.,dex
). Previously setting this was possible, but getting raised an error. [#8425]Fixes a bug where initializing a new
Table
from the final row of an existingTable
failed. This happened when that row was generated using the item index[-1]
. [#8422]
astropy.wcs#
Fix bug that caused
WCS.has_celestial
,wcs_to_celestial_frame
, and other functionality depending on it to fail in the presence of correlated celestial and other axes. [#8420]
Other Changes and Additions#
Version 2.0.11 (2018-12-31)#
Bug Fixes#
astropy.io.ascii#
Fix fast reader C tokenizer to handle double quotes in quoted field. [#8283]
astropy.io.fits#
Fix a bug in
io.fits
with writing Fortran-ordered arrays to file objects. [#8282]
astropy.units#
astropy.utils#
Fix failures caused by IERS_A_URL being unavailable by introducing IERS_A_URL_MIRROR. [#8308]
Version 2.0.10 (2018-12-04)#
Bug Fixes#
astropy.convolution#
Fix Moffat2DKernel’s FWHM computation, which has an influence on the default size of the kernel when no size is given. [#8105]
astropy.coordinates#
Disable
of_address
usage due to Google API now requiring API key. [#7993]
astropy.io.fits#
fits.append
now correctly handles file objects with valid modes other thanostream
. [#7856]
astropy.table#
Fix
Table.show_in_notebook
failure when mixin columns are present. [#8069]
astropy.tests#
Explicitly disallow incompatible versions of
pytest
when using the test runner. [#8188]
astropy.units#
Fixed the spelling of the ‘luminous emittance/illuminance’ physical property. [#7942]
astropy.visualization#
Fixed a bug that caused origin to be incorrect if not specified. [#7927]
Fixed a bug that caused an error when plotting grids multiple times with grid_type=’contours’. [#7927]
Put an upper limit on the number of bins in
hist
andhistogram
and factor out calculation of bin edges into public functioncalculate_bin_edges
. [#7991]
Other Changes and Additions#
Fixing
astropy.__citation__
to provide the full bibtex entry of the 2018 paper. [#8110]Pytest 4.0 is not supported by the 2.0.x LTS releases. [#8173]
Updating bundled
pytest-remotedata
to v0.3.1. [#8174]Updating bundled
pytest-doctestplus
to v0.2.0. [#8175]Updating bundled
pytest-openfiles
to v0.3.0. [#8176]Adding
warning_type
keyword argument to the “deprecated” decorators to allow issuing custom warning types instead of the defaultAstropyDeprecationWarning
. [#8178]
Version 2.0.9 (2018-10-14)#
Bug Fixes#
astropy.io.ascii#
Fix reading of big files with the fast reader. [#7885]
astropy.io.fits#
astropy.nddata#
Fixed the bug in CCData.read when the HDU is not specified and the first one is empty so the function searches for the first HDU with data which may not have an image extension. [#7739]
astropy.stats#
Fixed bugs in biweight statistics functions where a constant data array (or if using the axis keyword, constant along an axis) would return NaN. [#7737]
astropy.table#
Fixed a bug in
to_pandas()
where integer type masked columns were always getting converted to float. This could cause loss of precision. Now this only occurs if there are actually masked data values, in which casepandas
does require the values to be float so thatNaN
can be used to mark the masked values. [#7741, #7747]
astropy.tests#
Change the name of the configuration variable controlling the location of the Astropy cache in the Pytest plugin from
cache_dir
toastropy_cache_dir
. The command line flag also changed to--astropy-cache-dir
. This prevents a conflict with thecache_dir
variable provided by pytest itself. Also made similar change toconfig_dir
option as a precaution. [#7721]
astropy.units#
astropy.visualization#
astropy.wcs#
Instead of raising an error
astropy.wcs
now returns the input when the input has zero size. [#7746]Fix
malloc(0)
bug inpipeline_all_pixel2world()
andpipeline_pix2foc()
. They now raise an exception for input with zero coordinates, i.e. shape = (0, n). [#7806]Fixed an issue with scalar input when WCS.naxis is one. [#7858]
Other Changes and Additions#
Added a new
astropy.__citation__
attribute which gives a citation for Astropy in bibtex format. Made sure that both this andastropy.__bibtex__
works outside the source environment, too. [#7718]
Version 2.0.8 (2018-08-02)#
Bug Fixes#
astropy.convolution#
astropy.coordinates#
Ensure that relative humidities can be given as Quantities, rather than take any quantity and just strip its unit. [#7668]
astropy.nddata#
Fixed
Cutout2D
output WCS NAXIS values to reflect the cutout image size. [#7552]
astropy.table#
Fixed a bug in
add_columns
method whererename_duplicate=True
would cause an error if there were no duplicates. [#7540]
astropy.tests#
Fixed bug in
python setup.py test --coverage
on Windows machines. [#7673]
astropy.time#
Avoid rounding errors when converting
Quantity
toTimeDelta
. [#7625]
astropy.visualization#
Fixed a bug that caused the position of the tick values in decimal mode to be incorrectly determined. [#7332]
astropy.wcs#
Fixed a bug that caused
wcs_to_celestial_frame
,skycoord_to_pixel
, andpixel_to_skycoord
to raise an error if the axes of the celestial WCS were swapped. [#7691]
Version 2.0.7 (2018-06-01)#
Bug Fixes#
astropy.modeling#
Fixed
Tabular
models to not change the shape of data. [#7411]
astropy.stats#
astropy.table#
Fix a performance issue in
MaskedColumn
where initialization was extremely slow for large arrays with the defaultmask=None
. [#7422]Fix printing table row indexed with unsigned integer. [#7469]
Fix copy of mask when copying a Table, as this is no more done systematically by Numpy since version 1.14. Also fixed a problem when MaskedColumn was initialized with
mask=np.ma.nomask
. [#7486]
astropy.time#
Fixed a bug in Time that raised an error when initializing a subclass of Time with a Time object. [#7453]
astropy.utils#
Fixed a bug that improperly handled unicode case of URL mirror in Python 2. [#7493]
astropy.visualization#
Fixed a bug that prevented legends from being added to plots done with units. [#7510]
Other Changes and Additions#
Bundled
pytest-remotedata
plugin is upgraded to 0.3. [#7493]
Version 2.0.6 (2018-04-23)#
Bug Fixes#
astropy.convolution#
convolve(boundary=None) requires the kernel to be smaller than the image. This was never actually checked, it now is and an exception is raised. [#7313]
astropy.units#
astropy.visualization#
Other Changes and Additions#
Updated the bundled CFITSIO library to 3.44. This is to remedy another critical security vulnerability that was identified by NASA. See
cextern/cfitsio/docs/changes.txt
for additional information. [#7370]
Version 2.0.5 (2018-03-12)#
Bug Fixes#
astropy.coordinates#
astropy.io.fits#
astropy.modeling#
Propagate weights to underlying fitter in
FittingWithOutlierRemoval
[#7249]
astropy.tests#
Support dotted package names as namespace packages when gathering test coverage. [#7170]
astropy.visualization#
Matplotlib axes have the
axisbelow
property to control the z-order of ticks, tick labels, and grid lines. WCSAxes will now respect this property. This is useful for drawing scale bars or inset boxes, which should have a z-order that places them above all ticks and gridlines. [#7098]
Other Changes and Additions#
Version 2.0.4 (2018-02-06)#
Bug Fixes#
astropy.convolution#
Fixed IndexError when
preserve_nan=True
inconvolve_fft
. Added testing withpreserve_nan=True
. [#7000]
astropy.coordinates#
The
sites.json
file is now parsed explicitly with a UTF-8 encoding. This means that future revisions to the file with unicode observatory names can be done without breaking the site registry parser. [#7082]Working around a bug in Numpy 1.14.0 that broke some coordinate transformations. [#7105]
Fixed a bug where negative angles could be rounded wrongly when converting to a string with seconds omitted. [#7148]
astropy.io.fits#
astropy.io.registry#
Fixed bug in identifying inherited registrations from multiple ancestors [#7156]
astropy.modeling#
Fixed a bug in
LevMarLSQFitter
when fitting 2D models with constraints. [#6705]
astropy.utils#
download_file
function will check for cache downloaded from mirror URL first before attempting actual download if primary URL is unavailable. [#6987]
astropy.visualization#
Fixed test failures for
astropy.visualization.wcsaxes
which were due to local matplotlibrc files being taken into account. [#7132]
Other Changes and Additions#
Version 2.0.3 (2017-12-13)#
Bug Fixes#
astropy.coordinates#
Ecliptic frame classes now support attributes
v_x
,v_y
,v_z
when using with a Cartesian representation. [#6569]Added a nicer error message when accidentally calling
frame.representation
instead offrame.data
in the context of methods that use._apply()
. [#6561]Creating a new
SkyCoord
from a list of multipleSkyCoord
objects now yield the correct type of frame, and works at all for non-equatorial frames. [#6612]Improved accuracy of velocity calculation in
EarthLocation.get_gcrs_posvel
. [#6699]Improved accuracy of radial velocity corrections in
SkyCoord.radial_velocity_correction`
. [#6861]The precision of ecliptic frames is now much better, after removing the nutation from the rotation and fixing the computation of the position of the Sun. [#6508]
astropy.extern#
Version 0.2.1 of
pytest-astropy
is included as an external package. [#6918]
astropy.io.fits#
astropy.io.misc#
astropy.nddata#
astropy.stats#
Fixed an issue where the biweight statistics functions would sometimes cause runtime underflow/overflow errors for float32 input arrays. [#6905]
astropy.table#
Fixed a problem when printing a table when a column is deleted and garbage-collected, and the format function caching mechanism happens to re-use the same cache key. [#6714]
Fixed a problem when comparing a unicode masked column (on left side) to a bytes masked column (on right side). [#6899]
Fixed a problem in comparing masked columns in bytes and unicode when the unicode had masked entries. [#6899]
astropy.tests#
Fixed a bug that causes tests for rst files to not be run on certain platforms. [#6555, #6608]
Fixed a bug that caused the doctestplus plugin to not work nicely with the hypothesis package. [#6605, #6609]
Fixed a bug that meant that the data.astropy.org mirror could not be used when using –remote-data=astropy. [#6724]
Support compatibility with new
pytest-astropy
plugins. [#6918]When testing, astropy (or the package being tested) is now installed to a temporary directory instead of copying the build. This allows entry points to work correctly. [#6890]
astropy.time#
Initialization of Time instances now is consistent for all formats to ensure that
-0.5 <= jd2 < 0.5
. [#6653]
astropy.units#
Ensure that
Quantity
slices can be set with objects that have aunit
attribute (such asColumn
). [#6123]
astropy.utils#
download_files_in_parallel
now respects the giventimeout
value. [#6658]Fixed bugs in remote data handling and also in IERS unit test related to path URL, and URI normalization on Windows. [#6651]
Fixed a bug that caused
get_pkg_data_fileobj
to not work correctly when used with non-local data from inside packages. [#6724]Make sure
get_pkg_data_fileobj
fails if the URL can not be read, and correctly falls back on the mirror if necessary. [#6767]Fix the
finddiff
option infind_current_module
to properly deal with submodules. [#6767]Fixed
pyreadline
import inutils.console.isatty
for older IPython versions on Windows. [#6800]
astropy.visualization#
Other Changes and Additions#
Version 2.0.2 (2017-09-08)#
Bug Fixes#
astropy.coordinates#
astropy.io.fits#
Support the
GZIP_2
FITS image compression algorithm as claimed in docs. [#6486]
astropy.io.votable#
Fixed a bug that wrote out VO table as version 1.2 instead of 1.3. [#6521]
astropy.table#
Fix a bug when combining unicode columns via join or vstack. The character width of the output column was a factor of 4 larger than needed. [#6459]
astropy.tests#
Fixed running the test suite using –parallel. [#6415]
Added error handling for attempting to run tests in parallel without having the
pytest-xdist
package installed. [#6416]Fixed issue running doctests with pytest>=3.2. [#6423, #6430]
Fixed issue caused by antivirus software in response to malformed compressed files used for testing. [#6522]
Updated top-level config file to properly ignore top-level directories. [#6449]
astropy.units#
Quantity._repr_latex_ now respects precision option from numpy printoptions. [#6412]
astropy.utils#
For the
deprecated_renamed_argument
decorator, refer to the deprecation‘s caller instead ofastropy.utils.decorators
, to makes it easier to find where the deprecation warnings comes from. [#6422]
Version 2.0.1 (2017-07-30)#
Bug Fixes#
astropy.constants#
Fixed Earth radius to be the IAU2015 value for the equatorial radius. The polar value had erroneously been used in 2.0. [#6400]
astropy.coordinates#
Added old frame attribute classes back to top-level namespace of
astropy.coordinates
. [#6357]
astropy.io.fits#
Scaling an image always uses user-supplied values when given. Added defaults for scaling when bscale/bzero are not present (float images). Fixed a small bug in when to reset
_orig_bscale
. [#5955]
astropy.modeling#
Fixed a bug in initializing compound models with units. [#6398]
astropy.nddata#
Updating CCDData.read() to be more flexible with inputs, don’t try to delete keywords that are missing from the header. [#6388]
astropy.tests#
Fixed the test command that is run from
setuptools
to allow it to gracefully handle keyboard interrupts and pass them on to thepytest
subprocess. This promptspytest
to teardown and display useful traceback and test information [#6369]
astropy.visualization#
Ticks and tick labels are now drawn in front of, rather than behind, gridlines in WCS axes. This improves legibility in situations where tick labels may be on the interior of the axes frame, such as the right ascension axis of an all-sky Aitoff or Mollweide projection. [#6361]
astropy.wcs#
Fix the missing wcskey part in _read_sip_kw, this will cause error when reading sip wcs while there is no default CRPIX1 CRPIX2 keywords and only CRPIX1n CRPIX2n in header. [#6372]
Version 2.0 (2017-07-07)#
New Features#
astropy.constants#
Constants are now organized into version modules, with physical CODATA constants in the
codata2010
andcodata2014
sub-modules, and astronomical constants defined by the IAU in theiau2012
andiau2015
sub-modules. The default constants inastropy.constants
in Astropy 2.0 have been updated fromiau2012
toiau2015
and fromcodata2010
tocodata2014
. The constants for 1.3 can be accessed in theastropyconst13
sub-module and the constants for 2.0 (the default inastropy.constants
) can also be accessed in theastropyconst20
sub-module [#6083]The GM mass parameters recommended by IAU 2015 Resolution B 3 have been added as
GM_sun
,GM_jup
, andGM_earth
, for the Sun, Jupiter and the Earth. [#6083]
astropy.convolution#
Major change in convolution behavior and keyword arguments. Additional details are in the API section. [#5782]
Convolution with un-normalized and un-normalizable kernels is now possible. [#5782]
Add a new argument,
normalization_rtol
, toconvolve_fft
, allowing the user to specify the relative error tolerance in the normalization of the convolution kernel. [#5649, #5177]Models can now be convoluted using
convolve
orconvolve_fft
, which generates a regular compound model. [#6015]
astropy.coordinates#
Frame attributes set on
SkyCoord
are now always validated, and any ndarray-like operation (like slicing) will also be done on those. [#5751]Caching of all possible frame attributes was implemented. This greatly speeds up many
SkyCoord
operations. [#5703, #5751]A class hierarchy was added to allow the representation layer to store differentials (i.e., finite derivatives) of coordinates. This is intended to enable support for velocities in coordinate frames. [#5871]
replicate_without_data
andreplicate
methods were added to coordinate frames that allow copying an existing frame object with various reference or copy behaviors and possibly overriding frame attributes. [#6182]The representation class instances can now contain differential objects. This is primarily useful for internal operations that will provide support for transforming velocity components in coordinate frames. [#6169]
EarthLocation.to_geodetic()
(andEarthLocation.geodetic
) now return namedtuples instead of regular tuples. [#6237]EarthLocation
now haslat
andlon
properties (equivalent to, but preferred over, the previouslatitude
andlongitude
). [#6237]Added a
radial_velocity_correction
method toSkyCoord
to do compute barycentric and heliocentric velocity corrections. [#5752]Added a new
AffineTransform
class for coordinate frame transformations. This class supports matrix operations with vector offsets in position or any differential quantities (so far, only velocity is supported). The matrix transform classes now subclass from the base affine transform. [#6218]Frame objects now have experimental support for velocity components. Most frames default to accepting proper motion components and radial velocity, and the velocities transform correctly for any transformation that uses one of the
AffineTransform
-type transformations. For other transformations a finite-difference velocity transformation is available, although it is not as numerically stable as those that useAffineTransform
-type transformations. [#6219, #6226]
astropy.io.ascii#
Allow to specify encoding in
ascii.read
, only for Python 3 and with the pure-Python readers. [#5448]Writing latex tables with only a
tabular
environment is now possible by settinglatexdict['tabletyle']
toNone
. [#6205]Allow ECSV format to support reading and writing mixin columns like
Time
,SkyCoord
,Latitude
, andEarthLocation
. [#6181]
astropy.io.fits#
Checking available disk space before writing out file. [#5550, #4065]
Change behavior to warn about units that are not FITS-compliant when writing a FITS file but not when reading. [#5675]
Added absolute tolerance parameter when comparing FITS files. [#4729]
New convenience function
printdiff
to print out diff reports. [#5759]Allow to instantiate a
BinTableHDU
directly from aTable
object. [#6139]
astropy.io.misc#
YAML representer now also accepts numpy types. [#6077]
astropy.io.registry#
New functions to unregister readers, writers, and identifiers. [#6217]
astropy.modeling#
Added
SmoothlyBrokenPowerLaw1D
model. [#5656]Add
n_submodels
shared method to single and compound models, which allows users to get the number of components of a given single (compound) model. [#5747]Added a
name
setter for instances of_CompoundModel
. [#5741]Added FWHM properties to Gaussian and Moffat models. [#6027]
Added support for evaluating models and setting the results for inputs outside the bounding_box to a user specified
fill_value
. This is controlled by a new optional boolean keywordwith_bounding_box
. [#6081]Added infrastructure support for units on parameters and during model evaluation and fitting, added support for units on all functional, power-law, polynomial, and rotation models where this is appropriate. A new BlackBody1D model has been added. [#4855, #6183, #6204, #6235]
astropy.nddata#
Added an image class,
CCDData
. [#6173]
astropy.stats#
Added
biweight_midcovariance
function. [#5777]Added
biweight_scale
andbiweight_midcorrelation
functions. [#5991]median_absolute_deviation
andmad_std
haveignore_nan
option that will usenp.ma.median
with nans masked out ornp.nanmedian
instead ofnp.median
when computing the median. [#5232]Implemented statistical estimators for Ripley’s K Function. [#5712]
Added
SigmaClip
class. [#6206]Added
std_ddof
keyword option tosigma_clipped_stats
. [#6066, #6207]
astropy.table#
Issue a warning when assigning a string value to a column and the string gets truncated. This can occur because numpy string arrays are fixed-width and silently drop characters which do not fit within the fixed width. [#5624, #5819]
Added functionality to allow
astropy.units.Quantity
to be written as a normal column to FITS files. [#5910]Add support for Quantity columns (within a
QTable
) in tablejoin()
,hstack()
andvstack()
operations. [#5841]Allow unicode strings to be stored in a Table bytestring column in Python 3 using UTF-8 encoding. Allow comparison and assignment of Python 3
str
object in a bytestring column (numpy'S'
dtype). If comparison withstr
instead ofbytes
is a problem (andbytes
is really more logical), please open an issue on GitHub. [#5700]Added functionality to allow
astropy.units.Quantity
to be read from and written to a VOtable file. [#6132]Added support for reading and writing a table with mixin columns like
Time
,SkyCoord
,Latitude
, andEarthLocation
via the ASCII ECSV format. [#6181]Bug fix for
MaskedColumn
insert method, wherefill_value
attribute was not being passed along to the copy of theMaskedColumn
that was returned. [#7585]
astropy.tests#
astropy.units#
The
astropy.units.quantity_input
decorator will now convert the output to the unit specified as a return annotation under Python 3. [#5606]Passing a logarithmic unit to the
Quantity
constructor now returns the appropriate logarithmic quantity class ifsubok=True
. For instance,Quantity(1, u.dex(u.m), subok=True)
yields<Dex 1.0 dex(m)>
. [#5928]The
quantity_input
decorator now accepts a string physical type in addition to of a unit object to specify the expected inputQuantity
’s physical type. For example,@u.quantity_input(x='angle')
is now functionally the same as@u.quantity_input(x=u.degree)
. [#3847]The
quantity_input
decorator now also supports unit checking for optional keyword arguments and accepts iterables of units or physical types for specifying multiple valid equivalent inputs. For example,@u.quantity_input(x=['angle', 'angular speed'])
or@u.quantity_input(x=[u.radian, u.radian/u.yr])
would both allow either aQuantity
angle or angular speed passed in to the argumentx
. [#5653]Added a new equivalence
molar_mass_amu
between g/mol to atomic mass units. [#6040, #6113]Quantity
has gained a newto_value
method which returns the value of the quantity in a given unit. [#6127]Quantity
now supports the@
operator for matrix multiplication that was introduced in Python 3.5, for all supported versions of numpy. [#6144]Quantity
supports the new__array_ufunc__
protocol introduced in numpy 1.13. As a result, operations that involve unit conversion will be sped up considerably (by up to a factor of two for costly operations such as trigonometric ones). [#2583]
astropy.utils#
astropy.wcs#
Upgraded the included wcslib to version 5.16. [#6225]
The minimum required version of wcslib in is 5.14.
API Changes#
astropy.analytic_functions#
This entire sub-package is deprecated because blackbody has been moved to
astropy.modeling.blackbody
. [#6191]
astropy.convolution#
Major change in convolution behavior and keyword arguments.
astropy.convolution.convolve_fft
replacedinterpolate_nan
withnan_treatment
, andastropy.convolution.convolve
received a newnan_treatment
argument.astropy.convolution.convolve
also no longer double-interpolates interpolates over NaNs, although that is now available as a separateastropy.convolution.interpolate_replace_nans
function. See the backwards compatibility note for more on how to get the old behavior (and why you probably don’t want to.) [#5782]
astropy.coordinates#
The
astropy.coordinates.Galactic
frame previously was had the cartesian ordering ‘w’, ‘u’, ‘v’ (for ‘x’, ‘y’, and ‘z’, respectively). This was an error and against the common convention. The ‘x’, ‘y’, and ‘z’ axes now map to ‘u’, ‘v’, and ‘w’, following the right-handed (‘u’ points to the Galactic center) convention. [#6330]Removed deprecated
angles.rotation_matrix
andangles.angle_axis
. Use the routines incoordinates.matrix_utilities
instead. [#6170]EarthLocation.latitude
andEarthLocation.longitude
are now deprecated in favor ofEarthLocation.lat
andEarthLocation.lon
. They former will be removed in a future version. [#6237]The
FrameAttribute
class and subclasses have been renamed to just containAttribute
. For example,QuantityFrameAttribute
is nowQuantityAttribute
. [#6300]
astropy.cosmology#
Cosmological models do not include any contribution from neutrinos or photons by default – that is, the default value of Tcmb0 is 0. This does not affect built in models (such as WMAP or Planck). [#6112]
astropy.io.fits#
Remove deprecated
NumCode
andImgCode
properties on FITS_ImageBaseHDU
. Use module-level constantsBITPIX2DTYPE
andDTYPE2BITPIX
instead. [#4993]comments
meta key (which isio.ascii
’s table convention) is output toCOMMENT
instead ofCOMMENTS
header. Similarly,COMMENT
headers are read intocomments
meta [#6097]Remove compatibility code which forced loading all HDUs on close. The old behavior can be used with
lazy_load_hdus=False
. Because of this change, trying to access the.data
attribute from an HDU which is not loaded now raises aIndexError
instead of aValueError
. [#6082]Deprecated
clobber
keyword; useoverwrite
. [#6203]Add EXTVER column to the output of
HDUList.info()
. [#6124]
astropy.modeling#
Removed deprecated
Redshift
model; UseRedshiftScaleFactor
. [#6053]Removed deprecated
Pix2Sky_AZP.check_mu
andPix2Sky_SZP.check_mu
methods. [#6170]Deprecated
GaussianAbsorption1D
model, as it can be better represented by subtractingGaussian1D
fromConst1D
. [#6200]Added method
sum_of_implicit_terms
toModel
, needed when performing a linear fit to a model that has built-in terms with no corresponding parameters (primarily the1*x
term ofShift
). [#6174]
astropy.nddata#
astropy.stats#
astropy.table#
In Python 3, when getting an item from a bytestring Column it is now converted to
str
. This means comparing a single item to abytes
object will always fail, and instead one must compare with astr
object. [#5700]Removed the deprecated
data
property of Row. [#5729]Removed the deprecated functions
join
,hstack
,vstack
andget_groups
from np_utils. [#5729]Added
name
parameter to methodastropy.table.Table.add_column
andnames
parameter to methodastropy.table.Table.add_columns
, to provide the flexibility to add unnamed columns, mixin objects and also to specify explicit names. Default names will be used if not specified. [#5996]Added optional
axis
parameter toinsert
method forColumn
andMaskedColumn
classes. [#6092]
astropy.units#
Moved
units.cgs.emu
tounits.deprecated.emu
due to ambiguous definition of “emu”. [#4918, #5906]jupiterMass
,earthMass
,jupiterRad
, andearthRad
no longer have their prefixed units included in the standard units. If needed, they can still be found inunits.deprecated
. [#5661]solLum
,``solMass``, andsolRad
no longer have their prefixed units included in the standard units. If needed, they can still be found inunits.required_by_vounit
, and are enabled by default. [#5661]Removed deprecated
Unit.get_converter
. [#6170]Internally, astropy replaced use of
.to(unit).value
with the newto_value(unit)
method, since this is somewhat faster. Any subclasses that overwrote.to
, should also overwrite.to_value
(or possibly just the private._to_value
method. (If you did this, please let us know what was lacking that made this necessary!). [#6137]
astropy.utils#
astropy.visualization#
Removed the deprecated
scale_image
function. [#6170]
astropy.vo#
astropy.wcs#
Removed deprecated
wcs.rotateCD
. [#6170]
Bug Fixes#
astropy.convolution#
Major change in convolution behavior and keyword arguments:
astropy.convolution.convolve
was not performing normalized convolution in earlier versions of astropy. [#5782]Direct convolution previously implemented the wrong definition of convolution. This error only affects asymmetric kernels. [#6267]
astropy.coordinates#
The
astropy.coordinates.Galactic
frame had an incorrect ordering for the ‘u’, ‘v’, and ‘w’ cartesian coordinates. [#6330]The
astropy.coordinates.search_around_sky
,astropy.coordinates.search_around_3d
, andSkyCoord
equivalent methods now correctly yield anastropy.coordinates.Angle
as the third return type even if there are no matches (previously it returned a raw Quantity). [#6347]
astropy.io.ascii#
Fix an issue where the fast C-reader was dropping table comments for a table with no data lines. [#8274]
astropy.io.fits#
comments
meta key (which isio.ascii
’s table convention) is output toCOMMENT
instead ofCOMMENTS
header. Similarly,COMMENT
headers are read intocomments
meta [#6097]Use more sensible fix values for invalid NAXISj header values. [#5935]
Close file on error to avoid creating a
ResourceWarning
warning about an unclosed file. [#6168, #6177]
astropy.modeling#
Creating a compound model where one of the submodels is a compound model whose parameters were changed now uses the updated parameters and not the parameters of the original model. [#5741]
Allow
Mapping
andIdentity
to be fittable. [#6018]Gaussian models now impose positive
stddev
in fitting. [#6019]OrthoPolynomialBase (Chebyshev2D / Legendre2D) models were being evaluated incorrectly when part of a compound model (using the parameters from the original model), which in turn caused fitting to fail as a no-op. [#6085]
Allow
Ring2D
to be defined usingr_out
. [#6192]Make
LinearLSQFitter
produce correct results with fixed model parameters and allowShift
andScale
to be fitted withLinearLSQFitter
andLevMarLSQFitter
. [#6174]
astropy.stats#
astropy.table#
astropy.time#
Fixed the initial condition of
TimeFITS
to allow scale, FITS scale and FITS realization to be checked and equated properly. [#6202]
astropy.visualization#
Fixed a bug that caused the default WCS to return coordinates offset by one. [#6339]
astropy.vo#
Fixed a bug in vo.samp when stopping a hub for which a lockfile was not created. [#6211]
Other Changes and Additions#
Numpy 1.7 and 1.8 are no longer supported. [#6006]
Python 3.3 is no longer supported. [#6020]
The bundled ERFA was updated to version 1.4.0. [#6239]
The bundled version of pytest has now been removed, but the astropy.tests.helper.pytest import will continue to work properly. Affiliated packages should nevertheless transition to importing pytest directly rather than from astropy.tests.helper. This also means that pytest is now a formal requirement for testing for both Astropy and for affiliated packages. [#5694]
Version 1.3.3 (2017-05-29)#
Bug Fixes#
astropy.coordinates#
Fixed a bug where
StaticMatrixTransform
erroneously copied frame attributes from the input coordinate to the output frame. In practice, this didn’t actually affect any transforms in Astropy but may change behavior for users who explicitly used theStaticMatrixTransform
in their own code. [#6045]Fixed
get_icrs_coordinates
to loop through all the urls in case one raises an exception. [#5864]
astropy.io.fits#
Fix table header not written out properly when
fits.writeto()
convenience function is used. [#6042]Fix writing out read-only arrays. [#6036]
Extension headers are written out properly when the
fits.update()
convenience function is used. [#6058]Angstrom, erg, G, and barn are no more reported as deprecated FITS units. [#5929]
astropy.table#
Fix problem with Table pprint/pformat raising an exception for non-UTF-8 compliant bytestring data. [#6117]
astropy.units#
astropy.utils#
astropy.visualization#
Fix bug in ManualInterval which caused the limits to be returned incorrectly if set to zero, and fix defaults for ManualInterval in the presence of NaNs. [#6088]
Get rid of warnings that occurred when slicing a cube due to the tick locator trying to find ticks for the sliced axis. [#6104]
Accept normal Matplotlib keyword arguments in set_xlabel and set_ylabel functions. [#5686, #5692, #6060]
Fix a bug that caused labels to be missing from frames with labels that could change direction mid-axis, such as EllipticalFrame. Also ensure that empty tick labels do not cause any warnings. [#6063]
Version 1.3.2 (2017-03-30)#
Bug Fixes#
astropy.coordinates#
astropy.units#
Add support for
heaviside
ufunc (new in numpy 1.13). [#5920]
astropy.utils#
Other Changes and Additions#
File permissions are revised in the released source distribution. [#5912]
Version 1.3.1 (2017-03-18)#
New Features#
astropy.utils#
The
deprecated_renamed_argument
decorator got a newpending
parameter to suppress the deprecation warnings. [#5761]
Bug Fixes#
astropy.coordinates#
Changed
SkyCoord
so that frame attributes which are not valid for the currentframe
(but are valid for other frames) are stored on theSkyCoord
instance instead of the underlyingframe
instance (e.g., settingrelative_humidity
on an ICRSSkyCoord
instance.) [#5750]Ensured that
position_angle
andseparation
give correct answers for frames with different equinox (see #5722). [#5762]
astropy.io.fits#
Fix problem with padding bytes written for BinTable columns converted from unicode [#5280, #5287, #5288, #5296].
Fix out-of-order TUNITn cards when writing tables to FITS. [#5720]
Recognize PrimaryHDU when non boolean values are present for the ‘GROUPS’ header keyword. [#5808]
Fix the insertion of new keywords in compressed image headers (
CompImageHeader
). [#5866]
astropy.modeling#
Fixed a problem with setting
bounding_box
on 1D models. [#5718]Fixed a broadcasting problem with weighted fitting of 2D models with
LevMarLSQFitter
. [#5788]Fixed a problem with passing kwargs to fitters, specifically
verblevel
. [#5815]Changed FittingWithOutlierRemoval to reject on the residual to the fit [#5831]
astropy.stats#
astropy.table#
Fix problem where key for caching column format function was not sufficiently unique. [#5803]
Handle sorting NaNs and masked values in jsviewer. [#4052, #5572]
Ensure mixin columns can be added to a table using a scalar value for the right-hand side if the type supports broadcasting. E.g., for an existing
QTable
,t['q'] = 3*u.m
will now add a column as expected. [#5820]Fixes the bug of setting/getting values from rows/columns of a table using numpy array scalars. [#5772]
astropy.units#
Fixed problem where IrreducibleUnits could fail to unpickle. [#5868]
astropy.utils#
Avoid importing
ipython
inutils.console
until it is necessary, to prevent deprecation warnings when importing, e.g.,Column
. [#5755]
astropy.visualization#
Avoid importing matplotlib.pyplot when importing astropy.visualization.wcsaxes. [#5680, #5684]
Ignore Numpy warnings that happen in coordinate transforms in WCSAxes. [#5792]
Fix compatibility issues between WCSAxes and Matplotlib 2.x. [#5786]
Fix a bug that caused WCSAxes frame visual properties to not be copied over when resetting the WCS. [#5791]
astropy.extern#
Fixed a bug where PLY was overwriting its generated files. [#5728]
Other Changes and Additions#
Fixed a deprecation warning that occurred when running tests with astropy.test(). [#5689]
The deprecation of the
clobber
argument (originally deprecated in 1.3.0) in theio.fits
write functions was changed to a “pending” deprecation (without displaying warnings) for now. [#5761]Updated bundled astropy-helpers to v1.3.1. [#5880]
Version 1.3 (2016-12-22)#
New Features#
astropy.convolution#
The
convolve
andconvolve_fft
arguments now support amask
keyword, which allows them to also supportNDData
objects as inputs. [#5554]
astropy.coordinates#
Added an
of_address
classmethod toEarthLocation
to enable fast creation ofEarthLocation
objects given an address by querying the Google maps API [#5154].A new routine,
get_body_barycentric_posvel
has been added that allows one to calculate positions as well as velocities for solar system bodies. For JPL kernels, this roughly doubles the execution time, so if one requires only the positions, one should useget_body_barycentric
. [#5231]Transformations between coordinate systems can use the more accurate JPL ephemerides. [#5273, #5436]
Arithmetic on representations, such as addition of two representations, multiplication with a
Quantity
, or calculating the norm viaabs
, has now become possible. Furthermore, there are new methodsmean
,sum
,dot
, andcross
. For all these, the representations are treated as vectors in cartesian space (temporarily converting toCartesianRepresentation
if necessary). [#5301] has now become possible. Furthermore, there are news methodsmean
,sum
,dot
, andcross
with obvious meaning. [#5301] multiplication with aQuantity
has now become possible. Furthermore, there are new methodsnorm
,mean
,sum
,dot
, andcross
. In all operations, the representations are treated as vectors. They are temporarily converted toCartesianRepresentation
if necessary. [#5301]CartesianRepresentation
can be initialized with plain arrays by passing in aunit
. Furthermore, for input with a vector array, the coordinates no longer have to be in the first dimension, but can be at anyxyz_axis
. To complement the latter, a newget_xyz(xyz_axis)
method allows one to get a vector array out along a given axis. [#5439]
astropy.io.ascii#
Files with “Fortran-style” columns (i.e. double-precision scientific notation with a character other than “e”, like
1.495978707D+13
) can now be parsed by the fast reader natively. [#5552]Allow round-tripping masked data tables in most formats by using an empty string
''
as the default representation of masked values when writing. [#5347]Allow reading HTML tables with unicode column values in Python 2.7. [#5410]
Check for self-consistency of ECSV header column names. [#5463]
Produce warnings when writing an IPAC table from an astropy table that contains metadata not supported by the IPAC format. [#4700]
astropy.io.fits#
“Lazy” loading of HDUs now occurs - when an HDU is requested, the file is only read up to the point where that HDU is found. This can mean a substantial speedup when accessing files that have many HDUs. [#5065]
astropy.io.misc#
Added
io.misc.yaml
module to support serializing core astropy objects using the YAML protocol. [#5486]
astropy.io.registry#
Added
delay_doc_updates
contextmanager to postpone the formatting of the documentation for theread
andwrite
methods of the class to optionally reduce the import time. [#5275]
astropy.modeling#
Added a class to combine astropy fitters and functions to remove outliers e. g., sigma clip. [#4760]
Added a
Tabular
model. [#5105]Added
Hermite1D
andHermite2D
polynomial models [#5242]Added the injection of EntryPoints into astropy.modeling.fitting if they inherit from Fitters class. [#5241]
Added bounding box to
Lorentz1D
andMexicanHat1D
models. [#5393]Added
Planar2D
functional model. [#5456]Updated
Gaussian2D
to accept no arguments (will use default x/y_stddev and theta). [#5537]
astropy.nddata#
Added
keep
and**kwargs
parameter tosupport_nddata
. [#5477]
astropy.stats#
astropy.table#
astropy.tests#
astropy.time#
astropy.units#
astropy.utils#
Added a new decorator:
deprecated_renamed_argument
. This can be used to rename a function argument, while it still allows for the use of the older argument name. [#5214]
astropy.visualization#
Added a
make_lupton_rgb
function to generate color images from three greyscale images, following the algorithm of Lupton et al. (2004). [#5535]Added
data
andinterval
inputs to theImageNormalize
class. [#5206]Added a new
simple_norm
convenience function. [#5206]Added a default stretch for the
Normalization
class. [#5206].Added a default
vmin/vmax
for theManualInterval
class. [#5206].The
wcsaxes
subpackage has now been integrated in astropy asastropy.visualization.wcsaxes
. This allows plotting of astronomical data/coordinate systems in Matplotlib. [#5496]
astropy.wcs#
Improved
footprint_to_file
: allow to specify the coordinate system, and use by default the one fromRADESYS
. Overwrite the file instead of appending to it. [#5494]
API Changes#
astropy.convolution#
discretize_model
now raises an exception if non-integer ranges are used. Previously it had incorrect behavior but did not raise an exception. [#5538]
astropy.coordinates#
SkyCoord
,ICRS
, and other coordinate objects, as well as the underlying representations such asSphericalRepresentation
andCartesianRepresentation
can now be reshaped using methods named like the numpy ones forndarray
(reshape
,swapaxes
, etc.) [#4123, #5254, #5482]The
obsgeoloc
andobsgeovel
attributes ofGCRS
andPrecessedGeocentric
frames are now stored and returned asCartesianRepresentation
objects, rather thanQuantity
objects. Similarly,EarthLocation.get_gcrs_posvel
now returns a tuple ofCartesianRepresentation
objects. [#5253]search_around_3d
andsearch_around_sky
now return units for the distance matching their input argument when no match is found, instead ofdimensionless_unscaled
. [#5528]
astropy.io.ascii#
ASCII writers now accept an ‘overwrite’ argument. The default behavior is changed so that a warning will be issued when overwriting an existing file unless
overwrite=True
. In a future version this will be changed from a warning to an exception to prevent accidentally overwriting a file. [#5007]The default representation of masked values when writing tables was changed from
'--'
to the empty string''
. Previously any user-suppliedfill_values
parameter would overwrite the class default, but now the values are prepended to the class default. [#5347]
astropy.io.fits#
The old
Header
interface, deprecated since Astropy 0.1 (PyFITS 3.1), has been removed entirely. See Header Interface Transition Guide for explanations on this change and help on the transition. [#5310]The following functions, classes and methods have been removed:
CardList
,Card.key
,Card.cardimage
,Card.ascardimage
,create_card
,create_card_from_string
,upper_key
,Header.ascard
,Header.rename_key
,Header.get_history
,Header.get_comment
,Header.toTxtFile
,Header.fromTxtFile
,new_table
,tdump
,tcreate
,BinTableHDU.tdump
,BinTableHDU.tcreate
.Removed
txtfile
argument to theHeader
constructor.Removed usage of
Header.update
withHeader.update(keyword, value, comment)
arguments.Removed
startColumn
andendColumn
arguments to theFITS_record
constructor.The
clobber
argument in FITS writers has been renamed tooverwrite
. This change affects the following functions and methods:tabledump
,writeto
,Header.tofile
,Header.totextfile
,_BaseDiff.report
,_BaseHDU.overwrite
,BinTableHDU.dump
andHDUList.writeto
. [#5171]Added an optional
copy
parameter tofits.Header
which controls if a copy is made when creating anHeader
from anotherHeader
. [#5005, #5326]
astropy.io.registry#
astropy.modeling#
Gaussian2D
now raises an error iftheta
is set at the same time ascov_matrix
(previouslytheta
was silently ignored). [#5537]
astropy.table#
Setting an existing table column (e.g.
t['a'] = [1, 2, 3]
) now defaults to replacing the column with a column corresponding to the new value (usingt.replace_column()
) instead of doing an in-place update. Any existing meta-data in the column (e.g. the unit) is discarded. An in-place update is still done when the new value is not a valid column, e.g.t['a'] = 0
. To force an in-place update use the patternt['a'][:] = [1, 2, 3]
. [#5556]Allow
collections.Mapping
-likedata
attribute when initializing aTable
object (dict
-like was already possible). [#5213]
astropy.tests#
The inputs to the
TestRunner.run_tests()
method now must be keyword arguments (no positional arguments). This applies to theastropy.test()
function as well. [#5505]
astropy.utils#
Renamed
ignored
context manager incompat.misc
tosuppress
to be consistent with https://bugs.python.org/issue19266 . [#5003]
astropy.visualization#
astropy.vo#
The
clobber
argument inVOSDatabase.to_json()
has been renamed tooverwrite
. [#5171]
astropy.wcs#
wcs.rotateCD()
was deprecated without a replacement. [#5240]
Bug Fixes#
astropy.coordinates#
Transformations between CIRS and AltAz now correctly account for the location of the observer. [#5591]
GCRS frames representing a location on Earth with multiple obstimes are now allowed. This means that the solar system routines
get_body
,get_moon
andget_sun
now work with non-scalar times and a non-geocentric observer. [#5253]
astropy.io.ascii#
Fix issue with units or other astropy core classes stored in table meta. [#5605]
astropy.io.fits#
Copying a
fits.Header
usingcopy
ordeepcopy
from thecopy
module will useHeader.copy
to ensure that modifying the copy will not alter the other original Header and vice-versa. [#4990, #5323]HDUList.info()
no longer raisesAttributeError
in presence ofBZERO
. [#5508]Avoid exceptions with numpy 1.10 and up when using scaled integer data where
BZERO
has float type but integer value. [#4639, #5527]Converting a header card to a string now calls
self.verify('fix+warn')
instead ofself.verify('fix')
so headers with invalid keywords will not raise aVerifyError
on printing. [#887,#5054]FITS_Record._convert_ascii
now converts blank fields to 0 when a non-blank null column value is set. [#5134, #5394]
astropy.io.registry#
read
now correctly raises an IOError if a file with an unknown extension can’t be found, instead of raising IORegistryError: “Format could not be identified.” [#4779]
astropy.time#
Ensure
Time
instances holding a singledelta_ut1_utc
can be copied, flattened, etc. [#5225]
astropy.units#
Operations involving
Angle
orDistance
, or any otherSpecificTypeQuantity
instance, now also keep return an instance of the same type if the instance was the second argument (if the resulting unit is consistent with the specific type). [#5327]Inplace operations on
Angle
andDistance
instances now raise an exception if the final unit is not equivalent to radian and meter, resp. Similarly, views asAngle
andDistance
can now only be taken from quantities with appropriate units, and views asQuantity
can only be taken from logarithmic quanties such asMagnitude
if the physical unit is dimensionless. [#5070]Conversion from quantities to logarithmic units now correctly causes a logarithmic quantity such as
Magnitude
to be returned. [#5183]
astropy.wcs#
SIP distortion for an alternate WCS is correctly initialized now by looking at the “CTYPE” values matching the alternate WCS. [#5443]
Other Changes and Additions#
The bundled ERFA was updated to version 1.3.0. This includes the leap second planned for 2016 Dec 31.
astropy.coordinates#
Initialization of
Angle
has been sped up forQuantity
andAngle
input. [#4970]The use of
np.matrix
instances in the transformations has been deprecated, since this class does not allow stacks of matrices. As a result, the semi-public functionsangles.rotation_matrix
andangles.angle_axis
are also deprecated, in favour of the new routines with the same name incoordinates.matrix_utilities
. [#5104]A new
BaseCoordinateFrame.cache
dictionary has been created to expose the internal cache. This is useful when modifying representation data in-place without usingrealize_frame
. Additionally, documentation for in-place operations on coordinates were added. [#5575]Coordinates and their representations are printed with a slightly different format, following how numpy >= 1.12 prints structured arrays. [#5423]
astropy.cosmology#
The default cosmological model has been changed to Planck 2015, and the citation strings have been updated. [#5372]
astropy.extern#
astropy.io.fits#
astropy.io.registry#
Reduced the time spent in the
get_formats
function. This also reduces the time it takes to import astropy subpackages, i.e.astropy.coordinates
. [#5262]
astropy.units#
The functions
add_enabled_units
,set_enabled_equivalencies
andadd_enabled_equivalencies
have been sped up by copying the current_UnitRegistry
instead of building it from scratch. [#5306]To build the documentation, the
build_sphinx
command has been deprecated in favor ofbuild_docs
. [#5179]The
--remote-data
option topython setup.py test
can now take different arguments:--remote-data=none
is the same as not specifying--remote-data
(skip all tests that require the internet),--remote-data=astropy
skips all tests that need remote data except those that require only data from data.astropy.org, and--remote-data=any
is the same as--remote-data
(run all tests that use remote data). [#5506]The pytest
recwarn
fixture has been removed from the tests in favor ofutils.catch_warnings
. [#5489]Deprecated escape sequences in strings (Python 3.6) have been removed. [#5489]
Version 1.2.2 (2016-12-22)#
Bug Fixes#
astropy.io.ascii#
Fix a bug where the
fill_values
parameter was ignored when writing a table to HTML format. [#5379]
astropy.io.fits#
Handle unicode FITS BinTable column names on Python 2 [#5204, #4805]
Fix reading of float values from ASCII tables, that could be read as float32 instead of float64 (with the E and F formats). These values are now always read as float64. [#5362]
Fixed memoryleak when using the compression module. [#5399, #5464]
Able to insert and remove lower case HIERARCH keywords in a consistent manner [#5313, #5321]
astropy.stats#
Fixed broadcasting in
sigma_clip
when using negativeaxis
. [#4988]
astropy.table#
astropy.units#
astropy.wcs#
Other Changes and Additions#
The bundled ERFA was updated to version 1.3.0. This includes the leap second planned for 2016 Dec 31.
astropy.stats#
Version 1.2.1 (2016-06-22)#
Bug Fixes#
astropy.io.fits#
astropy.units#
Fixed an
ImportError
that occurred wheneverastropy.constants
was imported beforeastropy.units
. [#5030, #5121]Magnitude zero points used to define
STmag
,ABmag
,M_bol
andm_bol
are now collected inastropy.units.magnitude_zero_points
. They are not enabled as regular units by default, but can be included usingastropy.units.magnitude_zero_points.enable()
. This makes it possible to round-trip magnitudes as originally intended. [#5030]
Version 1.2 (2016-06-19)#
General#
Astropy now requires Numpy 1.7.0 or later. [#4784]
New Features#
astropy.constants#
Add
L_bol0
, the luminosity corresponding to absolute bolometric magnitude zero. [#4262]
astropy.coordinates#
CartesianRepresentation
now includes a transform() method that can take a 3x3 matrix to transform coordinates. [#4860]Solar system and lunar ephemerides accessible via
get_body
,get_body_barycentric
andget_moon
functions. [#4890]Added astrometric frames (i.e., a frame centered on a particular point/object specified in another frame). [#4909, #4941]
Added
SkyCoord.spherical_offsets_to
method. [#4338]Recent Earth rotation (IERS) data are now auto-downloaded so that AltAz transformations for future dates now use the most accurate available rotation values. [#4436]
Add support for heliocentric coordinate frames. [#4314]
astropy.cosmology#
astropy.io.ascii#
File name could be passed as
Path
object. [#4606]Check that columns in
formats
specifier exist in the output table when writing. [#4508, #4511]Allow trailing whitespace in the IPAC header lines. [#4758]
Updated to filter out the default parser warning of BeautifulSoup. [#4551]
Added support for reading and writing reStructuredText simple tables. [#4812]
astropy.io.fits#
File name could be passed as
Path
object. [#4606]Header allows a dictionary-like cards argument during creation. [#4663]
New function
convenience.table_to_hdu
to allow creating a FITS HDU object directly from an astropyTable
. [#4778]New optional arguments
ignore_missing
andremove_all
are added toastropy.io.fits.header.remove()
. [#5020]
astropy.io.registry#
Added custom
IORegistryError
. [#4833]
astropy.io.votable#
File name could be passed as
Path
object. [#4606]
astropy.modeling#
astropy.nddata#
UnknownUncertainty
new subclass ofNDUncertainty
that can be used to save uncertainties that cannot be used for error propagation. [#4272]NDArithmeticMixin
:add
,subtract
,multiply
anddivide
can be used as classmethods but require that two operands are given. These operands don’t need to be NDData instances but they must be convertible to NDData. This conversion is done internally. Using it on the instance does not require (but also allows) two operands. [#4272, #4851]NDDataRef
new subclass that implementsNDData
together with all currently available mixins. This class does not implement additional attributes, methods or a numpy.ndarray-like interface likeNDDataArray
. attributes, methods or a numpy.ndarray-like interface likeNDDataArray
. [#4797]
astropy.stats#
Added Bayesian and Akaike Information Criteria. [#4716]
Added Bayesian upper limits for Poisson count rates. [#4622]
Added
circstats
; a module for computing circular statistics. [#3705, #4472]Updated
bootstrap
to allow bootstrapping statistics with multiple outputs. [#3601]Added
LombScargle
class to compute Lomb-Scargle periodograms [#4811]
astropy.table#
Table.show_in_notebook
andTable.show_in_browser(jsviewer=True)
now yield tables with an “idx” column, allowing easy identification of the index of a row even when the table is re-sorted in the browser. [#4404]Added
AttributeError
when trying to set mask on non-masked table. [#4637]Allow to use a tuple of keys in
Table.sort
. [#4671]Added
itercols
; a way to iterate through columns of a table. [#3805, #4888]Table.show_in_notebook
and the default notebook display (i.e.,Table._repr_html_
) now use consistent table styles which can be set using theastropy.table.default_notebook_table_class
configuration item. [#4886]Added interface to create
Table
directly from any table-like object that has an__astropy_table__
method. [#4885]
astropy.tests#
Enable test runner to obtain documentation source files from directory other than “docs”. [#4748]
astropy.time#
astropy.units#
The option to use tuples to indicate fractional powers of units, deprecated in 0.3.1, has been removed. [#4449]
Added slug to imperial units. [#4670]
Added Earth radius (
R_earth
) and Jupiter radius (R_jup
) to units. [#4818]Added a
represents
property to allow access to the definition of a named unit (e.g.,u.kpc.represents
yields1000 pc
). [#4806]Add bolometric absolute and apparent magnitudes,
M_bol
andm_bol
. [#4262]
astropy.utils#
Path
object could be passed toget_readable_fileobj
. [#4606]Implemented a generic and extensible way of merging metadata. [#4459]
Added
format_doc
decorator which allows to replace and/or format the current docstring of an object. [#4242]Added a new context manager
set_locale
to temporarily set the current locale. [#4363]Added new IERS_Auto class to auto-download recent IERS (Earth rotation) data when required by coordinate or time transformations. [#4436]
astropy.visualization#
Add zscale interval based on Numdisplay’s implementation. [#4776]
API changes#
astropy.config#
astropy.coordinates#
astropy.cosmology#
astropy.io.ascii#
Add a way to control HTML escaping when writing a table as an HTML file. [#4423]
astropy.io.fits#
Two optional boolean arguments
ignore_missing
andremove_all
are added toHeader.remove
. [#5020]
astropy.modeling#
astropy.nddata#
NDDataBase
does not set the private uncertainty property anymore. This only affects you if you subclassNDDataBase
directly. [#4270]NDDataBase
: theuncertainty
-setter is removed. A similar one is added inNDData
so this also only affects you if you subclassedNDDataBase
directly. [#4270]NDDataBase
:uncertainty
-getter returnsNone
instead of the private uncertainty and is now abstract. This getter is moved toNDData
so it only affects direct subclasses ofNDDataBase
. [#4270]NDData
accepts a Quantity-like data and an explicitly given unit. Before a ValueError was raised in this case. The final instance will use the explicitly given unit-attribute but doesn’t check if the units are convertible and the data will not be scaled. [#4270]NDData
: the given mask, explicit or implicit if the data was masked, will be saved by the setter. It will not be saved directly as the private attribute. [#4879]NDData
accepts an additional argumentcopy
which will copy every parameter before it is saved as attribute of the instance. [#4270]NDData
: added anuncertainty.getter
that returns the private attribute. It is equivalent to the oldNDDataBase.uncertainty
-getter. [#4270]NDData
: added anuncertainty.setter
. It is slightly modified with respect to the oldNDDataBase.uncertainty
-setter. The changes include:if the uncertainty has no uncertainty_type an info message is printed instead of a TypeError and the uncertainty is saved as
UnknownUncertainty
except the uncertainty is None. [#4270]the requirement that the uncertainty_type of the uncertainty needs to be a string was removed. [#4270]
if the uncertainty is a subclass of NDUncertainty the parent_nddata attribute will be set so the uncertainty knows to which data it belongs. This is also a Bugfix. [#4152, #4270]
NDData
: added ameta
-getter, which will set and return an empty OrderedDict if no meta was previously set. [#4509, #4469]NDData
: added anmeta
-setter. It requires that the meta is dictionary-like (it also accepts Headers or ordered dictionaries and others) or None. [#4509, #4469, #4921]NDArithmeticMixin
: The operand in arithmetic methods (add
, …) doesn’t need to be a subclass ofNDData
. It is sufficient if it can be converted to one. This conversion is done internally. [#4272]NDArithmeticMixin
: The arithmetic methods allow several new arguments to control how or if different attributes of the class will be processed during the operation. [#4272]NDArithmeticMixin
: Giving the parameterpropagate_uncertainties
as positional keyword is deprecated and will be removed in the future. You now need to specify it as keyword-parameter. BesidesTrue
andFalse
alsoNone
is now a valid value for this parameter. [#4272, #4851]NDArithmeticMixin
: The wcs attribute of the operands is not compared and thus raises no ValueError if they differ, except if acompare_wcs
parameter is specified. [#4272]NDArithmeticMixin
: The arithmetic operation was split from a general_arithmetic
method to different specialized private methods to allow subclasses more control on how the attributes are processed without overriding_arithmetic
. The_arithmetic
method is now used to call these other methods. [#4272]NDSlicingMixin
: If the attempt at slicing the mask, wcs or uncertainty fails with aTypeError
a Warning is issued instead of the TypeError. [#4271]NDUncertainty
:support_correlated
attribute is deprecated in favor ofsupports_correlated
which is a property. Also affectsStdDevUncertainty
. [#4272]NDUncertainty
: added the__init__
that was previously implemented inStdDevUncertainty
and takes an additionalunit
parameter. [#4272]NDUncertainty
: added aunit
property without setter that returns the set unit or if not set the unit of the parent. [#4272]NDUncertainty
: included aparent_nddata
property similar to the one previously implemented in StdDevUncertainty. [#4272]NDUncertainty
: added anarray
property with setter. The setter will convert the value to a plain numpy array if it is a list or a subclass of a numpy array. [#4272]NDUncertainty
:propagate_multiply
and similar were removed. Before they were abstract properties and replaced by methods with the same name but with a leading underscore. The entry point for propagation is a method calledpropagate
. [#4272]NDUncertainty
and subclasses: implement a representation (__repr__
). [#4787]StdDevUncertainty
: error propagation allows an explicitly given correlation factor, which may be a scalar or an array which will be taken into account during propagation. This correlation must be determined manually and is not done by the uncertainty! [#4272]StdDevUncertainty
: thearray
is converted to a plain numpy array only if it’s a list or a subclass of numpy.ndarray. Previously it was always cast to a numpy array but also allowed subclasses. [#4272]StdDevUncertainty
: setting theparent_nddata
does not compare if the shape of it’s array is identical to the parents data shape. [#4272]StdDevUncertainty
: thearray.setter
doesn’t compare if the array has the same shape as the parents data. [#4272]StdDevUncertainty
: deprecatedsupport_correlated
in favor ofsupports_correlated
. [#4272, #4828]StdDevUncertainty
: deprecatedpropagate_add
and similar methods in favor ofpropagate
. [#4272, #4828]Allow
data
to be a named argument inNDDataArray
. [#4626]
astropy.table#
operations.unique
now has akeep
parameter, which allows one to select whether to keep the first or last row in a set of duplicate rows, or to remove all rows that are duplicates. [#4632]QTable
now behaves more consistently by making columns act as aQuantity
even if they are assigned a unit after the table is created. [#4497, #4884]
astropy.units#
Remove deprecated
register
argument for Unit classes. [#4448]
astropy.utils#
The astropy.utils.compat.argparse module has now been deprecated. Use the Python ‘argparse’ module directly instead. [#4462]
The astropy.utils.compat.odict module has now been deprecated. Use the Python ‘collections’ module directly instead. [#4466]
The astropy.utils.compat.gzip module has now been deprecated. Use the Python ‘gzip’ module directly instead. [#4464]
The deprecated
ScienceStateAlias
class has been removed. [#2767, #4446]The astropy.utils.compat.subprocess module has now been deprecated. Use the Python ‘subprocess’ module instead. [#4483]
The astropy.utils.xml.unescaper module now also unescapes
'%2F'
to'/'
and'&&'
to'&'
in a given URL. [#4699]The astropy.utils.metadata.MetaData descriptor has now two optional parameters: doc and copy. [#4921]
The default IERS (Earth rotation) data now is now auto-downloaded via a new class IERS_Auto. When extrapolating UT1-UTC or polar motion values outside the available time range, the values are now clipped at the last available value instead of being linearly extrapolated. [#4436]
astropy.wcs#
Bug fixes#
astropy.coordinates#
Ameliorate a problem with
get_sun
not round-tripping due to approximations in the light deflection calculation. [#4952]Ensure that
angle_utilities.position_angle
accepts floats, as stated in the docstring. [#3800]Ensured that transformations for
GCRS
frames are correct for non-geocentric observers. [#4986]Fixed a problem with the
Quantity._repr_latex_
method causing errors when showing anEarthLocation
in a Jupyter notebook. [#4542, #5068]
astropy.io.ascii#
Fix a problem where the fast reader (with use_fast_converter=False) can fail on non-US locales. [#4363]
Fix astropy.io.ascii.read handling of units for IPAC formatted files. Columns with no unit are treated as unitless not dimensionless. [#4867, #4947]
Fix problems the header parsing in the sextractor reader. [#4603, #4910]
astropy.io.fits#
GroupsHDU.is_image
property is now set toFalse
. [#4742]Ensure scaling keywords are removed from header when unsigned integer data is converted to signed type. [#4974, #5053]
Made TFORMx keyword check more flexible in test of compressed images to enable compatibility of the test with cfitsio 3.380. [#4646, #4653]
astropy.io.votable#
astropy.modeling#
astropy.nddata#
NDData
giving masked_Quantities as data-argument will use the implicitly passed mask, unit and value. [#4270]NDData
using a subclass implementingNDData
withNDArithmeticMixin
now allows error propagation. [#4270]Fixed memory leak that happened when uncertainty of
NDDataArray
was set. [#4825, #4862]StdDevUncertainty
: During error propagation the unit of the uncertainty is taken into account. [#4272]NDArithmeticMixin
:divide
andmultiply
yield correct uncertainties if only one uncertainty is set. [#4152, #4272]
astropy.stats#
astropy.table#
astropy.units#
astropy.utils#
The astropy.utils.compat.fractions module has now been deprecated. Use the Python ‘fractions’ module directly instead. [#4463]
Added
format_doc
decorator which allows to replace and/or format the current docstring of an object. [#4242]Attributes using the astropy.utils.metadata.MetaData descriptor are now included in the sphinx documentation. [#4921]
astropy.vo#
Relaxed expected accuracy of Cone Search prediction test to reduce spurious failures. [#4382]
astropy.wcs#
astropy.wcs.to_header removes “-SIP” from CTYPE when SIP coefficients are not written out, i.e.
relax
is eitherFalse
orNone
. astropy.wcs.to_header appends “-SIP” to CTYPE when SIP coefficients are written out, i.e.relax=True
. [#4814]Made
wcs.bounds_check
callwcsprm_python2c
, which means it works even ifwcs.set
has not been called yet. [#4957, #4966].WCS objects can no longer be reverse-indexed, which was technically permitted but incorrectly implemented previously [#4962]
Other Changes and Additions#
Python 2.6 is no longer supported. [#4486]
The bundled version of py.test has been updated to 2.8.3. [#4349]
Reduce Astropy’s import time (
import astropy
) by almost a factor 2. [#4649]Cython prerequisite for building changed to v0.19 in install.rst [#4705, #4710, #4719]
All astropy.modeling functionality that was deprecated in Astropy 1.0 has been removed. [#4857]
Added instructions for installing Astropy into CASA. [#4840]
Added an example gallery to the docs demonstrating short snippets/examples. [#4734]
Version 1.1.2 (2016-03-10)#
New Features#
astropy.wcs#
The
astropy.wcs
module now exposesWCSHDO_P*
constants that can be used to allow more control over output precision when using therelax
keyword argument. [#4616]
Bug Fixes#
astropy.io.ascii#
astropy.io.fits#
Fixed possible segfault during error handling in FITS tile compression. [#4489]
Fixed crash on pickling of binary table columns with the ‘X’, ‘P’, or ‘Q’ format. [#4514]
Fixed memory / reference leak that could occur when copying a
FITS_rec
object (the.data
for table HDUs). [#520]Fixed a memory / reference leak in
FITS_rec
that occurred in a wide range of cases, especially after writing FITS tables to a file, but in other cases as well. [#4539]
astropy.modeling#
Fix a bug to allow instantiation of a modeling class having a parameter with a custom setter that takes two parameters
(value, model)
[#4656]
astropy.table#
astropy.units#
Fixed sphinx issues on plotting quantities. [#4527]
astropy.utils#
astropy.visualization#
astropy.wcs#
Fixed possible exception in handling of SIP headers that was introduced in v1.1.1. [#4492]
Fixed a bug that caused WCS objects with a high dynamic range of values for certain parameters to lose precision when converted to a header. This occurred for example in cases of spectral cubes, where a spectral axis in Hz might have a CRVAL3 value greater than 1e10 but the spatial coordinates would have CRVAL1/2 values 8 to 10 orders of magnitude smaller. This bug was present in Astropy 1.1 and 1.1.1 but not 1.0.x. This has now been fixed by ensuring that all WCS keywords are output with 14 significant figures by default. [#4616]
Other Changes and Additions#
Version 1.1.1 (2016-01-08)#
New Features#
astropy.io.registry#
Allow
pathlib.Path
objects (available in Python 3.4 and later) for specifying the file name in registry read / write functions. [#4405]
astropy.utils#
console.human_file_size
now accepts quantities with byte-equivalent units [#4373]
Bug Fixes#
astropy.analytic_functions#
Fixed the blackbody functions’ handling of overflows on some platforms (Windows with MSVC, older Linux versions) with a buggy
expm1
function. [#4393]
astropy.io.fits#
Fixed an bug where updates to string columns in FITS tables were not saved on Python 3. [#4452]
Other Changes and Additions#
Updated bundled astropy-helpers to v1.1.1. [#4413]
Version 1.1 (2015-12-11)#
New Features#
astropy.config#
Added new tools
set_temp_config
andset_temp_cache
which can be used either as function decorators or context managers to temporarily use alternative directories in which to read/write the Astropy config files and download caches respectively. This is especially useful for testing, thoughset_temp_cache
may also be used as a way to provide an alternative (application specific) download cache for large data files, rather than relying on the default cache location in users’ home directories. [#3975]
astropy.constants#
Added the Thomson scattering cross-section. [#3839]
astropy.convolution#
Added Moffat2DKernel. [#3965]
astropy.coordinates#
Added
get_constellation
function andSkyCoord.get_constellation
convenience method to determine the constellation that a coordinate is in. [#3758]Added
PrecessedGeocentric
frame, which is based on GCRS, but precessed to a specific requested mean equinox. [#3758]Added
Supergalactic
frame to support de Vaucouleurs supergalactic coordinates. [#3892]SphericalRepresentation
now has a._unit_representation
class attribute to specify an equivalent UnitSphericalRepresentation. This allows subclasses of representations to pair up correctly. [#3757]Added functionality to support getting the locations of observatories by name. See
astropy.coordinates.EarthLocation.of_site
. [#4042]Added ecliptic coordinates, including
GeocentricTrueEcliptic
,BarycentricTrueEcliptic
, andHeliocentricTrueEcliptic
. [#3749]
astropy.cosmology#
astropy.io.ascii#
Automatically use
guess=False
when reading if the fileformat
is provided and the format parameters are uniquely specified. This update also removes duplicate format guesses to improve performance. [#3418]Calls to ascii.read() for fixed-width tables may now omit one of the keyword arguments
col_starts
orcol_ends
. Columns will be assumed to begin and end immediately adjacent to each other. [#3657]Add a function
get_read_trace()
that returns a traceback of the attempted read formats for the last call toastropy.io.ascii.read
. [#3688]Supports LZMA decompression via
get_readable_fileobj
[#3667]Allow
-
character is Sextractor format column names. [#4168]Improve DAOphot reader to read multi-aperture files [#3535, #4207]
astropy.io.fits#
astropy.io.misc#
Support saving all meta information, description and units of tables and columns in HDF5 files [#4103]
astropy.io.votable#
astropy.logger.py#
Added log levels (e.g., DEBUG, INFO, CRITICAL) to
astropy.log
[#3947]
astropy.modeling#
Added a new
Parameter.validator
interface for setting a validation method on individual model parameters. See theParameter
documentation for more details. [#3910]The projection classes that are named based on the 3-letter FITS WCS projections (e.g.
Pix2Sky_TAN
) now have aliases using longer, more descriptive names (e.g.Pix2Sky_Gnomonic
). [#3583]All of the standard FITS WCS projection types have been implemented in
astropy.modeling.projections
(by wrapping WCSLIB). [#3906]Added
Sersic1D
andSersic2D
model classes. [#3889]Added the Voigt profile to existing models. [#3901]
Added
bounding_box
property andrender_model
function [#3909]
astropy.nddata#
astropy.stats#
Added
sigma_lower
andsigma_upper
keywords tosigma_clip
to allow for non-symmetric clipping. [#3595]Added
cenfunc
,stdfunc
, andaxis
keywords tosigma_clipped_stats
. [