astropy.configastropy.constantsastropy.convolutionastropy.coordinatesastropy.cosmology- Add a
clonemethod to cosmology objects to allow copies of cosmological objects to be created with the specified variables modified [#2592].
- Add a
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]
- 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
astropy.io.fitsastropy.io.miscastropy.io.registryastropy.io.votableastropy.io.votable.parsenow takes adatatype_mappingkeyword argument to map invalid datatype names to valid ones in order to support non-compliant files. [#2675]
astropy.modelingastropy.nddataastropy.statsastropy.sphinxastropy.tableastropy.timeastropy.unitsastropy.utilsastropy.voastropy.wcs
astropy.configastropy.constantsastropy.convolutionastropy.coordinatesastropy.cosmologyastropy.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]
- Added a new argument to
astropy.io.fitsastropy.io.miscastropy.io.registryastropy.io.votableastropy.modelingastropy.nddataastropy.statsastropy.tableastropy.timeastropy.unitsastropy.utilsastropy.voastropy.wcs
astropy.configastropy.constantsastropy.convolutionastropy.coordinatesastropy.cosmologyastropy.io.asciiastropy.io.fitsastropy.io.miscastropy.io.registryastropy.io.votableastropy.modelingastropy.nddataastropy.statsastropy.tableastropy.timeastropy.unitsastropy.utilsastropy.voastropy.wcs
astropy.io.fits- Overwriting an existing file using the
clobber=Trueoption no longer displays a warning message. [#1963]
- Overwriting an existing file using the
- Updated the bundled
sixmodule to version 1.7.3 and made 1.7.3 the minimum acceptable version ofsix. [#2814]
astropy.configastropy.constantsastropy.convolutionastropy.coordinatesastropy.cosmologyastropy.io.asciiastropy.io.fitsastropy.io.misc- Fixed a bug that prevented h5py
Datasetobjects from being automatically recognized byTable.read. [#2831]
- Fixed a bug that prevented h5py
astropy.io.registryastropy.io.votableastropy.modelingastropy.nddataastropy.statsastropy.tableastropy.timeastropy.unitsastropy.utilsastropy.voastropy.wcs
- Nothing changed yet.
astropy.configFixed 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]
- Fixed the multiplication of
astropy.coordinatesDistancecan now take a list of quantities. [#2261]- For in-place operations for
Angleinstances in which the result unit is not an angle, an exception is raised before the instance is corrupted. [#2718] CartesianPointsare now deprecated in favor ofCartesianRepresentation. [#2727]
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]
- An existing table within an HDF5 file can be overwritten without affecting
other datasets in the same HDF5 file by simultaneously using
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]
- Fixed a crash that could occur in rare cases when (such as in bundled
apps) where submodules of the
astropy.nddataastropy.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- By default,
Quantityand its subclasses will now convert to float also numerical types such asdecimal.Decimal, which are stored as objects by numpy. [#1419] - The units
count,pixel,voxelanddbytenow output to FITS, OGIP and VOUnit formats correctly. [#2798]
- By default,
astropy.utils- Restored missing information from deprecation warning messages
from the
deprecateddecorator. [#2811] - Fixed support for
staticmethoddeprecation in thedeprecateddecorator. [#2811]
- Restored missing information from deprecation warning messages
from the
astropy.wcs- Fixed a memory leak when
astropy.wcs.WCSobjects are copied [#2754] - Fixed a crash when passing
ra_dec_order=Trueto any of the*2worldmethods. [#2791]
- Fixed a memory leak when
- 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]
astropy.constants- Added
b_wiento represent Wien wavelength displacement law constant. [#2194]
- Added
astropy.convolution- Changed the input parameter in
Gaussian1DKernelandGaussian2DKernelfromwidthtostddev[#2085].
- Changed the input parameter in
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]
- Added
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]
- The
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.
- Included a new command-line script called
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]
- Allow initialization
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 inteded 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]
- Improved grouped table aggregation by using the numpy
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]
- Mean and apparent sidereal time can now be calculated using the
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.utilstimer.RunTimePredictornow usesastropy.modelingin itsdo_fit()method. [#1896]
astropy.vo- A new sub-package,
astropy.vo.samp, is now available (this was previously the SAMPy package, which has been refactored for use in Astropy). [#1907] - Enhanced functionalities for
VOSCatalogandVOSDatabase. [#1206]
- A new sub-package,
astropy.wcs- astropy now requires wcslib version 4.23 or later. 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]
- 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
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.fitsThe
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).
- The
astropy.modelingThe 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- Issue warning if unit is changed from a non-trivial value by directly
setting
NDData.unit. [#2411] - The
maskandflagattributes ofastropy.nddata.NDDatacan now be set with any array-like object instead of requiring that they be set with anumpy.ndarray. [#2419]
- Issue warning if unit is changed from a non-trivial value by directly
setting
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).
- Use of the
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- Correct use of UT in TDB calculation [#1938, #1939].
TimeDeltaobjects can have scales other than TAI [#1932].- Location information should now be passed on via an
EarthLocationinstance or anything that initialises it, e.g., a tuple containing either geocentric or geodetic coordinates. [#1928]
astropy.unitsQuantitynow 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.wcscalcFootprintwas 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_world2pix
- The
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.
- The
astropy.constantsastropy.constants.Contantobjects can now be deep copied. [#2601]
astropy.cosmology- The distance modulus function in
astropy.cosmologycan now handle negative distances, which can occur in certain closed cosmologies. [#2008] - Removed accidental imports of some extraneous variables in
astropy.cosmology[#2025]
- The distance modulus function in
astropy.io.asciiastropy.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- It is now possible to save an
astropy.table.Tableobject as a VOTable with any of the supported data formats,tabledata,binaryandbinary2, by using thetabledata_formatkwarg. [#2138] - Fixed a crash writing out variable length arrays. [#2577]
- It is now possible to save an
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]
- Indexing
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]
- The
astropy.time- Correct UT1->UTC->UT1 round-trip being off by 1 second if UT1 is on a leap second. [#2077]
astropy.unitsQuantity.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 or later. 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 acheive 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._wcs C 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]
- Running the test suite with
python setup.py test --coveragewill 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 doingimport 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]
astropy.coordinates- if
separgument is specified to be a single character insexagisimal_to_string, it now includes seperators 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]
- if
astropy.cosmology- Fixed
format()compatibility with Python 2.6. [#2129] - Be more careful about converting to floating point internally [#1815, #1818]
- Fixed
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].
- Some CDS files mark missing values with
"---", others with"--". Recognize any string with one to four dashes as null value. [#1335]
- The CDS reader in
astropy.io.fits- Allow pickling of
FITS_recobjects. [#1597] - Improved behavior when writing large compressed images on OSX by removing an unncessary 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]
- Allow pickling of
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]
- By default, floating point values are now written out using
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]
- Fixed the
astropy.stats- Ensure the
axiskeyword inastropy.stats.funcscan now be used for all axes. [#2173]
- Ensure the
astropy.table- Ensure nameless columns can be printed, using 'None' for the header. [#2213]
astropy.time- Fixed pickling of
Timeobjects. [#2123]
- Fixed pickling of
astropy.unitsQuantity._repr_latex_()returnsNotImplementedErrorfor quantity arrays instead of an uninformative formatting exception. [#2258]- Ensure
Quantity.flatalways returnsQuantity. [#2251] - Angstrom unit renders better in MathJax [#2286]
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- Fixed
format()compatibility with Python 2.6. [#2129] - Cone Search validation no longer raises
ConeSearchErrorfor positive RA. [#2240, #2242]
- Fixed
astropy.wcs- Fixed a bug where calling
astropy.wcs.Wcsprm.subwithWCSSUB_CELESTIALmay cause memory corruption due to underallocation of a temporary buffer. [#2350] - Fixed a memory allocation bug in
astropy.wcs.Wcsprm.subandastropy.wcs.Wcsprm.copy. [#2439]
- Fixed a bug where calling
- Misc
- Fixes for compatibility with Python 3.4. [#1945]
import astropy; astropy.test()now correctly uses the same test configuration aspython setup.py test[#1811]
astropy.config- Fixed a bug where
ConfigurationItem.set_temp()does not reset to default value when exception is raised withinwithblock. [#2117]
- Fixed a bug where
astropy.convolution- Fixed a bug where
_truncationwas left undefined forCustomKernel. [#2016] - Fixed a bug with
_normalizationwhenCustomKernelinput array sums to zero. [#2016]
- Fixed a bug where
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]
- Fixed a bug where using
astropy.io.ascii- Allow passing unicode delimiters when reading or writing tables. The delimiter must be convertible to pure ASCII. [#1949]
- Fix a problem when reading a table and renaming the columns to names that already exist. [#1991]
astropy.io.fits- Ported all bug fixes from PyFITS 3.2.1. See the PyFITS changelog at http://pyfits.readthedocs.org/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 to False (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 using repr or str now uses the pretty formatting inastropy.table, so it's possible to easily preview the contents of aVOTable. [#1766]
- The
astropy.modeling- Fixed bug in computation of model derivatives in
LinearLSQFitter. [#1903] - Raise a
NotImplementedErrorwhen fitting composite models. [#1915] - Fixed bug in the computation of the
Gaussian2Dmodel. [#2038] - Fixed bug in the computation of the
AiryDisk2Dmodel. [#2093]
- Fixed bug in computation of model derivatives in
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.unitsQuantityinitialisation 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- Fixed crash in
timer.RunTimePredictor.do_fit. [#1905] - Fixed
astropy.utils.compat.argparsefor Python 3.1. [#2017]
- Fixed crash in
astropy.wcsastropy.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
- There are a number of improvements to make Astropy work better on big endian platforms, such as MIPS, PPC, s390x and SPARC. [#1849]
- The test suite will now raise exceptions when a deprecated feature of Python or Numpy is used. [#1948]
- 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]
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_unicodeis False (default):>>> from astropy import units as u >>> print(unicode(u.degree)) deg
When
use_unicodeis True:>>> 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- New class-based system for generating kernels, replacing
make_kernel. [#1255] Theastropy.nddata.convolutionsub-package has now been moved toastropy.convolution. [#1451]
- New class-based system for generating kernels, replacing
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]
- Two classes
astropy.cosmology- Added support for including massive Neutrinos in the cosmology classes. The Planck (2013) cosmology has been updated to use this. [#1364]
- Calculations now use and return
Quantityobjects where appropriate. [#1237]
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).
- Added initial support for table columns containing pseudo-unsigned
integers. This is currently enabled by using the
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]
- Added robust statistics functions
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]
- New
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]
- Imperial units are disabled by default. [#1593, #1662]
- 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- Fixed attribute error in
astropy.wcs.Wcsprm(lattype->lattyp) [#1463] - Included a new command-line script called
wcslintand accompanying API for validating the WCS in a given FITS file or header. [#580] - Upgraded included version of WCSLIB to 4.19.
- Fixed attribute error in
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]
- Added a new set of utilities in
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]
- 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
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 calling unicode on certain classes will return a string containing unicode characters.
- The configuration option
astropy.coordinates- The
astropy.coordinates.Angleclass is now a subclass ofastropy.units.Quantity. This means it has all of the methods of a numpy.ndarray. [#1006] - The
astropy.coordinates.Distanceclass is now a subclass ofastropy.units.Quantity. This means it has all of the methods of a numpy.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->hour
- Multiplication and division of two
Angleobjects used to raiseNotImplementedError. Now they raiseTypeError.
- All angular units are now supported, not just
- 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.
- The
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().
- In the
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.
- The
astropy.io.registry- Identifier functions for reading/writing Table and NDData objects should
now accept
(origin, *args, **kwargs)instead of(origin, args, kwargs). [#591] - Added a new
astropy.io.registry.get_formatsfunction for listing registered I/O formats and details about the their readers/writers. [#1669]
- Identifier functions for reading/writing Table and NDData objects should
now accept
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]
- Added a new option
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]
- The
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]
- For
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]
- The first argument to the
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]
- For consistency with
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.
- Using
- 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.
- The
astropy.wcsFor those including the
astropy.wcsC headers in their project, they should now include it as:#include "astropy_wcs/astropy_wcs_api.h"
instead of:
#include "astropy_wcs_api.h"
[#1631]
The
--enable-legacyoption forsetup.pyhas been removed. [#1493]
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]
- The
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]
- Fixed crash when trying to multiple or divide
astropy.table- Using a list of strings to index a table now correctly returns a new table with the columns named in the list. [#1454]
- Inequality operators now work properly with
Columnobjects. [#1685]
astropy.timeTimescale 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- Fixed a bug that caused the order of multiplication/division of plain Numpy arrays with Quantities to matter (i.e. if the plain array comes first the units were not preserved in the output). [#899]
- Directly instantiated
CompositeUnitswere made printable without crashing. [#1576]
- 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]
- Fixed various modules that hard-coded
- 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 (eg. 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.
- 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
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.nddataNDDataobjects have more helpful, though still rudimentary__str__` and ``__repr__displays. [#1313]
astropy.units- Added 'cycle' unit. [#1160]
- Extended units supported by the CDS formatter/parser. [#1468]
- Added unicode an LaTeX symbols for liter. [#1618]
astropy.wcs- Redundant SCAMP distortion parameters are removed with SIP distortions are also present. [#1278]
- Added iterative implementation of
all_world2pixthat can be reliably inverted. [#1281]
astropy.coordinates- Fixed incorrect string formatting of Angles using
precision=0. [#1319] - Fixed string formatting of Angles using
decimal=Truewhich ignored theprecisionargument. [#1323] - Fixed parsing of format strings using appropriate unicode characters
instead of the ASCII
-for minus signs. [#1429]
- Fixed incorrect string formatting of Angles using
astropy.io.ascii- Fixed a crash in the IPAC table reader when the
include/exclude_namesoption is set. [#1348] - Fixed writing AASTex tables to honor the
tabletypeoption. [#1372]
- Fixed a crash in the IPAC table reader when the
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.
- Improved round-tripping and preservation of manually assigned column
attributes (
astropy.io.votable- Added a warning for when a VOTable 1.2 file contains no
RESOURCESelements (at least one should be present). [#1337] - Fixed a test failure specific to MIPS architecture caused by an errant floating point warning. [#1179]
- Added a warning for when a VOTable 1.2 file contains no
astropy.nddata.convolution- Prevented in-place modification of the input arrays to
convolve(). [#1153]
- Prevented in-place modification of the input arrays to
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 unparseable 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]
- When passing a single array to the wcs transformation functions,
(
- 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]
- Fixed crash when the
- 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]
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.
- Fixed a crash in the
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]
- Fixed incorrect reading of tables containing multiple
astropy.table- Fixed a bug where
Table.remove_columnandTable.rename_columncould cause a masked table to lose its masking. [#1120] - Fixed bugs where subclasses of
Tabledid not preserver their class in certain operations. [#1142] - Fixed a bug where slicing a masked table did not preserve the mask. [#1187]
- Fixed a bug where
astropy.units- Fixed a bug where the
.siand.cgsproperties of dimensionlessQuantityobjects raised aZeroDivisionError. [#1150] - Fixed a bug where multiple subsequent calls to the
.decompose()method on array quantities applied a scale factor each time. [#1163]
- Fixed a bug where the
- 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]
- Fixed an installation crash that could occur sometimes on Debian/Ubuntu
and other *NIX systems where
astropy.cosmology- Added a new
Plank13object representing the Plank 2013 results. [#895]
- Added a new
astropy.units- Performance improvements in initialization of
Quantityobjects with a large number of elements. [#1231]
- Performance improvements in initialization of
astropy.time- Fixed inaccurate handling of leap seconds when converting from UTC to UNIX timestamps. [#1118]
- Tightened required accuracy in many of the time conversion tests. [#1121]
- 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]
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]
- Fixed issues in both the
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 convertable 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- Stopped deprecation warnings from the
astropy.io.votablepackage that could occur during setup. [#970] - Fixed an issue where INFO elements were being incorrectly dropped when occurring inside a TABLE element. [#1000]
- Fixed obscure test failures on MIPS platforms. [#1010]
- Stopped deprecation warnings from the
astropy.nddata.convolution- Fixed an issue in
make_kernel()when using an Airy function kernel. Also removed the superfluous 'brickwall' option. [#939]
- Fixed an issue in
astropy.table- Fixed a crash that could occur when adding a row to an empty (rowless) table with masked columns. [#973]
- Made it possible to assign to one table row from the value of another row, effectively making it easier to copy rows, for example. [#1019]
astropy.time- Added appropriate
__copy__and__deepcopy__behavior; this omission caused a seemingly unrelated error in FK5 coordinate separation. [#891]
- Added appropriate
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]
- Fixed an issue where the
- 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]
- Fixed a permission error that could occur when running
- Some performance improvements to the
astropy.unitspackage, in particular improving the time it takes to import the sub-package. [#1015]
astropy.coordinates- Fixed encoding errors that could occur when formatting coordinate objects
in code using
from __future__ import unicode_literals. [#817] - Fixed a bug where the minus sign was dropped when string formatting dms coordinates with -0 degrees. [#875]
- Fixed encoding errors that could occur when formatting coordinate objects
in code using
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]
- Fixed links to the
astropy.nddata.convolution- Added better handling of
infvalues to theconvolve_fftfamily of functions. [#893]
- Added better handling of
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- Added missing capability for array
Quantitys to be initializable by a list ofQuantitys. [#835] - Fixed the definition of year and lightyear to be in terms of Julian year per the IAU definition. [#861]
- "degree" was removed from the list of SI base units. [#863]
- Added missing capability for array
astropy.wcs- Fixed
TypeErrorwhen callingWCS.to_header_string(). [#822] - Added new method
WCS.all_world2pixfor converting from world coordinates to pixel space, including inversion of the astrometric distortion correction. [#1066, #1281]
- Fixed
- 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]
- Fixed a minor issue when installing with
- 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.testnow outputs more system information for help in debugging issues from users. [#869]- Added unit definitions "mas" and "uas" for "milliarcsecond" and "microarcsecond" respectively. [#892]
This is a brief overview of the new features included in Astropy 0.2--please see the "What's New" section of the documentation for more details.
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.tableI/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]
- In
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.table masked 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.
- Improved integration with the
Generalized I/O infrastructure so that
astropy.nddatacan also have custom readers/writers [#659]astropy.wcs- From updating the 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".
- When
- From updating the the underlying wcslib 4.16:
- 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.convolutionremoved requirement of PyFFTW3; uses Numpy's FFT by default instead with the added ability to specify an FFT implementation to use. [#660]
astropy.io.ascii- Fixed crash when pprinting a row with INDEF values. [#511]
- Fixed failure when reading DAOphot files with empty keyword values. [#666]
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 Paper IV 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.
- 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
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.
- The
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]
- Initial release.