Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scheduled monthly dependency update for February #166

Closed
wants to merge 16 commits into from

Conversation

pyup-bot
Copy link
Contributor

@pyup-bot pyup-bot commented Feb 1, 2021

Update astropy from 4.0.1.post1 to 4.2.

Changelog

4.2

================

New Features
------------

astropy.config
^^^^^^^^^^^^^^

astropy.constants
^^^^^^^^^^^^^^^^^

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Methods ``convolve`` and ``convolve_fft`` both now return Quantity arrays if user
input is given in one. [10822]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Numpy functions that broadcast, change shape, or index (like ``np.broadcast_to``,
``np.rot90``, or ``np.roll``) now work on coordinates, frames, and
representations. [10337]

- Add a new science state ``astropy.coordinates.erfa_astrom.erfa_astrom`` and
two classes ``ErfaAstrom``, ``ErfaAstromInterpolator`` as wrappers to
the ``pyerfa`` astrometric functions used in the coordinate transforms.
Using ``ErfaAstromInterpolator``, which interpolates astrometric properties for
``SkyCoord`` instances with arrays of obstime, can dramatically speed up
coordinate transformations while keeping microarcsecond resolution.
Depending on needed precision and the obstime array in question, speed ups
reach factors of 10x to >100x. [10647]

- ``galactocentric_frame_defaults`` can now also be used as a registry, with user-defined parameter values and metadata. [10624]

- Method ``.realize_frame`` from coordinate frames now accepts ``**kwargs``,
including ``representation_type``. [10727]

- Avoid an unnecessary call to ``erfa.epv00`` in transformations between
``CIRS`` and ``ICRS``, improving performance by 50 %. [10814]

- A new equatorial coordinate frame, with RA and Dec measured w.r.t to the True
Equator and Equinox (TETE). This frame is commonly known as "apparent place"
and is the correct frame for coordinates returned from JPL Horizons. [10867]

- Added a context manager ``impose_finite_difference_dt`` to the
``TransformGraph`` class to override the finite-difference time step
attribute (``finite_difference_dt``) for all transformations in the graph
with that attribute. [10341]
- Improve performance of ``SpectralCoord`` by refactoring internal implementation. [10398]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The final version of the Planck 2018 cosmological parameters are included
as the ``Planck18`` object, which is now the default cosmology.  The
parameters are identical to those of the ``Planck18_arXiv_v2`` object,
which is now deprecated and will be removed in a future release. [10915]

astropy.extern
^^^^^^^^^^^^^^

astropy.io.ascii
^^^^^^^^^^^^^^^^

astropy.io.fits
^^^^^^^^^^^^^^^

astropy.io.misc
^^^^^^^^^^^^^^^

astropy.io.votable
^^^^^^^^^^^^^^^^^^

astropy.modeling
^^^^^^^^^^^^^^^^

- Added NFW profile and tests to modeling package [10505]

- Added missing logic for evaluate to compound models [10002]

- Stop iteration in ``FittingWithOutlierRemoval`` before reaching ``niter`` if
the masked points are no longer changing. [10642]

- Keep a (shallow) copy of ``fit_info`` from the last iteration of the wrapped
fitter in ``FittingWithOutlierRemoval`` and also record the actual number of
iterations performed in it. [10642]

- Added attributes for fitting uncertainties (covariance matrix, standard
deviations) to models. Parameter covariance matrix can be accessed via
``model.cov_matrix``, standard deviations by ``model.stds`` or individually
for each parameter by ``parameter.std``. Currently implemented for
``LinearLSQFitter`` and ``LevMarLSQFitter``. [10552]

astropy.nddata
^^^^^^^^^^^^^^

astropy.samp
^^^^^^^^^^^^

astropy.stats
^^^^^^^^^^^^^

- Added ``circstd`` function to obtain a circular standard deviation. [10690]

astropy.table
^^^^^^^^^^^^^

- Allow initializing a ``Table`` using a list of ``names`` in conjunction with
a ``dtype`` from a numpy structured array. The list of ``names`` overrides the
names specified in the ``dtype``. [10419]

astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

- Add new ``isclose()`` method to ``Time`` and ``TimeDelta`` classes to allow
comparison of time objects to within a specified tolerance. [10646]

- Improve initialization time by a factor of four when creating a scalar ``Time``
object in a format like ``unix`` or ``cxcsec`` (time delta from a reference
epoch time). [10406]

- Improve initialization time by a factor of ~25 or more for large arrays of
string times in ISO, ISOT or year day-of-year formats. This is done with a new
C-based time parser that can be adapted for other fixed-format custom time
formats. [10360]

- Numpy functions that broadcast, change shape, or index (like ``np.broadcast_to``,
``np.rot90``, or ``np.roll``) now work on times. [10337, 10502]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Improve memory and speed performance when iterating over the entire time
column of a ``TimeSeries`` object. Previously this involved O(N^2) operations
and memory. [10889]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

astropy.units
^^^^^^^^^^^^^

- ``Quantity.to`` has gained a ``copy`` option to allow copies to be avoided
when the units do not change. [10517]

- Added the ``spat`` unit of solid angle that represents the full sphere.
[10726]

astropy.utils
^^^^^^^^^^^^^

- ``ShapedLikeNDArray`` has gained the capability to use numpy functions
that broadcast, change shape, or index. [10337]

- ``get_free_space_in_dir`` now takes a new ``unit`` keyword and
``check_free_space_in_dir`` takes ``size`` defined as ``Quantity``. [10627]

- New ``astropy.utils.data.conf.allow_internet`` configuration item to
control downloading data from the Internet. Setting ``allow_internet=False``
is the same as ``remote_timeout=0``. Using ``remote_timeout=0`` to control
internet access will stop working in a future release. [10632]

- New ``is_url`` function so downstream packages do not have to secretly use
the hidden ``_is_url`` anymore. [10684]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added the ``Quadrangle`` patch for ``WCSAxes`` for a latitude-longitude
quadrangle.  Unlike ``matplotlib.patches.Rectangle``, the edges of this
patch will be rendered as curved lines if appropriate for the WCS
transformation. [10862]
- The position of tick labels are now only calculated when needed. If any text
parameters are changed (color, font weight, size etc.) that don't effect the
tick label position, the positions are not recomputed, improving performance.
[10806]

astropy.wcs
^^^^^^^^^^^

- ``WCS.to_header()`` now appends comments to SIP coefficients. [10480]

- A new property ``dropped_world_dimensions`` has been added to
``SlicedLowLevelWCS`` to record information about any world axes removed by
slicing a WCS. [10195]

- New ``WCS.proj_plane_pixel_scales()`` and ``WCS.proj_plane_pixel_area()``
methods to return pixel scales and area, respectively, as Quantity. [10872]

API Changes
-----------

astropy.config
^^^^^^^^^^^^^^

- ``set_temp_config`` now preserves the existing cache rather than deleting
it and relying on reloading it from the previous config file. This ensures
that any programmatically made changes are preserved as well. [10474]

- Configuration path detection logic has changed: Now, it looks for ``~`` first
before falling back to older logic. In addition, ``HOMESHARE`` is no longer
used in Windows. [10705]

astropy.constants
^^^^^^^^^^^^^^^^^

astropy.convolution
^^^^^^^^^^^^^^^^^^^

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The passing of frame classes (as opposed to frame instances) to the
``transform_to()`` methods of low-level coordinate-frame classes has been
deprecated.  Frame classes can still be passed to the ``transform_to()``
method of the high-level ``SkyCoord`` class, and using ``SkyCoord`` is
recommended for all typical use cases of transforming coordinates. [10475]

astropy.cosmology
^^^^^^^^^^^^^^^^^

astropy.extern
^^^^^^^^^^^^^^

astropy.io.ascii
^^^^^^^^^^^^^^^^

astropy.io.fits
^^^^^^^^^^^^^^^

astropy.io.misc
^^^^^^^^^^^^^^^

astropy.io.votable
^^^^^^^^^^^^^^^^^^

astropy.modeling
^^^^^^^^^^^^^^^^

astropy.nddata
^^^^^^^^^^^^^^

astropy.samp
^^^^^^^^^^^^

astropy.stats
^^^^^^^^^^^^^

- Added a ``grow`` parameter to ``SigmaClip``, ``sigma_clip`` and
``sigma_clipped_stats``, to allow expanding the masking of each deviant
value to its neighbours within a specified radius. [10613]


astropy.table
^^^^^^^^^^^^^

- Change ``Table.columns.keys()`` and ``Table.columns.values()`` to both return
generators instead of a list. This matches the behavior for Python ``dict``
objects. [10543]

- Removed the ``FastBST`` and ``FastRBT`` indexing engines because they depend
on the ``bintrees`` package, which is no longer maintained and is deprecated.
Instead, use the ``SCEngine`` indexing engine, which is similar in
performance and relies on the ``sortedcontainers`` package. [10622]

- When slicing a mixin column in a table that had indices, the indices are no
longer copied since they generally are not useful, having the wrong shape.
With this, the behaviour becomes the same as that for a regular ``Column``.
(Note that this does not affect slicing of a table; sliced columns in those
will continue to carry a sliced version of any indices). [10890]

- Change behavior so that when getting a single item out of a mixin column such
as ``Time``, ``TimeDelta``, ``SkyCoord`` or ``Quantity``, the ``info``
attribute is no longer copied. This improves performance, especially when the
object is an indexed column in a ``Table``. [10889]

- Raise a TypeError when a scalar column is added to an unsized table. [10476]

- The order of columns when creating a table from a ``list`` of ``dict`` may be
changed. Previously, the order was alphabetical because the ``dict`` keys
were assumed to be in random order. Since Python 3.7, the keys are always in
order of insertion, so ``Table`` now uses the order of keys in the first row
to set the column order. To alphabetize the columns to match the previous
behavior, use ``t = t[sorted(t.colnames)]``. [10900]

astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

- Refactor ``Time`` and ``TimeDelta`` classes to inherit from a common
``TimeBase`` class. The ``TimeDelta`` class no longer inherits from ``Time``.
A number of methods that only apply to ``Time`` (e.g. ``light_travel_time``)
are no longer available in the ``TimeDelta`` class. [10656]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

astropy.units
^^^^^^^^^^^^^

- The ``bar`` unit is no longer wrongly considered an SI unit, meaning that
SI decompositions like ``(u.kg*u.s**-2* u.sr**-1 * u.nm**-1).si`` will
no longer include it. [10586]

astropy.utils
^^^^^^^^^^^^^

- Shape-related items from ``astropy.utils.misc`` -- ``ShapedLikeNDArray``,
``check_broadcast``, ``unbroadcast``, and ``IncompatibleShapeError`` --
have been moved to their own module, ``astropy.utils.shapes``. They remain
importable from ``astropy.utils``. [10337]

- ``check_hashes`` keyword in ``check_download_cache`` is deprecated and will
be removed in a future release. [10628]

- ``hexdigest`` keyword in ``import_file_to_cache`` is deprecated and will
be removed in a future release. [10628]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

astropy.wcs
^^^^^^^^^^^


Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

astropy.constants
^^^^^^^^^^^^^^^^^

astropy.convolution
^^^^^^^^^^^^^^^^^^^

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug in the coordinate-frame attribute ``CoordinateAttribute`` where
the internal transformation could behave differently depending on whether
the input was a low-level coordinate frame or a high-level ``SkyCoord``.
``CoordinateAttribute`` now always performs a ``SkyCoord``-style internal
transformation, including the by-default merging of frame attributes. [10475]

astropy.cosmology
^^^^^^^^^^^^^^^^^

astropy.extern
^^^^^^^^^^^^^^

astropy.io.ascii
^^^^^^^^^^^^^^^^

astropy.io.fits
^^^^^^^^^^^^^^^

astropy.io.misc
^^^^^^^^^^^^^^^

astropy.io.votable
^^^^^^^^^^^^^^^^^^

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed an issue of ``Model.render`` when the input ``out`` datatype is not
float64. [10542]

astropy.nddata
^^^^^^^^^^^^^^

astropy.samp
^^^^^^^^^^^^

astropy.stats
^^^^^^^^^^^^^

astropy.table
^^^^^^^^^^^^^

astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

astropy.timeseries
^^^^^^^^^^^^^^^^^^

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

astropy.units
^^^^^^^^^^^^^

astropy.utils
^^^^^^^^^^^^^

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

astropy.wcs
^^^^^^^^^^^

Other Changes and Additions
---------------------------

- Minimum version of required Python is now 3.7. [10900]

- Minimum version of required Numpy is now 1.17. [10664]

- Minimum version of required Scipy is now 1.1. [10900]

- Minimum version of required PyYAML is now 3.13. [10900]

- Minimum version of required Matplotlib is now 3.0. [10900]

- The private ``_erfa`` module has been converted to its own package,
``pyerfa``, which is a required dependency for astropy, and can be imported
with ``import erfa``.  Importing ``_erfa`` from ``astropy`` will give a
deprecation warning.  [10329]

- Added ``optimize=True`` flag to calls of ``yacc.yacc`` (as already done for
``lex.lex``) to allow running in ``python -OO`` session without raising an
exception in ``astropy.units.format``. [10379]

- Shortened FITS comment strings for some D2IM and CPDIS FITS keywords to
reduce the number of FITS ``VerifyWarning`` warnings when working with WCSes
containing lookup table distortions. [10513]

- When importing astropy without first building the extension modules first,
raise an error directly instead of trying to auto-build. [10883]

4.1.1

==================

Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Fix a few issues with ``generate_config`` when used with other packages.
[10893]

astropy.constants
^^^^^^^^^^^^^^^^^

astropy.convolution
^^^^^^^^^^^^^^^^^^^

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

astropy.cosmology
^^^^^^^^^^^^^^^^^

astropy.extern
^^^^^^^^^^^^^^

astropy.io.ascii
^^^^^^^^^^^^^^^^

astropy.io.fits
^^^^^^^^^^^^^^^

astropy.io.misc
^^^^^^^^^^^^^^^

astropy.io.votable
^^^^^^^^^^^^^^^^^^

astropy.modeling
^^^^^^^^^^^^^^^^

astropy.nddata
^^^^^^^^^^^^^^

astropy.samp
^^^^^^^^^^^^

astropy.stats
^^^^^^^^^^^^^

astropy.table
^^^^^^^^^^^^^

astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

astropy.timeseries
^^^^^^^^^^^^^^^^^^

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

astropy.units
^^^^^^^^^^^^^

astropy.utils
^^^^^^^^^^^^^

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fix support for referencing WCSAxes coordinates by their world axes names.
[10484]

astropy.wcs
^^^^^^^^^^^

- Objective functions called by ``astropy.wcs.fit_wcs_from_points`` were
treating longitude and latitude distances equally. Now longitude scaled properly. [10759]


Other Changes and Additions
---------------------------

4.1

================

New Features
------------

astropy.config
^^^^^^^^^^^^^^

- Add new function ``generate_config`` to generate the configuration file and
include it in the documentation. [10148]

- ``ConfigNamespace.__iter__`` and ``ConfigNamespace.keys`` now yield ``ConfigItem``
names defined within it. Similarly, ``items`` and ``values`` would yield like a
Python dictionary would. [10139]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added a new ``SpectralCoord`` class that can be used to define spectral
coordinates and transform them between different velocity frames. [10185]

- Angle parsing now supports ``cardinal direction`` in the cases
where angles are initialized as ``string`` instances. eg ``"17°53'27"W"``.[9859]

- Allow in-place modification of array-valued ``Frame`` and ``SkyCoord`` objects.
This provides limited support for updating coordinate data values from another
coordinate object of the same class and equivalent frame attributes. [9857]

- Added a robust equality operator for comparing ``SkyCoord``, frame, and
representation objects. A comparison like ``sc1 == sc2`` will now return a
boolean or boolean array where the objects are strictly equal in all relevant
frame attributes and coordinate representation values. [10154]

- Added the True Equator Mean Equinox (TEME) frame. [10149]

- The ``Galactocentric`` frame will now use the "latest" parameter definitions
by default. This currently corresponds to the values defined in v4.0, but will
change with future releases. [10238]

- The ``SkyCoord.from_name()`` and Sesame name resolving functionality now is
able to cache results locally and will do so by default. [9162]

- Allow in-place modification of array-valued ``Representation`` and ``Differential``
objects, including of representations with attached differentials. [10210]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Functional Units can now be processed in CDS-tables. [9971]

- Allow reading in ASCII tables which have duplicate column names. [9939]

- Fixed failure of ASCII ``fast_reader`` to handle ``names``, ``include_names``,
``exclude_names`` arguments for ``RDB`` formatted tables. Homogenised checks
and exceptions for invalid ``names`` arguments. Improved performance when
parsing "wide" tables with many columns. [10306]

- Added type validation of key arguments in calls to ``io.ascii.read()`` and
``io.ascii.write()`` functions. [10005]

astropy.io.misc
^^^^^^^^^^^^^^^
- Added serialization of parameter constraints fixed and bounds.  [10082]

- Added 'functional_models.py' and 'physical_models.py' to asdf/tags/transform,
with to allow serialization of all functional and physical models. [10028, 10293]

- Fix ASDF serialization of circular model inverses, and remove explicit calls
to ``asdf.yamlutil`` functions that became unnecessary in asdf 2.6.0. [10189, 10384]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added support for writing Dask arrays to disk efficiently for ``ImageHDU`` and
``PrimaryHDU``. [9742]

- Add HDU name and ver to FITSDiff report where appropriate [10197]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- New ``exceptions.conf.max_warnings`` configuration item to control the number of times a
type of warning appears before being suppressed. [10152]

- No longer ignore attributes whose values were specified as empty
strings. [10583]

astropy.modeling
^^^^^^^^^^^^^^^^
- Added Plummer1D model to ``functional_models``. [9896]

- Added ``UnitsMapping`` model and ``Model.coerce_units`` to support units on otherwise
unitless models. [9936]

- Added ``domain`` and ``window`` attributes to ``repr`` and ``str``. Fixed bug with
``_format_repr`` in core.py. [9941]

- Polynomial attributes ``domain`` and ``window`` are now tuples of size 2 and are
validated. `repr` and `print` show only their non-default values. [10145]

- Added ``replace_submodel()`` method to ``CompoundModel`` to modify an
existing instance. [10176]

- Delay construction of ``CompoundModel`` inverse until property is accessed,
to support ASDF deserialization of circular inverses in component models. [10384]

astropy.nddata
^^^^^^^^^^^^^^

- Added support in the ``bitmask`` module for using mnemonic bit flag names
when specifying the bit flags to be used or ignored when converting a bit
field to a boolean. [10095, 10208]

- Added ``reshape_as_blocks`` function to reshape a data array into
blocks, which is useful to efficiently apply functions on block
subsets of the data instead of using loops.  The reshaped array is a
view of the input data array. [10214]

- Added a ``cache`` keyword option to allow caching for ``CCDData.read`` if
filename is a URL. [10265]

astropy.table
^^^^^^^^^^^^^

- Added ability to specify a custom matching function for table joins.  In
particular this makes it possible to do cross-match table joins on ``SkyCoord``,
``Quantity``, or standard columns, where column entries within a specified
distance are considered to be matched. [10169]

- Added ``units`` and ``descriptions`` keyword arguments to the Table object
initialization and ``Table.read()`` methods.  This allows directly setting
the ``unit`` and ``description`` for the table columns at the time of
creating or reading the table. [9671]

- Make table ``Row`` work as mappings, by adding ``.keys()`` and ``.values()``
methods. With this ``**row`` becomes possible, as does, more simply, turning
a ``Row`` into a dictionary with ``dict(row)``. [9712]

- Added two new ``Table`` methods ``.items()`` and ``.values()``, which return
respectively ``tbl.columns.items()`` (iterator over name, column tuples)  and
``tbl.columns.values()`` (list of columns) for a ``Table`` object ``tbl``. [9780]

- Added new ``Table`` method ``.round()``, which rounds numeric columns to the
specified number of decimals. [9862]

- Updated ``to_pandas()`` and ``from_pandas()`` to use and support Pandas
nullable integer data type for masked integer data. [9541]

- The HDF5 writer, ``write_table_hdf5()``, now allows passing through
additional keyword arguments to the ``h5py.Group.create_dataset()``. [9602]

- Added capability to add custom table attributes to a ``Table`` subclass.
These attributes are persistent and can be set during table creation. [10097]

- Added support for ``SkyCoord`` mixin columns in ``dstack``, ``vstack`` and
``insert_row`` functions. [9857]

- Added support for coordinate ``Representation`` and ``Differential`` mixin
columns. [10210]

astropy.time
^^^^^^^^^^^^

- Added a new time format ``unix_tai`` which is essentially Unix time but with
leap seconds included.  More precisely, this is the number of seconds since
``1970-01-01 00:00:08 TAI`` and corresponds to the ``CLOCK_TAI`` clock
available on some linux platforms. [10081]

- Improve initialization time by a factor of four when creating a scalar ``Time``
object in a format like ``unix`` or ``cxcsec`` (time delta from a reference
epoch time). [10406]

astropy.units
^^^^^^^^^^^^^

- Added ``torr`` pressure unit. [9787]

- Added the ``equal_nan`` keyword argument to ``isclose`` and ``allclose``, and
updated the docstrings. [9849]

- Added ``Rankine`` temperature unit. [9916]

- Added integrated flux unit conversion to ``spectral_density`` equivalency.
[10015]

- Changed ``pixel_scale`` equivalency to allow scales defined in any unit.
[10123]

- The ``quantity_input`` decorator now optionally allows passing through
numeric values or numpy arrays with numeric dtypes to arguments where
``dimensionless_unscaled`` is an allowed unit. [10232]

astropy.utils
^^^^^^^^^^^^^

- Added a new ``MetaAttribute`` class to support easily adding custom attributes
to a subclass of classes like ``Table`` or ``NDData`` that have a ``meta``
attribute. [10097]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added ``invalid`` keyword to ``SqrtStretch``, ``LogStretch``,
``PowerStretch``, and ``ImageNormalize`` classes and the
``simple_norm`` function.  This keyword is used to replace generated
NaN values. [10182]

- Fixed an issue where ticks were sometimes not drawn at the edges of a spherical
projection on a WCSAxes. [10442]

astropy.wcs
^^^^^^^^^^^

- WCS objects with a spectral axis will now return ``SpectralCoord``
objects when calling ``pixel_to_world`` instead of ``Quantity``,
and can now take either ``Quantity`` or ``SpectralCoord`` as input
to ``pixel_to_world``. [10185]

- Implemented support for the ``-TAB`` algorithm (WCS Paper III). [9641]

- Added an ``_as_mpl_axes`` method to the ``HightLevelWCSWrapper`` class. [10138]

- Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from
unintended lower/upper case issues [10557]

API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The equality operator for comparing ``SkyCoord``, frame, and representation
objects was changed. A comparison like ``sc1 == sc2`` was previously
equivalent to ``sc1 is sc2``. It will now return a boolean or boolean array
where the objects are strictly equal in all relevant frame attributes and
coordinate representation values. If the objects have different frame
attributes or representation types then an exception will be raised. [10154]

- SkyCoord.radial_velocity_correction now allows you to pass an obstime directly
when the SkyCoord also has an obstime set. In this situation, the position of the
SkyCoord has space motion applied to correct to the passed obstime. This allows
mm/s radial velocity precision for objects with large space motion. [10094]

- For consistency with other astropy classes, coordinate ``Representations``
and ``Differentials`` can now be initialized with an instance of their own class
if that instance is passed in as the first argument. [10210]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Changed the behavior when reading a table where both the ``names`` argument
is provided (to specify the output column names) and the ``converters``
argument is provided (to specify column conversion functions). Previously the
``converters`` dict names referred to the *input* table column names, but now
they refer to the *output* table column names. [9739]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- For FIELDs with datatype="char", store the values as strings instead
of bytes. [9505]

astropy.table
^^^^^^^^^^^^^

- ``Table.from_pandas`` now supports a ``units`` dictionary as argument to pass units
for columns in the ``DataFrame``. [9472]

astropy.time
^^^^^^^^^^^^

- Require that ``in_subfmt`` and ``out_subfmt`` properties of a ``Time`` object
have allowed values at the time of being set, either when creating the object
or when setting those properties on an existing ``Time`` instance.  Previously
the validation of those properties was not strictly enforced. [9868]

astropy.utils
^^^^^^^^^^^^^

- Changed the exception raised by ``get_readable_fileobj`` on missing
compression modules (for ``bz2`` or ``lzma``/``xz`` support) to
``ModuleNotFoundError``, consistent with ``io.fits`` file handlers. [9761]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Deprecated the ``imshow_only_kwargs`` keyword in ``imshow_norm``.
[9915]

- Non-finite input values are now automatically excluded in
``HistEqStretch`` and ``InvertedHistEqStretch``. [10177]

- The ``PowerDistStretch`` and ``InvertedPowerDistStretch`` ``a``
value is restricted to be ``a >= 0`` in addition to ``a != 1``.
[10177]

- The ``PowerStretch``, ``LogStretch``, and ``InvertedLogStretch``
``a`` value is restricted to be ``a > 0``. [10177]

- The ``AsinhStretch`` and ``SinhStretch`` ``a`` value is restricted
to be ``0 < a <= 1``. [10177]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix a bug where for light deflection by the Sun it was always assumed that the
source was at infinite distance, which in the (rare and) absolute worst-case
scenario could lead to errors up to 3 arcsec. [10666]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- For FIELDs with datatype="char", store the values as strings instead
of bytes. [9505]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed an issue of ``Model.render`` when the input ``out`` datatype is not
float64. [10542]

astropy.table
^^^^^^^^^^^^^

- Fix a bug that prevented ``Time`` columns from being used to sort a table.
[10824]

astropy.wcs
^^^^^^^^^^^

- WCS objects with a spectral axis will now return ``SpectralCoord``
objects when calling ``pixel_to_world`` instead of ``Quantity``
(note that ``SpectralCoord`` is a sub-class of ``Quantity``). [10185]

- Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from
unintended lower/upper case issues [10557]

- Added bounds to ``fit_wcs_from_points`` to ensure CRPIX is on
input image. [10346]

Other Changes and Additions
---------------------------

- The way in which users can specify whether to build astropy against
existing installations of C libraries rather than the bundled one
has changed, and should now be done via environment variables rather
than setup.py flags (e.g. --use-system-erfa). The available variables
are ``ASTROPY_USE_SYSTEM_CFITSIO``, ``ASTROPY_USE_SYSTEM_ERFA``,
``ASTROPY_USE_SYSTEM_EXPAT``, ``ASTROPY_USE_SYSTEM_WCSLIB``, and
``ASTROPY_USE_SYSTEM_ALL``. These should be set to ``1`` to build
against the system libraries. [9730]

- The infrastructure of the package has been updated in line with the
APE 17 roadmap (https://github.com/astropy/astropy-APEs/blob/master/APE17.rst).
The main changes are that the ``python setup.py test`` and
``python setup.py build_docs`` commands will no longer work. The easiest
way to replicate these commands is to install the tox
(https://tox.readthedocs.io) package and run ``tox -e test`` and
``tox -e build_docs``. It is also possible to run pytest and sphinx
directly. Other significant changes include switching to setuptools_scm to
manage the version number, and adding a ``pyproject.toml`` to opt in to
isolated builds as described in PEP 517/518. [9726]

- Bundled ``expat`` is updated to version 2.2.9. [10038]

- Increase minimum asdf version to 2.6.0. [10189]

- The bundled version of PLY was updated to 3.11. [10258]

- Removed dependency on scikit-image. [10214]

- Added ``optimize=True`` flag to calls of ``yacc.yacc`` (as already done for
``lex.lex``) to allow running in ``python -OO`` session without raising an
exception in ``astropy.units.format``. [10379]

4.0.4

==================

Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

astropy.constants
^^^^^^^^^^^^^^^^^

astropy.convolution
^^^^^^^^^^^^^^^^^^^

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``norm()`` method for ``RadialDifferential`` no longer requires ``base``
to be specified.  The ``norm()`` method for other non-Cartesian differential
classes now gives a clearer error message if ``base`` is not specified. [10969]

- The transformations between ``ICRS`` and any of the heliocentric ecliptic
frames (``HeliocentricMeanEcliptic``, ``HeliocentricTrueEcliptic``, and
``HeliocentricEclipticIAU76``) now correctly account for the small motion of
the Sun when transforming a coordinate with velocity information. [10970]

astropy.cosmology
^^^^^^^^^^^^^^^^^

astropy.extern
^^^^^^^^^^^^^^

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Partially fixed a performance issue when reading in parallel mode. Parallel
reading currently has substantially worse performance than the default serial
reading, so we now ignore the parallel option and fall back to serial reading.
[10880]

- Fixed a bug where "" (blank string) as input data for a boolean type column
was causing an exception instead of indicating a masked value. As a
consequence of the fix, the values "0" and "1" are now also allowed as valid
inputs for boolean type columns. These new allowed values apply for both ECSV
and for basic character-delimited data files ('basic' format with appropriate
``converters`` specified). [10995]

astropy.io.fits
^^^^^^^^^^^^^^^

astropy.io.misc
^^^^^^^^^^^^^^^

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

astropy.io.votable
^^^^^^^^^^^^^^^^^^

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed use of weights with ``LinearLSQFitter``. [10687]

astropy.nddata
^^^^^^^^^^^^^^

astropy.samp
^^^^^^^^^^^^

astropy.stats
^^^^^^^^^^^^^

- Fixed an issue in biweight stats when MAD=0 to give the same output
with and without an input ``axis``. [10912]

astropy.table
^^^^^^^^^^^^^

astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

- Fix a problem with the ``plot_date`` format for matplotlib >= 3.3 caused by
a change in the matplotlib plot date default reference epoch in that release.
[10876]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

astropy.units
^^^^^^^^^^^^^

astropy.utils
^^^^^^^^^^^^^

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed the caclulation of the tight bounding box of a ``WCSAxes``. This should
also significantly improve the application of ``tight_layout()`` to figures
containing ``WCSAxes``. [10797]

astropy.wcs
^^^^^^^^^^^


Other Changes and Additions
---------------------------

4.0.3

==================

Bug Fixes
---------

astropy.table
^^^^^^^^^^^^^

- Fixed a small bug where initializing an empty ``Column`` with a structured dtype
with a length and a shape failed to give the requested dtype. [10819]

Other Changes and Additions
---------------------------

- Fixed installation of the source distribution with pip<19. [10837, 10852]

4.0.2

==================

New Features
------------

astropy.utils
^^^^^^^^^^^^^

- ``astropy.utils.data.download_file`` now supports FTPS/FTP over TLS. [9964]

- ``astropy.utils.data`` now uses a lock-free mechanism for caching. This new
mechanism uses a new cache layout and so ignores caches created using earlier
mechanisms (which were causing lockups on clusters). The two cache formats can
coexist but do not share any files. [10437]

- ``astropy.utils.data`` now ignores the config item
``astropy.utils.data.conf.download_cache_lock_attempts`` since no locking is
done. [10437]

- ``astropy.utils.data.download_file`` and related functions now interpret the
parameter or config file setting ``timeout=0`` to mean they should make no
attempt to download files. [10437]

- ``astropy.utils.import_file_to_cache`` now accepts a keyword-only argument
``replace``, defaulting to True, to determine whether it should replace existing
files in the cache, in a way as close to atomic as possible. [10437]

- ``astropy.utils.data.download_file`` and related functions now treat
``http://example.com`` and ``http://example.com/`` as equivalent. [10631]

astropy.wcs
^^^^^^^^^^^

- The new auxiliary WCS parameters added in WCSLIB 7.1 are now exposed as
the ``aux`` attribute of ``Wcsprm``. [10333]

- Updated bundled version of ``WCSLIB`` to v7.3. [10433]

Bug fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Added an extra fallback to ``os.expanduser('~')`` when trying to find the
user home directory. [10570]

astropy.constants
^^^^^^^^^^^^^^^^^

- Corrected definition of parsec to 648 000 / pi AU following IAU 2015 B2 [10569]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where a float-typed integers in the argument ``x_range`` of
``astropy.convolution.utils.discretize_oversample_1D`` (and the 2D version as
well) fails because it uses ``numpy.linspace``, which requires an ``int``.
[10696]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ensure that for size-1 array ``SkyCoord`` and coordinate frames
the attributes also properly become scalars when indexed with 0.
[10113]

- Fixed a bug where ``SkyCoord.separation()`` and ``SkyCoord.separation_3d``
were not accepting a frame object. [10332]

- Ensure that the ``lon`` values in ``SkyOffsetFrame`` are wrapped correctly at
180 degree regardless of how the underlying data is represented. [10163]

- Fixed an error in the obliquity of the ecliptic when transforming to/from the
``*TrueEcliptic`` coordinate frames. The error would primarily result in an
inaccuracy in the ecliptic latitude on the order of arcseconds. [10129]

- Fixed an error in the computation of the location of solar system bodies where the
Earth location of the observer was ignored during the correction for light travel
time. [10292]

- Ensure that coordinates with proper motion that are transformed to other
coordinate frames still can be represented properly. [10276]

- Improve the error message given when trying to get a cartesian representation
for coordinates that have both proper motion and radial velocity, but no
distance. [10276]

- Fixed an error where ``SkyCoord.apply_space_motion`` would return incorrect
results when no distance is set and proper motion is high. [10296]

- Make the parsing of angles thread-safe so that ``Angle`` can be used in
Python multithreading. [10556]

- Fixed reporting of ``EarthLocation.info`` which previously raised an exception.
[10592]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a bug with the C ``fast_reader`` not correctly parsing newlines when
``delimiter`` was also set to ``\n`` or ``\r``; ensured consistent handling
of input strings without newline characters. [9929]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix integer formats of ``TFORMn=Iw`` columns in ASCII tables to correctly read
values exceeding int32 - setting int16, int32 or int64 according to ``w``. [9901]

- Fix unclosed memory-mapped FITS files in ``FITSDiff`` when difference found.
[10159]

- Fix crash when reading an invalid table file. [10171]

- Fix duplication issue when setting a keyword ending with space. [10482]

- Fix ResourceWarning with ``fits.writeto`` and ``pathlib.Path`` object.
[10599]

- Fix repr for commentary cards and strip spaces for commentary keywords.
[10640]

- Fix compilation of cfitsio with Xcode 12. [10772]

- Fix handling of 1-dimensional arrays with a single element in ``BinTableHDU`` [10768]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fix id URL in ``baseframe-1.0.0`` ASDF schema. [10223]

- Write keys to ASDF only if the value is present, to account
for a change in behavior in asdf 2.8. [10674]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Fix ``Table.(read|write).help`` when reader or writer has no docstring. [10460]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed parsing failure of VOTable with no fields. When detecting a non-empty
table with no fields, the following warning/exception is issued:
E25 "No FIELDs are defined; DATA section will be ignored." [10192]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a problem with mapping ``input_units`` and ``return_units``
of a ``CompoundModel`` to the units of the constituent models. [10158]

- Removed hard-coded names of inputs and outputs. [10174]

- Fixed a problem where slicing a ``CompoundModel`` by name will crash if
there ``fix_inputs`` operators are present. [10224]

- Removed a limitation of fitting of data with units with compound models
without units when the expression involves operators other than addition
and subtraction. [10415]

- Fixed a problem with fitting ``Linear1D`` and ``Planar2D`` in model sets. [10623]

- Fixed reported module name of ``math_functions`` model classes. [10694]

- Fixed reported module name of ``tabular`` model classes. [10709]

- Do not create new ``math_functions`` models for ufuncs that are
only aliases (divide and mod). [10697]

- Fix calculation of the ``Moffat2D`` derivative with respect to gamma. [10784]

astropy.stats
^^^^^^^^^^^^^

- Fixed an API regression where ``SigmaClip.__call__`` would convert masked
elements to ``nan`` and upcast the dtype to ``float64`` in its output
``MaskedArray`` when using the ``axis`` parameter along with the defaults
``masked=True`` and ``copy=True``. [10610]

- Fixed an issue where fully masked ``MaskedArray`` input to
``sigma_clipped_stats`` gave incorrect results. [10099]

- Fixed an issue where ``sigma_clip`` and ``SigmaClip.__call__``
would return a masked array instead of a ``ndarray`` when
``masked=False`` and the input was a full-masked ``MaskedArray``.
[10099]

- Fixed bug with ``funcs.poisson_conf_interval`` where an integer for N
with ``interval='kraft-burrows-nousek'`` would throw an error with
mpmath backend. [10427]

- Fixed bug in ``funcs.poisson_conf_interval`` with
``interval='kraft-burrows-nousek'`` where certain combinations of source
and background count numbers led to ``ValueError`` due to the choice of
starting value for numerical optimization. [10618]


astropy.table
^^^^^^^^^^^^^

- Fixed a bug when writing a table with mixin columns to FITS, ECSV or HDF5.
If one of the data attributes of the mixin (e.g. ``skycoord.ra``) had the
same name as one of the table column names (``ra``), the column (``ra``)
would be dropped when reading the table back. [10222]

- Fixed a bug when sorting an indexed table on the indexed column after first
sorting on another column. [10103]

- Fixed a bug in table argsort when called with ``reverse=True`` for an
indexed table. [10103]

- Fixed a performance regression introduced in 9048 when initializing a table
from Python lists. Also fixed incorrect behavior (for data types other than
float) when those lists contain ``np.ma.masked`` elements to indicate masked
data. [10636]

- Avoid modifying ``.meta`` when serializing columns to FITS. [10485]

- Avoid crash when reading a FITS table that contains mixin info and PyYAML
is missing. [10485]


astropy.tests
^^^^^^^^^^^^^

astropy.time
^^^^^^^^^^^^

- Ensure that for size-1 array ``Time``, the location also properly becomes
a scalar when indexed with 0. [10113]

astropy.units
^^^^^^^^^^^^^

- Refined test_parallax to resolve difference between 2012 and 2015 definitions. [10569]

astropy.utils
^^^^^^^^^^^^^

- The default IERS server has been updated to use the FTPS server hosted by
CDDIS. [9964]

- Fixed memory allocation on 64-bit systems within ``xml.iterparse`` [10076]

- Fix case where ``None`` could be used in a numerical computation. [10126]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug where the ``ImageNormalize`` ``clip`` keyword was
ignored when used with calling the object on data. [10098]

- Fixed a bug where ``axes.xlabel``/``axes.ylabel`` where not correctly set
nor returned on an ``EllipticalFrame`` class ``WCSAxes`` plot. [10446]

astropy.wcs
^^^^^^^^^^^

- Handled WCS 360 -> 0 deg crossover in ``fit_wcs_from_points`` [10155]

- Do not issue ``DATREF`` warning when ``MJDREF`` has default value. [10440]

- Fixed a bug due to which ``naxis`` argument was ignored if ``header``
was supplied during the initialization of a WCS object. [10532]

Other Changes and Additions
---------------------------

- Improved the speed of sorting a large ``Table`` on a single column by a factor
of around 5. [10103]

- Ensure that astropy can be used inside Application bundles built with
pyinstaller. [8795]

- Updated the bundled CFITSIO library to 3.49. See
``cextern/cfitsio/docs/changes.txt`` for additional information.
[10256, 10665]

- ``extract_array`` raises a ``ValueError`` if the data type of the
input array is inconsistent with the ``fill_value``. [10602]
Links

Update coverage from 5.1 to 5.4.

Changelog

5.4

--------------------------

- The text report produced by ``coverage report`` now always outputs a TOTAL
line, even if only one Python file is reported.  This makes regex parsing
of the output easier.  Thanks, Judson Neer.  This had been requested a number
of times (`issue 1086`_, `issue 922`_, `issue 732`_).

- The ``skip_covered`` and ``skip_empty`` settings in the configuration file
can now be specified in the ``[html]`` section, so that text reports and HTML
reports can use separate settings.  The HTML report will still use the
``[report]`` settings if there isn't a value in the ``[html]`` section.
Closes `issue 1090`_.

- Combining files on Windows across drives how works properly, fixing `issue
577`_.  Thanks, `Valentine Lab <pr1080_>`_.

- Fix an obscure warning from deep in the _decimal module, as reported in
`issue 1084`_.

- Update to support Python 3.10 alphas in progress, including `PEP 626: Precise
line numbers for debugging and other tools <pep626_>`_.

.. _issue 577: https://github.com/nedbat/coveragepy/issues/577
.. _issue 732: https://github.com/nedbat/coveragepy/issues/732
.. _issue 922: https://github.com/nedbat/coveragepy/issues/922
.. _issue 1084: https://github.com/nedbat/coveragepy/issues/1084
.. _issue 1086: https://github.com/nedbat/coveragepy/issues/1086
.. _issue 1090: https://github.com/nedbat/coveragepy/issues/1090
.. _pr1080: https://github.com/nedbat/coveragepy/pull/1080
.. _pep626: https://www.python.org/dev/peps/pep-0626/


.. _changes_531:

5.3.1

----------------------------

- When using ``--source`` on a large source tree, v5.x was slower than previous
versions.  This performance regression is now fixed, closing `issue 1037`_.

- Mysterious SQLite errors can happen on PyPy, as reported in `issue 1010`_. An
immediate retry seems to fix the problem, although it is an unsatisfying
solution.

- The HTML report now saves the sort order in a more widely supported way,
fixing `issue 986`_.  Thanks, Sebastián Ramírez (`pull request 1066`_).

- The HTML report pages now have a :ref:`Sleepy Snake <sleepy>` favicon.

- Wheels are now provided for manylinux2010, and for PyPy3 (pp36 and pp37).

- Continuous integration has moved from Travis and AppVeyor to GitHub Actions.

.. _issue 986: https://github.com/nedbat/coveragepy/issues/986
.. _issue 1037: https://github.com/nedbat/coveragepy/issues/1037
.. _issue 1010: https://github.com/nedbat/coveragepy/issues/1010
.. _pull request 1066: https://github.com/nedbat/coveragepy/pull/1066

.. _changes_53:

5.3

--------------------------

- The ``source`` setting has always been interpreted as either a file path or a
module, depending on which existed.  If both interpretations were valid, it
was assumed to be a file path.  The new ``source_pkgs`` setting can be used
to name a package to disambiguate this case.  Thanks, Thomas Grainger. Fixes
`issue 268`_.

- If a plugin was disabled due to an exception, we used to still try to record
its information, causing an exception, as reported in `issue 1011`_.  This is
now fixed.

.. _issue 268: https://github.com/nedbat/coveragepy/issues/268
.. _issue 1011: https://github.com/nedbat/coveragepy/issues/1011


.. _changes_521:

5.2.1

----------------------------

- The dark mode HTML report still used light colors for the context listing,
making them unreadable (`issue 1009`_).  This is now fixed.

- The time stamp on the HTML report now includes the time zone. Thanks, Xie
Yanbo (`pull request 960`_).

.. _pull request 960: https://github.com/nedbat/coveragepy/pull/960
.. _issue 1009: https://github.com/nedbat/coveragepy/issues/1009


.. _changes_52:

5.2

--------------------------

- The HTML report has been redesigned by Vince Salvino.  There is now a dark
mode, the code text is larger, and system sans serif fonts are used, in
addition to other small changes (`issue 858`_ and `pull request 931`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--precision`` option to control the number of decimal points displayed.
Thanks, Teake Nutma (`pull request 982`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--no-skip-covered`` option to negate ``--skip-covered``.  Thanks, Anthony
Sottile (`issue 779`_ and `pull request 932`_).

- The ``--skip-empty`` option is now available for the XML report, closing
`issue 976`_.

- The ``coverage report`` command now accepts a ``--sort`` option to specify
how to sort the results.  Thanks, Jerin Peter George (`pull request 1005`_).

- If coverage fails due to the coverage total not reaching the ``--fail-under``
value, it will now print a message making the condition clear.  Thanks,
Naveen Yadav (`pull request 977`_).

- TOML configuration files with non-ASCII characters would cause errors on
Windows (`issue 990`_).  This is now fixed.

- The output of ``--debug=trace`` now includes information about how the
``--source`` option is being interpreted, and the module names being
considered.

.. _pull request 931: https://github.com/nedbat/coveragepy/pull/931
.. _pull request 932: https://github.com/nedbat/coveragepy/pull/932
.. _pull request 977: https://github.com/nedbat/coveragepy/pull/977
.. _pull request 982: https://github.com/nedbat/coveragepy/pull/982
.. _pull request 1005: https://github.com/nedbat/coveragepy/pull/1005
.. _issue 779: https://github.com/nedbat/coveragepy/issues/779
.. _issue 858: https://github.com/nedbat/coveragepy/issues/858
.. _issue 976: https://github.com/nedbat/coveragepy/issues/976
.. _issue 990: https://github.com/nedbat/coveragepy/issues/990


.. _changes_51:
Links

Update hypothesis from 5.16.0 to 6.1.1.

Changelog

6.1.1

------------------

This patch updates our automatic code formatting to use :pypi:`shed`,
which includes :pypi:`autoflake`, :pypi:`black`, :pypi:`isort`, and
:pypi:`pyupgrade` (:issue:`2780`).

6.1.0

------------------

This release teaches Hypothesis to distinguish between errors based on the
`__cause__ or __context__ of otherwise identical exceptions
<https://docs.python.org/3/library/exceptions.html>`__, which is particularly
useful when internal errors can be wrapped by a library-specific or semantically
appropriate exception such as:

.. code-block:: python

 try:
     do_the_thing(foo, timeout=10)
 except Exception as err:
     raise FooError("Failed to do the thing") from err

Earlier versions of Hypothesis only see the ``FooError``, while we can now
distinguish a ``FooError`` raised because of e.g. an internal assertion from
one raised because of a ``TimeoutExceeded`` exception.

6.0.4

------------------

This release prevents a race condition inside :func:`~hypothesis.strategies.recursive` strategies.
The race condition occurs when the same :func:`~hypothesis.strategies.recursive` strategy is shared among tests
that are running in multiple threads (:issue:`2717`).

6.0.3

------------------

This patch improves the type annotations for :func:`~hypothesis.strategies.one_of`,
by adding overloads to handle up to five distinct arguments as
:class:`~python:typing.Union` before falling back to :class:`~python:typing.Any`,
as well as annotating the ``|`` (``__or__``) operator for strategies (:issue:`2765`).

6.0.2

------------------

This release makes some small improvements to how filtered strategies work. It should improve the performance of shrinking filtered strategies,
and may under some (probably rare) circumstances improve the diversity of generated examples.

6.0.1

------------------

This patch fixes an interaction where our :ref:`test statistics <statistics>`
handling made Pytest's ``--junit-xml`` output fail to validate against the
strict ``xunit2`` schema (:issue:`1975`).

6.0.0

------------------

Welcome to the next major version of Hypothesis!

There are no new features here, as we release those in minor versions.
Instead, 6.0 is a chance for us to remove deprecated features (many already
converted into no-ops), and turn a variety of warnings into errors.

If you were running on the last version of Hypothesis 5.x *without any
Hypothesis deprecation warnings*, this will be a very boring upgrade.
**In fact, nothing will change for you at all.**

Changes
~~~~~~~
- Many functions now use :pep:`3102` keyword-only arguments where passing positional
arguments :ref:`was deprecated since 5.5 <v5.5.0>`.
- :func:`hypothesis.extra.django.from_model` no longer accepts ``model`` as a
keyword argument, where it could conflict with fields named "model".
- :func:`~hypothesis.strategies.randoms` now defaults to ``use_true_random=False``.
- :func:`~hypothesis.strategies.complex_numbers` no longer accepts
``min_magnitude=None``; either use ``min_magnitude=0`` or just omit the argument.
- ``hypothesis.provisional.ip4_addr_strings`` and ``ip6_addr_strings`` are removed
in favor of :func:`ip_addresses(v=...).map(str) <hypothesis.strategies.ip_addresses>`.
- :func:`~hypothesis.strategies.register_type_strategy` no longer accepts generic
types with type arguments, which were always pretty badly broken.
- Using function-scoped pytest fixtures is now a health-check error, instead of a warning.

.. tip::
 The :command:`hypothesis codemod` command can automatically refactor your code,
 particularly to convert positional to keyword arguments where those are now
 required.

Hypothesis 5.x
==============

5.49.0

-------------------

This release adds the
:obj:`~hypothesis.HealthCheck.function_scoped_fixture` health check value,
which can be used to suppress the existing warning that appears when
:func:`given <hypothesis.given>` is applied to a test that uses pytest
function-scoped fixtures.

(This warning exists because function-scoped fixtures only run once per
function, not once per example, which is usually unexpected and can cause
subtle problems.)

When this warning becomes a health check error in a future release, suppressing
it via Python warning settings will no longer be possible.
In the rare case that once-per-function behaviour is intended, it will still be
possible to use :obj:`~hypothesis.HealthCheck.function_scoped_fixture` to
opt out of the health check error for specific tests.

5.48.0

-------------------

This release adds :func:`hypothesis.currently_in_test_context`, which can be used
to check whether the calling code is currently running inside an
:func:`given <hypothesis.given>` or :doc:`stateful <stateful>` test.

This is most useful for third-party integrations and assertion helpers which may
wish to use :func:`~hypothesis.assume` or :func:`~hypothesis.target`, without also
requiring that the helper only be used from property-based tests (:issue:`2581`).

5.47.0

-------------------

This release upgrades the import logic for :doc:`ghostwritten tests <ghostwriter>`,
handling many cases where imports would previously be missing or from unexpected
locations.

5.46.0

-------------------

This release upgrades :func:`~hypothesis.strategies.from_type`, to infer
strategies for type-annotated arguments even if they have defaults when
it otherwise falls back to :func:`~hypothesis.strategies.builds`
(:issue:`2708`).

5.45.0

-------------------

This release adds the :ref:`codemods` extra, which you can use to
check for and automatically fix issues such as use of deprecated
Hypothesis APIs (:issue:`2705`).

5.44.0

-------------------

This patch fixes :func:`~hypothesis.strategies.from_type` with
the :pypi:`typing_extensions` ``Literal`` backport on Python 3.6.

5.43.9

-------------------

This patch fixes :issue:`2722`, where certain orderings of
:func:`~hypothesis.strategies.register_type_strategy`,
:class:`~python:typing.ForwardRef`, and :func:`~hypothesis.strategies.from_type`
could trigger an internal error.

5.43.8

-------------------

This patch makes some strategies for collections with a uniqueness constraint
much more efficient, including ``dictionaries(keys=sampled_from(...), values=..)``
and ``lists(tuples(sampled_from(...), ...), unique_by=lambda x: x[0])``.
(related to :issue:`2036`)

5.43.7

-------------------

This patch extends our faster special case for
:func:`~hypothesis.strategies.sampled_from` elements in unique
:func:`~hypothesis.strategies.lists` to account for chains of
``.map(...)`` and ``.filter(...)`` calls (:issue:`2036`).

5.43.6

-------------------

This patch improves the type annotations on :func:`~hypothesis.assume`
and :func:`reproduce_failure() <hypothesis.reproduce_failure>`.

5.43.5

-------------------

This patch updates our copyright headers to include 2021.  Happy new year!

5.43.4

-------------------

This change fixes a documentation error in the
:obj:`~hypothesis.settings.database` setting.

The previous documentation suggested that callers could specify a database
path string, or the special string ``":memory:"``, but this setting has
never actually allowed string arguments.

Permitted values are ``None``, and instances of
:class:`~hypothesis.database.ExampleDatabase`.

5.43.3

-------------------

This patch fixes :issue:`2696`, an internal error triggered when the
:func:`example <hypothesis.example>` decorator was used and the
:obj:`~hypothesis.settings.verbosity` setting was ``quiet``.

5.43.2

-------------------

This patch improves the error message from the
:func:`~hypothesis.extra.pandas.data_frames` strategy when both the ``rows``
and ``columns`` arguments are given, but there is a missing entry in ``rows``
and the corresponding column has no ``fill`` value (:issue:`2678`).

5.43.1

-------------------

This patch improves the error message if :func:`~hypothesis.strategies.builds`
is passed an :class:`~python:enum.Enum` which cannot be called without arguments,
to suggest using :func:`~hypothesis.strategies.sampled_from` (:issue:`2693`).

5.43.0

-------------------

This release adds new :func:`~hypothesis.strategies.timezones` and
:func:`~hypothesis.strategies.timezone_keys` strategies (:issue:`2630`)
based on the new :mod:`python:zoneinfo` module in Python 3.9.

``pip install hypothesis[zoneinfo]`` will ensure that you have the
appropriate backports installed if you need them.

5.42.3

-------------------

This patch fixes an internal error in :func:`~hypothesis.strategies.datetimes`
with ``allow_imaginary=False`` where the ``timezones`` argument can generate
``tzinfo=None`` (:issue:`2662`).

5.42.2

-------------------

This patch teaches :func:`hypothesis.extra.django.from_field` to infer
more efficient strategies by inspecting (not just filtering by) field
validators for numeric and string fields (:issue:`1116`).

5.42.1

-------------------

This patch refactors :class:`hypothesis.settings` to use type-annotated
keyword arguments instead of ``**kwargs``, which makes tab-completion
much more useful - as well as type-checkers like :pypi:`mypy`.

5.42.0

-------------------

This patch teaches the :func:`~hypothesis.extra.ghostwriter.magic` ghostwriter
to recognise "en/de" function roundtrips other than the common encode/decode
pattern, such as encrypt/decrypt or, encipher/decipher.

5.41.5

-------------------

This patch adds a performance optimisation to avoid saving redundant
seeds when using :ref:`the .fuzz_one_input hook <fuzz_one_input>`.

5.41.4

-------------------

This patch fixes :issue:`2657`, where passing unicode patterns compiled with
:obj:`python:re.IGNORECASE` to :func:`~hypothesis.strategies.from_regex` could
trigger an internal error when casefolding a character creates a longer string
(e.g. ``"\u0130".lower() -> "i\u0370"``).

5.41.3

-------------------

This patch adds a final fallback clause to :ref:`our plugin logic <entry-points>`
to fail with a warning rather than error on Python < 3.8 when neither the
:pypi:`importlib_metadata` (preferred) or :pypi:`setuptools` (fallback)
packages are available.

5.41.2

-------------------

This patch fixes :func:`~hypothesis.provisional.urls` strategy ensuring that
``~`` (tilde) is treated as one of the url-safe characters (:issue:`2658`).

5.41.1

-------------------

This patch improves our :ref:`CLI help and documentation <hypothesis-cli>`.

5.41.0

-------------------

Hypothesis now shrinks examples where the error is raised while drawing from
a strategy.  This makes complicated custom strategies *much* easier to debug,
at the cost of a slowdown for use-cases where you catch and ignore such errors.

5.40.0

-------------------

This release teaches :func:`~hypothesis.strategies.from_type` how to handle
:class:`~python:typing.ChainMap`, :class:`~python:typing.Counter`,
:class:`~python:typing.Deque`, :class:`~python:typing.Generator`,
:class:`~python:typing.Match`, :class:`~python:typing.OrderedDict`,
:class:`~python:typing.Pattern`, and :class:`~python:collections.abc.Set`
(:issue:`2654`).

5.39.0

-------------------

:func:`~hypothesis.strategies.from_type` now knows how to resolve :pep:`585`
parameterized standard collection types, which are new in Python 3.9
(:issue:`2629`).

5.38.1

-------------------

This patch fixes :func:`~hypothesis.strategies.builds`, so that when passed
:obj:`~hypothesis.infer` for an argument with a non-:class:`~python:typing.Optional`
type annotation and a default value of ``None`` to build a class which defines
an explicit ``__signature__`` attribute, either ``None`` or that type may be
generated.

This is unlikely to happen unless you are using :pypi:`pydantic` (:issue:`2648`).

5.38.0

-------------------

This release improves our support for :func:`st.composite <hypothesis.strategies.composite>`
on a :obj:`python:classmethod` or :obj:`python:staticmethod` (:issue:`2578`).

5.37.5

-------------------

This patch fixes :func:`~hypothesis.strategies.from_type` with
:class:`Iterable[T] <python:typing.Iterable>` (:issue:`2645`).

5.37.4

-------------------

This patch teaches the :func:`~hypothesis.extra.ghostwriter.magic` ghostwriter
to recognise that pairs of functions like :func:`~python:colorsys.rgb_to_hsv`
and :func:`~python:colorsys.hsv_to_rgb` should
:func:`~hypothesis.extra.ghostwriter.roundtrip`.

5.37.3

-------------------

This patch improves :func:`~hypothesis.strategies.builds` and
:func:`~hypothesis.strategies.from_type` support for explicitly defined ``__signature__``
attributes, from :ref:`version 5.8.3 <v5.8.3>`, to support generic types from the
:mod:`python:typing` module.

Thanks to Rónán Carrigan for identifying and fixing this problem!

5.37.2

-------------------

This patch fixes :func:`~hypothesis.extra.lark.from_lark` with version
0.10.1+ of the :pypi:`lark-parser` package.

5.37.1

-------------------

This patch fixes some broken links in the :mod:`~hypothesis.extra.lark`
extra documentation.

5.37.0

-------------------

This release adds a new :class:`~hypothesis.extra.redis.RedisExampleDatabase`,
along with the :class:`~hypothesis.database.ReadOnlyDatabase`
and :class:`~hypothesis.database.MultiplexedDatabase` helpers, to support
team workflows where failing examples can be seamlessly shared between everyone
on the team - and your CI servers or buildbots.

5.36.2

-------------------

This patch ensures that if the :ref:`"hypothesis" entry point <entry-points>`
is callable, we call it after importing it.  You can still use non-callable
entry points (like modules), which are only imported.

We also prefer `importlib.metadata <https://docs.python.org/3/library/importlib.metadata.html>`__
or :pypi:`the backport <importlib_metadata>` over `pkg_resources
<https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`__,
which makes ``import hypothesis`` around 200 milliseconds faster
(:issue:`2571`).

5.36.1

-------------------

This patch adds some helpful suggestions to error messages you might see
while learning to use the :func:`example() <hypothesis.example>` decorator
(:issue:`2611`) or the :func:`~hypothesis.strategies.one_of` strategy.

5.36.0

-------------------

This release upgrades the :func:`~hypothesis.extra.numpy.from_dtype` strategy
to pass optional ``**kwargs`` to the inferred strategy, and upgrades the
:func:`~hypothesis.extra.numpy.arrays` strategy to accept an ``elements=kwargs``
dict to pass through to :func:`~hypothesis.extra.numpy.from_dtype`.

``arrays(floating_dtypes(), shape, elements={"min_value": -10, "max_value": 10})``
is a particularly useful pattern, as it allows for any floating dtype without
triggering the roundoff warning for smaller types or sacrificing variety for
larger types (

@pyup-bot
Copy link
Contributor Author

pyup-bot commented Mar 1, 2021

Closing this in favor of #167

@pyup-bot pyup-bot closed this Mar 1, 2021
@jason-neal jason-neal deleted the pyup/scheduled-update-2021-02-01 branch March 1, 2021 16:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant