Full Changelog#
Version 6.0.0 (2023-11-25)#
New Features#
astropy.config#
The new
ConfigNamespace.help()method provides a convenient way to get information about configuration items. [#13499]
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
BaseGeodeticRepresentationwith the equatorial radius and flattening assigned to_equatorial_radiusand_flatteningattributes. [#14763]Add
BaseBodycentricRepresentation, a new spheroidal representation for bodycentric latitudes and longitudes. [#14851]Support Numpy broadcasting over frame data and attributes. [#15121]
astropy.cosmology#
Registered a
latexwriter for exporting a Cosmology object to a LaTex table. [#14701]Added argument
renameto 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]
The
Cosmologyclass now has a new property to access the parameters of the cosmology:.parameters. This property return a read-only dictionary of all the non-derived parameter values on the cosmology object. When accessed from the class (not an instance) the dictionary containsParameterinstances, not the values. [#15168]The field
defaulthas been added toParameter. This can be used to introspect the default value of a parameter on a cosmology class e.g.LambdaCDM.H0.default. [#15400]
astropy.io.fits#
Add new option
decompress_in_memorytofits.open, to decompress the whole file in memory at once, instead of decompressing the file progressively as data is needed. Default behavior is better for memory usage but sometimes slow, especially for files with many small HDUs. [#15501]
astropy.io.votable#
astropy.modeling#
Added a
GeneralSersic2Dmodel that can have “boxy” or “disky” isophotes. [#15545]
astropy.nddata#
A more flexible and/or compact string representation is now available for
NDDataobjects which visually indicates masked entries, and provides for better for dask array support. [#14438]
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.time#
Masked
Timeinstances now use astropy’s ownMaskedclass internally. This means thatMaskedinput is now properly recognized, and that masks get propagated also toQuantityoutput (such as from aTimeDeltaconverted to a unit of time), creatingMaskedQuantityinstances. [#15231]Added a
TimeDeltaformatquantity_strthat represents the time delta as a string with one or moreQuantitycomponents. This format provides a human-readable multi-scale string representation of a time delta. The default output sub-format is not considered stable in this release, please see astropy/astropy#15485 for more information. [#15264]
astropy.uncertainty#
Uncertainty
Distributionnow support structured data types, and as a result it now works also withEarthLocation. [#15304]Uncertainty
Distributioncan now be used inside representations, which also allows basic support inSkyCoord. While most calculations work, there are remaining issues. For instance, thereprdoes not show that the coordinates are distributions. [#15395]
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.MetaDatadefault dictionary can now be set with thedefault_factorykeyword argument. [#15265]astropy.utils.decorators.deprecatednow 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_coordmethod to print text usingSkyCoordobjects 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_OBSinauxprmand addswcsprm::timeto thewcsprmstruct to record theTIMEaxis. 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.config#
Removed deprecated
ConfigurationMissingWarningclass andupdate_default_configfunction; There are no replacements as they should no be used anymore. [#15466]
astropy.convolution#
Invalid kernel arithmetic operations now raise a
KernelArithmeticErrorinstead of a bareException. [#14728]Added base
KernelErrorerror class and removedDiscretizationErrorerror class (aValueErrorwill be raised instead). [#14732]discretize_modelwill now raise aValueErrorifmode='oversample'andfactordoes not have an integer value. [#14794]
astropy.coordinates#
Removed deprecated angle parsing and formatting utilities from
angle_utilities. Use the functions fromangle_formatsinstead. [#14675]The deprecated functionality of initializing
AngleorLongitudefrom atupleis 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.coordinatesinstead. If you need something that has been moved and is not available inastropy.coordinates, please open an issue on the Astropy issue tracker. [#15220]It is no longer possible to pass frame classes to the
transform_to()method of a low-level coordinate-frame class. It is still possible to pass frame instances. Thetransform_to()method of the high-levelSkyCoordclass is unaffected. [#15500]
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_neededandinf_likefromcosmology.utils. [#14677]Removed deprecated import paths from
astropy.cosmology.core. [#14782]Cosmology
Parameteris 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.latexto Cosmology IO. [#14938]The private module
astropy.cosmology.utilshas been deprecated. [#14980]Removed deprecated
get_cosmology_from_stringclass method indefault_cosmology; usegetinstead. [#15467]
astropy.io.ascii#
Several arguments in functions within
astropy.io.asciihave been deprecated and are either renamed or scheduled to be removed.read(): -Readerwill be removed. Instead supply the equivalentformatargument. -Inputterhas been renamed toinputter_cls. -Outputterhas been renamed tooutputter_cls.get_reader(): -Readerhas been renamed toreader_cls. -Inputterhas been renamed toinputter_cls. -Outputterhas been renamed tooutputter_cls.write(): -Writerwill be removed. Instead supply the equivalentformatargument.get_writer(): -Writerhas been renamed towriter_cls. [#14914]Removed deprecated
astropy.io.ascii.tests.common.raisestest helper; usepytest.raisesinstead. [#15470]
astropy.io.fits#
astropy.io.misc#
Removed deprecated
astropy.io.misc.asdfsubpackage. Useasdf-astropypackage instead. [#14668]fnunpickleandfnpickleare deprecated because they are not used anywhere withinastropy. If you must, use the module from Python standard library but be advised that pickle is insecure so you should only unpickle data that you trust. [#15418]
astropy.io.votable#
Removed deprecated
pedanticoption from theastropy.io.votable.table.parse()function and the corresponding configuration setting. Use theverifyoption instead. [#14669]Class
astropy.io.votable.tree.Tablehas been renamed toTableElementto avoid sharing the name withastropy.table.Table. [#15372]Fully removed support for version = ‘1.0’ on
VOTableFile__init__()and changed its tests to check correctly. It was raising aDeprecationWarningand now is raising aValueError. [#15490]
astropy.modeling#
Removed the
AliasDictclass frommodeling.utils. [#12943]Creating a model instance with parameters that have incompatible shapes will now raise a
ValueErrorrather than anIncompatibleShapeError. [#15209]Removal of deprecated code
_model_to_fit_paramsand_fitter_to_model_paramsfromfitting.py. [#15461]
astropy.stats#
The
BoxLeastSquares,BoxLeastSquaresResultsandLombScargleclasses are not available fromastropy.statsanymore, they are now available only fromastropy.timeseries. [#15530]
astropy.tests#
astropy.time#
Timehas switched to useMaskedarrays internally, instead of indicating masked values using NaN in the internaljd2attribute. As a result, any output from instances, such as one gets with, say, the.isotformat, will also useMaskedby default.For backwards compatibility, a new configuration item,
astropy.time.conf.masked_array_typeis introduced which is set to “astropy” by default (which indicates one wants to useMasked), but can also be set to “numpy”, in which casenumpy.ma.MaskedArraywill be used where possible (essentially, for all butQuantity). [#15231]Changed the
TimeDeltainit signature to be consistent with that ofTime. Previously the argument order wasval, val2, format, scale, copy. Now the order isval, val2, format, scale, *, precision, in_subfmt, out_subfmt, copy, where the arguments after the*must be specified by keyword. [#15264]
astropy.timeseries#
Removed deprecated
midpoint_epochinfoldfunction; useepoch_timeinstead. [#15462]
astropy.uncertainty#
The
.dtypeattribute exposed byDistributionis 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 theDistributionappear 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.0Quantityand 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]The following deprecated functionality has been removed:
littlehunit andwith_H0equivalency. They are still available fromcosmology.units.brightness_temperatureequivalency no longer automatically swaps the order of its arguments if it does not match the expectation.PhysicalTypeno longer supportsstrmethods and attributes. [#15514]
astropy.utils#
Removed deprecated
OrderedDescriptor,OrderedDescriptorContainer, andset_localeinastropy.utils.misc. [#14679]is_path_hidden()andwalk_skip_hidden()are deprecated. [#14759]The structure of
utils.metadatahas been refactored, but all the available functions and classes are still present and should be imported as before. [#15166]The
astropy.utils.metadata.MetaDataclass, 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.MetaDatanow returns None instead of itself. [#15237]The
astropy.utils.metadata.MetaDataclass, which is used throughout astropy to carry metadata on tables, columns, etc., can now also be used on frozen dataclasses. [#15404]Removed deprecated
version_pathinminversionfunction; it is no longer used. [#15468]
astropy.visualization#
The
bboxes,ticklabels_bbox, andtick_out_sizearguments toastropy.visualization.wcaxes.ticklabels.TickLabels.draw()now have no effect and are deprecated. This is to allow rasterized ticks to be drawn correctly on WCSAxes. [#14760]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]Deprecated the
expattribute in theLogStretch,InvertedLogStretch,PowerDistStretch, andInvertedPowerDistStretchstretch classes, and thepowerattribute in thePowerStretch. Instead, use theaattribute, which matches the input keyword. [#15538]Removed the maximum value of the
aparameter in theAsinhStretchandSinhStretchstretch classes. [#15539]
astropy.wcs#
Bug Fixes#
astropy.coordinates#
Fixed minor bug when getting solar system positions of objects from Type 3 SPICE kernel files. [#15612]
astropy.cosmology#
astropy.io.fits#
Reading a table from FITS now respects the TNULL property of a column, passing it into the column’s
fill_value. [#14723]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
Cutout2Dto 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]
Ensure that tables written to FITS with both masked and unmasked columns roundtrip properly (previously, all integer columns would become masked if any column was masked). [#15473]
Fix segfault with error report in tile decompression. [#15489]
astropy.io.votable#
Output of
reprfor VOTable instance now clearly shows it is a VOTable and not generic astropy Table. [#14702]
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 unmaskedNDDataobjects. [#14995]
astropy.table#
Table.as_arraynow respects thefill_valueproperty of masked columns. [#14723]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
QuantityorTime, the grouped table keys did not reflect the original column values. ForQuantitythis meant that the key values were pure float values without the unit, while forTimethe key values were the pair ofjd1andjd2float values. [#14966]
astropy.time#
Ensure that the
Timecaches of formats and scales do not get out of sync with the actual data, even if another instance, holding a view of the data is written to. E.g., if one doest01 = t[:2], and setst[0]after, it is now guaranteed thatt01.valuewill correctly reflect that change in value. [#15453]
astropy.units#
In VOunits, “pix”, “au”, “a”, and “ct” are removed from the list of deprecated units. [#14885]
astropy.utils#
Ufuncs with more than 2 operands (such as
erfa.dtf2d) now work also if all inputs are scalars and more than two inputs have masks. [#15450]Ensured that
str(masked_array)looks likestr(unmasked_array)also for array scalars. Thus, like regular array scalars, the precision is ignored for float, and strings do not include extra quoting. [#15451]
astropy.visualization#
astropy.wcs#
Other Changes and Additions#
The minimum supported version of NumPy is now 1.22. [#15006]
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.iersAPI. Deprecation warnings may be issued when certain files are accessed directly. [#14819]Switch from using
setup.cfgfor project configuration to usingpyproject.toml. [#15247]Update bundled expat to 2.5.0. [#15585]
Version 5.3.4 (2023-10-03)#
Bug Fixes#
astropy.io.misc#
Updated
astropy.io.misc.yamlsodump()` 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#
Fixed a bug in
convert_to_writable_filelikewhereGzipFilewas not closed properly. [#15359]
astropy.units#
In VOUnit, the spaces around the slash were removed in the formatting of fractions, and fractional powers now also use the “**” operator. [#15282]
We now ensure that the unit
u.cgs.cmis just an alias ofu.si.cm, instead of a redefinition. This ensures thatu.Unit("cm") / u.cmwill reliably cancel to dimensionless (instead of some “cm / cm”). [#15368]
astropy.utils#
For
Masked,np.ptpand 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]
Other Changes and Additions#
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
w0wzCDMfunctions ininv_efunchas been corrected to 3, from -3. [#15224]
astropy.modeling#
Astropy modeling can filter non-finite data values using the
filter_non_finitekeyword argument in a fitter call. Now whenfilter_non_finiteis 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
-OOflag. [#15037]
astropy.nddata#
Fix for collapse operations on
NDDatawithout masks or units. [#15082]
astropy.units#
Modified the implementation of
np.power()for instances ofQuantityto 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_scalehas 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
Cutout2Dto 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 unmaskedNDDataobjects. [#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_cachetoEarthLocation.of_site()andEarthLocation.get_site_names()to force the download of the latest site registry. [#13993]Added
atolargument to functionis_O3andis_rotationin matrix utilities. [#14371]A new class
astropy.coordinates.StokesCoordhas been added to represent world coordinates describing polarization state. This change introduces a breaking change to the return value ofastropy.wcs.WCS.pixel_to_worldwhere before au.Quantityobject would be returned containing numerical values representing a Stokes profile now aStokesCoordobject is returned. The previous numerical values can be accessed withStokesCoord.value. [#14482]Add an optional parameter
locationtoEarthLocation.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,
FlatwpwaCDMandFlatw0wzCDM, which are the flat variants ofwpwaCDMandw0wzCDM, 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_rowskeyword argument. [#14182]
astropy.io.fits#
Added support for >3D data in CompImageHDU [#14252]
Added a
CompImageHDU.sectionproperty 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_typeoption inCompImageHDU. [#14408]Added new properties
compression_typeandtile_shapeonCompImageHDU, 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 aCompImageHDUobject 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
TypeErroris 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
LinearLSQFitterfor polynomial models with fixed inputs. [#14037]
astropy.nddata#
astropy.nddata.NDDataArraynow has collapsing methods likesum,mean,min, andmaxwhich operate along any axes, and better support forastropy.utils.Maskedobjects. [#14175]
astropy.stats#
vonmisesmlehas now functioning “weights” and “axis” parameters that work equivalently to the rest of the functions in thecircstatsmodule (circmean,rayleightest, etc.) [#14533]
astropy.table#
TableandQTablecan now use the|and|=operators for dictionary-style merge and update. [#14187]
astropy.time#
Add a
leap_second_strictargument to theTime.to_datetime()method. This controls the behavior when converting a time within a leap second to thedatetimeformat and can take the valuesraise(the default),warn, orsilent. [#14606]
astropy.timeseries#
Adds the
astropy.timeseries.LombScargleMultibandclass, which is an extension of theastropy.timeseries.LombScargleclass. It enables the generation of periodograms for datasets with measurements taken in more than one photometric band. [#14016]Add
unit_parse_strictparameter 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_nankeyword argument fornp.array_equal()when the arguments areastropy.units.Quantityinstances. [#14135]Allow “console” and “unicode” formats for conversion to string of function units. [#14407]
Add a “fraction” options to all the unit
formatclasses, 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
meanmethod onNDDataArraynow 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_Bfiles produced by the International Earth Rotation and Reference Systems Service, and pointastropy.utils.iers.IERS_B_URLto 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 toCompImageHDUhas 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
humlicek2method forVoigt1Din favor of using thewofzmethod using thescipy.special.wofzimplementation of the Fadeeva function wheneverscipyis installed. [#14013]Deprecated
astropy.modeling.utils.comb()function in favor ofcomb()frommathstandard library. [#14038]Propagate measurement uncertainties via the
weightskeyword argument into the parameter covariances. [#14519]
astropy.units#
The conversion of
astropy.units.Quantitytoboolthat was deprecated since astropy 3.0 now raises aValueError. This affects statements likeif quantity. Use explicit comparisons likeif quantity.value != 0orif quantity is not Noneinstead. [#14124]Operations on
Quantityin tables are sped up by only copyinginfowhen it makes sense (i.e., when the object can still logically be thought of as the same, such as in unit changes or slicing).infois no longer copied if aQuantityis part of an operation. [#14253]The
Quantity.nansummethod has been deprecated. It was always weird that it was present, sincendarraydoes not have a similar method, and the othernan*functions such asnanmeandid not have a corresponding method. Usenp.nansum(quantity)instead. [#14267]The unused
units.format.Unscaledformat 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 Jyforformat='fits'.Note that this may affect doctests that use quantities with complicated units. [#14439]
astropy.utils#
For
Maskedinstances, thewhereargument 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.Spineis 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 theSpineusing the appropriate setters. [#13989]Passing a bare number as the
coord_wrapargument toCoordinateHelper.set_coord_typeis deprecated. Pass aQuantitywith units equivalent to angular degrees instead.The
.coord_wrapattribute ofCoordinateHelperis now aQuantityinstead 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.asciiQDP 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]
Cardnow uses the default Python representation for floating point values. [#14508]ImageHDUnow 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/setterin 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_finiteoption when fitting withweightsvia passing theweightsthrough 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
Timeformat ‘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
Distributioncan be compared with==and!=with regular arrays or scalars, and that inplace operations likedist[dist<0] *= -1work. [#14421]
astropy.units#
Modified
astropy.units.Quantity.__array_ufunc__()to returnNotImplementedinstead of raising aValueErrorif the inputs are incompatible. [#13977]Modified the behavior of
numpy.array_equal()andnumpy.array_equiv()to returnFalseinstead of raising an error if their arguments areastropy.units.Quantityinstances with incompatible units. [#14163]Spaces have been regularized for the
unicodeandconsoleoutput 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
latexandunicodeformats (i.e.,mdeginstead ofm°), as was already the case for arcsec. [#14419]Ensure the unit is kept in
np.medianeven if the result is a scalarnan(the unit was lost for numpy < 1.22). [#14635]Ensure that
Quantitywith 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.renamemay fail withOSError: [Errno 18] Invalid cross-device link. This may affect some clean-up operations executed by thedatamodule, causing them to fail. This patch is to catchOSErrorwitherrno == EXDEV(i.e., Errno 18) when performing these operations and try to useshutil.moveinstead to relocate the data. [#13730]Ensure masks are propagated correctly for
outermethods of ufuncs also if one of the inputs is not actually masked. [#14624]
astropy.visualization#
The location of a
astropy.visualization.wcsaxes.frame.Spinein 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_coordandplot_scatternow 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]
astropyno 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/Mpcnow parse correctly as being equal tokm/(s.Mpc). [#14369]
astropy.io.fits#
Fix
FITSDiffwhen table contains a VLA column with the Q type. [#14539]
astropy.table#
Fix a bug when creating a
QTablewhen aQuantityinput column is present and theunitsargument 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/Mpcnow 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_dimandpixel_n_dimdefined on them. [#14495]
Version 5.2.1 (2023-01-06)#
Bug Fixes#
astropy.coordinates#
Fix to ITRS frame
earth_locationattribute 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 therangeargument must a compatible instance ofastropy.units.Quantityif 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
AltAzandHADecwith 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
SkyCoordto 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_formatI/O. [#13075]A new comparison function has been added –
cosmology_equal()– that mirrors itsnumpycounterpart but allows for the arguments to be converted to aCosmologyand 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_widthandfixed_width_two_lineformats via the newheader_rowskeyword argument. [#13734]
astropy.io.fits#
Added support to the
io.fitsAPI for reading and writing file paths of the form~/file.fitsor~<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
fsspecpackage, which has been added as an optional dependency. [#13238]
astropy.io.votable#
Added support in
io.votablefor reading and writing file paths of the form~/file.xmlor~<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
TimeorTimeDeltaobject. 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
argminandargmaxmethods ofQuantitysupport thekeepdimsargument 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_coordmethod to thewcsaxesfunctionality based on the existingplot_coordmethod but that callsmatplotlib.pyplot.scatter. [#13562]Added a
sinhstretch 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
MexicanHat1DKernelandMexicanHat2DKernelclasses. Please useRickerWavelet1DKernelandRickerWavelet2DKernelinstead. [#13300]
astropy.units#
Multiplying a
LogQuantitylikeMagnitudewith 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.inexactanddtype=Nonehas 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
Quantityis constructed from a structured array andunitisNone, the default unit is now structured like the input data. [#13676]
astropy.utils#
astropy.utils.misc.suppresshas been removed, usecontextlib.suppressinstead.astropy.utils.namedtuple_asdicthas been removed, instead use method._asdicton 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_filenamehas been removed. [#13661]
astropy.visualization#
Rename number-of-samples keyword
nsamplesinZScaleIntervalto align with then_sampleskeyword used in all otherIntervalclasses 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 Kerneltruncationcalculation. [#13299]Fix import error with setuptools v65.6.0 by replacing
numpy.ctypeslib.load_librarywith Cython to load the C convolution extension. [#14035]
astropy.coordinates#
BaseCoordinateFrame.get_frame_attr_names()had a misleading name, because it actually provided adictof 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 theAngleinitializer can be composite units (likeu.hour**1), which might result from preceding calculations. [#13933]
astropy.io.fits#
report_diff_values()have now two new parametersrtolandatolto make the report consistent withnumpy.allcloseresults. This fixesFITSDiffwith 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_downsampleintroduced in Astropy 5.0 / #11266. [#13069]
astropy.units#
astropy.utils#
astropy.visualization#
Significantly improve performance of
ManualIntervalwhen both limits are specified manually. [#13898]
Other Changes and Additions#
The deprecated private
astropy._erfamodule has been removed. Usepyerfa, which is a dependency ofastropyand 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
pixelargument toastropy.visualization.wcsaxes.ticklabels.TickLabels.addno longer does anything, is deprecated, and will be removed in a future astropy version. It has been replaced by a new requireddataargument, 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
SkyOffsetFrameinstances to be pickled by adding a custom__reduce__method to the class (see issue #9249). [#13305]Fixed the check for invalid
Latitudevalues for float32 values.Latitudenow 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#
heapsizeis 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]
PCOUNTandGCOUNTkeywords are now removed from an uncompressed Primary header, for compliance withfitsverifybehavior. [#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_namesorpprint_exclude_namesattributes get updated correctly. [#13639]When using
add_columnswith same indexes inindexesoption 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
infoare not shared between tables even when their underlying data is shared withcopy=False. [#13842]
astropy.time#
Fix
Time.insert()on times which have theirout_subfmtset. [#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_exceptionargument is properly passed on and thus used. [#12699]Ensure that
np.concatenateon quantities can take adtypeargument (added in numpy 1.20). [#13323]Ensure that the units of any
initialargument to reductions such asnp.add.reduce(which underliesnp.sum) are properly taken into account. [#13340]
astropy.utils#
Ensure that
np.concatenateon masked data can take adtypeargument (added in numpy 1.20). [#13323]Fix error when suppressing download progress bar while using non-default
sys.stdoutstream. [#13352]Ensure
strandreprwork properly forMaskedversions of structured subarrays. [#13404]If an attribute is created using
deprecated_attribute()with thealternativeargument 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_worldnow creates anEarthLocationobject usingMJD-AVGif present before falling back to the old behaviour of usingMJD-OBS. [#12598]The locations of
WCSAxesticks 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_valueswould 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.coordinatescan 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_formatI/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
clonehas been added toParameterto quickly deep copy the object and change any constructor argument. A supporting equality method is added, andrepris 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
OtotandOtot0to FLRW cosmologies to calculate the total energy density of the Universe. [#12590]Add property
is_flatto cosmologies to calculate the curvature of the Universe.Cosmologyis 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_strfor turning the class reference to a string, instead of the class object itself, andmove_from_metato 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.pyhas been added to provide tools for testing the cosmology module and related extensions. [#12966]A new property
nonflathas been added to flat cosmologies (FlatCosmologyMixinsubclasses) to get an equivalent cosmology, but of the corresponding non-flat class. [#13076]clonehas been enhanced to allow for flat cosmologies to clone on the equivalent non-flat cosmology. [#13099]cosmologyfile I/O uses the Unified Table I/O interface, which has added support for reading and writing file paths of the form~/file.ecsvor~<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
convertersargument ofio.ascii.readis 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 aboolinstead 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.asciifor reading and writing file paths of the form~/file.csvor~<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_stricttoastropy.io.fits.connect.read_table_fitsto 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.Headernow 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
dumpandloadinastropy.io.misc.yaml. [#12279]Add asdf support for
Cosine1D,Tangent1D,ArcSine1D,ArcCosine1D, andArcTangent1Dmodels. [#12895]Add asdf support for
Spline1Dmodels. [#12897]
astropy.io.registry#
Added support to the Unified Table I/O interface for reading and writing file paths of the form
~/file.csvor~<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_squaresmethod of non-linear least-squares optimization: [#12051]TRFLSQFitterusing the Trust Region Reflective algorithm.LMLSQFitterusing the Levenberg-Marquardt algorithm (implemented byscipy.optimize.least_squares).DogBoxLSQFitterusing the dogleg algorithm.
Enable direct use of the
ignoredfeature ofModelBoundingBoxby users in addition to its use as part of enablingCompoundBoundingBox. [#12384]Switch
modeling.projectionsto useastropy.wcs.Prjprmwrapper internally and provide access to theastropy.wcs.Prjprmstructure. [#12558]Add error to non-finite inputs to the
LevMarLSQFitter, to protect against soft scipy failure. [#12811]Allow the
Ellipse2DandSersic2Dtheta parameter to be input as an angular quantity. [#13030]Added
Schechter1Dmodel. [#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_hduoption is now available forCCDData.to_hduandCCDData.write. This option allows the user to get anImageHDUas the first item of the returnedHDUList, instead of the defaultPrimaryHDU. [#12962]File I/O through
nddata.CCDDatauses the Unified I/O interface, which has added support for reading and writing file paths of the form~/file.csvor~<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
kindwas added to theTable.sortmethod to specify the sort algorithm. [#12637]Columns which are
numpystructured arrays are now fully supported, effectively allowing tables within tables. This applies toColumn,MaskedColumn, andQuantitycolumns. These structured data columns can be stored in ECSV, FITS, and HDF5 formats. [#12644]Improve the performance of
np.searchsortedby a factor of 1000 for a bytes-typeColumnwhen the search value isstror 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.sumworks forQuantitybut 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.csvor~<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 twoTimeinstances to generate a or multiple linearly spaced set(s) of times. [#13132]
astropy.units#
structured_to_unstructuredandunstructured_to_structuredinnumpy.lib.recfunctionsnow work with Quantity. [#12486]Implement multiplication and division of LogQuantities and numbers [#12566]
New
doppler_redshiftequivalency to convert between Doppler redshift and radial velocity. [#12709]Added the
wherekeyword argument to themean(),``var()``,std()andnansum()methods ofastropy.units.Quantity. Also added theintialkeyword 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
wherekeyword 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_accuracywhich 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.Celprmandastropy.wcs.Prjprmhave been added to allow access to lower level WCSLIB functionality and to allow direct access to thecelandprjmembers ofWcsprm. [#12514]Add
temporalproperties for convenient access of/selection of/testing for theTIMEaxis introduced in WCSLIB version 7.8. [#13094]
API Changes#
astropy.coordinates#
The
dms_to_degreesandhms_to_hoursfunctions (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_v2has been removed. UsePlanck18instead [#12354]default_cosmology.get_cosmology_from_stringis 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_specis changed from".3g"to"". [#12612]Units of redshift are added to
z_reionin 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
InvalidEcsvDatatypeWarninginstead of raising aValueErrorexception if thedatatypeof 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_paramsandastropy.modeling.fitting._model_to_fit_paramspublic 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
kindwas added to theTable.sortmethod to specify the sort algorithm. The signature ofTable.sortwas modified so that thereverseargument is now keyword-only. Previouslyreversecould be specified as the second positional argument. [#12637]Changed behavior when a structured
numpy.ndarrayis added as a column to aTable. Previously this was converted to aNdarrayMixinsubclass ofndarrayand 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.ndarrayis added to the table as a nativeColumnand saving to file is supported. [#13236]
astropy.tests#
Backward-compatible import of
astropy.tests.disable_internethas been removed; usepytest_remotedata.disable_internetfrompytest-remotedatainstead. [#12633]Backward-compatible import of
astropy.tests.helper.remote_datahas been removed; usepytest.mark.remote_datafrompytest-remotedatainstead. [#12633]The following are deprecated and will be removed in a future release. Use
pytestwarning and exception handling instead: [#12633]astropy.io.ascii.tests.common.raisesastropy.tests.helper.catch_warningsastropy.tests.helper.ignore_warningsastropy.tests.helper.raisesastropy.tests.helper.enable_deprecations_as_exceptionsastropy.tests.helper.treat_deprecations_as_exceptions
Backward-compatible plugin
astropy.tests.plugins.displayhas been removed; usepytest-astropy-headerinstead. [#12633]
astropy.time#
Creating an
TimeDeltaobject 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") + 5orTime("2020-01-05") - Time("2020-01-03") < 5, which implicitly transform the right-hand side into anTimeDeltainstance. [#12888]
Bug Fixes#
astropy.coordinates#
The machinery that makes observatory locations available as
EarthLocationobjects 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.asciiread 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
Timetable columns to a file when the timeformatis one ofdatetime,datetime64, orymdhms. Previously, writing aTimecolumn 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
ignorefunctionality failing inModelBoundingBoxwhen usingignoreoption alongside passing bounding box data as tuples. [#13032]
astropy.table#
Fixed a bug in
Table.show_in_browserusing thejsviewer=Trueoption 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
Timetable columns to a file when the timeformatis one ofdatetime,datetime64, orymdhms. Previously, writing aTimecolumn 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.formatproperty 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
NdarrayMixinwhich loses the mask. With this fix the data are added to the table as aMaskedColumnand the mask is preserved. [#13236]
astropy.time#
Fix an issue when writing
Timetable columns to a file when the timeformatis one ofdatetime,datetime64, orymdhms. Previously, writing aTimecolumn 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
NoConvergenceerrors to warnings inworld_to_pixel_valuesso 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
wcstabonwcscopyand copywtbmembers 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_pixelforWCSobjects with a spectral axis and observer location information when passing aSpectralCoordthat had missing observer or target information. [#13228]
Version 5.0.4 (2022-03-31)#
Bug Fixes#
astropy.modeling#
Fixed the
Gaussian2Dbounding_boxwhenthetais an angularQuantity. [#13021]
astropy.utils#
Reverted
astropy.utils.iers.iers.IERS_A_URLtomaia.usno.navy.mildomain 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_modelwhich allows the function to handle aCompoundModel. Before this fix,discretize_modelwas confusingCompoundModelwith a callable function. [#12959]
astropy.io.fits#
Fix write and read FITS tables with multidimensional items, using
from_columnswithout previousely definedColDefsstructure. [#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_mappingschema’s property name conflicts. Changes: inputstounit_inputsoutputstounit_outputs[#12800]
- Bugfix for
astropy.io.votable#
Fixed a bug where
astropy.io.votable.validatewas printing output tosys.stdoutwhen theoutputparameter was set toNone.validatenow returns a string whenoutputis set toNone, as documented. [#12604]
astropy.modeling#
Fix handling of units on
scaleparameter 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
CompoundModelwhere anotherCompoundModelis on the right hand side of the&operator. [#12907]Provide a hook (
Model._calculate_separability_matrix) to allow subclasses ofModelto 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_boundsattributes ofastropy.wcs.WCSwere not restored when anastropy.wcs.WCSobject was unpickled. This fix also eliminatesFITSFixedWarningwarning 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, andkeyselparameters. [#12844]
Version 5.0.1 (2022-01-26)#
Bug Fixes#
astropy.coordinates#
Trying to create an instance of
astropy.coordinates.Distanceby providing bothzandparallaxnow 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.Distanceconstructor no longer ignores theunitkeyword whenparallaxis provided. [#12569]
astropy.cosmology#
astropy.io.fits#
Fix formatting issue in
_dump_coldefsand add tests fortabledumpandtableloadconvenience 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
parametersdata forSpline1Dmodel. [#12523]Bugfix for
keyerrorthrown byModel.input_units_equivalencieswhen used onfix_inputsmodels which have no set unit equivalencies. [#12597]
astropy.table#
astropy.timeseries#
Fixed edge case bugs which emerged when using
aggregate_downsamplewith 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.copyandcopy.deepcopyand 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
Maskedinstance can be used to initialize (or viewed as) anumpy.ma.Maskedarray. [#12482]Ensure
Maskedalso 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_ageis 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.,
SphericalRepresentationwith 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 aSphericalRepresentationif there is a scale change). [#11470]RadialRepresentation.transformcan work with a multiplication matrix only. All other matrices still raise an exception. [#11576]transformmethods are added toBaseDifferentialandCartesianDifferential. All transform methods on Representations now delegate transforming differentials to the differential objects. [#11654]Adds new
HADecbuilt-in frame with transformations to/fromICRSandCIRS. This frame complementsAltAzto give observed coordinates (hour angle and declination) in theITRSfor an equatorially mounted telescope. [#11676]SkyCoordobjects 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 argumentsnameandmetaare 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_redshiftis 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/writemethods 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_formatmethods 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,
FlatCosmologyMixinand its FLRW-specific subclassFlatFLRWMixin. AllFlatCosmologyMixinare flat, but not all flat cosmologies are instances ofFlatCosmologyMixin. As example,LambdaCDMmay be flat (for the a specific set of parameter values), butFlatLambdaCDMwill 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
gettermethods.Cosmological equality is refactored to check Parameters (and the name) A new method,
is_equivalent, is added to check Cosmology equivalence, so aFlatLambdaCDMand flatLambdaCDMare equivalent. [#12136]Replaced
z = np.asarray(z)withz = u.Quantity(z, u.dimensionless_unscaled).valuein 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
unitsandequivalencies(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
clsto 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_formatI/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_formatI/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:
converterscan specify column names with wildcards. [#11892]Added a new
astropy.io.ascii.Mrtclass 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
BoundingBoxfor better usability and maintainability. [#11930]Added
CompoundBoundingBoxfeature 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_modelcreated models. [#11984]
astropy.table#
Added a new method
Table.update()which does a dictionary-style update of aTableby adding or replacing columns. [#11904]Masked quantities are now fully supported in tables. This includes
QTableautomatically convertingMaskedColumninstances toMaskedQuantity, andTabledoing the reverse. [#11914]Added new keyword arguments
keys_leftandkeys_rightto the tablejoinfunction 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_angleto 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. TheTIOadjustment is approximately 3 microseconds per century fromJ2000and the polar motion correction is at most about +/-50 nanoseconds. For modelsIAU1982andIAU1994, 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_startandtime_bin_sizeto be arrays, and adds an optionaltime_bin_end. This scheme mirrors the API forBinnedTimeSeries. [#11266]
astropy.units#
Quantitygains 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_extensionsis installed, these are valid static type annotations. [#10662]
Each physical type is added to
astropy.units.physical(e.g.,physical.lengthorphysical.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, andindexand methodcopy()toQuantityIteratorto 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_configandConfigurationMissingWarningare deprecated. [#11502]
astropy.constants#
Removed deprecated
astropy.constants.set_enabled_constantscontext manager. [#12105]
astropy.coordinates#
Positions for the Moon using the ‘builtin’ ephemeris now use the new
erfa.moon98function 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
representationattribute fromastropy.coordinates.BaseCoordinateFrameclass. [#12257]SpectralQuantityandSpectralCoord.to_valuemethod can now be called withoutunitargument in order to maintain a consistent interface withQuantity.to_value[#12440]
astropy.cosmology#
z_at_valuenow works with arrays for all arguments (exceptfunc,verbose, andmethod). Consequently,coordinates.Distance.zcan 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/writeandto/from_formatUnified I/O registries are separated and apply only toCosmology. [#12015]Cosmology parameters in
cosmology.parameters.pynow 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
nameandmeta. Subclasses should add relevant arguments and not pass them to the base class. [#12191]
astropy.io#
When
astropyraises anOSErrorbecause a file it was told to write already exists, the error message now always suggests the use of theoverwrite=Trueargument. The wording is now consistent for all I/O formats. [#12179]
astropy.io.ascii#
Removed deprecated
overwrite=Noneoption forastropy.io.ascii.ui.write(). Overwriting existing files now only happens ifoverwrite=True. [#12171]
astropy.io.fits#
astropy.io.registry#
The
writefunction 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
pedantickeyword argument in theastropy.io.votable.table.parsefunction and the corresponding configuration setting. It has been replaced by theverifyoption. [#12129]
astropy.modeling#
Refactored how
astropy.modeling.Modelhandles model evaluation in order to better organize the code. [#11931]- Removed the following deprecated modeling features:
astropy.modeling.utils.ExpressionTreeclass,astropy.modeling.functional_models.MexicanHat1Dmodel,astropy.modeling.functional_models.MexicanHat2Dmodel,astropy.modeling.core.Model.inputssetting in model initialize,astropy.modeling.core.CompoundModel.inversesetting in model initialize, andastropy.modeling.core.CompoundModel.both_inverses_exist()method. [#11978]
Deprecated the
AliasDictclass inmodeling.utils. [#12411]
astropy.nddata#
Removed
block_reduceandblock_replicatefunctions fromnddata.utils. These deprecated functions innddata.utilswere moved tonddata.blocks. [#12288]
astropy.stats#
Removed the following deprecated features from
astropy.stats:confargument forfuncs.binom_conf_interval()andfuncs.binned_binom_proportion(),conflevelargument forfuncs.poisson_conf_interval(), andconf_lvlargument forjackknife.jackknife_stats(). [#12200]
astropy.table#
Printing a
Tablenow shows the qualified class name of mixin columns in the dtype header row instead of “object”. This applies to all theTableformatted output methods whenevershow_dtype=Trueis 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
joinfunction now accepts only the first four argumentsleft,right,keys, andjoin_typeas 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_timenow accepts anEarthLocationas thelongitudeargument. [#11680]
astropy.units#
Unit
littlehand equivalencywith_H0have been moved to thecosmologymodule and are deprecated fromastropy.units. [#12092]
astropy.utils#
astropy.utils.introspection.minversion()now usesimportlib.metadata.version(). Therefore, itsversion_pathkeyword is no longer used and deprecated. This keyword will be removed in a future release. [#11714]Updated
utils.console.Spinnerto better resemble the API ofutils.console.ProgressBar, including anupdate()method and iterator support. [#11772]Removed deprecated
check_hashesincheck_download_cache(). The function also no longer returns anything. [#12293]Removed unused
download_cache_lock_attemptsconfiguration item inastropy.utils.data. Deprecation was not possible. [#12293]Removed deprecated
hexdigestkeyword fromimport_file_to_cache(). [#12293]Setting
remote_timeoutconfiguration item inastropy.utils.datato 0 will no longer disable download from the Internet; Setallow_internetconfiguration item toFalseinstead. [#12293]
astropy.visualization#
Removed deprecated
imshow_only_kwargskeyword fromimshow_norm. [#12290]
astropy.wcs#
Move complex logic from
HighLevelWCSMixin.pixel_to_worldandHighLevelWCSMixin.world_to_pixelinto the helper functionsastropy.wcs.wcsapi.high_level_api.high_level_objects_to_valuesandastropy.wcs.wcsapi.high_level_api.values_to_high_level_objectsto allow reuse in other places. [#11950]
Bug Fixes#
astropy.config#
generate_configno 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
arrayargument for any Kernel1D or Kernel2D subclasses (with the exception of CustomKernel) will now raise aTypeError. [#11969]
astropy.coordinates#
If a
Tablecontaining aSkyCoordobject 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 theSkyCoorditself. [#11932]Fixed bug where Angle, Latitude and Longitude with NaN values could not be printed. [#11943]
Fixed a bug with the transformation from
PrecessedGeocentrictoGCRSwhere changes inobstime,obsgeoloc, orobsgeovelwere ignored. This bug would also affect loopback transformations from onePrecessedGeocentricframe to anotherPrecessedGeocentricframe. [#12152]Fixed a bug with the transformations between
TEMEandITRSor betweenTEMEand itself where a change inobstimewas 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
Anglearray 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.dumpfor FITS_rec with variable length (VLF) arrays. [#11957]Add support for reading and writing int8 images [#11996]
Ensure header passed to
astropy.io.fits.CompImageHDUdoes not need to contain standard cards that can be automatically generated, such asBITPIXandNAXIS. [#12061]Fixed a bug where
astropy.io.fits.HDUDiffwould ignore theignore_blank_cardskeyword argument. [#12122]Open uncompressed file even if extension says it’s compressed [#12135]
Fix the computation of the DATASUM in a
CompImageHDUwhen 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
Parameterdescriptions to the implemented models which were missing. [#11232]The
separableproperty 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.pyandfunctional_models.py.Fixed
Ring2Dmodel’s init to properly accept all combinations ofr_in,r_out, andwidth.Fixed bug in
tauvalidator for theLogarithmic1DandExponential1Dmodels when using them as model sets.Fixed
copymethod forParameterin order to prevent an automaticKeyError, and fixedboolforParameterso that it functions with vector values.Removed unreachable code from
Parameter, the_Tabularmodel, and theDrude1Dmodel.Fixed validators in
Drude1Dmodel so that it functions in a model set.Removed duplicated code from
polynomial.pyfor handing ofdomainandwindow.Fixed the
Pix2Sky_HEALPixPolarandSky2Pix_HEALPixPolarmodes so that theirevaluateandinversemethods actually work without raising an error. [#12232]
astropy.nddata#
Ensure that the
wcs=argument toNDDatais always parsed into a high level WCS object. [#11985]
astropy.stats#
astropy.table#
Ensured that
MaskedColumn.infois propagated in all cases, so that when tables are sliced, writing will still be as requested oninfo.serialize_method. [#11917]table.conf.replace_warningsandtable.jsviewer.conf.css_urlsconfiguration 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.Mappingwill work. [#12417]
astropy.uncertainty#
Ensure that scalar
QuantityDistributionunit conversion in ufuncs works properly again. [#12471]
astropy.units#
Add quantity support for
scipy.specialdimensionless functions erfinv, erfcinv, gammaln and loggamma. [#10934]VOUnit.to_stringoutput 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
NotImplementedErrorwhen trying to parse a unit using an output-only format such as ‘unicode’ or ‘latex’. [#11829]
astropy.utils#
Fixed a bug in
get_readable_fileobjthat prevented the unified file read interface from closing ASCII files. [#11809]The function
astropy.utils.decorators.deprecated_attribute()no longer ignores itsmessage,alternative, andpendingarguments. [#12184]Ensure that when taking the minimum or maximum of a
Maskedarray, any masked NaN values are ignored. [#12454]
astropy.visualization#
The tick labelling for radians has been fixed to remove a redundant
.0in the label for integer multiples of pi at 2pi and above. [#12221]Fix a bug where non-
astropy.wcs.WCSWCS 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_valuesto handle slices including non-intintegers, 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 (
linkis 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]astropynow 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.getdatado 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
ValueErrorif annp.float32NaN/Inf value is assigned to a header keyword. [#11922]
astropy.modeling#
Fixed bug in
fix_inputshandling of bounding boxes. [#11908]
astropy.table#
Fix an error when converting to pandas any
Tablesubclass that automatically adds a table index when the table is created. An example is a binnedTimeSeriestable. [#12018]
astropy.units#
astropy.utils#
Ensure any
.infoonMaskedinstances is propagated correctly when viewing or slicing. As a consequence,MaskedQuantitycan 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_padinconvolve_fftfrom 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
CIRSframes. Using these,AltAzcalculations are now accurate down to the milli-arcsecond level. [#10994]Adds a direct transformation from
ICRStoAltAzframes. This provides a modest speedup of approximately 10 percent. [#11079]Adds new
WGS84GeodeticRepresentation,WGS72GeodeticRepresentation, andGRS80GeodeticRepresentation. These are mostly for use insideEarthLocationbut can also be used to convert between geocentric (cartesian) and different geodetic representations directly. [#11086]SkyCoord.guess_from_tablenow 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
transformmethod, which allows them to be transformed by a 3x3 matrix in a Cartesian basis. By default, transformations are routed throughCartesianRepresentation.SphericalRepresentationandPhysicssphericalRepresentationoverride this for speed and to prevent NaN leakage from the distance to the angular components. Also, the functionsis_O3andis_rotationhave been added tomatrix_utitiesfor 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_utilitiesfor 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
GCRSandCIRS,TETEfor better accuracy and substantially improved speed. [#11069]Also refactor
EarthLocation.get_gcrsfor 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.coordinatesto 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.Planck18has 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
appendkeyword 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_simplecan be used to skip this verification. [#10895]Expose
Header.stripas a public method, to remove the most common structural keywords. [#11174]Enable the use of
os.PathLikeobjects 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_fftfunction 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
growoption 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.indicesso they now indicate the object type and relevant attributes. [#11333]
astropy.timeseries#
An exception is raised when
n_binsis passed as an argument while any of the parameterstime_bin_startortime_bin_sizeis not scalar. [#11463]
astropy.units#
The
physical_typeattributes of each unit are now objects of the (new)astropy.units.physical.PhysicalTypeclass instead of strings and the functionastropy.units.physical.get_physical_typecan now translate strings to these objects. [#11204]The function
astropy.units.physical.def_physical_typewas 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.dnorunits.DN, representing data number for a detector. [#11591]
astropy.utils#
Added
ssl_contextandallow_insecureoptions todownload_file, as well as the ability to optionally use thecertifipackage to provide root CA certificates when downloading from sites secured with TLS/SSL. [#10434]astropy.utils.data.get_pkg_data_pathis 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.OrderedDescriptorandastropy.utils.OrderedDescriptorContainer, as new features in Python 3 make their use less compelling. [#11094, #11099]astropy.utils.maskedprovides a newMaskedclass/factory that can be used to represent maskedndarrayand all its subclasses, includingQuantityand 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.parsingmodule 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
Timeobject 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 anyTimescale transformations related to UTC. [#11638]Added a new module at
astropy.utils.compat.optional_depsto consolidate the definition ofHAS_xoptional dependency flag variables, likeHAS_SCIPY. [#11490]
astropy.wcs#
Add IVOA UCD mappings for some FITS WCS keywords commonly used in solar physics. [#10965]
Add
STOKESFITS 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_valueto usescipy.optimize.minimize_scalarwith default methodBrent(other optionsBoundedandGolden) and acceptbracketoption to set initial search region. [#11080]Clarified definition of inputs to
angular_diameter_distance_z1z2. The function now emitsAstropyUserWarningwhenz2is 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_nuto 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 ofNaNfor float and null string for string are now properly recognized, leading to aMaskedColumnwith appropriately set mask instead of aColumnwith those values exposed. Conversely, when writing an astropyTableto a FITS tables, masked values are now consistently converted to the standard FITS mask values ofNaNfor 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.blackbodymodule. [#10972]
astropy.table#
Added
Column.valueas an alias for the existingColumn.dataattribute. This makes accessing a column’s underlying data array consistent with the.valueattribute available forTimeandQuantityobjects. [#10962]In reading from a FITS tables, the standard mask values of
NaNfor float and null string for string are properly recognized, leading to aMaskedColumnwith appropriately set mask. [#11222]Changed the implementation of the
table.index.Indexclass so instantiating from this class now returns anIndexobject as expected instead of aSlicedIndexobject. [#11333]
astropy.units#
The
physical_typeattribute of units now returns an instance ofastropy.units.physical.PhysicalTypeinstead of a string. BecausePhysicalTypeinstances 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
accuracyargument inall_world2pixwhich was mistakenly documented, in the caseaccuracywas ever used. [#11055]
Bug Fixes#
astropy.convolution#
Fixes for
convolve_fftdocumentation examples. [#11510]
astropy.coordinates#
Allow
Distanceinstances with negative distance values as input forSphericalRepresentation. This was always noted as allowed in an exception message when a negativeQuantitywith length units was passed in, but was not actually possible to do. [#11113]Makes the
Angle.to_stringmethod 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
SkyCoordwith cartesian representation to unit-spherical, by fixing the conversion ofCartesianDifferentialtoUnitSphericalDifferential. [#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
Angledoes not raise a warning even ifnanare 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
SkyCoordusing==no longer raises an error. [#11666]Different
SkyOffsetFrameclasses no longer interfere with each other, causing difficult to debug problems with theoriginattribute. Theoriginattribute now no longer is propagated, so while it remains available on aSkyCoordthat 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_colto allow in-place addition or removal of a column. [#11338]Fix indexing of
fits.Headerwith Numpy integers. [#11387]Do not delete
EXTNAMEfor compressed image header if a default and non-defaultEXTNAMEare present. [#11396]Prevent warnings about
HIERARCHwithCompImageHeaderclass. [#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_boxfromastropy.modeling.modelsto their inverses. For cases in which the inversesbounding_boxcan be determined, the proper calculation has been implemented. [#11414]Bugfix to allow rotation models to accept arbitrarily-shaped inputs. [#11435]
Bugfixes for
astropy.modelingto allowfix_inputsto accept empty dictionaries and dictionaries withnumpyinteger keys. [#11443]Bugfix for how
SPECIAL_OPERATORSare handled. [#11512]Fixes
Modelcrashes when some inputs are scalars and during some types of output reshaping. [#11548]Fixed bug in
LevMarLSQFitterwhen using weights and vector inputs. [#11603]
astropy.stats#
Fixed a bug with the
copy=Falseoption when carrying out sigma clipping - previously ifmasked=Falsethis still copied the data, but this will now change the array in-place. [#11219]
astropy.table#
Ensure that adding a
Quantityor other mixin column to aTabledoes not have side effects, such as creating an associatedinfoinstance (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
NaNfor float and null string for string, not just for table withmasked=True. [#11222]Using
Table.to_pandas()on an indexedTablewith masked integer values now correctly construct thepandas.DataFrame. [#11432]Fixed
TableHTML 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
Columnthat happened to have aunitattribute could not be added to aQTable. Such columns are now simply kept asColumninstances (with a warning). [#11585]Fix an issue in
Table.to_pandas(index=<colname>)where the index column name was not being set properly for theDataFrameindex. This was introduced by an API change in pandas version 1.3.0. Previously when creating aDataFramewith the index set to an astropyColumn, theDataFrameindex name was automatically set to the column name. [#11921]
astropy.time#
astropy.uncertainty#
Distributioninstances can now be used as input toQuantityto initializeQuantityDistribution. Hence,distribution * unitanddistribution << unitwill 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 ** 3is now defined as molar concentration. It was previously incorrectly defined as molar volume. [#11204]Make ufunc helper lookup thread-safe. [#11226]
Make
Unitstring parsing (as well asAngleparsing) thread-safe. [#11227]Decorator
astropy.units.decorators.quantity_inputnow only evaluates return type annotations based onUnitBaseorFunctionUnitBasetypes. Other annotations are skipped over and are not attempted to convert to the correct type. [#11506]
astropy.utils#
Make
lazypropertyandclassdecoratorthread-safe. This should fix a number of thread safety issues. [#11224]
astropy.visualization#
astropy.wcs#
fit_wcs_from_pointsnow produces a WCS with integerNAXIXnvalues. [#10865]Updated bundled version of
WCSLIBto 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
colseltonumpy.ndarray. [#11431]Added
WCSCOMPARE_*constants to the list of WCSLIB constants available/exposed through theastropy.wcsmodule. [#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__.pymodule to remove the block usingupdate_default_configandConfigurationDefaultMissingWarning. [#10877]Replace
pkg_resources(from setuptools) withimportlib.metadatawhich 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_typeto 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-likeindicates 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
ipythonis now 4.2. [#10942]The minimum supported version of
pyerfais 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#
NumericArrayconverter now properly broadcasts scalar mask to array. [#11157]
astropy.table#
Fix bug when initializing a
Tablesubclass 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 UTCto1970-01-01T00:00:00 TAIto 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_inputdecorator 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.ndimandnp.sizeagain work on classes that useShapedLikeNDArray, like representations, frames, sky coordinates, and times. [#11133]
astropy.wcs#
Fix error when a user defined
proj_pointparameter is passed tofit_wcs_from_points. [#11139]
Other Changes and Additions#
Change epoch of
TimeUnixTAI("unix_tai") from1970-01-01T00:00:00 UTCto1970-01-01T00:00:00 TAIto 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
convolveandconvolve_fftboth 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_astromand two classesErfaAstrom,ErfaAstromInterpolatoras wrappers to thepyerfaastrometric functions used in the coordinate transforms. UsingErfaAstromInterpolator, which interpolates astrometric properties forSkyCoordinstances 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_defaultscan now also be used as a registry, with user-defined parameter values and metadata. [#10624]Method
.realize_framefrom coordinate frames now accepts**kwargs, includingrepresentation_type. [#10727]Avoid an unnecessary call to
erfa.epv00in transformations betweenCIRSandICRS, 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_dtto theTransformGraphclass to override the finite-difference time step attribute (finite_difference_dt) for all transformations in the graph with that attribute. [#10341]Improve performance of
SpectralCoordby refactoring internal implementation. [#10398]
astropy.cosmology#
The final version of the Planck 2018 cosmological parameters are included as the
Planck18object, which is now the default cosmology. The parameters are identical to those of thePlanck18_arXiv_v2object, 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
FittingWithOutlierRemovalbefore reachingniterif the masked points are no longer changing. [#10642]Keep a (shallow) copy of
fit_infofrom the last iteration of the wrapped fitter inFittingWithOutlierRemovaland 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.stdsor individually for each parameter byparameter.std. Currently implemented forLinearLSQFitterandLevMarLSQFitter. [#10552]N-dimensional least-squares statistic and specific 1,2,3-D methods [#10670]
astropy.stats#
Added
circstdfunction to obtain a circular standard deviation. [#10690]
astropy.table#
Allow initializing a
Tableusing a list ofnamesin conjunction with adtypefrom a numpy structured array. The list ofnamesoverrides the names specified in thedtype. [#10419]
astropy.time#
Add new
isclose()method toTimeandTimeDeltaclasses to allow comparison of time objects to within a specified tolerance. [#10646]Improve initialization time by a factor of four when creating a scalar
Timeobject in a format likeunixorcxcsec(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
TimeSeriesobject. Previously this involved O(N^2) operations and memory. [#10889]
astropy.units#
astropy.utils#
ShapedLikeNDArrayhas gained the capability to use numpy functions that broadcast, change shape, or index. [#10337]get_free_space_in_dirnow takes a newunitkeyword andcheck_free_space_in_dirtakessizedefined asQuantity. [#10627]New
astropy.utils.data.conf.allow_internetconfiguration item to control downloading data from the Internet. Settingallow_internet=Falseis the same asremote_timeout=0. Usingremote_timeout=0to control internet access will stop working in a future release. [#10632]New
is_urlfunction so downstream packages do not have to secretly use the hidden_is_urlanymore. [#10684]
astropy.visualization#
Added the
Quadranglepatch forWCSAxesfor 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_dimensionshas been added toSlicedLowLevelWCSto 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_confignow 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,HOMESHAREis 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-levelSkyCoordclass, and usingSkyCoordis recommended for all typical use cases of transforming coordinates. [#10475]
astropy.stats#
Added a
growparameter toSigmaClip,sigma_clipandsigma_clipped_stats, to allow expanding the masking of each deviant value to its neighbours within a specified radius. [#10613]Passing float
ntopoisson_conf_intervalwhen usinginterval='kraft-burrows-nousek'now raisesTypeErroras 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 Pythondictobjects. [#10543]Removed the
FastBSTandFastRBTindexing engines because they depend on thebintreespackage, which is no longer maintained and is deprecated. Instead, use theSCEngineindexing engine, which is similar in performance and relies on thesortedcontainerspackage. [#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,SkyCoordorQuantity, theinfoattribute 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
listofdictmay be changed. Previously, the order was alphabetical because thedictkeys were assumed to be in random order. Since Python 3.7, the keys are always in order of insertion, soTablenow 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
TimeandTimeDeltaclasses to inherit from a commonTimeBaseclass. TheTimeDeltaclass no longer inherits fromTime. A number of methods that only apply toTime(e.g.light_travel_time) are no longer available in theTimeDeltaclass. [#10656]
astropy.units#
The
barunit is no longer wrongly considered an SI unit, meaning that SI decompositions like(u.kg*u.s**-2* u.sr**-1 * u.nm**-1).siwill 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_hasheskeyword incheck_download_cacheis deprecated and will be removed in a future release. [#10628]hexdigestkeyword inimport_file_to_cacheis deprecated and will be removed in a future release. [#10628]
Bug Fixes#
astropy.config#
Fix a few issues with
generate_configwhen used with other packages. [#10893]
astropy.coordinates#
Fixed a bug in the coordinate-frame attribute
CoordinateAttributewhere the internal transformation could behave differently depending on whether the input was a low-level coordinate frame or a high-levelSkyCoord.CoordinateAttributenow always performs aSkyCoord-style internal transformation, including the by-default merging of frame attributes. [#10475]
astropy.modeling#
Fixed an issue of
Model.renderwhen the inputoutdatatype 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_pointswere 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
_erfamodule has been converted to its own package,pyerfa, which is a required dependency for astropy, and can be imported withimport erfa. Importing_erfafromastropywill give a deprecation warning. [#10329]Added
optimize=Trueflag to calls ofyacc.yacc(as already done forlex.lex) to allow running inpython -OOsession 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
VerifyWarningwarnings 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
SpectralCoordclass that can be used to define spectral coordinates and transform them between different velocity frames. [#10185]Angle parsing now supports
cardinal directionin the cases where angles are initialized asstringinstances. eg"17°53'27"W".[#9859]Allow in-place modification of array-valued
FrameandSkyCoordobjects. 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 == sc2will 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
Galactocentricframe 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
RepresentationandDifferentialobjects, 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_readerto handlenames,include_names,exclude_namesarguments forRDBformatted tables. Homogenised checks and exceptions for invalidnamesarguments. 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.yamlutilfunctions 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
UnitsMappingmodel andModel.coerce_unitsto support units on otherwise unitless models. [#9936]Added
domainandwindowattributes toreprandstr. Fixed bug with_format_reprin core.py. [#9941]Polynomial attributes
domainandwindoware now tuples of size 2 and are validated.reprandprintshow only their non-default values. [#10145]Added
replace_submodel()method toCompoundModelto modify an existing instance. [#10176]Delay construction of
CompoundModelinverse until property is accessed, to support ASDF deserialization of circular inverses in component models. [#10384]
astropy.nddata#
Added support in the
bitmaskmodule 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_blocksfunction 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
cachekeyword option to allow caching forCCDData.readif 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
unitsanddescriptionskeyword arguments to the Table object initialization andTable.read()methods. This allows directly setting theunitanddescriptionfor the table columns at the time of creating or reading the table. [#9671]Make table
Rowwork as mappings, by adding.keys()and.values()methods. With this**rowbecomes possible, as does, more simply, turning aRowinto a dictionary withdict(row). [#9712]Added two new
Tablemethods.items()and.values(), which return respectivelytbl.columns.items()(iterator over name, column tuples) andtbl.columns.values()(list of columns) for aTableobjecttbl. [#9780]Added new
Tablemethod.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
Tablesubclass. These attributes are persistent and can be set during table creation. [#10097]Added support for
SkyCoordmixin columns indstack,vstackandinsert_rowfunctions. [#9857]Added support for coordinate
RepresentationandDifferentialmixin columns. [#10210]
astropy.time#
Added a new time format
unix_taiwhich is essentially Unix time but with leap seconds included. More precisely, this is the number of seconds since1970-01-01 00:00:08 TAIand corresponds to theCLOCK_TAIclock available on some linux platforms. [#10081]
astropy.units#
Added
torrpressure unit. [#9787]Added the
equal_nankeyword argument toiscloseandallclose, and updated the docstrings. [#9849]Added
Rankinetemperature unit. [#9916]Added integrated flux unit conversion to
spectral_densityequivalency. [#10015]Changed
pixel_scaleequivalency to allow scales defined in any unit. [#10123]The
quantity_inputdecorator now optionally allows passing through numeric values or numpy arrays with numeric dtypes to arguments wheredimensionless_unscaledis an allowed unit. [#10232]
astropy.utils#
Added a new
MetaAttributeclass to support easily adding custom attributes to a subclass of classes likeTableorNDDatathat have ametaattribute. [#10097]
astropy.visualization#
astropy.wcs#
WCS objects with a spectral axis will now return
SpectralCoordobjects when callingpixel_to_worldinstead ofQuantity, and can now take eitherQuantityorSpectralCoordas input topixel_to_world. [#10185]Implemented support for the
-TABalgorithm (WCS Paper III). [#9641]Added an
_as_mpl_axesmethod to theHightLevelWCSWrapperclass. [#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 == sc2was 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
RepresentationsandDifferentialscan 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
namesargument is provided (to specify the output column names) and theconvertersargument is provided (to specify column conversion functions). Previously theconvertersdict 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_pandasnow supports aunitsdictionary as argument to pass units for columns in theDataFrame. [#9472]
astropy.time#
Require that
in_subfmtandout_subfmtproperties of aTimeobject have allowed values at the time of being set, either when creating the object or when setting those properties on an existingTimeinstance. Previously the validation of those properties was not strictly enforced. [#9868]
astropy.utils#
Changed the exception raised by
get_readable_fileobjon missing compression modules (forbz2orlzma/xzsupport) toModuleNotFoundError, consistent withio.fitsfile handlers. [#9761]
astropy.visualization#
Deprecated the
imshow_only_kwargskeyword inimshow_norm. [#9915]Non-finite input values are now automatically excluded in
HistEqStretchandInvertedHistEqStretch. [#10177]The
PowerDistStretchandInvertedPowerDistStretchavalue is restricted to bea >= 0in addition toa != 1. [#10177]The
PowerStretch,LogStretch, andInvertedLogStretchavalue is restricted to bea > 0. [#10177]The
AsinhStretchandSinhStretchavalue 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
Timecolumns from being used to sort a table. [#10824]
astropy.wcs#
WCS objects with a spectral axis will now return
SpectralCoordobjects when callingpixel_to_worldinstead ofQuantity(note thatSpectralCoordis 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_pointsto 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 to1to 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 testandpython setup.py build_docscommands will no longer work. The easiest way to replicate these commands is to install the tox (https://tox.readthedocs.io) package and runtox -e testandtox -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.tomlto opt in to isolated builds as described in PEP 517/518. [#9726]Bundled
expatis 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
Voigt1Dfunction to use Humlicek’s approximation to avoid serious inaccuracies + option to use (compiled)scipy.special.wofzerror function for yet more accurate results. [#11177]
astropy.table#
Fixed bug when initializing a
Tablewith a column as list ofQuantity, for exampleTable({'x': [1*u.m, 2*u.m]}). Previously this resulted in anobjectdtype with no columnunitset, 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 explicitdtypecode'<'(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 returnt1instead of raising an exception. [#11336]Fixed byteorder conversion in
to_pandas(), which had incorrectly triggered swapping when native endianness was stored with explicitdtypecode'<'(or'>') instead of'='. [#11288]
astropy.time#
astropy.units#
astropy.wcs#
Allow “un-setting” of auxiliary WCS parameters in the
auxattribute ofWcsprm. [#11166]
Version 4.0.4 (2020-11-24)#
Bug Fixes#
astropy.coordinates#
The
norm()method forRadialDifferentialno longer requiresbaseto be specified. Thenorm()method for other non-Cartesian differential classes now gives a clearer error message ifbaseis not specified. [#10969]The transformations between
ICRSand 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
convertersspecified). [#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_dateformat 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
Timeobject in a format likeunixorcxcsec(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
Columnwith 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_filenow supports FTPS/FTP over TLS. [#9964]astropy.utils.datanow 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.datanow ignores the config itemastropy.utils.data.conf.download_cache_lock_attemptssince no locking is done. [#10437, #10683]astropy.utils.data.download_fileand related functions now interpret the parameter or config file settingtimeout=0to mean they should make no attempt to download files. [#10437, #10683]astropy.utils.import_file_to_cachenow 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_fileand related functions now treathttp://example.comandhttp://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_rangeofastropy.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
SkyCoordand coordinate frames the attributes also properly become scalars when indexed with 0. [#10113]Fixed a bug where
SkyCoord.separation()andSkyCoord.separation_3dwere not accepting a frame object. [#10332]Ensure that the
lonvalues inSkyOffsetFrameare 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
*TrueEclipticcoordinate 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_motionwould return incorrect results when no distance is set and proper motion is high. [#10296]Make the parsing of angles thread-safe so that
Anglecan be used in Python multithreading. [#10556]Fixed reporting of
EarthLocation.infowhich previously raised an exception. [#10592]
astropy.io.ascii#
Fixed a bug with the C
fast_readernot correctly parsing newlines whendelimiterwas also set to\nor\r; ensured consistent handling of input strings without newline characters. [#9929]
astropy.io.fits#
Fix integer formats of
TFORMn=Iwcolumns in ASCII tables to correctly read values exceeding int32 - setting int16, int32 or int64 according tow. [#9901]Fix unclosed memory-mapped FITS files in
FITSDiffwhen 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.writetoandpathlib.Pathobject. [#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).helpwhen 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_unitsandreturn_unitsof aCompoundModelto the units of the constituent models. [#10158]Removed hard-coded names of inputs and outputs. [#10174]
Fixed a problem where slicing a
CompoundModelby name will crash if therefix_inputsoperators 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
Linear1DandPlanar2Din model sets. [#10623]Fixed reported module name of
math_functionsmodel classes. [#10694]Fixed reported module name of
tabularmodel classes. [#10709]Do not create new
math_functionsmodels for ufuncs that are only aliases (divide and mod). [#10697]Fix calculation of the
Moffat2Dderivative with respect to gamma. [#10784]
astropy.stats#
Fixed an API regression where
SigmaClip.__call__would convert masked elements tonanand upcast the dtype tofloat64in its outputMaskedArraywhen using theaxisparameter along with the defaultsmasked=Trueandcopy=True. [#10610]Fixed an issue where fully masked
MaskedArrayinput tosigma_clipped_statsgave incorrect results. [#10099]Fixed an issue where
sigma_clipandSigmaClip.__call__would return a masked array instead of andarraywhenmasked=Falseand the input was a full-maskedMaskedArray. [#10099]Fixed bug with
funcs.poisson_conf_intervalwhere an integer for N withinterval='kraft-burrows-nousek'would throw an error with mpmath backend. [#10427]Fixed bug in
funcs.poisson_conf_intervalwithinterval='kraft-burrows-nousek'where certain combinations of source and background count numbers led toValueErrordue 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=Truefor 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.maskedelements to indicate masked data. [#10636]Avoid modifying
.metawhen 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
Tableon 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.txtfor additional information. [#10256, #10665]extract_arrayraises aValueErrorif 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
astropyconfiguration system can result in a~/.astropy/config/package..cfgfile. [#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
EarthLocationeven 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_readerC parsers incorrectly returning entries of isolated positive/negative signs asfloatinstead ofstr. [#9918]Fixed a segmentation fault in the
fast_readerC parsers when parsing an invalid file withguess=Trueand 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
ecsvfiles. [#9933]
astropy.io.misc#
Magnitude, decibel, and dex can now be stored in
hdf5files. [#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
hdf5files. 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
GroupsHDUwhich needs to modify the header to handle invalid headers, and fix accessing.datafor empty HDU. [#9711, #9934]Fix
fitsdiffwhen 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.Columnand extended tests forTFORMandTDISPvalidation. [#9978]Fix checksum verification to process all HDUs instead of only the first one because of the lazy loading feature. [#10012]
Allow passing
output_verifyto.closewhen using the context manager. [#10030]Prevent instantiation of
PrimaryHDUandImageHDUwith 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
hdf5files. [#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
hdf5files. 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.reversefor 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
ecsvfiles. [#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_browseralso worked for mixin columns likeTimeandSkyCoord. [#10068]
astropy.time#
Fix inaccuracy when converting between TimeDelta and datetime.timedelta. [#9679]
Fixed exception when changing
formatin the case whenout_subfmtis defined and is incompatible with the new format. [#9812]Fixed exceptions in
Time.to_value(): when supplying anysubfmtargument 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
Timeobject from an existingTimeor list ofTimeobjects. [#9969]Fixed a bug where an exception occurred when creating a
Timeobject if theval1argument was a regular double and theval2argument was alongdouble. [#10034]
astropy.timeseries#
Fixed issue with reference time for the
transit_timeparameter returned by theBoxLeastSquaresperiodogram. Now, thetransit_timewill be within the range of the input data and arbitrary time offsets/zero points no longer affect results. [#10013]
astropy.units#
Fix for
quantity_inputannotation raising an exception on iterable types that don’t define a general__contains__for checking ifNoneis contained (e.g. Enum as of python3.8), by instead checking for instance of Sequence. [#9948]Fix for
u.Quantitynot taking into accountndminif constructed from anotheru.Quantityinstance with different but convertible unit [#10066]
astropy.utils#
Fixed
deprecated_renamed_argumentnot passing in user value to deprecated keyword when the keyword has no new name. [#9981]Fixed
deprecated_renamed_argumentnot 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
ZScaleIntervalto return the array minimum and maximum when there are less thenmin_npixelsin 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_ephemeristo 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
cylindricalproperty toSkyCoordfor shorthand access to aCylindricalRepresentationof the coordinate, as is already available for other common representations. [#8857]The default parameters for the
Galactocentricframe are now controlled by aScienceStatesubclass,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
Distanceno longer raises a warning. [#9598]
astropy.cosmology#
The pre-publication Planck 2018 cosmological parameters are included as the
Planck2018_arXiv_v2object. 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
Overflowwhen reading inFloatType0.0 withuse_fast_converter; synchronisedIntTypeOverflowwarning 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.renamewas changed to add the ability to renameModel.inputsandModel.outputs. [#9220]New function
fix_inputsto generate new models from others by fixing specific inputs variable values to constants. [#9135]inputsandoutputsare now model instance attributes, andn_inputsandn_outputsare class attributes. Backwards compatible default values ofinputsandoutputsare generated.Model.inputsandModel.outputsare 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
BlackBodymodel. [#9282]Add
Drude1Dmodel. [#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]NDDatanow 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.wcsnow 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_midvariancefunctions now allow for theaxiskeyword to be a tuple of integers. [#9309]Added an
ignore_nanoption to thebiweight_location,biweight_scale, andbiweight_midvariancefunctions. [#9457]A numpy
MaskedArraycan now be input to thebiweight_location,biweight_scale, andbiweight_midvariancefunctions. [#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 justColumnsubclasses. [#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 justColumnsubclasses. [#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.datawill now return a plainMaskedArrayrather 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 thejoinoperation. [#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
Timecolumns. [#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 aMaskedColumncauses a masked entry to be inserted. [#9623]Fixed a bug that caused an exception when initializing a
MaskedColumnfrom anotherMaskedColumnthat 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 pluginpackage. See the README at for information about using this new plugin. [#9214]
astropy.time#
Added a new time format
ymdhmsfor representing times via year, month, day, hour, minute, and second attributes. [#7644]TimeDeltagained ato_valuemethod, so that it becomes easier to use it wherever aQuantitywith units of time could be used. [#8762]Made scalar
TimeandTimeDeltaobjects hashable based on JD, time scale, and location attributes. [#8912]Improved error message when bad input is used to initialize a
TimeorTimeDeltaobject and the format is specified. [#9296]Allow numeric time formats to be initialized with numpy
longdouble,Decimalinstances, 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 givenformatand possiblesubfmt(e.g.,to_value('mjd', 'str'). [#9361]Prevent unnecessary ERFA warnings when sorting
Timeobjects. [#9545]
astropy.timeseries#
Adding
epoch_phase,wrap_phaseandnormalize_phasekeywords toTimeSeries.fold()to control the phase of the epoch and to return normalized phase rather than time for the folded TimeSeries. [#9455]
astropy.uncertainty#
Distributionwas rewritten such that it deals better with subclasses. As a result, Quantity distributions now behave correctly withtomethods yielding new distributions of the kind expected for the starting distribution, andto_valueyieldingNdarrayDistributioninstances. [#9429, #9442]The
pdf_*properties that were used to calculate statistical properties ofDistrubutioninstances were changed into methods. This allows one to pass parameters such asddoftopdf_stdandpdf_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_fileandastropy.utils.data.get_readable_fileobjnow provides anhttp_headerskeyword to pass in specific request headers for the download. It also now defaults to providingUser-Agent: AstropyandAccept: */*headers. The defaultUser-Agentvalue can be set with a newastropy.data.conf.default_http_user_agentconfiguration item. [#9508, #9564]Added a new
astropy.utils.misc.unbroadcastfunction 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_cacheandimport_cacheto permit transporting downloaded data to machines with no Internet connection. Several new functions are available to investigate the cache contents; e.g.,check_download_cachecan be used to confirm that the persistent cache has not become damaged. [#9182]A new
astropy.utils.iers.LeapSecondsclass has been added to track leap seconds. [#9365]
astropy.visualization#
Added a new
time_supportcontext manager/function for making it easy to plot and formatTimeobjects 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_unittowcsaxes.CoordinateHelper. [#9392]WCSAxesnow, 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_pixelfunction 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_derivativesfunction 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
SlicedLowLevelWCSclass inastropy.wcs.wcsapito avoid storing chains of nestedSlicedLowLevelWCSobjects when applying multiple slicing operations in turn. [#9210]Added a
wcs_info_strfunction toastropy.wcs.wcsapito 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_namesandworld_axis_names. [#9156]Updated the WCS class to now correctly take and return
Timeobjects in the high-level APE 14 API (e.g.pixel_to_world. [#9376]SlicedLowLevelWCSnow raisesIndexErrorrather thanValueErroron an invalid slice. [#9067]Added
fit_wcs_from_pointsfunction toastropy.wcs.utils. Fits a WCS object to set of matched detector/sky coordinates. [#9469]Fix various bugs in
SlicedLowLevelWCSwhen the WCS being sliced was one dimensional. [#9693]
API Changes#
astropy.constants#
Deprecated
set_enabled_constantscontext manager. Useastropy.physical_constantsandastropy.astronomical_constants. [#9025]
astropy.convolution#
astropy.coordinates#
Removed the
recommended_unitsattribute 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
longitudeandlatitudeattributes fromEarthLocation; deprecated since 2.0. [#9326]The
DifferentialAttributefor frame classes now passes through any input to theallowed_classesif 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_raandgalcen_decattributes from theGalactocentricframe. [#9346]
astropy.extern#
Remove the bundled
sixmodule. [#8315]
astropy.io.ascii#
Masked column handling has changed, see
astropy.tableentry below. [#8789]
astropy.io.misc#
astropy.io.fits#
Masked column handling has changed, see
astropy.tableentry below. [#8789]io.fits.Headerhas been made safe for subclasses for copying and slicing. As a result of this change, the private subclassCompImageHeadernow always should be passed an explicitimage_header. [#9229]Removed the deprecated
toleranceoption infitsdiffandio.fits.diffclasses. [#9520]Removed deprecated keyword arguments for
CompImageHDU:compressionType,tileSize,hcompScale,hcompSmooth,quantizeLevel. [#9520]
astropy.io.votable#
Changed
pedanticargument toverifyand 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
BlackBody1Dmodel andblackbody_nuandblackbody_lambdafunctions. [#9282]The deprecated
rotations.rotation_matrix_from_anglewas removed. [#9363]Deprecated and renamed
MexicanHat1DandMexicanHat2DtoRickerWavelet1DandRickerWavelet2D. [#9445]Deprecated
modeling.utils.ExpressionTree. [#9576]
astropy.stats#
Removed the
iterskeyword from sigma clipping stats functions. [#8948]Renamed the
aparameter todatain biweight stat functions. [#8948]Renamed the
aparameter todatainmedian_absolute_deviation. [#9011]Renamed the
conflevelkeyword toconfidence_levelinpoisson_conf_interval. Usage ofconflevelnow issuesAstropyDeprecationWarning. [#9408]Renamed the
confkeyword toconfidence_levelinbinom_conf_intervalandbinned_binom_proportion. Usage ofconfnow issuesAstropyDeprecationWarning. [#9408]Renamed the
conf_lvlkeyword toconfidence_levelinjackknife_stats. Usage ofconf_lvlnow issuesAstropyDeprecationWarning. [#9408]
astropy.table#
The handling of masked columns in the
Tableclass has changed in a way that may impact program behavior. Now aTablewithmasked=Falsemay contain bothColumnandMaskedColumnobjects, 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_columnsandhas_masked_valueswere 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_warningsfrom['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, nowFutureWarningandImportWarningwould also be turned into exceptions. [#8506]warnings_to_ignore_by_pyveroption inenable_deprecations_as_exceptions()has changed. Please refer to API documentation. [#8506]Default settings for
warnings_to_ignore_by_pyverare 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_utcnow uses the auto-updatedIERS_Autoby default, instead of the bundledIERS_Bfile. [#9226]Time formats that do not use
val2now 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 damagedTimeobjects. [#9375]The
TimeDelta.to_value()method now can also take theformatname as its argument, in which case the value will be calculated using theTimeFormatmachinery. For this case, one can also pass asubfmtargument to retrieve the value in another form thanfloat. [#9361]
astropy.timeseries#
Keyword
midpoint_epochis renamed toepoch_time. [#9455]
astropy.uncertainty#
Distributionwas rewritten such that it deals better with subclasses. As a result, Quantity distributions now behave correctly withtomethods yielding new distributions of the kind expected for the starting distribution, andto_valueyieldingNdarrayDistributioninstances. [#9442]
astropy.units#
For consistency with
ndarray, scalarQuantity.valuewill 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_pointsmodule, which was deprecated in favour ofastropy.units.photometricsince 3.1. [#9353]EquivalentUnitsListnow has a_repr_html_method to output a HTML table on a call tofind_equivalent_unitsin Jupyter notebooks. [#9495]
astropy.utils#
download_fileand 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.mapand.map_unorderedto take an argumentmultiprocessing_start_methodto 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 onlyspawnwhile Linux defaults tofork. [#9182]All operations that act on the astropy download cache now take an argument
pkgnamethat allows one to specify which package’s cache to use. [#8237, #9182]Removed deprecated
funcsigsandfuturesfromastropy.utils.compat. [#8909]Removed the deprecated
astropy.utils.compat.numpymodule. [#8910]Deprecated
InheritDocstringsas it is natively supported by Sphinx 1.7 or higher. [#8881]Deprecated
astropy.utils.timermodule, which has been moved toastroquery.utils.timerand will be part ofastroquery0.4.0. [#9038]Deprecated
astropy.utils.misc.set_localefunction, as it is meant for internal use only. [#9471]The implementation of
data_info.DataInfohas 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]IERStables now usenanto mark missing values (rather than1e20). [#9226]
astropy.visualization#
Bug Fixes#
astropy.convolution#
Fixed
nan_treatment='interpolate'option toconvolve_fftto properly take into accountfill_value. [#8122]
astropy.coordinates#
The
QuantityAttributeclass now supports a None default value if a unit is specified. [#9345]When
Representationclasses 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
valueattribute 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]
Quantitycolumns 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
ColumnorMaskedColumn, 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_Autotable, 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_coordand correctly handle when input coordinates are not already in spherical representations. [#8927]Fixed
ImageNormalizeso that when it is initialized withoutdatait will still use the inputintervalclass. [#9698]Fixed
ImageNormalizeto 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
TLONandTLATcoordinates will now return an ITRS frame with the representation class set toSphericalRepresentation. This fixes a bug that causedWCS.pixel_to_worldto raise an error for such world coordinate systems. [#9609]FITSWCSAPIMixinnow returns tuples not lists frompixel_to_worldandworld_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.txtfor 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
KDTreefor 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_smallhaving dimensions equal toarray_large, instead of only allowing smaller sizes of arrays. [#9118]
astropy.stats#
Fixed
median_absolute_deviationfor the case whereignore_nan=Trueand an input masked array contained both NaNs and infs. [#9307]
astropy.table#
Comparisons between
Columninstances andQuantitywill 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
Quantityinput data for all methods ofLombScarge.false_alarm_probabilty. [#9246]
astropy.units#
Allow conversion of
Columnwith logarithmic units to a suitableQuantitysubclass 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_pageaccess by using custom request headers and HTTPS when version is specified. [#9032]Make
download_file(and by extensionget_readable_fileobjand others) check the size of downloaded files against the size claimed by the server. [#9302]Fix
find_current_moduleso 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
WCSAxeswhen drawing grids. [#8882]
astropy.wcs#
Fixed equality test between
cunitwhere 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
cunitorctype[#9151]Fixed reference counting in
WCSBase.__init__[#9166]Fix
SlicedLowLevelWCSworld_to_pixel_valuesandpixel_to_world_valueswhen 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_shapeandWCS.pixel_boundsto 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
MaskedColumnfrom a list ofMaskedArrayobjects. [#8826]
astropy.wcs#
Added
Noneto be displayed as aworld_axis_physical_typesin theWCSrepr, asNonevalues 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,HeliocentricTrueEclipticandGeocentricTrueEclipticframes. 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
sixnow emitsAstropyDeprecationWarning. It will be removed in 4.0. [#8323]
astropy.io.ascii#
IPAC tables now output data types of
floatinstead ofdouble, orintinstead 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\ninstead of\r\n). [#8659]
astropy.io.misc#
Implement serialization of
TimeDeltain ASDF. [#8285]Implement serialization of
EarthLocationin ASDF. [#8286]Implement serialization of
SkyCoordin 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
Headerclass. [#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
Headersuch thatNoneis used in Python to represent FITS undefined when using dict interface.Undefinedcan also be assigned and is translated toNone. Previously setting a header card value toNoneresulted in an empty string field rather than a FITS undefined value. [#8572]Allow
Header.fromstringandCard.fromstringto acceptbytes. [#8707]
astropy.io.registry#
Implement
Tablereader and writer forASDF. [#8261]Implement
Tablereader and writer methods to wrappandasI/O methods for CSV, Fixed width format, HTML, and JSON. [#8381]Add
help()andlist_formats()methods to unified I/Oreadandwritemethods. For exampleTable.read.help()gives help on availableTableread 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
DataFrameinterface (to_pandas()andfrom_pandas()). Mixin columns likeTimeandQuantitycan now be converted to pandas by flattening the columns as necessary to plain columns.TimeandTimeDeltacolumns get converted to corresponding pandas date or time delta types. TheDataFrameindex is now handled in the conversion methods. [#8247]Added
rename_columnsmethod 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
metaattributes. 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 ofmetainstead of a deepcopy. Changed theTable.metaclass-level descriptor so that assigning directly tometa, e.g.tbl.meta = new_metano longer does a deepcopy and instead just directly assigns thenew_metaobject reference. Changed Table initialization so that inputmetais copied only ifcopy=True. [#8404]Improved Table slicing performance with internal implementation changes related to column attribute access and certain input validation. [#8493]
Added
reverseargument to thesortandargsortmethods to allow sorting in reverse order. [#8528]Improved
Table.sort()performance by removingself[keys]from code which is creating deep copies ofmetaattribute and adding a new keywordnamesinget_index()to get index by using a list or tuple containing names of columns. [#8570]Expose
represent_mixins_as_columnsas a public function in theastropy.tablesubpackage. This previously-private function in thetable.serializemodule 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
BoxLeastSquaresandLombScargleclasses have been moved toastropy.timeseries.periodogramsfromastropy.stats. [#8591]Added the ability to provide absolute
Timeobjects to theBoxLeastSquaresandLombScargleperiodogram classes. [#8599]Added model inspection methods (
model_parameters(),design_matrix(), andoffset()) toastropy.timeseries.LombScargleclass [#8397].
astropy.units#
Quantityoverrides ofndarraymethods 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,stdandvar. [#8370]
astropy.visualization#
Added
CompositeStretch, which inherits fromCompositeTransformand alsoBaseStretchso that it can be used withImageNormalize. [#8564]Added a
log_aargument to thesimple_normmethod. Similar to the exposing of theasinh_aargument forAsinhStretch, the newlog_aargument 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
Timeaxis are parsed and the axis is included in the WCS object. [#8592]The
OBSGEOattribute as expanded to 6 members -XYZLBH. [#8592]Added a new class
SlicedLowLevelWCSinastropy.wcs.wcsapithat can be used to slice any WCS that conforms to theBaseLowLevelWCSAPI. [#8546]Updated implementation of
WCS.__getitem__andWCS.sliceto now return aSlicedLowLevelWCSrather 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
floatinstead ofdouble, orintinstead oflong, based on the columndtype.itemsize. [#8216]
astropy.io.misc#
Unit equivalencies can now be serialized to ASDF. [#8252]
astropy.modeling#
astropy.stats#
The
BoxLeastSquaresandLombScargleclasses have been moved to theastropy.timeseries.periodogramsmodule and will now emit a deprecation warning when imported fromastropy.stats. [#8591]
astropy.table#
Converting an empty table to an array using
as_arraymethod 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
metainstead of a deepcopy. Changed theTable.metaclass-level descriptor so that assigning directly tometa, e.g.tbl.meta = new_metano longer does a deepcopy and instead just directly assigns thenew_metaobject reference. Changed Table initialization so that inputmetais copied only ifcopy=True. [#8404]Added a keyword
namesinTable.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_worldandWCS.array_index_to_world). [#8663]
astropy.utils#
It is now possible to control the number of cores used by
ProgressBar.mapby passing a positive integer as themultiprocesskeyword argument. UseTrueto use all cores. [#8083]
Bug Fixes#
astropy.coordinates#
BarycentricTrueEcliptic,HeliocentricTrueEclipticandGeocentricTrueEclipticnow use the correct transformation (including nutation), whereas the new*MeanEclipticclasses use the nutation-free transformation. [#8394]Representations with
float32coordinates 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
formatskeyword. [#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
CCDDatahandles 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 inputmetaargument was being ignored. Now the inputmeta, if supplied, will be used as themetafor the newTable. [#8404]Fix the conversion of bytes values to Python
strwithTable.tolist. [#8739]
astropy.time#
Fixed a number of issues to ensure a consistent output type resulting from multiplication or division involving a
TimeDeltainstance. The output is now always aTimeDeltaif the result is a time unit (like u.s or u.d), otherwise it will be aQuantity. [#8356]Multiplication between two
TimeDeltainstances is now possible, resulting in aQuantitywith units of time squared (division already correctly resulted in a dimensionlessQuantity). [#8356]Like for comparisons, addition, and subtraction of
Timeinstances with with non-time instances, multiplication and division ofTimeDeltainstances with incompatible other instances no longer immediately raise anUnitsErrororTypeError(depending on the other instance), but rather go through the regular Python mechanism ofTimeDeltareturningNotImplemented(which will lead to a regularTypeErrorunless the other instance can handleTimeDelta). [#8356]Corrected small rounding errors that could cause the
jd2values inTimeto fall outside the range of -0.5 to 0.5. [#8763]
astropy.units#
Added a
Quantity.to_stringmethod 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:inlineanddisplay. [#8313]Ensure classes that mimic quantities by having a
unitattribute and/ortoandto_valuemethods can be properly used to initializeQuantityor setQuantityinstance items. [#8535]Add support for
<<to create logarithmic units. [#8290]Add support for the
clipufunc, which in numpy 1.17 is used to implementnp.clip. As part of that, remove theQuantity.clipmethod under numpy 1.17. [#8747]Fix parsing of numerical powers in FITS-compatible units. [#8251]
astropy.wcs#
Added a
PyUnitListProxy_richcmpmethod inUnitListProxyclass to enableWCS.wcs.cunitequality testing. It helps to check whether the two instances ofWCS.wcs.cunitare equal or not by comparing the data members ofUnitListProxyclass [#8480]Fixed
SlicedLowLevelWCSwhenarray_shapeisNone. [#8649]Do not attempt to delete repeated distortion keywords multiple times when loading distortions with
_read_distortion_kwand_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
TimeDeltafor multiplcation and division, which ensure that the output is now always aTimeDeltaif 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 aTypeErrorif the other instance cannot handleTimeDelta(rather thanUnitsErrororTypeErrordepending on presumed abilities of the other instance). [#8356]Multiplication between two
TimeDeltainstances will no longer result in anOperandTypeError, but rather result in aQuantitywith 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-hdusnow 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_nameconstructor 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_docscan be used to create a docstring graph from a customTransformGraphobject. [#7135]KDTreefor catalog matching is now built with sliding midpoint rule rather than standard. In code, this means settingcompact_nodes=Falseandbalanced_tree=FalseincKDTree. 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_representationsfunction to combine coordinate representation data and any associated differentials. [#7922]BaseCoordinateFramewill now check for a method named_astropy_repr_in_framewhen constructing the string forms of attributes. Allowing any class to control howBaseCoordinateFramerepresents 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
SkyCoordobjects. [#7949, #5952]Added a
directional_offset_bymethod toSkyCoordthat computes a new coordinate given a coordinate, position angle, and angular separation [#5727]
astropy.cosmology#
The default cosmology has been changed from
WMAP9toPlanck15. [#8123]Distance calculations with
LambaCDMwith no radiation (T_CMB0=0) are now 20x faster by using elliptic integrals for non-flat cases. [#7155]Distance calculations with
FlatLambaCDMwith no radiation (T_CMB0=0) are now 20x faster by using the hypergeometric function solution for this special case. [#7087]Age calculations with
FlatLambdaCDMwith 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\bottomrulecommands. [#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_kwargsare now listed as “Disabled” at the beginning of the trace. [#5578]Emit a warning when reading an ECSV file without specifying the
formatand 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_byteskeyword 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_hduskeyword toFITSDiffto 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 (
NaNfor float,TNULLfor 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
fitsheadercommand line tool now supports adfits+fitsortmode, 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
Multiplymodel which preserves unit through evaluate, unlikeScalewhich is dimensionless. [#7210]Add a
uses_quantityproperty toModelwhich allows introspection of if theModelcan acceptQuantityobjects. [#7417]Add a
separability_matrixfunction which returns the correlation matrix of inputs and outputs. [#7803]Fixed compatibility of
JointFitterwith the latest version of Numpy. [#7984]Add
priorandposteriorconstraints 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.blsmodule 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
Timemixin 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_methodtoTable.writeto control howTimeandMaskedColumncolumns are written. [#7481]Allow mixin columns to be used in table
groupanduniquefunctions. 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
TimeorTimeDeltacolumn(s). [#7897]
astropy.tests#
Added an option
--readonlyto the test command to change the permissions on the temporary installation location to read-only. [#7598]
astropy.time#
Allow array-valued
Timeobject to be modified in place. [#6028]Added support for missing values (masking) to the
Timeclass. [#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.timedeltaformat class forTimeDelta. [#7441]Added
strftimeandstrptimemethods toTimeclass. These methods are similar to those in the Python standard librarytimepackage and provide flexible input and output formatting. [#7323]Added
datetime64format to theTimeclass to support working withnumpy.datetime64dtype arrays. [#7361]Add fractional second support for
strftimeandstrptimemethods ofTimeclass. [#7705]Added an
insertmethod to allow inserting one or more values into aTimeorTimeDeltaobject. [#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
Distributionclass and associated convenience functions. [#6945]
astropy.units#
Add complex numbers support for
Quantity._repr_latex_. [#7676]Add
thermodynamic_temperatureequivalency 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_fluxequivalency. [#7891]ABandSTare now enabled by default, and have alternate namesABfluxandSTflux. [#7891]Added
littlehunit and associatedwith_H0equivalency. [#7970]
astropy.visualization#
Added
imshow_normfunction, which combines imshow and creation of aImageNormalizeobject. [#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:decimalcan 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_unitcan 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 theWCSAxesclass and the individualCoordinateHelperclasses. 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_ticksshould be preferred. [#7969]Moved the argument
exclude_overlappingfromset_tickstoset_ticklabel. [#7969]Added a
pad=argument toset_ticklabelto provide a way to control the padding between ticks and tick labels. [#7969]Added support for setting the tick direction in
set_ticksusing 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
_naxis1and_naxis2in favor ofpixel_shape. [#7973]Added compatibility to wcslib version 6. [#8093]
API Changes#
astropy.convolution#
kernelcan now be a tuple. [#7561]Not technically an API changes, however, the doc string indicated that
boundary=Nonewas 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.concatenateto include velocity data in the concatenation. [#7922]Changed the name of the single argument to
Frame.realize_frame()from the (incorrect)representation_typetodata. [#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
SphericalRepresentationobject 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_framenow 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 aParameterErrorexception will be raised. [#5578]The fast readers will now raise
InconsistentTableErrorinstead ofCParserErrorif the number of data and header columns do not match. [#5578]Changed a number of
ValueErrorexceptions toInconsistentTableErrorin places where the exception is related to parsing a table which is inconsistent with the specified table format. Note thatInconsistentTableErrorinherits fromValueErrorso no user code changes are required. [#7425]
astropy.io.fits#
The
fits.table_to_hdu()function will translate any columnformatattributes to a TDISPn format string, if possible, and store it as a TDISPn keyword in theHDUheader. [#7226]
astropy.modeling#
Change the order of the return values from
FittingWithOutlierRemoval, such thatfitted_modelcomes 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_fluxparameter of theBlackBody1Dmodel to zero. [#7045]
astropy.nddata#
Add two new uncertainty classes,
astropy.nddata.VarianceUncertaintyandastropy.nddata.InverseVariance. [#6971]
astropy.stats#
String values can now be used for the
cenfuncandstdfunckeywords in theSigmaClipclass andsigma_clipandsigma_clipped_statsfunctions. [#7478]The
SigmaClipclass andsigma_clipandsigma_clipped_statsfunctions now have amaskedkeyword, which can be used to return either a masked array (default) or an ndarray with the min/max values. [#7478]The
iterskeyword has been renamed (and deprecated) tomaxitersin theSigmaClipclass andsigma_clipandsigma_clipped_statsfunctions. [#7478]
astropy.table#
astropy.tests#
from astropy.tests.helper import *no longer includesquantity_allclose. However,from astropy.tests.helper import quantity_allclosewould still work. [#7381]warnings_to_ignore_by_pyveroption inenable_deprecations_as_exceptions()now takesNoneas key. Any deprecation message that is mapped toNonewill be ignored regardless of the Python version. [#7790]
astropy.time#
Added the ability to use
localas time scale inTimeandTimeDelta. [#6487]Comparisons, addition, and subtraction of
Timeinstances with non-time instances will now returnNotImplementedrather than raise theTime-specificOperandTypeError. This will generally lead to a regularTypeError. As a result,OperandTypeErrornow only occurs if the operation is betweenTimeinstances of incompatible type or scale. [#7584]
astropy.units#
astropy.utils#
InheritDocstringsnow 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.compatnamespace, use it directly fromimportlib. [#7872]
astropy.visualization#
In
ImageNormalize, the default forclipis set toTrue. [#7800]Changed
AsymmetricPercentileIntervalandMinMaxIntervalto ignore NaN values in arrays. [#7360]Automatically default to using
grid_type='contours'in WCSAxes when using a customTransformobject 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, andwrapnow 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-O2required for hoisting and-O3for 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)
erfaufuncs. [#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
SkyCoordinitializer to improve performance and code clarity. [#7958]Sped up initialization of
Longitudeby ~40%. [#7616]
astropy.stats#
The
SigmaClipclass andsigma_clipandsigma_clipped_statsfunctions are now significantly faster. [#7478]A Cython implementation for
astropy.stats.kuiper_twoand a vectorized implementation forastropy.stats.kuiper_false_positive_probabilityhave 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_fftwhere masked input was copied withnumpy.asarrayinstead ofnumpy.asanyarray.numpy.asarrayremoves the mask subclass causingnumpy.ma.ismasked(input)to fail, causingconvolve_fftto 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_addressnow 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_metaoption 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
TimeDeltaarray item with plain float value(s). This was always interpreted as a JD (day) value regardless of theTimeDeltaformat. [#7990]
astropy.units#
To simplify fast creation of
Quantityinstances from arrays, one can now writearray << unit(equivalent toQuantity(array, unit, copy=False)). Ifarrayis 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_unitmethod onCoordinateHelpernow 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.txtfor additional information. [#8014]The
representationkeywords in coordinate frames are now deprecated in favor of therepresentation_typekeywords (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
_parentattribute in theinfoattribute 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].infowill now fail because at the point of theinfoproperty 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
WCSof a cutout (seenddata.Cutout2D) when input image’sWCScontainsSIPdistortion corrections by adjusting thecrpixof theastropy.wcs.Sip(in addition to adjusting thecrpixof theastropy.wcs.WCSobject). This bug had the potential to produce large errors inWCScoordinate 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
WCSslice (seeWCS.slice()) whenWCScontainsSIPdistortion corrections by adjusting theWCS.sip.crpixin addition to adjustingWCS.wcs.crpix. This bug had the potential to produce large errors inWCScoordinate 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 theCommentedHeaderreader for allheader_startsettings. [#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
SkyCoordobjects (with theseparation_3dmethod) now works with or without velocity data attached to the objects. [#7387]
astropy.io.votable#
astropy.modeling#
FittingWithOutlierRemovalnow handles model sets, as long as the underlying fitter supports masked values. [#7199]Remove assumption that
model_set_axis == 0for 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
axisparameter insigma_clip, like the underlyingnumpyfunctions and some other functions instats. [#7199]
astropy.tests#
The function
quantity_allclosewas moved to theunitspackage with the new, shorter nameallclose. This eliminates a runtime dependency onpytestwhich 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
allclosefunction (this was previously available in thetestsmodule asquantity_allclose). To complementallclose, a newisclosefunction 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.txtfor 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_helperno longer requiresscipy>=0.18. [#7219]
Version 3.0 (2018-02-12)#
New Features#
astropy.constants#
New context manager
set_enabled_constantsto temporarily use an older version. [#7008]
astropy.coordinates#
The
Distanceobject now acceptsparallaxas a keyword in the initializer, and supports retrieving a parallax (as anAngle) via the.parallaxattributes. [#6855]The coordinate frame classes (subclasses of
BaseCoordinateFrame) now always have.velocity,.proper_motion, and.radial_velocityproperties 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]SkyCoordobjects 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_zare all automatically mapped to frame component namsev_x,v_y,v_z. [#6856]SkyCoordobjects 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_typeanddifferential_typeinstead ofrepresentationanddifferential_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]EarthLocationnow has a method to compute the gravitational redshift due due to solar system bodies. [#6861, #6935]EarthLocationnow has aget_gcrsconvenience method to get the location in GCRS coordinates. [#6861, #6935]
astropy.io.fits#
Expanded the FITS
Columninterface to accept attributes pertaining to the FITS World Coordinate System, which includes spatial(celestial) and time coordinates. [#6359]Added
verattribute to set theEXTVERheader keyword toImageHDUandTableHDU. [#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.writehas now been significantly improved for tables containing one or more string columns. [#6920]The
Table.readnow 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_bytescan 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_hdufunction and theBinTableHDU.from_columnsandFITS_rec.from_columnsmethods now include acharacter_as_byteskeyword 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
SkyCoordorEarthLocationwith no loss of information. [#6912]Enable tab-completion for
FITS_reccolumn names andHeaderkeywords 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
SkyCoordorEarthLocationwith 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_separablefunction to modeling to test the separability of a model. [#6746]Added
Model.separableproperty. It returns a boolean value orNoneif 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.TimeTable columns to and from FITS tables, to the extent supported by the FITS standard. [#6176]Improved exception handling and error messages when column
formatattribute is incorrect for the column type. [#6385]Allow to pass
htmldictoption to the jsviewer writer. [#6551]Added new table operation
astropy.table.setdiffthat 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.TimeTable columns. [#6442]Allowed to remove table rows through the
__delitem__method. [#5839]Added a new
showtablecommand-line script to view binary or ASCII table files. [#6859]Added new table property
astropy.table.Table.loc_indicesthat 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 aQuantityto aboolwill raiseValueError. [#6580, #6590]Modify the
brightness_temperatureequivalency 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.specialfunctions. [#6852]
astropy.utils#
The
astropy.utils.console.ProgressBar.mapclass method now supports theipython_widgetoption. You can now pass it bothmultiprocess=Trueandipython_widget=Trueto get both multiprocess speedup and a progress bar widget in an IPython Notebook. [#6368]The
astropy.utils.compat.funcsigsmodule has now been deprecated. Use the Python ‘inspect’ module directly instead. [#6598]The
astropy.utils.compat.futuresmodule has now been deprecated. Use the Python ‘concurrent.futures’ module directly instead. [#6598]JsonCustomEncoderis expanded to handleQuantityandUnitBase. [#5471]Added a
dcip_xymethod 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_toof theastropy.utils.compat.numpymodule have been deprecated. Use the NumPy functions directly. [#6691]The
astropy.utils.console.ProgressBar.mapclass 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
WCSWorld2PixelTransformandWCSPixel2WorldTransformclasses by settinghas_inversetoTrue. 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_ruleso that labels are automatically hidden when no ticks are drawn or always shown. [#6774]
astropy.wcs#
API Changes#
astropy.convolution#
astropy.coordinates#
Deprecated
recommended_unitsfor 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
representationanddifferential_clsare being replaced byrepresentation_typeanddifferential_type. In the next version, usingrepresentationwill 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
SkyCoordcan uniquely identify and distinguish frame attributes from frame components. [#6871]Slicing and reshaping of
SkyCoordand 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.readorTable.writebased on the.ecsvfile name suffix. In this case it is not required to provide theformatkeyword. [#6552]
astropy.io.fits#
astropy.io.misc#
astropy.io.votable#
Add handling of
tree.Groupelements totree.Resource. Unified I/O or conversion to astropy tables is not affected. [#6262]
astropy.modeling#
astropy.table#
When setting the column
formatattribute 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_onlykwarg of theconvert_bytestring_to_unicodeandconvert_unicode_to_bytestringmethods 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). TheColumnclass 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
KeyErrorexception is now raised (previouslyValueError). When setting a table row, if the right hand side is not a sequence with the correct length then aValueErroris now raised (previously in certain cases aTypeErrorwas raised). [#7107]
astropy.utils#
download_files_in_parallelnow always usescache=Trueto 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.urlopentofits.open). [#6378]Fix the
fitscheckscript 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
deprecateddecorator 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 3superwithout arguments works for decorated classes. [#6615]Fixed
HomogeneousListwhen setting one item or a slice. [#6773]Also check the type when creating a new instance of
HomogeneousList. [#6773]Make
HomogeneousListwork 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_functionssub-package is removed. Useastropy.modeling.blackbody. [#6541]astropy.vosub-package is removed. Useastropy.sampfor SAMP andastroqueryfor VO cone search. [#6540]The guide to setting up Emacs for code development was simplified, and updated to recommend
flycheckandflake8for 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
Timecould 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
BaseCoordinateFrameobject 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#
Quantitynow preserves thedtypefor anything that is floating point, includingfloat16. [#8872]Unit()now accepts units with fractional exponents such asm(3/2)in the default/fitsandvounitformats 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.updatewhich was dropping the comments when passed aHeaderobject. [#8840]
astropy.modeling#
astropy.units#
Fixed a bug that prevented
EarthLocationfrom 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_blockswhen called with thencp_priorkeyword. [#8339]
astropy.units#
Fix
takewhen one gets only a single element from aQuantity, ensuring it returns aQuantityrather than a scalar. [#8617]
Version 2.0.12 (2019-02-23)#
New Features#
astropy.utils#
The
deprecated_renamed_argumentdecorator now capable deprecating an argument without renaming it. It also got a newalternativekeyword 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
JointFitterwith the latest version of Numpy. [#7984]
astropy.table#
Fix
.quantityproperty ofColumnclass for function-units (e.g.,dex). Previously setting this was possible, but getting raised an error. [#8425]Fixes a bug where initializing a new
Tablefrom the final row of an existingTablefailed. 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.fitswith 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_addressusage due to Google API now requiring API key. [#7993]
astropy.io.fits#
fits.appendnow correctly handles file objects with valid modes other thanostream. [#7856]
astropy.table#
Fix
Table.show_in_notebookfailure when mixin columns are present. [#8069]
astropy.tests#
Explicitly disallow incompatible versions of
pytestwhen 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
histandhistogramand 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-remotedatato v0.3.1. [#8174]Updating bundled
pytest-doctestplusto v0.2.0. [#8175]Updating bundled
pytest-openfilesto v0.3.0. [#8176]Adding
warning_typekeyword 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 casepandasdoes require the values to be float so thatNaNcan 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_dirtoastropy_cache_dir. The command line flag also changed to--astropy-cache-dir. This prevents a conflict with thecache_dirvariable provided by pytest itself. Also made similar change toconfig_diroption as a precaution. [#7721]
astropy.units#
astropy.visualization#
astropy.wcs#
Instead of raising an error
astropy.wcsnow 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
Cutout2Doutput WCS NAXIS values to reflect the cutout image size. [#7552]
astropy.table#
Fixed a bug in
add_columnsmethod whererename_duplicate=Truewould cause an error if there were no duplicates. [#7540]
astropy.tests#
Fixed bug in
python setup.py test --coverageon Windows machines. [#7673]
astropy.time#
Avoid rounding errors when converting
QuantitytoTimeDelta. [#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_skycoordto 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
Tabularmodels to not change the shape of data. [#7411]
astropy.stats#
astropy.table#
Fix a performance issue in
MaskedColumnwhere 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-remotedataplugin 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.txtfor 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
axisbelowproperty 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=Trueinconvolve_fft. Added testing withpreserve_nan=True. [#7000]
astropy.coordinates#
The
sites.jsonfile 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
LevMarLSQFitterwhen fitting 2D models with constraints. [#6705]
astropy.utils#
download_filefunction 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.wcsaxeswhich 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_zwhen using with a Cartesian representation. [#6569]Added a nicer error message when accidentally calling
frame.representationinstead offrame.datain the context of methods that use._apply(). [#6561]Creating a new
SkyCoordfrom a list of multipleSkyCoordobjects 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-astropyis 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-astropyplugins. [#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
Quantityslices can be set with objects that have aunitattribute (such asColumn). [#6123]
astropy.utils#
download_files_in_parallelnow respects the giventimeoutvalue. [#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_fileobjto not work correctly when used with non-local data from inside packages. [#6724]Make sure
get_pkg_data_fileobjfails if the URL can not be read, and correctly falls back on the mirror if necessary. [#6767]Fix the
finddiffoption infind_current_moduleto properly deal with submodules. [#6767]Fixed
pyreadlineimport inutils.console.isattyfor 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_2FITS 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-xdistpackage 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_argumentdecorator, 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
setuptoolsto allow it to gracefully handle keyboard interrupts and pass them on to thepytestsubprocess. This promptspytestto 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
codata2010andcodata2014sub-modules, and astronomical constants defined by the IAU in theiau2012andiau2015sub-modules. The default constants inastropy.constantsin Astropy 2.0 have been updated fromiau2012toiau2015and fromcodata2010tocodata2014. The constants for 1.3 can be accessed in theastropyconst13sub-module and the constants for 2.0 (the default inastropy.constants) can also be accessed in theastropyconst20sub-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
convolveorconvolve_fft, which generates a regular compound model. [#6015]
astropy.coordinates#
Frame attributes set on
SkyCoordare 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
SkyCoordoperations. [#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_dataandreplicatemethods 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]EarthLocationnow haslatandlonproperties (equivalent to, but preferred over, the previouslatitudeandlongitude). [#6237]Added a
radial_velocity_correctionmethod toSkyCoordto do compute barycentric and heliocentric velocity corrections. [#5752]Added a new
AffineTransformclass 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
tabularenvironment 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
printdiffto print out diff reports. [#5759]Allow to instantiate a
BinTableHDUdirectly from aTableobject. [#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
SmoothlyBrokenPowerLaw1Dmodel. [#5656]Add
n_submodelsshared method to single and compound models, which allows users to get the number of components of a given single (compound) model. [#5747]Added a
namesetter 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_midcovariancefunction. [#5777]Added
biweight_scaleandbiweight_midcorrelationfunctions. [#5991]median_absolute_deviationandmad_stdhaveignore_nanoption that will usenp.ma.medianwith nans masked out ornp.nanmedianinstead ofnp.medianwhen computing the median. [#5232]Implemented statistical estimators for Ripley’s K Function. [#5712]
Added
SigmaClipclass. [#6206]Added
std_ddofkeyword 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.Quantityto 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
strobject in a bytestring column (numpy'S'dtype). If comparison withstrinstead ofbytesis a problem (andbytesis really more logical), please open an issue on GitHub. [#5700]Added functionality to allow
astropy.units.Quantityto 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, andEarthLocationvia the ASCII ECSV format. [#6181]Bug fix for
MaskedColumninsert method, wherefill_valueattribute was not being passed along to the copy of theMaskedColumnthat was returned. [#7585]
astropy.tests#
astropy.units#
The
astropy.units.quantity_inputdecorator will now convert the output to the unit specified as a return annotation under Python 3. [#5606]Passing a logarithmic unit to the
Quantityconstructor 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_inputdecorator 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_inputdecorator 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 aQuantityangle or angular speed passed in to the argumentx. [#5653]Added a new equivalence
molar_mass_amubetween g/mol to atomic mass units. [#6040, #6113]Quantityhas gained a newto_valuemethod which returns the value of the quantity in a given unit. [#6127]Quantitynow supports the@operator for matrix multiplication that was introduced in Python 3.5, for all supported versions of numpy. [#6144]Quantitysupports 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_fftreplacedinterpolate_nanwithnan_treatment, andastropy.convolution.convolvereceived a newnan_treatmentargument.astropy.convolution.convolvealso no longer double-interpolates interpolates over NaNs, although that is now available as a separateastropy.convolution.interpolate_replace_nansfunction. 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.Galacticframe 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_matrixandangles.angle_axis. Use the routines incoordinates.matrix_utilitiesinstead. [#6170]EarthLocation.latitudeandEarthLocation.longitudeare now deprecated in favor ofEarthLocation.latandEarthLocation.lon. They former will be removed in a future version. [#6237]The
FrameAttributeclass and subclasses have been renamed to just containAttribute. For example,QuantityFrameAttributeis 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
NumCodeandImgCodeproperties on FITS_ImageBaseHDU. Use module-level constantsBITPIX2DTYPEandDTYPE2BITPIXinstead. [#4993]commentsmeta key (which isio.ascii’s table convention) is output toCOMMENTinstead ofCOMMENTSheader. Similarly,COMMENTheaders are read intocommentsmeta [#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.dataattribute from an HDU which is not loaded now raises aIndexErrorinstead of aValueError. [#6082]Deprecated
clobberkeyword; useoverwrite. [#6203]Add EXTVER column to the output of
HDUList.info(). [#6124]
astropy.modeling#
Removed deprecated
Redshiftmodel; UseRedshiftScaleFactor. [#6053]Removed deprecated
Pix2Sky_AZP.check_muandPix2Sky_SZP.check_mumethods. [#6170]Deprecated
GaussianAbsorption1Dmodel, as it can be better represented by subtractingGaussian1DfromConst1D. [#6200]Added method
sum_of_implicit_termstoModel, needed when performing a linear fit to a model that has built-in terms with no corresponding parameters (primarily the1*xterm 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 abytesobject will always fail, and instead one must compare with astrobject. [#5700]Removed the deprecated
dataproperty of Row. [#5729]Removed the deprecated functions
join,hstack,vstackandget_groupsfrom np_utils. [#5729]Added
nameparameter to methodastropy.table.Table.add_columnandnamesparameter 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
axisparameter toinsertmethod forColumnandMaskedColumnclasses. [#6092]
astropy.units#
Moved
units.cgs.emutounits.deprecated.emudue to ambiguous definition of “emu”. [#4918, #5906]jupiterMass,earthMass,jupiterRad, andearthRadno longer have their prefixed units included in the standard units. If needed, they can still be found inunits.deprecated. [#5661]solLum,``solMass``, andsolRadno 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).valuewith 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_valuemethod. (If you did this, please let us know what was lacking that made this necessary!). [#6137]
astropy.utils#
astropy.visualization#
Removed the deprecated
scale_imagefunction. [#6170]
astropy.vo#
astropy.wcs#
Removed deprecated
wcs.rotateCD. [#6170]
Bug Fixes#
astropy.convolution#
Major change in convolution behavior and keyword arguments:
astropy.convolution.convolvewas 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.Galacticframe had an incorrect ordering for the ‘u’, ‘v’, and ‘w’ cartesian coordinates. [#6330]The
astropy.coordinates.search_around_sky,astropy.coordinates.search_around_3d, andSkyCoordequivalent methods now correctly yield anastropy.coordinates.Angleas 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#
commentsmeta key (which isio.ascii’s table convention) is output toCOMMENTinstead ofCOMMENTSheader. Similarly,COMMENTheaders are read intocommentsmeta [#6097]Use more sensible fix values for invalid NAXISj header values. [#5935]
Close file on error to avoid creating a
ResourceWarningwarning 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
MappingandIdentityto be fittable. [#6018]Gaussian models now impose positive
stddevin 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
Ring2Dto be defined usingr_out. [#6192]Make
LinearLSQFitterproduce correct results with fixed model parameters and allowShiftandScaleto be fitted withLinearLSQFitterandLevMarLSQFitter. [#6174]
astropy.stats#
astropy.table#
astropy.time#
Fixed the initial condition of
TimeFITSto 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
StaticMatrixTransformerroneously 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 theStaticMatrixTransformin their own code. [#6045]Fixed
get_icrs_coordinatesto 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
heavisideufunc (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_argumentdecorator got a newpendingparameter to suppress the deprecation warnings. [#5761]
Bug Fixes#
astropy.coordinates#
Changed
SkyCoordso that frame attributes which are not valid for the currentframe(but are valid for other frames) are stored on theSkyCoordinstance instead of the underlyingframeinstance (e.g., settingrelative_humidityon an ICRSSkyCoordinstance.) [#5750]Ensured that
position_angleandseparationgive 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_boxon 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.mwill 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
ipythoninutils.consoleuntil 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
clobberargument (originally deprecated in 1.3.0) in theio.fitswrite 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
convolveandconvolve_fftarguments now support amaskkeyword, which allows them to also supportNDDataobjects as inputs. [#5554]
astropy.coordinates#
Added an
of_addressclassmethod toEarthLocationto enable fast creation ofEarthLocationobjects given an address by querying the Google maps API [#5154].A new routine,
get_body_barycentric_posvelhas 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 toCartesianRepresentationif necessary). [#5301] has now become possible. Furthermore, there are news methodsmean,sum,dot, andcrosswith obvious meaning. [#5301] multiplication with aQuantityhas 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 toCartesianRepresentationif necessary. [#5301]CartesianRepresentationcan 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.yamlmodule to support serializing core astropy objects using the YAML protocol. [#5486]
astropy.io.registry#
Added
delay_doc_updatescontextmanager to postpone the formatting of the documentation for thereadandwritemethods 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
Tabularmodel. [#5105]Added
Hermite1DandHermite2Dpolynomial models [#5242]Added the injection of EntryPoints into astropy.modeling.fitting if they inherit from Fitters class. [#5241]
Added bounding box to
Lorentz1DandMexicanHat1Dmodels. [#5393]Added
Planar2Dfunctional model. [#5456]Updated
Gaussian2Dto accept no arguments (will use default x/y_stddev and theta). [#5537]
astropy.nddata#
Added
keepand**kwargsparameter 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_rgbfunction to generate color images from three greyscale images, following the algorithm of Lupton et al. (2004). [#5535]Added
dataandintervalinputs to theImageNormalizeclass. [#5206]Added a new
simple_normconvenience function. [#5206]Added a default stretch for the
Normalizationclass. [#5206].Added a default
vmin/vmaxfor theManualIntervalclass. [#5206].The
wcsaxessubpackage 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_modelnow 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 asSphericalRepresentationandCartesianRepresentationcan now be reshaped using methods named like the numpy ones forndarray(reshape,swapaxes, etc.) [#4123, #5254, #5482]The
obsgeolocandobsgeovelattributes ofGCRSandPrecessedGeocentricframes are now stored and returned asCartesianRepresentationobjects, rather thanQuantityobjects. Similarly,EarthLocation.get_gcrs_posvelnow returns a tuple ofCartesianRepresentationobjects. [#5253]search_around_3dandsearch_around_skynow 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_valuesparameter would overwrite the class default, but now the values are prepended to the class default. [#5347]
astropy.io.fits#
The old
Headerinterface, 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
txtfileargument to theHeaderconstructor.Removed usage of
Header.updatewithHeader.update(keyword, value, comment)arguments.Removed
startColumnandendColumnarguments to theFITS_recordconstructor.The
clobberargument 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.dumpandHDUList.writeto. [#5171]Added an optional
copyparameter tofits.Headerwhich controls if a copy is made when creating anHeaderfrom anotherHeader. [#5005, #5326]
astropy.io.registry#
astropy.modeling#
Gaussian2Dnow raises an error ifthetais set at the same time ascov_matrix(previouslythetawas 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-likedataattribute when initializing aTableobject (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
ignoredcontext manager incompat.misctosuppressto be consistent with https://bugs.python.org/issue19266 . [#5003]
astropy.visualization#
astropy.vo#
The
clobberargument 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_moonandget_sunnow 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.Headerusingcopyordeepcopyfrom thecopymodule will useHeader.copyto ensure that modifying the copy will not alter the other original Header and vice-versa. [#4990, #5323]HDUList.info()no longer raisesAttributeErrorin presence ofBZERO. [#5508]Avoid exceptions with numpy 1.10 and up when using scaled integer data where
BZEROhas 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 aVerifyErroron printing. [#887,#5054]FITS_Record._convert_asciinow converts blank fields to 0 when a non-blank null column value is set. [#5134, #5394]
astropy.io.registry#
readnow 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
Timeinstances holding a singledelta_ut1_utccan be copied, flattened, etc. [#5225]
astropy.units#
Operations involving
AngleorDistance, or any otherSpecificTypeQuantityinstance, 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
AngleandDistanceinstances now raise an exception if the final unit is not equivalent to radian and meter, resp. Similarly, views asAngleandDistancecan now only be taken from quantities with appropriate units, and views asQuantitycan only be taken from logarithmic quanties such asMagnitudeif the physical unit is dimensionless. [#5070]Conversion from quantities to logarithmic units now correctly causes a logarithmic quantity such as
Magnitudeto 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
Anglehas been sped up forQuantityandAngleinput. [#4970]The use of
np.matrixinstances in the transformations has been deprecated, since this class does not allow stacks of matrices. As a result, the semi-public functionsangles.rotation_matrixandangles.angle_axisare also deprecated, in favour of the new routines with the same name incoordinates.matrix_utilities. [#5104]A new
BaseCoordinateFrame.cachedictionary 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_formatsfunction. 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_equivalenciesandadd_enabled_equivalencieshave been sped up by copying the current_UnitRegistryinstead of building it from scratch. [#5306]To build the documentation, the
build_sphinxcommand has been deprecated in favor ofbuild_docs. [#5179]The
--remote-dataoption topython setup.py testcan now take different arguments:--remote-data=noneis the same as not specifying--remote-data(skip all tests that require the internet),--remote-data=astropyskips all tests that need remote data except those that require only data from data.astropy.org, and--remote-data=anyis the same as--remote-data(run all tests that use remote data). [#5506]The pytest
recwarnfixture 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_valuesparameter 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_clipwhen 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
ImportErrorthat occurred wheneverastropy.constantswas imported beforeastropy.units. [#5030, #5121]Magnitude zero points used to define
STmag,ABmag,M_bolandm_bolare 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#
CartesianRepresentationnow 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_barycentricandget_moonfunctions. [#4890]Added astrometric frames (i.e., a frame centered on a particular point/object specified in another frame). [#4909, #4941]
Added
SkyCoord.spherical_offsets_tomethod. [#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
Pathobject. [#4606]Check that columns in
formatsspecifier 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
Pathobject. [#4606]Header allows a dictionary-like cards argument during creation. [#4663]
New function
convenience.table_to_hduto allow creating a FITS HDU object directly from an astropyTable. [#4778]New optional arguments
ignore_missingandremove_allare added toastropy.io.fits.header.remove(). [#5020]
astropy.io.registry#
Added custom
IORegistryError. [#4833]
astropy.io.votable#
File name could be passed as
Pathobject. [#4606]
astropy.modeling#
astropy.nddata#
UnknownUncertaintynew subclass ofNDUncertaintythat can be used to save uncertainties that cannot be used for error propagation. [#4272]NDArithmeticMixin:add,subtract,multiplyanddividecan 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]NDDataRefnew subclass that implementsNDDatatogether 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
bootstrapto allow bootstrapping statistics with multiple outputs. [#3601]Added
LombScargleclass to compute Lomb-Scargle periodograms [#4811]
astropy.table#
Table.show_in_notebookandTable.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
AttributeErrorwhen 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_notebookand the default notebook display (i.e.,Table._repr_html_) now use consistent table styles which can be set using theastropy.table.default_notebook_table_classconfiguration item. [#4886]Added interface to create
Tabledirectly 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
representsproperty to allow access to the definition of a named unit (e.g.,u.kpc.representsyields1000 pc). [#4806]Add bolometric absolute and apparent magnitudes,
M_bolandm_bol. [#4262]
astropy.utils#
Pathobject could be passed toget_readable_fileobj. [#4606]Implemented a generic and extensible way of merging metadata. [#4459]
Added
format_docdecorator which allows to replace and/or format the current docstring of an object. [#4242]Added a new context manager
set_localeto 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_missingandremove_allare added toHeader.remove. [#5020]
astropy.modeling#
astropy.nddata#
NDDataBasedoes not set the private uncertainty property anymore. This only affects you if you subclassNDDataBasedirectly. [#4270]NDDataBase: theuncertainty-setter is removed. A similar one is added inNDDataso this also only affects you if you subclassedNDDataBasedirectly. [#4270]NDDataBase:uncertainty-getter returnsNoneinstead of the private uncertainty and is now abstract. This getter is moved toNDDataso it only affects direct subclasses ofNDDataBase. [#4270]NDDataaccepts 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]NDDataaccepts an additional argumentcopywhich will copy every parameter before it is saved as attribute of the instance. [#4270]NDData: added anuncertainty.getterthat 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
UnknownUncertaintyexcept 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_uncertaintiesas positional keyword is deprecated and will be removed in the future. You now need to specify it as keyword-parameter. BesidesTrueandFalsealsoNoneis 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_wcsparameter is specified. [#4272]NDArithmeticMixin: The arithmetic operation was split from a general_arithmeticmethod to different specialized private methods to allow subclasses more control on how the attributes are processed without overriding_arithmetic. The_arithmeticmethod is now used to call these other methods. [#4272]NDSlicingMixin: If the attempt at slicing the mask, wcs or uncertainty fails with aTypeErrora Warning is issued instead of the TypeError. [#4271]NDUncertainty:support_correlatedattribute is deprecated in favor ofsupports_correlatedwhich is a property. Also affectsStdDevUncertainty. [#4272]NDUncertainty: added the__init__that was previously implemented inStdDevUncertaintyand takes an additionalunitparameter. [#4272]NDUncertainty: added aunitproperty without setter that returns the set unit or if not set the unit of the parent. [#4272]NDUncertainty: included aparent_nddataproperty similar to the one previously implemented in StdDevUncertainty. [#4272]NDUncertainty: added anarrayproperty 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_multiplyand 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]NDUncertaintyand 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: thearrayis 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_nddatadoes not compare if the shape of it’s array is identical to the parents data shape. [#4272]StdDevUncertainty: thearray.setterdoesn’t compare if the array has the same shape as the parents data. [#4272]StdDevUncertainty: deprecatedsupport_correlatedin favor ofsupports_correlated. [#4272, #4828]StdDevUncertainty: deprecatedpropagate_addand similar methods in favor ofpropagate. [#4272, #4828]Allow
datato be a named argument inNDDataArray. [#4626]
astropy.table#
operations.uniquenow has akeepparameter, 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]QTablenow behaves more consistently by making columns act as aQuantityeven if they are assigned a unit after the table is created. [#4497, #4884]
astropy.units#
Remove deprecated
registerargument 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
ScienceStateAliasclass 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_sunnot round-tripping due to approximations in the light deflection calculation. [#4952]Ensure that
angle_utilities.position_angleaccepts floats, as stated in the docstring. [#3800]Ensured that transformations for
GCRSframes are correct for non-geocentric observers. [#4986]Fixed a problem with the
Quantity._repr_latex_method causing errors when showing anEarthLocationin 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_imageproperty 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#
NDDatagiving masked_Quantities as data-argument will use the implicitly passed mask, unit and value. [#4270]NDDatausing a subclass implementingNDDatawithNDArithmeticMixinnow allows error propagation. [#4270]Fixed memory leak that happened when uncertainty of
NDDataArraywas set. [#4825, #4862]StdDevUncertainty: During error propagation the unit of the uncertainty is taken into account. [#4272]NDArithmeticMixin:divideandmultiplyyield 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_docdecorator 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.
relaxis eitherFalseorNone. astropy.wcs.to_header appends “-SIP” to CTYPE when SIP coefficients are written out, i.e.relax=True. [#4814]Made
wcs.bounds_checkcallwcsprm_python2c, which means it works even ifwcs.sethas 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.wcsmodule now exposesWCSHDO_P*constants that can be used to allow more control over output precision when using therelaxkeyword 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_recobject (the.datafor table HDUs). [#520]Fixed a memory / reference leak in
FITS_recthat 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.Pathobjects (available in Python 3.4 and later) for specifying the file name in registry read / write functions. [#4405]
astropy.utils#
console.human_file_sizenow 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
expm1function. [#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_configandset_temp_cachewhich 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_cachemay 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_constellationfunction andSkyCoord.get_constellationconvenience method to determine the constellation that a coordinate is in. [#3758]Added
PrecessedGeocentricframe, which is based on GCRS, but precessed to a specific requested mean equinox. [#3758]Added
Supergalacticframe to support de Vaucouleurs supergalactic coordinates. [#3892]SphericalRepresentationnow has a._unit_representationclass 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=Falsewhen reading if the fileformatis 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_startsorcol_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.validatorinterface for setting a validation method on individual model parameters. See theParameterdocumentation 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
Sersic1DandSersic2Dmodel classes. [#3889]Added the Voigt profile to existing models. [#3901]
Added
bounding_boxproperty andrender_modelfunction [#3909]
astropy.nddata#
astropy.stats#
Added
sigma_lowerandsigma_upperkeywords tosigma_clipto allow for non-symmetric clipping. [#3595]Added
cenfunc,stdfunc, andaxiskeywords tosigma_clipped_stats. [#3792]sigma_clipautomatically masks invalid input values (NaNs, Infs) before performing the clipping [#4051]Added the
histogramroutine, which is similar tonp.histogrambut includes several additional options for automatic determination of optimal histogram bins. Associated helper routines includebayesian_blocks,friedman_bin_width,scott_bin_width, andknuth_bin_width. This functionality was ported from the astroML library. [#3756]Added the
bayesian_blocksroutine, which implements a dynamic algorithm for locating change-points in various time series. [#3756]A new function
poisson_conf_interval()was added to allow easy calculation of several standard formulae for the error bars on the mean of a Poisson variable estimated from a single sample.
astropy.table#
add_column()andadd_columns()now haverename_duplicateoption to rename new column(s) rather than raise exception when its name already exists. [#3592]Added
Table.to_pandasandTable.from_pandasfor converting to/from pandas dataframes. [#3504]Initializing a
TablewithColumnobjects no longer requires that the columnnameattribute be defined. [#3781]Added an
infoproperty toTableobjects which provides configurable summary information about the table and its columns. [#3731]Added an
infoproperty to column classes (Columnor mixins). This serves a dual function of providing configurable summary information about the column, and acting as a manager of column attributes such as name, format, or description. [#3731]Updated table and column representation to use the
dtype_info_namefunction for the dtype value. Removed the default “masked=False” from the table representation. [#3868, #3869]Updated row representation to be consistent with the corresponding table representation for that row. Added HTML representation so a row displays nicely in IPython notebook.
Added a new table indexing engine allowing for the creation of indices on one or more columns of a table using
add_index. These indices enable new functionality such as searching for rows by value usinglocandiloc, as well as increased performance for certain operations. [#3915, #4202]Added capability to include a structured array or recarray in a table as a mixin column. This allows for an approximation of nested tables. [#3925]
Added
keep_byteorderoption toTable.as_array(). See the “API Changes” section below. [#4080]Added a new method
Table.replace_column()to replace an existing column with a new data column. [#4090]Added a
tableclassoption toTable.pformat()to allow specifying a list of CSS classes added to the HTML table. [#4131]Added a new
Table.show_in_notebookmethod that shows an interactive view of a Table (similar toTable.show_in_browser(jsviewer=True)) in an Python/Jupyter notebook. [#4197]Added column alignment formatting for better pprint viewing experience. [#3644]
astropy.tests#
Added new test config options,
config_dirandcache_dir(these can be edited insetup.cfgor as extra command-line options to py.test) for setting the locations to use for the Astropy config files and download caches (see also the relatedset_temp_config/cachefeatures added inastropy.config). [#3975]
astropy.time#
Add support for FITS standard time strings. [#3547]
Allow the
formatattribute to be updated in place to change the default representation of aTimeobject. [#3673]Add support for shape manipulation (reshape, ravel, etc.). [#3224]
Add argmin, argmax, argsort, min, max, ptp, sort methods. [#3681]
Add
Time.to_datetimemethod for convertingTimeobjects to timezone-aware datetimes. [#4119, #4124]
astropy.units#
Added furlong to imperial units. [#3529]
Added mil to imperial units. [#3716]
Added stone to imperial units. [#4192]
Added Earth Mass (
M_earth) and Jupiter mass (M_jup) to units [#3907]Added support for functional units, in particular the logarithmic ones
Magnitude,Decibel, andDex. [#1894]Quantities now work with the unit support in matplotlib. See Plotting quantities. [#3981]
Clarified imperial mass measurements and added pound force (lbf), kilopound (kip), and pound per square inch (psi). [#3409]
astropy.utils#
Added new
OrderedDescriptorandOrderedDescriptorContainerutility classes that make it easier to implement classes with declarative APIs, wherein class-level attributes have an inherit “ordering” to them that is specified by the order in which those attributes are defined in the class declaration (by defining them using special descriptors that haveOrderedDescriptoras a base class). See the API documentation for these classes for more details. Coordinate frames and models now use this interface. [#3679]The
get_pkg_data_*functions now take an optionalpackageargument which allows specifying any package to read package data filenames or content out of, as opposed to only being able to use data from the package that the function is called from. [#4079]Added function
dtype_info_nameto thedata_infomodule to provide the name of adtypefor human-readable informational purposes. [#3868]Added
classpropertydecorator–this is topropertyasclassmethodis to normal instance methods. [#3982]iers.opennow handles network URLs, as well as local paths. [#3850]The
astropy.utils.wrapsdecorator now takes an optionalexclude_argsargument not shared by the standard librarywrapsdecorator (as it is unique to the Astropy version’s ability of copying the wrapped function’s argument signature).exclude_argsallows certain arguments on the wrapped function to be excluded from the signature of the wrapper function. This is particularly useful when wrapping an instance method as a function (to exclude theselfargument). [#4017]get_readable_fileobjcan automatically decompress LZMA (‘.xz’) files using thelzmamodule of Python 3.3+ or, when available, thebackports.lzmapackage on earlier versions. [#3667]The
resolve_nameutility now accepts any number of additional positional arguments that are automatically dotted together with the firstnameargument. [#4083]Added
is_url_in_cachefor resolving paths to cached files via URLS and checking if files exist. [#4095]Added a
stepargument to theProgressBar.mapmethod to give users control over the update frequency of the progress bar. [#4191]
astropy.visualization#
Added a function / context manager
quantity_supportfor enabling seamless plotting ofQuantityinstances in matplotlib. [#3981]Added the
histfunction, which is similar toplt.histbut includes several additional options for automatic determination of optimal histogram bins. This functionality was ported from the astroML library. [#3756]
astropy.wcs#
The included version of wcslib has been upgraded to 5.10. [#3992, #4239]
The minimum required version of wcslib in the 4.x series remains 4.24.
The minimum required version of wcslib in the 5.x series is 5.8. Building astropy against a wcslib 5.x prior to 5.8 will raise an
ImportErrorwhenastropy.wcsis imported.The wcslib changes relevant to astropy are:
The FITS headers returned by
astropy.wcs.WCS.to_headerandastropy.wcs.WCS.to_header_stringnow include values with more precision. This will result in numerical differences in your results if you convertastropy.wcs.WCSobjects to FITS headers and use the results.astropy.wcs.WCSnow recognises theTPV,TPD,TPU,DSS,TNXandZPXpolynomial distortions.Added relaxation flags to allow
PC0i_0ja,PV0j_0ma, andPS0j_0ma(i.e. with leading zeroes on the index).Tidied up error reporting, particularly relating to translating status returns from lower-level functions.
Changed output formatting of floating point values in
to_header.Enhanced text representation of
WCSobjects. [#3604]The
astropy.tests.helpermodule is now part of the public API (and has a documentation page). This module was in previous releases of astropy, but was not considered part of the public API until now. [#3890]There is a new function
astropy.online_helpto search the astropy documentation and display the result in a web browser. [#3642]
API changes#
astropy.cosmology#
FLRW._tfuncandFLRW._xfuncare marked as deprecated. Users should use the new public interfacesFLRW.lookback_time_integrandandFLRW.abs_distance_integrandinstead. [#3767]
astropy.io.ascii#
The default header line processing was made to be consistent with data line processing in that it now ignores blank lines that may have whitespace characters. Any code that explicitly specifies a
header_startvalue for parsing a file with blank lines in the header containing whitespace will need to be updated. [#2654]
astropy.io.fits#
The
uintargument tofits.openis now True by default; that is, arrays using the FITS unsigned integer convention will be detected, and read as unsigned integers by default. A new config option forio.fits,enable_uint, can be changed to False to revert to the original behavior of ignoring theuintconvention unless it is explicitly requested withuint=True. [#3916]The
ImageHDU.NumCodeandImageHDU.ImgCodeattributes (and same for other classes derived from_ImageBaseHDU) are deprecated. Instead, theastropy.io.fitsmodule-level constantsBITPIX2DTYPEandDTYPE2BITPIXcan be used. [#3916]
astropy.modeling#
Note: Comparisons of model parameters with array-like values now yields a Numpy boolean array as one would get with normal Numpy array comparison. Previously this returned a scalar True or False, with True only if the comparison was true for all elements compared, which could lead to confusing circumstances. [#3912]
Using
model.inverse = Noneto reset a model’s inverse to its default is deprecated. In the future this syntax will explicitly make a model not have an inverse (even if it has a default). Instead, usedel model.inverseto reset a model’s inverse to its default (if it has a default, otherwise this just deletes any custom inverse that has been assigned to the model and is still equivalent to settingmodel.inverse = None). [#4236]Adds a
model.has_user_inverseattribute which indicates whether or not a user has assigned a custom inverse tomodel.inverse. This is just for informational purposes, for example, for software that introspects model objects. [#4236]Renamed the parameters of
RotateNative2CelestialandRotateCelestial2Nativefromphi,theta,psitolon,latandlon_pole. [#3578]Deprecated the
Pix2Sky_AZP.check_muandSky2Pix_AZP.check_mumethods (these were obscure “accidentally public” methods that were probably not used by anyone). [#3910]Added a phase parameter to the Sine1D model. [#3807]
astropy.stats#
astropy.table#
Table.as_array()always returns a structured array with each column in the system’s native byte order. The optionalkeep_byteorder=Trueoption will keep each column’s data in its original byteorder. [#4080]Table.simple_table()now creates tables with int64 and float64 types instead of int32 and float64. [#4114]An empty table can now be initialized without a
namesargument as long as a validdtypeargument (with names embedded) is supplied. [#3977]
astropy.time#
The
astropy_timeattribute and time format has been removed from the public interface. Existing code that instantiates a new time object usingformat='astropy_time'can simply omit theformatspecification. [#3857]
astropy.units#
Single-item
Quantityinstances with recorddtypewill now have theirisscalarproperty returnTrue, consistent with behaviour for numpy arrays, wherenp.voidrecords are considered scalar. [#3899]Three changes relating to the FITS unit format [#3993]:
The FITS unit format will no longer parse an arbitrary number as a scale value. It must be a power of 10 of the form
10^^k,10^k,10+k,10-kand10(k). [#3993]Scales that are powers of 10 can be written out. Previously, any non-1.0 scale was rejected.
The
*character is accepted as a separator between the scale and the units.Unit formatter classes now require the
parseandto_stringmethods are now required to be classmethods (and the formatter classes themselves are assumed to be singletons that are not instantiated). As unit formatters are mostly an internal implementation detail this is not likely to affect any users. [#4001]CGS E&M units are now defined separately from SI E&M units, and have distinct physical types. [#4255, #4355]
astropy.utils#
All of the
get_pkg_data_*functions take an optionalpackageargument as their second positional argument. So any code that previously passed other arguments to these functions as positional arguments might break. Use keyword argument passing instead to mitigate this. [#4079]astropy.utils.iersnow uses aQTableinternally, which means that the numerical columns are stored asQuantity, with full support for units. Furthermore, theut1_utcmethod now returns aQuantityinstead of a float or an array (as didpm_xyalready). [#3223]astropy.utils.iersnow throws anIERSRangeError, a subclass ofIndexError, rather than a rawIndexError. This allows more fine-grained catching of situations where aTimeis beyond the range of the loaded IERS tables. [#4302]
astropy.wcs#
When compiled with wcslib 5.9 or later, the FITS headers returned by
astropy.wcs.WCS.to_headerandastropy.wcs.WCS.to_header_stringnow include values with more precision. This will result in numerical differences in your results if you convertastropy.wcs.WCSobjects to FITS headers and use the results.If NAXIS1 or NAXIS2 is not passed with the header object to WCS.calc_footprint, a ValueError is raised. [#3557]
Bug fixes#
astropy.constants#
The constants
Ryanduare now properly used inside the corresponding units. The latter have changed slightly as a result. [#4229]
astropy.coordinates#
Internally,
coordinatesnow consistently uses the appropriate time scales for using ERFA functions. [#4302]
astropy.io.ascii#
Fix a segfault in the fast C parser when one of the column headers is empty [#3545].
Fix several bugs that prevented the fast readers from being used when guessing the file format. Also improved the read trace information to better understand format guessing. [#4115]
Fix an underlying problem that resulted in an uncaught TypeError exception when reading a CDS-format file with guessing enabled. [#4120]
astropy.modeling#
astropy.units#
The units
Rydanduare no longer hard-coded numbers, but depend on the appropriate values in theconstantsmodule. As a result, these units now imply slightly different conversions. [#4229]
Other Changes and Additions#
The
./setup.py testcommand is now implemented in theastropy.testsmodule again (previously its implementation had been moved into astropy-helpers). However, that made it difficult to synchronize changes to the Astropy test runner with changes to the./setup.py testUI. astropy-helpers v1.1 and above will detect this implementation of thetestcommand, when present, and use it instead of the old version that was included in astropy-helpers (most users will not notice any difference as a result of this change). [#4020]The repr for
Tableno longer displaysmasked=Falsesince tables are not masked by default anyway. [#3869]The version of
PLYthat ships with astropy has been updated to 3.6.WCSAxes is now required for doc builds. [#4074]
The migration guide from pre-v0.4 coordinates has been removed to avoid cluttering the
astropy.coordinatesdocumentation with increasingly irrelevant material. To see the migration guide, we recommend you simply look to the archived documentation for previous versions, e.g. https://docs.astropy.org/en/v1.0/coordinates/index.html#migrating-from-pre-v0-4-coordinates [#4203]In
astropy.coordinates, the transformations between GCRS, CIRS, and ITRS have been adjusted to more logically reflect the order in which they actually apply. This should not affect most coordinate transformations, but may affect code that is especially sensitive to machine precision effects that change when the order in which transformations occur is changed. [#4255]Astropy v1.1.0 will be the last release series to officially support Python 2.6. A deprecation warning will now be issued when using Astropy in Python 2.6 (this warning can be disabled through the usual Python warning filtering mechanisms). [#3779]
Version 1.0.13 (2017-05-29)#
Bug Fixes#
astropy.io.fits#
Version 1.0.12 (2017-03-05)#
Bug Fixes#
astropy.convolution#
Fixed bug in
discretize_integrate_2Din which x and y coordinates where swapped. [#5634]
astropy.coordinates#
Fixed a bug where
get_transformcould sometimes produce confusing errors because of a typo in the input validation. [#5645]
astropy.io.fits#
Guard against extremely unlikely problems in compressed images, which could lead to memory unmapping errors. [#5775]
astropy.io.votable#
astropy.utils#
Fixed ImportError with NumPy < 1.7 and Python 3.x in
_register_patched_dtype_reduce. [#5848]
Version 1.0.11 (2016-12-22)#
Bug Fixes#
astropy.coordinates#
Initialising a SkyCoord from a list containing a single SkyCoord no longer removes the distance from the coordinate. [#5270]
Fix errors in the implementation of the conversion to and from FK4 frames without e-terms, which will have affected coordinates not on the unit sphere (i.e., with distances). [#4293]
Fix bug where with cds units enabled it was no longer possible to initialize an
Angle. [#5483]Ensure that
search_around_skyandsearch_around_3dreturn integer type index arrays for empty (non) matches. [#4877, #5083]Return an empty set of matches for
search_around_skyandsearch_around_3dwhen one or both of the input coordinate arrays is empty. [#4875, #5083]
astropy.io.ascii#
Fix a bug with empty value at end of tab-delimited table on Windows. [#5370]
Fix reading of big ASCII tables (more than 2Gb) with the fast reader. [#5319]
Fix segfault with FastCsv and row with too many columns. [#5534]
Fix problem reading an AASTex format table that does not have
\\at the end of the last table row. [#5427]
astropy.io.fits#
Removed raising of AssertionError that could occur after closing or deleting compressed image data. [#4690, #4694, #4948]
Fixed bug that caused an ignored exception to be displayed under certain conditions when terminating a script after using fits.getdata(). [#4977]
Fixed usage of inplace operations that were raising an exception with recent versions of Numpy due to implicit casting. [#5250]
astropy.io.votable#
Fixed bug of
Resource.__repr__()having undefined attributes and variables. [#5382]
astropy.modeling#
CompoundModel now correctly inherits _n_models, allowing the use of model sets [#5358]
astropy.units#
astropy.utils#
Fixed AttributeError when calling
utils.misc.signal_number_to_namewith Python3 [#5430].
astropy.wcs#
Update the
_naxis{x}attributes when callingWCS.slice. [#5411]
Other Changes and Additions#
The bundled ERFA was updated to version 1.3.0. This includes the leap second planned for 2016 Dec 31. [#5418]
Version 1.0.10 (2016-06-09)#
Bug Fixes#
astropy.coordinates#
astropy.io.ascii#
Fix problem reading a zero-length ECSV table with a bool type column. [#5010]
astropy.io.fits#
Fix convenience functions (
getdata,getheader,append,update) to close files. [#4786]
astropy.io.votable#
The astropy.io.votable.validator.html module is updated to handle division by zero when generating validation report. [#4699]
astropy.table#
astropy.tests#
Fix coverage reporting in Python 3. [#4822]
astropy.units#
Duplicates between long and short names are now removed in the
namesandaliasesproperties of units. [#5036]
astropy.utils#
astropy.vo#
Cache option now properly caches both downloaded JSON database and XML VO tables. [#4699]
The astropy.vo.validator.conf.conesearch_urls listing is updated to reflect external changes to some VizieR Cone Search services. [#4699]
VOSDatabase decodes byte-string to UTF-8 instead of ASCII to avoid UnicodeDecodeError for some rare cases. Fixed a Cone Search test that is failing as a side-effect of #4699. [#4757]
Other Changes and Additions#
Updated
astropy.teststest runner code to work with Coverage v4.0 when generating test coverage reports. [#4176]
Version 1.0.9 (2016-03-10)#
New Features#
astropy.nddata#
Bug Fixes#
astropy.convolution#
Correct a bug in which
psf_padandfft_padwould be ignored [#4366]
astropy.io.ascii#
Fixed addition of new line characters after last row of data in ascii.latex.AASTex. [#4561]
Fixed reading of Latex tables where the
\tabulartag is in the first line. [#4595]Fix use of plain format strings with the fast writer. [#4517]
Fix bug writing space-delimited file when table has empty fields. [#4417]
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_recobject (the.datafor table HDUs). [#520]Fixed a memory / reference leak in
FITS_recthat occurred in a wide range of cases, especially after writing FITS tables to a file, but in other cases as well. [#4539]
astropy.modeling#
astropy.stats#
astropy.utils#
The
zest.releaserhooks included in Astropy are now injected locally to Astropy, rather than being global. [#4650]
astropy.visualization#
Version 1.0.8 (2016-01-08)#
Bug Fixes#
astropy.io.fits#
Fixed an bug where updates to string columns in FITS tables were not saved on Python 3. [#4452]
astropy.units#
In-place peak-to-peak calculations now work on
Quantity. [#4442]
astropy.utils#
Version 1.0.7 (2015-12-04)#
Bug Fixes#
astropy.coordinates#
Pickling of
EarthLocationinstances now also works on Python 2. [#4304]
astropy.io.ascii#
Fix fast writer so bytestring column output is not prefixed by ‘b’ in Python 3. [#4350]
astropy.io.fits#
Fixed a regression that could cause writes of large FITS files to be truncated. [#4307]
Astropy v1.0.6 included a fix (#4228) for an obscure case where the TDIM of a table column is smaller than the repeat count of its data format. This updates that fix in such a way that it works with Numpy 1.10 as well. [#4266]
astropy.table#
Fix a bug when pickling a Table with mixin columns (e.g. Time). [#4098]
astropy.time#
Fix incorrect
valueattribute for epoch formats like “unix” whenscaleis different from the classepoch_scale. [#4312]
astropy.utils#
Other Changes and Additions#
Updated bundled astropy-helpers to v1.0.6. [#4372]
Version 1.0.6 (2015-10-22)#
Bug Fixes#
astropy.analytic_functions#
Fixed blackbody analytic functions to properly support arrays of temperatures. [#4251]
astropy.coordinates#
Fixed errors in transformations for objects within a few AU of the Earth. Included substantive changes to transformation machinery that may change distances at levels ~machine precision for other objects. [#4254]
astropy.io.fits#
fitsdiffand related functions now do a better job reporting differences between values that are different types but have the same representation (ex: the string ‘0’ versus the number 0). [#4122]Miscellaneous fixes for supporting Numpy 1.10. [#4228]
Fixed an issue where writing a column of unicode strings to a FITS table resulted in a quadrupling of size of the column (i.e. the format of the FITS column was 4 characters for every one in the original strings). [#4228]
Added support for an obscure case (but nonetheless allowed by the FITS standard) where a column has some TDIMn keyword, but a repeat count in the TFORMn column greater than the number of elements implied by the TDIMn. For example TFORMn = 100I, but TDIMn = ‘(5,5)’. In this case the TDIMn implies 5x5 arrays in the column, but the TFORMn implies a 100 element 1-D array in the column. In this case the TDIM takes precedence, and the remaining bytes in the column are ignored. [#4228]
astropy.io.votable#
Fixed crash with Python compiler optimization level = 2. [#4231]
astropy.vo#
Fixed
check_conesearch_siteswithparallel=Trueon Python >= 3.3 and on Windows (it was broken in both those cases for separate reasons). [#2970]
Other Changes and Additions#
All tests now pass against Numpy v1.10.x. This implies nominal support for Numpy 1.10.x moving forward (but there may still be unknown issues). For example, there is already a known performance issue with tables containing large multi-dimensional columns–for example, tables that contain entire images in one or more of their columns. This is a known upstream issue in Numpy. [#4259]
Version 1.0.5 (2015-10-05)#
Bug Fixes#
astropy.constants#
Rename units -> unit and error -> uncertainty in the
reprandstrof constants to match attribute names. [#4147]
astropy.coordinates#
astropy.io.fits#
Fix bug when extending one header (without comments) with another (with comments). [#3967]
Somewhat improved resource usage for FITS data–previously a new
mmapwas opened for each HDU of a FITS file accessed through anHDUList. Eachmmapused up a single file descriptor, causing problems with system resource limits for some users. Now only a singlemmapis opened, and shared for the data of all HDUs. Note: The problem still persists with using the “convenience” functions. For example usingfits.getdatawill create onemmapper HDU read this way (as opposed to opening the file withfits.openand accessing the HDUs through theHDUListobject). [#4097]Fix bug where reading a file without a newline failed with an unrelated / unhelpful exception. [#4160]
astropy.modeling#
Cleaned up
reprof models that have no parameters. [#4076]
astropy.nddata#
astropy.table#
Fix an issue with setting fill value when column dtype is changed. [#4088]
Fix bug when unpickling a bare Column where the _parent_table attribute was not set. This impacted the Column representation. [#4099]
Fix issue with the web browser opening with an empty page, and ensure that the url is correctly formatted for Windows. [#4132]
Fix NameError in table stack exception message. [#4213]
astropy.utils#
resolve_nameno longer causessys.modulesto be cluttered with additional copies of modules under a package imported likeresolve_name('numpy'). [#4084]consolewas updated to support IPython 4.x and Jupyter 1.x. This should suppress a ShimWarning that was appearing at import of astropy with IPython 4.0 or later. [#4078]Temporary downloaded files created by
get_readable_fileobjwhen passed a URL are now deleted immediately after the file is closed. [#4198]
astropy.visualization#
astropy.vo#
Other Changes and Additions#
Version 1.0.4 (2015-08-11)#
New Features#
astropy.convolution#
Modified Cython functions to release the GIL. This enables convolution to be parallelized effectively and gives large speedups when used with multithreaded task schedulers such as Dask. [#3949]
API Changes#
astropy.coordinates#
astropy.visualization#
The
astropy_mpl_styleno longer setsinteractivetoTrue, but instead leaves it at the user preference. This makes using the style compatible with building docs with Sphinx, and other non-interactive contexts. [#4030]
Bug Fixes#
astropy.coordinates#
Fix bug where coordinate representation setting gets reset to default value when coordinate array is indexed or sliced. [#3824]
Fixed confusing warning message shown when using dates outside current IERS data. [#3844]
get_sunnow yields a scalar when the input time is a scalar (this was a regression in v1.0.3 from v1.0.2) [#3998, #4039]Fixed bug where some scalar coordinates were incorrectly being changed to length-1 array coordinates after transforming through certain frames. [#3920, #4039]
Fixed bug causing the
separationmethods ofSkyCoordand frame classes to fail due to infinite recursion [#4033, #4039]Made it so that passing in a list of
SkyCoordobjects that are in UnitSphericalRepresentation to theSkyCoordconstructor appropriately yields a new object in UnitSphericalRepresentation [#3938, #4039]
astropy.cosmology#
Fixed wCDM to not ignore the Ob0 parameter on initialization. [#3934]
astropy.io.fits#
Fixed crash when updating data in a random groups HDU opened in update mode. [#3730]
Fixed incorrect checksum / datasum being written when re-writing a scaled HDU (i.e. non-trivial BSCALE and/or BZERO) with
do_not_scale_image_data=False. [#3883]Fixed stray deprecation warning in
BinTableHDU.copy(). [#3798]Better handling of the
BLANKkeyword when auto-scaling scaled image data. TheBLANKkeyword is now removed from the header after auto-scaling is applied, and it is restored properly (with floating point NaNs replaced by the filler value) when updating a file opened with thescale_back=Trueargument. Invalid usage of theBLANKkeyword is also better warned about during validation. [#3865]Reading memmaped scaled images won’t fail when
do_not_scale_image_data=True(that is, since we’re just reading the raw / physical data there is no reason mmap can’t be used). [#3766]Fixed a reference cycle that could sometimes cause FITS table-related objects (
BinTableHDU,ColDefs, etc.) to hang around in memory longer than expected. [#4012]
astropy.modeling#
astropy.time#
Fixed iteration of scalar
Timeobjects so thatiter()correctly raises aTypeErroron them (while still allowingTimearrays to be iterated). [#4048]
astropy.units#
Added frequency-equivalency check when declaring doppler equivalencies [#3728]
Define
floor_divide(//) forQuantityto be consistentdivmod, such that it only works where the quotient is dimensionless. This guarantees that(q1 // q2) * q2 + (q1 % q2) == q1. [#3817]Fixed the documentation of supported units to correctly report support for SI prefixes. Previously the table of supported units incorrectly showed several derived unit as not supporting prefixes, when in fact they do. [#3835]
Fix a crash when calling
astropy.units.cds.enable(). This will now “set” rather than “add” units to the active set to avoid the namespace clash with the default units. [#3873]Ensure in-place operations on
float32quantities work. [#4007]
astropy.utils#
The
deprecateddecorator did not correctly wrap classes that have a custom metaclass–the metaclass could be dropped from the deprecated version of the class. [#3997]The
wrapsdecorator would copy the wrapped function’s name to the wrapper function even when'__name__'is excluded from theassignedargument. [#4016]
Misc#
fitscheckno longer causes scaled image data to be rescaled when adding checksums to existing files. [#3884]Fixed an issue where running
import astropyfrom within the source tree did not automatically build the extension modules if the source is from a source distribution (as opposed to a git repository). [#3932]Fixed multiple instances of a bug that prevented Astropy from being used when compiled with the
python -OOflag, due to it causing all docstrings to be stripped out. [#3923]Removed source code template files that were being installed accidentally alongside installed Python modules. [#4014]
Fixed a bug in the exception logging that caused a crash in the exception handler itself on Python 3 when exceptions do not include a message. [#4056]
Version 1.0.3 (2015-06-05)#
New Features#
astropy.table#
Greatly improved the speed of printing a large table to the screen when only a few rows are being displayed. [#3796]
astropy.time#
Add support for the 2015-Jun-30 leap second. [#3794]
API Changes#
astropy.io.ascii#
Note that HTML formatted tables will not always be found with guess mode unless it passes certain heuristics that strongly suggest the presence of HTML in the input. Code that expects to read tables from HTML should specify
format='html'explicitly. See bug fixes below for more details. [#3693]
Bug Fixes#
astropy.convolution#
Fix issue with repeated normalizations of
Kernels. [#3747]
astropy.coordinates#
astropy.io.ascii#
Remove HTML from the list of automatically-guessed formats when reading if the file does not appear to be HTML. This was necessary to avoid a commonly-encountered segmentation fault occurring in the libxml parser on MacOSX. [#3693]
astropy.io.fits#
Fixes to support the upcoming Numpy 1.10. [#3419]
astropy.modeling#
astropy.testing#
The Astropy py.test plugins that disable unintentional internet access in tests were also blocking use of local UNIX sockets in tests, which prevented testing some multiprocessing code–fixed. [#3713]
astropy.units#
Supported full SI prefixes for the barn unit (“picobarn”, “femtobarn”, etc.) [#3753]
Fix loss of precision when multiplying non-whole-numbered powers of units together. For example, before this change,
(u.m ** 1.5) ** Fraction(4, 5)resulted in an inaccurate floating-point power of1.2000000000000002. After this change, the exact rational number ofFraction(6, 5)is maintained. [#3790]Fixed printing of object ndarrays containing multiple Quantity objects with differing / incompatible units. Note: Unit conversion errors now cause a
UnitConversionErrorexception to be raised. However, this is a subclass of theUnitsErrorexception used previously, so existing code that catchesUnitsErrorshould still work. [#3778]
Other Changes and Additions#
Version 0.4.6 (2015-05-29)#
Bug Fixes#
astropy.time#
Fixed ERFA code to handle the 2015-Jun-30 leap second. [#3795]
Version 1.0.2 (2015-04-16)#
New Features#
astropy.modeling#
Added support for polynomials with degree 0 or degree greater than 15. [#3574, 3589]
Bug Fixes#
astropy.config#
The pre-astropy-0.4 configuration API has been fixed. It was inadvertently broken in 1.0.1. [#3627]
astropy.io.fits#
Fixed a severe memory leak that occurred when reading tile compressed images. [#3680]
Fixed bug where column data could be unintentionally byte-swapped when copying data from an existing FITS file to a new FITS table with a TDIMn keyword for that column. [#3561]
The
ColDefs.change_attrib,ColDefs.change_name, andColDefs.change_unitmethods now work as advertised. It is also possible (and preferable) to update attributes directly onColumnobjects (for example settingcolumn.name), and the change will be accurately reflected in any associated table data and its FITS header. [#3283, #1539, #2618]Fixes an issue with the
FITS_recinterface to FITS table data, where aFITS_reccreated by copying an existing FITS table but adding new rows could not be sliced or masked correctly. [#3641]Fixed handling of BINTABLE with TDIMn of size 1. [#3580]
astropy.io.votable#
Loading a
TABLEelement without anyDATAnow correctly creates a 0-row array. [#3636]
astropy.modeling#
Added workaround to support inverses on compound models when one of the sub-models is itself a compound model with a manually-assigned custom inverse. [#3542]
Fixed instantiation of polynomial models with constraints for parameters (constraints could still be assigned after instantiation, but not during). [#3606]
Fixed fitting of 2D polynomial models with the
LeVMarLSQFitter. [#3606]
astropy.table#
Ensure
QTablecan be pickled [#3590]Some corner cases when instantiating an
astropy.table.Tablewith a Numpy array are handled [#3637]. Notably:a zero-length array is the same as passing
Nonea scalar raises a
ValueErrora one-dimensional array is treated as a single row of a table.
Ensure a
Columnwithout units is treated as anarray, not as an dimensionlessQuantity. [#3648]
astropy.units#
Ensure equivalencies that do more than just scale a
Quantityare properly handled also inufuncevaluations. [#2496, #3586]The LaTeX representation of the Angstrom unit has changed from
\overset{\circ}{A}to\mathring{A}, which should have better support across regular LaTeX, MathJax and matplotlib (as of version 1.5) [#3617]
astropy.vo#
Using HTTPS/SSL for communication between SAMP hubs now works correctly on all supported versions of Python [#3613]
astropy.wcs#
When no
relaxargument is passed toWCS.to_header()and the result omits non-standard WCS keywords, a warning is emitted. [#3652]
Other Changes and Additions#
astropy.vo#
Version 1.0.1 (2015-03-06)#
Bug Fixes#
astropy.constants#
astropy.io.ascii#
Fix a segfault in the fast C parser when one of the column headers is empty [#3545].
Fixed support for reading inf and nan values with the fast reader in Windows. Also fixed in the case of using
use_fast_converter=Truewith the fast reader. [#3525]Fixed use of mmap in the fast reader on Windows. [#3525]
Fixed issue where commented header would treat comments defining the table (i.e. column headers) as purely information comments, leading to problems when trying to round-trip the table. [#3562]
astropy.modeling#
Fixed propagation of parameter constraints (‘fixed’, ‘bounds’, ‘tied’) between compound models and their components. There is may still be some difficulty defining ‘tied’ constraints properly for use with compound models, however. [#3481]
astropy.nddata#
Restore several properties to the compatibility class
NDDataArraythat were inadvertently omitted [#3466].
astropy.time#
Time objects now always evaluate to
True, except when empty. [#3530]
Miscellaneous#
Other Changes and Additions#
Updated bundled astropy-helpers version to v1.0.1 to address installation issues with some packages that depend on Astropy. [#3541]
Version 1.0 (2015-02-18)#
General#
Astropy now requires Numpy 1.6.0 or later.
New Features#
astropy.analytic_functions#
The
astropy.analytic_functionswas added to contain analytic functions useful for astronomy [#3077].
astropy.coordinates#
astropy.coordinatesnow has a full stack of frames allowing transformations from ICRS or other celestial systems down to Alt/Az coordinates. [#3217]astropy.coordinatesnow has aget_sunfunction that gives the coordinates of the Sun at a specified time. [#3217]SkyCoordnow hasto_pixelandfrom_pixelmethods that convert between celestial coordinates asSkyCoordobjects and pixel coordinates given anastropy.wcs.WCSobject. [#3002]SkyCoordnow hassearch_around_skyandsearch_around_3dconvenience methods that allow searching for all coordinates within a certain distance of anotherSkyCoord. [#2953]SkyCoordcan now accept a frame instance for theframe=keyword argument. [#3063]SkyCoordnow has aguess_from_tablemethod that can be used to quickly createSkyCoordobjects from anastropy.table.Tableobject. [#2951]astropy.coordinatesnow has aGalactocentricframe, a coordinate frame centered on a (user specified) center of the Milky Way. [#2761, #3286]SkyCoordnow accepts more formats of the coordinate string when the representation hasraanddecattributes. [#2920]SkyCoordcan now accept lists ofSkyCoordobjects, frame objects, or representation objects and will combine them into a single object. [#3285]Frames and
SkyCoordinstances now have a methodis_equivalent_framethat can be used to check that two frames are equivalent (ignoring the data). [#3330]The
__repr__of coordinate objects now shows scalar coordinates in the same format as vector coordinates. [#3350, 3448]
astropy.cosmology#
Added
lookback_distance, which isc * lookback_time. [#3145]Add baryonic matter density and dark matter only density parameters to cosmology objects [#2757].
Add a
clonemethod to cosmology objects to allow copies of cosmological objects to be created with the specified variables modified [#2592].Increase default numerical precision of
z_at_valuefollowing the accurate by default, fast by explicit request model [#3074].Cosmology functions that take a single (redshift) input now broadcast like numpy ufuncs. So, passing an arbitrarily shaped array of inputs will produce an output of the same shape. [#3178, #3194]
astropy.io.ascii#
Simplify the way new Reader classes are defined, allowing custom behavior entirely by overriding inherited class attributes instead of setting instance attributes in the Reader
__init__method. [#2812]There is now a faster C/Cython engine available for reading and writing simple ASCII formats like CSV. Both are enabled by default, and fast reading will fall back on an ordinary reader in case of a parsing failure. Their behavior can be altered with the parameter
fast_readerinreadandfast_writerinwrite. [#2716]Make Latex/AASTex tables use unit attribute of Column for output. [#3064]
Store comment lines encountered during reading in metadata of the output table via
meta['comment_lines']. [#3222]Write comment lines in Table metadata during output for all basic formats, IPAC, and fast writers. This functionality can be disabled with
comment=False. [#3255]Add reader / writer for the Enhanced CSV format which stores table and column meta data, in particular data type and unit. [#2319]
astropy.io.fits#
The
fitsdiffscript ignores some things by default when comparing fits files (e.g. empty header lines). This adds a--exactoption where nothing is ignored. [#2782, #3110]The
fitsheaderscript now takes a--keywordoption to extract a specific keyword from the header of a FITS file, and a--tableoption to export headers into any of the data formats supported byastropy.table. [#2555, #2588]Sectionnow supports all advanced indexing featuresndarraydoes (slices with any steps, integer arrays, boolean arrays, None, Ellipsis). It also properly returns scalars when this is appropriate. [#3148]
astropy.io.votable#
astropy.io.votable.parsenow takes adatatype_mappingkeyword argument to map invalid datatype names to valid ones in order to support non-compliant files. [#2675]
astropy.modeling#
Added the capability of creating new “compound” models by combining existing models using arithmetic operators. See the “What’s New in 1.0” page in the Astropy documentation for more details. [#3231]
A new
custom_modeldecorator/factory function has been added for converting normal functions toModelclasses that can work within the Astropy modeling framework. This replaces the oldcustom_model_1dfunction which is now deprecated. The new function works the same as the old one but is less limited in the types of models it can be used to created. [#1763]The
ModelandFitterclasses have.registryattributes which provide sets of all loadedModelandFitterclasses (this is useful for building UIs for models and fitting). [#2725]A dict-like
metamember was added toModel. it is to be used to store any optional information which is relevant to a project and is not in the standardModelclass. [#2189]Added
Ellipse2Dmodel. [#3124]
astropy.nddata#
New array-related utility functions in
astropy.nddata.utilsfor adding and removing arrays from other arrays with different sizes/shapes. [#3201]New metaclass
NDDataBasefor enforcing the nddata interface in subclasses without restricting implementation of the data storage. [#2905]New mixin classes
NDSlicingMixinfor slicing,NDArithmeticMixinfor arithmetic operations, andNDIOMixinfor input/output in NDData. [#2905]Added a decorator
support_nddatathat can be used to write functions that can either take separate arguments or NDData objects. [#2855]
astropy.stats#
astropy.table#
Changed the internal implementation of the
Tableclass changed so that it no longer uses numpy structured arrays as the core table data container. [#2790, #3179]Tables can now be written to an html file that includes interactive browsing capabilities. To write out to this format, use
Table.write('filename.html', format='jsviewer'). [#2875]A
quantityproperty andtomethod were added toTablecolumns that allow the column values to be easily converted toastropy.units.Quantityobjects. [#2950]Add
uniqueconvenience method to table. [#3185]
astropy.tests#
Added a new Quantity-aware
assert_quantity_allclose. [#3273]
astropy.time#
Timecan now handle arbitrary array dimensions, with operations following standard numpy broadcasting rules. [#3138]
astropy.units#
Support for VOUnit has been updated to be compliant with version 1.0 of the standard. [#2901]
Added an
insertmethod to insert values into aQuantityobject. This is similar to thenumpy.insertfunction. [#3049]When viewed in IPython,
Quantityobjects with array values now render using LaTeX and scientific notation. [#2271]Added
units.quantity_inputdecorator to validate quantity inputs to a function for unit compatibility. [#3072]Added
units.astronomical_unitas a long form forunits.au. [#3303]
astropy.utils#
Added a new decorator
astropy.utils.wrapswhich acts as a replacement for the standard library’sfunctools.wraps, the only difference being that the decorated function also preserves the wrapped function’s call signature. [#2849]astropy.utils.compat.numpyhas been revised such that it can include patched versions of routines from newernumpyversions. The first addition is a version ofbroadcast_arraysthat can be used withQuantityand otherndarraysubclasses (using thesubok=Trueflag). [#2327]Added
astropy.utils.resolve_namewhich returns a member of a module or class given the fully qualified dotted name of that object as a string. [#3389]Added
astropy.utils.minversionwhich can be used to check minimum version requirements of Python modules (to test for specific features and/ or bugs and the like). [#3389]
astropy.visualization#
Created
astropy.visualizationmodule and added functionality relating to image normalization (i.e. stretching and scaling) as well as a new scriptfits2bitmapthat can produce a bitmap image from a FITS file. [#3201]Added dictionary
astropy.visualization.mpl_style.astropy_mpl_stylewhich can be used to set a uniform plotstyle specifically for tutorials that is improved compared to matplotlib defaults. [#2719, #2787, #3200]
astropy.wcs#
wcslibhas been upgraded to version 4.25. This brings a single new feature:equinoxandradesyswill now be given default values conforming with the WCS specification ifEQUINOXaandRADESYSa, respectively, are not present in the header.The minimum required version of
wcslibis now 4.24. [#2503]Added a new function
wcs_to_celestial_framethat can be used to find the astropy.coordinates celestial frame corresponding to a particular WCS. [#2730]astropy.wcs.WCS.comparenow supports atolerancekeyword argument to allow for approximate comparison of floating-point values. [#2503]added
pixel_scale_matrix,celestial,is_celestial, andhas_celestialconvenience attributes. Addedproj_plane_pixel_scales,proj_plane_pixel_area, andnon_celestial_pixel_scalesutility functions for retrieving WCS pixel scale and area information [#2832, #3304]Added two functions
pixel_to_skycoordandskycoord_to_pixelthat make it easy to convert between SkyCoord objects and pixel coordinates. [#2885]all_world2pixnow uses a much more sophisticated and complete algorithm to iteratively compute the inverse WCS transform. [#2816]Add ability to use
WCSobject to define projections in Matplotlib, using theWCSAxespackage. [#3183]Added
is_proj_plane_distortedfor testing if pixels are distorted. [#3329]
Misc#
astropy._erfawas added as a new subpackage wrapping the functionality of the ERFA library in python. This is primarily of use for other astropy subpackages, but the API may be made more public in the future. [#2992]
API Changes#
astropy.coordinates#
Subclasses of
BaseCoordinateFramewhich define a customreprshould be aware of the format expected inSkyCoord.__repr__(), which changed in this release. [#2704, #2882]The
CartesianPointsclass (deprecated in v0.4) has now been removed. [#2990]The previous
astropy.coordinates.builtin_framesmodule is now a subpackage. Everything that was in theastropy.coordinates.builtin_framesmodule is still accessible from the new package, but the classes are now in separate modules. This should have no direct impact at the user level. [#3120]Support for passing a frame as a positional argument in the
SkyCoordclass has now been deprecated, except in the case where a frame with data is passed as the sole positional argument. [#3152]Improved
__repr__of coordinate objects representing a single coordinate point for the sake of easier copy/pasting. [#3350]
astropy.cosmology#
The functional interface to the cosmological routines as well as
set_currentandget_current(deprecated in v0.4) have now been removed. [#2990]
astropy.io.ascii#
Added a new argument to
htmldictin the HTML reader namedparser, which allows the user to specify which parser BeautifulSoup should use as a backend. [#2815]Add
FixedWidthTwoLinereader to guessing. This will allows to read tables that a copied from screen output likeprint my_tableto be read automatically. Discussed in #3025 and #3099 [#3109]
astropy.io.fits#
A new optional argument
cachehas been added toastropy.io.fits.open(). When opening a FITS file from a URL,cacheis a boolean value specifying whether or not to save the file locally in Astropy’s download cache (Trueby default). [#3041]
astropy.modeling#
Model classes should now specify
inputsandoutputsclass attributes instead of the oldn_inputsandn_outputs. These should be tuples providing human-readable labels for all inputs and outputs of the model. The length of the tuple indicates the numbers of inputs and outputs. See “What’s New in Astropy 1.0” for more details. [#2835]It is no longer necessary to include
__init__or__call__definitions inModelsubclasses if all they do is wrap the super-method in order to provide a nice call signature to the docs. Theinputsclass attribute is now used to generate a nice call signature, so these methods should only be overridden byModelsubclasses in order to provide new functionality. [#2835]Most models included in Astropy now have sensible default values for most or all of their parameters. Call
help(ModelClass)on any model to check what those defaults are. Most of them time they should be overridden, but some of them are useful (for example spatial offsets are always set at the origin by default). Another rule of thumb is that, where possible, default parameters are set so that the model is a no-op, or close to it, by default. [#2932]The
Model.inversemethod has been changed to a property, so that now accessingmodel.inverseon a model returns a new model that implements that model’s inverse, and callingmodel.inverse(...)`on some independent variable computes the value of the inverse (similar to what the oldModel.invert()method was meant to do). [#3024]The
Model.invert()method has been removed entirely (it was never implemented and there should not be any existing code that relies on it). [#3024]custom_model_1dis deprecated in favor of the newcustom_model(see “New Features” above). [#1763]The
Model.param_dimproperty (deprecated in v0.4) has now been removed. [#2990]The
Beta1DandBeta2Dmodels have been renamed toMoffat1DandMoffat2D. [#3029]
astropy.nddata#
flags,shape,size,dtypeandndimproperties removed fromastropy.nddata.NDData. [#2905]Arithmetic operations, uncertainty propagation, slicing and automatic conversion to a numpy array removed from
astropy.nddata.NDData. The classastropy.nddata.NDDataArrayis functionally equivalent to the oldNDData. [#2905]
astropy.table#
The
Column.unitsproperty (deprecated in v0.3) has now been removed. [#2990]The
Row.dataandTable._dataattributes have been deprecated related to the change in Table implementation. They are replaced byRow.as_void()andTable.as_array()methods, respectively. [#2790]The
Table.create_maskmethod has been removed. This undocumented method was a development orphan and would cause corruption of the table if called. [#2790]The return type for integer item access to a Column (e.g. col[12] or t[‘a’][12]) is now always a numpy scalar, numpy
ndarray, or numpyMaskedArray. Previously if the column was multidimensional then a Column object would be returned. [#3095]The representation of Table and Column objects has been changed to be formatted similar to the print output. [#3239]
astropy.time#
astropy.units#
Support for VOUnit has been updated to be compliant with version 1.0 of the standard. This means that some VOUnit strings that were rejected before are now acceptable. [#2901] Notably:
SI prefixes are supported on most units
Binary prefixes are supported on “bits” and “bytes”
Custom units can be defined “inline” by placing them between single quotes.
Unit.get_converterhas been deprecated. It is not strictly necessary for end users, and it was confusing due to lack of support forQuantityobjects. [#3456]
astropy.utils#
Some members of
astropy.utils.miscwere moved into new submodules. Specifically:deprecated,deprecated_attribute, andlazyproperty->astropy.utils.decoratorsfind_current_module,find_mod_objs->astropy.utils.introspectionAll of these functions can be imported directly from
astropy.utilswhich should be preferred over referencing individual submodules ofastropy.utils. [#2857]The ProgressBar.iterate class method (deprecated in v0.3) has now been removed. [#2990]
Updated
astropy/utils/console.pyProgressBar() module to display output to IPython notebook with the addition of aninteractivekwarg. [#2658, #2789]
astropy.wcs#
Bug Fixes#
astropy.convolution#
astropy.convolution.discretize_modelnow handles arbitrary callables correctly [#2274].
astropy.coordinates#
Angle.to_stringnow outputs unicode arrays instead of object arrays. [#2981]SkyCoord.to_stringno longer gives an error when used with an array coordinate with more than one dimension. [#3340]Fixed support for subclasses of
UnitSphericalRepresentationandSphericalRepresentation[#3354, #3366]Fixed latex display of array angles in IPython notebook. [#3480]
astropy.io.ascii#
In the
CommentedHeaderthedata_startparameter now defaults to0, which is the first uncommented line. Discussed in #2692. [#3054]Position lines in
FixedWidthTwoLinereader could consist of many characters. Now, only one character in addition to the delimiter is allowed. This bug was discovered as part of [#3109]The IPAC table writer now consistently uses the
fill_valueskeyword to specify the output null values. Previously the behavior was inconsistent or incorrect. [#3259]The IPAC table reader now correctly interprets abbreviated column types. [#3279]
Tables that look almost, but not quite like DAOPhot tables could cause guessing to fail. [#3342]
astropy.io.fits#
Fixed the problem in
fits.openof some filenames with colon (:) in the name being recognized as URLs instead of file names. [#3122]Setting
memmap=Trueinfits.openand related functions now raises a ValueError if opening a file in memory-mapped mode is impossible. [#2298]CONTINUE cards no longer end the value of the final card in the series with an ampersand, per the specification of the CONTINUE card convention. [#3282]
Fixed a crash that occurred when reading an ASCII table containing zero-precision floating point fields. [#3422]
When a float field for an ASCII table has zero-precision a decimal point (with no digits following it) is still written to the field as long as there is space for it, as recommended by the FITS standard. This makes it less ambiguous that these columns should be interpreted as floats. [#3422]
astropy.logger#
Fix a bug that occurred when displaying warnings that produced an error message
dictionary changed size during iteration. [#3353]
astropy.modeling#
Fixed a bug in
SLSQPLSQFitterwhere themaxiterargument was not passed correctly to the optimizer. [#3339]
astropy.table#
Fix a problem where
table.hstackfails to stack multiple references to the same table, e.g.table.hstack([t, t]). [#2995]Fixed a problem where
table.vstackandtable.hstackfailed to stack a single table, e.g.table.vstack([t]). [#3313]Fix a problem when doing nested iterators on a single table. [#3358]
Fix an error when an empty list, tuple, or ndarray is used for item access within a table. This now returns the table with no rows. [#3442]
astropy.time#
astropy.units#
Added a
latex_inlineunit format that returns the units in LaTeX math notation with negative exponents instead of fractions [#2622].When using a unit that is deprecated in a given unit format, non-deprecated alternatives will be suggested. [#2806] For example:
>>> import astropy.units as u >>> u.Unit('Angstrom', format='fits') WARNING: UnitsWarning: The unit 'Angstrom' has been deprecated in the FITS standard. Suggested: nm (with data multiplied by 0.1). [astropy.units.format.utils]
astropy.utils#
astropy.wcs#
astropy.wcs.WCS.subnow accepts unicode strings as input on Python 2.x [#3356]
Misc#
Some modules and tests that would crash upon import when using a non-final release of Numpy (e.g. 1.9.0rc1). [#3471]
Other Changes and Additions#
The bundled copy of astropy-helpers has been updated to v1.0. [#3515]
Updated
astropy.extern.configobjto Version 5. Version 5 usessixand the same code covers both Python 2 and Python 3. [#3149]
astropy.coordinates#
astropy.io.fits#
astropy.table#
Sped up setting of
Columnslices by an order of magnitude. [#2994, #3020]Updated the bundled
sixmodule to version 1.7.3 and made 1.7.3 the minimum acceptable version ofsix. [#2814]The version of ERFA included with Astropy is now v1.1.1 [#2971]
The code base is now fully Python 2 and 3 compatible and no longer requires 2to3. [#2033]
funcsigs is included in utils.compat, but defaults to the inspect module components where available (3.3+) [#3151].
The list of modules displayed in the pytest header can now be customized. [#3157]
jinja2>=2.7 is now required to build the source code from the git repository, in order to allow the ERFA wrappers to be generated. [#3166]
Version 0.4.5 (2015-02-16)#
Bug Fixes#
Fixed unnecessary attempt to run
gitwhen importing astropy. In particular, fixed a crash in Python 3 that could result from this when importing Astropy when the current working directory is an empty git repository. [#3475]
Other Changes and Additions#
Updated bundled copy of astropy-helpers to v0.4.6. [#3508]
Version 0.4.4 (2015-01-21)#
Bug Fixes#
astropy.vo.samp#
astropy.vo.sampis now usable on Python builds that do not support the SSLv3 protocol (which depends both on the version of Python and the version of OpenSSL or LibreSSL that it is built against.) [#3308]
API Changes#
astropy.vo.samp#
The default SSL protocol used is now determined from the default used in the Python
sslstandard library. This default may be different depending on the exact version of Python you are using. [#3308]
astropy.wcs#
WCS allows slices of the form slice(None, x, y), which previously resulted in an unsliced copy being returned (note: this was previously incorrectly reported as fixed in v0.4.3) [#2909]
Version 0.4.3 (2015-01-15)#
Bug Fixes#
astropy.coordinates#
The
Distanceclass has been fixed to no longer rely on the deprecated cosmology functions. [#2991]Ensure
float32values can be used in coordinate representations. [#2983]Fix frame attribute inheritance in
SkyCoord.transform_to()method so that the default attribute value (e.g. equinox) for the destination frame gets used if no corresponding value was explicitly specified. [#3106]Angleaccepts hours:mins or deg:mins initializers (without seconds). In these cases float minutes are also accepted. [#2843]astropy.coordinates.SkyCoordobjects are now copyable. [#2888]astropy.coordinates.SkyCoordobject attributes are now immutable. It is still technically possible to change the internal data for an array-valued coordinate object but this leads to inconsistencies [#2889] and should not be done. [#2888]
astropy.cosmology#
The
ztolkeyword argument to z_at_value now works correctly [#2993].
astropy.io.ascii#
astropy.io.fits#
astropy.modeling#
Fixed a test failure on Debian/PowerPC and Debian/s390x. [#2708]
Fixed crash in evaluating models that have more outputs than inputs–this case may not be handled as desired for all conceivable models of this format (some may have to implement custom
prepare_inputsandprepare_outputsmethods). But as long as all outputs can be assumed to have a shape determined from the broadcast of all inputs with all parameters then this can be used safely. [#3250]
astropy.table#
Fix a bug that caused join to fail for multi-dimensional columns. [#2984]
Fix a bug where MaskedColumn attributes which had been changed since the object was created were not being carried through when slicing. [#3023]
Fix a bug that prevented initializing a table from a structured array with multi-dimensional columns with copy=True. [#3034]
Fixed unnecessarily large unicode columns when instantiating a table from row data on Python 3. [#3052]
Improved the warning message when unable to aggregate non-numeric columns. [#2700]
astropy.units#
Operations on quantities with incompatible types now raises a much more informative
TypeError. [#2934]Quantity.tolistnow overrides thendarraymethod to give aNotImplementedError(by renaming the previouslistmethod). [#3050]Quantity.roundnow always returns aQuantity(previously it returned anndarrayfordecimals>0). [#3062]Ensured
np.squeezealways returns aQuantity(it only worked if no dimensions were removed). [#3045]Input to
Quantitywith aunitattribute no longer can get mangled withcopy=False. [#3051]Remove trailing space in
__format__calls for dimensionless quantities. [#3097]Comparisons between units and non-unit-like objects now works correctly. [#3108]
Units with fractional powers are now correctly multiplied together by using rational arithmetic. [#3121]
Removed a few entries from spectral density equivalencies which did not make sense. [#3153]
astropy.utils#
astropy.vo#
Fixed an issue with reconnecting to a SAMP Hub. [#2674]
astropy.wcs#
Misc#
Other Changes and Additions#
astropy.coordinates#
Improved the agreement of the FK5 <-> Galactic conversion with other codes, and with the FK5 <-> FK4 <-> Galactic route. [#3107]
Version 0.4.2 (2014-09-23)#
Bug Fixes#
astropy.coordinates#
Angleaccepts hours:mins or deg:mins initializers (without seconds). In these cases float minutes are also accepted.The
reprfor coordinate frames now displays the frame attributes (ex: ra, dec) in a consistent order. It should be noted that as part of this fix, theBaseCoordinateFrame.get_frame_attr_names()method now returns anOrderedDictinstead of just adict. [#2845]
astropy.io.fits#
Fixed a crash when reading scaled float data out of a FITS file that was loaded from a string (using
HDUList.fromfile) rather than from a file. [#2710]Fixed a crash when reading data from an HDU whose header contained in invalid value for the BLANK keyword (e.g., a string value instead of an integer as required by the FITS Standard). Invalid BLANK keywords are now warned about, but are otherwise ignored. [#2711]
Fixed a crash when reading the header of a tile-compressed HDU if that header contained invalid duplicate keywords resulting in a
KeyError[#2750]Fixed crash when reading gzip-compressed FITS tables through the Astropy
Tableinterface. [#2783]Fixed corruption when writing new FITS files through to gzipped files. [#2794]
Fixed crash when writing HDUs made with non-contiguous data arrays to file-like objects. [#2794]
It is now possible to create
astropy.io.fits.BinTableHDUobjects with a table with zero rows. [#2916]
astropy.io.misc#
Fixed a bug that prevented h5py
Datasetobjects from being automatically recognized byTable.read. [#2831]
astropy.modeling#
Make
LevMarLSQFitterwork withweightskeyword. [#2900]
astropy.table#
Fixed reference cycle in tables that could prevent
Tableobjects from being freed from memory. [#2879]Fixed an issue where
Table.pprint()did not print the header tostdoutwhenstdoutis redirected (say, to a file). [#2878]Fixed printing of masked values when a format is specified. [#1026]
Ensured that numpy ufuncs that return booleans return plain
ndarrayinstances, just like the comparison operators. [#2963]
astropy.time#
Ensure bigendian input to Time works on a little-endian machine (and vice versa). [#2942]
astropy.units#
Ensure unit is kept when adding 0 to quantities. [#2968]
astropy.utils#
Fixed color printing on Windows with IPython 2.0. [#2878]
astropy.vo#
Improved error message on Cone Search time out. [#2687]
Other Changes and Additions#
Fixed a couple issues with files being inappropriately included and/or excluded from the source archive distributions of Astropy. [#2843, #2854]
As part of fixing the fact that masked elements of table columns could not be printed when a format was specified, the column format string options were expanded to allow simple specifiers such as
'5.2f'. [#2898]Ensure numpy 1.9 is supported. [#2917]
Ensure numpy master is supported, by making
np.cbrtwork with quantities. [#2937]
Version 0.4.1 (2014-08-08)#
Bug Fixes#
astropy.config#
Fixed a bug where an unedited configuration file from astropy 0.3.2 would not be correctly identified as unedited. [#2772] This resulted in the warning:
WARNING: ConfigurationChangedWarning: The configuration options in astropy 0.4 may have changed, your configuration file was not updated in order to preserve local changes. A new configuration template has been saved to '~/.astropy/config/astropy.0.4.cfg'. [astropy.config.configuration]
Fixed the error message that is displayed when an old configuration item has moved. Before, the destination section was wrong. [#2772]
Added configuration settings for
io.fits,io.votableandtable.jsviewerthat were missing from the configuration file template. [#2772]The configuration template is no longer rewritten on every import of astropy, causing race conditions. [#2805]
astropy.convolution#
Fixed the multiplication of
Kernelwith numpy floats. [#2174]
astropy.coordinates#
astropy.io.misc#
An existing table within an HDF5 file can be overwritten without affecting other datasets in the same HDF5 file by simultaneously using
overwrite=Trueandappend=Truearguments to theTable.writemethod. [#2624]
astropy.logger#
Fixed a crash that could occur in rare cases when (such as in bundled apps) where submodules of the
emailpackage are not importable. [#2671]
astropy.nddata#
astropy.nddata.NDData()no longer raises aValueErrorwhen passed a numpy masked array which has no masked entries. [#2784]
astropy.table#
When saving a table to a FITS file containing a unit that is not supported by the FITS standard, a warning rather than an exception is raised. [#2797]
astropy.units#
astropy.utils#
astropy.wcs#
Other Changes and Additions#
Bundled copy of astropy-helpers upgraded to v0.4.1. [#2825]
General improvements to documentation and docstrings [#2722, #2728, #2742]
Made it easier for third-party packagers to have Astropy use their own version of the
sixmodule (so long as it meets the minimum version requirement) and remove the copy bundled with Astropy. See the astropy/extern/README file in the source tree. [#2623]
Version 0.4 (2014-07-16)#
New Features#
astropy.constants#
Added
b_wiento represent Wien wavelength displacement law constant. [#2194]
astropy.convolution#
Changed the input parameter in
Gaussian1DKernelandGaussian2DKernelfromwidthtostddev[#2085].
astropy.coordinates#
The coordinates package has undergone major changes to implement APE5 . These include backwards-incompatible changes, as the underlying framework has changed substantially. See the APE5 text and the package documentation for more details. [#2422]
A
position_anglemethod has been added to the newSkyCoord. [#2487]Updated
Angle.dmsandAngle.hmsto returnnamedtuple-s instead of regular tuples, and addedAngle.signed_dmsattribute that gives the absolute value of thed,m, andsalong with the sign. [#1988]By default,
Distanceobjects are now required to be positive. To allow negative values, setallow_negative=Truein theDistanceconstructor when creating aDistanceinstance.Longitude(resp.Latitude) objects cannot be used any more to initialize or setLatitude(resp.Longitude) objects. An explicit conversion toAngleis now required. [#2461]The deprecated functions for pre-0.3 coordinate object names like
ICRSCoordinateshave been removed. [#2422]The
rotation_matrixandangle_axisfunctions inastropy.coordinates.angleswere made more numerically consistent and are now tested explicitly [#2619]
astropy.cosmology#
Added
z_at_valuefunction to find the redshift at which a cosmology function matches a desired value. [#1909]Added
FLRW.differential_comoving_volumemethod to give the differential comoving volume at redshift z. [#2103]The functional interface is now deprecated in favor of the more-explicit use of methods on cosmology objects. [#2343]
Updated documentation to reflect the removal of the functional interface. [#2507]
astropy.io.ascii#
The
astropy.io.asciioutput formatslatexandaastexaccept a dictionary calledlatex_dictto specify options for LaTeX output. It is now possible to specify the table alignment within the text via thetablealignkeyword. [#1838]If
header_startis specified in a call toascii.get_readeror any method that callsget_reader(e.g.ascii.read) butdata_startis not specified at the same time, thendata_startis calculated so that the data starts after the header. Before this, the default was that the header line was read again as the first data line [#855 and #1844].A new
csvformat was added as a convenience for handling CSV (comma- separated values) data. [#1935] This format also recognises rows with an inconsistent number of elements. [#1562]An option was added to guess the start of data for CDS format files when they do not strictly conform to the format standard. [#2241]
Added an HTML reader and writer to the
astropy.io.asciipackage. Parsing requires the installation of BeautifulSoup and is therefore an optional feature. [#2160]Added support for inputting column descriptions and column units with the
io.ascii.SExtractorreader. [#2372]Allow the use of non-local ReadMe files in the CDS reader. [#2329]
Provide a mechanism to select how masked values are printed. [#2424]
Added support for reading multi-aperture daophot file. [#2656]
astropy.io.fits#
Included a new command-line script called
fitsheaderto display the header(s) of a FITS file from the command line. [#2092]Added new verification options
fix+ignore,fix+warn,fix+exception,silentfix+ignore,silentfix+warn, andsilentfix+exceptionwhich give more control over how to report fixable errors as opposed to unfixable errors.
astropy.modeling#
Prototype implementation of fitters that treat optimization algorithms separately from fit statistics, allowing new fitters to be created by mixing and matching optimizers and statistic functions. [#1914]
Slight overhaul to how inputs to and outputs from models are handled with respect to array-valued parameters and variables, as well as sets of multiple models. See the associated PR and the modeling section of the v0.4 documentation for more details. [#2634]
Added a new
SimplexLSQFitterwhich uses a downhill simplex optimizer with a least squares statistic. [#1914]Changed
Gaussian2Dmodel such thatthetanow increases counterclockwise. [#2199]Replaced the
MatrixRotation2Dmodel with a new model called simplyRotation2Dwhich requires only an angle to specify the rotation. The newRotation2Drotates in a counter-clockwise sense whereas the oldMatrixRotation2Dincreased the angle clockwise. [#2266, #2269]Added a new
AffineTransformation2Dmodel which serves as a replacement for the capability ofMatrixRotation2Dto accept an arbitrary matrix, while also adding a translation capability. [#2269]Added
GaussianAbsorption1Dmodel. [#2215]New
Redshiftmodel [#2176].
astropy.nddata#
Allow initialization
NDDataorStdDevUncertaintywith aQuantity. [#2380]
astropy.stats#
Added flat prior to binom_conf_interval and binned_binom_proportion
Change default in
sigma_clipfromnp.mediantonp.ma.median. [#2582]
astropy.sphinx#
Note, the following new features are included in astropy-helpers as well:
The
automodapiandautomodsummextensions now include sphinx configuration options to write out whatautomodapiandautomodsummgenerate, mainly for debugging purposes. [#1975, #2022]Reference documentation now shows functions/class docstrings at the intended user-facing API location rather than the actual file where the implementation is found. [#1826]
The
automodsummextension configuration was changed to generate documentation of class__call__member functions. [#1817, #2135]automodapiandautomodsummnow have an:allowed-package-names:option that make it possible to document functions and classes that are in a different namespace. [#2370]
astropy.table#
Improved grouped table aggregation by using the numpy
reduceat()method when possible. This can speed up the operation by a factor of at least 10 to 100 for large unmasked tables and columns with relatively small group sizes. [#2625]Allow row-oriented data input using a new
rowskeyword argument. [#850]Allow subclassing of
Tableand the component classesRow,Column,MaskedColumn,TableColumns, andTableFormatter. [#2287]Fix to allow numpy integer types as valid indices into tables in Python 3.x [#2477]
Remove transition code related to the order change in
ColumnandMaskedColumnargumentsnameanddatafrom Astropy 0.2 to 0.3. [#2511]Change HTML table representation in IPython notebook to show all table columns instead of restricting to 80 column width. [#2651]
astropy.time#
Mean and apparent sidereal time can now be calculated using the
sidereal_timemethod [#1418].The time scale now defaults to UTC if no scale is provided. [#2091]
TimeDeltaobjects can have all scales but UTC, as well as, for consistency with time-like quantities, undefined scale (where the scale is taken from the object one adds to or subtracts from). This allows, e.g., to work consistently in TDB. [#1932]Timenow supports ISO format strings that end in “Z”. [#2211, #2203]
astropy.units#
Support for the unit format Office of Guest Investigator Programs (OGIP) FITS files has been added. [#377]
The
spectralequivalency can now handle angular wave number. [#1306 and #1899]Added
oneas a shorthand fordimensionless_unscaled. [#1980]Added
dexanddBunits. [#1628]Added
temperature()equivalencies to support conversion between Kelvin, Celsius, and Fahrenheit. [#2209]Added
temperature_energy()equivalencies to support conversion between electron-volt and Kelvin. [#2637]The runtime of
astropy.units.Unit.composeis greatly improved (by a factor of 2 in most cases) [#2544]Added
electronunit. [#2599]
astropy.utils#
timer.RunTimePredictornow usesastropy.modelingin itsdo_fit()method. [#1896]
astropy.vo#
astropy.wcs#
astropy now requires wcslib version 4.23. The version of wcslib included with astropy has been updated to version 4.23.
Bounds checking is now performed on native spherical coordinates. Any out-of-bounds values will be returned as
NaN, and marked in thestatarray, if using the low-levelwcslibinterface such asastropy.wcs.Wcsprm.p2s. [#2107]A new method,
astropy.wcs.WCS.compare(), compares two wcsprm structs for equality with varying degrees of strictness. [#2361]New
astropy.wcs.utilsmodule, with a handful of tools for manipulating WCS objects, including dropping, swapping, and adding axes.
Misc#
Includes the new astropy-helpers package which separates some of Astropy’s build, installation, and documentation infrastructure out into an independent package, making it easier for Affiliated Packages to depend on these features. astropy-helpers replaces/deprecates some of the submodules in the
astropypackage (see API Changes below). See also APE 4 for more details on the motivation behind and implementation of astropy-helpers. [#1563]
API Changes#
astropy.config#
The configuration system received a major overhaul, as part of APE3. It is no longer possible to save configuration items from Python, but instead users must edit the configuration file directly. The locations of configuration items have moved, and some have been changed to science state values. The old locations should continue to work until astropy 0.5, but deprecation warnings will be displayed. See the Configuration transition docs for a detailed description of the changes and how to update existing code. [#2094]
astropy.io.fits#
The
astropy.io.fits.new_tablefunction is now fully deprecated (though will not be removed for a long time, considering how widely it is used).Instead please use the more explicit
BinTableHDU.from_columnsto create a new binary table HDU, and the similarTableHDU.from_columnsto create a new ASCII table. These otherwise accept the same arguments asnew_tablewhich is now just a wrapper for these.The
.fromstringclassmethod of each HDU type has been simplified such that, true to its namesake, it only initializes an HDU from a string containing its header and data.Fixed an issue where header wildcard matching (for example
header['DATE*']) can be used to match any characters that might appear in a keyword. Previously this only matched keywords containing characters in the set[0-9A-Za-z_]. Now this can also match a hyphen-and any other characters, as some conventions likeHIERARCHand record-valued keyword cards allow a wider range of valid characters than standard FITS keywords.This will be the last release to support the following APIs that have been marked deprecated since Astropy v0.1/PyFITS v3.1:
The
CardListclass, which was part of the old header implementation.The
Card.keyattribute. UseCard.keywordinstead.The
Card.cardimageandCard.ascardimageattributes. Use simplyCard.imageorstr(card)instead.The
create_cardfactory function. Simply use the normalCardconstructor instead.The
create_card_from_stringfactory function. UseCard.fromstringinstead.The
upper_keyfunction. UseCard.normalize_keywordmethod instead (this is not unlikely to be used outside of PyFITS itself, but it was technically public API).The usage of
Header.updatewithHeader.update(keyword, value, comment)arguments.Header.updateshould only be used analogously todict.update. UseHeader.setinstead.The
Header.ascardattribute. UseHeader.cardsinstead for a list of all theCardobjects in the header.The
Header.rename_keymethod. UseHeader.rename_keywordinstead.The
Header.get_historymethod. Useheader['HISTORY']instead (normal keyword lookup).The
Header.get_commentmethod. Useheader['COMMENT']instead.The
Header.toTxtFilemethod. Useheader.totextfileinstead.The
Header.fromTxtFilemethod. UseHeader.fromtextfileinstead.The
tdumpandtcreatefunctions. Usetabledumpandtableloadrespectively.The
BinTableHDU.tdumpandtcreatemethods. UseBinTableHDU.dumpandBinTableHDU.loadrespectively.The
txtfileargument to theHeaderconstructor. UseHeader.fromfileinstead.The
startColumnandendColumnarguments to theFITS_recordconstructor. These are unlikely to be used by any user code.These deprecated interfaces will be removed from the development version of Astropy following the v0.4 release (they will still be available in any v0.4.x bugfix releases, however).
astropy.modeling#
The method computing the derivative of the model with respect to parameters was renamed from
derivtofit_deriv. [#1739]ParametricModeland the associatedParametric1DModelandParametric2DModelclasses have been renamedFittableModel,Fittable1DModel, andFittable2DModelrespectively. The baseModelclass has subsumed the functionality of the oldParametricModelclass so that all models support parameter constraints. The only distinction ofFittableModelis that anything which subclasses it is assumed “safe” to use with Astropy fitters. [#2276]NonLinearLSQFitterhas been renamedLevMarLSQFitterto emphasise that it uses the Levenberg-Marquardt optimization algorithm with a least squares statistic function. [#1914]The
SLSQPFitterclass has been renamedSLSQPLSQFitterto emphasize that it uses the Sequential Least Squares Programming optimization algorithm with a least squares statistic function. [#1914]The
Fitter.errorfuncmethod has been renamed to the more generalFitter.objective_function. [#1914]
astropy.nddata#
astropy.sphinx#
Use of the
astropy.sphinxmodule is deprecated; all new development of this module is inastropy_helpers.sphinxwhich should be used instead (therefore documentation builds that made use of any of the utilities inastropy.sphinxnow haveastropy_helpersas a documentation dependency).
astropy.table#
The default table printing function now shows a table header row for units if any columns have the unit attribute set. [#1282]
Before, an unmasked
Tablewas automatically converted to a masked table if generated from a masked Table or aMaskedColumn. Now, this conversion is only done if explicitly requested or if any of the input values is actually masked. [#1185]The repr() function of
astropy.table.Tablenow shows the units if any columns have the unit attribute set. [#2180]The semantics of the config options
table.max_linesandtable.max_widthhas changed slightly. If these values are not set in the config file, astropy will try to determine the size automatically from the terminal. [#2683]
astropy.time#
astropy.units#
Quantitynow converts input to float by default, as this is physically most sensible for nearly all units [#1776].Quantitycomparisons with==or!=now always returnTrueorFalse, even if units do not match (for which case aUnitsErrorused to be raised). [#2328]Applying
floatorintto aQuantitynow works for all dimensionless quantities; they are automatically converted to unscaled dimensionless. [#2249]The exception
astropy.units.UnitException, which was deprecated in astropy 0.2, has been removed. Useastropy.units.UnitErrorinstead [#2386]Initializing a
Quantitywith a valid number/array with aunitattribute now interprets that attribute as the units of the input value. This makes it possible to initialize aQuantityfrom an AstropyTablecolumn and have it correctly pick up the units from the column. [#2486]
astropy.wcs#
calcFootprintwas deprecated. It is replaced bycalc_footprint. An optional boolean keywordcenterwas added tocalc_footprint. It controls whether the centers or the corners of the pixels are used in the computation. [#2384]astropy.wcs.WCS.sip_pix2focandastropy.wcs.WCS.sip_foc2pixformerly did not conform to theSIPstandard:CRPIXwas added to thefocresult so that it could be used as input to “core FITS WCS”. As of astropy 0.4,CRPIXis no longer added to the result, so thefocspace is correct as defined in the SIP convention. [#2360]astropy.wcs.UnitConverter, which was deprecated in astropy 0.2, has been removed. Use theastropy.unitsmodule instead. [#2386]The following methods on
astropy.wcs.WCS, which were deprecated in astropy 0.1, have been removed [#2386]:all_pix2sky->all_pix2worldwcs_pix2sky->wcs_pix2worldwcs_sky2pix->wcs_world2pixThe
naxis1andnaxis2attributes and theget_naxismethod ofastropy.wcs.WCS, which were deprecated in astropy 0.2, have been removed. Use the shape of the underlying FITS data array instead. [#2386]
Misc#
The
astropy.setup_helpersandastropy.version_helpersmodules are deprecated; any non-critical fixes and development to those modules should be inastropy_helpersinstead. Packages that use these modules in theirsetup.pyshould depend onastropy_helpersfollowing the same pattern as in the Astropy package template.
Bug Fixes#
astropy.constants#
astropy.constants.Contantobjects can now be deep copied. [#2601]
astropy.cosmology#
astropy.io.ascii#
astropy.io.ascii.readwould fail to read lists of strings where some of the strings consisted of just a newline (”n”). [#2648]
astropy.io.fits#
Use NaN for missing values in FITS when using Table.write for float columns. Earlier the default fill value was close to 1e20.[#2186]
Fixes for checksums on 32-bit platforms. Results may be different if writing or checking checksums in “nonstandard” mode. [#2484]
Additional minor bug fixes ported from PyFITS. [#2575]
astropy.io.votable#
astropy.nddata#
Indexing
NDDatain a way that results in a single element returns that element. [#2170]Change construction of result of arithmetic and unit conversion to allow subclasses to require the presence of attribute like unit. [#2300]
Scale uncertainties to correct units in arithmetic operations and unit conversion. [#2393]
Ensure uncertainty and mask members are copied in arithmetic and convert_unit_to. [#2394]
Mask result of arithmetic if either of the operands is masked. [#2403]
Copy all attributes of input object if
astropy.nddata.NDDatais initialized with anNDDataobject. [#2406]Copy
flagsto new object inconvert_unit_to. [#2409]Result of
NDDataarithmetic makes a copy of any WCS instead of using a reference. [#2410]Fix unit handling for multiplication/division and use
astropy.units.Quantityfor units arithmetic. [#2413]A masked
NDDatais now converted to a masked array when used in an operation or ufunc with a numpy array. [#2414]An unmasked
NDDatanow uses an internal representation of its mask state thatnumpy.maexpects so that anNDDatabehaves as an unmasked array. [#2417]
astropy.sphinx#
Fix crash in smart resolver when the resolution doesn’t work. [#2591]
astropy.table#
The
astropy.table.Columnobject can now use both functions and callable objects as formats. [#2313]Fixed a problem on 64 bit windows that caused errors “expected ‘DTYPE_t’ but got ‘long long’” [#2490]
Fix initialisation of
TableColumnswith lists or tuples. [#2647]Fix removal of single column using
remove_columns. [#2699]Fix a problem that setting a row element within a masked table did not update the corresponding table element. [#2734]
astropy.time#
Correct UT1->UTC->UT1 round-trip being off by 1 second if UT1 is on a leap second. [#2077]
astropy.units#
Quantity.copynow behaves identically tondarray.copy, and thus supports theorderargument (for numpy >=1.6). [#2284]Composing base units into identical composite units now works. [#2382]
Creating and composing/decomposing units is now substantially faster [#2544]
Quantityobjects now are able to be assigned NaN [#2695]
astropy.wcs#
Astropy now requires wcslib version 4.23. The version of wcslib included with astropy has been updated to version 4.23.
Bug fixes in the projection routines: in
hpxx2s[the cartesian-to-spherical operation of theHPXprojection] relating to bounds checking, bug introduced at wcslib 4.20; inparx2sand molx2s`` [the cartesion-to-spherical operation of thePARandMOLprojections respectively] relating to setting the stat vector; inhpxx2srelating to implementation of the vector API; and inxphx2srelating to setting an out-of-bounds value of phi.In the
PCOprojection, use alternative projection equations for greater numerical precision near theta == 0. In theCOPprojection, return an exact result for theta at the poles. Relaxed the tolerance for bounds checking a little inSFLprojection.Fix a bug allocating insufficient memory in
astropy.wcs.WCS.sub[#2468]A new method,
Wcsprm.bounds_check(corresponding to wcslib’swcsbchk) has been added to control what bounds checking is performed by wcslib.WCS.to_headerwill now raise a more meaningful exception when the WCS information is invalid or inconsistent in some way. [#1854]In
WCS.to_header,RESTFRQandRESTWAVare no longer rewritten if zero. [#2468]In
WCS.to_header, floating point values will now always be written with an exponent or fractional part, i.e..0being appended if necessary to achieve this. [#2468]If the C extension for
astropy.wcswas not built or fails to import for any reason,import astropy.wcswill result in anImportError, rather than getting obscure errors once theastropy.wcsis used. [#2061]When the C extension for
astropy.wcsis built using a version ofwscslibalready present in the system, the package does not try to installwcslibheaders underastropy/wcs/include. [#2536]Fixes an unresolved external symbol error in the
astropy.wcs._wcsC extension on Microsoft Windows when built with a Microsoft compiler. [#2478]
Misc#
Running the test suite with
python setup.py testnow works if the path to the source contains spaces. [#2488]The version of ERFA included with Astropy is now v1.1.0 [#2497]
Removed deprecated option from travis configuration and force use of wheels rather than allowing build from source. [#2576]
The short option
-nto run tests in parallel was broken (conflicts with the distutils built-in option of “dry-run”). Changed to-j. [#2566]
Other Changes and Additions#
python setup.py test –coverage will now give more accurate results, because the coverage analysis will include early imports of astropy. There doesn’t seem to be a way to get this to work when doing
import astropy; astropy.test(), so thecoveragekeyword toastropy.testhas been removed. Coverage testing now depends only on coverage.py, notpytest-cov. [#2112]The included version of py.test has been upgraded to 2.5.1. [#1970]
The included version of six.py has been upgraded to 1.5.2. [#2006]
Where appropriate, tests are now run both with and without the
unicode_literalsoption to ensure that we support both cases. [#1962]Running the Astropy test suite from within the IPython REPL is disabled for now due to bad interaction between the test runner and IPython’s logging and I/O handler. For now, run the Astropy tests should be run in the basic Python interpreter. [#2684]
Added support for numerical comparison of floating point values appearing in the output of doctests using a
+FLOAT_CMPdoctest flag. [#2087]A monkey patch is performed to fix a bug in Numpy version 1.7 and earlier where unicode fill values on masked arrays are not supported. This may cause unintended side effects if your application also monkey patches
numpy.maor relies on the broken behavior. If unicode support of masked arrays is important to your application, upgrade to Numpy 1.8 or later for best results. [#2059]The developer documentation has been extensively rearranged and rewritten. [#1712]
The
human_timefunction inastropy.utilsnow returns strings without zero padding. [#2420]The
bdist_dmgcommand forsetup.pyhas now been removed. [#2553]Many broken API links have been fixed in the documentation, and the
nitpickSphinx option is now used to avoid broken links in future. [#1221, #2019, #2109, #2161, #2162, #2192, #2200, #2296, #2448, #2456, #2460, #2467, #2476, #2508, #2509]
Version 0.3.2 (2014-05-13)#
Bug Fixes#
astropy.coordinates#
if
separgument is specified to be a single character insexagisimal_to_string, it now includes separators only between items [#2183]Ensure comparisons involving
Distanceobjects do not raise exceptions; also ensure operations that lead to units other than length returnQuantity. [#2206, #2250]Multiplication and division of
Angleobjects is now supported. [#2273]Fixed
Angle.to_stringfunctionality so that negative angles have the correct amount of padding whenpad=True. [#2337]Mixing strings and quantities in the
Angleconstructor now works. For example:Angle(['1d', 1. * u.d]). [#2398]If
Longitudeis given aLongitudeas input, use itswrap_angleby default [#2705]
astropy.cosmology#
astropy.io.ascii#
The CDS reader in
astropy.io.asciican now handle multiple description lines in ReadMe files. [#2225]When reading a table with values that generate an overflow error during type conversion (e.g. overflowing the native C long type), fall through to using string. Previously this generated an exception [#2234].
Recognize any string with one to four dashes as null value. [#1335]
astropy.io.fits#
Allow pickling of
FITS_recobjects. [#1597]Improved behavior when writing large compressed images on OSX by removing an unnecessary check for platform architecture. [#2345]
Fixed an issue where Astropy
Tableobjects containing boolean columns were not correctly written out to FITS files. [#1953]Several other bug fixes ported from PyFITS v3.2.3 [#2368]
Fixed a crash on Python 2.x when writing a FITS file directly to a
StringIO.StringIOobject. [#2463]
astropy.io.registry#
Allow readers/writers with the same name to be attached to different classes. [#2312]
astropy.io.votable#
By default, floating point values are now written out using
reprrather thanstrto preserve precision [#2137]
astropy.modeling#
Fixed the
SIPandInverseSIPmodels both so that they work in the first place, and so that they return results consistent with the SIP functions inastropy.wcs. [#2177]
astropy.stats#
Ensure the
axiskeyword inastropy.stats.funcscan now be used for all axes. [#2173]
astropy.table#
Ensure nameless columns can be printed, using ‘None’ for the header. [#2213]
astropy.time#
Fixed pickling of
Timeobjects. [#2123]
astropy.units#
astropy.utils#
Progress bars will now be displayed inside the IPython qtconsole. [#2230]
data.download_file()now evaluatesREMOTE_TIMEOUT()at runtime rather than import time. Previously, settingREMOTE_TIMEOUTafter import had no effect on the function’s behavior. [#2302]Progressbar will be limited to 100% so that the bar does not exceed the terminal width. The numerical display can still exceed 100%, however.
astropy.vo#
astropy.wcs#
Misc#
Version 0.3.1 (2014-03-04)#
Bug Fixes#
astropy.config#
Fixed a bug where
ConfigurationItem.set_temp()does not reset to default value when exception is raised withinwithblock. [#2117]
astropy.convolution#
astropy.coordinates#
Fixed a bug where using
==on two array coordinates wouldn’t work. [#1832]Fixed bug which caused
len()not to work for coordinate objects and added a.shapeproperty to get appropriately array-like behavior. [#1761, #2014]Fixed a bug where sexagesimal notation would sometimes include exponential notation in the last field. [#1908, #1913]
CompositeStaticMatrixTransformno longer attempts to reference the undefined variableself.matrixduring instantiation. [#1944]Fixed pickling of
Longitude, ensuringwrap_angleis preserved [#1961]Allow
separgument inAngle.to_stringto be empty (resulting in no separators) [#1989]
astropy.io.ascii#
astropy.io.fits#
Ported all bug fixes from PyFITS 3.2.1. See the PyFITS changelog at https://pyfits.readthedocs.io/en/v3.2.1/ [#2056]
astropy.io.misc#
Fixed issues in the HDF5 Table reader/writer functions that occurred on Windows. [#2099]
astropy.io.votable#
The
write_null_valueskwarg toVOTable.to_xml, when set toFalse(the default) would produce non-standard VOTable files. Therefore, this functionality has been replaced by a better understanding that knows which fields in a VOTable may be left empty (onlychar,floatanddoublein VOTable 1.1 and 1.2, and all fields in VOTable 1.3). The kwarg is still accepted but it will be ignored, and a warning is emitted. [#1809]Printing out a
astropy.io.votable.tree.Tableobject usingreprorstrnow uses the pretty formatting inastropy.table, so it’s possible to easily preview the contents of aVOTable. [#1766]
astropy.modeling#
astropy.sphinx#
Added slightly more useful debug info for AstropyAutosummary. [#2024]
astropy.table#
The column string representation for n-dimensional cells with only one element has been fixed. [#1522]
Fix a problem that caused
MaskedColumn.__getitem__to not preserve column metadata. [#1471, #1872]With Numpy prior to version 1.6.2, tables with Unicode columns now sort correctly. [#1867]
astropy.tablecan now print out tables with Unicode columns containing non-ascii characters. [#1864]Columns can now be named with Unicode strings, as long as they contain only ascii characters. This makes using
astropy.tableeasier on Python 2 whenfrom __future__ import unicode_literalsis used. [#1864]Allow pickling of
Table,Column, andMaskedColumnobjects. [#792]Fix a problem where it was not possible to rename columns after sorting or adding a row. [#2039]
astropy.time#
Fix a problem where scale conversion problem in TimeFromEpoch was not showing a useful error [#2046]
Fix a problem when converting to one of the formats
unix,cxcsec,gpsorplot_datewhen the time scale isUT1,TDBorTCB[#1732]Ensure that
delta_ut1_utcgets calculated when accessed directly, instead of failing and giving a rather obscure error message [#1925]Fix a bug when computing the TDB to TT offset. The transform routine was using meters instead of kilometers for the Earth vector. [#1929]
Increase
__array_priority__so thatTimeDeltacan convert itself to aQuantityalso in reverse operations [#1940]Correct hop list from TCG to TDB to ensure that conversion is possible [#2074]
astropy.units#
Quantityinitialisation rewritten for speed [#1775]Fixed minor string formatting issue for dimensionless quantities. [#1772]
Fix error for inplace operations on non-contiguous quantities [#1834].
The definition of the unit
barhas been corrected to “1e5 Pascal” from “100 Pascal” [#1910]For units that are close to known units, but not quite, for example due to differences in case, the exception will now include recommendations. [#1870]
The generic and FITS unit parsers now accept multiple slashes in the unit string. There are multiple ways to interpret them, but the approach taken here is to convert “m/s/kg” to “m s-1 kg-1”. Multiple slashes are accepted, but discouraged, by the FITS standard, due to the ambiguity of parsing, so a warning is raised when it is encountered. [#1911]
The use of “angstrom” (with a lower case “a”) is now accepted in FITS unit strings, since it is in common usage. However, since it is not officially part of the FITS standard, a warning will be issued when it is encountered. [#1911]
Pickling unrecognized units will not raise a
AttributeError. [#2047]astropy.unitsnow correctly preserves the precision of fractional powers. [#2070]If a
UnitorQuantityis raised to a floating point power that is very close to a rational number with a denominator less than or equal to 10, it is converted to aFractionobject to preserve its precision through complex unit conversion operations. [#2070]
astropy.utils#
astropy.wcs#
astropy.wcs.WCS,astropy.wcs.WCS.fixandastropy.wcs.find_all_wcsnow have atranslate_unitskeyword argument that is passed down toastropy.wcs.Wcsprm.fix. This can be used to specify any unsafe translations of units from rarely used ones to more commonly used ones.Although
"S"is commonly used to represent seconds, its translation to"s"is potentially unsafe since the standard recognizes"S"formally as Siemens, however rarely that may be used. The same applies to"H"for hours (Henry), and"D"for days (Debye).When these sorts of changes are performed, a warning is emitted. [#1854]
When a unit is “fixed” by
astropy.wcs.WCS.fixorastropy.wcs.Wcsprm.unitfix, it now correctly reports theCUNITfield that was changed. [#1854]astropy.wcs.Wcs.printwcswill no longer warn thatcdeltis being ignored when none was present in the FITS file. [#1845]astropy.wcs.Wcsprm.setis called from within theastropy.wcs.WCSconstructor, therefore any invalid information in the keywords will be raised from the constructor, rather than on a subsequent call to a transformation method. [#1918]Fix a memory corruption bug when using
astropy.wcs.Wcs.subwithastropy.wcs.WCSSUB_CELESTIAL. [#1960]Fixed the
AttributeErrorexception that was raised when usingastropy.wcs.WCS.footprint_to_file. [#1912]Fixed a
NameErrorexception that was raised when usingastropy.wcs.validateor thewcslintscript. [#2053]Fixed a bug where named WCSes may be erroneously reported as
' 'when usingastropy.wcs.validateor thewcslintscript. [#2053]Fixed a bug where error messages about incorrect header keywords may not be propagated correctly, resulting in a “NULL error object in wcslib” message. [#2106]
Misc#
Other Changes and Additions#
A new function,
astropy.wcs.get_include, has been added to get the location of theastropy.wcsC header files. [#1755]The doctests in the
.rstfiles in thedocsfolder are now tested along with the other unit tests. This is in addition to the testing of doctests in docstrings that was already being performed. Seedocs/development/testguide.rstfor more information. [#1771]Fix a problem where import fails on Python 3 if setup.py exists in current directory. [#1877]
Version 0.3 (2013-11-20)#
New Features#
General
A top-level configuration item,
unicode_outputhas been added to control whether the Unicode string representation of certain objects will contain Unicode characters. For example, whenuse_unicodeisFalse(default):>>> from astropy import units as u >>> print(unicode(u.degree)) deg
When
use_unicodeisTrue:>>> from astropy import units as u >>> print(unicode(u.degree)) °
See handling-unicode for more information. [#1441]
astropy.utils.misc.find_api_pageis now imported into the top-level. This allows usage likeastropy.find_api_page(astropy.units.Quantity). [#1779]
astropy.convolution#
astropy.coordinates#
Two classes
astropy.coordinates.Longitudeandastropy.coordinates.Latitudehave been added. These are derived from the newAngleclass and used for all longitude-like (RA, azimuth, galactic L) and latitude-like coordinates (Dec, elevation, galactic B) respectively. TheLongitudeclass provides auto-wrapping capability andLatitudeperforms bounds checking.astropy.coordinates.Distancesupports conversion to and from distance modulii. [#1472]astropy.coordinates.SphericalCoordinateBaseand derived classes now support arrays of coordinates, enabling large speed-ups for some operations on multiple coordinates at the same time. These coordinates can also be indexed using standard slicing or any Numpy-compatible indexing. [#1535, #1615]Array coordinates can be matched to other array coordinates, finding the closest matches between the two sets of coordinates (see the
astropy.coordinates.matching.match_coordinates_3dandastropy.coordinates.matching.match_coordinates_skyfunctions). [#1535]
astropy.cosmology#
astropy.io.ascii#
Added support for writing IPAC format tables [#1152].
astropy.io.fits#
Added initial support for table columns containing pseudo-unsigned integers. This is currently enabled by using the
uint=Trueoption when opening files; any table columns with the correct BZERO value will be interpreted and returned as arrays of unsigned integers. [#906]Upgraded vendored copy of CFITSIO to v3.35, though backwards compatibility back to version v3.28 is maintained.
Added support for reading and writing tables using the Q format for columns. The Q format is identical to the P format (variable-length arrays) except that it uses 64-bit integers for the data descriptors, allowing more than 4 GB of variable-length array data in a single table.
Some refactoring of the table and
FITS_recmodules in order to better separate the details of the FITS binary and ASCII table data structures from the HDU data structures that encapsulate them. Most of these changes should not be apparent to users (but see API Changes below).
astropy.io.votable#
Updated to support the VOTable 1.3 draft. [#433]
Added the ability to look up and group elements by their utype attribute. [#622]
The format of the units of a VOTable file can be specified using the
unit_formatparameter. Note that units are still always written out using the CDS format, to ensure compatibility with the standard.
astropy.modeling#
Added a new framework for representing and evaluating mathematical models and for fitting data to models. See “What’s New in Astropy 0.3” in the documentation for further details. [#493]
astropy.stats#
Added robust statistics functions
astropy.stats.funcs.median_absolute_deviation,astropy.stats.funcs.biweight_location, andastropy.stats.funcs.biweight_midvariance. [#621]Added
astropy.stats.funcs.signal_to_noise_oir_ccdfor computing the signal to noise ratio for source being observed in the optical/IR using a CCD. [#870]Add
axis=intoption tostropy.stats.funcs.sigma_clipto allow clipping along a given axis for multidimensional data. [#1083]
astropy.table#
New columns can be added to a table via assignment to a non-existing column by name. [#726]
Added
joinfunction to perform a database-like join on two tables. This includes support for inner, left, right, and outer joins as well as metadata merging. [#903]Added
hstackandvstackfunctions to stack two or more tables. [#937]Tables now have a
.copymethod and include support forcopyanddeepcopy. [#1208]Added support for selecting and manipulating groups within a table with a database style
group_bymethod. [#1424]Table
readandwritefunctions now include rudimentary support reading and writing of FITS tables via the unified reading/writing interface. [#591]The
unitsanddtypesattributes and keyword arguments in Column, MaskedColumn, Row, and Table are now deprecated in favor of the single-tenseunitanddtype. [#1174]Setting a column from a Quantity now correctly sets the unit on the Column object. [#732]
Add
remove_rowandremove_rowsto remove table rows. [#1230]Added a new
Table.show_in_browsermethod that opens a web browser and displays the table rendered as HTML. [#1342]New tables can now be instantiated using a single row from an existing table. [#1417]
astropy.time#
New
Timeobjects can be instantiated from existingTimeobjects (but with different format, scale, etc.) [#889]Added a
Time.nowclassmethod that returns the current UTC time, similarly to Python’sdatetime.now. [#1061]Update internal time manipulations so that arithmetic with Time and TimeDelta objects maintains sub-nanosecond precision over a time span longer than the age of the universe. [#1189]
Use
astropy.utils.iersto providedelta_ut1_utc, so that automatic calculation of UT1 becomes possible. [#1145]Add
datetimeformat which allows converting to and from standard librarydatetime.datetimeobjects. [#860]Add
plot_dateformat which allows converting to and from the date representation used when plotting dates with matplotlib via thematplotlib.pyplot.plot_datefunction. [#860]Add
gpsformat (seconds since 1980-01-01 00:00:00 UTC, including leap seconds) [#1164]Add array indexing to Time objects [#1132]
Allow for arithmetic of multi-element and single-element Time and TimeDelta objects. [#1081]
Allow multiplication and division of TimeDelta objects by constants and arrays, as well as changing sign (negation) and taking the absolute value of TimeDelta objects. [#1082]
Allow comparisons of Time and TimeDelta objects. [#1171]
Support interaction of Time and Quantity objects that represent a time interval. [#1431]
astropy.units#
Added parallax equivalency for length-angle. [#985]
Added mass-energy equivalency. [#1333]
Added a new-style format method which will use format specifiers (like
0.03f) in new-style format strings for the Quantity’s value. Specifiers which can’t be applied to the value will fall back to the entire string representation of the quantity. [#1383]Added support for complex number values in quantities. [#1384]
Added new spectroscopic equivalencies for velocity conversions (relativistic, optical, and radio conventions are supported) [#1200]
The
spectralequivalency now also handles wave number.The
spectral_densityequivalency now also accepts a Quantity for the frequency or wavelength. It also handles additional flux units.Added Brightness Temperature (antenna gain) equivalency for conversion between \(T_B\) and flux density. [#1327]
Added percent unit, and allowed any string containing just a number to be interpreted as a scaled dimensionless unit. [#1409]
New-style format strings can be used to set the unit output format. For example,
"{0:latex}".format(u.km)will print with the latex formatter. [#1462]The
Unit.is_equivalentmethod can now take a tuple. In this case, the method returnsTrueif the unit is equivalent to any of the units listed in the tuple. [#1521]def_unitcan now take a 2-tuple of names of the form (short, long), where each entry is a list. This allows for handling strange units that might have multiple short names. [#1543]Added
dimensionless_anglesequivalency, which allows conversion of any power of radian to dimensionless. [#1161]Added the ability to enable set of units, or equivalencies that are used by default. Also provided context managers for these cases. [#1268]
Added an
astropy.units.add_enabled_unitscontext manager, which allows creating a temporary context with additional units temporarily enabled in the global units namespace. [#1662]Unitinstances now have.siand.cgsproperties a laQuantity. These serve as shortcuts forUnit.to_system(cgs)[0]etc. [#1610]
astropy.vo#
New package added to support Virtual Observatory Simple Cone Search query and service validation. [#552]
astropy.wcs#
astropy.utils#
Added a new set of utilities in
astropy.utils.timerfor analyzing the runtime of functions and making runtime predections for larger inputs. [#743]ProgressBarandSpinnerclasses can now be used directly to return generator expressions. [#771]Added
astropy.utils.ierswhich allows reading in of IERS A or IERS B bulletins and interpolation in UT1-UTC.Added a function
astropy.utils.find_api_page–given a class or object from theastropypackage, this will open that class’s API documentation in a web browser. [#663]Data download functions such as
download_filenow accept ashow_progressargument to suppress console output, and atimeoutargument. [#865, #1258]
astropy.extern.six#
Added six for python2/python3 compatibility
Astropy now uses the ERFA library instead of the IAU SOFA library for fundamental time transformation routines. The ERFA library is derived, with permission, from the IAU SOFA library but is distributed under a BSD license. See
license/ERFA.rstfor details. [#1293]
astropy.logger#
The Astropy logger now no longer catches exceptions by default, and also only captures warnings emitted by Astropy itself (prior to this change, following an import of Astropy, any warning got re-directed through the Astropy logger). Logging to the Astropy log file has also been disabled by default. However, users of Astropy 0.2 will likely still see the previous behavior with Astropy 0.3 for exceptions and logging to file since the default configuration file installed by 0.2 set the exception logging to be on by default. To get the new behavior, set the
log_exceptionsandlog_to_fileconfiguration items toFalsein theastropy.cfgfile. [#1331]
API Changes#
General
The configuration option
utils.console.use_unicodehas been moved to the top level and renamed tounicode_output. It now not only affects console widgets, such as progress bars, but also controls whether callingunicodeon certain classes will return a string containing unicode characters.
astropy.coordinates#
The
astropy.coordinates.Angleclass is now a subclass ofastropy.units.Quantity. This means it has all of the methods of anumpy.ndarray. [#1006]The
astropy.coordinates.Distanceclass is now a subclass ofastropy.units.Quantity. This means it has all of the methods of anumpy.ndarray. [#1472]All angular units are now supported, not just
radian,degreeandhour, but nowarcsecondandarcminuteas well. The object will retain its native unit, so when printing out a value initially provided in hours, itsto_string()will, by default, also be expressed in hours.The
Angleclass now supports arrays of angles.To be consistent with
units.Unit,Angle.formathas been deprecated and renamed toAngle.to_string.To be consistent with
astropy.units, all plural forms of unit names have been removed. Therefore, the following properties ofastropy.coordinates.Angleshould be renamed:radians->radiandegrees->degreehours->hourMultiplication and division of two
Angleobjects used to raiseNotImplementedError. Now they raiseTypeError.The
astropy.coordinates.Angleclass no longer has aboundsattribute so there is no bounds-checking or auto-wrapping at this level. This allowsAngleobjects to be used in arbitrary arithmetic expressions (e.g. coordinate distance computation).The
astropy.coordinates.RAandastropy.coordinates.Decclasses have been removed and replaced withastropy.coordinates.Longitudeandastropy.coordinates.Latituderespectively. These are now used for the components of Galactic and Horizontal (Alt-Az) coordinates as well instead of plainAngleobjects.astropy.coordinates.angles.rotation_matrixandastropy.coordinates.angles.angle_axisnow take aunitkwarg instead ofdegreeskwarg to specify the units of the angles.rotation_matrixwill also take the unit from the givenAngleobject if no unit is provided.The
AngularSeparationclass has been removed. The output of the coordinatesseparation()method is now anastropy.coordinates.Angle. [#1007]The coordinate classes have been renamed in a way that remove the
Coordinatesat the end of the class names. E.g.,ICRSCoordinatesfrom previous versions is now calledICRS. [#1614]HorizontalCoordinatesare now namedAltAz, to reflect more common terminology.
astropy.cosmology#
The Planck (2013) cosmology will likely give slightly different (and more accurate) results due to the inclusion of Neutrino masses. [#1364]
Cosmology class properties now return
Quantityobjects instead of simple floating-point values. [#1237]The names of cosmology instances are now truly optional, and are set to
Nonerather than the name of the class if the user does not provide them. [#1705]
astropy.io.ascii#
In the
readmethod ofastropy.io.ascii, empty column values in an ASCII table are now treated as missing values instead of the previous treatment as a zero-length string “”. This now corresponds to the behavior of other table readers likenumpy.genfromtxt. To restore the previous behavior setfill_values=Nonein the call toascii.read(). [#919]The
readandwritemethods ofastropy.io.asciinow have aformatargument for specifying the file format. This is the preferred way to choose the format instead of theReaderandWriterarguments. [#961]The
include_namesandexclude_namesarguments were removed from theBaseHeaderinitializer, and now instead handled by the reader and writer classes directly. [#1350]Allow numeric and otherwise unusual column names when reading a table where the
formatargument is specified, but other format details such as the delimiter or quote character are being guessed. [#1692]When reading an ASCII table using the
Table.read()method, the default has changed fromguess=Falsetoguess=Trueto allow auto-detection of file format. This matches the default behavior ofascii.read().
astropy.io.fits#
The
astropy.io.fits.new_tablefunction is marked “pending deprecation”. This does not mean it will be removed outright or that its functionality has changed. It will likely be replaced in the future for a function with similar, if not subtly different functionality. A better, if not slightly more verbose approach is to usepyfits.FITS_rec.from_columnsto create a newFITS_rectable–this has the same interface aspyfits.new_table. The difference is that it returns a planFITS_recarray, and not an HDU instance. ThisFITS_recobject can then be used as the data argument in the constructors forBinTableHDU(for binary tables) orTableHDU(for ASCII tables). This is analogous to creating anImageHDUby passing in an image array.pyfits.FITS_rec.from_columnsis just a simpler way of creating a FITS-compatible recarray from a FITS column specification.The
updateHeader,updateHeaderData, andupdateCompressedDatamethods of theCompDataHDUclass are pending deprecation and moved to internal methods. The operation of these methods depended too much on internal state to be used safely by users; instead they are invoked automatically in the appropriate places when reading/writing compressed image HDUs.The
CompDataHDU.compDataattribute is pending deprecation in favor of the clearer and more PEP-8 compatibleCompDataHDU.compressed_data.The constructor for
CompDataHDUhas been changed to accept new keyword arguments. The new keyword arguments are essentially the same, but are in underscore_separated format rather than camelCase format. The old arguments are still pending deprecation.The internal attributes of HDU classes
_hdrLoc,_datLoc, and_datSpanhave been replaced with_header_offset,_data_offset, and_data_sizerespectively. The old attribute names are still pending deprecation. This should only be of interest to advanced users who have created their own HDU subclasses.The following previously deprecated functions and methods have been removed entirely:
createCard,createCardFromString,upperKey,ColDefs.data,setExtensionNameCaseSensitive,_File.getfile,_TableBaseHDU.get_coldefs,Header.has_key,Header.ascardlist.Interfaces that were pending deprecation are now fully deprecated. These include:
create_card,create_card_from_string,upper_key,Header.get_history, andHeader.get_comment.The
.nameattribute on HDUs is now directly tied to the HDU’s header, so that if.header['EXTNAME']changes so does.nameand vice-versa.
astropy.io.registry#
astropy.io.votable#
Added a new option
use_names_over_idsoption to use when converting from VOTable objects to Astropy Tables. This can prevent a situation where column names are not preserved when converting from a VOTable. [#609]
astropy.nddata#
The
astropy.nddata.convolutionsub-package has now been moved toastropy.convolution, and themake_kernelfunction has been removed. (the kernel classes should be used instead) [#1451]
astropy.stats.funcs#
For
sigma_clip, themaoutoptional parameter has been removed, and the function now always returns a masked array. A new boolean parametercopycan be used to indicated whether the input data should be copied (copy=True, default) or used by reference (copy=False) in the output masked array. [#1083]
astropy.table#
The first argument to the
ColumnandMaskedColumnclasses is now the data array–thenameargument has been changed to an optional keyword argument. [#840]Added support for instantiating a
Tablefrom a list of dict, each one representing a single row with the keys mapping to column names. [#901]The plural ‘units’ and ‘dtypes’ have been switched to ‘unit’ and ‘dtype’ where appropriate. The original attributes are still present in this version as deprecated attributes, but will be removed in the next version. [#1174]
The
copymethods ofColumnandMaskedColumnwere changed so that the first argument is noworder='C'. This is required for compatibility with Numpy 1.8 which is currently in development. [#1250]Comparing a column (with == or !=) to a scalar, an array, or another column now always returns a boolean Numpy array (which is a masked array if either of the arguments in the comparison was masked). This is in contrast to the previous behavior, which in some cases returned a boolean Numpy array, and in some cases returned a boolean Column object. [#1446]
astropy.time#
For consistency with
Quantity, the attributesvalandis_scalarhave been renamed tovalueandisscalar, respectively, and the attributevalshas been dropped. [#767]The double-float64 internal representation of time is used more efficiently to enable better accuracy. [#366]
Format and scale arguments are now allowed to be case-insensitive. [#1128]
astropy.units#
The
Quantityclass now inherits from the Numpy array class, and includes the following API changes [#929]:Using
float(...),int(...), andlong(...)on a quantity will now only work if the quantity is dimensionless and unscaled.All Numpy ufuncs should now treat units correctly (or raise an exception if not supported), rather than extract the value of quantities and operate on this, emitting a warning about the implicit loss of units.
When using relevant Numpy ufuncs on dimensionless quantities (e.g.
np.exp(h * nu / (k_B * T))), or combining dimensionless quantities with Python scalars or plain Numpy arrays1 + v / c, the dimensionless Quantity will automatically be converted to an unscaled dimensionless Quantity.When initializing a quantity from a value with no unit, it is now set to be dimensionless and unscaled by default. When initializing a Quantity from another Quantity and with no unit specified in the initializer, the unit is now taken from the unit of the Quantity being initialized from.
Strings are no longer allowed as the values for Quantities. [#1005]
Quantities are always comparable with zero regardless of their units. [#1254]
The exception
astropy.units.UnitsExceptionhas been renamed toastropy.units.UnitsErrorto be more consistent with the naming of built-in Python exceptions. [#1406]Multiplication with and division by a string now always returns a Unit (rather than a Quantity when the string was first) [#1408]
Imperial units are disabled by default.
astropy.wcs#
Bug Fixes#
astropy.io.ascii#
The
write()function was ignoring thefill_valuesargument. [#910]Fixed an issue in
DefaultSplitter.joinwhere the delimiter attribute was ignored when writing the CSV. [#1020]Fixed writing of IPAC tables containing null values. [#1366]
When a table with no header row was read without specifying the format and using the
namesargument, then the first row could be dropped. [#1692]
astropy.io.fits#
Binary tables containing compressed images may, optionally, contain other columns unrelated to the tile compression convention. Although this is an uncommon use case, it is permitted by the standard.
Reworked some of the file I/O routines to allow simpler, more consistent mapping between OS-level file modes (‘rb’, ‘wb’, ‘ab’, etc.) and the more “PyFITS-specific” modes used by PyFITS like “readonly” and “update”. That is, if reading a FITS file from an open file object, it doesn’t matter as much what “mode” it was opened in so long as it has the right capabilities (read/write/etc.) Also works around bugs in the Python io module in 2.6+ with regard to file modes.
Fixed a long-standing issue where writing binary tables did not correctly write the TFORMn keywords for variable-length array columns (they omitted the max array length parameter of the format). This was thought fixed in an earlier version, but it was only fixed for compressed image HDUs and not for binary tables in general.
astropy.nddata#
Fixed crash when trying to multiple or divide
NDDataobjects with uncertainties. [#1547]
astropy.table#
astropy.time#
Timescale and format attributes are now shown when callingdir()on aTimeobject. [#1130]
astropy.wcs#
Fixed assignment to string-like WCS attributes on Python 3. [#956]
astropy.units#
Misc#
Fixed various modules that hard-coded
sys.stdoutas default arguments to functions at import time, rather than using the runtime value ofsys.stdout. [#1648]Minor documentation fixes and enhancements [#922, #1034, #1210, #1217, #1491, #1492, #1498, #1582, #1608, #1621, #1646, #1670, #1756]
Fixed a crash that could sometimes occur when running the test suite on systems with platform names containing non-ASCII characters. [#1698]
Other Changes and Additions#
General
Astropy now follows the PSF Code of Conduct. [#1216]
Astropy’s test suite now tests all doctests in inline docstrings. Support for running doctests in the reST documentation is planned to follow in v0.3.1.
Astropy’s test suite can be run on multiple CPUs in parallel, often greatly improving runtime, using the
--paralleloption. [#1040]A warning is now issued when using Astropy with Numpy < 1.5–much of Astropy may still work in this case but it shouldn’t be expected to either. [#1479]
Added automatic download/build/installation of Numpy during Astropy installation if not already found. [#1483]
Handling of metadata for the
NDDataandTableclasses has been unified by way of a commonMetaDatadescriptor–it allows instantiating an object with metadata of any mapping type, and subsequently prevents replacing the mapping stored in the.metaattribute (only direct updates to that object are allowed). [#1686]
astropy.coordinates#
Angles containing out of bounds minutes or seconds (e.g. 60) can be parsed–the value modulo 60 is used with carry to the hours/minutes, and a warning is issued rather than raising an exception. [#990]
astropy.io.fits#
The new compression code also adds support for the ZQUANTIZ and ZDITHER0 keywords added in more recent versions of this FITS Tile Compression spec. This includes support for lossless compression with GZIP. (#198) By default no dithering is used, but the
SUBTRACTIVE_DITHER_1andSUBTRACTIVE_DITHER_2methods can be enabled by passing the correct constants to thequantize_methodargument to theCompImageHDUconstructor. A seed can be manually specified, or automatically generated using either the system clock or checksum-based methods via thedither_seedargument. See the documentation forCompImageHDUfor more details.Images compressed with the Tile Compression standard can now be larger than 4 GB through support of the Q format.
All HDUs now have a
.ver.levelattribute that returns the value of the EXTVAL and EXTLEVEL keywords from that HDU’s header, if the exist. This was added for consistency with the.nameattribute which returns the EXTNAME value from the header.Then
ColumnandColDefsclasses have new.dtypeattributes which give the Numpy dtype for the column data in the first case, and the full Numpy compound dtype for each table row in the latter case.There was an issue where new tables created defaulted the values in all string columns to ‘0.0’. Now string columns are filled with empty strings by default–this seems a less surprising default, but it may cause differences with tables created with older versions of PyFITS or Astropy.
astropy.io.misc#
The HDF5 reader can now refer to groups in the path as well as datasets; if given a group, the first dataset in that group is read. [#1159]
astropy.nddata#
NDDataobjects have more helpful, though still rudimentary__str__` and ``__repr__displays. [#1313]
astropy.units#
astropy.wcs#
Version 0.2.5 (2013-10-25)#
Bug Fixes#
astropy.coordinates#
astropy.io.ascii#
astropy.io.fits#
Improved round-tripping and preservation of manually assigned column attributes (
TNULLn,TSCALn, etc.) in table HDU headers. (Note: This issue was previously reported as fixed in Astropy v0.2.2 by mistake; it is not fixed until v0.3.) [#996]Fixed a bug that could cause a segfault when trying to decompress an compressed HDU whose contents are truncated (due to a corrupt file, for example). This still causes a Python traceback but better that than a segfault. [#1332]
Newly created
CompImageHDUHDUs use the correct value of theDEFAULT_COMPRESSION_TYPEmodule-level constant instead of hard-coding “RICE_1” in the header.Fixed a corner case where when extra memory is allocated to compress an image, it could lead to unnecessary in-memory copying of the compressed image data and a possible memory leak through Numpy.
Fixed a bug where assigning from an mmap’d array in one FITS file over the old (also mmap’d) array in another FITS file failed to update the destination file. Corresponds to PyFITS issue 25.
Some miscellaneous documentation fixes.
astropy.io.votable#
astropy.nddata.convolution#
Prevented in-place modification of the input arrays to
convolve(). [#1153]
astropy.table#
Added HTML escaping for string values in tables when outputting the table as HTML. [#1347]
Added a workaround in a bug in Numpy that could cause a crash when accessing a table row in a masked table containing
dtype=objectcolumns. [#1229]Fixed an issue similar to the one in #1229, but specific to unmasked tables. [#1403]
astropy.units#
Improved error handling for unparsable units and fixed parsing CDS units without mantissas in the exponent. [#1288]
Added a physical type for spectral flux density. [#1410]
Normalized conversions that should result in a scale of exactly 1.0 to round off slight floating point imprecisions. [#1407]
Added support in the CDS unit parser/formatter for unusual unit prefixes that are nonetheless required to be supported by that convention. [#1426]
Fixed the parsing of
sqrt()in unit format strings which was returningunit ** 2instead ofunit ** 0.5. [#1458]
astropy.wcs#
When passing a single array to the wcs transformation functions, (
astropy.wcs.Wcs.all_pix2world, etc.), its second dimension must now exactly match the number of dimensions in the transformation. [#1395]Improved error message when incorrect arguments are passed to
WCS.wcs_world2pix. [#1394]Fixed a crash when trying to read WCS from FITS headers on Python 3.3 in Windows. [#1363]
Only headers that are required as part of the WCSLIB C API are installed by the package, per request of system packagers. [#1666]
Misc#
Fixed crash when the
COLUMNSenvironment variable is set to a non-integer value. [#1291]Fixed a bug in
ProgressBar.mapwheremultiprocess=Truecould cause it to hang on waiting for the process pool to be destroyed. [#1381]Fixed a crash on Python 3.2 when affiliated packages try to use the
astropy.utils.data.get_pkg_data_*functions. [#1256]Fixed a minor path normalization issue that could occur on Windows in
astropy.utils.data.get_pkg_data_filename. [#1444]Fixed an annoyance where configuration items intended only for testing showed up in users’ astropy.cfg files. [#1477]
Prevented crashes in exception logging in unusual cases where no traceback is associated with the exception. [#1518]
Fixed a crash when running the tests in unusual environments where
sys.stdout.encodingisNone. [#1530]Miscellaneous documentation fixes and improvements [#1308, #1317, #1377, #1393, #1362, #1516]
Other Changes and Additions#
Astropy installation now requests setuptools >= 0.7 during build/installation if neither distribute or setuptools >= 0.7 is already installed. In other words, if
import setuptoolsfails,ez_setup.pyis used to bootstrap the latest setuptools (rather than usingdistribute_setup.pyto bootstrap the now obsolete distribute package). [#1197]When importing Astropy from a source checkout without having built the extension modules first an
ImportErroris raised rather than aSystemExitexception. [#1269]
Version 0.2.4 (2013-07-24)#
Bug Fixes#
astropy.coordinates#
Fixed the angle parser to support parsing the string “1 degree”. [#1168]
astropy.cosmology#
Fixed a crash in the
comoving_volumemethod on non-flat cosmologies when passing it an array of redshifts.
astropy.io.ascii#
Fixed a bug that prevented saving changes to the comment symbol when writing changes to a table. [#1167]
astropy.io.fits#
Added a workaround for a bug in 64-bit OSX that could cause truncation when writing files greater than 2^32 bytes in size. [#839]
astropy.io.votable#
Fixed incorrect reading of tables containing multiple
<RESOURCE>elements. [#1223]
astropy.table#
astropy.units#
Misc#
Fixed an installation crash that could occur sometimes on Debian/Ubuntu and other *NIX systems where
pkg_resourcescan be installed without installingsetuptools. [#1150]Updated the
distribute_setup.pybootstrapper to use setuptools >= 0.7 when installing on systems that don’t already have an up to date version of distribute/setuptools. [#1180]Changed the
version.pytemplate so that Astropy affiliated packages can (and they should) use their owncython_version.pyandutils._compilermodules where appropriate. This issue only pertains to affiliated package maintainers. [#1198]Fixed a corner case where the default config file generation could crash if building with matplotlib but not Sphinx installed in a virtualenv. [#1225]
Fixed a crash that could occur in the logging module on systems that don’t have a default preferred encoding (in particular this happened in some versions of PyCharm). [#1244]
The Astropy log now supports passing non-string objects (and calling
str()on them by default) to the logging methods, in line with Python’s standard logging API. [#1267]Minor documentation fixes [#582, #696, #1154, #1194, #1212, #1213, #1246, #1252]
Other Changes and Additions#
astropy.cosmology#
Added a new
Plank13object representing the Plank 2013 results. [#895]
astropy.units#
Performance improvements in initialization of
Quantityobjects with a large number of elements. [#1231]
Version 0.2.3 (2013-05-30)#
Bug Fixes#
astropy.time#
Misc#
Fixed a regression that was introduced in v0.2.2 by the fix to issue #992 that was preventing installation of Astropy affiliated packages that use Astropy’s setup framework. [#1124]
Version 0.2.2 (2013-05-21)#
Bug Fixes#
astropy.io#
Fixed issues in both the
fitsandvotablesub-packages where array byte order was not being handled consistently, leading to possible crashes especially on big-endian systems. [#1003]
astropy.io.fits#
When an error occurs opening a file in fitsdiff the exception message will now at least mention which file had the error.
Fixed a couple cases where creating a new table using TDIMn in some of the columns could cause a crash.
Slightly refactored how tables containing variable-length array columns are handled to add two improvements: Fixes an issue where accessing the data after a call to the
astropy.io.fits.getdataconvenience function caused an exception, and allows the VLA data to be read from an existing mmap of the FITS file.Fixed a bug on Python 3 where attempting to open a non-existent file on Python 3 caused a seemingly unrelated traceback.
Fixed an issue in the tests that caused some tests to fail if Astropy is installed with read-only permissions.
Fixed a bug where instantiating a
BinTableHDUfrom a numpy array containing boolean fields converted all the values toFalse.Fixed an issue where passing an array of integers into the constructor of
Column()when the column type is floats of the same byte width caused the column array to become garbled.Fixed inconsistent behavior in creating CONTINUE cards from byte strings versus unicode strings in Python 2–CONTINUE cards can now be created properly from unicode strings (so long as they are convertible to ASCII).
Fixed a bug in parsing HIERARCH keywords that do not have a space after the first equals sign (before the value).
Prevented extra leading whitespace on HIERARCH keywords from being treated as part of the keyword.
Fixed a bug where HIERARCH keywords containing lower-case letters was mistakenly marked as invalid during header validation along with an ancillary issue where the
Header.index()method id not work correctly with HIERARCH keywords containing lower-case letters.Disallowed assigning NaN and Inf floating point values as header values, since the FITS standard does not define a way to represent them in. Because this is undefined, the previous behavior did not make sense and produced invalid FITS files. [#954]
Fixed an obscure issue that can occur on systems that don’t have flush to memory-mapped files implemented (namely GNU Hurd). [#968]
astropy.io.votable#
astropy.nddata.convolution#
Fixed an issue in
make_kernel()when using an Airy function kernel. Also removed the superfluous ‘brickwall’ option. [#939]
astropy.table#
astropy.time#
Added appropriate
__copy__and__deepcopy__behavior; this omission caused a seemingly unrelated error in FK5 coordinate separation. [#891]
astropy.units#
Fixed an issue where the
isiterable()utility returnedTruefor quantities with scalar values. Added an__iter__method for theQuantityclass and fixedisiterable()to catch false positives. [#878]Fixed previously undefined behavior when multiplying a unit by a string. [#949]
Added ‘time’ as a physical type–this was a simple omission. [#959]
Fixed issues with pickling unit objects so as to play nicer with the multiprocessing module. [#974]
Made it more difficult to accidentally override existing units with a new unit of the same name. [#1070]
Added several more physical types and units that were previously omitted, including ‘mass density’, ‘specific volume’, ‘molar volume’, ‘momentum’, ‘angular momentum’, ‘angular speed’, ‘angular acceleration’, ‘electric current’, ‘electric current density’, ‘electric field strength’, ‘electric flux density’, ‘electric charge density’, ‘permittivity’, ‘electromagnetic field strength’, ‘radiant intensity’, ‘data quantity’, ‘bandwidth’; and ‘knots’, ‘nautical miles’, ‘becquerels’, and ‘curies’ respectively. [#1072]
Misc#
Fixed a permission error that could occur when running
astropy.test()on Python 3 when Astropy is installed as root. [#811]Made it easier to filter warnings from the
convolve()function and fromQuantityobjects. [#853]Fixed a crash that could occur in Python 3 when generation of the default config file fails during setup. [#952]
Fixed an unrelated error message that could occur when trying to import astropy from a source checkout without having build the extension modules first. This issue was claimed to be fixed in v0.2.1, but the fix itself had a bug. [#971]
Fixed a crash that could occur when running the
build_sphinxsetup command in Python 3. [#977]Added a more helpful error message when trying to run the
setup.py build_sphinxcommand when Sphinx is not installed. [#1027]Minor documentation fixes and restructuring. [#935, #967, #978, #1004, #1028, #1047]
Other Changes and Additions#
Some performance improvements to the
astropy.unitspackage, in particular improving the time it takes to import the sub-package. [#1015]
Version 0.2.1 (2013-04-03)#
Bug Fixes#
astropy.coordinates#
astropy.io.fits#
Properly supports the ZQUANTIZ keyword used to support quantization level–this includes working support for lossless GZIP compression of images.
Fixed support for opening gzipped FITS files in a writeable mode. [#256]
Added a more helpful exception message when trying to read invalid values from a table when the required
TNULLnkeyword is missing. [#309]More refactoring of the tile compression handling to work around a potential memory access violation that was particularly prevalent on Windows. [#507]
Fixed an integer size mismatch in the compression module that could affect 32-bit systems. [#786]
Fixed malformatting of the
TFORMnkeywords when writing compressed image tables (they omitted the max array length parameter from the variable-length array format).Fixed a crash that could occur when writing a table containing multi- dimensional array columns from an existing file into a new file.
Fixed a bug in fitsdiff that reported two header keywords containing NaN as having different values.
astropy.io.votable#
Fixed links to the
astropy.io.votabledocumentation in the VOTable validator output. [#806]When reading VOTables containing integers that are out of range for their column type, display a warning rather than raising an exception. [#825]
Changed the default string format for floating point values for better round-tripping. [#856]
Fixed opening VOTables through the
Table.read()interface for tables that have no names. [#927]Fixed creation of VOTables from an Astropy table that does not have a data mask. [#928]
Minor documentation fixes. [#932]
astropy.nddata.convolution#
Added better handling of
infvalues to theconvolve_fftfamily of functions. [#893]
astropy.table#
Fixed silent failure to assign values to a row on multiple columns. [#764]
Fixed various buggy behavior when viewing a table after sorting by one of its columns. [#829]
Fixed using
numpy.where()with table indexing. [#838]Fixed a bug where opening a remote table with
Table.read()could cause the entire table to be downloaded twice. [#845]Fixed a bug where
MaskedColumnno longer worked if the column being masked is renamed. [#916]
astropy.units#
astropy.wcs#
Misc#
Fixed a minor issue when installing with
./setup.py developon a fresh git clone. This is likely only of interest to developers on Astropy. [#725]Fixes a crash with
ImportError: No module named 'astropy.version'when running setup.py from a source checkout for the first time on OSX with Python 3.3. [#820]Fixed an installation issue where running
./setup.py installor when installing with pip the.astropydirectory gets created in the home directory of the user running the command. The user’s.astropydirectory should only be created when they use Astropy, not when they install it. [#867]Fixed an exception when creating a
ProgressBarwith a “total” of 0. [#752]Added better documentation of behavior that can occur when trying to import the astropy package from within a source checkout without first building the extension modules. [#795, #864]
Added link to the installation instructions in the README. [#797]
Catches segfaults in xmllint which can occur sometimes and is otherwise out of our control. [#803]
Minor changes to the documentation template. [#805]
Fixed a minor exception handling bug in
download_file(). [#808]Added cleanup of any temporary files if an error occurs in
download_file(). [#857]Filesystem free space is checked for before attempting to download a file with
download_file(). [#858]Fixed package data locating to work across symlinks–required to work with some OS packaging layouts. [#827]
Fixed a bug when building Cython extensions where hidden files containing
.pyxextensions could cause the build to crash. This can be an issue with software and filesystems that autogenerate hidden files. [#834]Fixed bug that could cause a “script” called README.rst to be installed in a bin directory. [#852]
Fixed some miscellaneous and mostly rare reference leaks caught by cpychecker. [#914]
Other Changes and Additions#
Added logo and branding for Windows binary installers. [#741]
Upgraded included version libexpat to 2.1.0. [#781]
~25% performance improvement in unit composition/decomposition. [#836]
Added previously missing LaTeX formatting for
L_sunandR_sun. [#841]ConfigurationItems now have a more useful and informative __repr__ and improved documentation for how to use them. [#855]
Added a friendlier error message when trying to import astropy from a source checkout without first building the extension modules inplace. [#864]
py.test now outputs more system information for help in debugging issues from users. [#869]
Added unit definitions “mas” and “uas” for “milliarcsecond” and “microarcsecond” respectively. [#892]
Version 0.2 (2013-02-19)#
New Features#
astropy.coordinates#
This new subpackage contains a representation of celestial coordinates, and provides a wide range of related functionality. While fully-functional, it is a work in progress and parts of the API may change in subsequent releases.
astropy.cosmology#
Update to include cosmologies with variable dark energy equations of state. (This introduces some API incompatibilities with the older Cosmology objects).
Added parameters for relativistic species (photons, neutrinos) to the astropy.cosmology classes. The current treatment assumes that neutrinos are massless. [#365]
Add a WMAP9 object using the final (9-year) WMAP parameters from Hinshaw et al. 2013. It has also been made the default cosmology. [#629, #724]
astropy.table I/O infrastructure for custom readers/writers implemented. [#305]
Added support for reading/writing HDF5 files [#461]
Added support for masked tables with missing or invalid data [#451]
New
astropy.timesub-package. [#332]New
astropy.unitssub-package that includes a class for units (astropy.units.Unit) and scalar quantities that have units (astropy.units.Quantity). [#370, #445]This has the following effects on other sub-packages:
In
astropy.wcs, thewcs.cunitlist now takes and returnsastropy.units.Unitobjects. [#379]In
astropy.nddata, units are now stored asastropy.units.Unitobjects. [#382]In
astropy.table, units on columns are now stored asastropy.units.Unitobjects. [#380]In
astropy.constants, constants are now stored asastropy.units.Quantityobjects. [#529]
astropy.io.ascii#
Improved integration with the
astropy.tableTable class so that table and column metadata (e.g. keywords, units, description, formatting) are directly available in the output table object. The CDS, DAOphot, and IPAC format readers now provide this type of integrated metadata.Changed to using
astropy.tablemasked tables instead of NumPy masked arrays for tables with missing values.Added SExtractor table reader to
astropy.io.ascii[#420]Removed the Memory reader class which was used to convert data input passed to the
writefunction into an internal table. Insteadwriteinstantiates an astropy Table object using the data input towrite.Removed the NumpyOutputter as the output of reading a table is now always a
Tableobject.Removed the option of supplying a function as a column output formatter.
Added a new
strip_whitespacekeyword argument to thewritefunction. This controls whether whitespace is stripped from the left and right sides of table elements before writing. Default is True.Fixed a bug in reading IPAC tables with null values.
Generalized I/O infrastructure so that
astropy.nddatacan also have custom readers/writers [#659]
astropy.wcs#
From updating the underlying wcslib 4.16:
When
astropy.wcs.WCSconstructs a default coordinate representation it will give it the special name “DEFAULTS”, and will not report “Found one coordinate representation”.
Other Changes and Additions#
A configuration file with all options set to their defaults is now generated when astropy is installed. This file will be pulled in as the users’ astropy configuration file the first time they
import astropy. [#498]Astropy doc themes moved into
astropy.sphinxto allow affiliated packages to access them.Added expanded documentation for the
astropy.cosmologysub-package. [#272]Added option to disable building of “legacy” packages (pyfits, vo, etc.).
The value of the astronomical unit (au) has been updated to that adopted by IAU 2012 Resolution B2, and the values of the pc and kpc constants have been updated to reflect this. [#368]
Added links to the documentation pages to directly edit the documentation on GitHub. [#347]
Several updates merged from
pywcsintoastropy.wcs[#384]:Improved the reading of distortion images.
Added a new option to choose whether or not to write SIP coefficients.
Uses the
relaxoption by default so that non-standard keywords are allowed. [#585]Added HTML representation of tables in IPython notebook [#409]
Rewrote CFITSIO-based backend for handling tile compression of FITS files. It now uses a standard CFITSIO instead of heavily modified pieces of CFITSIO as before. Astropy ships with its own copy of CFITSIO v3.30, but system packagers may choose instead to strip this out in favor of a system-installed version of CFITSIO. This corresponds to PyFITS ticket 169. [#318]
Moved
astropy.config.datatoastropy.utils.dataand re-factored the I/O routines to separate out the generic I/O code that can be used to open any file or resource from the code used to access Astropy-related data. The ‘core’ I/O routine is nowget_readable_fileobj, which can be used to access any local as well as remote data, supports caching, and can decompress gzip and bzip2 files on-the-fly. [#425]Added a classmethod to
astropy.coordinates.coordsystems.SphericalCoordinatesBasethat performs a name resolve query using Sesame to retrieve coordinates for the requested object. This works for any subclass ofSphericalCoordinatesBase, but requires an internet connection. [#556]astropy.nddata.convolution removed requirement of PyFFTW3; uses Numpy’s FFT by default instead with the added ability to specify an FFT implementation to use. [#660]
Bug Fixes#
astropy.io.ascii#
astropy.io.fits#
Improved handling of scaled images and pseudo-unsigned integer images in compressed image HDUs. They now work more transparently like normal image HDUs with support for the
do_not_scale_image_dataanduintoptions, as well asscale_backandsave_backup. The.scale()method works better too. Corresponds to PyFITS ticket 88.Permits non-string values for the EXTNAME keyword when reading in a file, rather than throwing an exception due to the malformatting. Added verification for the format of the EXTNAME keyword when writing. Corresponds to PyFITS ticket 96.
Added support for EXTNAME and EXTVER in PRIMARY HDUs. That is, if EXTNAME is specified in the header, it will also be reflected in the
.nameattribute and infits.info(). These keywords used to be verboten in PRIMARY HDUs, but the latest version of the FITS standard allows them. Corresponds to PyFITS ticket 151.HCOMPRESS can again be used to compress data cubes (and higher-dimensional arrays) so long as the tile size is effectively 2-dimensional. In fact, compatible tile sizes will automatically be used even if they’re not explicitly specified. Corresponds to PyFITS ticket 171.
Fixed a bug that could cause a deadlock in the filesystem on OSX when reading the data from certain types of FITS files. This only occurred when used in conjunction with Numpy 1.7. [#369]
Added support for the optional
endcardparameter in theHeader.fromtextfile()andHeader.totextfile()methods. Althoughendcard=Falsewas a reasonable default assumption, there are still text dumps of FITS headers that include the END card, so this should have been more flexible. Corresponds to PyFITS ticket 176.Fixed a crash when running fitsdiff on two empty (that is, zero row) tables. Corresponds to PyFITS ticket 178.
Fixed an issue where opening a FITS file containing a random group HDU in update mode could result in an unnecessary rewriting of the file even if no changes were made. This corresponds to PyFITS ticket 179.
Fixed a crash when generating diff reports from diffs using the
ignore_commentsoptions. Corresponds to PyFITS ticket 181.Fixed some bugs with WCS distortion paper record-valued keyword cards:
Cards that looked kind of like RVKCs but were not intended to be were over-permissively treated as such–commentary keywords like COMMENT and HISTORY were particularly affected. Corresponds to PyFITS ticket 183.
Looking up a card in a header by its standard FITS keyword only should always return the raw value of that card. That way cards containing values that happen to valid RVKCs but were not intended to be will still be treated like normal cards. Corresponds to PyFITS ticket 184.
Looking up a RVKC in a header with only part of the field-specifier (for example “DP1.AXIS” instead of “DP1.AXIS.1”) was implicitly treated as a wildcard lookup. Corresponds to PyFITS ticket 184.
Fixed a crash when diffing two FITS files where at least one contains a compressed image HDU which was not recognized as an image instead of a table. Corresponds to PyFITS ticket 187.
Fixed a bug where opening a file containing compressed image HDUs in ‘update’ mode and then immediately closing it without making any changes caused the file to be rewritten unnecessarily.
Fixed two memory leaks that could occur when writing compressed image data, or in some cases when opening files containing compressed image HDUs in ‘update’ mode.
Fixed a bug where
ImageHDU.scale(option='old')wasn’t working at all–it was not restoring the image to its original BSCALE and BZERO values.Fixed a bug when writing out files containing zero-width table columns, where the TFIELDS keyword would be updated incorrectly, leaving the table largely unreadable.
Fixed a minor string formatting issue.
Fixed bugs in the backwards compatibility layer for the
CardList.indexandCardList.countmethods. Corresponds to PyFITS ticket 190.Improved
__repr__and text file representation of cards with long values that are split into CONTINUE cards. Corresponds to PyFITS ticket 193.Fixed a crash when trying to assign a long (> 72 character) value to blank (‘’) keywords. This also changed how blank keywords are represented–there are still exactly 8 spaces before any commentary content can begin; this may affect the exact display of header cards that assumed there could be fewer spaces in a blank keyword card before the content begins. However, the current approach is more in line with the requirements of the FITS standard. Corresponds to PyFITS ticket 194.
astropy.io.votable#
The
Tableclass now maintains a single array object which is a Numpy masked array. For variable-length columns, the object that is stored there is also a Numpy masked array.Changed the
pedanticconfiguration option to beFalseby default due to the vast proliferation of non-compliant VO Tables. [#296]Renamed
astropy.io.votoastropy.io.votable.
astropy.table#
Added a workaround for an upstream bug in Numpy 1.6.2 that could cause a maximum recursion depth RuntimeError when printing table rows. [#341]
astropy.wcs#
Updated to wcslib 4.15 [#418]
Fixed a problem with handling FITS headers on locales that do not use dot as a decimal separator. This required an upstream fix to wcslib which is included in wcslib 4.14. [#313]
Fixed some tests that could fail due to missing/incorrect logging configuration–ensures that tests don’t have any impact on the default log location or contents. [#291]
Various minor documentation fixes [#293 and others]
Fixed a bug where running the tests with the
py.testcommand still tried to replace the system-installed pytest with the one bundled with Astropy. [#454]Improved multiprocessing compatibility for file downloads. [#615]
Fixed handling of Cython modules when building from a source checkout of a tagged release version. [#594]
Added a workaround for a bug in Sphinx that could occur when using the
:tocdepth:directive. [#595]Minor VOTable fixes [#596]
Fixed how
setup.pyusesdistribute_setup.pyto prevent possibleVersionConflicterrors when an older version of distribute is already installed on the user’s system. [#616, #640]Changed use of
log.warnin the logging module tolog.warningsince the former is deprecated. [#624]
Version 0.1 (2012-06-19)#
Initial release.