Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-sunpy for openSUSE:Factory checked in at 2026-04-18 21:34:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-sunpy (Old) and /work/SRC/openSUSE:Factory/.python-sunpy.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sunpy" Sat Apr 18 21:34:15 2026 rev:40 rq:1344698 version:7.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-sunpy/python-sunpy.changes 2026-01-02 14:31:06.814879564 +0100 +++ /work/SRC/openSUSE:Factory/.python-sunpy.new.11940/python-sunpy.changes 2026-04-18 21:34:29.696966313 +0200 @@ -1,0 +2,11 @@ +Sun Mar 29 19:03:56 UTC 2026 - Dirk Müller <[email protected]> + +- update to 7.1.1: + * Fix ~`sunpy.net.scraper.Scraper` to correctly handle proper + local file URI on Windows and make internal code more + consistent. + * Fixed a bug in sunpy.coordinates.spice when converting times + to the time scale/format used by SPICE, which resulted in a + time inaccuracy of up to 1.6 ms. + +------------------------------------------------------------------- Old: ---- sunpy-7.1.0.tar.gz New: ---- sunpy-7.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-sunpy.spec ++++++ --- /var/tmp/diff_new_pack.WmZ0CY/_old 2026-04-18 21:34:30.476998103 +0200 +++ /var/tmp/diff_new_pack.WmZ0CY/_new 2026-04-18 21:34:30.476998103 +0200 @@ -19,7 +19,7 @@ %{?sle15_python_module_pythons} %define skip_python311 1 Name: python-sunpy -Version: 7.1.0 +Version: 7.1.1 Release: 0 Summary: SunPy core package: Python for Solar Physics License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT ++++++ sunpy-7.1.0.tar.gz -> sunpy-7.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/.cruft.json new/sunpy-7.1.1/.cruft.json --- old/sunpy-7.1.0/.cruft.json 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/.cruft.json 2026-03-26 10:58:57.000000000 +0100 @@ -1,6 +1,6 @@ { "template": "https://github.com/sunpy/package-template", - "commit": "bea8060eef60df35f7df61d9db1d56b838bda01a", + "commit": "93c8bc491584f214226a039a35d0cbebe305cd31", "checkout": null, "context": { "cookiecutter": { @@ -23,6 +23,7 @@ "include_example_code": "n", "include_cruft_update_github_workflow": "y", "use_extended_ruff_linting": "n", + "matrix_room_id": "!JYqfIVJjWANcHnfktY:cadair.com", "_sphinx_theme": "sunpy", "_parent_project": "", "_install_requires": "", @@ -32,7 +33,7 @@ ".github/workflows/sub_package_update.yml" ], "_template": "https://github.com/sunpy/package-template", - "_commit": "bea8060eef60df35f7df61d9db1d56b838bda01a" + "_commit": "93c8bc491584f214226a039a35d0cbebe305cd31" } }, "directory": null diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/CHANGELOG.rst new/sunpy-7.1.1/CHANGELOG.rst --- old/sunpy-7.1.0/CHANGELOG.rst 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/CHANGELOG.rst 2026-03-26 10:58:57.000000000 +0100 @@ -1,3 +1,13 @@ +7.1.1 (2026-03-26) +================== + +Bug Fixes +--------- + +- Fix ~`sunpy.net.scraper.Scraper` to correctly handle proper local file URI on Windows and make internal code more consistent. (`#8493 <https://github.com/sunpy/sunpy/pull/8493>`__) +- Fixed a bug in `sunpy.coordinates.spice` when converting times to the time scale/format used by SPICE, which resulted in a time inaccuracy of up to 1.6 ms. (`#8534 <https://github.com/sunpy/sunpy/pull/8534>`__) + + 7.1.0 (2025-12-08) ================== @@ -82,7 +92,7 @@ Documentation ------------- -- Added a gallery example (:ref:`sphx_glr_generated_gallery_plotting_time_distance.py`) demonstrating how to extract the intensities along a slit to create a time-distance plot taking into account differential rotation. (`#8057 <https://github.com/sunpy/sunpy/pull/8057>`__) +- Added a gallery example (:ref:`sphx_glr_generated_gallery_showcase_time_distance.py`) demonstrating how to extract the intensities along a slit to create a time-distance plot taking into account differential rotation. (`#8057 <https://github.com/sunpy/sunpy/pull/8057>`__) - The source-code links now go to the GitHub repository instead of rendered versions of the source code. (`#8179 <https://github.com/sunpy/sunpy/pull/8179>`__) - Fixed errors and added elaborations to the docstring for `~sunpy.coordinates.Helioprojective`. (`#8293 <https://github.com/sunpy/sunpy/pull/8293>`__) - Added an example (:ref:`sphx_glr_generated_gallery_plotting_adding_earth.py`) showing how to add an Earth scale image to a Map plot. (`#8322 <https://github.com/sunpy/sunpy/pull/8322>`__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/PKG-INFO new/sunpy-7.1.1/PKG-INFO --- old/sunpy-7.1.0/PKG-INFO 2025-12-08 16:19:11.929378700 +0100 +++ new/sunpy-7.1.1/PKG-INFO 2026-03-26 10:59:06.566252200 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: sunpy -Version: 7.1.0 +Version: 7.1.1 Summary: SunPy core package: Python for Solar Physics Author-email: The SunPy Community <[email protected]> License-Expression: BSD-3-Clause @@ -82,13 +82,15 @@ Requires-Dist: sunpy[asdf,core,jpeg2000,opencv,scikit-image,spice]; extra == "all" Provides-Extra: s3 Requires-Dist: fsspec[s3]>=2023.6.0; extra == "s3" -Requires-Dist: aiobotocore[boto3]>=2.6.0; extra == "s3" +Requires-Dist: aiobotocore>=2.6.0; extra == "s3" +Requires-Dist: boto3>=1.31.17; extra == "s3" Provides-Extra: jupyter Requires-Dist: itables>=2.2.4; extra == "jupyter" Requires-Dist: ipywidgets>=8.1.0; extra == "jupyter" Provides-Extra: tests-only Requires-Dist: hvpy>=1.1.0; extra == "tests-only" Requires-Dist: jplephem>=2.19; extra == "tests-only" +Requires-Dist: psutil>=6.0.0; extra == "tests-only" Requires-Dist: pytest-astropy>=0.11.0; extra == "tests-only" Requires-Dist: pytest-mpl>=0.18.0; extra == "tests-only" Requires-Dist: pytest>=7.4.0; extra == "tests-only" @@ -112,6 +114,7 @@ Requires-Dist: sunpy-sphinx-theme>=2.0.3; extra == "docs" Requires-Dist: sphinxcontrib-bibtex; extra == "docs" Requires-Dist: joblib; extra == "docs" +Requires-Dist: sphinx-autodoc-typehints; extra == "docs" Provides-Extra: docs-gallery Requires-Dist: sunpy[docs]; extra == "docs-gallery" Requires-Dist: astroquery>=0.4.6; extra == "docs-gallery" @@ -121,9 +124,9 @@ Requires-Dist: sunpy[docs,tests]; extra == "dev" Dynamic: license-file -********* -``sunpy`` -********* +SunPy core package: Python for Solar Physics +============================================ + |SunPy Logo| +-----------------------------------+-----------------------------------+-----------------------------------+ @@ -177,62 +180,60 @@ It includes an interface for searching and downloading data from multiple data providers, data containers for image and time series data, commonly used solar coordinate frames and associated transformations, as well as other functionality needed for solar data analysis. Installation -============ +------------ We recommended following the `installation guide <https://docs.sunpy.org/en/stable/guide/installation.html>`__ in the ``sunpy`` documentation. This will walk you through installing ``sunpy`` and all of its dependencies. Usage -===== +----- If you are new to ``sunpy``, the best place to start is the `tutorial <https://docs.sunpy.org/en/stable/tutorial/index.html>`__. the `example gallery <https://docs.sunpy.org/en/stable/generated/gallery/index.html>`__ also includes a collection of shorter and more specific examples of using ``sunpy``. Changes -======= +------- See our `changelog <https://docs.sunpy.org/en/stable/whatsnew/changelog.html>`__. for the latest changes in ``sunpy``. Getting Help -============ +------------ For more information or to ask questions about ``sunpy`` or any other SunPy Project package, please check out: - `sunpy documentation <https://docs.sunpy.org/en/stable/>`__ - `SunPy Affiliated Packages <https://sunpy.org/affiliated>`__ -- `SunPy Chat`_ +- `SunPy Chat <https://app.element.io/#/room/#sunpy:openastronomy.org>`__ - `SunPy mailing list <https://groups.google.com/forum/#!forum/sunpy>`__ - `SunPy Community forum <https://community.openastronomy.org/c/sunpy/5>`__ Acknowledging or Citing ``sunpy`` -================================= +--------------------------------- If you use ``sunpy`` in your scientific work, we would appreciate your `citing it in your publications <https://docs.sunpy.org/en/stable/citation.html>`__. The continued growth and development of ``sunpy`` is dependent on the community being aware of ``sunpy``. -Contributing -============ - -The SunPy Project is a community-driven open-source project that welcomes any and all contributions. -Whether you are a developer, student, or user, you can help by contributing code, documentation, or community support. - -If you would like to get involved, the `Newcomers Guide`_ guide explains the many different ways to contribute to the SunPy Project and also shows how to get set up with a development workflow. +Usage of Generative AI +---------------------- -Help is always welcome, so come and say hello by joining the `SunPy Chat`_ and look over the `Good First Issues list`_ for the ideal places to start. +If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +For more information see our documentation on fair and appropriate `AI usage <https://docs.sunpy.org/en/latest/dev_guide/contents/ai_usage.html>`__. -.. _Newcomers Guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _Good First Issues list: https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Good+First+Issue%22 +Contributing +------------ -Usage of Generative AI -====================== +We love contributions! sunpy is open source, +built on open source, and we'd love to have you hang out in our community. -We expect authentic engagement in our community. -Be wary of posting output from Large Language Models or similar generative AI as comments on GitHub or any other platform, as such comments tend to be formulaic and low quality content. -If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +If you would like to get involved, check out the `Developers Guide`_ section of the SunPy docs. +Stop by our chat room `#sunpy:openastronomy.org`_ if you have any questions. +Help is always welcome so let us know what you like to work on, or check out the `issues page`_ for the list of known outstanding items. -Code of Conduct -=============== +For more information on contributing to SunPy, please read our `Newcomers' guide`_. -When you are interacting with the SunPy Community you are asked to follow our `Code of Conduct <https://sunpy.org/coc>`__. +.. _Developers Guide: https://docs.sunpy.org/en/latest/dev_guide/index.html +.. _`#sunpy:openastronomy.org`: https://app.element.io/#/room/#sunpy:openastronomy.org +.. _issues page: https://github.com/sunpy/sunpy/issues +.. _Newcomers' guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _SunPy Chat: https://app.element.io/#/room/#sunpy:openastronomy.org +When you are interacting with the SunPy community you are asked at to follow our `code of conduct <https://sunpy.org/coc>`__. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/README.rst new/sunpy-7.1.1/README.rst --- old/sunpy-7.1.0/README.rst 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/README.rst 2026-03-26 10:58:57.000000000 +0100 @@ -1,6 +1,6 @@ -********* -``sunpy`` -********* +SunPy core package: Python for Solar Physics +============================================ + |SunPy Logo| +-----------------------------------+-----------------------------------+-----------------------------------+ @@ -54,62 +54,60 @@ It includes an interface for searching and downloading data from multiple data providers, data containers for image and time series data, commonly used solar coordinate frames and associated transformations, as well as other functionality needed for solar data analysis. Installation -============ +------------ We recommended following the `installation guide <https://docs.sunpy.org/en/stable/guide/installation.html>`__ in the ``sunpy`` documentation. This will walk you through installing ``sunpy`` and all of its dependencies. Usage -===== +----- If you are new to ``sunpy``, the best place to start is the `tutorial <https://docs.sunpy.org/en/stable/tutorial/index.html>`__. the `example gallery <https://docs.sunpy.org/en/stable/generated/gallery/index.html>`__ also includes a collection of shorter and more specific examples of using ``sunpy``. Changes -======= +------- See our `changelog <https://docs.sunpy.org/en/stable/whatsnew/changelog.html>`__. for the latest changes in ``sunpy``. Getting Help -============ +------------ For more information or to ask questions about ``sunpy`` or any other SunPy Project package, please check out: - `sunpy documentation <https://docs.sunpy.org/en/stable/>`__ - `SunPy Affiliated Packages <https://sunpy.org/affiliated>`__ -- `SunPy Chat`_ +- `SunPy Chat <https://app.element.io/#/room/#sunpy:openastronomy.org>`__ - `SunPy mailing list <https://groups.google.com/forum/#!forum/sunpy>`__ - `SunPy Community forum <https://community.openastronomy.org/c/sunpy/5>`__ Acknowledging or Citing ``sunpy`` -================================= +--------------------------------- If you use ``sunpy`` in your scientific work, we would appreciate your `citing it in your publications <https://docs.sunpy.org/en/stable/citation.html>`__. The continued growth and development of ``sunpy`` is dependent on the community being aware of ``sunpy``. -Contributing -============ - -The SunPy Project is a community-driven open-source project that welcomes any and all contributions. -Whether you are a developer, student, or user, you can help by contributing code, documentation, or community support. - -If you would like to get involved, the `Newcomers Guide`_ guide explains the many different ways to contribute to the SunPy Project and also shows how to get set up with a development workflow. +Usage of Generative AI +---------------------- -Help is always welcome, so come and say hello by joining the `SunPy Chat`_ and look over the `Good First Issues list`_ for the ideal places to start. +If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +For more information see our documentation on fair and appropriate `AI usage <https://docs.sunpy.org/en/latest/dev_guide/contents/ai_usage.html>`__. -.. _Newcomers Guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _Good First Issues list: https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Good+First+Issue%22 +Contributing +------------ -Usage of Generative AI -====================== +We love contributions! sunpy is open source, +built on open source, and we'd love to have you hang out in our community. -We expect authentic engagement in our community. -Be wary of posting output from Large Language Models or similar generative AI as comments on GitHub or any other platform, as such comments tend to be formulaic and low quality content. -If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +If you would like to get involved, check out the `Developers Guide`_ section of the SunPy docs. +Stop by our chat room `#sunpy:openastronomy.org`_ if you have any questions. +Help is always welcome so let us know what you like to work on, or check out the `issues page`_ for the list of known outstanding items. -Code of Conduct -=============== +For more information on contributing to SunPy, please read our `Newcomers' guide`_. -When you are interacting with the SunPy Community you are asked to follow our `Code of Conduct <https://sunpy.org/coc>`__. +.. _Developers Guide: https://docs.sunpy.org/en/latest/dev_guide/index.html +.. _`#sunpy:openastronomy.org`: https://app.element.io/#/room/#sunpy:openastronomy.org +.. _issues page: https://github.com/sunpy/sunpy/issues +.. _Newcomers' guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _SunPy Chat: https://app.element.io/#/room/#sunpy:openastronomy.org +When you are interacting with the SunPy community you are asked at to follow our `code of conduct <https://sunpy.org/coc>`__. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/docs/conf.py new/sunpy-7.1.1/docs/conf.py --- old/sunpy-7.1.0/docs/conf.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/docs/conf.py 2026-03-26 10:58:57.000000000 +0100 @@ -150,9 +150,10 @@ 'sphinx.ext.mathjax', 'sphinx.ext.napoleon', 'sphinx.ext.todo', + 'sphinx_autodoc_typehints', 'sunpy.util.sphinx.doctest', 'sunpy.util.sphinx.generate', - "sphinxext.opengraph", + 'sphinxext.opengraph', 'sphinx_design', 'sphinx_copybutton', 'sphinxcontrib.bibtex', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/examples/plotting/time_distance.py new/sunpy-7.1.1/examples/plotting/time_distance.py --- old/sunpy-7.1.0/examples/plotting/time_distance.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/examples/plotting/time_distance.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,182 +0,0 @@ -""" -===================================================== -Creating a time-distance plot from a sequence of maps -===================================================== - -This example showcases how you can use :func:`sunpy.map.pixelate_coord_path` -and :func:`sunpy.map.sample_at_coords` on a sequence of images to create a -time-distance diagram accounting for solar differential rotation using -`sunpy.coordinates.propagate_with_solar_surface` and dealing with off-disk -pixels using `sunpy.coordinates.screens.SphericalScreen` -""" -# sphinx_gallery_thumbnail_number = -1 -import matplotlib.dates as mdates -import matplotlib.pyplot as plt -import numpy as np - -import astropy.units as u -from astropy.coordinates import SkyCoord - -from sunpy.coordinates import propagate_with_solar_surface -from sunpy.coordinates.screens import SphericalScreen -from sunpy.map import Map, pixelate_coord_path, sample_at_coords -from sunpy.net import Fido -from sunpy.net import attrs as a - -############################################################################### -# First, we will need to acquire a sequence of images from SDO/AIA. -# We will use a data from 2012 containing a nice example of loop oscillations. - -# To keep the online build and download low using a short time range expand to -# 18:05 - 18:30 to see more of the oscillation. - -query = Fido.search( - a.Time('2012-10-20 18:14:00', '2012-10-20 18:19:00'), - a.Instrument.aia, - a.Wavelength(171*u.angstrom), -) -files = Fido.fetch(query, site="NSO") -files = sorted(files) - - -############################################################################### -# Our target will be a set of loops in the corona above an active region. -# First load the FITS files we downloaded above in to map sequence and create a -# rectangular submap or cutout around the area of interest. We will also define -# the path, in this case a line, along which we want to make the time-distance -# plot. - -aia_seq = Map(files) -corner = SkyCoord(Tx=-1150*u.arcsec, Ty=-500*u.arcsec, - frame=aia_seq[0].coordinate_frame) -ref_sub_map = aia_seq[0].submap(corner, width=250*u.arcsec, height=450*u.arcsec) - -line_coords = SkyCoord([-1030, -1057]*u.arcsec, [-220, -206]*u.arcsec, - frame=aia_seq[0].coordinate_frame) - -############################################################################### -# Next we can plot the full disk map, over-plotting the region of interest and -# also plot the submap and the line along which we want to make the -# time-distance plot. - -fig = plt.figure(figsize=(8, 5)) -full_disk_ax = fig.add_subplot(121, projection=aia_seq[0]) -aia_seq[0].plot(axes=full_disk_ax, clip_interval=[1,99]*u.percent) -aia_seq[0].draw_quadrangle(corner, width=250*u.arcsec, height=450*u.arcsec, - axes=full_disk_ax) -sub_map_ax = fig.add_subplot(122, projection=ref_sub_map) -ref_sub_map.plot(axes=sub_map_ax, clip_interval=[1,99]*u.percent) -sub_map_ax.plot_coord(line_coords) - -############################################################################### -# There are two approaches that can be used to extract time distance -# measurements from the data: -# -# 1. Reproject all the maps to a common world coordinate system (WCS) -# 2. Transform the coordinates of the line extracted from the reference map -# to the coordinate systems of the subsequent maps -# -# We will use both and show they achieve almost the same results choosing which -# approach to use will depend on the exact use case. -# -# We will start of with the first approach and reproject all the maps to common WCS -# of the ``ref_sub_map.wcs`` while also taking account of differential rotation of -# using `~sunpy.coordinates.propagate_with_solar_surface` and off-disk pixels using -# `~sunpy.coordinates.screens.SphericalScreen`. - -reprojected_sub_maps = [] -for cur_map in aia_seq: - cur_map = cur_map/cur_map.exposure_time - with (propagate_with_solar_surface(), - SphericalScreen(cur_map.observer_coordinate, only_off_disk=True)): - reprojected_sub_maps.append(cur_map.reproject_to(ref_sub_map.wcs, preserve_date_obs=True)) -reprojected_sub_maps = Map(reprojected_sub_maps, sequence=True) - -############################################################################### -# Now that we have reprojected all the maps to common WCS we can extract the -# pixel coordinates once using :func:`~sunpy.map.pixelate_coord_path` to -# determine the coordinates for every pixel that intersects with the physical -# path and then use :func:`~sunpy.map.sample_at_coords` sample the data at -# these coordinates. - -# As the maps are all aligned only need to extract the coordinates once -intensity_coords = pixelate_coord_path(aia_seq[0], line_coords) - -intensities_reproject = [] - -for aia_map in reprojected_sub_maps: - intensities_reproject.append(sample_at_coords(aia_map, intensity_coords).value) - -############################################################################### -# For the second approach we need to transform the ``intensity_coords`` into -# the coordinate frame of each map and then extract the data at corresponding -# pixel coordinates. - -intensities_transform = [] -for cur_map in aia_seq: - with propagate_with_solar_surface(), SphericalScreen(cur_map.observer_coordinate, - only_off_disk=True): - # The coordinate will automatically be transformed into the cur_map frame - intensities_transform.append( - (sample_at_coords(cur_map, intensity_coords)/cur_map.exposure_time).value) - -############################################################################### -# Now we have obtained the raw data we need to prepare it for platting and -# calculate the extents of the x and y acies for the final plot. - -# The above will give us a list of 1D arrays, one for each map in the sequence. -# We need to stack them into a 2D array. -intensities_reproject = np.vstack(intensities_reproject) -intensities_transform = np.vstack(intensities_transform) - -# This defines the distance along the path in arcseconds. -angular_separation = intensity_coords.separation(intensity_coords[0]).to(u.arcsec) - -# Get correct values for the extent -extent = [reprojected_sub_maps[0].date.datetime, reprojected_sub_maps[-1].date.datetime, - 0, angular_separation[-1].value] - -############################################################################### -# Plot the reference submap, line and extracted data from both methods and -# the difference between them. - -fig = plt.figure(figsize=(10, 5), layout="constrained") -left, right = fig.subfigures(nrows=1, ncols=2, width_ratios=[0.6, 0.75]) -left_ax = left.add_subplot(111, projection=reprojected_sub_maps[0]) -right_ax = right.subplot_mosaic([['repro'], ['trans'], ['diff']], - sharex=True, sharey=True) - -imag_ax = reprojected_sub_maps[0].plot(axes=left_ax, clip_interval=[1, 99]*u.percent) -plt.colorbar(imag_ax, ax=left_ax) -left_ax.plot_coord(line_coords) - -right_ax['repro'].imshow( - intensities_reproject.T, aspect='auto', interpolation='none', - extent=extent, cmap=imag_ax.get_cmap() -) -plt.colorbar(right_ax['repro'].images[0], ax=right_ax['repro']) -right_ax['trans'].imshow( - intensities_transform.T, aspect='auto', interpolation='none', - extent=extent, cmap=imag_ax.get_cmap() -) -plt.colorbar(right_ax['trans'].images[0], ax=right_ax['trans']) -right_ax['diff'].imshow( - (intensities_reproject-intensities_transform).T, interpolation='none', - aspect='auto', extent=extent, cmap='bwr' -) -plt.colorbar(right_ax['diff'].images[0], ax=right_ax['diff']) - -locator = mdates.AutoDateLocator(minticks=4) -formatter = mdates.ConciseDateFormatter(locator) -right_ax['diff'].xaxis.set_major_locator(locator) -right_ax['diff'].xaxis.set_major_formatter(formatter) -right_ax['diff'].xaxis.set_minor_locator(mdates.MinuteLocator()) - -right_ax['repro'].set_title('Reproject') -right_ax['trans'].set_title('Transform') -right_ax['diff'].set_title('Difference') - -right_ax['diff'].set_xlabel('Time [UTC]') -right_ax['trans'].set_ylabel('Distance [arcsec]') - -plt.show() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/examples/showcase/time_distance.py new/sunpy-7.1.1/examples/showcase/time_distance.py --- old/sunpy-7.1.0/examples/showcase/time_distance.py 1970-01-01 01:00:00.000000000 +0100 +++ new/sunpy-7.1.1/examples/showcase/time_distance.py 2026-03-26 10:58:57.000000000 +0100 @@ -0,0 +1,184 @@ +""" +===================================================== +Creating a time-distance plot from a sequence of maps +===================================================== + +This example showcases how you can use :func:`sunpy.map.pixelate_coord_path` +and :func:`sunpy.map.sample_at_coords` on a sequence of images to create a +time-distance diagram accounting for solar differential rotation using +:func:`sunpy.coordinates.propagate_with_solar_surface` and dealing with off-disk +pixels using :func:`sunpy.coordinates.screens.SphericalScreen` +""" +import matplotlib.dates as mdates +import matplotlib.pyplot as plt +import numpy as np + +import astropy.units as u +from astropy.coordinates import SkyCoord + +import sunpy.map +from sunpy.coordinates import propagate_with_solar_surface +from sunpy.coordinates.screens import SphericalScreen +from sunpy.map import pixelate_coord_path, sample_at_coords +from sunpy.net import Fido +from sunpy.net import attrs as a + +############################################################################### +# First, we will need to acquire a sequence of images from SDO/AIA. +# We will use a data from 2012 containing a nice example of loop oscillations. +# +# For the online documentation, the time range specified here is kept short, +# but you can expand the time range to 18:05 - 18:30 to see more of the +# oscillations. + +query = Fido.search( + a.Time('2012-10-20 18:14:00', '2012-10-20 18:19:00'), + a.Instrument.aia, + a.Wavelength(171*u.angstrom), +) +files = Fido.fetch(query, site="NSO") +files = sorted(files) + +############################################################################### +# Our target will be a set of loops in the corona above an active region. First +# load the FITS files we downloaded above into map sequence and divide by the +# exposure time. We then create a rectangular submap or cutout around the area +# of interest. We will also define the path, in this case a line, along which +# we want to make the time-distance plot. + +aia_seq = [aia_map / aia_map.exposure_time for aia_map in sunpy.map.Map(files)] + +corner = SkyCoord(Tx=-1150*u.arcsec, Ty=-500*u.arcsec, + frame=aia_seq[0].coordinate_frame) +ref_sub_map = aia_seq[0].submap(corner, width=250*u.arcsec, height=450*u.arcsec) + +line_coords = SkyCoord([-1030, -1057]*u.arcsec, [-220, -206]*u.arcsec, + frame=aia_seq[0].coordinate_frame) + +############################################################################### +# Next we can plot the full disk map, over-plotting the region of interest and +# also plot the submap and the line along which we want to make the +# time-distance plot. + +fig = plt.figure(figsize=(9, 5)) + +full_disk_ax = fig.add_subplot(121, projection=aia_seq[0]) +aia_seq[0].plot(axes=full_disk_ax, clip_interval=[1, 99.9]*u.percent) +ref_sub_map.draw_extent(axes=full_disk_ax) + +sub_map_ax = fig.add_subplot(122, projection=ref_sub_map) +ref_sub_map.plot(axes=sub_map_ax, clip_interval=[1, 99.9]*u.percent) +sub_map_ax.plot_coord(line_coords) + +############################################################################### +# There are two approaches that can be used to extract time distance +# measurements from the data: +# +# 1. Reproject all the maps to a common world coordinate system (WCS) +# 2. Transform the coordinates of the line extracted from the reference map +# to the coordinate systems of the subsequent maps +# +# We will use both and show they achieve almost the same results. Choosing which +# approach to use will depend on the exact use case. +# +# We will start with the first approach and reproject all the maps to a common WCS +# defined by ``ref_sub_map.wcs`` while also taking account of differential rotation +# using :func:`~sunpy.coordinates.propagate_with_solar_surface` and off-disk pixels +# using :func:`~sunpy.coordinates.screens.SphericalScreen`. + +reprojected_sub_maps = [] +for cur_map in aia_seq: + with (propagate_with_solar_surface(), + SphericalScreen(cur_map.observer_coordinate, only_off_disk=True)): + reprojected_sub_maps.append(cur_map.reproject_to(ref_sub_map.wcs, preserve_date_obs=True)) + +############################################################################### +# Now that we have reprojected all the maps to a common WCS, we can extract the +# pixel coordinates once using :func:`~sunpy.map.pixelate_coord_path` to +# determine the coordinates for every pixel that intersects with the physical +# path and then use :func:`~sunpy.map.sample_at_coords` to sample the data at +# these coordinates. + +# As the maps are all aligned only need to extract the coordinates once +intensity_coords = pixelate_coord_path(aia_seq[0], line_coords) + +intensities_reproject = [] + +for aia_map in reprojected_sub_maps: + intensities_reproject.append(sample_at_coords(aia_map, intensity_coords)) + +############################################################################### +# For the second approach we need to transform the ``intensity_coords`` into +# the coordinate frame of each map and then extract the data at corresponding +# pixel coordinates. + +intensities_transform = [] +for cur_map in aia_seq: + with (propagate_with_solar_surface(), + SphericalScreen(cur_map.observer_coordinate, only_off_disk=True)): + # The coordinate will automatically be transformed into the cur_map frame + intensities_transform.append(sample_at_coords(cur_map, intensity_coords)) + +############################################################################### +# Now that we have obtained the raw data, we need to prepare it for plotting +# and calculate the extents of the x and y axes for the final plot. + +# The above will give us a list of 1D arrays, one for each map in the sequence. +# We need to stack them into a 2D array. + +intensities_reproject = np.stack(intensities_reproject, axis=1).value +intensities_transform = np.stack(intensities_transform, axis=1).value + +# This defines the distance along the path in arcseconds. +angular_separation = intensity_coords.separation(intensity_coords[0]).to(u.arcsec) + +# Get correct values for the extent +extent = [reprojected_sub_maps[0].date.datetime, reprojected_sub_maps[-1].date.datetime, + 0, angular_separation[-1].value] + +############################################################################### +# Plot the reference submap, line and extracted data from both approaches and +# the difference between them. + +fig = plt.figure(figsize=(10, 5), layout="constrained") +left, right = fig.subfigures(nrows=1, ncols=2, width_ratios=[0.6, 0.75]) +left_ax = left.add_subplot(111, projection=reprojected_sub_maps[0]) +right_ax = right.subplot_mosaic([['repro'], ['trans'], ['diff']], + sharex=True, sharey=True) + +imag_ax = reprojected_sub_maps[0].plot(axes=left_ax, clip_interval=[1, 99.9]*u.percent) +plt.colorbar(imag_ax, ax=left_ax) +left_ax.plot_coord(line_coords) + +right_ax['repro'].imshow( + intensities_reproject, aspect='auto', interpolation='none', + extent=extent, cmap=imag_ax.get_cmap() +) +plt.colorbar(right_ax['repro'].images[0], ax=right_ax['repro']) +right_ax['trans'].imshow( + intensities_transform, aspect='auto', interpolation='none', + extent=extent, cmap=imag_ax.get_cmap() +) +plt.colorbar(right_ax['trans'].images[0], ax=right_ax['trans']) +right_ax['diff'].imshow( + intensities_reproject - intensities_transform, interpolation='none', + aspect='auto', extent=extent, cmap='bwr' +) +plt.colorbar(right_ax['diff'].images[0], ax=right_ax['diff']) + +locator = mdates.AutoDateLocator(minticks=4) +formatter = mdates.ConciseDateFormatter(locator) +right_ax['diff'].xaxis.set_major_locator(locator) +right_ax['diff'].xaxis.set_major_formatter(formatter) +right_ax['diff'].xaxis.set_minor_locator(mdates.MinuteLocator()) + +right_ax['repro'].set_title('Reproject approach') +right_ax['trans'].set_title('Transform approach') +right_ax['diff'].set_title('Difference between the approaches') + +right_ax['diff'].set_xlabel('Time [UTC]') +right_ax['trans'].set_ylabel('Distance [arcsec]') + +plt.show() + +# sphinx_gallery_thumbnail_number = -1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/pyproject.toml new/sunpy-7.1.1/pyproject.toml --- old/sunpy-7.1.0/pyproject.toml 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/pyproject.toml 2026-03-26 10:58:57.000000000 +0100 @@ -93,14 +93,15 @@ ] core = ["sunpy[image,map,net,timeseries,visualization]"] all = ["sunpy[core,asdf,jpeg2000,opencv,spice,scikit-image]"] -# Because of some real *fun* dependency constraints between aiobotocore, s3fs -# and boto3 this is the best way to get s3fs and boto3 (needed for cdflib) -# installed simultaneously. We only use this extra for tests, but it is -# provided separate for users who want to opt-in to s3 support. It should not be -# included in [all] or conda deps. +# We only use this extra for tests, but it is provided separate for +# users who want to opt-in to s3 support. It should not be included in +# [all] or conda deps. +# We also can't easily test this in oldestdeps because of +# co-versioning of aiobotocore & boto3 / botocore s3 = [ "fsspec[s3]>=2023.6.0", - "aiobotocore[boto3]>=2.6.0", # cdflib has it's own special s3 handling which requires boto3 + "aiobotocore>=2.6.0", + "boto3>=1.31.17", ] jupyter = [ "itables>=2.2.4", @@ -110,6 +111,7 @@ tests-only = [ "hvpy>=1.1.0", "jplephem>=2.19", + "psutil>=6.0.0", "pytest-astropy>=0.11.0", "pytest-mpl>=0.18.0", "pytest>=7.4.0", @@ -138,6 +140,7 @@ "sunpy-sphinx-theme>=2.0.3", "sphinxcontrib-bibtex", "joblib", # for sphinx-gallery parallel + "sphinx-autodoc-typehints", ] docs-gallery = [ "sunpy[docs]", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/pytest.ini new/sunpy-7.1.1/pytest.ini --- old/sunpy-7.1.0/pytest.ini 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/pytest.ini 2026-03-26 10:58:57.000000000 +0100 @@ -67,3 +67,11 @@ ignore::sunpy.util.exceptions.SunpyConnectionWarning # parfive sometimes spews this in oldestdeps ignore:This download has been started in a thread which is not the main thread. You will not be able to interrupt the download. + # pyparsing 3.3 raises dep warnings with old mpl in oldestdeps + ignore::pyparsing.warnings.PyparsingDeprecationWarning + # devdeps - numpy 2.5 has deprecated setting .shape + # https://github.com/quintusdias/glymur/issues/717 + ignore:Setting the shape on a NumPy array has been deprecated.*:DeprecationWarning:glymur.jp2kr + ignore:Setting the shape on a NumPy array has been deprecated.*:DeprecationWarning:reproject.adaptive.core + # A transient error from Angle.to_string + ignore:invalid value encountered in do_format \(vectorized\):RuntimeWarning diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/_version.py new/sunpy-7.1.1/sunpy/_version.py --- old/sunpy-7.1.0/sunpy/_version.py 2025-12-08 16:19:11.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/_version.py 2026-03-26 10:59:06.000000000 +0100 @@ -1,5 +1,6 @@ -# file generated by setuptools-scm +# file generated by vcs-versioning # don't change, don't track in version control +from __future__ import annotations __all__ = [ "__version__", @@ -10,25 +11,14 @@ "commit_id", ] -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Tuple - from typing import Union - - VERSION_TUPLE = Tuple[Union[int, str], ...] - COMMIT_ID = Union[str, None] -else: - VERSION_TUPLE = object - COMMIT_ID = object - version: str __version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE -commit_id: COMMIT_ID -__commit_id__: COMMIT_ID +__version_tuple__: tuple[int | str, ...] +version_tuple: tuple[int | str, ...] +commit_id: str | None +__commit_id__: str | None -__version__ = version = '7.1.0' -__version_tuple__ = version_tuple = (7, 1, 0) +__version__ = version = '7.1.1' +__version_tuple__ = version_tuple = (7, 1, 1) -__commit_id__ = commit_id = 'gba75be8fc' +__commit_id__ = commit_id = 'g5984e5d5b' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/coordinates/spice.py new/sunpy-7.1.1/sunpy/coordinates/spice.py --- old/sunpy-7.1.0/sunpy/coordinates/spice.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/coordinates/spice.py 2026-03-26 10:58:57.000000000 +0100 @@ -162,7 +162,7 @@ def _convert_to_et(time): - return (time - _ET_REF_EPOCH).to_value('s') + return (time.tdb - _ET_REF_EPOCH).to_value('s') def _astropy_frame_name(spice_frame_name): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/coordinates/tests/test_spice.py new/sunpy-7.1.1/sunpy/coordinates/tests/test_spice.py --- old/sunpy-7.1.0/sunpy/coordinates/tests/test_spice.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/coordinates/tests/test_spice.py 2026-03-26 10:58:57.000000000 +0100 @@ -230,3 +230,13 @@ [-0.23020788, 0.97314148, 0], [0, 0, 1]]) np.testing.assert_allclose(result2, expected_result2, atol=1e-6) + + +def test_ephemeris_time(spice_test): + # SPICE uses an approximation for UTC->ET that has an accuracy of only 3e-5 seconds + # Test the example in the docstring for the SPICE function utc2et() + utc = parse_time('2003-12-19 16:48') + np.testing.assert_allclose(spice._convert_to_et(utc), 125124544.183560610, rtol=0, atol=3e-5) + # Test the example in the docstring for the SPICE function et2utc() + utc = parse_time('1983-04-13 12:09:14.274') + np.testing.assert_allclose(spice._convert_to_et(utc), -527644192.5403653, rtol=0, atol=3e-5) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/extern/distro_license.rst new/sunpy-7.1.1/sunpy/extern/distro_license.rst --- old/sunpy-7.1.0/sunpy/extern/distro_license.rst 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/extern/distro_license.rst 2026-03-26 10:58:57.000000000 +0100 @@ -199,4 +199,3 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/io/tests/test_ana.py new/sunpy-7.1.1/sunpy/io/tests/test_ana.py --- old/sunpy-7.1.0/sunpy/io/tests/test_ana.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/io/tests/test_ana.py 2026-03-26 10:58:57.000000000 +0100 @@ -17,9 +17,7 @@ @pytest.fixture(scope="module") def img_src(img_size): - img = np.arange(np.prod(img_size)) - img.shape = img_size - return img + return np.reshape(np.arange(np.prod(img_size)), img_size) @pytest.fixture(scope="module") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/map/sources/tests/test_hmi_source.py new/sunpy-7.1.1/sunpy/map/sources/tests/test_hmi_source.py --- old/sunpy-7.1.0/sunpy/map/sources/tests/test_hmi_source.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/map/sources/tests/test_hmi_source.py 2026-03-26 10:58:57.000000000 +0100 @@ -1,6 +1,7 @@ """ Test cases for SDO HMIMap subclass. """ +import psutil import pytest import astropy.units as u @@ -106,3 +107,25 @@ hmi_bharp_map.pixel_to_world(0*u.pix, 0*u.pix) hmi_cea_sharp_map.pixel_to_world(0*u.pix, 0*u.pix) hmi_sharp_map.pixel_to_world(0*u.pix, 0*u.pix) + + +# We use our sample HMI image to test memory mapping because it is large (8 MB data array) [email protected]_data +def test_memmap(): + process = psutil.Process() + + initial = process.memory_info() + + from sunpy.data.sample import HMI_LOS_IMAGE + hmi_map = Map(HMI_LOS_IMAGE) + + instantiated = process.memory_info() + assert instantiated.vms - initial.vms > 8e6 # The memory-mapped array is addressable + assert instantiated.rss - initial.rss < 1e6 # but has not yet been read + + # Force a read of every element in the data array + _ = hmi_map.data.max() + + accessed = process.memory_info() + assert accessed.vms - instantiated.vms < 1e6 # The addressable memory has not changed + assert accessed.rss - instantiated.rss > 8e6 # but the array has now been read diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/net/dataretriever/sources/rhessi.py new/sunpy-7.1.1/sunpy/net/dataretriever/sources/rhessi.py --- old/sunpy-7.1.0/sunpy/net/dataretriever/sources/rhessi.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/net/dataretriever/sources/rhessi.py 2026-03-26 10:58:57.000000000 +0100 @@ -91,7 +91,7 @@ try: urlopen(server, timeout=1) return server - except (TimeoutError, RemoteDisconnected, URLError): + except (TimeoutError, ConnectionResetError, RemoteDisconnected, URLError): pass raise OSError(f'Unable to find an online HESSI server from {data_servers}') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/net/dataretriever/sources/tests/test_goes_ud.py new/sunpy-7.1.1/sunpy/net/dataretriever/sources/tests/test_goes_ud.py --- old/sunpy-7.1.0/sunpy/net/dataretriever/sources/tests/test_goes_ud.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/net/dataretriever/sources/tests/test_goes_ud.py 2026-03-26 10:58:57.000000000 +0100 @@ -42,9 +42,9 @@ 'https://www.ncei.noaa.gov/data/goes-space-environment-monitor/access/science/xrs/goes10/xrsf-l2-avg1m_science/2008/06/sci_xrsf-l2-avg1m_g10_d20080604_v1-0-0.nc'), (Time('2020/08/02', '2020/08/04'), 'https://data.ngdc.noaa.gov/platforms/solar-space-observing-satellites/goes/' - 'goes16/l2/data/xrsf-l2-flx1s_science/2020/08/sci_xrsf-l2-flx1s_g16_d20200802_v2-2-0.nc', + 'goes16/l2/data/xrsf-l2-flx1s_science/2020/08/sci_xrsf-l2-flx1s_g16_d20200802_v2-2-1.nc', 'https://data.ngdc.noaa.gov/platforms/solar-space-observing-satellites/goes/' - 'goes17/l2/data/xrsf-l2-avg1m_science/2020/08/sci_xrsf-l2-avg1m_g17_d20200804_v2-2-0.nc')]) + 'goes17/l2/data/xrsf-l2-avg1m_science/2020/08/sci_xrsf-l2-avg1m_g17_d20200804_v2-2-1.nc')]) def test_get_url_for_time_range(LCClient, timerange, url_start, url_end): qresponse = LCClient.search(timerange) urls = [i['url'] for i in qresponse] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/net/scraper.py new/sunpy-7.1.1/sunpy/net/scraper.py --- old/sunpy-7.1.0/sunpy/net/scraper.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/net/scraper.py 2026-03-26 10:58:57.000000000 +0100 @@ -247,12 +247,15 @@ Goes over locally stored archives to return list of files in the given timerange. """ pattern, datetime_pattern = self.pattern, self.datetime_pattern - pattern_temp, datetime_pattern_temp = pattern.replace('file://', ''), datetime_pattern.replace('file://', '') if os.name == 'nt': + pattern_temp, datetime_pattern_temp = (pattern.replace('file:///', ''), + datetime_pattern.replace('file:///','')) pattern_temp = pattern_temp.replace('\\', '/') datetime_pattern_temp = datetime_pattern_temp.replace('\\', '/') prefix = 'file:///' else: + pattern_temp, datetime_pattern_temp = (pattern.replace('file://', ''), + datetime_pattern.replace('file://','')) prefix = 'file://' # Change pattern variables class-wide self.pattern, self.datetime_pattern = pattern_temp, datetime_pattern_temp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/net/tests/test_scraper.py new/sunpy-7.1.1/sunpy/net/tests/test_scraper.py --- old/sunpy-7.1.0/sunpy/net/tests/test_scraper.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/net/tests/test_scraper.py 2026-03-26 10:58:57.000000000 +0100 @@ -110,7 +110,7 @@ def test_files_range_same_directory_local(): - s = Scraper(format='/'.join(['file:/', str(rootdir), + s = Scraper(format='/'.join([rootdir.as_uri(), 'EIT_header', 'efz{{year:4d}}{{month:2d}}{{day:2d}}.{{hour:2d}}{{minute:2d}}{{second:2d}}_s.header'])) startdate = parse_time((2004, 3, 1, 4, 0)) enddate = parse_time((2004, 3, 1, 6, 30)) @@ -322,6 +322,8 @@ path.mkdir(parents=True) with (path / 'test.txt').open('w') as file: file.write('') - s = Scraper(format='file://'+str(tmp_path)+'/{{year:4d}}/{{month:2d}}/{{day:2d}}/{{file}}') + s = Scraper(format='/'.join([tmp_path.as_uri(), '{{year:4d}}', '{{month:2d}}', '{{day:2d}}', '{{file}}'])) files = s.filelist(TimeRange("2025-01-01", "2025-01-02")) + meta = s._extract_files_meta(TimeRange("2025-01-01", "2025-01-02")) assert len(files) == 1 + assert len(meta) == 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/net/vso/tests/test_vso.py new/sunpy-7.1.1/sunpy/net/vso/tests/test_vso.py --- old/sunpy-7.1.0/sunpy/net/vso/tests/test_vso.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/net/vso/tests/test_vso.py 2026-03-26 10:58:57.000000000 +0100 @@ -429,15 +429,15 @@ @pytest.mark.remote_data def test_table_has_info_required_swap(client): res = client.search(a.Time('2020/02/15 00:00:00', '2020/02/15 20:00:00'), a.Instrument('swap'), a.Provider('ESA'), a.Source('PROBA2')) - assert 'Info Required' in res.keys() assert len(res) > 0 + assert 'Info Required' in res.keys() @pytest.mark.remote_data def test_table_has_info_required_lyra(client): res = client.search(a.Time('2020/02/15 00:00:00', '2020/02/17 20:00:00'), a.Instrument('lyra'), a.Provider('ESA'), a.Source('PROBA2')) - assert 'Info Required' in res.keys() assert len(res) > 0 + assert 'Info Required' in res.keys() @pytest.mark.remote_data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json new/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json --- old/sunpy-7.1.0/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json 2026-03-26 10:58:57.000000000 +0100 @@ -1,94 +1,94 @@ { - "sunpy.image.tests.test_transform.test_clipping": "f36c82068789b048d5855315f295e2404c85b0a63ec77de0e294d58b43c9acaf", + "sunpy.image.tests.test_transform.test_clipping": "3d4d308a9807a7e0f5f71e5a77f04e671c65c8eb13fe3c6c4d3cfc68c2cf0650", "sunpy.image.tests.test_transform.test_nans": "776e5a2c12bbbff9f5f9de647052cd2ad1be03b39586b91502c8ebba08e87c1b", - "sunpy.map.tests.test_compositemap.test_autoalign_needed": "12a284018acc0dda759811d4c1a9284b64a7e5daf1e734af81bbe08186e71a8b", - "sunpy.map.tests.test_compositemap.test_autoalign_not_needed": "a63a3f9869f2469d4c8bd28aabbdb8af60b149c98c6fa6621a29033c834b870d", - "sunpy.map.tests.test_compositemap.test_plot_composite_map": "12a284018acc0dda759811d4c1a9284b64a7e5daf1e734af81bbe08186e71a8b", - "sunpy.map.tests.test_compositemap.test_plot_composite_map_contours": "d15b78d32f70070f184649bda698d0db2f478b3156ecf64ef472bd9c23333571", - "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "7d3d7a72037c7288ae370230718d35b1acd5fb1f9e5608d00ef893296508527e", - "sunpy.map.tests.test_compositemap.test_plot_composite_map_linestyles": "43292e5414ab0312e78ecdb3d888983ac6f68056dc4b62d6b54a3d3f6b5ae69a", - "sunpy.map.tests.test_compositemap.test_plot_composite_map_colors": "e59cb5994a95de275b82c85e2c1ec151c5da2bf33e82422560dd8a873c1ba90a", - "sunpy.map.tests.test_compositemap.test_set_alpha_composite_map": "a21251e4d39d1cdb07ebcb663f614186f83c8ff2166ccf80fcfa000cddad58e2", - "sunpy.map.tests.test_compositemap.test_peek_composite_map": "39c0e9f56bd946e3fa5a2527ebc9878b4693888e3445d129ed9ce02aecd51d11", - "sunpy.map.tests.test_map_factory.test_map_jp2_HMI": "a7098f65fd06e81723ab8310f8873d69bcc220100ceafa8edc24dfb07caa937c", - "sunpy.map.tests.test_mapbase.test_rotation_rect_pixelated_data": "d722cee25ad829b78b9391b7f8f417c27e8e5f14c62b9882728590d2fce5fb11", - "sunpy.map.tests.test_mapbase.test_draw_contours_with_transform": "8457f35cac695c52895d16d7a0e832c3884c5289b9b4e3931fd64171a7b1bdd0", - "sunpy.map.tests.test_mapbase.test_draw_simple_map": "2f4032dd840abdef6fcf36c37931b94079964e05529ef6d656171041d795c331", - "sunpy.map.tests.test_mapbase.test_draw_carrington_map": "cc9e66c8928c9dea753c2b2d5894873a199c3e5137df2387b1c0427e69a66833", - "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scipy]": "c15c6c707b3b0e707936988054aeb818eee7b39e2249db5309ca43585d325a51", - "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scikit-image]": "911a0442055922f0d31dd48d8f1ede3d1b8b4d11a55f00a3403e8124761c2346", - "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[opencv]": "072505693731f65824dcaa7f0843087990f15f34b519285a2bc8965a1fa0ed37", - "sunpy.map.tests.test_mapsequence.test_norm_animator": "2241b65ed7126250eb14ebbcd095ef4a1f696ad737a4e975ff8e66a007667487", - "sunpy.map.tests.test_mapsequence.test_map_sequence_plot": "86f2d19643fbeeaea8bd7097b9002a77da455eeeb46d4ac707bd3c55df15dc22", - "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_cmap_norm": "541450f6bb90fce447bc49875d9eb44fba2522989bcac73867bde73891f61b4d", - "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_clip_interval": "33bcd1f8416ff92deffad5482bf76ad620c2cb6c7a69f91eacfa5a2e508d34f0", - "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_title": "4ad766af63ce731a89a88287359af7c6b5cd0e28dde2c4d92855aa3dbcf2da97", - "sunpy.map.tests.test_plotting.test_plot_aia171": "86f2d19643fbeeaea8bd7097b9002a77da455eeeb46d4ac707bd3c55df15dc22", - "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "982363a267e12a380c48c02ab73a98bbadae4ce54f4b621898f815aac2daf040", - "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "29b93bbe004670248aed9ddde8c5f8e6eda2d975d6c046f05a9c4a5f144caf2c", - "sunpy.map.tests.test_plotting.test_peek_aia171": "c79e2f18baab464e013a21904e69660530f653bf43af1758d29e0d95f21c5ba6", - "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "1d4e670d3c2017896cd2d7b861b51bcc4c0f2fcb519c1b965549d5d166c7adf6", - "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "4a26d4320a833b61fc13a9d8c6ac47e0d76618cc9fe85a6c7060fd6a3aad5492", - "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "a10e3df6a8e400497f6d1d4e4daf310359b004ba151d47b53b482c65292a27f2", - "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "b79d398979cb49de197d47482ff70ad1e2d8ef4169fc437af99bb5aca0c9a952", - "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "c7ff79866c7cd17ec8dbd1872032080a003125be8fdd6c9babfea27a9bb8ffd6", - "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "2d92a7b78edea18f6e14d62dcaff46448137270eb31a1552c80b570092fb3dc3", - "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "c691c8232a7b775c43c955153e8b79b3022bbc1d8f0ccc9607da635279b0bb43", - "sunpy.map.tests.test_plotting.test_quadrangle_aia17_width_height": "545e2056688bd4903fe93cbe8e81a33d0020690f7842d4237f75438381c4a5b6", - "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_width_height": "ab094f1c23b454913db9e31c1a8faf6fc69fd196688c1b569bb22d261b127f55", - "sunpy.map.tests.test_plotting.test_quadrangle_aia17_top_right": "4c7026849d4ccf1a9b38eb669de3ecf83523e20a6e784bea4fad5feb57f37d3d", - "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right": "586d82cd41587965becb6793956d2855d96da84a4791acc7de5e52b6f77e6ad0", - "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right_different_axes": "47f6153e288bcc952fc5e0e8600d180550f3f20ef69d7b6090208b511b81eed6", - "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "738b6d265e9a6c534204f44912048566289c59f89aa8d98345969db835f7e834", - "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "02f8b342f79e2395052ee851cb785fc0f208c10a26bb6a6547e71e4da12d9a6c", - "sunpy.map.tests.test_plotting.test_plot_resample": "df6313df2fbf65d1f9aaf018677772c05750dcbd3e0098f34ca41cc40e5d8815", - "sunpy.map.tests.test_plotting.test_plot_superpixel": "45ebdec700a7699f7aaea6e86b22c049c65ed3c457aa2e0f5b53d135b9f54c79", - "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "854f60a854e0f3166762c94831445b83f5402a8aa70e34013616f7e4074476fe", - "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_conservative_mask_true": "bfddc88bf59694f4ed3499d14ca85937e70287efaf7e9d3c79ba6c7fc5977ccf", - "sunpy.map.tests.test_plotting.test_draw_contours_aia": "90f83a5c24fdd88a1d14807034ba2b4ee1644d3f53745935eb8e537a2acc2b9a", - "sunpy.map.tests.test_plotting.test_draw_contours_different_wcs": "9cbb12775ed1da71226dcc500f434bdf0ece76d54894942fb34c1805d8d11de0", - "sunpy.map.tests.test_plotting.test_draw_contours_aia_fill": "abd8a02404ddcd6a4490b6b4a7d7bb0987fec7fa74cec9224bf58dcbad19985b", - "sunpy.map.tests.test_plotting.test_heliographic_peek": "662a24f525b30ce89ba15b7668518f31d439fa8b0c5ba84da2a71bbda31edb9a", - "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_width_height": "a52dca9100f3f96644e924f283c7ba9bd26db115be3a8e19b91898406d06f9ba", - "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_top_right": "40591e49e6b32ec3a27b6fc50b9e2fdfcaa9665eca70b6a515dfb9dc7c0b1724", + "sunpy.map.tests.test_compositemap.test_autoalign_needed": "82c6eeadafcabd3e9e525f83ee02ef5d603082d1b7356736041405f52694c792", + "sunpy.map.tests.test_compositemap.test_autoalign_not_needed": "f1ae5d46dbd1dfbd95e3766f98c31778220663ed4d88cc9627c2522092bab22e", + "sunpy.map.tests.test_compositemap.test_peek_composite_map": "48ffab3c2e79f083588a665afb008af7d2f2867183ed24dd7988dcf7d5aceabc", + "sunpy.map.tests.test_compositemap.test_plot_composite_map": "82c6eeadafcabd3e9e525f83ee02ef5d603082d1b7356736041405f52694c792", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_colors": "a44726ea33a1e39a846fe6b1ec6f063a311f47c2c468e86985cd22c67c87fe77", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_contours": "12ccc5f578614ebe0b37ba8e9b63e6d3e95b3c595e98705968f2ef8d8c5693ed", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_linestyles": "5478542c64be610c991b727393aef216dbb6d3da85ec763d484b1a1873455a86", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "08481651b4fdff6d93567b89eec3647ff6869c9099a4b36a597c8913af1df4e7", + "sunpy.map.tests.test_compositemap.test_set_alpha_composite_map": "c38147ed9c41ab3a3310e60f321d17bb4e16a8077963c24799b9628b34b6f616", + "sunpy.map.tests.test_map_factory.test_map_jp2_HMI": "2eef1b68d7352bb299d7bbc2b5d3d8f3aa7c1dfd5e2116c915bb64d742bb4a44", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[opencv]": "72f1dcce4cace519c0e68a514b8b08437c8244685654ece27a06e8c10ae470d7", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scikit-image]": "faab0f5e28ff6cc93d1a80456e34300d44618acc3d57543ce786a20c8ce25d8b", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scipy]": "c8e919e5b5c8ed6485e9b1d5e002aa380f30d848c2af2d77cac5d185d1a66442", + "sunpy.map.tests.test_mapbase.test_draw_carrington_map": "1b03d5f7eef721492e58e9e6420078223acbe54dd6cde5a1a934506ac9d3e39d", + "sunpy.map.tests.test_mapbase.test_draw_contours_with_transform": "52d9589b67abf11d554b2c88b2e08f46ba719838a724c32675c3ccd7ec0201be", + "sunpy.map.tests.test_mapbase.test_draw_simple_map": "61b1f3381bbda0da5769c8ab9ce006470794d5175682c040d09e60df43d073b0", + "sunpy.map.tests.test_mapbase.test_rotation_rect_pixelated_data": "a044791b96520b24a26ac7aca129657f6c20f2ab422ef85b4a5fd070006ad456", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot": "683ee918c3f72dfb533d38aaaf40b4f5133fb5a161661b884feaa2b3640b84f8", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_clip_interval": "850904ee981a23f914dcb90ad29eebd78d4cbaf9ba03e9fbd979a739ca708a17", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_cmap_norm": "045b4390351310707e99ccd3f1fd2e01ae9c075b99fb3e4b2131c5ed161d73e6", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_title": "9db000405d46b2985c83f75d54c2f7b1b62e7e046d3d15facd1a5e091356456f", + "sunpy.map.tests.test_mapsequence.test_norm_animator": "f09dcfc8152526da4e33eda932273775a03276c508009c949e78aa476b15e438", + "sunpy.map.tests.test_plotting.test_draw_contours_aia": "b852393357ea5072feee3d3748263426a4328a66bdd78bee07b38384c8465740", + "sunpy.map.tests.test_plotting.test_draw_contours_aia_fill": "c503dd17fc11874452f5e778e283d3e70e1fd47ef95158a4ae68a23564cc241e", + "sunpy.map.tests.test_plotting.test_draw_contours_different_wcs": "0109fdd15e8e4e95037279813d182706fd39431ab91f29b4e257196dead4cbce", + "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "36cf119197d832d23294316a9f2aff5138b87d246bdf941886518d1e31b63afe", + "sunpy.map.tests.test_plotting.test_draw_limb_different_observer": "87c1d52e34efb02b1fb99b2343a28b907a9d262f2c3fbfb711cb16c00c74a929", + "sunpy.map.tests.test_plotting.test_draw_limb_heliographic_stonyhurst": "ffc7d30b8739d7eace36cee2221a4433534fcc1a55baeda0a587f57bfb52add8", "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "c7c08b2b6dae1b96c303345b04682060da97a1b304e7f25bcfd40b2154751465", - "sunpy.map.tests.test_plotting.test_draw_limb_different_observer": "bba8a5d3d8e5e3e3a7d36060d9730e4545c5250367902cf97048c33049f330f3", - "sunpy.map.tests.test_plotting.test_draw_limb_heliographic_stonyhurst": "fcbf6be2894be891f458d2bc305702564cb451052bc727b0175e7b6ad527801c", - "sunpy.map.tests.test_plotting.test_map_draw_extent": "c51113113a46c838b07b049a3f17940184b99b0a56200fbd63e6cf2bf1e3c86c", - "sunpy.map.tests.test_plotting.test_plot_autoalign[True]": "c86e4af4907f01f104f38bb56746744ee99a95fe85dfd843d7baa56723265f3e", - "sunpy.map.tests.test_plotting.test_plot_autoalign[mesh]": "197f06eced7fe4bf8496cf5f3ba4e4cc379ac108be0f212d605007c1e3db062c", - "sunpy.map.tests.test_plotting.test_plot_autoalign[image]": "c86e4af4907f01f104f38bb56746744ee99a95fe85dfd843d7baa56723265f3e", - "sunpy.map.tests.test_plotting.test_plot_autoalign_datalim": "a5af424f5d70394d4e39a7066793463bec0adae17c9ab46a451640957822bc8d", - "sunpy.map.tests.test_plotting.test_plot_autoalign_pixel_alignment": "411b3ea8353e00f644225c866c55fc6532c855ea8e19dd8355965fdbbef2de20", - "sunpy.map.tests.test_plotting.test_plot_autoalign_image_incomplete": "fc2520d17414d0f742e7c62ed0a189f311f5f468329b20dbf714e71b0a5fa7fa", - "sunpy.map.tests.test_reproject_to.test_reproject_to_hgs": "90452e9e8f248f8798a794ba70e157bf0eb87a083bda55a8ffc846c2024b1363", - "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_interpolation": "adca79ed26b0139f29c5c0bec63d1a818fe8ba0cd718923d952210e6e8ca801c", - "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_exact": "a772b4ba8deeb611c683d86911bf0b5acb90a3b307b1064c1d04511050810eed", - "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_adaptive": "ee2cc06c8ed27369e1b2cd6b5d16688663ee061e3d84a3ccee09923bae10b16c", - "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[None]": "b13da12347894b1c2e57ea695e32184682e94fb5740d19158de1428cb7bf3044", - "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[corners]": "38c68217d6de2ee13fe7937a57281344e5686e68d3cc8367e66f58023e4509a6", - "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[edges]": "0557a116b9155a6c530763288ed389e20f2c24270b258693cf2678a98fb4c763", - "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[all]": "ebdec2de9108f377ac54f171863795dd1ba7854a04f174a2fa35a5c6ccaafe9e", - "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[SphericalScreen]": "635663c210e588cc441d86d3710884a00ce0a23d67a549df274284bfa5a22285", - "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[PlanarScreen]": "30fae92a5cf0b211b07cf19dcd660351aad5da91b67ce8032d6b1b20e211fe0b", - "sunpy.timeseries.sources.tests.test_eve.test_esp_peek": "28b1e7af0e1894d22fd9db90d9e2bc5eb76e291c9e41fa1bb1d33d95bd13cce3", + "sunpy.map.tests.test_plotting.test_heliographic_peek": "cd1968b8b0b6b5447ce739a3d4728721d59d6f0f26c25ca0d333cb0e05f043ce", + "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_top_right": "40591e49e6b32ec3a27b6fc50b9e2fdfcaa9665eca70b6a515dfb9dc7c0b1724", + "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_width_height": "a52dca9100f3f96644e924f283c7ba9bd26db115be3a8e19b91898406d06f9ba", + "sunpy.map.tests.test_plotting.test_map_draw_extent": "d84c6ad1d119cde881c35130cee1a71f72b1eb26b073f5a6e174c5f1efb4a7dd", + "sunpy.map.tests.test_plotting.test_peek_aia171": "62c4d51d9a58f05279e5fe2bf665992fd51b7523112893f2febd8449dead0ec4", + "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "3c93b346888c716ab0f78b84df22cad86502baedaf5ed89c005e1ae84f4a6562", + "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "e525da86084a63477d65b95389f1a7fa8739c53f3ed900aa8aa0e3e418872a3c", + "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "947d5947c020bbeb10022c0f146b68e2a33a5f4ebc6b64d5d773d5818c2b0305", + "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "42d4c7f61de58e5186c15e0230555df7f4076e3f5d63a405c3e4dc72d245c8f8", + "sunpy.map.tests.test_plotting.test_plot_aia171": "683ee918c3f72dfb533d38aaaf40b4f5133fb5a161661b884feaa2b3640b84f8", + "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "0481d2760a1da354e6b001c79accc1aa4c4bb41d3ee86b1740fbc125dd4aa84d", + "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "ea868748df67922cfc5c7b7d3b0f5febe7f524d8e6c7183d9a496ae27009367a", + "sunpy.map.tests.test_plotting.test_plot_autoalign[True]": "a0f08c7afd382c233584810246153b05585f1d9ffdf16e128be9a768d89e666f", + "sunpy.map.tests.test_plotting.test_plot_autoalign[image]": "a0f08c7afd382c233584810246153b05585f1d9ffdf16e128be9a768d89e666f", + "sunpy.map.tests.test_plotting.test_plot_autoalign[mesh]": "c87a041f263fbbc01cfa1c3faa79372e39f13be5f6da5a6bb097e09ad551a95f", + "sunpy.map.tests.test_plotting.test_plot_autoalign_datalim": "8182d215f6a42968bd89ca057c8500ccfb88af8f9d04e26375c4fd4bb141e50b", + "sunpy.map.tests.test_plotting.test_plot_autoalign_image_incomplete": "86f7918cece5ca5c95a0f6c7693fa7b33df552cd651a322d54cf68d8ff1d1ed1", + "sunpy.map.tests.test_plotting.test_plot_autoalign_pixel_alignment": "29c7c1545ca51a248bf25b8f112aeb01ca5f3394bb07fc7655f095bd3281e0b6", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "717db809663aa480530c574111126713bf9a2d68fe54525797e735bdc4eaeab2", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "01a00df0e69ddee3f052ac6021a019e7c9bb91707541fffa26069e9d4058be79", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_conservative_mask_true": "196cff21e41c87813b2af7ce95d9feb9746bf00fc94588886f5bb59887c8e488", + "sunpy.map.tests.test_plotting.test_plot_resample": "a6398dfebbbd68a649966b3b8aeb382d725e0f09cc20a7ce5187564b537ddc83", + "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "8682f8136fc8358078fa9b0c6a135d3c75f29cf98f0f2f3eb7acc78b3fa9abf6", + "sunpy.map.tests.test_plotting.test_plot_superpixel": "8b08a9fbf50767a1b84e246588ba0e4d4589982931107deaee7429db483e1a3a", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right": "14a773dd9da0fb6ce6dda591d095c381d14d1e0eb6c8e571488e251db5c4c832", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right_different_axes": "28be219434976780e77459c3f7466a9089ca0b780769b3a88d73d47c88635b62", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_width_height": "e5dfd3f94410dcbd57fb15112574918085a7973cdc7e1c5612f695bc7825de6c", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_top_right": "74629151615d7ab4b1e38e8713ecdc9643f764679cb103b8bf4c0d95357dd558", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_width_height": "1bce6d6646b1079908f5518b2121cf109d56dd27c3955eeba05cb1756552e7b5", + "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "80faf44417e779f446052b2c79ddb51e57ff999af42b83a3c8bd175766786b35", + "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "29959cf78b26039994312edfcba1ebc3fa0307d083d782341cb50ba84c62390e", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[None]": "8f7a5cd79fb4070c078b2a242ea2d2a0b06b4070b6bdde6a812f74b88aa13490", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[all]": "7bcea2aef8c7e6ec497a81c7c7b2428cda6c40a7e448b400dba176371d29e8d4", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[corners]": "dbe700a16f237db15ef882c8bf41d4bb80cf5f38d8921e452565c6c94e9e114f", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[edges]": "65ae0b7ae9c62066805c89dd6fa5c62f7203fff821f14608683c6002fe7d6640", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hgs": "84494999fcf4b128fd17608dd95f7645ffbce4ccf3cb5ac59911d7d62dd2f5e7", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_adaptive": "d5ba72c05de79fed68a6e362fc54e20bf838451306c32de371a54746acc0a4aa", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_exact": "8fbbdb74b9c5ff80797aa0ea2b47c75301413863f8f28ab2ee4c56a70e4cf3e8", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_interpolation": "4d82b7e502e16c52f7ab429c932549187246416517a747221a71667e578d3e11", + "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[PlanarScreen]": "37f5115e233440858a00469494860c9ace31edd2f2676b8ddf2a7ff72c76af04", + "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[SphericalScreen]": "ce8606d5a1fbe55dc174c8352cd29cb33d8c39fce4a70c17226d9b2d3508df1b", + "sunpy.timeseries.sources.tests.test_eve.test_esp_peek": "bbbd836512e0bad9484442254e2419be04376a7b2874275f8aad0efdcbee601f", "sunpy.timeseries.sources.tests.test_eve.test_eve_peek": "2a22f93af44971411800e4fcd0d93d2128fe2b9e6b97e576e8372c2cd12d7d78", - "sunpy.timeseries.sources.tests.test_fermi_gbm.test_fermi_gbm_peek": "83f0b53ca6f1cd809bd03e4aff80b3c02c8078e552b0c3e90b2cb3cf26932a51", - "sunpy.timeseries.sources.tests.test_goes.test_goes_peek": "2f01b5430fe0295b7c8bc5bccef6c3356d5eed62c1236a2790e122fba2ead267", - "sunpy.timeseries.sources.tests.test_goes.test_goes_ylim": "ae61275b7e1d8bbaf075e267e55592b86895afcbf8f846ae44dd78ecd645f6e9", - "sunpy.timeseries.sources.tests.test_lyra.test_lyra_peek": "48924d42773a4d834342cdce5ad1e005db9980bf6db6525d97a141a08f411aba", - "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_pre_peek": "2673bf752a5f4133239a4b96308de5159e1202ce55efa5a590deba213788af74", - "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_ind_peek": "a61ea2eb004d89f16b6ea4b6c56b2eedbb456ecc301d2c710eb3312f70c6a6f7", - "sunpy.timeseries.sources.tests.test_norh.test_norh_peek": "a403f6ec3064a1dbcf4c190a9724d3b893b4608ca5d0a0cae8a400378f0c8f9e", - "sunpy.timeseries.sources.tests.test_rhessi.test_rhessi_peek": "f7783ff9d1b00a03cebfdc173057f67a44de00621eff3bb22d23355c3ba7c85b", - "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "ba0469ba921c3367384c04de4e64d16cacd1499277a14f1809c087d8f21ee041", - "sunpy.timeseries.tests.test_timeseriesbase.test_column_subset_peek": "0c1ac6714d9bc505db3ee449fa9a8ba6842b0d756a8c8f02a2133547123c2a92", - "sunpy.visualization.animator.tests.test_mapsequenceanimator.test_map_sequence_animator_wcs_simple_plot": "07683c79407f568ce977ba2560e33da8668d06937f74732d2f375d6605f3c58e", - "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "39f38bd1bc4620e7d801fa7dfe76527595a85694fff27fc2506c2e150e476a95", - "sunpy.visualization.tests.test_drawing.test_draw_equator_aia171": "e10ed71a0bb1ebd65020723e97c290e9ef22fa303af545529117ef808d8d8c80", - "sunpy.visualization.tests.test_drawing.test_draw_prime_meridian_aia171": "c3cfdafcb5dd168035473c10d3aea0f83af4def909836e6ce1dd07f589ba6ca5", + "sunpy.timeseries.sources.tests.test_fermi_gbm.test_fermi_gbm_peek": "a70fb9370b822a18c3da726854c6b9cdd41c7fc8af2f427c66dbc6267b54b551", + "sunpy.timeseries.sources.tests.test_goes.test_goes_peek": "7ec64d707735bf5f2556ea99a099520aa417c183bcfdb4fc9272f05a7436a010", + "sunpy.timeseries.sources.tests.test_goes.test_goes_ylim": "8c0283e086bba71a35fa66fbb1d251dd399470bdc7e5c2f76d5d36c08e8dbe8c", + "sunpy.timeseries.sources.tests.test_lyra.test_lyra_peek": "464333b759d734edabc597aaed748f40d14178b651b8fd6477ff6b077246d134", + "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_ind_peek": "0406c11e80d3e4d148f536f580620bd116485afb8856512b89b7b5c26b2cdfd0", + "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_pre_peek": "b2e96da3ee10fd76428c6a8a227383cc1aa8005c37e4f0ca35e7c19d7d42164c", + "sunpy.timeseries.sources.tests.test_norh.test_norh_peek": "b91a29cb2efee5e75940f31531c0bd49109d5d41358434a54a1a66708ad2cb64", + "sunpy.timeseries.sources.tests.test_rhessi.test_rhessi_peek": "05ea139e1238ab6d46ec2c3b375c46f342d94ebdc035a32a761d066ce803fd88", + "sunpy.timeseries.tests.test_timeseriesbase.test_column_subset_peek": "0f59e0373961dd47104d0919b22720d2f755716b9b57fd302c728d147a9f9fb6", + "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "1cb20c67030167b5d9f5047dd3ab488fd7670692f27f51e90ff27e0abaab0a3e", + "sunpy.visualization.animator.tests.test_mapsequenceanimator.test_map_sequence_animator_wcs_simple_plot": "f92be06a340c32a757d4f73ca80105ca30e05e65d3c9d95aa03c40baf6589890", + "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "3ea2a02e0c72c28388835dbd12daaad13be9b06bd78fca821213c425bdbc9c07", + "sunpy.visualization.tests.test_drawing.test_draw_equator_aia171": "080d2b0047c4d16092be263eb4e3736d3d67428c19d9e5fe8908ff837f8c6afe", + "sunpy.visualization.tests.test_drawing.test_draw_extent": "5da012355e3740b339be789d0079c103ddad19c822975730448f766fddf8b025", + "sunpy.visualization.tests.test_drawing.test_draw_extent_3d": "57dc22fbd6909c080fb476a7ccd4916b4c4b56ac02bc7ed2e5e8db1b18e60024", + "sunpy.visualization.tests.test_drawing.test_draw_prime_meridian_aia171": "8c3600762afc1dbf5cf05e79651bd715767ebaeb615c1b788390df6f9bb27bde", "sunpy.visualization.tests.test_drawing.test_heliographic_equator_prime_meridian": "3cb195a44e899ef46de7365bd0a0c580b7ea69662bdc560a1bbb1686c2ad48cf", - "sunpy.visualization.tests.test_drawing.test_draw_extent": "d9e5182e20feff6257c3209c2202727a8e628842ca3c0c80fd1cafbc64376388", - "sunpy.visualization.tests.test_drawing.test_draw_extent_3d": "1d329ecd0e31f4d4ecfb3b75e255c117dc631bd39be9a8a862fb7974004ff07c", - "sunpy.visualization.tests.test_visualization.test_show_hpr_impact_angle": "43f6c3fea4238064ce503d699cba6457b3eb07ee58ea2a52f43556f42ee7efc8" + "sunpy.visualization.tests.test_visualization.test_show_hpr_impact_angle": "b6cdb96de7411476a395f41c30877ff48db6f17a2f72a3d05b5d8406144072f3" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy/timeseries/sources/tests/test_goes.py new/sunpy-7.1.1/sunpy/timeseries/sources/tests/test_goes.py --- old/sunpy-7.1.0/sunpy/timeseries/sources/tests/test_goes.py 2025-12-08 16:19:01.000000000 +0100 +++ new/sunpy-7.1.1/sunpy/timeseries/sources/tests/test_goes.py 2026-03-26 10:58:57.000000000 +0100 @@ -127,7 +127,7 @@ assert isinstance(goes, sunpy.timeseries.sources.goes.XRSTimeSeries) # Testing NOAA served data goes = sunpy.timeseries.TimeSeries( - 'https://data.ngdc.noaa.gov/platforms/solar-space-observing-satellites/goes/goes16/l2/data/xrsf-l2-flx1s_science/2022/05/sci_xrsf-l2-flx1s_g16_d20220506_v2-2-0.nc') + 'https://data.ngdc.noaa.gov/platforms/solar-space-observing-satellites/goes/goes16/l2/data/xrsf-l2-flx1s_science/2022/05/sci_xrsf-l2-flx1s_g16_d20220506_v2-2-1.nc') assert isinstance(goes, sunpy.timeseries.sources.goes.XRSTimeSeries) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy.egg-info/PKG-INFO new/sunpy-7.1.1/sunpy.egg-info/PKG-INFO --- old/sunpy-7.1.0/sunpy.egg-info/PKG-INFO 2025-12-08 16:19:11.000000000 +0100 +++ new/sunpy-7.1.1/sunpy.egg-info/PKG-INFO 2026-03-26 10:59:06.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: sunpy -Version: 7.1.0 +Version: 7.1.1 Summary: SunPy core package: Python for Solar Physics Author-email: The SunPy Community <[email protected]> License-Expression: BSD-3-Clause @@ -82,13 +82,15 @@ Requires-Dist: sunpy[asdf,core,jpeg2000,opencv,scikit-image,spice]; extra == "all" Provides-Extra: s3 Requires-Dist: fsspec[s3]>=2023.6.0; extra == "s3" -Requires-Dist: aiobotocore[boto3]>=2.6.0; extra == "s3" +Requires-Dist: aiobotocore>=2.6.0; extra == "s3" +Requires-Dist: boto3>=1.31.17; extra == "s3" Provides-Extra: jupyter Requires-Dist: itables>=2.2.4; extra == "jupyter" Requires-Dist: ipywidgets>=8.1.0; extra == "jupyter" Provides-Extra: tests-only Requires-Dist: hvpy>=1.1.0; extra == "tests-only" Requires-Dist: jplephem>=2.19; extra == "tests-only" +Requires-Dist: psutil>=6.0.0; extra == "tests-only" Requires-Dist: pytest-astropy>=0.11.0; extra == "tests-only" Requires-Dist: pytest-mpl>=0.18.0; extra == "tests-only" Requires-Dist: pytest>=7.4.0; extra == "tests-only" @@ -112,6 +114,7 @@ Requires-Dist: sunpy-sphinx-theme>=2.0.3; extra == "docs" Requires-Dist: sphinxcontrib-bibtex; extra == "docs" Requires-Dist: joblib; extra == "docs" +Requires-Dist: sphinx-autodoc-typehints; extra == "docs" Provides-Extra: docs-gallery Requires-Dist: sunpy[docs]; extra == "docs-gallery" Requires-Dist: astroquery>=0.4.6; extra == "docs-gallery" @@ -121,9 +124,9 @@ Requires-Dist: sunpy[docs,tests]; extra == "dev" Dynamic: license-file -********* -``sunpy`` -********* +SunPy core package: Python for Solar Physics +============================================ + |SunPy Logo| +-----------------------------------+-----------------------------------+-----------------------------------+ @@ -177,62 +180,60 @@ It includes an interface for searching and downloading data from multiple data providers, data containers for image and time series data, commonly used solar coordinate frames and associated transformations, as well as other functionality needed for solar data analysis. Installation -============ +------------ We recommended following the `installation guide <https://docs.sunpy.org/en/stable/guide/installation.html>`__ in the ``sunpy`` documentation. This will walk you through installing ``sunpy`` and all of its dependencies. Usage -===== +----- If you are new to ``sunpy``, the best place to start is the `tutorial <https://docs.sunpy.org/en/stable/tutorial/index.html>`__. the `example gallery <https://docs.sunpy.org/en/stable/generated/gallery/index.html>`__ also includes a collection of shorter and more specific examples of using ``sunpy``. Changes -======= +------- See our `changelog <https://docs.sunpy.org/en/stable/whatsnew/changelog.html>`__. for the latest changes in ``sunpy``. Getting Help -============ +------------ For more information or to ask questions about ``sunpy`` or any other SunPy Project package, please check out: - `sunpy documentation <https://docs.sunpy.org/en/stable/>`__ - `SunPy Affiliated Packages <https://sunpy.org/affiliated>`__ -- `SunPy Chat`_ +- `SunPy Chat <https://app.element.io/#/room/#sunpy:openastronomy.org>`__ - `SunPy mailing list <https://groups.google.com/forum/#!forum/sunpy>`__ - `SunPy Community forum <https://community.openastronomy.org/c/sunpy/5>`__ Acknowledging or Citing ``sunpy`` -================================= +--------------------------------- If you use ``sunpy`` in your scientific work, we would appreciate your `citing it in your publications <https://docs.sunpy.org/en/stable/citation.html>`__. The continued growth and development of ``sunpy`` is dependent on the community being aware of ``sunpy``. -Contributing -============ - -The SunPy Project is a community-driven open-source project that welcomes any and all contributions. -Whether you are a developer, student, or user, you can help by contributing code, documentation, or community support. - -If you would like to get involved, the `Newcomers Guide`_ guide explains the many different ways to contribute to the SunPy Project and also shows how to get set up with a development workflow. +Usage of Generative AI +---------------------- -Help is always welcome, so come and say hello by joining the `SunPy Chat`_ and look over the `Good First Issues list`_ for the ideal places to start. +If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +For more information see our documentation on fair and appropriate `AI usage <https://docs.sunpy.org/en/latest/dev_guide/contents/ai_usage.html>`__. -.. _Newcomers Guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _Good First Issues list: https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Good+First+Issue%22 +Contributing +------------ -Usage of Generative AI -====================== +We love contributions! sunpy is open source, +built on open source, and we'd love to have you hang out in our community. -We expect authentic engagement in our community. -Be wary of posting output from Large Language Models or similar generative AI as comments on GitHub or any other platform, as such comments tend to be formulaic and low quality content. -If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state. +If you would like to get involved, check out the `Developers Guide`_ section of the SunPy docs. +Stop by our chat room `#sunpy:openastronomy.org`_ if you have any questions. +Help is always welcome so let us know what you like to work on, or check out the `issues page`_ for the list of known outstanding items. -Code of Conduct -=============== +For more information on contributing to SunPy, please read our `Newcomers' guide`_. -When you are interacting with the SunPy Community you are asked to follow our `Code of Conduct <https://sunpy.org/coc>`__. +.. _Developers Guide: https://docs.sunpy.org/en/latest/dev_guide/index.html +.. _`#sunpy:openastronomy.org`: https://app.element.io/#/room/#sunpy:openastronomy.org +.. _issues page: https://github.com/sunpy/sunpy/issues +.. _Newcomers' guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html -.. _SunPy Chat: https://app.element.io/#/room/#sunpy:openastronomy.org +When you are interacting with the SunPy community you are asked at to follow our `code of conduct <https://sunpy.org/coc>`__. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy.egg-info/SOURCES.txt new/sunpy-7.1.1/sunpy.egg-info/SOURCES.txt --- old/sunpy-7.1.0/sunpy.egg-info/SOURCES.txt 2025-12-08 16:19:11.000000000 +0100 +++ new/sunpy-7.1.1/sunpy.egg-info/SOURCES.txt 2026-03-26 10:59:06.000000000 +0100 @@ -203,7 +203,6 @@ examples/plotting/solar_cycle_example.py examples/plotting/sunpy_matplotlib_colormap.py examples/plotting/three_map_composite.py -examples/plotting/time_distance.py examples/plotting/wcsaxes_map_example.py examples/plotting/wcsaxes_plotting_example.py examples/plotting/xy_lims.py @@ -217,6 +216,7 @@ examples/showcase/hmi_cutout.py examples/showcase/los_simulation_box_intersection.py examples/showcase/stereoscopic_3d.py +examples/showcase/time_distance.py examples/showcase/where_is_stereo.py examples/time_series/README.txt examples/time_series/goes_hek_m25.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.0/sunpy.egg-info/requires.txt new/sunpy-7.1.1/sunpy.egg-info/requires.txt --- old/sunpy-7.1.0/sunpy.egg-info/requires.txt 2025-12-08 16:19:11.000000000 +0100 +++ new/sunpy-7.1.1/sunpy.egg-info/requires.txt 2026-03-26 10:59:06.000000000 +0100 @@ -44,6 +44,7 @@ sunpy-sphinx-theme>=2.0.3 sphinxcontrib-bibtex joblib +sphinx-autodoc-typehints [docs-gallery] sunpy[docs] @@ -81,7 +82,8 @@ [s3] fsspec[s3]>=2023.6.0 -aiobotocore[boto3]>=2.6.0 +aiobotocore>=2.6.0 +boto3>=1.31.17 [scikit-image] scikit-image>=0.21.0 @@ -95,6 +97,7 @@ [tests-only] hvpy>=1.1.0 jplephem>=2.19 +psutil>=6.0.0 pytest-astropy>=0.11.0 pytest-mpl>=0.18.0 pytest>=7.4.0
