Full Changelog

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 with observer='self' now raises an error upon creation. When specifying observer='self', the radius 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 manager transform_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 a Helioprojective coordinate to a HeliographicStonyhurst frame. (#5395)

  • Fixed a bug where creating a HeliographicStonyhurst frame or a HeliographicCarrington frame from WCS information failed to make use of any specified rsun_ref value. (#5395)

  • SXTMap now always returns None for the wavelength attribute. Previously this raised an error. (#5401)

Added/Improved Documentation

  • Simplified the “Downloading LASCO C2” gallery example by removing redundant modifications to the metadata before it is loaded by Map. (#5402)

  • Tided up the HMI synoptic map example by removing redundant code and correcting some of the comments. (#5413)

3.0.0 (2021-05-14)

Backwards Incompatible Changes

Deprecations and Removals

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 to carrington_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 sunpy.visualisation.animator.BaseFuncAnimator.get_animation() is now BaseFuncAnimator.axes, instead of the currently active axes (accessed via. matplotlib.pyplot.gca()). The allows animations to be created on figures created directly using matplotlib.figure.Figure.

    To revert to the previous behaviour of using the current axes, give axes=plt.gca() to get_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 the clip_interval keyword, it will now clip the minimum and maximum at each slider step to the specified interval. (#5025)

  • Added a contains() method to sunpy.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() via rot_type=rigid, where the rotation rate does not vary with latitude. (#5132)

  • Added a save() method to sunpy.map.MapSequence that saves each map of the sequence. (#5145)

  • The allowable level inputs to sunpy.map.GenericMap.contour() and sunpy.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 and HeliographicCarrington now have an rsun frame attribute to specify the radius of the Sun, which defaults to the photospheric radius defined in sunpy.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 to rsun (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 the original_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 to sunpy.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., 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 from collections.abc.Mapping. This fixes a regression where headers read with astropy.io.fits raised an error when passed to individual map sources. (#5047)

  • Added warning to sunpy.map.GenericMap.rotate() when specified missing 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 an observer=None error. (#5084)

  • Fixed bug where sunpy.data.data_manager.storage.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 the rsun_ref keyword if it is present and does not emit any warning. (#5172)

  • Added a “rsun_obs” keyword to the output of sunpy.map.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 in sunpy.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, the psi 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 to HMIMap, 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 a HeliographicCarrington frame with observer='self' is passed. (#5264)

  • Calling sunpy.map.make_fitswcs_header() with a HeliographicCarrington coordinate that with observer='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 and offset arguments to sunpy.map.GenericMap.superpixel() in units other than u.pix (e.g. `u.kpix) are now handled correctly. (#5301)

  • Fractional inputs to the dimensions and offset arguments to sunpy.map.GenericMap.superpixel() were previously rounded using int() in the superpixel algorithm, but not assigned integer values in the new meatadata. This has now been changed so the rounding is correctly reflected in the meatadata. (#5301)

  • Remove runtime use of astropy.tests.helper.assert_quantity_allclose which introduces a runtime dependancy on pytest. (#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

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 match sunpy.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 and sunpy.map.MapSequence.plot(). (#5125)

  • The CROTA keywords are no longer set on sunpy.map.GenericMap.wcs, as the PC_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 accepts obstime and rsun optional arguments. This function is not typically called directly by users. (#5211)

  • GenericMap plotting methods now have consistent argument checking for the axes argument, and will raise the same warnings or errors for similar axes input. (#5223)

  • Calling sunpy.map.GenericMap.plot() on a WCSAxes 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 an Axes 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 from Angle to Latitude. (#4323)

  • An error is now raised if vmin or vmax are passed to to sunpy.map.GenericMap.plot and they are already set on the map norm. This is consistent with upcoming Matplotlib changes. (#4328)

  • Previously slicing the result of Fido.search() (a UnifiedResponse object) so that it had a length of one returned another UnifiedResponse object. Now it will return a QueryResponseTable object, which is a subclass of astropy.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 the WCS returned by sunpy.map.GenericMap.wcs. (#4620)

  • Due to upstream changes, the parsing logic for the HECClient now returns strings and not bytes for get_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 with pip install sunpy. You can install all dependencies by specifying pip 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 some isinstance()/issubclass() calls will be different, but the API for RotatedSunFrame 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 that submap 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 return None 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() (a UnifiedResponse object) are now QueryResponseTable objects (or subclasses thereof). These objects are subclasses of astropy.table.Table and can therefore be filtered and inspected as tabular objects, and the modified tables can be passed to Fido.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 the NOAAPredictClient no longer has Start Time or End Time in their results table as the results returned from the client are not dependant 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, the HEKTable class now uses the standard astropy.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 the dataretriever clients the only main change is that the keys are now lower case, where they were capitilized before. You can use the 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, use time_out = time_out.tt on the outputted time. (#4819)

  • response_block_properties has been renamed to path_format_keys, on the return objects from all search() methods on all clients and from Fido.search(). (#4798)

Removals

Deprecations

Features

  • For sunpy.map.GenericMap.quicklook() and sunpy.map.MapSequence.quicklook() (also used for the HTML reprsentation 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 interpret Helioprojective 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(), and get_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. Calling del on a MetaDict object key is now case-insensitive. (#4129)

  • Allow sunpy.visualization.animator.ArrayAnimatorWCS to disable ticks for a coordinate, by setting ticks: False in the coord_params dictionary. (#4270)

  • Added a show() method for BaseQueryResponse which returns Table with specified columns for the Query Response. (#4309)

  • Added _extract_files_meta method in 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 to QueryResponse:

    • Any attr shall not be defaulted to a hard-coded value in all subclasses of GenericClient; thus records for all possible attrs 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-spported attrs shall not be shown in the response tables. (#4321)

  • New class attributes added to GenericClient:

    • baseurl and pattern which are required to define a new simple client.

    • optional and required which are a set of optional and required attrs respectively; which generalizes _can_handle_query(). (#4321)

  • Additions in scraper to support the refactoring of GenericClient: - sunpy.util.scraper.Scraper.findDatewith_extractor that parses the url using extractor to return its start time. - A matcher in _extract_files_meta() which validates the extracted metadata by using the dictionary returned from _get_match_dict(). (#4321)

  • Added methods pre_search_hook() and post_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 and HEKClient now inherit BaseClient which makes them compatible with the UnifiedDownloaderFactory (Fido). (#4358)

  • MaxRecords and TableName 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 get_timerange_from_exdict() which finds time range for a URL using its metadata. Added sunpy.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 to None. (#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() and concatenate() 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 to sunpy.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 via JSOCClient and Fido. (#4595)

  • sunpy now sets auxillary parameters on sunpy.map.GenericMap.wcs using the astropy.wcs.Wcsprm.aux attribute. This stores observer information, along with the reference solar radius if present. (#4620)

  • The HeliographicCarrington frame now accepts the specification of observer='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 and std_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 a GenericMap. (#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 draw_rectangle() when the rectangle is specified in a different coordinate frame than that of the map. A couple of other minor bugs in 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() and solar_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 of None and SkyCoord was not being used. Users are recommended to use SkyCoord 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 and NOAAPredictClient 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 for NOAAIndicesClient now do not have the following columns: - Geomagnetic Observed and Smoothed - Sunspot Numbers Ratio (RI/SW)

    Both sunpy.timeseries.sources.NOAAIndicesTimeSeries and sunpy.timeseries.sources.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 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 if

    rsun_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 a Timestamp. (#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 to numpy.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 to skimage.transform.warp() and later rescale them back. (#4477)

  • Several warnings.simplefilter('always', Warning) warning filters in sunpy.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 expected Helioprojective frame. (#4552)

  • Fixes a bug which occurs in setting the ylims by sunpy.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 to Fido.fetch() is now correctly respected by the JSOC client. Previously the JSOC client would default to 4 connections no matter what the value passed to Fido.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 wsdl_retriever(), which previously ignored discovered Taverna links. (#4601)

  • The transformations between HCRS and HeliographicStonyhurst 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 when include_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 call pixel_to_world, such as bottom_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 2D Helioprojective 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 correcly counts all results in it’s file_num property. Note that because some Fido 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 to CROTAn standard. (#4846)

Added/Improved Documentation

Documentation Fixes

Trivial/Internal Changes

  • Fido.fetch now always specifies a path= argument of type pathlib.Path to the fetch 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-friendly ValueError which prints all the non-compliant keys. (#4476)

  • Maps created directly via. sunpy.map.GenericMap now have their metadata automatically converted to a MetaDict, which is the same current behaviour of the sunpy.map.Map factory. (#4476)

  • If the top_right corner given to sunpy.map.GenericMap.submap() is below or to the right of the bottom_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 the GeocentricTrueEcliptic 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 the Time 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 with hypothesis 6.0.0. (#4852)

2.0.0 (2020-06-12)

Backwards Incompatible Changes

  • The frames HeliographicStonyhurst and HeliographicCarrington now inherit from the new base class BaseHeliographic. This changes means that isinstance(frame, HeliographicStonyhurst) is no longer True when frame is HeliographicCarrington. (#3595)

  • aia_color_table, eit_color_table and suvi_color_table now only take astropy.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 pass silence_errors=True to sunpy.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. For RHESSIClient you can now specify a.Physobs("summary_lightcurve") to only include the summary lightcurve data products not provided by the VSO. (#3770)

  • The objects returned by the search methods on VSOClient, JSOCClient and GenericClient have been changed to be based on sunpy.net.base_client.BaseQueryResponse. This introduces a few subtle breaking changes for people using the client search methods directly (not Fido.search), or people using sunpy.net.fido_factory.UnifiedResponse.get_response. When slicing an instance of QueryResponse 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 of ConvertError when the transformation could not be performed. (#3894)

  • Astropy 3.2 is now the minimum required version of that dependency. (#3936)

Deprecations and Removals

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 for UnifiedResponse, which allows to access the BaseQueryResponse as an Table, which then can be used for indexing of results. (#3675)

  • Change the APIs for sunpy.map.GenericMap.draw_rectangle() and sunpy.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 from HEK query (#3731)

  • Added a helper function (get_rectangle_coordinates) for defining a rectangle in longitude and latitude coordinates. (#3737)

  • Add a .data property in GenericTimeSeries, so that users are encouraged to use to_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 with sunpy.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() and sunpy.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 in Scraper to scrap local data archives. (#3994)

  • Added extra constants to sunpy.sun.constants:

  • Adds to Scraper the ability to include regular expressions in the URL passed. (#4107)

Bug Fixes

  • Added support for passing TimeSeriesMetaData object to timeseries_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 without a.Time being specified. This is currently only used by the sunpy.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 and HeliographicCarrington. (#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 in sunpy.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 as imshow_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)

  • HEKClient was returning HTML and not JSON. (#3899)

  • 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 with file://. (#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, a pending keyword argument is provided to denote functions/classes that are pending deprecation. (#3982)

  • Correctly generate labels for sliders in 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 conjuction with enabling the light-travel-time correction. (#4112)

  • sunpy.map.GenericMap.top_right_coord and center 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 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 for submap 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.make_fitswcs_header. (#4152)

  • sunpy.map.GenericMap.reference_pixel now uses zero-based indexing, in order to be consistent with the rest of the sunpy.map API. (#4154)

  • Previously sunpy.map.GenericMap.resample with method='linear' was using an incorrect and constant value to fill edges when upsampling a map. Values near the edges are now correctly extrapolated using the fill_value=extrapolate option to scipy.interpolate.interp1d. (#4164)

  • Fixed a bug where passing an int or list via the hdus keyword argument to read threw an exception because the list of HDU objects was no longer of type HDUList. (#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 a SkyCoord 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 improvments 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 in sunpy.instr.lyra. (#3570)

  • Removed astropy_helpers and this means that python setup.py <test,build_docs> no longer works. So if you want to:

    • Run the tests: Use tox -e <env name> or call pytest directly

    • Build the docs: Use tox -e docs or cd into the docs folder and run make html or sphinx-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 uses sunpy.util.multimethod.MultiMethod it uses a derivative of functools.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 in 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 comptibility 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 new sunpy.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 a zeep.Client object is now handled by sunpy.net.vso.vso.build_client which has a more flexible API for customising the zeep.Client interface. (#3330)

  • Importing sunpy.timeseries.timeseriesbase no longer automatically imports Matplotlib. (#3376)

  • sunpy.timeseries.sources.NOAAIndicesTimeSeries.peek() now checks that the type argument is a valid string, and raises a ValueError if it isn’t. (#3378)

  • Observer-based coordinate frames (Heliocentric and Helioprojective) 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 affects sunpy.coordinates, and has no impact on the default observer in sunpy.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 full matplotlib.colors.Colormap object. To get the full Colormap object use the new attribute map.cmap. (#3412)

  • Fix a warning in sunpy.map.GenericMap.rotate where the truth value of an array was being calculated. This changes the behaviour of rotate when the angle= parameter is not an Quantity object to raise TypeError rather than ValueError. (#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 from calculate_distance to make_3d. This method is not typically directly called by users. (#3389)

  • sunpy.visualization.animator.ImageAnimatorWCS is now deprecated in favour of ArrayAnimatorWCS. (#3407)

  • sunpy.cm has been moved to sunpy.visualization.colormaps and will be removed in a future version. (#3410)

Features

Bug Fixes

  • Fixed accuracy issues with the calculations of Carrington longitude (L0) and Carrington rotation number (carrington_rotation_number). (#3178)

  • Updated sunpy.map.make_fitswcs_header to be more strict on the inputs it accepts. (#3183)

  • Fix the calculation of rsun_ref in make_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 and sunpy.map.sources.HMIMap will no longer assume the existance of certain header keys. (#3217)

  • sunpy.map.make_fitswcs_header now supports specifying the map projection rather than defaulting to TAN. (#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 accept Time 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 and HeliographicStonyhurst, 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 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 as 1D 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 to Heliocentric 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 and HeliographicStonyhurst 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 from Helioprojective to any non-observer-based frame while also changing the observation time. (#3291)

  • VSO client fetch should not download when wait 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 and HeliographicCarrington 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.make_fitswcs_header where when using the default reference_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 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 posisition of the observer is not known for frames that don’t need an observer, i.e. heliographic frames. (#3462)

  • Apply os.path.expanduser to sunpy.map.map_factory.MapFactory input before passing to glob.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 the CUNIT1/2 metadata is not set to a known value. (#3569)

  • Fixed bugs with some coordinate transformations when obstime is None on the destination frame but can be assumed to be the same as the obstime of the source frame. (#3576)

  • Updated sunpy.map.mapsequence.MapSequence so that calling _derotate() raises NotImplementedError. 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 in sunpy.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 use wcsaxes 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 adding Returns docstring. (#3593)

  • Updated the docstring for the parameter sortby in MapSequence 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 into sunpy/extern: replaces the deprecated platform/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

Deprecations and Removals

Features

  • Change arguments to sunpy.test from offline= and online= to online and online_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 to sunpy.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 type numpy.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 an astropy.table.Table instead of list of a dict. (#2759)

  • Add a downscaled HMI image to the sample data. (#2782)

  • Now able to create a sunpy.map.Map using an array and a astropy.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 the sunpy.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.make_fitswcs_header) that allows users to create a meta header for custom created sunpy.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 with matplotlib.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 seperator regex to support Python 3.7 (#2697)

  • Fix the bug which crashes LASCOMap for when ‘date-obs’ is reformatted agian from a self applied function. (#2700)

  • Change all instances of quantity_allclose to astropy.units.allclose this prevents pytest being needed to import sunpy.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 to sunpy.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 keyword COMMENT 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.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 empty sunpy.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 other sunpy.map.GenericMap and overwrites mapbase’s assumption of a photospheric limb as seen from Earth. (#3099)

  • Fixed bugs related to using plot and peek with the inline Matplotlib backend in Jupyter notebook. (#3103)

  • Make a correction to sunpy.coordinates.wcs_utils.solar_wcs_frame_mapping so that astropy.wcs.WCS objects are correctly converted to sunpy.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.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 intructions for the guide section of our documentation. (#3147)

Trivial/Internal Changes

  • parse_time now uses singledispatch 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 mispelling 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 pixel Quantities 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 for test_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 by observatory and measurement or instrument and measurement 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 (not SkyCoord) you will have to specify obstime 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 dowload.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 like nan [#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 is 1*u.one. This fixes a plotting bug with WCSAxes in Astropy 3.0 [#2465]

  • removed wavelnth keyword in meta desc of Maps to avoid using non standard FITS keyword like nan [#2427]

  • Change the default units for HPC distance from u.km to None. [#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 from sunpy.time and also tests related to the function from sunpy.time.tests

  • User can now pass a custom time format as an argument inside sunpy.database.add_from_dir() in case the date-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 module

  • Port the pyana wrapper to Python 3

  • Map.peek(basic_plot-True) no longer issues warnings

  • Remove the sunpy.map.nddata_compat module, this makes Map.data and Map.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 and sunpy.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 the sunpy.net namespace. It should now be imported with from 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 and id of the object.

  • A new sunpy.visualization.imageanimator.LineAnimator class has been added to animate 1D data. This has resulted in API change for the sunpy.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 and HelioCentric frames now have an observer attribute which itself is a coordinate object (SkyCoord) instead of B0, L0 and D0 to describe the position of the observer.

  • GenericMap.draw_grid now uses WCSAxes, it will only work on a WCSAxes plot, this may be less performant than the previous implementation.

  • GenericMap.world_to_pixel and GenericMap.pixel_to_world now accept and return SkyCoord objects only.

  • GenericMap has a new property observer_coordinate which returns a SkyCoord describing the position of the observer.

  • GenericMap.submap now takes arguments of the form bottom_left and top_right rather than range_a and range_b. This change enables submap to properly handle rotated maps and take input in the form of SkyCoord objects.

  • When referring to physical coordinates Pair.x has been replaced with SpatialPair.axis1. This means values returned by GenericMap 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 to obstime

  • 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 and fetch. 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 equations

  • 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.

  • 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 faliure (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 uses Map.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 equations

  • 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.

  • 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 module

  • Map.peek(basic_plot-True) no longer issues warnings

  • Remove the sunpy.map.nddata_compat module, this makes Map.data and Map.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 and sunpy.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 the sunpy.net namespace. It should now be imported with from 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 and id 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 in sunpy.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 of len(qr)

  • Add a draw_rectangle helper to GenericMap 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 an is_datasource_for method.

  • Added functions flareclass_to_flux and flux_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 into sunpy.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 to GenericMap.spatial_units to avoid confusion with NDData.unit.

  • GenericMap now has a coordinate_frame property which returns an astropy.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 to matplotlib methods and will return a WCSAxes object with WCS 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 and data_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 vso QueryResponse 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 vso QueryResponse 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, querys 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 privide utcnow datetime.

  • Fixed time dependant 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 independance.

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 calulations.

  • 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 avalible.

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

  • Caculations for differential roation 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 depricated 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 inherting 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 mutliple 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 interal 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.