Full Changelog#
6.0.dev26+ge000af8fc (2023-12-07)#
Removals#
sunpy.database
has been removed. (#7320)
New Features#
get_horizons_coord()
now supports time arrays with up to 10,000 elements. (#7319)
Bug Fixes#
Long object names are no longer truncated in the logging output of
get_horizons_coord()
. (#7319)
Documentation#
Fixed the usage of
superpixel()
in Resampling Maps. (#7316)Added Clarification on setting JSOC Email. (#7329)
Internal Changes#
The
requests
package is a now formally a core dependency.requests
was already commonly installed as an implied dependency ofsunpy.net
or for building documentation. (#7319)The function
get_horizons_coord()
no longer calls theastroquery
package, soastroquery
is no longer a dependency. (#7319)
5.1.0 (2023-11-20)#
New Features#
Added the ability to skip over errors raised for invalid fits files when passing a list of files to map using the existing keyword argument
silence_errors
. (#7018)Added a
sunpy.coordinates.Helioprojective.is_visible()
method to return whether the coordinate is visible (i.e., not obscured from the observer assuming that the Sun is an opaque sphere). (#7118)Added a keyword option (
quiet
) forget_body_heliographic_stonyhurst()
to silence the normal reporting of the light-travel-time correction whenobserver
is specified. (#7142)Added the function
sunpy.coordinates.sun.eclipse_amount()
to calculate the solar-eclipse amount for an observer. (#7142)Add a keyword (
map_center_longitude
) tomake_heliographic_header()
for centering the heliographic map at a longitude other than zero longitude. (#7143)The minimum required version of
Glymur
(an optional dependency for reading JPEG2000 files) has been increase to 0.9.1. (#7164)Added new default colormap scalings for WISPR Maps. Plots are now clipped at zero, and
AsinhStretch
is used for the scaling to ensure coronal details are visible despite the much-brighter stars. Parsing of thedetector
andlevel
fields of the FITS headers is also improved. (#7180)When creating a coordinate or coordinate frame without specifying
obstime
, theobstime
value from theobserver
frame attribute will be used if present. (#7186)Added a GONG synoptic map class which fixes non-compliant FITS metadata (#7220)
Added the module
sunpy.coordinates.spice
to enable the use of theSkyCoord
API to perform computations using SPICE kernels. (#7237)Added three coordinate frames that depend on the orientation of Earth’s magnetic dipole:
Geomagnetic
(MAG),SolarMagnetic
(SM), andGeocentricSolarMagnetospheric
(GSM). (#7239)
Bug Fixes#
Fix RHESSI (
RHESSIClient
) fallback server detection. (#7092)Fix bug in
get_horizons_coord()
when specifying a time range via a dictionary that could cause the returned times to be slightly different from the supplied times. (#7106)Updated the url of the
GBMClient
to match on files other than those that end with version 0 (i.e., V0.pha). (#7148)When directly instantiating a
WCS
from a FITS header that contains both Stonyhurst and Carrington heliographic coordinates for the observer location, the Stonyhurst coordinates will now be prioritized. This behavior is now consistent with theMap
class, which has always prioritized Stonyhurst coordinates over Carrington coordinates. (#7188)Fixed a bug with
sample_at_coords()
where sampling outside the bounds of the map would sometimes not error and instead return strange pixel values. (#7206)Improved code when loading CDF files to improve performance and avoid raising of pandas performance warnings. (#7247)
Fixed a bug with
sunpy.map.GenericMap.plot()
where settingnorm
toNone
would result in an error. (#7261)
Documentation#
Removed the specification of a non-identity rotation matrix in two reprojection examples. (#7114)
Added an example (Visualizing 3D stereoscopic images) for how to make an anaglyph 3D (i.e., red-cyan) image from a stereoscopic observation. (#7123)
Added an example (Obtaining solar-eclipse information) to show how to obtain information about a solar eclipse using
sunpy.coordinates.sun.eclipse_amount()
. (#7142)Changed the Masking HMI based on the intensity of AIA to reproject AIA to HMI instead of the other way around. This is to avoid interpolating the HMI LOS magnetic field data. (#7160)
Fixed the timeseries peak finding example. Previously there was a bug when plotting the data with pandas. (#7199)
Added an example (Coordinates computations using SPICE kernels) for how to perform SPICE computations using the
SkyCoord
API. (#7237)
Deprecations#
Deprecated
silence_errors
in Map and Timeseries. This has been replaced withallow_errors
keyword. (#7021)The
sunpy.coordinates.transformations
module is now slated for removal from the public API as it consists of internal functions used by coordinate transformations. The context managerssunpy.coordinates.transform_with_sun_center()
andsunpy.coordinates.propagate_with_solar_surface()
should be accessed undersunpy.coordinates
. (#7113)
Removals#
sunpy.map.extract_along_coord()
has been removed. Instead, usepixelate_coord_path()
, and then pass its output tosample_at_coords()
.pixelate_coord_path
uses a different line algorithm by default, but you can specifybresenham=True
as an argument to use the same line algorithm asextract_along_coord
. (#7200)sunpy.visualisation.limb.draw_limb()
has been removed. Usesunpy.visualization.drawing.limb()
instead. (#7202)Removed
GenericTimeSeries.index
. UseGenericTimeseries.time
instead as a direct replacement. (#7203)Removed the deprecated
sunpy.io.cdf
submodule, which is not intended to be user facing. (#7240)Removed the deprecated
sunpy.io.jp2
, which is not intended to be user facing. (#7241)Removed the deprecated
sunpy.io.file_tools
, which is not intended to be user facing. (#7242)The deprecated
sunpy.data.download_sample_data()
has been removed Usesunpy.data.sample.download_all()
instead. (#7250)
Internal Changes#
Removed the Binder configuration and link in README. This is because the configuration was untested, and does not currently work. (#7062)
Add a Dependabot config file to auto-update GitHub action versions. (#7068)
Add tests to check whether various
Map
methods preserve laziness when operating on Maps backed by adask.array.Array
. (#7100)Added missing support to find GOES-18 XRS data in
XRSClient
. (#7108)Raise an error with a helpful message when
sunpy.map.GenericMap.plot()
is called with a non-boolean value for theannotate
keyword, because the user is probably trying to specify the axes. (#7163)Fixed our ASDF manifest having the incorrect ID. (#7282)
Fix example formatting in a few asdf schemas. (#7292)
Pinned the
drms
requirement to< 0.7
to avoid breaking changes indrms
version 0.7. (#7308)
5.0.0 (2023-06-14)#
Breaking Changes#
XRSClient
now provides the re-processed GOES-XRS 8-15 data from NOAA. These files are now all NetCDF and not FITS files. (#6737)Changed the output of
sunpy.map.sample_at_coords()
to return the sampled values asQuantity
with the appropriate units instead of merely numbers. (#6882)
Deprecations#
Using
sunpy.map.header_helper.meta_keywords
is deprecated. Please see Meta Keywords for the list of metadata keywords used byMap
. (#6743)The utility function
sunpy.map.extract_along_coord
is deprecated. Usesunpy.map.pixelate_coord_path()
, and then pass its output tosunpy.map.sample_at_coords()
. (#6840)Parsing SDO/EVE level 0CS average files is deprecated, and will be removed in sunpy 6.0. Parsing this data is untested, and we cannot find a file to test it with. If you know where level 0CS ‘averages’ files can be found, please get in touch at https://community.openastronomy.org/c/sunpy/5. (#6857)
Fully deprecated
sunpy.database
, with an expected removal version of sunpy 6.0. (#6869)sunpy.io.cdf
,sunpy.io.file_tools
andsunpy.io.jp2
sub-modules have been deprecated, and will be removed in version 5.1. This because they are designed for internal use only, and removing it from the public API gives the developers more flexibility to modify it without impacting users. (#6895)
New Features#
A pure Python
sunpy
wheel is now published on PyPI with each release.pip
will now default to installing the pure Python wheel instead of the source distribution on platforms other than Linux (x86-64) and macOS (x86-64 and ARM64). This should mean simpler and faster installs on such platforms, which includes the Raspberry Pi as well as some cloud computing services.This wheel does not contain the
sunpy.io.ana
compiled extension. If you need this extension (not available on Windows) you can install thesunpy
source distribution withpip install --no-binary sunpy "sunpy[all]"
. (#6175)Added three tutorials which replicate
CompositeMap
functionality (Overlaying Two Maps, Combining off-limb and disk maps, Creating a Composite Plot with Three Maps). (#6459)exposure_time
now looks for the exposure time in theXPOSURE
key first and then theEXPTIME
key. (#6557)make_fitswcs_header
now includes the keyword argumentdetector
for setting theDETECTOR
FITS keyword in the resulting header. (#6558)Adds two tutorials that demonstrate how to use LASCO data in overlaying maps (Overlay an AIA image on a LASCO C2 coronagraph) and how to create a custom mask for a LASCO C2 image (Creating a mask for LASCO C2 data). (#6576)
Able to run the
sunpy
tests doingpython -m sunpy.tests.self_test
. (#6600)Able to detect gzip-compressed FITS files even if they don’t have the
.gz
extension in the filename.detect_filetype
now looks for the right file signature while checking for gzipped FITS files. (#6693)Added
AttrAnd
andAttrOr
to the namespace insunpy.net.attrs
. This allows users to to avoid|
or&
when creating a query a larger query. (#6708)SUVIClient
now provides GOES-18 SUVI data. (#6737)The minimum required versions of several core dependencies have been updated:
Python 3.9
astropy 5.0.1
numpy 1.21.0
The minimum required versions of these optional dependencies has also been updated:
Matplotlib 3.5.0
dask 2021.4.0
pandas 1.2.0
scikit-image 0.18.0
scipy 1.7.0 (#6742)
Added the utility function
sunpy.map.pixelate_coord_path()
to fully pixelate a coordinate path according to the pixels of a given map. (#6840)The minimum version of h5netcdf required by sunpy has been bumped to version 0.11.0. (#6859)
Able to download files from REST/TAP Data Providers from the VSO. (#6887)
Adding data unit into html repr for
sunpy.map.Map
(#6902)Joined
HISTORY
keys with newline characters when parsingHISTORY
cards from FITS header. (#6911)Added the ability to query for the GOES-XRS 1 minute average data with the
XRSClient
. (#6925)Increased minimum version of
parfive
to 2.0.0.We are aware the change in the
parfive
minimum version is a release earlier than our dependency policy allows for. However, due to significant issues thatparfive
v2.0.0 solves and changes to remote servers, we have decided to increase it to improve the user experience when downloading files. (#6942)
Bug Fixes#
Fixed the incorrect calculation in
make_fitswcs_header()
of the rotation matrix from a rotation angle when the pixels are non-square. (#6597)Return code from
self_test
is now non-zero if it stops due to missing dependencies. (#6600)Fixed an issue with loading old EIT fits files with
sunpy.map.Map
where the date could not be parsed. (#6605)Fixed a bug where the
exposure_time
returnedNone
when the exposure time key was set to zero. (#6637)Fixed a bug that prevented specifying a
BaseCoordinateFrame
(as opposed to aSkyCoord
) tosunpy.map.GenericMap.draw_quadrangle()
. (#6648)HMI JPEG2000 files from Helioviewer could not be loaded due to a bug in setting the plotting normalization. This has been fixed. (#6710)
The
data_manager
was not raising failed downloads correctly and would continue as if the file existed locally. Now it will raise any errors fromparfive
. (#6711)XRTMap
will now set the unit for XRT files if theBUNIT
key is missing. (#6725)XRSClient
update use the new url for which the GOES-XRS 8-15 data is provided by NOAA. (#6737)Updated
sunpy.database
to be compatible withSQLAlchemy
versions >=2.0 (#6749)When using
autoalign=True
when plotting maps, the result was misaligned by half a pixel. (#6796)sunpy.map.GenericMap.submap()
can now handle aBaseCoordinateFrame
as input. (#6820)Multi-line
HISTORY
andCOMMENT
keys metadata dictionaries are now correctly split into multiple history and comment cards when writing a FITS file. (#6911)Pass in “max_splits” to Parfive to prevent multi connections to JSOC for JSOC only queries. (#6921)
When converting an
astropy.wcs.WCS
object to a solar coordinate frame theDATE-AVG
key will be used before theDATE-OBS
key, previously onlyDATE-OBS
was checked. (#6995)sunpy.map.GenericMap.rotation_matrix
now applies the default values if any FITS rotation matrix keywords are missing from the header. (#7004)Modified
sunpy.io.special.srs.read_srs()
to correctly handle uppercase SRS files and supplementary sections occurring after the main data sections (I, IA, II). (#7035)
Documentation#
Added an example of how to search for multiple wavelengths attributes for AIA data using
sunpy.net.attrs.AttrOr
. (#6501)Added
sunpy.map.PixelPair
to the reference documentation. (#6620)Split the installation docs into a new Installation tutorial, and an installation guide. (#6639)
Added an example (Creating a TimeSeries from GOES-XRS near real time data) to download GOES NRT data and load it into
TimeSeries
. (#6744)Added an example gallery (Querying and loading SHARP data) for querying SHARP data and loading it into a
Map
. (#6757)Added an example (Obtaining a spacecraft trajectory from JPL Horizons) to plot the trajectory of Parker Solar Probe. (#6771)
Created a “Showcase” section of the gallery, which includes a new example (Reproducing the “Where is STEREO Today?” plot) and a relocated example (HMI Showcase: Cutout). (#6781)
Updated examples in the gallery to always explicitly create an Axes and use that for plotting, instead of using the Matplotlib pyplot API. (#6822)
Added an example (Masking HMI based on the intensity of AIA) of how to mask a HMI map based on the intensity of AIA. (#6825)
Added an example (Blending maps using mplcairo) to blend two maps using
mplcairo
. (#6835)Changed the reprojecting images to different observers example (Reprojecting Images to Different Observers) to avoid using custom wcs headers where possible. (#6853)
Added a note in examples Auto-Aligning AIA and HMI Data During Plotting and Aligning AIA and HMI Data with Reproject suggesting to use
assume_spherical_screen()
to retain off-disk HMI data. (#6855)Moved the Helioviewer migration guide from the tutorial to guide section of the docs. (#6868)
Moved the plotting section of the tutorial into the map section of the tutorial. (#6870)
Reorganized “Units” section of the Tutorial into smaller sections and added a section about unit equivalencies. (#6879)
Added clarifying detail (in the
TimeUTime
docstring) for how theutime
time format handles seconds on a day with a leap second. (#6894)Fixed a series of broken URLS and typos in examples and documentation strings. (#6903)
Improved the time tutorial. (#6920)
Add a “how-to” guide section to the documentation. (#6926)
Redesigned the landing page to highlight the different sections of the documentation. (#6938)
Significantly revised and improved the Maps part of the tutorial. This included moving the section on custom maps to the How-To Guides section (see How to create a sunpy Map). (#6944)
Migrated example gallery entries for searching the VSO, using
parse_time
, using the data manager, and using solar constants to the how-to guide. (#6948)Reorganized some parts of the coordinates topic guide into multiple how-to guides. (#6954)
Move examples of how to create a Map from reference pages to a how-to guide. (#6977)
Cleaned up and simplified the Timeseries section of the tutorial. (#6990)
Added a topic-guide to aid understanding the role, “rsun” plays in sunpy coordinate transformations and
sunpy.map.GenericMap.reproject_to()
. (#7000)Updated all of the sphinx anchors to be more consistent. This means that any use of the old anchors (intersphinx links to sunpy doc pages) will need to be updated. (#7032)
Internal Changes#
When determining which VSO servers to use for queries,
VSOClient
will now attempt to check if the cgi endpoint referenced by the WDSL file is accessible, and try the next endpoint if it can’t be reached. This should mean that a small category of connection issues with the VSO are now automatically bypassed. (#6362)
4.1.0 (2022-11-11)#
Breaking Changes#
Updated the sample data file,
AIA_171_ROLL_IMAGE
to be rice compressed instead of gzip compressed. This means that the data is now stored in the second HDU. (#6221)
Deprecations#
Passing positional arguments to all
timeseries
peek()
methods is now deprecated, and will raise an error in sunpy 5.1. Pass the arguments with keywords (e.g.title='my plot title'
) instead. (#6310)Using
sunpy.timeseries.GenericTimeSeries.index`
is deprecated. Usetime
to get an astropy Time object, orts.to_dataframe().index
to get the times as a pandasDataTimeIndex
. (#6327)Deprecated the
sunpy.visualization.limb
module. Thesunpy.visualization.limb.draw_limb
function has been moved intodrawing
aslimb()
. (#6332)The
sunpy.net.helioviewer
module is deprecated and will be removed in version 5.1. The Helioviewer Project now maintains a replacement Python library called hvpy. As such, in consultation with the Helioviewer Project, we have decided to deprecate theHelioviewerClient
class. (#6404)Passing the
algorithm
,return_footprint
arguments as positional arguments is deprecated. Pass them as keyword arguments (e.g...., return_footprint=True, ...
) instead. (#6406)sunpy.data.download_sample_data()
is now deprecated. Usesunpy.data.sample.download_all()
instead. (#6426)The sunpy.database module is no longer actively maintained and has a number of outstanding issues. It is anticiapted that sunpy.database will be formally deprecated in sunpy 5.0 and removed in sunpy 6.0. If you are using sunpy.database and would like to see a replacement, please join the discussion thread at https://community.openastronomy.org/t/deprecating-sunpy-database/495. (#6498)
Removals#
The
sunpy.io.fits
sub-module has been removed, as it was designed for internal use. Use theastropy.io.fits
module instead for more generic functionality to read FITS files. (#6432)The
sunpy.physics.solar_rotation
sub-module has been removed, having been moved tosunkit_image.coalignment
. (#6433)Most of the
sunpy.visualization.animator
subpackage has been removed, with the exception ofMapSequenceAnimator
It has been moved into the standalone mpl-animators package Please update your imports to replacesunpy.visualization.animator
withmpl_animators
. (#6434)Remove
GenericMap.shift
method and theGenericMap.shifted_value
. Useshift_reference_coord
instead. (#6437)sunpy.util.scraper
has been removed. Usesunpy.net.scraper
instead. (#6438)sunpy.image.coalignment
has been removed. Usesunkit_image.coalignment
instead, which contains all the same functionality. (#6440)sunpy.map.GenericMap.draw_limb()
can no longer be used to draw the limb on a non-WCS Axes plot. (#6533)sunpy.image.resample()
no longer accepts “neighbour” as an interpolation method. Use “nearest” instead. (#6537)sunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
no longer accepts theuse_scipy
keyword. (#6538)
New Features#
Updated and expanded the HTML representation for
TimeSeries
. (#5951)When reading CDF files, any columns with a floating point data type now have their masked values converted to NaN. (#5956)
Add support for saving
GenericMap
as JPEG 2000 files. (#6153)Add a function
sunpy.map.extract_along_coord
that, for a given set of coordinates, finds each array index that crosses the line traced by those coordinates and returns the value of the data array of a given map at those array indices. (#6189)Three new maps have been added to the sample data from STEREO A and STEREO B at 195 Angstrom, and AIA at 193 Angstrom. These images are from a time when the three spacecraft were equally spaced around the Sun, and therefore form near complete instantaneous coverage of the solar surface.
Users upgrading to this version will find this three files download when they use the sample data for the first time. (#6197)
Added a SDO/AIA 1600 file of the Venus transit to the sunpy sample data. (#6242)
Created the
sunpy.visualization.drawing
module which includes newequator()
andprime_meridian()
functions. (#6251)Expose GOES quality flags in order to allow filtering corrupt values when using the
XRSTimeSeries
. (#6260)All TimeSeries plotting methods now consistently set the same formatter and locator for the x-axis. (#6264)
sunpy.timeseries.GenericTimeSeries.peek()
now takes atitle
argument to set the title of the plot. (#6304)Added the
sunpy.timeseries.GenericTimeSeries.time
property to get the times of a timeseries as aTime
object. (#6327)Added the Plotting the solar equator and prime meridian example to the Example Gallery. (#6332)
Added a new function
sunpy.map.header_helper.make_heliographic_header()
to help with generating FITS-WCS headers in Carrington or Stonyhurst coordinate systems that span the entire solar surface. (#6415)Sample data files provided through
sunpy.data.sample
are now downloaded individually on demand rather than being all downloaded upon import of that module. To download all sample data files, callsunpy.data.sample.download_all()
. (#6426)XRSTimeSeries
is now able to parse the primary detector information from the GOES-R XRS data if available. (#6454)sunpy.net.Scraper
now includes treats files as spanning a full interval equal to the smallest increment specified in the file pattern. For example, a pattern like"%Y.txt"
that only contains a year specifier will be considered to span that full year.This means searches that fall entirely within the whole interval spanned by a pattern will return that file, where previously they did not. As an example, matching
"%Y.txt"
withTimeRange('2022-02-01', '2022-04-01')
will now return["2022.txt"]
where previously no files were returned. (#6472)Implemented site configuration for sunpyrc, and modified documentation for sunpy customization. (#6478)
make_fitswcs_header()
now includes the keyword argumentunit
for setting theBUNIT
FITS keyword in the resulting header. This will take precedence over any unit information attached todata
. (#6499)If the
data
argument tomake_fitswcs_header()
is anQuantity
, the associated unit will be used to set theBUNIT
FITS keyword in the resulting header. (#6499)Added a 304 sample data file called
AIA_304_IMAGE
. (#6546)
Bug Fixes#
Fix a bug that prevented EUI maps with missing wavelength metadata loading. (#6199)
The
sunpy.net.dataretriever.sources.noaa.SRSClient
was not correctly setting the passive mode for FTP connection resulting in a permission error. This has been fixed. (#6256)Fixed
XRSTimeSeries
inability to read leap-second files for GOES. It floors the leap-second timestamp to be59.999
, so that Python datetime does not raise an exception. (#6262)Changed the default scaling for
EUIMap
from a linear stretch to a asinh stretch.To revert to the previous linear stretch do the following:
from astropy.visualization import ImageNormalize, LinearStretch euimap.plot_settings["norm"] = ImageNormalize(stretch=LinearStretch()) (`#6285 <https://github.com/sunpy/sunpy/pull/6285>`__)
Fixed bugs when working with a coordinate frame where the observer is specified in
HeliographicStonyhurst
with a Cartesian representation, which is equivalent to Heliocentric Earth Equatorial (HEEQ). Now, the observer will always be converted to spherical representation when the coordinate frame is created. (#6311)Fixed an error when Fido returns zero results from the VSO and some results from at least one other data source. This (now fixed) error is only present when using numpy version >= 1.23. (#6318)
If a level 1 XRT file does not specify the heliographic longitude of the spacecraft, a silent assumption is made that the spacecraft is at zero Stonyhurst heliographic longitude (i.e., the same longitude as Earth). (#6333)
The sample data retry was failing under parfive 2.0.0. (#6334)
Fixed bug that prevented
RotatedSunFrame
instances from being pickled. (#6342)Fix a bug in loading
XRSTimeSeries
due to unsupported quality flag column names. (#6410)Adds units (dimensionless units) to the quality columns in
XRSTimeSeries
. (#6423)Refactored
SXTMap
to use ITRS observer coordinate information in header rather than incorrect HGS keywords. TheSXTMap
also now uses the defaultdsun
property as this information can be derived from the (now corrected) observer coordinate. (#6436)In
sunpy.map.GenericMap.coordinate_system
andsunpy.map.GenericMap.date
, the default values will now be used if the expected key(s) used to derive those properties are empty. Previously, empty values of these keys were not treated as missing and thus the default values were not correctly filled in. (#6436)Fixed a bug where the observer coordinate was incorrectly determined for
KCorMap
. (#6447)Trying to download an empty search response from the JSOC now results in an empty results object. Previously the results object contained the path to the sunpy download directory. (#6449)
Removed an error when searching CDAWEB using
sunpy.net.Fido
and no results are returned. An empty response table is now returned. (#6450)Fix a bug to parse the GOES “observatory” number in
XRSTimeSeries
for GOES 13, 14, 15 and for the 1 minute GOES-R data. (#6451)Changed the default scaling for
XRTMap
from a linear stretch toLogStretch
.To revert to the previous linear stretch do the following:
from astropy.visualization import ImageNormalize, LinearStretch xrtmap.plot_settings["norm"] = ImageNormalize(stretch=LinearStretch()) (`#6480 <https://github.com/sunpy/sunpy/pull/6480>`__)
Fix the
detector
property ofSOTMap
to return “SOT”. (#6480)The right-hand y-axis of the GOES-XRS timeseries plots with labelled flare classes now automatically scales with the left-hand y-axis. (#6486)
Add support for Python 3.11.
The deprecated
cgi.parse_header
is now available assunpy.util.net.parse_header
. (#6512)Fixed the metadata handling of
resample()
andsuperpixel()
so that the CDELTi values are scaled and the PCi_j matrix (if used) is modified in the correct manner for asymmetric scaling. The previous approach of having the PCi_j matrix store all of the scaling resulted in non-intuitive behaviors when accessing thescale
androtation_matrix
properties, and when de-rotating a map viarotate()
. (#6571)Fixd a bug with the
sunpy.map.GenericMap.scale
property for maps containing only the CDij matrix where the scale was not being determined from the CDij matrix. (#6573)Fixed a bug with the
sunpy.map.GenericMap.rotation_matrix
property for maps using the CDij matrix formulism where the rotation matrix would be calculated incorrectly for non-square pixels. (#6573)Fixed a bug where
parse_time()
would always disregard the remainder of a time string starting with the final period if it was followed by only zeros, which could affect the parsing of the time string. (#6581)
Documentation#
Improved annotations in the SRS active regions plotting example. (#6196)
Updated gallery examples that use STEREO data to use sample data instead of searching for and downloading data via Fido. (#6197)
Added the current bugfix release policy to the docs. (#6336)
The Maps and Timeseries have been reviewed and updated. (#6345)
Adds a pull request check list to the Developer’s Guide. (#6346)
Improved the plotting guide. (#6430)
Slight improvements to the downloading data with Fido part of the guide. (#6444)
Split the units and coordinate guides on to separate pages, and made minor improvements to them. (#6462)
Added a how-to guide (Using conda for Development Dependencies) for using
conda
to set up an environment with the complete set of dependencies to use all optional features, build the documentation, and/or run the full test suite. The guide also describes how best to have an editable installation ofsunpy
in this environment. (#6524)
Internal Changes#
Added a
columns
keyword to each plot method for allsunpy.timeseries.GenericTimeSeries
sources. (#6056)Added a script in the
sunpy/tools
that will update all the Python libraries insunpy/extern
. (#6127)Added automatic conversion of unit strings in CDF files to astropy unit objects for the following instruments: PSP/ISOIS, SOHO/CELIAS, SOHO/COSTEP-EPHIN, and SOHO/ERNE. (#6159)
Add an environment variable
SUNPY_NO_BUILD_ANA_EXTENSION
which when present will cause sunpy to not compile the ANA C extension when building from source. (#6166)sunpy
now uses the Limited Python API. Therefore, one binary distribution (wheel) per platform is now published and it is compatible with all Python versionssunpy
supports. (#6171)Add support for upcoming parfive 2.0 release. (#6243)
The primary sample-data URL will be changing from
https://github.com/sunpy/sample-data/raw/master/sunpy/v1/
tohttps://github.com/sunpy/data/raw/main/sunpy/v1/
. We expect GitHub to redirect from the old URL for sometime but will eventually expire it. Thedata.sunpy.org
mirror will continue to be available. (#6289)Add support for downloading sample data from more than two mirror locations. (#6295)
Timeseries data sources can now set the
_peek_title
class attribute to set the default plot title produced when.peek()
is called and the user does not provide a custom title. (#6304)Add maintainer documentation on the backport bot (#6355)
Switched to using the standard matrix-multiplication operator (available in Python 3.5+) instead of a custom function. (#6376)
Fixed a colormap deprecation warning when importing the sunpy colormaps with Matplotlib 3.6. (#6379)
Removed custom tick label rotation from Lyra, EVE, and Norh timeseries sources, and grid drawing from NOAA and RHESSI sources. (#6385)
Fixed a bug where the private attribute
_default_observer_coordinate
forGenericMap
was being used even when there was sufficient observer metadata in the header. (#6447)Tidy the GOES XRSTimesSeries tests and add two new XRS files to test. (#6460)
Added a pre-commit hook for codespell, and applied spelling fixes throughout the package. (#6574)
v4.0.0 (2022-05-06)#
Breaking Changes#
When rotating images using the SciPy rotation method, the default behavior is now to clip the output range to the input range, which matches the default behavior of the scikit-image rotation method. (#5867)
Any NaNs are now preserved by
sunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
. (#5867)sunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
now default to using SciPy for rotation instead of scikit-image, so rotation results may be slightly different. (#5867)The math convenience methods of
sunpy.map.GenericMap
-max()
,mean()
,min()
, and ,std()
- now ignore NaNs in the image data. (#5867)sunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
now default to using NaN instead of zero for themissing
value, the value used for pixels in the output array that have no corresponding pixel in the input array. To obtain the previous behavior,missing
should be explicitly specified as zero. (#5867)The
JSOCClient
and everysunpy.net.dataretriever.GenericClient
was passing all**kwargs
toparfive.Downloader.enqueue_file
, this was unintended and has been removed. (#6052)Changed the default interpolation order for
sunpy.map.GenericMap.rotate()
from 4 to 3, with the precise meaning of these interpolation orders depending on the selected rotation method. For the default rotation method, which usesscipy.ndimage.affine_transform()
, this changes the default interpolation from biquartic to bicubic, which reduces the computation time without reducing the quality of the output below what a typical user needs. (#6089)
Deprecations#
Deprecate
sunpy.image.coalignment
as the code has now been moved tosunkit_image.coalignment
with an identical API. This module will be removed in sunpy 4.1. (#5957)The
sunpy.map.GenericMap.shift
method has been renamed tosunpy.map.GenericMap.shift_reference_coord
andshift
has been deprecated. (#5977)The
sunpy.map.GenericMap.shifted_value
property has been deprecated. Modifications to the reference coordinate can be found in theCRVAL1
andCRVAL2
keys ofsunpy.map.GenericMap.meta.modified_items
. (#5977)The
sunpy.io.fits
module is deprecated, as it was designed for internal use only. Use theastropy.io.fits
module instead for more generic functionality to read FITS files. (#5983)sunpy.physics.solar_rotation.mapsequence_solar_derotate
is deprecated and will be removed in version 4.1. This function has been moved tosunkit_image.coalignment.mapsequence_coalign_by_rotation
and has an identical API and functionality. (#6031)sunpy.physics.solar_rotation.calculate_solar_rotate_shift
is deprecated and will be removed in version 4.1. This function has been moved tosunkit_image.coalignment.calculate_solar_rotate_shift
and has an identical API and functionality. (#6031)Deprecated using
sunpy.map.GenericMap.draw_limb
on an Axes that is not a WCSAxes. (#6079)
New Features#
Added support for Python 3.10 (#5568)
Added support for
"%Y.%m.%d_%H:%M:%S_UTC"
and"%Y.%m.%d_%H:%M:%S"
time formats insunpy.time.parse_time
. (#5647)The
rsun
argument toget_observer_meta()
is now optional. (#5655)Added the
total_size()
, which estimates the total size of the results from a Fido query. If this is supported by a client, the total size is printed alongside the results.To add support for this in external clients, make sure one column contains the individual filesizes as
Quantity
, and set thesize_column
class attribute to the name of this column. (#5659)Added the ability to specify the use of Carrington coordinates with
sunpy.map.GenericMap.draw_grid()
. (#5703)Printing a
MetaDict
will now show each entry on a new line. (#5765)Removed support for Python 3.7. (#5773)
The ‘event_endtime’, ‘event_starttime’ and ‘event_peaktime’ columns in a HEK query are now returned as
Time
objects. Previously they were timestamp strings. (#5806)Added a helpful warning message when converting a 2D Helioprojective coordinate will return all NaNs. (#5817)
The colorbar limits on HMI magnetic field maps are now automatically set to be symmetric about zero. (#5825)
Added a
clip
keyword tosunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
to enable or disable whether the range of the output image is clipped to the range of the input range. (#5867)Created the decorator
sunpy.image.transform.add_rotation_function()
for registering new rotation functions for use bysunpy.image.transform.affine_transform()
andsunpy.map.GenericMap.rotate()
. (#5867)sunpy.image.transform.affine_transform
andsunpy.map.GenericMap.rotate()
have both had theiruse_scipy
arguments deprecated. Instead use the newmethod
argument to select from the available rotation methods. (#5916)Added a Maxwell unit and any places where a conversion to Gauss occurs has been removed. (#5998)
Add a basic HTML representation for
TimeSeries
. (#6032)The minimum supported asdf version has been increased to 2.8.0 to allow future compatibility with the breaking changes planned for asdf 3.0. In addition to this the asdf-astropy package is now required to serialise and deserialise the sunpy coordinate frame classes to ASDF. (#6057)
Added the option to rotate using OpenCV when using
sunpy.image.transform.affine_transform()
orsunpy.map.GenericMap.rotate()
by specifyingmethod='cv2'
. The OpenCV Python package must be installed on the system. (#6089)
Bug Fixes#
Fixed reading CDF files when a column has no entries. If this is the case the column will be ignored, and a message logged at DEBUG level. (#5664)
Fixed the units of
sunpy.map.sources.HMISynopticMap.scale
andsunpy.map.sources.MDISynopticMap.scale
. (#5682)Fixed a bug where custom values in the
plot_settings
dictionary were not being propagated to new map instances created when calling map methods (e.g..submap
). (#5687)Added automatic conversion of some common but non-standard unit strings in CDF files to astropy unit objects. If sunpy does not recognise the unit string for a particular column, units of
u.dimensionless_unscaled
are applied to that column and a warning raised.If you think a given unit should not be dimensionless and support should be added for it in sunpy, please raise an issue at sunpy/sunpy#issues. (#5692)
The default
id_type
insunpy.coordinates.get_horizons_coord()
is nowNone
to match the defaultid_type
in astroquery 0.4.4, which will search major bodies first, and if no major bodies are found, then search small bodies. For older versions of astroquery the defaultid_type
used byget_horizons_coord()
is still'majorbody'
. (#5707)In consultation with JSOC, we now limit all JSOC downloads to one connection. This will override all connection user settings passed to the downloader. (#5714)
Updated the
plot
methods on some timeseries classes to correctly label and format the time axis. (#5720)Fixed a long-standing bug where our logger could intercept Astropy warnings in addition to SunPy warnings, and thus could conflict with Astropy’s logger. (#5722)
Update asdf schemas so that references use URIs not tags as this is not supported by the new asdf extensions API. (#5723)
Increased the default maximum amount of records returned from HEC to 500 from 10. If the maximum number of records are returned, a message is shown. (#5738)
Reading a series of CDF files where at least one of them is empty no longer raises an error. A message for each empty file is logged at the DEBUG level. (#5751)
sunpy.map.header_helper.make_fitswcs_header()
now includes a PC_ij matrix in the returned header if no rotation is specified. (#5763)In the case where a map header has no PC_ij values, CROTA2 != 0, and CDELT1 != CDELT2, the calculation of the map rotation matrix has been fixed. This bug only affected maps with non-zero rotation, no PC matrix in the header, and un-equal scales along the two image axes. (#5766)
Maps created from
resample()
andsuperpixel()
have been fixed in the case where the resampling was not square, and the PCi_j matrix (often a rotation matrix) was not a multiple of the identity matrix. When the PCi_j or CDi_j formalisms are used in the metadata these are now correctly modified, and the CDELT values are left unchanged. (#5786)The
__repr__
of severalsunpy.database
classes have been updated to remove angular brackets and add equals signs. As an example,'<DatabaseEntry(id 3)>'
has changed to'DatabaseEntry(id=3)'
(#5790)Fixed a bug when rotating a map by a matrix that is not purely a rotation. The likely way to inadvertently encounter this bug was when de-rotating a map with rectangular pixels that were not aligned with the coordinate axes. (#5803)
Fixed a bug where rotating a map while simultaneously scaling it could result in some of the map data being cropped out. (#5803)
Symmetric colorbar limits are no longer set on intensity images from MDI. (#5825)
Fixed plotting and peeking NORH timeseries data with
pandas
1.4.0. (#5830)In the case where
sunpy.database.Database.fetch()
successfully downloads only some of the search results, asunpy.database.PartialFetchError
is raised. This fixes a bug where the successful downloads would have been added to the database, but sometimes with incorrect metadata. (#5835)When getting IRIS files from the VSO, Fido was incorrectly labelling them as XML files. (#5868)
HMIMap
now looks for'INSTRUME'
instead of'TELESCOP'
in order to support Helioviewer JPEG2000 versions of HMI data which do not preserve the'TELESCOP'
keyword as expected in the JSOC standard. (#5886)Fixes a bug where the
cmap
andnorm
keyword arguments were ignored when callingplot
. (#5889)Fix parsing of the GOES/XRS netcdf files to ignore leap seconds. (#5915)
Fixed compatibility with
h5netcdf>0.14
when loading GOES netcdf files. (#5920)Fixed bugs with the rebinning and per-keV calculation for Fermi/GBM summary lightcurves (
GBMSummaryTimeSeries
). (#5943)Fixed the unintentionally slow parsing of Fermi/GBM files (
GBMSummaryTimeSeries
). (#5943)Fixes a bug in
SJIMap
where undefined variable was used when parsing the wavelength. Also fixes the unit parsing by removing the “corrected” string from theBUNIT
keyword as “corrected DN” cannot be parsed as a valid FITS unit. (#5968)Fixed unit handling issue with
GenericMap
and lowercasing the unit before it submits it toastropy.units
. (#5970)Fixed reading CDF files when a variable has more than 2 dimensions. If this is the case the variable will be ignored, and a user warning is provided. (#5975)
Fixed
sunpy.system_info
so it returns the extra group when an optional dependency is missing. (#6011)Relax condition check for a HMI Synoptic map source. (#6018)
VSOClient
was not passing**kwargs
through each download method. (#6052)Fixed the inability to rotate images and maps with byte ordering that is different from the native byte order of the system (e.g., big-endian values on a little-endian system) for certain interpolation orders when internally using
scikit-image
. (#6064)Fixed a crash for dask arrays when displaying the
GenericMap
html representation. (#6088)Constructing the color map name for a
KCorMap
no longer requires the “detector” key in the metadata. This allows for reading files that are missing this keyword, as in the KCor JPEG2000 files. (#6112)We now correctly pass keyword arguments in our internal FITS reader to
astropy.io.fits.open
. (#6123)
Documentation#
Fixed various plotting issues with the gallery example Drawing the AIA limb on a STEREO EUVI image. (#5534)
Improved the gallery example AIA to STEREO coordinate conversion to better illustrate how coordinate transformations interact with submaps and coordinate plotting. (#5534)
Tidy the API Reference section of the documentation and improve the landing page for the docs. (#5623)
Add info about loading CDF files to the API documentation. (#5735)
Added a known issues entry about
scikit-image
package version pinning. (#5865)Edited entries in the example gallery to have a consistent plotting style. Added said style guidelines to the example gallery page in the dev guide. (#5870)
Added the gallery example Reprojecting to a Map Projection with a Custom Origin, which specifically showcases the azimuthal equidistant projection (also known as the Postel projection). (#5961)
Remove the part of the
SJIMap
docstring that says it only works on L1 as the data work for L2 and the level checking was not being enforced. (#5968)Updated the timeseries documentation to make it clear that you can pass in a numpy array. (#6024)
Internal Changes#
Sped up the parsing of results from the VSO. For large queries this significantly reduces the time needed to perform a query to the VSO. (#5681)
sunpy.map.GenericMap.wcs
now checks that the scale property has the correct units whilst constructing the WCS. (#5682)Added packaging as a core dependency as distutils is now deprecated. (#5713)
SunpyWarning
is no longer a subclass ofAstropyWarning
. (#5722)Running the tests now requires the
pytest-xdist
package. By default tests are not run in parallel, but can be configured to do so usingpytest-xdist
command line options. (#5827)Migrate the asdf infrastructure to the new style converters etc added in asdf 2.8.0. This makes sure sunpy will be compatible with the upcoming asdf 3.0 release. (#6057)
Declare in our dependencies that we are not compatible with asdf 3.0.0 until we are. (#6077)
Improved performance of the code that parses dates in clients that use the
Scraper
to get available files. (#6101)
3.1.0 (2021-10-29)#
Breaking Changes#
sunpy.timeseries.sources.NOAAIndicesTimeSeries.peek()
acceptsplot_type
as an argument instead oftype
. (#5200)Fill values are now set to
numpy.nan
insunpy.timeseries.sources.noaa
file parsers. They were previously set to a fill value of-1
. (#5363)sunpy.map.GenericMap.date
now looks for more metadata than just DATE-OBS, using new FITS keywords defined in version 4 of the standard.sunpy.map.GenericMap.date
now returns, in order of preference:The DATE-OBS FITS keyword
The current time.
If DATE-OBS is present alongside DATE-AVG or DATE-BEG and DATE-END, this results in a behaviour change to favour the new (more precisely defined) keywords. It is recommended to use
date_average
,date_start
, ordate_end
instead if you need one of these specific times. (#5449)sunpy.io.fits.get_header
no longer automatically tries to add the WAVEUNIT keyword if it isn’t present in the header. To replicate the original behaviour do:header = sunpy.io.fits.get_header(...) waveunit = sunpy.io.fits.extract_waveunit(header) if waveunit is not None: header['WAVEUNIT'] = waveunit
The
sunpy.map.GenericMap.waveunit
property still usessunpy.io.fits.extract_waveunit`
to try and get the waveunit if the WAVEUNIT key isn’t present. (#5501)sunpy.map.GenericMap.wcs
no longer passes the whole.meta
dictionary toastropy.wcs.WCS
when constructing.wcs
. Instead each metadata value is manually taken from various map properties, which allows fixes to be made to the WCS without modifying the original map header. We think thatwcs
correctly sets all the keys needed for a full WCS header, but if you find anything missing please open an issue on the sunpy issue tracker. (#5501)
Deprecations#
sunpy.util.scraper.Scraper
has been moved intosunpy.net
, please update your imports to befrom sunpy.net import Scraper
. (#5364)Using “neighbour” as a resampling method in
sunpy.image.resample.resample()
is deprecated. Use “nearest” instead, which has the same effect. (#5480)The
sunpy.visualization.animator
subpackage has been spun out into the standalone mpl-animators package, with the exception ofMapSequenceAnimator
. Please update your imports to replacesunpy.visualization.animator
withmpl_animators
.This is primarily because the
ndcube
package now relies on the animator classes as well assunpy
. (#5619)
Removals#
The deprecated
sunpy.roi.chaincode.Chaincode
has been removed in favour ofsunpy.net.helio.Chaincode
. (#5304)The deprecated
sunpy.roi.roi
was removed, there is no direct replacement but astropy-regions is something to consider. (#5304)The deprecated
sunpy.instr
has been removed, please use sunkit_instruments. (#5304)The deprecated
sunpy.map.GenericMap.size
has been removed, please usesunpy.map.GenericMap.data.size
. (#5304)The deprecated ability to read txt files from
sunpy.timeseries.sources.noaa.NOAAIndicesTimeSeries
andsunpy.timeseries.sources.noaa.NOAAPredictIndicesTimeSeries
has been removed as the data provided by NOAA is now provided as JSON files. (#5304)Removed various deprecated methods on our Fido clients and responses:
UnifiedResponse.build_table
,UnifiedResponse.tables
,UnifiedResponse.responses
,UnifiedResponse.get_response
andUnifiedResponse.blocks
asUnifiedResponse
is now anastropy.table.Table
that is sliceable.UnifiedResponse.response_block_properties
asUnifiedResponse.path_format_keys
was added as a better replacement.HECClient.time_query
as you can now useFido.search
directly.sunpy.net.jsoc.attrs.Keys
was not used for querying JSOC.sunpy.net.jsoc.JSOCClient.search_metadata
as the functionality this provided was merged intosunpy.net.jsoc.JSOCClient.search
.sunpy.net.vso.VSOClient.link
as better search support in the client replaces this method. (#5304)
The deprecated
sunpy.map.GenericMap.draw_rectangle()
has been removed, the replacement issunpy.map.GenericMap.draw_quadrangle()
(#5304)sunpy now errors if the unused
.rsun
or.heliographic_observer
attributes are set on aWCS
. (#5348)Support for passing non-unit levels to
sunpy.map.GenericMap.draw_contours()
when map data has units set has been removed, and with now raise an error. (#5352)The
origin
argument tosunpy.map.GenericMap.world_to_pixel()
andsunpy.map.GenericMap.pixel_to_world()
has been removed. (#5353)Support for plotting or contouring
GenericMap
on axes that are notWCSAxes
has been removed. To create aWCSAxes
, use theprojection
argument when the axes is created, e.g.fig.add_subplot(111, projection=my_map)
. (#5354)The following search attributes in
sunpy.net.vso.attrs
have been removed:['Time', 'Instrument', 'Wavelength', 'Source', 'Provider', 'Level', 'Sample', 'Detector', 'Resolution', 'Physobs']
. Use the equivalent attribute fromsunpy.net.attrs
instead. (#5355)The default response format from the VSO client is now a table. (#5355)
sunpy.net.hek.attrs.Time
has been removed, usesunpy.net.attrs.Time
instead. (#5355)
New Features#
Ensured that
plot
andpeek
will output the same figures for allsunpy.timeseries.TimeSeries
sources. (#5200)Added hook file and tests for using PyInstaller with sunpy. (#5224)
Allows
sunpy.map.GenericMap.draw_quadrangle()
to accept pixel units as input to enable plotting boxes in the pixel space of the map, which can be different from the plot axes. (#5275)Added the
propagate_with_solar_surface()
context manager for transformations, which will automatically apply solar differential rotation when transforming a coordinate between frames with a change in time (obstime
). (#5281)Add support for parsing the observer location from a
WCS
object when using the ‘OBSGEO’ formulation. This is the recommended way to define the observer location of a ground based observer. (#5315)Added a new function,
sunpy.visualization.draw_limb
, that draws the solar limb as seen from an arbitrary observer coordinate on a world coordinate system aware Axes. (#5414)sunpy.map.GenericMap.rsun_meters
now usessunpy.map.GenericMap.rsun_obs
as a fallback to calculate the assumed radius of emission if RSUN_REF metadata isn’t present but metadata forrsun_obs
is. (#5416)Added
sunpy.coordinates.utils.get_limb_coordinates()
to get the solar limb coordinates as seen from a given observer. (#5417)Printing the response from a
Fido
query now includes the URL where the data files are sourced from.If you develop a third-party
Fido
client, support for this can be automatically enabled by adding ainfo_url
property to yourBaseClient
that returns a URL as a string. (#5431)TimeSeries
can now read CDF files that conform to theISTP/IACG guidelines (https://spdf.gsfc.nasa.gov/sp_use_of_cdf.html). (#5435)
The properties
date_start
,date_end
, anddate_average
have been added to be drawn from the relevant FITS metadata, if present in the map header. (#5449)Add default color map and normalization for
HMISynopticMap
The default color map is ‘hmimag’ and the default normalization is linear between -1.5e-3 and +1.5e3, the expected normalization for this particular color map. (#5464)The headers produced by
make_fitswcs_header()
now includeNAXIS
,NAXIS1
, andNAXIS2
keywords. (#5470)The
WCS
instance returned by thesunpy.map.GenericMap.wcs
property now includes the shape of the data array. (#5470)Added the method
sunpy.map.GenericMap.reproject_to()
for reprojecting aMap
to a different WCS. This method requires the optional packagereproject
to be installed. (#5470)Registered the time format
tai_seconds
forastropy.time.Time
(viaTimeTaiSeconds
) to support parsing the numerical time format of TAI seconds since 1958-01-01 00:00:00. This format includes UTC leap seconds, and enables equivalent functionality to theanytim2tai
routine in SSW. (#5489)Added
sunpy.map.sources.WISPRMap
as a map source for WISPR on Parker Solar Probe. This improves thename
of the map and adds correct information for theprocessing_level
andexposure_time
. (#5502)sunpy.io.fits.write
can now update thedata
andheader
of an existing HDU instance, as an alternative to creating a new instance of a specified HDU type. This adds support for writing a HDU (such asCompImageHDU
) initialised with non-default keyword arguments. (#5503)Added
observatory
to provide observatory information for the timeseries e.g. specific goes satellite number. (#5556)sunpy.timeseries.GenericTimeSeries.plot()
andsunpy.timeseries.GenericTimeSeries.peek()
will now automatically label the y-axis if all the columns being plotted have the same units. (#5557)sunpy.timeseries.GenericTimeSeries.plot()
andsunpy.timeseries.GenericTimeSeries.peek()
now have an optioncolumns
that allows plotting a subset of the columns present. (#5557)Added a new CDAWeb client, along with helper utilities to
sunpy.net.cdaweb
. (#5558)Support for filtering searches with JSOC keywords has been added to
Fido.search
. (#5566)Added support for arithmetic operations between`~sunpy.map.GenericMap` and array-like objects. (#5614)
Added
quantity
attribute toGenericMap
to expose thedata
attribute as aQuantity
using theunit
attribute. (#5614)
Bug Fixes#
sunpy.map.GenericMap.superpixel()
now keeps the reference coordinate of the WCS projection the same as the input map, and updates the reference pixel accordingly. This fixes inconsistencies in the input and output world coordinate systems when a non-linear projection is used. (#5295)Inputs to the
dimensions
andoffset
arguments tosunpy.map.GenericMap.superpixel()
in units other thanu.pix
(e.g.`u.kpix
) are now handled correctly. (#5301)Fractional inputs to the
dimensions
andoffset
arguments tosunpy.map.GenericMap.superpixel()
were previously rounded usingint
in the superpixel algorithm, but not assigned integer values in the new metadata. This has now been changed so the rounding is correctly reflected in the metadata. (#5301)Remove runtime use of
astropy.tests.helper.assert_quantity_allclose
which introduces a runtime dependency onpytest
. (#5305)sunpy.map.GenericMap.resample()
now keeps the reference coordinate of the WCS projection the same as the input map, and updates the reference pixel accordingly. This fixes inconsistencies in the input and output world coordinate systems when a non-linear projection is used. (#5309)Fix saving
GenericMap
to an asdf file with version 2.8.0 of the asdf package. (#5342)When the limb is entirely visible,
sunpy.map.GenericMap.draw_limb()
no longer plots an invisible patch for the hidden part of the limb and now returnsNone
instead of the invisible patch. Similarly, when the limb is entirely invisible, no patch is drawn for the visible part andNone
is returned instead of the visible patch. (#5414)sunpy.map.GenericMap.plot()
now correctly sets axis labels based on the coordinate system of the axes, and not the coordinate system of the map being plotted. This was previously only an issue if usingautoalign=True
when the Map coordinate system was different to the axes coordinate system. (#5432)sunpy.map.GenericMap.plot()
no longer adds a unit string to the axis labels if the axes being plotted on is a WCSAxes. For a WCSAxes, angular units are indicated in the tick labels, and automatically change when the zoom level changes from e.g. degrees to arc-minutes. This could previously lead to situations where the axis label units were incorrect. (#5432)Implement automatic fallback to helioviewer mirrors if API is non-functional. (#5440)
Fixed the incorrect value for the FITS WCS
LONPOLE
keyword when usingmake_fitswcs_header()
for certain combinations of WCS projection and reference coordinate. (#5448)The date returned by
date
for Solar Orbiter/EUI maps has been adjusted to be taken from the DATE-AVG keyword (the middle of the image acquisition period), instead of the DATE-OBS keyword (the beginning of the image acquisition period). This means the observer coordinate now has the correct date. (#5462)The
.unit
attribute for HMI synoptic maps has been fixed. (#5467)When “TAI” is in the date string,
sunpy.map.GenericMap.date
now only raises a warning if the TIMESYS keyword is present and different to “TAI”. Previously a warning was raised all the time when “TAI” was in the date string. (#5468)Fixed a bug where the property
sunpy.map.GenericMap.rsun_meters
would always internally determine the observer location, even when it is not needed, particularly for Stonyhurst heliographic maps, which have no notion of an observer. Thus, when working with a Stonyhurst heliographic map, a user could get an irrelevant warning message about having to assume an observer location (Earth center). (#5478)Fixed the unintended insertion of (assumed) observer location information when accessing the property
sunpy.map.GenericMap.wcs
for Stonyhurst heliographic maps. (#5478)Fixed an incorrect value for the FITS WCS
LONPOLE
keyword when usingmake_fitswcs_header()
forHelioprojective
maps with certain values of latitude for the reference coordinate. (#5490)A non-standard
CROTA
keyword included in asunpy.map.sources.EUIMap
FITS header is now renamed to the recommendedCROTA2
so a warning is no longer raised. (#5493)The plotting x-limits of
sunpy.timeseries.sources.NOAAIndicesTimeSeries.plot()
are now adjusted to only include finite points in the timeseries data. (#5496)The Hinode/XRT map source now corrects the TIMESYS keyword, fixing the
.wcs
property that was previously broken for Hinode/XRT maps. (#5508)Updated
sunpy.map.CompositeMap.plot
to support thelinestyles
andcolors
arguments, in addition to the existinglinewidths
argument. (#5521)Fixed a bug where rotating a
Map
could result in an extremely small shift (at the numerical-precision level) in the mapping from world coordinates to pixels. (#5553)Fixed a bug where rotating a
Map
that is missing observation-time metadata could result in an incorrect reference coordinate. (#5553)Fix a bug where saving a helioprojective or heliocentric coordinate to an asdf file didn’t work due to a schema version mismatch if the observer location was a fully specified Stonyhurst heliographic coordinate. (#5584)
XRTMap
uppercases theTIMESYS
key before checking if the key needs to be fixed. (#5592)Fixed passing a URL to
sunpy.io.read_file()
on windows. (#5601)Fixed a bug where the
date
property onHMISynopticMap
returnedNone
if theDATE-OBS
key was present. (#5648)
Documentation#
Added the gallery example Comparing differential-rotation models to visualize the differences between models of solar differential rotation. (#5527)
Added an example to how to save out maps as FITS files and load them back in, Saving and loading sunpy Maps with FITS. (#5544)
Internal Changes#
The
Helioprojective
frame now has the convenience propertyangular_radius
to return the angular radius of the Sun as seen by the observer. (#5191)Online tests can now report back status of remote urls and will XFAIL if the remote server is unreachable. (#5233)
Re-enabled the unit test to check for coordinates consistency with JPL HORIZONS when the matching ephemeris can be specified. (#5314)
The
TimeSeries
factory has been refactored to improve readability and maintainability of the internal code. (#5411)sunpy.map.GenericMap.rsun_obs
no longer emits a warning if the metadata it looks for is not present. Instead the standard photospheric radius is assumed and a log message emitted at the ‘info’ level. (#5416)Nearest-neighbour and linear (the default for
sunpy.map.GenericMap.resample()
) resampling have been significantly sped up. (#5476)sunpy.map.Map
now raises a clear error when the map is constructed if units of either two axes are not angular units. (#5602)
3.0.1 (2021-07-03)#
Bug Fixes#
Fixed a bug where
GenericMap
used to break with keyword arguments. (#5392)Fixed a bug where calling
sunpy.map.GenericMap.draw_contours()
on a different WCS could result in an unnecessary expansion of the plot limits. (#5398)Fixed incorrect return values from
all_corner_coords_from_map()
if a rectangular map was provided. (#5419)Do not trigger a pytest import in the asdf plugin for saving sunpy coordinate frames. (#5429)
Constructing a 2D coordinate in the
HeliographicCarrington
frame withobserver='self'
now raises an error upon creation. When specifyingobserver='self'
, theradius
coordinate component serves as the Sun-observer distance that is necessary to fully define the Carrington heliographic coordinates. (#5358)Fixed two bugs with handling the motion of the Sun when transforming between coordinate frames with a change in
obstime
. These bugs did not affect any results if the context managertransform_with_sun_center()
had been used. (#5381)Fixed a bug where the
rsun
frame attribute could be unintentionally reset to the default value during transformation. This bug primarily affected the transformation of aHelioprojective
coordinate to aHeliographicStonyhurst
frame. (#5395)Fixed a bug where creating a
HeliographicStonyhurst
frame or aHeliographicCarrington
frame from WCS information failed to make use of any specifiedrsun_ref
value. (#5395)SXTMap
now always returnsNone
for thewavelength
attribute. Previously this raised an error. (#5401)
Added/Improved Documentation#
3.0.0 (2021-05-14)#
Backwards Incompatible Changes#
sunpy.instr
has been deprecated and will be removed in sunpy 3.1 in favour ofsunkit_instruments
. The code that is undersunpy.instr
is imported viasunkit_instruments
to ensure backwards comparability. (#4526)Several
sunpy.map.GenericMap
attributes have been updated to returnNone
when the relevant piece of FITS metadata is missing. These are:exposure_time
, previously defaulted to zero seconds.measurement
, previously defaulted to zero.waveunit
, previously defaulted tou.one
.wavelength
, previously defaulted to zero. (#5126)
HeliographicStonyhurst
andHeliographicCarrington
no longer automatically convert 2D input to a 3D coordinate during instantiation. Instead, the 2D-to-3D conversion is deferred until the coordinate is transformed to a different frame, or with a call to the methodmake_3d()
. (#5211)Changed URL for the
sunpy.net.dataretriever.sources.noaa.SRSClient
from “ftp://ftp.swpc.noaa.gov/pub/warehouse/” to “ftp://ftp.ngdc.noaa.gov/STP/swpc_products/daily_reports/”. The old URL is unsupported and we expect the files will be the same but we can not say with 100% certainty. (#5173)Changed
sunpy.net.attrs.Source
tosunpy.net.attrs.Provider
for thesunpy.net.dataretriever.sources.gong.GONGClient
. (#5174)The
rsun
frame attribute ofHelioprojective
now converts any input to kilometers. (#5211)sunpy.map.CompositeMap.plot()
now internally callssunpy.map.GenericMap.plot()
andsunpy.map.GenericMap.draw_contours()
, which may affect the plot output of existing user code. (#5255)Removed the
basic_plot
keyword argument fromsunpy.map.CompositeMap.peek()
due to its unreliability. (#5255)sunpy.util.sphinx.changelog
andsunpy.util.towncrier
have been removed and are now in a standalone package sphinx-changelog. (#5049)
Deprecations and Removals#
Deprecated
sunpy.map.GenericMap.draw_rectangle
in favor ofdraw_quadrangle()
. (#5236)Using
GenericMap
plotting methods on anAxes
that is not aWCSAxes
is deprecated. This previously raised a warning, but is now formally deprecated, and will raise an error in sunpy 3.1. (#5244)Deprecated
sunpy.roi.chaincode.Chaincode
and created a replacement atsunpy.net.helio.Chaincode
.This replacement has the following changes:
Added support for numpy array as an input (it was broken before).
Renamed
BoundingBox
toboundingbox
Renamed
subBoundingBox
tosub_boundingbox
Now area and length raise
NotImplementedError
(#5249)
Deprecated
sunpy.roi.roi
, as it currently has no obvious use and has never seen any real development work. (#5249)
Features#
sunpy.coordinates.get_horizons_coord()
can now be given a start time, end time, and number of intervals (or interval length) to query a evenly spaced set of times. See the documentation string for more information and an example. (#4698)Added
sunpy.map.GenericMap.draw_quadrangle()
for drawing a quadrangle on a map. A quadrangle has edges that are aligned with lines of constant latitude and longitude, but these can be in a different coordinate system than that of the map. (#4809)Added a
longitude
keyword argument tocarrington_rotation_time()
as an alternate way to specify a fractional Carrington rotation. (#4879)Colorbar in
sunpy.map.GenericMap.peek
now has a unit label. (#4930)The default axes used by
BaseFuncAnimator.get_animation()
is nowBaseFuncAnimator.axes
, instead of the currently active axes (accessed via.matplotlib.pyplot.gca()
). The allows animations to be created on figures created directly usingmatplotlib.figure.Figure
.To revert to the previous behaviour of using the current axes, give
axes=plt.gca()
toget_animation()
. (#4968)Added colormaps for Solar Orbiter EUI images. These are used automatically when an EUI image is loaded. (#5023)
Added the ability to dynamically scale
sunpy.visualization.animator
instances. By specifying theclip_interval
keyword, it will now clip the minimum and maximum at each slider step to the specified interval. (#5025)Added a
sunpy.time.timerange.TimeRange.__contains__
method tosunpy.time.TimeRange
that tests if two time ranges overlap. (#5093)Added the ability to namespace files downloaded using
sunpy.data.data_manager.manager.DataManager
by prepending the file name with module name. (#5111)Added a rigid rotation model to
diff_rot()
viarot_type=rigid
, where the rotation rate does not vary with latitude. (#5132)Added a
save()
method tosunpy.map.MapSequence
that saves each map of the sequence. (#5145)The allowable
level
inputs tosunpy.map.GenericMap.contour()
andsunpy.map.GenericMap.draw_contours()
have been consolidated. Both methods now accept - Scalars, if the map has no units - Quantities, if the map has units - Percentages (#5154)Added support for corrected NOAA SWPC solar region summary data files. (#5173)
Updated
sunpy.util.sysinfo.system_info
to return all optional dependencies of sunpy. (#5175)sunpy.map.Map
now supports the EUI instrument on Solar Orbiter. (#5210)HeliographicStonyhurst
andHeliographicCarrington
now have anrsun
frame attribute to specify the radius of the Sun, which defaults to the photospheric radius defined insunpy.sun.constants
. This frame attribute is used when converting a 2D coordinate (longitude and latitude, with no specified radial distance) to a 3D coordinate by setting the radial distance torsun
(i.e., the assumption is that the coordinate is on the surface of the Sun). (#5211)Enhanced
sunpy.map.GenericMap.draw_limb()
so that the solar limb can be plotted on axes that correspond to a different map (e.g., with a different observer). The part of the limb that is not visible to the axes’s observer because it is on the far side of the Sun is shown as dotted rather than solid. (#5237)MetaDict
now saves a copy of the metadata on creation, which can be accessed using theoriginal_meta
property. Three new properties have also been added to query any changes that have been made to metadata:As an example,
my_map.meta.modified_items
will return a dictionary mapping keys to their original value and current value. (#5241)Added
sunpy.map.contains_coordinate()
which provides a quick way to see if a world coordinate is contained within the array bounds of a map. (#5252)Added an optional keyword argument
autoalign
tosunpy.map.GenericMap.plot()
for plotting a map to axes that correspond to a different WCS. See Auto-Aligning AIA and HMI Data During Plotting. (#5255)sunpy.map.CompositeMap.plot()
now properly makes use of WCS information to position and orient maps when overlaying them. (#5255)
Bug Fixes#
Fixed the drawing methods of
sunpy.map.GenericMap
(e.g.,~sunpy.map.GenericMap.draw_rectangle
) so that any text labels will appear in the legend. (#5019)Fixed bug in
sunpy.until.scraper.Scraper
which caused URL patterns containing backslashes to be incorrectly parsed on Windows. (#5022)Constructing a
MetaDict
is now more lenient, and accepts any class that inherits fromcollections.abc.Mapping
. This fixes a regression where headers read withastropy.io.fits
raised an error when passed to individualmap
sources. (#5047)Added warning to
sunpy.map.GenericMap.rotate()
when specifiedmissing
value is not compatible with the number type of the data array. (#5051)Prevented some colormaps being accidentally modified depending on the order and method through which they were accessed. (#5054)
Reverted change for
sunpy.map.GenericMap.draw_limb
that made it use “add_artist” as it was changing the FOV of the plotted image. (#5069)Fixed a bug where some
RotatedSunFrame
transformations could fail with anobserver=None
error. (#5084)Fixed bug where
sunpy.data.data_manager.DataManager
would fail to recover upon deleting the sqlite database file. (#5089)Fixed a bug where coordinate frames were considered different due to an unintended time difference during time handling at the level of numerical precision (i.e., tens of picoseconds). This resulted in the unexpected use of transformation machinery when transforming a coordinate to its own coordinate frame. (#5127)
Fixed a bug with failing downloads in 2010 with the
SRSClient
. (#5159)If the property
sunpy.map.GenericMap.rsun_obs
needs to calculate the solar angular radius from header information, it now properly uses thersun_ref
keyword if it is present and does not emit any warning. (#5172)Added a “rsun_obs” keyword to the output of
sunpy.map.header_helper.make_fitswcs_header()
if the coordinate argument has a “rsun” frame attribute. (#5177)Fixed small inaccuracies in the grid plotted by
draw_grid()
for maps that specify a radius of the Sun that is different from the constant insunpy.sun.constants
. (#5211)Fixed
sunpy.map.GenericMap.draw_contours()
so that the contours from a map can be plotted on axes with a different coordinate system. (#5239)When using the cylindrical representation of
Heliocentric
to work in the Heliocentric Radial coordinate frame, thepsi
component now goes from 0 to 360 degrees instead of -180 to 180 degrees. (#5242)Changed
MDIMap
to use the “CONTENT” keyword to identify the measurement, similar toHMIMap
, and removed the special-case nickname. This fixes the broken title on plots. (#5257)sunpy.coordinates.solar_frame_to_wcs_mapping()
now sets the observer auxiliary information when aHeliographicCarrington
frame withobserver='self'
is passed. (#5264)Calling
sunpy.map.header_helper.make_fitswcs_header()
with aHeliographicCarrington
coordinate that withobserver='self'
set now correctly sets the observer information in the header. (#5264)sunpy.map.GenericMap.superpixel()
now keeps the reference coordinate of the WCS projection the same as the input map, and updates the reference pixel accordingly. This fixes inconsistencies in the input and output world coordinate systems when a non-linear projection is used. (#5295)Inputs to the
dimensions
andoffset
arguments tosunpy.map.GenericMap.superpixel()
in units other thanu.pix
(e.g.`u.kpix
) are now handled correctly. (#5301)Fractional inputs to the
dimensions
andoffset
arguments tosunpy.map.GenericMap.superpixel()
were previously rounded usingint
in the superpixel algorithm, but not assigned integer values in the new metadata. This has now been changed so the rounding is correctly reflected in the metadata. (#5301)Remove runtime use of
astropy.tests.helper.assert_quantity_allclose
which introduces a runtime dependency onpytest
. (#5305)sunpy.map.GenericMap.resample()
now keeps the reference coordinate of the WCS projection the same as the input map, and updates the reference pixel accordingly. This fixes inconsistencies in the input and output world coordinate systems when a non-linear projection is used. (#5309)Fix saving
GenericMap
to an asdf file with version 2.8.0 of the asdf package. (#5342)
Added/Improved Documentation#
Added a gallery example (Drawing a rectangle on a map) for drawing rectangles on maps. (#4528)
Added an example (Plotting points on a Map with WCSAxes) of how pixel and SkyCoords work when plotted with
wcsaxes
. (#4867)Added a gallery example (Plot positions on a blank map) on how to create a blank map and mark locations. (#5077)
Added a gallery example (HMI Showcase: Cutout) demonstrating how to add a HMI zoomed-in region next to a full disk HMI image. (#5090)
Updated the Masking out the solar disk example to generate the mask using
sunpy.map.coordinate_is_on_solar_disk()
. (#5114)Added a gallery example (Segmenting a Map based on transformation of coordinates) demonstrating how to create a segment of a particular map from transformed coordinates. (#5121)
For the various subclasses of
GenericMap
(e.g.,AIAMap
), the online documentation now shows all of the inherited attributes and methods. (#5142)Added a documentation string to
HMISynopticMap
. (#5186)Added a new gallery example showcasing how to overlay HMI contours on an AIA image. (#5229)
Trivial/Internal Changes#
Replaced the old test runner with a new version that adds a dependency check before the test suite is run. (#4596)
The testing suite now raises a warning if the
pyplot
figure stack is not empty prior to running a test, and it closes all open figures after finishing each test. (#4969)Improved performance when moving the slider in
sunpy.visualisation.animator.ArrayAnimatorWCS
. (#4971)Added some basic logging to HEK searches, at the ‘debug’ logging level. (#5020)
Refactored
RotatedSunFrame
transformations for improved performance. (#5084)Re-ordered keyword-only arguments of
sunpy.map.GenericMap.draw_rectangle
to matchsunpy.map.GenericMap.submap()
. (#5091)Significantly sped up calls to
parse_time()
for string arguments. This will have knock on effects, including improved performance of querying the VSO. (#5108)Added tests for
sunpy.visualization.animator.mapsequenceanimator
andsunpy.map.MapSequence.plot()
. (#5125)The
CROTA
keywords are no longer set onsunpy.map.GenericMap.wcs
, as thePC_ij
keywords are always set and the FITS standard says that these keywords must not co-exist. (#5166)Temporarily disabled the unit test to check for coordinates consistency with JPL HORIZONS due to the inability to choose a matching ephemeris. (#5203)
wcsaxes_heliographic_overlay()
now acceptsobstime
andrsun
optional arguments. This function is not typically called directly by users. (#5211)GenericMap
plotting methods now have consistent argument checking for theaxes
argument, and will raise the same warnings or errors for similaraxes
input. (#5223)Calling
sunpy.map.GenericMap.plot()
on aWCSAxes
with a different World Coordinate System (WCS) to the map now raises a warning, as the map data axes may not correctly align with the coordinate axes. This happens if anAxes
is created with a projection that is a different map to the one being plotted. (#5244)Re-enabled the unit test to check for coordinates consistency with JPL HORIZONS when the matching ephemeris can be specified. (#5314)
2.1.0 (2020-02-21)#
Backwards Incompatible Changes#
Support for Python 3.6 and Numpy 1.15 has been dropped in line with NEP 29. The minimum supported version of Astropy is now 4.0, and the minimum version of scipy is now 1.2. (#4284)
Changed
sunpy.coordinates.sun.B0()
return type fromAngle
toLatitude
. (#4323)An error is now raised if
vmin
orvmax
are passed to tosunpy.map.GenericMap.plot
and they are already set on the mapnorm
. This is consistent with upcoming Matplotlib changes. (#4328)Previously slicing the result of
Fido.search()
(aUnifiedResponse
object) so that it had a length of one returned anotherUnifiedResponse
object. Now it will return aQueryResponseTable
object, which is a subclass ofastropy.table.Table
. (#4358)The
.size
property of a coordinate frame with no associated data will now raise an error instead of returning 0. (#4577)The following
Map
methods have had support for specific positional arguments removed. They must now be passed as keyword arguments (i.e.m.method(keyword_arg=value)
).The sunpy specific attributes
.heliographic_observer
and.rsun
are no longer set on theWCS
returned bysunpy.map.GenericMap.wcs
. (#4620)Due to upstream changes, the parsing logic for the
HECClient
now returns strings and not bytes forget_table_names()
. (#4643)Reduced the selection of dependent packages installed by default via
pip
, which means that some of our sub-packages will not fully import when sunpy is installed withpip install "sunpy"
. You can install all dependencies by specifyingpip install "sunpy[all]"
, or you can install sub-package-specific dependencies by specifying, e.g.,[map]
or[timeseries]
. (#4662)The class inheritance for
RotatedSunFrame
and the frames it creates has been changed in order to stop depending on unsupported behavior in the underlying machinery. The return values for someisinstance()
/issubclass()
calls will be different, but the API forRotatedSunFrame
is otherwise unchanged. (#4691)Fix a bug in
submap
where only the top right and bottom left coordinates of the input rectangle in world coordinates were considered when calculating the pixel bounding box. All four corners are once again taken into account now, meaning thatsubmap
correctly returns the smallest pixel box which contains all four corners of the input rectangle.To revert to the previous 2.0.0 behaviour, first convert the top right and bottom left coordinates to pixel space before calling submap with:
top_right = smap.wcs.world_to_pixel(top_right) * u.pix bottom_left = smap.wcs.world_to_pixel(bottom_left) * u.pix smap.submap(bottom_left=bottom_left, top_right=top_right)
This will define the rectangle in pixel space. (#4727)
VSO results where the size was
-1
(missing data) now returnNone
rather than-1
to be consistent with other missing data in the VSO results. (#4798)All result objects contained within the results of a
Fido.search()
(aUnifiedResponse
object) are nowQueryResponseTable
objects (or subclasses thereof). These objects are subclasses ofastropy.table.Table
and can therefore be filtered and inspected as tabular objects, and the modified tables can be passed toFido.fetch
.This, while a breaking change for anyone accessing these response objects directly, will hopefully make working with
Fido
search results much easier. (#4798)Results from the
NOAAIndicesClient
and theNOAAPredictClient
no longer hasStart Time
orEnd Time
in their results table as the results returned from the client are not dependent upon the time parameter of a search. (#4798)The
sunpy.net.vso.QueryResponse.search
method has been removed as it has not worked since the 1.0 release of sunpy. (#4798)The
sunpy.net.hek.hek.HEKColumn
class has been removed, theHEKTable
class now uses the standardastropy.table.Column
class. (#4798)The keys used to format file paths in
Fido.fetch
have changed. They are now more standardised across all the clients, as they are all extracted from the names of the columns in the results table.For results from the VSO the keys are no longer separated with
.
, and are based on the displayed column names. For results from thedataretriever
clients the only main change is that the keys are now lower case, where they were capitilized before. You can use the.sunpy.net.fido_factory.UnifiedResponse.path_format_keys
method to see all the possible keys for a particular search. (#4798)The time returned from
carrington_rotation_number()
has been changed from the TT scale to the more common UTC scale. To undo this change, usetime_out = time_out.tt
on the outputted time. (#4819)response_block_properties
has been renamed to.BaseQueryResponse.path_format_keys
, on the return objects from allsearch()
methods on all clients and fromFido.search()
. (#4798)
Removals#
Removed deprecated functions:
sunpy.coordinates.frames.Helioprojective.calculate_distance
, alternative issunpy.coordinates.frames.Helioprojective.make_3d
.sunpy.image.coalignment.repair_image_nonfinite
- if you wish to repair the image, this has to be done manually before calling the varioussunpy.image.coalignment
functions.The
repair_nonfinite
keyword argument tocalculate_shift
andcalculate_match_template_shift
has been removed.sunpy.instr.lyra.download_lytaf_database
- this just downloaded the file athttp://proba2.oma.be/lyra/data/lytaf/annotation_ppt.db
, which can be done manually.sunpy.util.net.check_download_file
, no alternative.sunpy.visualization.animator.ImageAnimatorWCS
, alternative issunpy.visualization.animator.ArrayAnimatorWCS
. (#4350)
Removed deprecated function
sunpy.instr.aia.aiaprep
. Alternative isregister
for converting AIA images from level 1 to level 1.5. (#4485)sunpy.cm
has been removed. All of the functionality in this module can now be found insunpy.visualization.colormaps
. (#4488)sunpy.test.hash
has been removed, the functionality has been moved into the pytest-mpl package. (#4605)sunpy.util.multimethod
has been removed. (#4614)The
lytaf_path
argument (which previously did nothing) has been removed from -sunpy.instr.lyra.remove_lytaf_events_from_timeseries
-sunpy.instr.lyra.get_lytaf_events
-sunpy.instr.lyra.get_lytaf_event_types
(#4615)
Deprecations#
Deprecated
sunpy.net.vso.attrs.Source
andsunpy.net.vso.attrs.Provider
. They are nowsunpy.net.attrs.Source
andsunpy.net.attrs.Provider
respectively. (#4321)Deprecated the use of the
sunpy.map.GenericMap.size
property, usesunpy.map.Map.data.size
instead. (#4338)sunpy.net.helio.HECClient.time_query
is deprecated,search
is the replacement. (#4358)sunpy.net.jsoc.attrs.Keys
is deprecated; all fields are returned by default and can be filtered post search. (#4358)sunpy.net.hek.attrs.Time
is deprecated;Time
should be used instead. (#4358)Support for
sunpy.coordinates.wcs_utils.solar_wcs_frame_mapping()
to use the.heliographic_observer
and.rsun
attributes on aWCS
is deprecated. (#4620)The
origin
argument tosunpy.map.GenericMap.pixel_to_world
andsunpy.map.GenericMap.world_to_pixel
is deprecated.If passing
0
, not using theorigin
argument will have the same effect.If passing
1
, manually subtract 1 pixel from the input topixel_to_world
, or manually add 1 pixel to the output ofworld_to_pixel
, and do not use theorigin
argument. (#4700)
The
.VSOClient.link
method is deprecated as it is no longer used. (#4789)The
.UnifiedResponse.get_response
,.UnifiedResponse.tables
and.UnifiedResponse.responses
attributes of.UnifiedResponse
have been deprecated as they are no longer needed now the object returns the table objects it contains when sliced. (#4798)sunpy.net.vso.VSOClient.search()
has a new keyword argumentresponse_type=
which controls the return type from thesearch()
method. In sunpy 2.1 and 3.0 it will default to the"legacy"
response format, in 3.1 it will default to the new"table"
response format, and the"legacy"
format may be deprecated and removed at a later date.Searches made with
Fido
will use the new"table"
response format, so this only affects users interacting with theVSOClient
object directly. (#4798)
Features#
For
sunpy.map.GenericMap.quicklook()
andsunpy.map.MapSequence.quicklook()
(also used for the HTML representation shown in Jupyter notebooks), the histogram is now shaded corresponding to the colormap of the plotted image. Clicking on the histogram will toggle an alternate version of the histogram. (#4931)Add an
SRS_TABLE
file to the sample data, and use it in the magnetogram plotting example. (#4993)Added a
sunpy.map.GenericMap.contour()
method to find the contours on a map. (#3909)Added a context manager (
assume_spherical_screen()
) to interpretHelioprojective
coordinates as being on the inside of a spherical screen instead of on the surface of the Sun. (#4003)Added
sunpy.map.sources.HMISynopticMap
for handling the Synoptic maps from HMI. (#4053)Added a
MDISynopticMap
map source class. (#4054)Created
GONGClient
for accessing magnetogram synoptic map archives of NSO-GONG. (#4055)All coordinate frames will now show the velocity if it exists in the underlying data. (#4102)
The ephemeris functions
get_body_heliographic_stonyhurst()
,get_earth()
, andget_horizons_coord()
can now optionally return the body’s velocity as part of the output coordinate. (#4102)MetaDict
now maintains coherence between its keys and their corresponding keycomments. Callingdel
on aMetaDict
object key is now case-insensitive. (#4129)Allow
sunpy.visualization.animator.ArrayAnimatorWCS
to disable ticks for a coordinate, by settingticks: False
in thecoord_params
dictionary. (#4270)Added a
show()
method forBaseQueryResponse
which returnsTable
with specified columns for the Query Response. (#4309)Added
_extract_files_meta
method insunpy.util.scraper.Scraper
which allows scraper to extract metadata from the file URLs retrieved for a given time range. (#4313)Refactoring of
dataretriever
which adds these capabilities toQueryResponse
:Any
attr
shall not be defaulted to a hard-coded value in all subclasses ofGenericClient
; thus records for all possibleattrs
shall be returned if it is not specified in the query.QueryResponse
can now show more columns; thus all metadata extractable from matching file URLs shall be shown and for a client, non-spportedattrs
shall not be shown in the response tables. (#4321)
New class attributes added to
GenericClient
:Additions in
sunpy.util.scraper
to support the refactoring ofGenericClient
: -sunpy.util.scraper.Scraper.findDatewith_extractor
that parses the url using extractor to return its start time. - Amatcher
insunpy.util.scraper.Scraper._extract_files_meta
which validates the extracted metadata by using the dictionary returned from_get_match_dict()
. (#4321)Added methods
pre_search_hook()
andpost_search_hook()
which helps to translate the attrs for scraper before and after the search respectively. (#4321)sunpy.timeseries.sources.RHESSISummaryTimeSeries.peek
has had the following minor changes:Colors from the default matplotlib color cycle are now used (but the colors remain qualitatively the same)
The default matplotlib linewidth is now used
It is now possible to pass in a user specified linewidth
Seconds have been added to the x-axis labels (previously it was just hours and minutes) (#4326)
HECClient
andHEKClient
now inheritBaseClient
which makes them compatible with theUnifiedDownloaderFactory
(Fido
). (#4358)MaxRecords
andTableName
added as “attrs” for HELIO searches. (#4358)Add the ability to download new GOES 16 & 17 data alongside the reprocessed GOES 13, 14 and 15 data via the GOES-XRS Fido client. (#4394)
sunpy.net.jsoc.JSOCClient.request_data
now support additional parameter “method” which allows user to download staged data as single .tar file. (#4405)Added
sunpy.util.get_timerange_from_exdict
which finds time range for a URL using its metadata. Addedsunpy.util.scraper.Scraper.isvalid_time
that checks whether the file corresponds to a desired time range. (#4419)Colormap data has been moved to individual .csv files in the
sunpy/visualization/colormaps/data
directory. (#4433)Added
solar_angle_equivalency
to convert between a physical distance on the Sun (e.g., km) to an angular separation as seen by an observer (e.g., arcsec). (#4443)sunpy.map.Map
instances now have their.unit
attribute set from the'BUNIT'
FITS keyword. If the keyword cannot be parsed, or is not present the unit is set toNone
. (#4451)The
sunpy.map.GenericMap.wcs
property is now cached, and will be recomputed only if changes are made to the map metadata. This improves performance of a number of places in the code base, and only one warning will now be raised about WCS fixes for a given set of metadata (as opposed to a warning each time.wcs
is accessed) (#4467)Extended
concatenate()
andconcatenate()
to allow iterables. (#4499)Enable
RotatedSunFrame
to work with non-SunPy frames (e.g.,HeliocentricMeanEcliptic
). (#4577)Add support for
pathlib.Path
objects to be passed tosunpy.timeseries.TimeSeries
. (#4589)Add support for GOES XRS netcdf files to be read as a
sunpy.timeseries.sources.XRSTimeSeries
. (#4592)Add
Cutout
attr for requesting cutouts from JSOC viaJSOCClient
andFido
. (#4595)sunpy now sets auxiliary parameters on
sunpy.map.GenericMap.wcs
using theastropy.wcs.Wcsprm.aux
attribute. This stores observer information, along with the reference solar radius if present. (#4620)The
HeliographicCarrington
frame now accepts the specification ofobserver='self'
to indicate that the coordinate itself is also the observer for the coordinate frame. This functionality greatly simplifies working with locations of observatories that are provided in Carrington coordinates. (#4659)Add two new colormaps (
rhessi
andstd_gamma_2
) that are used for plotting RHESSI maps. (#4665)If either ‘CTYPE1’ or ‘CTYPE2’ are not present in map metadata, sunpy now assumes they are ‘HPLN-TAN’ and ‘HPLT-TAN’ (previously it assumed ‘HPLN- ‘ and ‘HPLT- ‘). In addition, a warning is also now raised when this assumption is made. (#4702)
Added a new
all_corner_coords_from_map
function to get the coordinates of all the pixel corners in aGenericMap
. (#4776)Added support for “%Y/%m/%dT%H:%M” to
sunpy.time.parse_time()
. (#4791)Added the STEREO EUVI instrument specific colormaps called” ‘euvi171’, ‘euvi195’, ‘euvi284’, ‘euvi304’. (#4822)
Bug Fixes#
sunpy.map.GenericMap.date
now has its time scale set from the ‘TIMESYS’ FITS keyword, if it is present. If it isn’t present the time scale defaults to ‘UTC’, which is unchanged default behaviour, so this change will only affect maps with a ‘TIMESYS’ keyword that is not set to ‘UTC’. (#4881)Fixed the
sunpy.net.dataretriever.sources.noaa.SRSClient
which silently failed to download the SRS files when the tarball for the previous years did not exist. Client now actually searches for the tarballs and srs files on the ftp archive before returning them as results. (#4904)No longer is the WAVEUNIT keyword injected into a data source if it is missing from the file’s metadata. (#4926)
Map sources no longer overwrite FITS metadata keywords if they are present in the original metadata. The particular map sources that have been fixed are
SJIMap
,KCorMap
,RHESSIMap
,EITMap
,EUVIMap
,SXTMap
. (#4926)Fixed a handling bug in
sunpy.map.GenericMap.draw_rectangle
when the rectangle is specified in a different coordinate frame than that of the map. A couple of other minor bugs insunpy.map.GenericMap.draw_rectangle
were also fixed. (#4929)Improved error message from
sunpy.net.Fido.fetch()
when no email has been supplied for JSOC data. (#4950)Fixed a bug when transforming from
RotatedSunFrame
to another frame at a different observation time that resulted in small inaccuracies. The translational motion of the Sun was not being handled correctly. (#4979)Fixed two bugs with
differential_rotate()
andsolar_rotate_coordinate()
that resulted in significant inaccuracies. Both functions now ignore the translational motion of the Sun. (#4979)The ability to to filter search results from the
VSOClient
was broken. This has now been restored. (#4011)Fixed a bug where transformation errors were not getting raised in some situations when a coordinate frame had
obstime
set to the default value ofNone
andSkyCoord
was not being used. Users are recommended to useSkyCoord
to manage coordinate transformations unless they have a specific reason not to. (#4267)Fixed a bug in
_get_url_for_timerange
which returned incorrect URLs because of not using**kwargs
in the client’s_get_overlap_urls()
method. (#4288)Data products from
NOAAIndicesClient
andNOAAPredictClient
have been updated to download new JSON files. The old text files which the data used to come in no longer exist. The new JSON files forNOAAIndicesClient
now do not have the following columns: - Geomagnetic Observed and Smoothed - Sunspot Numbers Ratio (RI/SW)Both
sunpy.timeseries.sources.noaa.NOAAIndicesTimeSeries
andsunpy.timeseries.sources.noaa.NOAAPredictIndicesTimeSeries
have been updated to support the new JSON files. Loading the old text files is still supported, but support for this will be removed in a future version of sunpy. (#4340)Fixed a bug due to which
sunpy.net.helio.parser.wsdl_retriever
ignored previously discovered Taverna links. (#4358)The flare class labels in GOES
peek()
plots are now drawn at the center of the flare classes. Previously they were (ambiguously) drawn on the boundaries. (#4364)sunpy.map.GenericMap.rsun_obs
no longer assumes the observer is at Earth ifrsun_obs
was not present in the map metadata. The sun-observer distance is now taken directly from the observer coordinate. If the observer coordinate is not present, this defaults to the Earth, retaining previous behaviour. (#4375)
Nanosecond precision is now retained when using
parse_time
with aTimestamp
. (#4409)Fixed a bug where SunPy could not be successfully imported if the default text encoding of the running environment was unable to handle non-ASCII characters. (#4422)
sunpy.net.dataretriever.sources.noaa.SRSClient
now correctly returns zero results for queries in the future or before 1996, which is when data is first available. (#4432)Fixes issue where NAXISn is not updated after invoking
GenericMap.resample()
(#4445)The floating point precision of input to
sunpy.image.transform.affine_transform
is now preserved. Previously all input was cast tonumpy.float64
, which could cause large increases in memory use for 32 bit data. (#4452)Fixed
affine_transform()
to scale images to [0, 1] before passing them toskimage.transform.warp()
and later rescale them back. (#4477)Several
warnings.simplefilter('always', Warning)
warning filters insunpy.timeseries
have been removed. (#4511)All calculations of the angular radius of the Sun now use the same underlying code with the accurate calculation. The previous inaccuracy was a relative error of ~0.001% (0.01 arcseconds) for an observer at 1 AU, but could be as large as ~0.5% for Parker Solar Probe perihelia. (#4524)
Fixed an issue in
sunpy.time.TimeRange.get_dates()
where the function would return the wrong number of days if less than 24 hours had passed (#4529)Several functions in
sunpy.map
now properly check if the provided coordinate is in the expectedHelioprojective
frame. (#4552)Fixes a bug which occurs in setting the
ylims
bysunpy.visualization.animator.line.LineAnimator
when there are non-finite values in the data array to be animated. (#4554)Clear rotation metadata for SOHO/LASCO Helioviewer JPEG2000 images, as they are already rotated correctly. (#4561)
The
max_conn
argument toFido.fetch()
is now correctly respected by the JSOC client. Previously the JSOC client would default to 4 connections no matter what the value passed toFido.fetch()
was. (#4567)sunpy.time.parse_time()
now correctly parses lists of time strings that have one of the built in sunpy time formats. (#4590)Fixes the SRSClient to search for files of correct queried time and now allows a path keyword to be downloaded in fetch. (#4600)
Fixed
sunpy.net.helio.parser.wsdl_retriever
, which previously ignored discovered Taverna links. (#4601)The transformations between
HCRS
andHeliographicStonyhurst
have been re-implemented to enable the proper transformations of velocities. All ephemeris functions (e.g.,get_body_heliographic_stonyhurst()
) now return properly calculated velocities wheninclude_velocity=True
is specified. (#4613)The maximum number of connections opened by the JSOC downloader has been reduced from 4 to 2. This should prevent downloads of large numbers of files crashing. (#4624)
Fixed a significant performance bug that affected all coordinate transformations. Transformations have been sped up by a factor a few. (#4663)
Fixed a bug with the mapping of a WCS header to a coordinate frame if the observer location is provided in Carrington coordinates. (#4669)
sunpy.io.fits.header_to_fits
now excludes any keys that have associated NaN values, as these are not valid in a FITS header, and throws a warning if this happens. (#4676)Fixed an assumption in
sunpy.map.GenericMap.pixel_to_world
that the first data axis is longitude, and the second is latitude. This will affect you if you are using data where the x/y axes are latitude/longitude, and now returns correct values in methods and properties that callpixel_to_world
, such asbottom_left_coord
,top_right_coord
,center
. (#4700)Added a warning when a 2D
Helioprojective
coordinate is upgraded to a 3D coordinate and the number type is lower precision than the native Python float. This 2D->3D upgrade is performed internally when transforming a 2DHelioprojective
coordinate to any other coordinate frame. (#4724)All columns from a
sunpy.net.vso.VSOClient.search
will now be shown. (#4788)The search results object returned from
Fido.search
(UnifiedResponse
) now correctly counts all results in it’sfile_num
property. Note that because someFido
clients now return metadata only results, this is really the number of records and does not always correspond to the number of files that would be downloaded. (#4798)Improved the file processing logic for EVE L0CS files, which may have fixed a bug where the first line of data was parsed incorrectly. (#4805)
Fixing the
CROTA
meta keyword in EUVI FITS toCROTAn
standard. (#4846)
Added/Improved Documentation#
Added a developer guide for writing a new
Fido
client. (#4387)Added an example of how to use Matplotlib’s axes range functionality when plotting a Map with WCSAxes. (#4792)
Add links to Thompson 2006 paper on solar coordinates to synoptic map example. (#3549)
Clarified the meaning of
.bottom_left_coord
and.top_right_coord
insunpy.map.GenericMap
. (#3706)Added a list of possible signatures to
sunpy.timeseries.metadata.TimeSeriesMetaData
. (#3709)Added
sunpy.data.manager
,sunpy.data.cache
,sunpy.net.Fido
,sunpy.map.Map
, andsunpy.timeseries.TimeSeries
to the docs. (#4098)Clarified spline option for
sunpy.map.GenericMap.resample
. (#4136)Updated the gallery example Plotting a solar cycle index to retrieve data using
Fido
. (#4169)Fixed example usage of
sunpy.io.fits.read
to account for the fact that it returns a list of data-header pairs rather than the data-header pairs directly. (#4183)Added example of how to create a
sunpy.map.GenericMap
from observations in RA-DEC coordinates. (#4236)Added
sunpy.coordinates.SunPyBaseCoordinateFrame
andsunpy.coordinates.BaseHeliographic
to the documentation. (#4274)sunpy.time.TimeRange
had a.__contains__
method and this is now documented. (#4372)Revamped sunpy pull request review developer documentation. (#4378)
Revamped sunpy installation documentation. (#4378)
Fixed broken documentation links in the guide. (#4414)
Fixed miscellaneous links in the API documentation. (#4415)
Added
sunpy.data.data_manager.downloader
,sunpy.data.data_manager.storage
, andsunpy.net.hek.HEKTable
to the docs. (#4418)Added documentation for copying Map objects using the copy module’s deepcopy method. (#4470)
Added a gallery example for saving and loading sunpy Maps using asdf. (#4494)
Added description for a counter-intuitive section in the Differentially rotating a map example. (#4548)
Added Coordinates with velocity information to explain how to use velocity information in the coordinates framework. (#4610)
New gallery example of searching and downloading GOES XRS data (with GOES 15, 16 and 17). (#4686)
Created the new gallery example Offsetting the north pole of a coordinate frame for
NorthOffsetFrame
. (#4709)Added more information on which FITS keywords are used for various
sunpy.map.GenericMap
properties. (#4717)Improved documentation for
sunpy.physics.differential_rotation.diff_rot()
. (#4876)
Documentation Fixes#
The keyword
clip_interval
is now used more extensively in gallery examples when plotting the sample AIA image (e.g., Plotting a map). (#4573)Modified Overplotting SRS active region locations on a magnetograms to use HMI file from sample data instead of downloading it with Fido. (#4598)
Removed unnecessary transformations of coordinates prior to plotting them using
plot_coord
. (#4609)Ensure that all attrs are documented and clean the
sunpy.net.hek.attrs
namespace of non-attr objects. (#4834)Fixed miscellaneous issues with the gallery example Aligning AIA and HMI Data with Reproject. (#4843)
Fixed the display of arguments in the documentation for
Fido
attributes (sunpy.net.attrs
). (#4916)
Trivial/Internal Changes#
Fido.fetch
now always specifies apath=
argument of typepathlib.Path
to thefetch
method of the client. This path will default to the configured sunpy download dir, will have the user directory expanded, will have the{file}
placeholder and will be tested to ensure that it is writeable. (#4949)Added information on what went wrong when
sunpy.map.GenericMap.wcs
fails to parse a FITS header into a WCS. (#4335)Fixed the
Helioprojective
docstring to be clear about the names of the coordinate components. (#4351)Raise a better error message if trying to load a FITS file that contains only one dimensional data. (#4426)
The following functions in
sunpy.map
have had their performance greatly increased, with runtimes typically improving by a factor of 20x. This has been achieved by improving many of the checks so that they only require checking the edge pixels of a map as opposed to all of the pixels.Improved the output when you print a sunpy Map. (#4464)
Creating a
MetaDict
with dictionary keys that are not strings now raises as user-friendlyValueError
which prints all the non-compliant keys. (#4476)Maps created directly via.
sunpy.map.GenericMap
now have their metadata automatically converted to aMetaDict
, which is the same current behaviour of thesunpy.map.Map
factory. (#4476)If the
top_right
corner given tosunpy.map.GenericMap.submap()
is below or to the right of thebottom_left
corner, a warning is no longer raised (as the rectangle is still well defined), but a message is still logged at the debug level to the sunpy logger. (#4491)Added test support for Python 3.9 (no wheels yet). (#4569)
sunpy.sun
functions now make use of theGeocentricTrueEcliptic
frame to simplify internal calculations, but the returned values are unchanged. (#4584)Change the format of the time returned from
carrington_rotation_number()
from'jd'
to'iso'
, so printing theTime
returned will now print an ISO timestamp instead of the Julian days. (#4819)The listings for the sample data (
sunpy.data.sample
) are now sorted. (#4838)Changed the implementation of a
hypothesis
-based test so that it does not raise an error withhypothesis
6.0.0. (#4852)
2.0.0 (2020-06-12)#
Backwards Incompatible Changes#
The frames
HeliographicStonyhurst
andHeliographicCarrington
now inherit from the new base classBaseHeliographic
. This changes means thatisinstance(frame, HeliographicStonyhurst)
is no longerTrue
whenframe
isHeliographicCarrington
. (#3595)aia_color_table
,eit_color_table
andsuvi_color_table
now only takeastropy.units
quantities instead of strings. (#3640)sunpy.map.Map
is now more strict when the metadata of a map cannot be validated, and an error is now thrown instead of a warning if metadata cannot be validated. In order to load maps that previously loaded without error you may need to passsilence_errors=True
tosunpy.map.Map
. (#3646)Fido.search
will now return results from all clients which match a query, you no longer have to make the query specific to a single client. This means that searches involving the ‘eve’ and ‘rhessi’ instruments will now potentially also return results from the VSO. ForRHESSIClient
you can now specifya.Physobs("summary_lightcurve")
to only include the summary lightcurve data products not provided by the VSO. (#3770)The objects returned by the
search
methods onVSOClient
,JSOCClient
andGenericClient
have been changed to be based onsunpy.net.base_client.BaseQueryResponse
. This introduces a few subtle breaking changes for people using the client search methods directly (notFido.search
), or people usingsunpy.net.fido_factory.UnifiedResponse.get_response
. When slicing an instance ofQueryResponse
it will now return an instance of itself,QueryResponse.blocks
can be used to access the underlying records. Also, the.client
attribute of the response no longer has to be the instance of the class the search was made with, however, it often is. (#3770)HeliographicCarrington
is now an observer-based frame, where the observer location (specifically, the distance from the Sun) is used to account for light travel time when determining apparent Carrington longitudes. Coordinate transformations using this frame now require an observer to be specified. (#3782)To enable the precise co-alignment of solar images from different observatories, the calculation of Carrington coordinates now ignores the stellar-aberration correction due to observer motion. For an Earth observer, this change results in an increase in Carrington longitude of ~20 arcseconds. See Calculating Carrington longitude for more information. (#3782)
Fixed a bug where some of the coordinate transformations could raise
ValueError
instead ofConvertError
when the transformation could not be performed. (#3894)Astropy 3.2 is now the minimum required version of that dependency. (#3936)
Deprecations and Removals#
Fido search attrs available as
sunpy.net.attrs
i.e,a.Time
,a.Instrument
etc are now deprecated as VSO attrs (sunpy.net.vso.attrs
). (#3714)sunpy.util.multimethod.MultiMethod
is deprecated,functools.singledispatch
provides equivalent functionality in the standard library. (#3714)sunpy.net.vso.attrs.Physobs
has been moved tosunpy.net.attrs.Physobs
and the original deprecated. (#3877)Deprecate
sunpy.instr.aia.aiaprep
in favor of theaiapy.calibrate.register
function in the [aiapy](LMSAL_HUB/aia_hub/aiapy) package.sunpy.instr.aia.aiaprep
will be removed in version 2.1 (#3960)Removed the module
sunpy.sun.sun
, which was deprecated in version 1.0. Use the modulesunpy.coordinates.sun
instead. (#4014)Removed Sun-associated functions in
sunpy.coordinates.ephemeris
, which were deprecated in 1.0. Use the corresponding functions insunpy.coordinates.sun
. (#4014)Remove the deprecated
sunpy.net.vso.vso.VSOClient
.query_legacy
and.latest
methods. (#4109)Removed the sample datasets NOAAINDICES_TIMESERIES and NOAAPREDICT_TIMESERIES because they will invariably be out of date. Up-to-date versions of these NOAA indices can be downloaded using
Fido
(see Plotting a solar cycle index). (#4169)
Features#
Added
RotatedSunFrame
for defining coordinate frames that account for solar rotation. (#3537)Added a context manager (
transform_with_sun_center
) to ignore the motion of the center of the Sun for coordinate transformations. (#3540)Updated the gallery example titled ‘Downloading and plotting an HMI magnetogram’ to rotate the HMI magnetogram such that solar North is pointed up. (#3573)
Creates a function named
sunpy.map.sample_at_coords
that samples the data from the map at the given set of coordinates. (#3592)Enabled the discovery of search attributes for each of our clients. (#3637)
Printing
sunpy.net.attrs.Instrument
or other “attrs” will show all attributes that exist under the corresponding “attr”. (#3637)Printing
sunpy.net.Fido
will print out all the clients that Fido can use. (#3637)Updates
draw_grid
to allow disabling the axes labels and the ticks on the top and right axes. (#3673)Creates a
tables
property forUnifiedResponse
, which allows to access theBaseQueryResponse
as anTable
, which then can be used for indexing of results. (#3675)Change the APIs for
sunpy.map.GenericMap.draw_rectangle
andsunpy.map.GenericMap.submap()
to be consistent with each other and to use keyword-only arguments for specifying the bounding box. (#3677)Updates the
observer_coordinate
property to warn the user of specific missing metadata for each frame. Omits warning about frames where all metadata is missing or all meta is present. (#3692)Added
sunpy.util.config.copy_default_config
that copies the default config file to the user’s config directory. (#3722)sunpy.database
now supports adding database entries and downloading data fromHEK
query (#3731)Added a helper function (
get_rectangle_coordinates
) for defining a rectangle in longitude and latitude coordinates. (#3737)Add a
.data
property inGenericTimeSeries
, so that users are encouraged to useto_dataframe()
to get the data of the timeseries. (#3746)It is now possible to turn on or off various corrections in
L0()
(the apparent Carrington longitude of Sun-disk center as seen from Earth). (#3782)Made skimage.transform import lazy to reduce import time of
sunpy.image.transform
by ~50% (#3818)Add support for parfive 1.1. This sets a limit on the number of open connections to JSOC when downloading files to 10. (#3822)
Fido clients (subclasses of
sunpy.net.base_client.BaseClient
) can now register their own attrs modules withsunpy.net.attrs
. This allows clients which require attr classes specific to that client to register modules that can be used by the user i.e.a.vso
. It also allows clients implemented externally to sunpy to register attrs. (#3869)Added the methods
sunpy.map.GenericMap.quicklook()
andsunpy.map.MapSequence.quicklook()
to display an HTML summary of the instance, including interactive controls. When using Jupyter notebooks, this HTML summary is automatically shown instead of a text-only representation. (#3951)Added
_localfilelist
method insunpy.util.scraper.Scraper
to scrap local data archives. (#3994)Added extra constants to
sunpy.sun.constants
:Longitude of the prime meridian (epoch J2000.0) :
sunpy.sun.constants.get('W_0')
Sidereal rotation rate :
sunpy.sun.constants.sidereal_rotation_rate
First Carrington rotation (JD TT) :
sunpy.sun.constants.first_carrington_rotation
Mean synodic period :
sunpy.sun.constants.mean_synodic_period
Right ascension (RA) of the north pole (epoch J2000.0) :
sunpy.sun.constants.get('alpha_0')
Declination of the north pole (epoch J2000.0) :
sunpy.sun.constants.get('delta_0')
(#4013)
Adds to
sunpy.util.scraper.Scraper
the ability to include regular expressions in the URL passed. (#4107)
Bug Fixes#
Added support for passing
TimeSeriesMetaData
object totimeseries_factory
and associated validation tests. (#3639)Now when
GenericMap
fails to load a file, the filename that failed to load will now be part of the error message. (#3727)Work around incorrect Content-Disposition headers in some VSO downloads, which were leading to mangled filenames. (#3740)
Fido.search
can now service queries withouta.Time
being specified. This is currently only used by thesunpy.net.jsoc.JSOCClient
. (#3770)Fixed a bug with the calculation of Carrington longitude as seen from Earth where it was using an old approach instead of the current approach (for example, the varying Sun-Earth distance is now taken into account). The old approach resulted in errors no greater than 7 arcseconds in Carrington longitude when using
L0
andHeliographicCarrington
. (#3772)Updated
sunpy.map.CompositeMap.plot
to support a linewidths argument. (#3792)Fix a bug in
sunpy.net.jsoc.JSOCClient
where requesting data for export would not work if a non-time primekey was used. (#3825)Add support for passing paths of type
pathlib.Path
insunpy.net.jsoc.JSOCClient.fetch
. (#3838)Add explicit support for dealing with download urls for files, under ‘as-is’ protocol in
sunpy.net.jsoc.JSOCClient.get_request
. (#3838)Updated the method used to filter time in the VSO post-search filtering function. (#3840)
Fix failing of fetching of the indexed JSOCResponses using
sunpy.net.fido_factory.UnifiedDownloaderFactory.fetch
. (#3852)Prevented
sunpy.map.GenericMap.plot
modifying in-place any items passed asimshow_kwargs
. (#3867)Changed the format of DATE-OBS in
sunpy.map.GenericMap.wcs
from iso to isot (ie. with a “T” between the date and time) to conform with the FITS standard. (#3872)Fixed a minor error (up to ~10 arcseconds) in the calculation of the Sun’s position angle (
sunpy.coordinates.sun.P()
). (#3886)Updated to HTTPS for HEK. (#3917)
The accuracy of the output of
sunpy.coordinates.ephemeris.get_horizons_coord()
is significantly improved. (#3919)Fixed a bug where the longitude value for the reference coordinate in the Map repr would be displayed with the unintended longitude wrapping. (#3959)
It is now possible to specify a local file path to
sunpy.data.data_manager.DataManager.override_file
without having to prefix it withfile://
. (#3970)Closed the session in the destructor of VSOClient thus solving the problem of socket being left open (#3973)
Fixed a bug of where results of VSO searches would have inconsistent ordering in
sunpy.net.vso.vso.QueryResponse
by always sorting the results by start time. (#3974)Fixes two bugs in
sunpy.util.deprecated
: correctly calculates the removal version and does not override the default and/or alternative functionality message. Providing a custom deprecation message now suppresses any mention of the removal version. Additionally, apending
keyword argument is provided to denote functions/classes that are pending deprecation. (#3982)Correctly generate labels for sliders in
~sunpy.visualization.animator.ArrayAnimatorWCS
when the number of pixel dimensions and the number of world dimensions are not the same in the WCS. (#3990)Updated VSOClient.response_block_properties to check if “None” is in the return. (#3993)
Fix a bug with
sunpy.visualization.animator.ArrayAnimatorWCS
where animating a line with a masked array with the whole of the initial line masked out the axes limits for the x axis were not correctly set. (#4001)Fixed passing in a list of URLs into
sunpy.map.GenericMap
, before it caused an error due to the wrong type being returned. (#4007)Fixed a bug with
transform_with_sun_center()
where the global variable was sometimes restored incorrectly. This bug was most likely encountered if there was a nested use of this context manager. (#4015)Fixes a bug in fido_factory to allow path=”./” in fido.fetch(). (#4058)
Prevented
sunpy.io.fits.header_to_fits
modifying the passed header in-place. (#4067)Strip out any unknown unicode from the HEK response to prevent it failing to load some results. (#4088)
Fixed a bug in
get_body_heliographic_stonyhurst()
that resulted in a error when requesting an array of locations in conjunction with enabling the light-travel-time correction. (#4112)sunpy.map.GenericMap.top_right_coord
andcenter
have had their definitions clarified, and both have had off-by-one indexing errors fixed. (#4121)Fixed
sunpy.map.GenericMap.submap()
when scaled pixel units (e.g.u.mpix
) are used. (#4127)Fixed bugs in
sunpy.util.scraper.Scraper.filelist
that resulted in error when the HTML page of URL opened by the scraper contains some “a” tags without “href” attribute and resulted in incorrect file urls when any href stores filepath relative to the URL’s domain instead of just a filename. (#4132)Fixed inconsistencies in how
submap
behaves when passed corners in pixel and world coordinates. The behavior for submaps specified in pixel coordinates is now well-defined for pixels on the boundary of the rectangle and is consistent for all boundaries. Previously pixels on the lower left boundary were included, but excluded on the upper and right boundary. This means the shape of a submap may now be 1 pixel larger in each dimension. Added several more tests forsubmap
for a range of cutout sizes in both pixel and world coordinates. (#4134)sunpy.map.on_disk_bounding_coordinates
now fully propagates the coordinate frame of the input map to the output coordinates. Previously only the observer coordinate, and no other frame attributes, were propagated. (#4141)Fix an off-by-one error in the reference pixel returned by
sunpy.map.header_helper.make_fitswcs_header()
. (#4152)sunpy.map.GenericMap.reference_pixel
now uses zero-based indexing, in order to be consistent with the rest of thesunpy.map
API. (#4154)Previously
sunpy.map.GenericMap.resample
withmethod='linear'
was using an incorrect and constant value to fill edges when upsampling a map. Values near the edges are now correctly extrapolated using thefill_value=extrapolate
option toscipy.interpolate.interp1d
. (#4164)Fixed a bug where passing an
int
orlist
via thehdus
keyword argument tosunpy.io.fits.read
threw an exception because the list of HDU objects was no longer of typeHDUList
. (#4183)Fix attr printing when the attr registry is empty for that attr (#4199)
Improved the accuracy of
angular_radius()
by removing the use of the small-angle approximation. The inaccuracy had been less than 5 milliarcseconds. (#4239)Fixed a bug with the
observer
frame attribute for coordinate frames where an input that was not supplied as aSkyCoord
would sometimes result in a transformation error. (#4266)
Improved Documentation#
Fixed an issue with the scaling of class-inheritance diagrams in the online documentation by blocking the versions of graphviz containing a bug. (#3548)
A new example gallery example “Plotting a difference image” has been added, which can be used for base difference or running difference images. (#3627)
Removed obsolete Astropy Helpers submodule section in
CONTRIBUTING.rst
; Also removed mentions of astropy_helpers in all files of the project. (#3676)Corrected misleading
TimeSeriesMetaData
documentation about optional parameters. (#3680)Added an example for
world_to_pixel
function in the Units & Coordinates guide. (#3776)Added a page describing how SunPy calculates Carrington longitudes. (#3782)
Changed padding value of an example in the example gallery to fix the overlap of titles and x-label axes. (#3835)
More information and links about how to create changelogs. (#3856)
Clarified some inputs to
sunpy.map.GenericMap.plot
. (#3866)Changed quoted sentence (that we suggest authors add to their research papers) in CITATION.rst (#3896)
Add example of how to use SunPy’s HEK client to search for the GOES flare event list. (#3953)
Improved the doc layout of
sunpy.data.sample
. (#4034)Made improvements to STEREO starfield gallery example. (#4039)
Improved the documentation of
sunpy.map.GenericMap.resample
. (#4043)Updated the STEREO starfield example to use all of the information in the star catalog. (#4116)
Mini-galleries are now easier to create in the documentation thanks to a custom Sphinx directive (
minigallery
). The page Differential rotation using coordinate frames has an example of a mini-gallery at the bottom. (#4124)Added
sunpy.visualization.colormaps.color_tables
to the docs. (#4182)Made minor improvements to the map histogramming example. (#4205)
Add a warning to
sunpy.io
docs to recommend not using it for FITS (#4208)
Trivial/Internal Changes#
Removed un-used and un-tested code paths in the private
_remove_lytaf_events
function insunpy.instr.lyra
. (#3570)Removed
astropy_helpers
and this means thatpython setup.py <test,build_docs>
no longer works. So if you want to:Run the tests: Use
tox -e <env name>
or callpytest
directlyBuild the docs: Use
tox -e docs
or cd into the docs folder and runmake html
orsphinx-build docs docs/_build/html -W -b html -d docs/_build/.doctrees
(#3598)
Cleaned up test warnings in sunpy.coordinates. (#3652)
Fix Python version for requiring importlib_resources (#3683)
sunpy.net.attr.AttrWalker
no longer usessunpy.util.multimethod.MultiMethod
it uses a derivative offunctools.singledispatch
sunpy.util.functools.seconddispatch
which dispatches on the second argument. (#3714)Errors from a VSO search will now be raised to the user. (#3719)
Fixed the transformation test for
NorthOffsetFrame
, which would intermittently fail. (#3775)earth_distance()
is now computed without using coordinate transformations for better performance. (#3782)Created a helper function for testing the equality/closeness of longitude angles (i.e., angles with wrapping). (#3804)
Bump the astropy version figure tests are run with from 3.1.2 to 3.2.3 (#3925)
Used
urllib.parse.urlsplit
insunpy.util.scraper
for file scraping functionalities. (#3956)Added
sunpy.net.base_client.BaseClient.check_attr_types_in_query
as a helper method to check if a query contains a set of required attributes, and is a subset of optional attributes. (#3979)Removes appending login details for ftp urls from scraper. (#4020)
Re-factored the
sunpy.map.Map
factory to dispatch argument parsing based on type. (#4037)Improved the error message raised by the Map factory when a map matches multiple source map types. (#4052)
Added log messages when the sample data fails to download. (#4137)
Remove an Astropy 3.1 compatibility wrapper for
Quantity.to_string
. (#4172)Refactor the sphinx config to no longer depend on astropy-sphinx and more closely match the new sunpy package template (#4188)
1.1.0 (2020-01-10)#
Backwards Incompatible Changes#
The
sunpy.net.vso.vso.get_online_vso_url
function has been broken into two components, the newsunpy.net.vso.vso.get_online_vso_url
function takes no arguments (it used to take three) and now only returns an online VSO mirror or None. The construction of azeep.Client
object is now handled bysunpy.net.vso.vso.build_client
which has a more flexible API for customising thezeep.Client
interface. (#3330)Importing
sunpy.timeseries.timeseriesbase
no longer automatically imports Matplotlib. (#3376)sunpy.timeseries.sources.NOAAIndicesTimeSeries.peek()
now checks that thetype
argument is a valid string, and raises aValueError
if it isn’t. (#3378)Observer-based coordinate frames (
Heliocentric
andHelioprojective
) no longer assume a default observer (Earth) if no observer is specified. These frames can now be used with no observer specified, but most transformations cannot be performed for such frames. This removal of a default observer only affectssunpy.coordinates
, and has no impact on the default observer insunpy.map
. (#3388)The callback functions provided to
BaseFuncAnimator
button_func
keyword argument now take two positional arguments rather than one. The function signature is now(animator, event)
where the first arg is the animator object, and the second is the matplotlib mouse event. (#3407)The colormap stored in SunPy’s Map subclasses (ie.
map.plot_settings['cmap']
) can now be colormap string instead of the fullmatplotlib.colors.Colormap
object. To get the fullColormap
object use the new attributemap.cmap
. (#3412)Fix a warning in
sunpy.map.GenericMap.rotate
where the truth value of an array was being calculated. This changes the behaviour ofrotate
when theangle=
parameter is not anQuantity
object to raiseTypeError
rather thanValueError
. (#3456)
Deprecations and Removals#
Removed the step of reparing images (replacing non-finite entries with local mean) before coaligning them. The user is expected to do this themselves before coaligning images. If NaNs/non-finite entries are present, a warning is thrown. The function
sunpy.image.coalignment.repair_image_nonfinite
is deprecated. (#3287)The method to convert a
Helioprojective
frame from 2D to 3D has been renamed fromcalculate_distance
tomake_3d
. This method is not typically directly called by users. (#3389)sunpy.visualization.animator.ImageAnimatorWCS
is now deprecated in favour ofArrayAnimatorWCS
. (#3407)sunpy.cm
has been moved tosunpy.visualization.colormaps
and will be removed in a future version. (#3410)
Features#
Add a new
sunpy.data.manager
andsunpy.data.cache
for dealing with versioned remote data within functions. Please see the Remote Data Manager guide. (#3124)Added the coordinate frames
HeliocentricEarthEcliptic
(HEE),GeocentricSolarEcliptic
(GSE),HeliocentricInertial
(HCI), andGeocentricEarthEquatorial
(GEI). (#3212)Added SunPy Map support for GOES SUVI images. (#3269)
Support APE14 for
ImageAnimatorWCS
in SunPy’s visualization module (#3275)
Add ability to disable progressbars when downloading files using
sunpy.net.helioviewer
and edited docstrings to mention this feature. (#3280)Adds support for searching and downloading SUVI data. (#3301)
Log all VSO XML requests and responses to the SunPy logger at the
DEBUG
level. (#3330)Transformations between frames in
sunpy.coordinates
can now provide detailed debugging output. Set thelogging
level toDEBUG
to enable this output. (#3339)Added the
sunpy.coordinates.sun.carrington_rotation_time
function to compute the time of a given Carrington rotation number. (#3360)A new method has been added to remove columns from a
sunpy.timeseries.GenericTimeSeries
. (#3361)Add
shape
property to TimeSeries. (#3380)Added ASDF schemas for the new coordinate frames (
GeocentricEarthEquatorial
,GeocentricSolarEcliptic
,HeliocentricEarthEcliptic
,HeliocentricInertial
). See the gallery for an example of usingasdf
to save and load a coordinate frame. (#3398)sunpy.visualization.animator.ArrayAnimatorWCS
was added which uses the WCS object to get the coordinates of all axes, including the slider labels. It also provides the ability to customise the plot by specifying arguments toWCSAxes
methods and supports animation of WCS aware line plots with Astroy 4.0. (#3407)The returned list of
Map
objects is now sorted by filename when passing a directory or glob pattern toMapFactory
. (#3408)Single character wildcards and character ranges can now be passed as glob patterns to
Map
. (#3408)Map
now accepts filenames and directories aspathlib.Path
objects. (#3408)GenericMap
objects now have a.cmap
attribute, which returns the fullColormap
. object. (#3412)sunpy.io.write_file()
now acceptsPath
objects as filename inputs. (#3469)sunpy.map.header_helper.make_fitswcs_header()
now accepts atuple
representing the shape of an array as well as the actual array as thedata
argument. (#3483)Made a couple of module imports lazy to reduce the import time of sunpy.map by ~40%. (#3495)
sunpy.map.GenericMap.wcs
now uses the full FITS header to construct the WCS. This adds support for instruments with more complex projections, such as WISPR, however does mean that Map will be more sensitive to incorrect or invalid FITS headers. If you are using custom headers with SunPy Map you might encounter issues relating to this change. (#3501)sunpy.visualization.animator.BaseFuncAnimator
now takes an optionalslider_labels
keyword argument which draws text labels in the center of the sliders. (#3504)Added a more helpful error message when trying to load a file or directory that doesn’t exist with
sunpy.map.Map
. (#3568)Add
__repr__
forMapSequence
objects so that users can view the critical information of all theMap
objects, in a concise manner. (#3636)
Bug Fixes#
Fixed accuracy issues with the calculations of Carrington longitude (
L0
) and Carrington rotation number (carrington_rotation_number
). (#3178)Updated
sunpy.map.header_helper.make_fitswcs_header()
to be more strict on the inputs it accepts. (#3183)Fix the calculation of
rsun_ref
inmake_fitswcs_header()
and and ensure that the default reference pixel is indexed from 1. (#3184)Fixed the missing transformation between two
HeliographicCarrington
frames with different observation times. (#3186)sunpy.map.sources.AIAMap
andsunpy.map.sources.HMIMap
will no longer assume the existence of certain header keys. (#3217)sunpy.map.header_helper.make_fitswcs_header()
now supports specifying the map projection rather than defaulting toTAN
. (#3218)Fix the behaviour of
sunpy.coordinates.frames.Helioprojective.calculate_distance
if the representation isn’t Spherical. (#3219)Fixed a bug where the longitude of a coordinate would not wrap at the expected angle following a frame transformation. (#3223)
Fixed a bug where passing a time or time interval to the differential rotation function threw an error because the new observer was not in HGS. (#3225)
Fixed bug where
get_horizons_coord
was unable to acceptTime
arrays as input. (#3227)Fix the ticks on the default heliographic grid overlay so they are not white (and normally invisible) by default. (#3235)
Fixed a bug with
sunpy.net.hek.HEKClient
when the results returned were a mixed dataset. (#3240)Fix
sunpy.physics.differential_rotation.differential_rotate
to rotate in the correct direction and to account for the rotation of the heliographic coordinate frame with time. (#3245)Fixed a bug with the handling of changing observation times for transformations between
HCRS
andHeliographicStonyhurst
, which also indirectly affected other transformations when changing observation times. (#3246)Fixed all coordinate transformations to properly handle a change in observation time. (#3247)
Fixed the handling of coordinates with velocity information when transforming between Astropy frames and SunPy frames. (#3247)
Fixed
sunpy.physics.solar_rotation.calculate_solar_rotate_shift
so that it does not calculate a shift between the reference layer and itself, which would sometimes incorrectly result in a shift of a pixel due to numerical precision. (#3255)Stop crash when
LineAnimator
axes_ranges
entry given as1D
array when data is>1D
, i.e. as an independent axis. (#3283)Fixed a
sunpy.coordinates
bug where a frame using the default observer of Earth could have its observer overwritten during a transformation. (#3291)Fixed a bug where the transformation from
Helioprojective
toHeliocentric
used the Sun-observer distance from the wrong frame when shifting the origin, and thus might not give the correct answer if the observer was not the same for the two frames. (#3291)Fixed a bug with the transformations between
Heliocentric
andHeliographicStonyhurst
when the frame observation time was not the same as the observer observation time. The most common way to encounter this bug was when transforming fromHelioprojective
to any non-observer-based frame while also changing the observation time. (#3291)VSO client
fetch
should not download whenwait
keyword argument is specified. (#3298)Fixed a bug with
solar_frame_to_wcs_mapping
that assumed that the supplied frame was a SunPy frame. (#3305)Fixed bugs with
solar_frame_to_wcs_mapping
if the input frame does not include an observation time or an observer. (#3305)GreatArc
now accounts for the start and end points of the arc having different observers. (#3334)Fixed situations where 2D coordinates provided to
HeliographicStonyhurst
andHeliographicCarrington
were not converted to 3D as intended. Furthermore, the stored data will always be the post-conversion, 3D version. (#3351)Fix off by one error in
sunpy.map.header_helper.make_fitswcs_header()
where when using the defaultreference_pixel=None
keyword argument the pixel coordinate of the reference pixel was off by +1. (#3356)Updated both GOES XRS and LYRA dataretriever clients to use
sunpy.util.scraper.Scraper
, to make sure that files are actually on the servers being queried. (#3367)Fixing the ordering of lon and lat inputs into make_fitswcs_header (#3371)
Updated the URL for Fermi spacecraft-pointing files to use an HTTPS connection to HEASARC. (#3381)
Fixed a bug where permission denied errors when downloading files are very verbose by adding an error message in
fetch
. (#3417)Fixed a malformed call to
astropy.time.Time
in a test, which resulted in an incorrect time scale (UTC instead of TT). (#3418)Fix incorrect files being included in the tarball, and docs missing from the tarball (#3423)
Fixed a bug where clipping behavior had been enabled by default in the plotting normalizers for
Map
objects. Clipping needs to be disabled to make use of the over/under/masked colors in the colormap. (#3427)Fix a bug with observer based frames that prevented a coordinate with an array of obstimes being transformed to other frames. (#3455)
sunpy.map.GenericMap
will no longer raise a warning if the position of the observer is not known for frames that don’t need an observer, i.e. heliographic frames. (#3462)Apply
os.path.expanduser
tosunpy.map.map_factory.MapFactory
input before passing toglob.glob
(#3477)Fix multiple instances of
sunpy.map
sources assuming the type of FITS Header values. (#3497)Fixed a bug with
NorthOffsetFrame
where non-spherical representations for the north pole produced an error. (#3517)Fixed
map.__repr__
when the coordinate system information contained in theCUNIT1/2
metadata is not set to a known value. (#3569)Fixed bugs with some coordinate transformations when
obstime
isNone
on the destination frame but can be assumed to be the same as theobstime
of the source frame. (#3576)Updated
sunpy.map.mapsequence.MapSequence
so that calling_derotate()
raisesNotImplementedError
. Added associated tests. (#3613)Fixed pandas plotting registration in
sunpy.timeseries
. (#3633)Correctly catch and emit a warning when converting a map metadata to a FITS header and it contains a keyword with non-ascii characters. (#3645)
Improved Documentation#
Clean up the docstring for
sunpy.physics.differential_rotation.solar_rotate_coordinate
to make the example clearer. (#2708)Added new gallery examples and cleaned up various gallery examples. (#3181)
Cleaned and expanded upon the docstrings for each Fido Client. (#3220)
Added clarifying hyperlinks to the gallery example
getting_lasco_observer_location
to link to astroquery docs page. (#3228)Added more details to docstrings in
sunpy.coordinates.frames
. (#3262)Added a link to package maintainer list in the API Stability page. (#3281)
Improved the contributing guide by updating commands and highlighting text. (#3394)
Removing
.fits
from the end of path kwargs insunpy.net.fido_factory.UnifiedDownloaderFactory.fetch
docs to change output file extension from{file}.fits.fits
to{file}.fits
. (#3399)A new example gallery section “Using SunPy with Other Packages” has been added, which contains a set of new examples using the reproject with solar data. (#3405)
Added a table of supported coordinate systems and other miscellaneous improvements to the coordinates documentation. (#3414)
Clarified the meaning of
sunpy.map.GenericMap.dsun
. (#3430)Fixed the plots with multiple subplots in the
Map
user guide to properly usewcsaxes
and to be appropriately sized. (#3454)Fixed various issues with the gallery example of saving/loading coordinates using
asdf
. (#3473)Added
sunpy.__citation__
with a BibTex entry for citing sunpy. (#3478)Added an example showing how to display two maps and fade between them. (#3488)
Clarified the meaning of some
GenericMap
observer properties. (#3585)Added inherited members of
sunpy.map
classes to the docs. (#3587)Fixed documentation of
sunpy.database.Database.search
by addingReturns
docstring. (#3593)Updated the docstring for the parameter
sortby
inMapSequence
with the default value, valid value and how to disable sorting. (#3601)Updated the tour guide to reflect that the time series is not random data. (#3603)
Fixes bold type and extra line breaks of remote data manager example. (#3615)
Trivial/Internal Changes#
Allow running our sphinx-gallery examples as Jupyter notebooks via Binder (#3256)
Improve error messages and type checking in
sunpy.visualization.animator.image.ImageAnimatorWCS
. (#3346)Copy the library
distro
intosunpy/extern
: replaces the deprecatedplatform/linux_distribution
(#3396)The version of Matplotlib used to generate figure tests has been bumped from 3.0.3 to 3.1.1. (#3406)
Corrected spelling of ‘plotting’ in timeseries method (changed ‘ploting’ to ‘plotting’). (#3429)
Switched to “importlib_metadata” to get package version to speed up import of SunPy. (#3449)
Fix tests for
sunpy.data.data_manager
and ensure they are correctly executed with pytest. (#3550)
1.0.0 (2019-06-01)#
Backwards Incompatible Changes#
Move the matplotlib animators from
sunpy.visualisation.imageanimator
andsunpy.visualization.mapcubeanimator
tosunpy.visualization.animator
. (#2515)Make
sunpy.time.parse_time
returnastropy.time.Time
instead ofdatetime.datetime
. (#2611)The properties and methods of
sunpy.time.TimeRange
returnsastropy.time.Time
andastropy.time.TimeDelta
instead ofdatetime.datetime
anddatetime.timedelta
respectively. (#2638)The
sunpy.instr.goes
module now accepts and returnssunpy.timeseries.sources.XRSTimeSeries
objects only. (#2666)obstime
keyword param ofsunpy.instr.goes._goes_lx
takes a non-scalarastropy.time.Time
object instead ofnumpy.ndarray
. The precision of times contained insunpy.timeseries
has been increased to 9 from 6. (#2676)Removed
sunpy.net.jsoc.attrs.Time
because it served the same purpose assunpy.net.attrs.Time
after the switch toastropy.time.Time
. (#2694)Remove unused
**kwargs
within TimeSeries functions. (#2717)Rotation matrices inside map objects were previously stored as numpy matrices, but are now stored as numpy arrays, as numpy will eventually remove their matrix datatype. See https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html for more information. (#2719)
The
sunpy.cm.show_colormaps
function now accepts the keyword ‘search’ instead of ‘filter’. (#2731)The keyword arguments to all client
.fetch
methods have been changed to support the new parfive downloader and to ensure consistency across all Fido clients. (#2797)The Helioviewer client has been switched to using the newer Helioviewer API. This has meant that we have changed some of the keywords that were passed into client’s methods. We have enforced that several keywords (observatory,instrument,detector,measurement) need to be defined otherwise the functions cannot return any data. (#2801)
Maps no longer assume that the pixel units are arcseconds if the units aren’t explicitly set. In addition to this if critical metadata is missing from when creating a map, the map will fail to initialize and will raise an error. (#2847)
axis_ranges kwarg of
sunpy.visualization.animator.base.ArrayAnimator
,sunpy.visualization.animator.image.ImageAnimator
andsunpy.visualization.animator.line.LineAnimator
now must be entered as None, [min, max] or pixel edges of each array element. Previously, pixel centers were expected. This change removes ambiguity in interpretation and ensures the extent of the plot can always be accurately derived. (#2867)All keywords have been added (with defaults) to each
HelioviewerClient
function. This means that there will be some changes to the style of the PNG screenshot that is returned. Returns for the JPEG 2000 and the other functions should be the same but not guaranteed. (#2883)Changed
sunpy.sun.models.interior
andsunpy.sun.models.evolution
frompandas.DataFrame
toastropy.table.QTable
(#2936)Minimum numpy version is now >=1.14.5 (#2954)
Removed
sunpy.time.julian_day
,sunpy.time.julian_centuries
,sunpy.time.day_of_year
,sunpy.time.break_time
,sunpy.time.get_day
. (#2999)Updated the solar values in
sunpy.sun.constants
to IAU 2015 values. (#3001)Renamed
eccentricity_sunearth_orbit
toeccentricity_sun_earth_orbit
. (#3001)Renamed
sunpy.image.rescale
tosunpy.image.resample
. (#3044)Remove the
basic_plot
keyword argument frompeek
. An example has been added to the gallery showing how to make a plot like this. (#3109)sunpy.map.GenericMap
will no longer use the keysolar_b0
as a value for heliographic latitude. (#3115)sunpy.map.GenericMap
now checks for a complete observer location rather than individually defaulting coordinates (lat, lon, distance) to Earth position. If any one of the three coordinates is missing from the header the observer will be defaulted to Earth and a warning raised. (#3115)sunpy.sun.sun
functions have been re-implemented using Astropy for significantly improved accuracy. Some functions have been removed. (#3137)All of the functions in
sunpy.sun.sun
and all of the Sun-specific functions insunpy.coordinates.ephemeris
have been moved to the new modulesunpy.coordinates.sun
. (#3163)
Deprecations and Removals#
The deprecated
sunpy.lightcurve
,sunpy.wcs
andsunpy.spectra
modules have now been removed. (#2666)sunpy.instr.rhessi.get_obssumm_dbase_file
sunpy.instr.rhessi.get_obssum_filename
,sunpy.instr.rhessi.get_obssumm_file
have been removed.Fido
should be used to download these files. (#2808)Removed
heliographic_solar_center
in favour ofsunpy.coordinates.get_sun_L0
andsunpy.coordinates.get_sun_B0
(#2830)Removed
GenericClient.query
in favour ofsunpy.net.dataretriever.GenericClient.search
(#2830)Removed
sunearth_distance
in favour ofget_sunearth_distance
(#2830)Removed
remove_lytaf_events_from_lightcurve
in favour ofsunpy.instr.lyra.remove_lytaf_events_from_timeseries
(#2830)Removed
sunpy.cm.get_cmap
in favour ofplt.get_cmap
(#2830)Removed
database.query
in favour ofsunpy.database.Database.search
(#2830)Removed
sunpy.net.vso.InteractiveVSOClient
(#2830)Removed
MapCube
in favour ofMapSequence
(#2830)Removed
solar_north
in favour ofget_sun_P
(#2830)Removed
database.download
in favour ofsunpy.database.Database.fetch
(#2830)Removed
sunpy.map.GenericMap.pixel_to_data
in favour ofsunpy.map.GenericMap.pixel_to_world
(#2830)Removed
GenericClient.get
in favour ofsunpy.net.dataretriever.GenericClient.fetch
. This changes applies to the other clients as well. (#2830)Removed
Map.xrange
andMap.yrange
(#2830)Removed
sunpy.net.attrs.Wave
in favour ofsunpy.net.vso.attrs.Wavelength
(#2830)Removed
JSOCClient.check_request
in favour ofdrms.client.ExportRequest.status
(#2830)sunpy.net.vso.VSOClient.query_legacy
andsunpy.net.vso.VSOClient.latest
have been deprecated as we strongly recommend people usesunpy.net.Fido
for all queries. (#2866)The deprecated
sunpy.physics.transforms
module has been removed, it is replaced bysunpy.physics.solar_rotation
andsunpy.physics.differential_rotation
. (#2994)Removed
sunpy.sun.sun.solar_cycle_number
because it was fundamentally flawed (#3150)
Features#
Change arguments to
sunpy.test
fromoffline=
andonline=
toonline
andonline_only
. This matches the behavior of the figure keyword arguments and comes as a part of a move to using a modified version of the Astropy test runner. (#1983)asdf schemas and tags were added for the SunPy coordinate frames and
GenericMap
allowing these objects to be saved to and restored from asdf files. (#2366)The images from image tests are now saved in a local folder for easy access. (#2507)
sunpy.map.MapCube
has been renamed tosunpy.map.MapSequence
to better reflect its use as a collection of map objects. (#2603)Net search attributes now support tab completion of values and display a table of possible values when printed, to allow easier discoverability of possible search values. (#2663)
Running the figure tests now creates a page showing the differences between the expected figures and the figures produced from running the tests. (#2681)
Add support for Dask arrays in
sunpy.map.Map
. The map factory now checks a whitelist of array types rather than strictly checking if the array is of typenumpy.ndarray
. (#2689)Persist the name of a coordinate, i.e. “earth” even though a concrete coordinate object has been calculated and use this string representation to change the way the sunpy frames are printed. This is primarily to facilitate displaying the name of the body rather than the concrete coordinate when printing a
SkyCoord
. (#2723)search
now returns anastropy.table.Table
instead of list of adict
. (#2759)Add a downscaled HMI image to the sample data. (#2782)
Now able to create a
sunpy.map.Map
using an array and aastropy.wcs.WCS
object. (#2793)The download manager for
Fido
has been replaced with parfive. This provides advanced progress bars, proper handling of overwriting and the ability to retry failed downloads. (#2797)sunpy.map.GenericMap
can now save out rice compressed FITS files. (#2826)Now any SunPyDeprecationWarnings will cause an error when using pytest. (#2830)
Added full Tox support for SunPy tests, documentation build and figure tests. (#2839)
Transition the
sunpy.net.vso.VSOClient
from using suds to zeep as the SOAP library. This is a more actively maintained library, and should provide better support for the VSOs https endpoints. This change should have no effect on the public API of thesunpy.net.vso.VSOClient
. (#2866)Provided access to the Helioviewer header information using
get_jp2_header
function. (#2904)Add a new WSDL URL and port to support SunPy use of VSO instance at SDAC. (#2912)
Add support for COSMO K-Coronograph (KCOR) FITS data. (#2916)
Add logger messaging system based on
AstropyLogger
, cleaned up all warnings, removed all print statements. (#2980)The function
sunpy.image.coalignment.get_correlation_shifts
now issues an error when the number of dimensions are not correct instead of a warning and returning None. (#2980)The default location of the sunpy sample data has changed to be in the platform specific data directory as provided by appdirs. (#2993)
Add timeseries support for EVE/ESP level 1 data in
sunpy.timeseries.sources
(#3032)The default style for Map plots have changed to reflect the changes in Astropy 3.2. (#3054)
sunpy.coordinates.ephemeris.get_body_heliographic_stonyhurst
can now account for light travel time when computing the (apparent) body position, as long as the observer location is provided. (#3055)Added a helper function (
sunpy.map.header_helper.make_fitswcs_header()
) that allows users to create a meta header for custom createdsunpy.map.GenericMap
. (#3083)Map plotting now accepts the optional keyword
clip_interval
for specifying a percentile interval for clipping. For example, if the interval (5%, 99%) is specified, the bounds of the z axis are chosen such that the lowest 5% of pixels and the highest 1% of pixels are excluded. (#3100)The new function
get_horizons_coord
enables querying JPL HORIZONS for the locations of a wide range of solar-system bodies, including spacecraft. (#3113)
Bug Fixes#
Fix the bug that prevented VSO queries for HMI data from downloading file without specifying
a.Physobs
. (#2621)Fix
sunpy.map.mapcube.MapCube.plot
. The code had not been updated to support the changes to the wcsaxes helper functions. (#2627)Replace all use of the deprecated
sunpy.cm.get_cmap
withmatplotlib.cm.get_cmap
to prevent deprecation warnings being raised. (#2635)Fix generation of the coordinate transformation graph with Astropy 3.1.dev (#2636)
Prevent helioviewer from erroring when downloading file to a directory that does not exist. It will now create the directory when required. (#2642)
Fix transformations into/out of Heliographic Stonyhurst frame when the coordinate representation is Cartesian. (#2646)
Running the figure tests with
setup.py test
now saves the figures and the hashes to the same directory as setup.py. (#2658)sunpy.instr.fermi.met_to_utc
now returns the correct utc time which takes into account the leap seconds that have passed. (#2679)Support passing Python file objects to
sunpy.io.fits.write
. (#2688)Added DRMS to setup.py so sunpy[all] installs it as a dependency. (#2693)
Fix eve 0cs timeseries separator regex to support Python 3.7 (#2697)
Fix the bug which crashes
LASCOMap
for when ‘date-obs’ is reformatted again from a self applied function. (#2700)Change all instances of quantity_allclose to
astropy.units.allclose
this prevents pytest being needed to importsunpy.coordinates
on Astropy 3 (#2701)Fix RHESSI obssum file downloading to include the final day in the time range. (#2714)
Raise an error when transforming between HPC and HCC frames if the observer is not the same. (#2725)
Replaces the existing LASCO C2 and C3 color maps with new ones that perform better with JP2 and Level 0.5, 1 data. (#2731)
Do not attempt to save a FITS header comment for a keyword which is not in the header. This prevents an error on saving some maps after the metadata had been modified but not the comments. (#2748)
Add support for
HMIMap
objects as input tosunpy.instr.aia.aiaprep
. (#2749)User can convert between HPC and HCC coordinates with different observers. This is implemented by automatically transforming the coordinate into HGS and then changing observer, and then transforming back to HCC. (#2754)
Changed default file type for Helioviewer to prevent decode errors. (#2771)
Increase figure size to avoid cutting off longer colormap names in
sunpy.cm.show_colormaps
. (#2824)The sample data directory will no longer be created until files are downloaded to it. (#2836)
Timeseries and lightcurve will now respect updated config values for download directory. (#2844)
Always use _default_wrap_angle rather than hard coding a wrap angle in the init of a sunpy coordinate frame (#2853)
Ensure imageanimators only slice arrays with integers (#2856)
Fixed
sunpy.io.fits.write
to handle the keywordCOMMENT
correctly. (#2880)If Carrington longitude (“crln_obs”) is found in the FITS header,
Map
converts this to the correct Heliographic longitude. (#2946)sunpy.net.helio.hec.HECClient.time_query
now resolves the correct input time format. (#2969)Fixes the calculation of the solar rotation of coordinates and the differential rotation of
sunpy.map.GenericMap
. (#2972)Added back the FERMI GBM client to
sunpy.net.dataretriever
. (#2983)Fix bug in
sunpy.net.hek
which raised and error if a search returned zero results, now returns an emptysunpy.net.hek.HEKTable
. (#3046)AIAMap
now uses the provided HAE coordinates instead of the provided HGS coordinates to determine the observer location. (#3056)Correctly zero pad milliseconds in the
sunpy.util.scraper.Scraper
formatting to prevent errors when the millisecond value was less than 100. (#3063)Fix
sunpy.util.scraper.Scraper
failing if a directory is not found on a remote server. (#3063)Correctly extract observer location from MDI and EIT data (#3067)
Fix HGS <> HCRS test due to Ecliptic frame changes in astropy 3.2 (#3075)
Fixes bug when creating a timeseries from a URL and bug when creating a TimeSeries from older GOES/XRS fits files. (#3081)
Added
rsun_obs
. It returns a quantity in arcsec consistent with othersunpy.map.GenericMap
and overwrites mapbase’s assumption of a photospheric limb as seen from Earth. (#3099)Fixed bugs related to using
plot
andpeek
with theinline
Matplotlib backend in Jupyter notebook. (#3103)Make a correction to
sunpy.coordinates.wcs_utils.solar_wcs_frame_mapping
so thatastropy.wcs.WCS
objects are correctly converted tosunpy.coordinates.frames
objects irrespective of the ordering of the axes. (#3116)The
solar_rotate_coordinate
function returns a coordinate that accounts for the location of the new observer. (#3123)Add support for rotation parameters to
sunpy.map.header_helper.make_fitswcs_header()
. (#3139)Improve the implementation of
differential_rotate
the image warping when transforming Maps for differential rotation and change in observer position. (#3149)Fix a bug where new helioviewer sources potentially cause
data_sources
to error. (#3162)
Improved Documentation#
Organise the gallery into sections based on example type and tidy up a little. (#2624)
Added gallery example showing the conversion of Helioprojective Coordinates to Altitude/Azimuth Coordinates to and back. (#2656)
Add contribution guidelines for the sunpy example gallery. (#2682)
Added a gallery example for “Downloading and plotting a HMI image” and “Creating a Composite map”. (#2746)
Added an example for
sunpy.visualization.animator.ImageAnimatorWCS
. (#2752)Minor changes to the developer guide regarding sprint labels. (#2765)
Copyedited and corrected the solar cycles example. (#2770)
Changed “online” mark to “remote_data” and made formatting of marks consistent. (#2799)
Add a missing plot to the end of the units and coordinates guide. (#2813)
Added gallery example showing how to access the SunPy colormaps (#2865)
Added gallery example showing how to access the SunPy solar physics constants. (#2882)
Major clean up of the developer documentation. (#2951)
Overhaul of the install instructions for the guide section of our documentation. (#3147)
Trivial/Internal Changes#
parse_time
now usessingledispatch
underneath. (#2408)Revert the handling of
quantity_allclose
now that astropy/astropy#7252 is merged. This also bumps the minimum astropy version to 3.0.2. (#2598)Replace the subclasses of matplotlib Slider and Button in
sunpy.visualization
with partial functions. (#2613)Sort the ana C source files before building to enable reproducible builds. (#2637)
We are now using towncrier to generate our changelogs. (#2644)
Moved figure tests to Python 3.6. (#2655)
Removed old metaclass used for Map and TimeSeries as we have now moved to Python 3.6. (#2655)
Updated astropy_helpers to v3.0.2. (#2655)
When running image tests, a comparison HTML page is now generated to show the generated images and expected images. (#2660)
Change to using pytest-cov for coverage report generation to enable support for parallel builds (#2667)
Use of
textwrap
to keep source code indented when multiline texts is used (#2671)Fix misspelling of private attribute
_default_heliographic_latitude
in map. (#2730)Miscellaneous fixes to developer docs about building sunpy’s documentation. (#2825)
Changed
sunpy.instr.aia.aiaprep
to update BITPIX keyword to reflect the float64 dtype. (#2831)Remove warning from
GenericMap.submap
when using pixelQuantities
as input. (#2833)Remove the usage of six and all
__future__
imports (#2837)Fix SunPy Coordinate tests with Astropy 3.1 (#2838)
Stores entries from directories into database sorted by name. It adds mocks to the database user guide examples. (#2873)
Fix all DeprecationWarning: invalid escape sequence. (#2885)
Used
unittest.mock
for creating offline tests for simulating online tests fortest_noaa.py
(#2900)Fix support for pip 19 and isolated builds (#2915)
Moved to using AppDirs as the place to host our configuration file. (#2922)
Users can now use fewer keywords in our
HelioviewerClient
to access the available sources. Either byobservatory
andmeasurement
orinstrument
andmeasurement
as this much information is enough to get the source ID for most of the cases. (#2926)Remove the pytest dependency on the
GenericMap
asdf tag. (#2943)Fix initialization of
VSOClient
when no WSDL link is found. (#2981)
0.9.0#
New Features#
Added TimeUTime class to support utime. [#2409]
Example for fine-grained use of ticks and grids [#2435]
Maintiners Workflow Guide [#2411]
Decorator to append and/or prepend doc strings [#2386]
Adding
python setup.py test --figure-only
[#2557]Fido.fetch now accepts pathlib.Path objects for path attribute.[#2559]
The
HeliographicStonyhurst
coordinate system can now be specified using a cartesian system, which is sometimes known as the “Heliocentric Earth equatorial” (HEEQ) coordinate system. [#2437]
API Changes#
sunpy.coordinates.representation
has been removed. Longitude wrapping is now done in the constructor of the frames. [#2431]Propagation of
obstime
in the coordinate frame transformation has changed, this means in general when transforming directly between frames (notSkyCoord
) you will have to specifyobstime
in more places. [#2461]Transforming between Heliographic Stonyhurst and Carrington now requires that
obstime
be defined and the same on both the input and output frames. [#2461]Removed the figure return from .peek() [#2487]
Bug Fixes#
Improve TimeSeriesBase docstring [#2399]
Validate that pytest-doctestplus is installed [#2388]
Fix use of self.wcs in plot in mapbase [#2398]
Updated docstring with pointer to access EVE data for other levels [#2402]
Fix broken links and redirections in documentation [#2403]
Fixes Documentation changes due to NumPy 1.14 [#2404]
Added docstrings to functions in download.py [#2415]
Clean up database doc [#2414]
rhessi.py now uses sunpy.io instead of astropy.io [#2416]
Remove Gamma usage in Map [#2424]
Changed requirements to python-dateutil [#2426]
Clarify coordinate system definitions [#2429]
Improve Map Peek when using draw_grid [#2442]
Add HCC –> HGS test [#2443]
Testing the transformation linking SunPy and Astropy against published values [#2454]
Fixed title bug in sunpy.timeseries.rhessi [#2477]
Allow LineAnimator to accept a varying x-axis [#2491]
Indexing Bug Fix to LineAnimator [#2560]
Output sphinx warnings to stdout [#2553]
Docstring improvement for LineAnimator [#2514]
move the egg_info builds to circleci [#2512]
Added tests for TraceMap [#2504]
Fix HGS frame constructor and HPC
calculate_distance
with SkyCoord constructor. [#2463]removed
wavelnth
keyword in meta desc of Maps to avoid using non standard FITS keyword likenan
[#2456]The documentation build now uses the Sphinx configuration from sphinx-astropy rather than from astropy-helpers.[#2494]
Migrate to hypothesis.strategies.datetimes [#2368]
Prevent a deprecation warning due to truth values of Quantity [#2358]
Print a warning when heliographic longitude is set to it’s default value of 0 [#2480]
parse_time now parses numpy.datetime64 correctly. [#2572]
0.8.5#
Bug Fixes#
Removed AstropyDeprecationWarning from sunpy.coordinates.representation [#2476]
Fix for NorthOffsetFrame under Astropy 3.0 [#2486]
Fix lightcurve tests under numpy dev [#2505]
Updated depecration link of radiospectra [#2481]
Fixed Padding values in some of the documentation pages [#2497]
Move documentation build to circleci [#2509]
Fix Issue #2470 hgs_to_hcc(heliogcoord, heliocframe) [#2502]
Fixing CompositeMap object so that it respects masked maps [#2492]
0.8.4#
Bug Fixes#
Improve detection of
SkyCoord
frame instantiation when distance is1*u.one
. This fixes a plotting bug withWCSAxes
in Astropy 3.0 [#2465]removed
wavelnth
keyword in meta desc of Maps to avoid using non standard FITS keyword likenan
[#2427]Change the default units for HPC distance from
u.km
toNone
. [#2465]
0.8.3#
Bug Fixes#
XRSClient
now reports time ranges of files correctly. [#2364]Make parse_time work with datetime64s and pandas series [#2370]
CompositeMap axes scaling now uses map spatial units [#2310]
Moved license file to root of repository and updated README file [#2326]
Fix docstring formatting for net.vso.attrs [#2309]]
Fix coloring of ticks under matplotlib 2.0 default style [#2320]
Always index arrays with tuples in
ImageAnimator
[#2320]Added links to possible attrs for FIDO in guide [#2317] [#2289]
Updated GitHub Readme [#2281] [#2283]
Fix matplotlib / pandas 0.21 bug in examples [#2336]
Fixes the off limb enhancement example [#2329]
Changes to masking hot pixels and picking bright pixels examples [#2325] [#2319]
Travis CI fix for numpy-dev build [#2340]
Updated masking brightest pixel example [#2338]
Changed TRAVIS cronjobs [#2338]
Support array values for
obstime
for coordinates and transformations [#2342] [#2346]Updated Gallery off limb enhance example [#2337]
Documentation fixes for VSO [#2354] [#2353]
All tests within the documentation have been fixed [#2343]
Change to using pytest-remotedata for our online tests [#2345]
Fixed upstream astropy/numpy documentation issues [#2359]
Documentation for Map improved [#2361]
Fix the output units of pixel_to_world [#2362]
Documentation for Database improved [#2355]
Added test for mapsave [#2365]
Documentation for Sun improved [#2369]
0.8.2#
Bug Fixes#
Shows a warning if observation time is missing [#2293]
Updates MapCube to access the correct properties of the namedtuple SpatialPair [#2297]
0.8.1#
Bug fixes#
Fixed TimeSeries test failures due to missing test files [#2273]
Refactored a GOES test to avoid a Py3.6 issue [#2276]
0.8.0#
New Features#
Solar differential rotation for maps and submaps included.
Solar rotation calculation and mapcube derotation now use sunpy coordinates.
Sample data now downloads automatically on import if not available and is now pluggable so can be used by affiliated packages. Shortcut names have been normalized and all LIGHTCURVE shortcuts have changed to TIMESERIES.
Calculation of points on an arc of a great circle connecting two points on the Sun.
Removed
extract_time
function fromsunpy.time
and also tests related to the function fromsunpy.time.tests
User can now pass a custom time format as an argument inside
sunpy.database.add_from_dir()
in case thedate-obs
metadata cannot be read automatically from the files.Add time format used by some SDO HMI FITS keywords
Now the
sunpy.database.tables.display_entries()
prints an astropy table.Additional methods added inside the
sunpy.database
class to make it easier to display the database contents.Remove unused
sunpy.visualization.plotting
modulePort the pyana wrapper to Python 3
Map.peek(basic_plot-True)
no longer issues warningsRemove the
sunpy.map.nddata_compat
module, this makesMap.data
andMap.meta
read only.Add a
NorthOffsetFrame
class for generating HGS-like coordinate systems with a shifted north pole.Remove deprecated
VSOClient.show
method.Deprecate
sunpy.wcs
:sunpy.coordinates
andsunpy.map
now provide all that functionality in a more robust manner.Added hdu index in
sunpy.database.tables.DatabaseEntry
as a column in the table.Removed
HelioviewerClient
from thesunpy.net
namespace. It should now be imported withfrom sunpy.net.helioviewer import HelioviewerClient
.Removed compatibility with standalone
wcsaxes
and instead depend on the version in astropy 1.3. SunPy now therefore depends on astropy>-1.3.Update to
TimeRange.__repr__
; now includes the qualified name andid
of the object.A new
sunpy.visualization.imageanimator.LineAnimator
class has been added to animate 1D data. This has resulted in API change for thesunpy.visualization.imageanimator.ImageAnimator
class. The updateimage method has been renamed to update_plot.Drop support for Python 3.4.
SunPy now requires WCSAxes and Map.draw_grid only works with WCSAxes.
Helioprojective
andHelioCentric
frames now have anobserver
attribute which itself is a coordinate object (SkyCoord
) instead ofB0
,L0
andD0
to describe the position of the observer.GenericMap.draw_grid
now usesWCSAxes
, it will only work on aWCSAxes
plot, this may be less performant than the previous implementation.GenericMap.world_to_pixel
andGenericMap.pixel_to_world
now accept and returnSkyCoord
objects only.GenericMap
has a new propertyobserver_coordinate
which returns aSkyCoord
describing the position of the observer.GenericMap.submap
now takes arguments of the formbottom_left
andtop_right
rather thanrange_a
andrange_b
. This change enables submap to properly handle rotated maps and take input in the form ofSkyCoord
objects.When referring to physical coordinates
Pair.x
has been replaced withSpatialPair.axis1
. This means values returned byGenericMap
now differentiate between physical and pixel coordinates.The physical radius of the Sun (length units) is now passed from Map into the coordinate frame so a consistent value is used when calculating distance to the solar surface in the
HelioprojectiveFrame
coordinate frame.A new
sunpy.visualization.imageanimator.ImageAnimatorWCS
class has been added to animate N-Dimensional data with the associated WCS object.Moved Docs to docs/ to follow the astropy style
Added SunPy specific warnings under util.
SunPy coordinate frames can now be transformed to and from Astropy coordinate frames
The time attribute for SunPy coordinate frames has been renamed from
dateobs
toobstime
Ephemeris calculations with higher accuracy are now available under
sunpy.coordinates.ephemeris
Add support for SunPy coordinates to specify observer as a string of a major solar-system body, with the default being Earth. To make transformations using an observer specified as a string,
obstime
must be set.Added VSO query result block level caching in the database module. This prevents re-downloading of files which have already been downloaded. Especially helpful in case of overlapping queries.
Change the default representation for the Heliographic Carrington frame so Longitude follows the convention of going from 0-360 degrees.
All Clients that are able to search and download data now have a uniform API that is
search
andfetch
. The older functions are still there but are deprecated for 0.8.
Bug fixes#
Add tests for RHESSI instrument
Maps from Helioviewer JPEG2000 files now have correct image scaling.
Get and set methods for composite maps now use Map plot_settings.
Simplified map names when plotting.
Fix bug in
wcs.convert_data_to_pixel
where crpix[1] was used for both axes.Fix some leftover instances of
GenericMap.units
Fixed bugs in
sun
equationssunpy.io.fits.read
will now return any parse-able HDUs even if some raise an error.VSOClient
no longer prints a lot of XML junk if the query fails.Fix Map parsing of some header values to allow valid float strings like ‘nan’ and ‘inf’.
Fix Map parsing of some header values to allow valid float strings like ‘nan’ and ‘inf’.
0.7.8#
The SunPy data directory “~/sunpy” is no longer created until it is used (issue #2018)
Change the default representation for the Heliographic Carrington frame so Longitude follows the convention of going from 0-360 degrees.
Fix for surface gravity unit.
Support for Pandas 0.20.1
0.7.7#
Fix errors with Numpy 1.12
0.7.6#
Add Astropy 1.3 Support
0.7.5#
Fix test failure (mapbase) with 1.7.4
Restrict supported Astropy version to 1.0<astropy<1.3
Add Figure test env to SunPy repo.
0.7.4#
Remove Map always forcing warnings on.
Map.center
now usesMap.wcs
to correctly handle rotation.Fix link in coordinates documentation.
Update helioviewer URL to HTTPS (fixes access to Helioviewer).
Fix processing of TRACE and YOHKOH measurement properties.
Remove warnings when using
Map.peek(basic_plot-True)
Update docstrings for HPC and HCC frames.
0.7.3#
Fix ConfigParser for Python 3.5.2 - This allows SunPy to run under Python 3.5.2
Fix incorrect ordering of keys in
MapMeta
Add
sunpy.util.scraper
to the API documentation.
0.7.2#
Fixed bugs in
sun
equations
0.7.1#
Fix bug in
wcs.convert_data_to_pixel
where crpix[1] was used for both axes.Fix some leftover instances of
GenericMap.units
Fixed bugs in
sun
equationsNow the
sunpy.database.tables.display_entries()
prints an astropy table.Additional methods added inside the
sunpy.database
class to make it easier to display the database contents.sunpy.io.fits.read
will now return any parse-able HDUs even if some raise an error.VSOClient
no longer prints a lot of XML junk if the query fails.Remove unused
sunpy.visualization.plotting
moduleMap.peek(basic_plot-True)
no longer issues warningsRemove the
sunpy.map.nddata_compat
module, this makesMap.data
andMap.meta
read only.Add a
NorthOffsetFrame
class for generating HGS-like coordinate systems with a shifted north pole.Remove deprecated
VSOClient.show
method.Deprecate
sunpy.wcs
:sunpy.coordinates
andsunpy.map
now provide all that functionality in a more robust manner.Added hdu index in
sunpy.database.tables.DatabaseEntry
as a column in the table.Removed
HelioviewerClient
from thesunpy.net
namespace. It should now be imported withfrom sunpy.net.helioviewer import HelioviewerClient
.Removed compatibility with standalone
wcsaxes
and instead depend on the version in astropy 1.3. SunPy now therefore depends on astropy>-1.3.Update to
TimeRange.__repr__
; now includes the qualified name andid
of the object.Change the default representation for the Heliographic Carrington frame so Longitude follows the convention of going from 0-360 degrees.
Fix Map parsing of some header values to allow valid float strings like ‘nan’ and ‘inf’.
0.7.0#
Fixed test failures with numpy developer version.[#1808]
Added
timeout
parameter insunpy.data.download_sample_data()
Fixed
aiaprep
to return properly sized map.Deprecation warnings fixed when using image coalignment.
Sunpy is now Python 3.x compatible (3.4 and 3.5).
Added a unit check and warnings for map metadata.
Added IRIS SJI color maps.
Updated
show_colormaps()
with new string filter to show a subset of color maps.Fixed MapCube animations by working around a bug in Astropy’s ImageNormalize
Remove
vso.QueryResponse.num_records()
in favour oflen(qr)
Add a
draw_rectangle
helper toGenericMap
which can plot rectangles in the native coordinate system of the map.Added the ability to shift maps to correct for incorrect map location, for example.
Bug fix for RHESSI summary light curve values.
Mapcube solar derotation and coalignment now pass keywords to the routine used to shift the images, scipy.ndimage.interpolation.shift.
Add automatic registration of
GenericMap
subclasses with the factory as long as they define anis_datasource_for
method.Added functions
flareclass_to_flux
andflux_to_flareclass
which convert between GOES flux to GOES class numbers (e.g. X12, M3.4).Removed old
sunpy.util.goes_flare_class()
Bug fix for RHESSI summary light curve values.
The
MapCube.as_array
function now returns a masked numpy array if at least one of the input maps in the MapCube has a mask.Map superpixel method now respects maps that have masks.
Map superpixel method now accepts numpy functions as an argument, or any user-defined function.
Map superpixel method no longer has the restriction that the number of original pixels in the x (or y) side of the superpixel exactly divides the number of original pixels in the x (or y) side of the original map data.
sunpy.physics.transforms
has been deprecated and the code moved intosunpy.physics
.Add the
sunpy.coordinates
module, this adds the core physical solar coordinates frame within the astropy coordinates framework.Added ability of maps to draw contours on top of themselves (
draw_contours
)Added concatenate functionality to lightcurve base class.
Fix Map to allow astropy.io.fits Header objects as valid input for meta arguments.
Added an examples gallery using
sphinx-gallery
.API clean up to constants. Removed constant() function which is now replaced by get().
Prevent helioviewer tests from checking access to the API endpoint when running tests offline.
GenericMap.units
is renamed toGenericMap.spatial_units
to avoid confusion withNDData.unit
.GenericMap
now has acoordinate_frame
property which returns anastropy.coordinates
frame with all the meta data from the map populated.GenericMap
now has a_mpl_axes
method which allows it to be specified as a projection tomatplotlib
methods and will return aWCSAxes
object withWCS
projection.
0.6.5#
The draw_grid keyword of the peek method of Map now accepts booleans or astropy quantities.
Fix bug in
wcs.convert_data_to_pixel
where crpix[1] was used for both axes.Fixed bugs in
sun
equations
0.6.4#
Bug fix for rhessi summary lightcurve values.
Fix docstring for
pixel_to_data
anddata_to_pixel
.Fix the URL for the Helioviewer API. (This fixes Helioviewer.)
Fix the way
reshape_image_to_4d_superpixel
checks the dimension of the new image.Fix Map to allow astropy.io.fits Header objects as valid input for meta arguments.
Prevent helioviewer tests from checking access to API when running tests in offline mode.
0.6.3#
Change setup.py extras to install suds-jurko not suds.
0.6.2#
Changed start of GOES 2 operational time range back to 1980-01-04 so data from 1980 can be read into GOESLightCurve object
Fix bug with numpy 1.10
update astropy_helpers
Added new sample data
0.6.1#
Fixed MapCube animations by working around a bug in Astropy’s ImageNormalize
Small fix to RTD builds for Affiliated packages
SunPy can now be installed without having to install Astropy first.
MapCubes processed with
coalignment.apply_shifts
now have correct metadata.Multiple fixes for WCS transformations, especially with solar-x, solar-y CTYPE headers.
0.6.0#
Enforced the use of Astropy Quantities through out most of SunPy.
Dropped Support for Python 2.6.
Remove old style string formatting and other 2.6 compatibility lines.
Added vso like querying feature to JSOC Client.
Refactor the JSOC client so that it follows the .query() .get() interface of VSOClient and UnifedDownloader.
Provide
__str__
and__repr__
methods on vsoQueryResponse
deprecate.show()
.Downloaded files now keep file extensions rather than replacing all periods with underscores.
Update to TimeRange API, removed t1 and t0, start and end are now read-only attributes.
Added ability to download level3 data for lyra Light Curve along with corresponding tests.
Added support for gzipped FITS files.
Add STEREO HI Map subclass and color maps.
Map.rotate() no longer crops any image data.
For accuracy, default Map.rotate() transformation is set to bi-quartic.
sunpy.image.transform.affine_transform
now casts integer data to float64 and sets NaN values to 0 for all transformations except scikit-image rotation with order <- 3.CD matrix now updated, if present, when Map pixel size is changed.
Removed now-redundant method for rotating IRIS maps since the functionality exists in Map.rotate()
Provide
__str__
and__repr__
methods on vsoQueryResponse
deprecate.show()
SunPy colormaps are now registered with matplotlib on import of
sunpy.cm
sunpy.cm.get_cmap
no longer defaults to ‘sdoaia94’Added database url config setting to be setup by default as a sqlite database in the sunpy working directory
Added a few tests for the sunpy.roi module
Added capability for figure-based tests
Removed now-redundant method for rotating IRIS maps since the functionality exists in Map.rotate().
SunPy colormaps are now registered with matplotlib on import of
sunpy.cm
.sunpy.cm.get_cmap
no longer defaults to ‘sdoaia94’.Added database url config setting to be setup by default as a sqlite database in the sunpy working directory.
Added a few tests for the sunpy.roi module.
Refactored mapcube co-alignment functionality.
Removed sample data from distribution and added ability to download sample files
Changed start of GOES 2 operational time range back to 1980-01-04 so data from 1980 can be read into GOESLightCurve object
Require JSOC request data calls have an email address attached.
Calculation of the solar rotation of a point on the Sun as seen from Earth, and its application to the de-rotation of mapcubes.
Downloaded files now keep file extensions rather than replacing all periods with underscores
Fixed the downloading of files with duplicate names in sunpy.database
Removed sample data from distribution and added ability to download sample files.
Added the calculation of the solar rotation of a point on the Sun as seen from Earth, and its application to the de-rotation of mapcubes.
Changed default for GOESLightCurve.create() so that it gets the data from the most recent existing GOES fits file.
Map plot functionality now uses the mask property if it is present, allowing the plotting of masked map data
Map Expects Quantities and returns quantities for most parameters.
Map now used Astropy.wcs for world <-> pixel conversions.
map.world_to_pixel now has a similar API to map.pixel_to_world.
map.shape has been replaced with map.dimensions, which is ordered x first.
map.rsun_arcseconds is now map.rsun_obs as it returns a quantity.
Map properties are now named tuples rather than dictionaries.
Improvement for Map plots, standardization and improved color tables, better access to plot variables through new plot_settings variable.
Huge improvements in Instrument Map doc strings. Now contain instrument descriptions as well as reference links for more info.
net.jsoc can query data series with time sampling by a Sample attribute implemented in vso.
MapCube.plot and MapCube.peek now support a user defined plot_function argument for customising the animation.
Added new sample data file, an AIA cutout file.
Moved documentation build directory to doc/build
0.5.5#
Changed default for GOESLightCurve.create() so that it gets the data from the most recent existing GOES fits file.
Improvements to the Map documentation.
Typo fixes in sunpy.wcs documentation.
0.5.4#
sunpy.image.transform.affine_transform
now casts integer data to float64 and sets NaN values to 0 for all transformations except scikit-image rotation with order <- 3.Updated SWPC/NOAA links due to their new website.
Exposed the raw AIA color tables in
sunpy.cm.color_tables
.Fixes
map
compatibility with Astropy 1.0.x.
0.5.3#
Goes peek() plot now works with matplotlib 1.4.x
The ANA file reading C extensions will no longer compile under windows. Windows was not a supported platform for these C extensions previously.
0.5.2#
If no CROTA keyword is specified in Map meta data, it will now default to 0 as specified by the FITS WCS standard.
Map now correctly parses and converts the CD matrix, as long as CDELT is specified as well. (Fixes SWAP files)
Fix of HELIO webservice URLs
MapCube.plot() is now fixed and returns a matplotlib.animation.FuncAnimation object.
0.5.1#
MAJOR FIX: map.rotate() now works correctly for all submaps and off center rotations.
HELIO URL updated, queries should now work as expected.
All tabs removed from the code base.
All tests now use tempfile rather than creating files in the current directory.
Documentation builds under newer sphinx versions.
ANA and JP2 tests are skipped if dependencies are missing.
ANA tests are skipped on windows.
0.5.0#
Added additional functionality to the GOES module i.e. the ability to calculate GOES temperature and emission measure from GOES fluxes.
changed _maps attribute in MapCube to a non-hidden type
Added Nobeyama Radioheliograph data support to Lightcurve object.
Fixed some tests on map method to support Windows
Added a window/split method to time range
Updates to spectrogram documentation
Added method Database.add_from_hek_query_result to HEK database
Added method Database.download_from_vso_query_result
GOES Lightcurve now makes use of a new source of GOES data, provides metadata, and data back to 1981.
Removed sqlalchemy as a requirement for SunPy
Added support for NOAA solar cycle prediction in lightcurves
Some basic tests for GenericLightCurve on types of expected input.
Fix algorithm in sunpy.sun.equation_of_center
Added Docstrings to LightCurve methods.
Added tests for classes in sunpy.map.sources. Note that some classes (TRACE, RHESSI) were left out because SunPy is not able to read their FITS files.
Added functions that implement image coalignment with support for MapCubes.
Cleaned up the sunpy namespace, removed .units, /ssw and .sphinx. Also moved .coords .physics.transforms.
Added contains functionality to TimeRange module
Added t-‘now’ to parse_time to provide utcnow datetime.
Fixed time dependent functions (.sun) to default to t-‘now’
Fixed solar_semidiameter_angular_size
Improved line quality and performances issues with map.draw_grid()
Remove deprecated make_map command.
0.4.2#
Fixes to the operational range of GOES satellites
Fix the URL for HELIO queries.
0.4.1#
Fix map.rotate() functionality
Change of source for GOES data.
Fix EIT test data and sunpy FITS saving
Some documentation fixes
fix file paths to use os.path.join for platform independence.
0.4.0#
Major documentation refactor. A far reaching re-write and restructure.
Add a SunPy Database to store and search local data.
Add beta support for querying the HELIO HEC
Add beta HEK to VSO query translation.
Add the ability to download the GOES event list.
Add support for downloading and querying the LYTAF database.
Add support for ANA data.
Updated sun.constants to use astropy.constants objects which include units, source, and error instide. For more info check out https://docs.astropy.org/en/latest/constants/index.html
Add some beta support for IRIS data products
Add a new MapCubeAnimator class with interactive widgets which is returned by mapcube.peek().
The Glymur library is now used to read JPEG2000 files.
GOESLightCurve now supports all satellites.
Add support for VSO queries through proxies.
Fix apparent Right Ascension calculations.
LightCurve meta data member now an OrderedDict Instance
0.3.2#
Pass draw_limb arguments to patches.Circle
Pass graw_grid arguments to pyplot.plot()
Fix README code example
Fix Documentation links in potting guide
Update to new EVE data URL
Update LogicalLightcurve example in docs
Improved InteractiveVSOClient documentation
GOESLightCurve now fails politely if no data is available.
Known Bugs:
sunpy.util.unit_conversion.to_angstrom does not work if ‘nm’ is passed in.
0.3.1#
Bug Fix: Fix a regression in CompositeMap that made contor plots fail.
Bug Fix: Allow Map() to accept dict as metadata.
Bug Fix: Pass arguments from Map() to io.read_file.
0.3.0#
Removal of Optional PIL dependency
Parse_time now looks through nested lists/tuples
Draw_limb and draw_grid are now implemented on MapCube and CompositeMap
Calculations for differential rotation added
mapcube.plot() now runs a mpl animation with optional controls
A basic Region of Interest framework now exists under sunpy.roi
STEREO COR colour maps have been ported from solarsoft.
sunpy.time.timerange has a split() method that divides up a time range into n equal parts.
Added download progress bar
pyfits is deprecated in favor of Astropy
spectra:
Plotting has been refactorted to use a consistent interface
spectra now no-longer inherits from numpy.ndarray instead has a .data attribute.
Map: * map now no-longer inherits from numpy.ndarray instead has a .data attribute. * make_map is deprecated in favor of Map which is a new factory class * sunpy.map.Map is now sunpy.map.GenericMap * mymap.header is now mymap.meta * attributes of the map class are now read only, changes have to be made through map.meta * new MapMeta class to replace MapHeader, MapMeta is not returned by sunpy.io * The groundwork for GenericMap inheriting from astropy.NDData has been done, there is now a NDDataStandin class to provide basic functionality.
io: * top level file_tools improved to be more flexible and support multiple HDUs * all functions in sunpy.io now assume multiple HDUs, even JP2 ones. * there is now a way to override the automatic filetype detection * Automatic fits file detection improved * extract_waveunit added to io.fits for detection of common ways of storing wavelength unit in fits files.
A major re-work of all internal imports has resulted in a much cleaner namespace, i.e. sunpy.util.util is no longer used to import util.
Some SOHO and STEREO files were not reading properly due to a date_obs parameter.
Sunpy will now read JP2 files without a comment parameter.
Memory leak in Crotate patched
Callisto: Max gap between files removed
0.2.0#
Completely re-written plotting routines for most of the core datatypes.
JPEG 2000 support as an input file type.
Improved documentation for much of the code base, including re-written installation instructions.
New lightcurve object
LYRA support
GOES/XRS support
SDO/EVE support
New Spectrum and Spectrogram object (in development)
Spectrogram plotting routines
Callisto spectrum type and support
STEREO/SWAVES support
Map Object
Added support for LASCO, Yohkoh/XRT maps
A new CompositeMap object for overlaying maps
Resample method
Superpixel method
The addition of the rotate() method for 2D maps.