What’s New in sunpy 6.0?#
The SunPy Project is pleased to announce the 6.0 release of the sunpy
core package.
On this page, you can read about some of the big changes in this release.
sunpy
6.0 also includes a large number of smaller improvements and bug fixes, which are described in the Full Changelog.
This release of sunpy
contains 795 commits in 177 merged pull requests closing 67 issues from 34 people, 16 of which are first-time contributors to sunpy
.
795 commits have been added since 5.1
67 issues have been closed since 5.1
177 pull requests have been merged since 5.1
34 people have contributed since 5.1
16 of which are new contributors
The people who have contributed to the code for this release are:
Ahmed Hossam *
Alasdair Wilson
Albert Y. Shih
Aniket Mishra *
Ansh Dixit
Aritra Sinha
Ashish Bastola *
Benjamin Mampaey
Brett J Graham
Chris R. Gilly *
Clément Robert *
Daniel F. Ryan
Daniel Garcia Briseno
David Stansby
Ghaith Kdimati *
Jayraj Dulange *
Laura Hayes
Manit Singh *
Mubin Manasia *
Nabil Freij
Piyush Sharma *
Rehan Chalana *
Samuel Bennett
Samuel J. Van Kooten
Shane Maloney
Sijie Yu *
Sirjan Hansda *
Stuart J. Mumford
Will Barnes
Yash Malik *
Zach Burnett *
dependabot[bot]
graham *
pre-commit-ci[bot]
Updates to minimum dependencies#
The minimum required version of Python has been updated to 3.10.
The minimum required versions of core dependencies have been updated:
astropy >= 5.3.0
numpy >= 1.23.5
packaging >= 23.0
The minimum required versions of these optional dependencies has also been updated:
asdf >= 2.13.0
asdf-astropy >= 0.4.0
beautifulsoup4 >= 4.11.0
cdflib >= 0.4.4
dask >= 2022.5.2
glymur >= 0.11.0
h5netcdf >= 1.0.0
h5py >= 3.7.0
lxml >= 4.9.0
opencv-python >= 4.6.0.66
pandas >= 1.4.0
python-dateutil >= 2.8.1
reproject >= 0.9.0
requests >= 2.28
scikit-image >= 0.19.0
scipy >= 1.9.0
spiceypy >= 5.0.0
tqdm >= 4.64.0
zeep >= 4.1.0
Overhaul of optional dependencies#
The optional dependencies have been overhauled to make it easier to install sunpy
with only the dependencies you need.
The following extra group have been added:
“core” (
pip install "sunpy[core]"
) - installs only the dependencies that are required to importsunpy
or any of its sub-packages.“scikit-image” (
pip install "sunpy[scikit-image]"
) - installs thescikit-image
package used for image processing. This dependency is no longer included in the “image” extra group.
Additionally, the “all” (pip install "sunpy[all]"
) install group is now a meta group that includes all optional dependencies.
The “dask” group has also been removed.
Decoupling dates in Map
#
Previously, Map
used the single date
property to serve two, potentially conflicting purposes: the “canonical” observation time and the reference time for the coordinate system.
In order to properly support map sources where those two times are not the same, there is a new reference_date
property to serve as the reference time for the coordinate system.
date
continues to serve as the canonical observation time, which is commonly the start of the observation period.
See the documentation for the respective properties for the logic of parsing the metadata.
An example of a user-facing impact is that, for certain map sources, the time used by the coordinate_frame
and observer_coordinate
properties can be different from the time printed in the default title of plots.
Support for ADvanced Adaptive Prediction Technique (ADAPT) data#
A new map source has been added (sunpy.map.sources.ADAPTMap
) to support the ADAPT data files.
In addition, a new client (sunpy.net.dataretriever.ADAPTClient
) has been added to search and download ADAPT files.
Please note that there are several data arrays within the ADAPT FITS files and Map
will, by default, try to read them all and fail.
In these cases, you must specify the header-data Pair you want to read.
For these data, it will always be the first one.
You can specify this by passing the hdus
keyword argument to Map
,
>>> sunpy.map.Map("adapt40311_03k012_202401020800_i00005600n1.fts.gz", hdus=0)
New PlanarScreen
context manager#
PlanarScreen
provides a context manager for interpreting 2D coordinates as being on the inside of a planar screen.
The plane goes through Sun center (or some specified distance from Sun center) and is perpendicular to the vector between the specified vantage point and Sun center.
This replaces the default assumption where 2D coordinates are mapped onto the surface of the Sun and is an alternative to SphericalScreen
.
Method to compute the rotation matrix between two SPICE frames#
A new function get_rotation_matrix
has been implemented to compute the rotation matrix between two SPICE frames.
>>> from sunpy.coordinates.spice import get_rotation_matrix
>>> import astropy.units as u
>>> source_frame = "J2000"
>>> target_frame = "Galactic"
>>> from_time = '2001-01-01T00:00:00'
>>> rotation_matrix = get_rotation_matrix(source_frame, target_frame, from_time)
>>> rotation_matrix
array([[-0.05487554, -0.8734371 , -0.48383499],
[ 0.49410945, -0.44482959, 0.74698225],
[-0.86766614, -0.19807639, 0.45598379]])
>>> vec_components = [1, 0, 0] * u.T
>>> transformed_matrix = rotation_matrix @ vec_components
>>> transformed_matrix
<Quantity [-0.05487554, 0.49410945, -0.86766614] T>
Fix filename sanitization for downloaded files from the VSO#
The VSOClient
has been sanitizing filenames to ensure that they are valid on all platforms.
However, we have now fixed the sanitization to be more conservative, to follow the NFKC Unicode normalization, which is the recommended normalization for filenames on most platforms.
This now does not replace periods, does not change letter case and does not leave Unicode characters decomposed.
One example is that the letter “ä” will now be preserved in the filename.
Another example is that the filename “aia.lev1.171A_2020_06_07T06_33_09.35Z.image_lev1.fits” will be preserved instead of being replaced with “aia_lev1_171a_2020_06_07t06_33_09_35z_image_lev1.fits”.
Warning
This will most likely force a redownload of files from several data providers.
Deprecate assume_spherical_screen
#
assume_spherical_screen()
is now deprecated.
Equivalent functionality is now provided by SphericalScreen
.
Removal of sunpy.net.helioviewer.HelioViewerClient
#
sunpy.net.helioviewer
has been deprecated since sunpy v4.1 and has now been removed.
Users should instead use the hvpy package.
This package provides a Python wrapper around the Helioviewer API and is maintained by the Helioviewer Project.
The hvpy
package supersedes the sunpy.net.helioviewer
module.
Removal of sunpy.database
#
The sunpy.database
module has not been actively maintained for over a year now and has a number of outstanding issues.
It has been deprecated since sunpy 4.1, and since there have been no major objections from the community since then we have completely removed sunpy.database
in sunpy 6.0.
If you are interested in seeing a replacement for sunpy.database
, either inside sunpy
or as a third-party package, please join the discussion thread at https://community.openastronomy.org/t/deprecating-sunpy-database/495.