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-26 21:11:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-sunpy (Old) and /work/SRC/openSUSE:Factory/.python-sunpy.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sunpy" Sun Apr 26 21:11:37 2026 rev:41 rq:1349306 version:7.1.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-sunpy/python-sunpy.changes 2026-04-18 21:34:29.696966313 +0200 +++ /work/SRC/openSUSE:Factory/.python-sunpy.new.11940/python-sunpy.changes 2026-04-26 21:14:18.796775592 +0200 @@ -1,0 +2,7 @@ +Sat Apr 25 22:05:45 UTC 2026 - Dirk Müller <[email protected]> + +- update to 7.1.2: + * Fixed a bug where SIP distortion information in a Map WCS was + ignored. + +------------------------------------------------------------------- Old: ---- sunpy-7.1.1.tar.gz New: ---- sunpy-7.1.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-sunpy.spec ++++++ --- /var/tmp/diff_new_pack.WMSA9V/_old 2026-04-26 21:14:19.376799289 +0200 +++ /var/tmp/diff_new_pack.WMSA9V/_new 2026-04-26 21:14:19.380799453 +0200 @@ -19,7 +19,7 @@ %{?sle15_python_module_pythons} %define skip_python311 1 Name: python-sunpy -Version: 7.1.1 +Version: 7.1.2 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.1.tar.gz -> sunpy-7.1.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/.cruft.json new/sunpy-7.1.2/.cruft.json --- old/sunpy-7.1.1/.cruft.json 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/.cruft.json 2026-04-19 23:08:51.000000000 +0200 @@ -1,6 +1,6 @@ { "template": "https://github.com/sunpy/package-template", - "commit": "93c8bc491584f214226a039a35d0cbebe305cd31", + "commit": "6436220cebd96b3638682023e7149eb78e012fdc", "checkout": null, "context": { "cookiecutter": { @@ -33,7 +33,7 @@ ".github/workflows/sub_package_update.yml" ], "_template": "https://github.com/sunpy/package-template", - "_commit": "93c8bc491584f214226a039a35d0cbebe305cd31" + "_commit": "6436220cebd96b3638682023e7149eb78e012fdc" } }, "directory": null diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/CHANGELOG.rst new/sunpy-7.1.2/CHANGELOG.rst --- old/sunpy-7.1.1/CHANGELOG.rst 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/CHANGELOG.rst 2026-04-19 23:08:51.000000000 +0200 @@ -1,3 +1,12 @@ +7.1.2 (2026-04-19) +================== + +Bug Fixes +--------- + +- Fixed a bug where SIP distortion information in a Map WCS was ignored. (`#8573 <https://github.com/sunpy/sunpy/pull/8573>`__) + + 7.1.1 (2026-03-26) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/PKG-INFO new/sunpy-7.1.2/PKG-INFO --- old/sunpy-7.1.1/PKG-INFO 2026-03-26 10:59:06.566252200 +0100 +++ new/sunpy-7.1.2/PKG-INFO 2026-04-19 23:09:02.227515200 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: sunpy -Version: 7.1.1 +Version: 7.1.2 Summary: SunPy core package: Python for Solar Physics Author-email: The SunPy Community <[email protected]> License-Expression: BSD-3-Clause @@ -56,7 +56,7 @@ Requires-Dist: reproject>=0.13.0; extra == "map" Requires-Dist: scipy>=1.12.0; extra == "map" Provides-Extra: opencv -Requires-Dist: opencv-python>=4.8.0.74; extra == "opencv" +Requires-Dist: opencv-python!=4.13.0.*,>=4.8.0.74; extra == "opencv" Provides-Extra: net Requires-Dist: beautifulsoup4>=4.13.1; extra == "net" Requires-Dist: drms>=0.7.1; extra == "net" @@ -120,12 +120,15 @@ Requires-Dist: astroquery>=0.4.6; extra == "docs-gallery" Requires-Dist: jplephem>=2.19; extra == "docs-gallery" Requires-Dist: pillow; extra == "docs-gallery" +Requires-Dist: exifread; extra == "docs-gallery" Provides-Extra: dev Requires-Dist: sunpy[docs,tests]; extra == "dev" Dynamic: license-file +``sunpy`` +========= + SunPy core package: Python for Solar Physics -============================================ |SunPy Logo| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/README.rst new/sunpy-7.1.2/README.rst --- old/sunpy-7.1.1/README.rst 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/README.rst 2026-04-19 23:08:51.000000000 +0200 @@ -1,5 +1,7 @@ +``sunpy`` +========= + SunPy core package: Python for Solar Physics -============================================ |SunPy Logo| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/examples/showcase/artemis-ii-eclipse.py new/sunpy-7.1.2/examples/showcase/artemis-ii-eclipse.py --- old/sunpy-7.1.1/examples/showcase/artemis-ii-eclipse.py 1970-01-01 01:00:00.000000000 +0100 +++ new/sunpy-7.1.2/examples/showcase/artemis-ii-eclipse.py 2026-04-19 23:08:51.000000000 +0200 @@ -0,0 +1,514 @@ +""" +======================== +Artemis-II Solar Eclipse +======================== + +This example demonstrates how to process a solar eclipse image taken by the +Artemis-II crew using a digital camera onboard the spacecraft during their +Lunar flyby on April 7, 2026. Due to the relative positions of the Artemis II +spacecraft and the Moon, this eclipse provided nearly 54 minutes of totality, +far exceeding what is possible on Earth. This example walks through turning +one of those crew photos, a plain JPEG with EXIF metadata and no pointing +information, into a `~sunpy.map.Map` with a Helioprojective WCS. Starting from +raw JPEG images with EXIF metadata, the observation time is extracted. Then, +the known positions of the Moon, Sun, and planets are retrieved from JPL +Horizons via `sunpy.coordinates.get_horizons_coord` to build an initial +Helioprojective WCS using `sunpy.map.header_helper.make_fitswcs_header`. +The camera roll angle is refined by comparing the predicted and detected pixel +positions of Saturn, Mars, and Mercury, identified automatically. + +Finally, the residual radial barrel distortion is modelled using a single +`Simple Imaging Polynomial (SIP) <https://fits.gsfc.nasa.gov/registry/sip>`_ +3rd order coefficient derived from the planets positions. With the resulting +calibrated `sunpy.map.Map` it is straightforward to overplot some space-based +coronagraph data on top of the eclipse image. + +Image credit: NASA/Artemis II crew + +""" +from pathlib import Path + +import exifread +import hvpy +import matplotlib +import numpy as np +import requests +from hvpy.datasource import DataSource +from matplotlib import pyplot as plt +from matplotlib.patches import Circle +from scipy.signal import medfilt2d +from skimage import transform +from skimage.color import rgb2gray +from skimage.feature import canny, peak_local_max +from skimage.transform import hough_circle, hough_circle_peaks + +import astropy.units as u +from astropy.coordinates import CartesianRepresentation, SkyCoord, solar_system_ephemeris +from astropy.time import Time +from astropy.wcs import WCS + +import sunpy.map +from sunpy.coordinates import Helioprojective, SphericalScreen, get_horizons_coord +from sunpy.map import Map +from sunpy.map.header_helper import make_fitswcs_header +from sunpy.util.config import get_and_create_download_dir + +# Accurate planetary ephemeris from JPL Horizons +solar_system_ephemeris.set('de440s') + +############################################################################### +# Get and Convert the Raw Image +# ============================= +# The starting point is a single JPEG hosted in the NASA image library. It +# has no WCS, no pointing solution, or plate scale, we only have the raw +# image data. +# +# We first download and read in the raw image data directly taken by the crew +# on Artemis-II and convert the RGB jpeg data to a grayscale image. + +url = "https://images-assets.nasa.gov/image/art002e009301/art002e009301~orig.jpg" +filename = url.split("/")[-1] +with requests.get(url, stream=True) as res: + res.raise_for_status() + with open(filename, "wb") as f: + for chunk in res.iter_content(chunk_size=8192): + f.write(chunk) + +artemis_image_rbg = np.flipud(matplotlib.image.imread(filename)) +artemis_image = rgb2gray(artemis_image_rbg) + +############################################################################### +# Let's downsample the image to reasonable size for processing and +# visualization. The original frame is very large, so for this example we +# downsample by a factor of 6. This can be set to `False` if running locally +# for full resolution analysis. + +downsampled = True +if downsampled: + artemis_image = transform.rescale(artemis_image, 1/6, anti_aliasing=True) + +############################################################################### +# And now let's plot the raw image. + +fig, ax = plt.subplots() +ax.imshow(artemis_image_rbg, origin="lower") +ax.set_axis_off() +# Reduce memory usage on RTD build +del artemis_image_rbg + +############################################################################### +# Extract Metadata +# ================ +# +# Let's now extract metadata stored in the JPEG image, in particular the date +# and time the image was taken. The time stamp of the image is the key +# information we need, as from this we can query JPL horizons for the positions +# of Artemis II, the Sun, the Moon and the planets. + +with Path(filename).open("rb") as f: + tags = exifread.process_file(f) + +obsdate, obstime= tags['EXIF DateTimeDigitized'].values.split(" ") +obsdate = obsdate.replace(":", "-") +obstime = Time(f"{obsdate}T{obstime}") +print(obstime) + +hours, _ = [int(part) for part in tags['EXIF OffsetTime'].values.split(":")] +offset = hours*u.hour + +# obstime = obstime + offset # It seems like the timezone or offset is set incorrectly + +############################################################################### +# Get Coordinates +# =============== +# +# To get the coordinates of the Artemis II spacecraft, the Sun, the Moon, and +# the planets at the observation time, we query JPL Horizons. +# Here we use the NAIF IDs for the bodies for the query. + +NAIF_IDS = { + "artemis_ii": -1024, + "moon": 301, + "sun": 10, + "mercury": 199, + "venus": 299, + "earth": 399, + "mars": 499, + "jupiter": 599, + "saturn": 699, + "uranus": 799, + "neptune": 899 +} + +coords = {name: get_horizons_coord(str(id), obstime) for name, id in NAIF_IDS.items()} + +############################################################################### +# Find and Fit Moon's Limb and Center +# =================================== +# +# While we now know where the Moon is on the sky, we still need to know where +# it is in the image. Fitting the Moon's limb gives us that pixel location, and +# combined with the Moon's known angular size, we can estimate the plate scale. +# +# Here we use canny edge detection and circular Hough filtering to obtain the +# Moon's limb and center. +# +# First pass on a downscaled version is used to get an estimate, which is +# used to extract the region of interest (ROI) for full resolution pass. + +print("starting low res pass") +scale = 0.5 if downsampled else 0.1 +down_scaled = transform.rescale(artemis_image, scale, anti_aliasing=True) + + # Edge detection +edges = canny(down_scaled, sigma=2) + + # Radius range in scaled image (diameter ~1/3 of image height) +h, w = down_scaled.shape +radii = np.arange(0.25*h, 0.4*h, 10) + + # Hough +hough_res = hough_circle(edges, radii) +accums, cx, cy, rad = hough_circle_peaks(hough_res, radii, total_num_peaks=1) +del hough_res + + # Scale back to original resolution +moon_x = int(cx[0] / scale) +moon_y = int(cy[0] / scale) +moon_r = rad[0] / scale +roi_ext = int(1.05*moon_r) + +slice_y = slice(moon_y-roi_ext, moon_y+roi_ext) +slice_x = slice(moon_x-roi_ext, moon_x+roi_ext) +print(f"Low res pass moon_x: {moon_x}, moon_y: {moon_y}, moon_r: {moon_r}") + +############################################################################### +# Full resolution pass within ROI +# ------------------------------- +# +# Let's now re-run the limb fitting on the full resolution within the cropped +# ROI. + +roi = artemis_image[slice_y, slice_x] + +edges = canny(roi, sigma=2) + +hough_radii = np.linspace(edges.shape[0] / 2.5, edges.shape[0] / 2, 30) +hough_res = hough_circle(edges, hough_radii).astype(np.float32) # reduce peak memory usage + +accums, cx, cy, radii = hough_circle_peaks(hough_res, hough_radii, total_num_peaks=1) + +print(f"High res pass moon_x: {cx[0] + slice_x.start}, moon_y: {cy[0]+slice_y.start}, moon_r: {radii}") + +############################################################################### +# Plot edge detection and Hough filtering results +# ----------------------------------------------- + +fig, ax = plt.subplots(ncols=3, nrows=1, figsize=(9, 3)) +ax[0].imshow(artemis_image[slice_y, slice_x]) +ax[0].set_title("Original") +ax[1].imshow(edges) +ax[1].set_title("Canny") +circ = Circle( + np.hstack([cx, cy]), radius=radii[0], facecolor="none", edgecolor="red", + linewidth=2, linestyle="dashed", label="Hough fit") +ax[2].imshow(artemis_image[slice_y, slice_x]) +ax[2].add_patch(circ) +ax[2].set_title("Original with fit") +fig.legend() + + +############################################################################### +# Create metadata +# ================ +# +# Build up the metadata required to make a `sunpy.map.Map` +# Here we calculate the reference pixel, and plate scale. + +im_cx = (cx[0] + slice_x.start) * u.pix +im_cy = (cy[0] + slice_y.start) * u.pix +im_radius = radii[0] * u.pix + +moon = SkyCoord(coords['moon'], observer=coords['artemis_ii']) +R_moon = 0.2725076 * u.R_earth # IAU mean radius +dist_moon = SkyCoord(coords['artemis_ii']).separation_3d(moon) +moon_obs = np.arcsin(R_moon / dist_moon).to("arcsec") +print(moon_obs) + +plate_scale = moon_obs / im_radius +print(plate_scale) + +############################################################################### +# Make a Map +# ========== +# +# Make a `sunpy.map.Map` using the metadata obtained so far using +# `sunpy.map.header_helper.make_fitswcs_header`. + +frame = Helioprojective(observer=coords['artemis_ii'], obstime=obstime) +moon_hpc = coords['moon'].transform_to(frame) + +header = make_fitswcs_header( + artemis_image, + moon_hpc, + reference_pixel=u.Quantity([im_cx, im_cy]), + scale=u.Quantity([plate_scale, plate_scale]) +) + +artemis_map = Map(artemis_image, header) + +############################################################################### +# Reusable plot helper + +def plot_artemis_map(amap, moon_coord, planets, reset_lim=True, legend=True, figsize=(9,4), **kwargs): + fig, ax = plt.subplots(1, 1, subplot_kw={"projection": amap}, figsize=figsize, **kwargs) + amap.plot(axes=ax) + amap.draw_limb(axes=ax, label='Sun') + ax.coords[0].set_format_unit(u.deg) + ax.coords[1].set_format_unit(u.deg) + + ax.plot_coord(moon_coord, 'b+', label="Lunar Center") + theta = np.linspace(0, 360, 100) * u.deg + lunar_limb = np.vstack([moon_hpc.Tx + np.sin(theta) * moon_obs, moon_hpc.Ty + np.cos(theta) * moon_obs]) + with SphericalScreen(amap.observer_coordinate): + ax.plot_coord(SkyCoord(*lunar_limb, frame=amap.coordinate_frame), label="Lunar Limb") + + xlim = ax.get_xlim() + ylim = ax.get_ylim() + for name, coord in planets.items(): + ax.plot_coord(coord, 'o', markerfacecolor='none', label=name.title()) + if reset_lim: + ax.set_xlim(xlim) + ax.set_ylim(ylim) + if legend: + ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0) + return fig, ax + +############################################################################### +# Plot map and positions of planets to see what should be visible + +planets = {name: coord for name, coord in coords.items() if name not in ["sun", "moon", "artemis_ii"]} + +fig, ax = plot_artemis_map(artemis_map, moon_hpc, planets, reset_lim=False) +fig.tight_layout() + +############################################################################### +# Mercury, Mars, Saturn and Neptune are within the field of view, though +# Neptune is not visible as it is too distant and faint. + +planets = {name: coords[name] for name in ["mercury", "mars", "saturn"]} + +fig, ax = plot_artemis_map(artemis_map, moon_hpc, planets, reset_lim=False) +fig.tight_layout() + +############################################################################### +# Find roll angle +# =============== +# +# A clear roll is visible, so the positions of the planets are used to +# estimate the camera orientation. Use `skimage.feature.peak_local_max` to +# find the brightest peaks, which should correspond to the planets. + +if downsampled: + planets_pixels = peak_local_max(artemis_image, threshold_abs=0.9, num_peaks=3, min_distance=30) +else: + artemis_median_img = medfilt2d(artemis_image, kernel_size=5) + planets_pixels = peak_local_max(artemis_median_img, threshold_abs=0.9, num_peaks=3, min_distance=30) + del artemis_median_img + +planets_pix_x = planets_pixels[:,1] +planets_pix_y = planets_pixels[:,0] + +planet_coords = artemis_map.pixel_to_world(planets_pix_x * u.pix, planets_pix_y * u.pix) + +############################################################################### +# Verify we've correctly identified the planets. + +fig, ax = plot_artemis_map(artemis_map, moon_hpc, planets) +with SphericalScreen(coords["artemis_ii"]): + ax.plot_coord(planet_coords, 's', markerfacecolor='none') + +############################################################################### +# We need to determine which pixel positions correspond to which planets. +# From the map above, we can see that, in terms of distance from the Moon, +# the planets are Saturn, Mars, and Mercury, in that order. Therefore, we +# sort them by the separation angle from the Moon's center. + +# Saturn, Mars, Mercury +with SphericalScreen(coords["artemis_ii"]): + sep = moon_hpc.transform_to(planet_coords.frame).separation(planet_coords) +planet_index = np.argsort(sep) +actual_planets_pixel = CartesianRepresentation(planets_pix_x[planet_index], planets_pix_y[planet_index], [0] * 3) * u.pix + +moon_pixel = CartesianRepresentation(*artemis_map.wcs.world_to_pixel(moon_hpc), 0)*u.pix + +# to match the order of the actual_planets_pixel +planets_temp = SkyCoord([planets[name] for name in ["saturn", "mars", "mercury"]]) +planets_pixel = CartesianRepresentation(*artemis_map.wcs.world_to_pixel(planets_temp), 0) * u.pix + +vec_expected = planets_pixel - moon_pixel +vec_actual = actual_planets_pixel - moon_pixel +roll_angles = -np.arccos(vec_expected.dot(vec_actual) / (vec_expected.norm() * vec_actual.norm())) + +weights = sep[planet_index].to(u.deg).value +roll_angles_weighted = np.average(roll_angles, weights=weights) +print(roll_angles.to('deg')) +print(roll_angles.mean().to('deg')) +print(f"Weighted roll: {np.degrees(roll_angles_weighted):.4f} deg") + +############################################################################### +# Use derived roll and make new header and map + +header_roll = make_fitswcs_header( + artemis_image, + moon_hpc, + reference_pixel=u.Quantity([im_cx, im_cy]), + scale=u.Quantity([plate_scale, plate_scale]), + rotation_angle=-roll_angles_weighted.to('deg') +) + +artemis_map_roll = Map(artemis_image, header_roll) + +############################################################################### +# Let's now plot map and positions of Saturn, Mars, and Mercury to check if +# the WCS is correct. +# +# There seems to be some residual distortion that gets worse towards the edges. + +fig, ax = plot_artemis_map(artemis_map_roll, moon_hpc, planets) + +############################################################################### +# Correct Optical Distortion +# ========================== +# +# We can see that there is some optical distortion. Let's assume the distortion +# is due to the lens (e.g., barrel or pincushion), centered in the middle of +# the image, and derive the correction from the observed versus actual planet +# positions. + +cx, cy = artemis_map_roll.wcs.wcs.crpix +r_actual, r_predicted = [], [] +for i, name in enumerate(["saturn", "mars", "mercury"]): + hpc = planets[name].transform_to(artemis_map_roll.coordinate_frame) + px, py = artemis_map_roll.wcs.world_to_pixel(hpc) + ax, ay = planets_pix_x[planet_index][i], planets_pix_y[planet_index][i] + r_predicted.append(np.sqrt((px - cx)**2 + (py - cy)**2)) + r_actual.append(np.sqrt((ax - cx)**2 + (ay - cy)**2)) + +r_predicted = np.array(r_predicted) +r_actual = np.array(r_actual) + +k1_estimates = (r_actual/r_predicted - 1) / r_predicted**2 +weights = r_predicted # weight by distance — Mercury most reliable +k1 = np.average(k1_estimates, weights=weights) +print(f"k1 per planet: {k1_estimates}") +print(f"Weighted k1: {k1:.6e} pix^-2") + +# Use only Mars and Mercury — Saturn too close to center and fit error +k1_estimates_reliable = k1_estimates[1:] +r_reliable = r_predicted[1:] +k1 = np.average(k1_estimates_reliable, weights=r_reliable) +print(f"k1 (Mars+Mercury only): {k1:.6e} pix^-2") + +############################################################################### +# Create a SIP header, WCS and verify the SIP improve positions + +header_sip = artemis_map_roll.fits_header.copy() +header_sip['CTYPE1'] = 'HPLN-TAN-SIP' +header_sip['CTYPE2'] = 'HPLT-TAN-SIP' +header_sip['A_ORDER'] = 3 +header_sip['B_ORDER'] = 3 +header_sip['A_3_0'] = -k1 +header_sip['A_1_2'] = -k1 +header_sip['B_0_3'] = -k1 +header_sip['B_2_1'] = -k1 +header_sip['A_DMAX'] = 1.0 +header_sip['B_DMAX'] = 1.0 +wcs_sip = WCS(header_sip) + +for i, name in enumerate(["saturn", "mars", "mercury"]): + hpc = planets[name].transform_to(artemis_map_roll.coordinate_frame) + px_nosip = wcs_sip.wcs_world2pix([[hpc.Tx.to(u.deg).value, hpc.Ty.to(u.deg).value]], 0)[0] + px_sip = wcs_sip.all_world2pix([[hpc.Tx.to(u.deg).value, hpc.Ty.to(u.deg).value]], 0)[0] + ax, ay = planets_pix_x[planet_index][i], planets_pix_y[planet_index][i] + print(f"{name}: residual without SIP=({ax-px_nosip[0]:.1f}, {ay-px_nosip[1]:.1f}) " + f"with SIP=({ax-px_sip[0]:.1f}, {ay-px_sip[1]:.1f})") + +############################################################################### +# Final Map +# ========= +# +# Create a final version of the map with the SIP headers. + +artemis_map_final = Map((artemis_image, header_sip)) +fig, ax = plot_artemis_map(artemis_map_final, moon_hpc, planets) +ax.set_title(f"Artemis-II Solar Eclipse {obstime}") +fig.tight_layout() + +############################################################################### +# Overplotting Coronagraph Images +# =============================== +# In this section we will fetch images of the near corona from SOHO/LASCO +# and overplot them on the eclipse map. +# The Artemis II image shows the faint outer corona around the Moon, as the +# spacecraft was close to the moon during the flyby, so the apparent angular +# size is much larger than the Sun's, so it blocks not only the Sun's disk but +# a substantial region of the inner corona around it. +# +# By reprojecting and overplotting the LASCO images, we can overlap them inside +# the Moon's image, to produce a composite that extends from the inner corona +# outwards. +# +# First step is to fetch the images from Helioviewer. + +lasco_c2_file = hvpy.save_file(hvpy.getJP2Image(obstime.datetime, + DataSource.LASCO_C2.value), + filename=get_and_create_download_dir() + "/LASCO_C2.jp2", overwrite=True) +lasco_c2_map = Map(lasco_c2_file) +lasco_c3_file = hvpy.save_file(hvpy.getJP2Image(obstime.datetime, + DataSource.LASCO_C3.value), + filename=get_and_create_download_dir() + "/LASCO_C3.jp2", overwrite=True) +lasco_c3_map = Map(lasco_c3_file) + +############################################################################### +# Next we reproject the LASCO map to the same WCS as the Artemis eclipse map. + +with SphericalScreen(coords["artemis_ii"]): + c3_map_img = lasco_c3_map.reproject_to(artemis_map_final.wcs) + c2_map_img = lasco_c2_map.reproject_to(artemis_map_final.wcs) + + +############################################################################### +# As the final step we will crop the LASCO C3 image to the limb of the Moon +# and mask regions with no data. + +# Calculate coordinates for each pixel in the map. +all_hpc = sunpy.map.all_coordinates_from_map(c3_map_img) + +# Calculate the angular offset from the center of the moon for each pixel. +moon_cen_offsets = all_hpc.separation(coords['moon']) + +# Create a mask which is True for all offsets greater than the +# observed angular width of the moon. +c3_map_img.mask = np.logical_or( + moon_cen_offsets >= moon_obs, + # Also mask out the parts of the image with no data + c3_map_img.data < 10, +) +# Mask out the parts of the C2 image with no data +c2_map_img.mask = c2_map_img.data < 10 + +############################################################################### +# Now setup a new plot with the same distortion corrected eclipse image and +# reprojected, masked LASCO data. + +fig, ax = plot_artemis_map(artemis_map_final, moon_hpc, planets) + +# Overplot both LASCO images, with autoalign off as we already reprojected them. +c3_map_img.plot(axes=ax, autoalign=False) +c2_map_img.plot(axes=ax, autoalign=False) + +ax.set_title(f"Artemis-II Solar Eclipse {obstime}") +fig.tight_layout() + +# sphinx_gallery_thumbnail_number = -2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/examples/showcase/artemis-ii-trajectory.py new/sunpy-7.1.2/examples/showcase/artemis-ii-trajectory.py --- old/sunpy-7.1.1/examples/showcase/artemis-ii-trajectory.py 1970-01-01 01:00:00.000000000 +0100 +++ new/sunpy-7.1.2/examples/showcase/artemis-ii-trajectory.py 2026-04-19 23:08:51.000000000 +0200 @@ -0,0 +1,161 @@ +""" +===================== +Artemis II trajectory +===================== + +This example visualizes the trajectory of the Artemis II spacecraft. + +Artemis II was NASA's first crewed mission to the Moon since Apollo 17 in 1972, +flying four astronauts around the Moon on a ~10 day test flight in April 2026. +The trajectory is visualized in two different coordinate frames. The plots +also highlight the segment of the trajectory when Artemis II was in eclipse. +""" +import matplotlib.pyplot as plt +import numpy as np +from matplotlib.dates import DateFormatter + +import astropy.units as u +from astropy.constants import R_earth +from astropy.coordinates import solar_system_ephemeris +from astropy.time import Time + +from sunpy.coordinates import get_horizons_coord, sun +from sunpy.time import parse_time + +############################################################################## +# First, define times spanning the Artemis II mission, with higher resolution +# across eclipse transitions (i.e., the four contacts). The contact times are +# approximate. + +t_start = parse_time("2026-Apr-02 01:58:33") +t_c1 = parse_time("2026-Apr-07 00:32:46") # start of partial eclipse +t_c2 = parse_time("2026-Apr-07 00:34:28") # start of total eclipse +t_c3 = parse_time("2026-Apr-07 01:28:55") # end of total eclipse +t_c4 = parse_time("2026-Apr-07 01:31:03") # end of partial eclipse +t_end = parse_time("2026-Apr-10 23:54:22") + +time_spans = [(t_start, t_c1 - 10*u.s, 5*u.min), + (t_c1 - 30*u.s, t_c2 + 30*u.s, 5*u.s), + (t_c2 + 30*u.s, t_c3 - 30*u.s, 5*u.min), + (t_c3 - 30*u.s, t_c4 + 30*u.s, 5*u.s), + (t_c4 + 30*u.s, t_end, 5*u.min)] +times = Time(np.concatenate([np.arange(t1.jd, t2.jd, dt.to_value(u.day)) + for t1, t2, dt in time_spans]), format='jd') + +############################################################################## +# Use JPL Horizons via :func:`~sunpy.coordinates.get_horizons_coord` to +# retrieve relevant coordinates, and then use the coordinate framework to +# convert to ecliptic coordinates. There is no convenient coordinate frame +# for the Earth-Moon system, so convert to a heliocentric frame for now. + +# Use a JPL ephemeris because astropy's built-in ephemeris is not accurate enough +solar_system_ephemeris.set('de440s') + +# Get the Artemis II coordinate in Heliocentric Mean Ecliptic +artemis = get_horizons_coord("Artemis II", times).heliocentricmeanecliptic + +# Get other relevant coordinates +# Specify NAIF IDs for Earth and Moon due to multiple matches for string input +earth = get_horizons_coord(399, times).heliocentricmeanecliptic +moon = get_horizons_coord(301, times).heliocentricmeanecliptic +em_barycenter = get_horizons_coord("Earth-Moon Barycenter", times).heliocentricmeanecliptic + +############################################################################## +# Determine when Artemis II was in eclipse using :func:`sunpy.coordinates.sun.eclipse_amount`. +# When the eclipse percentage is greater than 0, at least part of the Sun is +# eclipsed by the Moon. Be aware that this function assumes a uniform lunar +# radius, but features of the lunar terrain may be comparable to the apparent +# size of the Sun as seen from Artemis II, so the calculation is only an +# approximation. + +eclipse_percentage = sun.eclipse_amount(artemis) +eclipsed = np.flatnonzero(eclipse_percentage > 0) # at least partially eclipsed + +############################################################################## +# Plot the eclipse percentage when transitioning in an out of eclipse. + +fig, axs = plt.subplots(1, 2, layout="constrained") + +axs[0].plot(times.datetime64, eclipse_percentage, '.-') +axs[0].set_xlim((t_c1 - 1*u.min).datetime64, (t_c2 + 1*u.min).datetime64) +axs[0].set_title("Entering eclipse") + +axs[1].plot(times.datetime64, eclipse_percentage, '.-') +axs[1].set_xlim((t_c3 - 1*u.min).datetime64, (t_c4 + 1*u.min).datetime64) +axs[1].set_title("Exiting eclipse") + +for ax in axs: + ax.grid() + ax.xaxis.set_major_formatter(DateFormatter('%m-%d %H:%M')) + ax.tick_params('x', rotation=90) + ax.set_ylabel("Eclipse percentage") + +############################################################################## +# Shift the coordinates to have the Earth-Moon barycenter as the origin, +# convert to units of Earth radii, and keep only the X and Y components for +# later plotting. + +artemis_x, artemis_y, _ = ((artemis.cartesian - em_barycenter.cartesian).xyz / R_earth).decompose() +earth_x, earth_y, _ = ((earth.cartesian - em_barycenter.cartesian).xyz / R_earth).decompose() +moon_x, moon_y, _ = ((moon.cartesian - em_barycenter.cartesian).xyz / R_earth).decompose() + +############################################################################## +# Plot the Artemis II trajectory in fixed ecliptic X-Y coordinates. The motion +# of the Earth relative to the Earth-Moon barycenter is not discernible on +# this plot. The segment of the trajectory when Artemis II was in eclipse is +# highlighted. + +fig, ax = plt.subplots() + +ax.plot(earth_x, earth_y, ls='dashed', color='b', label='Earth') +ax.plot(earth_x[-1], earth_y[-1], '.', color='b') + +ax.plot(moon_x, moon_y, ls='dashed', color='g', label='Moon') +ax.plot(moon_x[-1], moon_y[-1], '.', color='g') + +ax.plot(artemis_x, artemis_y, color='k', label='Artemis II') +ax.plot(artemis_x[-1], artemis_y[-1], '.', color='k') +ax.plot(artemis_x[eclipsed], artemis_y[eclipsed], color='m', lw=3, label='eclipse') + +ax.set_title('Fixed coordinate frame') +ax.set_xlabel('Ecliptic X (Earth radii)') +ax.set_ylabel('Ecliptic Y (Earth radii)') +ax.set_aspect('equal') +ax.legend(loc='center right') + +############################################################################## +# Transform the X and Y components so that the we are in the frame co-rotating +# with the Moon's orbital motion. + +angle = np.arctan2(moon_y, moon_x) +c, s = np.cos(-angle), np.sin(-angle) + +artemis_xp, artemis_yp = artemis_x * c - artemis_y * s, artemis_x * s + artemis_y * c +earth_xp, earth_yp = earth_x * c - earth_y * s, earth_x * s + earth_y * c +moon_xp, moon_yp = moon_x * c - moon_y * s, moon_x * s + moon_y * c + +############################################################################## +# Plot the Artemis II trajectory in coordinates co-rotating with the Moon's +# orbital motion. + +fig, ax = plt.subplots() + +ax.plot(earth_xp, earth_yp, ls='dashed', color='b', label='Earth') +ax.plot(earth_xp[-1], earth_yp[-1], '.', color='b') + +ax.plot(moon_xp, moon_yp, ls='dashed', color='g', label='Moon') +ax.plot(moon_xp[-1], moon_yp[-1], '.', color='g') + +ax.plot(artemis_xp, artemis_yp, color='k', label='Artemis II') +ax.plot(artemis_xp[-1], artemis_yp[-1], '.', color='k') +ax.plot(artemis_xp[eclipsed], artemis_yp[eclipsed], color='m', lw=3, label='eclipse') + +ax.set_title('Coordinate frame co-rotating with the Moon') +ax.set_xlabel('X (Earth radii)') +ax.set_ylabel('Y (Earth radii)') +ax.set_aspect('equal') +ax.legend(loc='center') + +plt.show() + +# sphinx_gallery_thumbnail_number = 3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/pyproject.toml new/sunpy-7.1.2/pyproject.toml --- old/sunpy-7.1.1/pyproject.toml 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/pyproject.toml 2026-04-19 23:08:51.000000000 +0200 @@ -68,7 +68,7 @@ "reproject>=0.13.0", "scipy>=1.12.0", ] -opencv = ["opencv-python>=4.8.0.74"] +opencv = ["opencv-python>=4.8.0.74,!=4.13.0.*"] net = [ "beautifulsoup4>=4.13.1", "drms>=0.7.1", @@ -147,6 +147,7 @@ "astroquery>=0.4.6", "jplephem>=2.19", "pillow", + "exifread", ] dev = ["sunpy[docs,tests]"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/_version.py new/sunpy-7.1.2/sunpy/_version.py --- old/sunpy-7.1.1/sunpy/_version.py 2026-03-26 10:59:06.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/_version.py 2026-04-19 23:09:01.000000000 +0200 @@ -18,7 +18,7 @@ commit_id: str | None __commit_id__: str | None -__version__ = version = '7.1.1' -__version_tuple__ = version_tuple = (7, 1, 1) +__version__ = version = '7.1.2' +__version_tuple__ = version_tuple = (7, 1, 2) -__commit_id__ = commit_id = 'g5984e5d5b' +__commit_id__ = commit_id = 'gd6d084921' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/map/mapbase.py new/sunpy-7.1.2/sunpy/map/mapbase.py --- old/sunpy-7.1.1/sunpy/map/mapbase.py 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/map/mapbase.py 2026-04-19 23:08:51.000000000 +0200 @@ -674,6 +674,11 @@ # Set the shape of the data array w2.array_shape = self.data.shape + # Unlike Astropy we only use SIP distortions if it is in the CTYPE. + if any(t.endswith("-SIP") for t in self.coordinate_system): + sip_wcs = astropy.wcs.WCS(header=self.meta) + w2.sip = sip_wcs.sip + # Validate the WCS here. w2.wcs.set() return w2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/map/sources/tests/test_hmi_source.py new/sunpy-7.1.2/sunpy/map/sources/tests/test_hmi_source.py --- old/sunpy-7.1.1/sunpy/map/sources/tests/test_hmi_source.py 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/map/sources/tests/test_hmi_source.py 2026-04-19 23:08:51.000000000 +0200 @@ -112,11 +112,15 @@ # We use our sample HMI image to test memory mapping because it is large (8 MB data array) @pytest.mark.remote_data def test_memmap(): + from sunpy.data.sample import HMI_LOS_IMAGE + + # Burn in base memory usage associated with Map instantiation + _ = Map(HMI_LOS_IMAGE) + 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() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/map/tests/test_mapbase.py new/sunpy-7.1.2/sunpy/map/tests/test_mapbase.py --- old/sunpy-7.1.1/sunpy/map/tests/test_mapbase.py 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/map/tests/test_mapbase.py 2026-04-19 23:08:51.000000000 +0200 @@ -107,6 +107,41 @@ assert pv_values[6] == (2, 10, 0.1) +def test_wcs_sip(aia171_test_map): + wcs1 = aia171_test_map.wcs + header_sip = wcs1.to_header() + k1 = -7e-12 + + header_sip["CTYPE1"] = header_sip["CTYPE1"] + "-SIP" + header_sip["CTYPE2"] = header_sip["CTYPE2"] + "-SIP" + header_sip['A_ORDER'] = 3 + header_sip['B_ORDER'] = 3 + header_sip['A_3_0'] = -k1 + header_sip['A_1_2'] = -k1 + header_sip['B_0_3'] = -k1 + header_sip['B_2_1'] = -k1 + header_sip['A_DMAX'] = 1.0 + header_sip['B_DMAX'] = 1.0 + + sip_map = sunpy.map.Map(aia171_test_map.data, header_sip) + + sip_wcs = sip_map.wcs + assert sip_wcs.sip is not None + + # The SIP distortion shouldn't affect the ref pixel + ref1 = aia171_test_map.wcs.pixel_to_world(*aia171_test_map.reference_pixel) + ref2 = sip_map.wcs.pixel_to_world(*aia171_test_map.reference_pixel) + + assert u.allclose(ref1.Tx, ref2.Tx) + assert u.allclose(ref1.Ty, ref2.Ty) + + # Pixels away from the ref should be distorted + edge1 = aia171_test_map.wcs.pixel_to_world(1020, 1020) + edge2 = sip_map.wcs.pixel_to_world(1020, 1020) + + assert not u.allclose(edge1.Tx, edge2.Tx) + assert not u.allclose(edge1.Ty, edge2.Ty) + def test_wcs_cache(aia171_test_map): wcs1 = aia171_test_map.wcs wcs2 = aia171_test_map.wcs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_382_astropy_702_animators_121.json new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_382_astropy_702_animators_121.json --- old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_382_astropy_702_animators_121.json 1970-01-01 01:00:00.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_382_astropy_702_animators_121.json 2026-04-19 23:08:51.000000000 +0200 @@ -0,0 +1,94 @@ +{ + "sunpy.image.tests.test_transform.test_clipping": "f36c82068789b048d5855315f295e2404c85b0a63ec77de0e294d58b43c9acaf", + "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": "df339891a624d353fd87ce79dfeda360585d3e32a74f6876b3726d4f32d9da08", + "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": "129afdbcb3de6893187f3bbe20e9107316ae5d04ceecb8a1969befe3bb3ff540", + "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_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]": "800c1148cc30e8ddc540aa555a488f9ed8ba654cd3e055bdd4a08238c2542c9e", + "sunpy.map.tests.test_plotting.test_plot_autoalign[mesh]": "197f06eced7fe4bf8496cf5f3ba4e4cc379ac108be0f212d605007c1e3db062c", + "sunpy.map.tests.test_plotting.test_plot_autoalign[image]": "800c1148cc30e8ddc540aa555a488f9ed8ba654cd3e055bdd4a08238c2542c9e", + "sunpy.map.tests.test_plotting.test_plot_autoalign_datalim": "a5af424f5d70394d4e39a7066793463bec0adae17c9ab46a451640957822bc8d", + "sunpy.map.tests.test_plotting.test_plot_autoalign_pixel_alignment": "88d04e77285edf867f2cc3a77a19adbf75a61df68a34bb57359397b5dab0f4d1", + "sunpy.map.tests.test_plotting.test_plot_autoalign_image_incomplete": "325ee598aa6f2cd4ab8e036d4266f408ea9b5988e1823c3ff22e0eab8584ce5c", + "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.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": "75dc941ae396cb77be3de30b108a6a00eae8b8c48fa2b19e9c04dff82af0109b", + "sunpy.visualization.tests.test_drawing.test_draw_equator_aia171": "e10ed71a0bb1ebd65020723e97c290e9ef22fa303af545529117ef808d8d8c80", + "sunpy.visualization.tests.test_drawing.test_draw_prime_meridian_aia171": "c3cfdafcb5dd168035473c10d3aea0f83af4def909836e6ce1dd07f589ba6ca5", + "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" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json --- old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -{ - "sunpy.image.tests.test_transform.test_clipping": "f36c82068789b048d5855315f295e2404c85b0a63ec77de0e294d58b43c9acaf", - "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": "df339891a624d353fd87ce79dfeda360585d3e32a74f6876b3726d4f32d9da08", - "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": "129afdbcb3de6893187f3bbe20e9107316ae5d04ceecb8a1969befe3bb3ff540", - "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_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]": "800c1148cc30e8ddc540aa555a488f9ed8ba654cd3e055bdd4a08238c2542c9e", - "sunpy.map.tests.test_plotting.test_plot_autoalign[mesh]": "197f06eced7fe4bf8496cf5f3ba4e4cc379ac108be0f212d605007c1e3db062c", - "sunpy.map.tests.test_plotting.test_plot_autoalign[image]": "800c1148cc30e8ddc540aa555a488f9ed8ba654cd3e055bdd4a08238c2542c9e", - "sunpy.map.tests.test_plotting.test_plot_autoalign_datalim": "a5af424f5d70394d4e39a7066793463bec0adae17c9ab46a451640957822bc8d", - "sunpy.map.tests.test_plotting.test_plot_autoalign_pixel_alignment": "88d04e77285edf867f2cc3a77a19adbf75a61df68a34bb57359397b5dab0f4d1", - "sunpy.map.tests.test_plotting.test_plot_autoalign_image_incomplete": "325ee598aa6f2cd4ab8e036d4266f408ea9b5988e1823c3ff22e0eab8584ce5c", - "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.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": "75dc941ae396cb77be3de30b108a6a00eae8b8c48fa2b19e9c04dff82af0109b", - "sunpy.visualization.tests.test_drawing.test_draw_equator_aia171": "e10ed71a0bb1ebd65020723e97c290e9ef22fa303af545529117ef808d8d8c80", - "sunpy.visualization.tests.test_drawing.test_draw_prime_meridian_aia171": "c3cfdafcb5dd168035473c10d3aea0f83af4def909836e6ce1dd07f589ba6ca5", - "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" -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_dev_astropy_dev_animators_dev.json new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_dev_astropy_dev_animators_dev.json --- old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_dev_astropy_dev_animators_dev.json 1970-01-01 01:00:00.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_dev_astropy_dev_animators_dev.json 2026-04-19 23:08:51.000000000 +0200 @@ -0,0 +1,94 @@ +{ + "sunpy.image.tests.test_transform.test_clipping": "45ce3c4b8e1f3df166607b40e1c351dfc0cea35b12c369e7837682cd74f1f190", + "sunpy.image.tests.test_transform.test_nans": "a2c61b11cbd3c27fb34645d77a43aa8cf54cf4500c77761f1c4acf4bccd2e223", + "sunpy.map.tests.test_compositemap.test_autoalign_needed": "3aabd400efda925c76ea9f52e6ff35b2e55b48f5a37d6f7b4b3ca6e0eb670a2c", + "sunpy.map.tests.test_compositemap.test_autoalign_not_needed": "ca87b99d3eb6556938db2cdcb29693838b6d23479cd99b84b459cba0ca4f51d4", + "sunpy.map.tests.test_compositemap.test_peek_composite_map": "a361ece636c91f1c0d0090415254833d646251b3f90e87717b5c1f437634f926", + "sunpy.map.tests.test_compositemap.test_plot_composite_map": "3aabd400efda925c76ea9f52e6ff35b2e55b48f5a37d6f7b4b3ca6e0eb670a2c", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_colors": "afabf49fc230d7cce3e8654f93bc8003b10494306a47ac930fd49e379c0de45d", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_contours": "bf9625a4ba8e2f46a3b8a4970715b4020b24c7d22199884d299f49b039e061af", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_linestyles": "2dec3d990edf53686d10d3ab96eea6f5d963a1a93538210580b00c1a92b0c8ee", + "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "f6936102dafcd52d2103c532b30e89c4c89f0c5de4418956ca3cbcf74a66e10a", + "sunpy.map.tests.test_compositemap.test_set_alpha_composite_map": "b9ed2ee1795f6735d0d6d78d32a5b9b711e79dd04e009d32244fc41a76b6154f", + "sunpy.map.tests.test_map_factory.test_map_jp2_HMI": "0543a91daf4aba425dbd9856c1cb7ffdca26be1a0bbb60488eeed61441492481", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[opencv]": "395f5d2f5e0c79f2247cd6189391bb16ba5e27072da167897937218aa2935e1b", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scikit-image]": "a5fa27410962242a71334363df0c3d224ee31bb79a2341d20fad56c2fa9e3481", + "sunpy.map.tests.test_mapbase.test_derotating_nonpurerotation_pcij[scipy]": "138be10fe0c0c3000c866773e48e15ead9f295c0a576b52a6caac7c7305363bf", + "sunpy.map.tests.test_mapbase.test_draw_carrington_map": "ebdc5f4341cbb3f316d9c8defce4433cfdceae9b82b2b91bf00466d4602d6a65", + "sunpy.map.tests.test_mapbase.test_draw_contours_with_transform": "b3337a429e63eb67ca3d904188b857d05dc48aaf957e448a520e2386e7dd6d18", + "sunpy.map.tests.test_mapbase.test_draw_simple_map": "38b43458e341d0d896ff45c82a882b0ef7810caed178607039a0b1a62bb548f2", + "sunpy.map.tests.test_mapbase.test_rotation_rect_pixelated_data": "e4958838204e6b1de24113b61f6aa5c720497cd2c24f37dd6e6aaf8944ce90ec", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot": "e52e75b857e87a38d52f7ee875aa3979c7ba2d90ad423112d15fcfbb19012cd0", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_clip_interval": "38c09506c305d77afd5ebdacc63f1bc7ce4fd076c96c06d0af661ee9d61a52b4", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_cmap_norm": "00d5e4e139062b434d5185e0f64fe30b1a81a4da9def3e25cc9aed34f911a788", + "sunpy.map.tests.test_mapsequence.test_map_sequence_plot_custom_title": "fc9fe740f640fccc7a5e53c96302b079cab022019f218ecdbe8429f4305cf684", + "sunpy.map.tests.test_mapsequence.test_norm_animator": "c9bb3df202c3a93b19cc50876f830184bd0e4d4e26e76747626ecd37b09347e0", + "sunpy.map.tests.test_plotting.test_draw_contours_aia": "58ca84de5202f102614f87b939d95c38f440ff18dc33c97df779df92f3999d25", + "sunpy.map.tests.test_plotting.test_draw_contours_aia_fill": "4f95b006d8ccf999b1fc263d8aa5831c2a8393b6adb047fe240b1c74043ff968", + "sunpy.map.tests.test_plotting.test_draw_contours_different_wcs": "1f1ae893be3fb186c8d29c93cec1d3601e636e719d1df4aaee6333129444b362", + "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "f79f03e3f33b84c57e992dc3581f72ff6261a87b23458c98e245802dbfdc6930", + "sunpy.map.tests.test_plotting.test_draw_limb_different_observer": "86ff4ef5f3ed259e644a9c535f90883f58b14cf5b10c3f92977ec1ea5365ed38", + "sunpy.map.tests.test_plotting.test_draw_limb_heliographic_stonyhurst": "35683606ced97f0b0a9b5d006354f650bf0af9f60cea9698c879bce946a82103", + "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "a83229e7e0fe3814e88b94620dc2761197d88516779a6ea96d1f1ea199605409", + "sunpy.map.tests.test_plotting.test_heliographic_peek": "ba3d3a31457afc0f3d423cbb8fe04137c2003afbebb8f00f4e94c07585527183", + "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_top_right": "9db4232f67fb7ba5d371d2d3087d32ca32b65e6383cb6210224ab5d26a41c529", + "sunpy.map.tests.test_plotting.test_heliographic_quadrangle_width_height": "0f9ad7b226bb7d50360d4ab81f0cec55278e9137a38c1ad0900c68a9b3f1071b", + "sunpy.map.tests.test_plotting.test_map_draw_extent": "7c4f47dfbf2ee801d94fbd40bac5b6459674c97fb7f573f79efe52a38722599b", + "sunpy.map.tests.test_plotting.test_peek_aia171": "a6c2de0c613492e3dd77456c70b8f837de07fec7d465b575aa84389d2b2be245", + "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "bb15419df628155796b74e1deb7b30e5a9502d78f458b38860f82d0c7d6de8a1", + "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "539eb4374521fd31add197d10251ac566fcc8fb76aadc9601de886a721833d96", + "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "6f88c76cd547c678ab86bab4fe296baeed88abfae3c0eadceadd7823715cd92a", + "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "82ce40f43a08129df4b83746f95aa06fb4225c8ded0389750de549a65f3d5e7c", + "sunpy.map.tests.test_plotting.test_plot_aia171": "e52e75b857e87a38d52f7ee875aa3979c7ba2d90ad423112d15fcfbb19012cd0", + "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "4bd57c317dce9c5f1afdfa1f0e94023900351776ee81620e58c37c76a6a856c4", + "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "f79cb0bb834ebe8f5d96e93aa6c0fd6b93ff98c9ae3ecbe2c04a6b61d12cdc98", + "sunpy.map.tests.test_plotting.test_plot_autoalign[True]": "aec00583b197b1a5e3042ee097893828d5b37a233793e1c00bac3e11bf3301ac", + "sunpy.map.tests.test_plotting.test_plot_autoalign[image]": "aec00583b197b1a5e3042ee097893828d5b37a233793e1c00bac3e11bf3301ac", + "sunpy.map.tests.test_plotting.test_plot_autoalign[mesh]": "5e7d46a37f9b75661e5a676ead38d59f34ac18a297916b28bd0eb6a1e2cc45d6", + "sunpy.map.tests.test_plotting.test_plot_autoalign_datalim": "b0e486ab131fda609029a3a64620e860b70a9c542c3d1152558129e04e846f8d", + "sunpy.map.tests.test_plotting.test_plot_autoalign_image_incomplete": "91040d74b4b9b9f09a3d486545848792e75fc116097f8324abea4043b8643ccf", + "sunpy.map.tests.test_plotting.test_plot_autoalign_pixel_alignment": "fcc53382a574808f06012eab4760b206fd3e5bf38f229883d810870f488e5071", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "51a1bf0993d6862ab2fe9a2be3a9c0ee0e84509206809a7687dd37831de2847d", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "d44104a9b972398ec0ac9e3a9020afd13e305ec9b5bd5fb5a475ce44f4115c79", + "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_conservative_mask_true": "09711d507167ae70d46aff2e52676d663ff2debc5e97546684c3edf73a958e01", + "sunpy.map.tests.test_plotting.test_plot_resample": "52ee22bfcdf30b5009b00e15c983e26b67d94072309adb0a7a8469013aa568a4", + "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "af83310f31294c2d7c4ec188b7433780dab3583cfa94a3777200614323db9dc5", + "sunpy.map.tests.test_plotting.test_plot_superpixel": "ae88dfd735eb1131024c7a70ddbeb2b3c63793a272777cfc3732e320f7914cec", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right": "0cb8f6892c5fb5a29b9acce2296fb177350067e7cb0fc01b055ff17cb286130f", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_top_right_different_axes": "4a644bb5491663a50171bd8db4dd92ab37312816443b5dcca4342d3fcee99d68", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_pix_width_height": "feca366403e47e0587524979370ed40b0daaca0da5c08ccda94329b09b9ce49a", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_top_right": "8b7e680de38ca40688a45cf84ba94ff4d76cfd8e6921c0bb643aaf5c63e9200c", + "sunpy.map.tests.test_plotting.test_quadrangle_aia17_width_height": "743deb72b95fb78b4e6a6dc7324aefc9e5408ad745b5e3e15d5b1696b9160f6a", + "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "2222b190a3b639dd05416495f9695a81801e3d91aa6a8d26aa34c8abc564bd4d", + "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "0a1d75764c3ff65c076c0bd12e4ac00d1ad506f07db6ee9a4333cc14c0392f5d", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[None]": "5df61a75bbde4329543b96dd68ff04db2ae713beb56f680b9ef6f4ab8214bbb6", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[all]": "17bb642f63337daa3feb431de417a634c39c27f944c18ca0a368d344f63a599f", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[corners]": "0c9c9e274c28d9d2a420c68413d3080c743a152809f46a4ce500e7c2869f1559", + "sunpy.map.tests.test_reproject_to.test_reproject_to_auto_extent[edges]": "474d82eb9aeb1f4a8bf58f28e450bc3d10ae59eff324d10389aaad82a51db2f2", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hgs": "0dac9107b33c480c1f0990706958fd5472e79a578548c612231ef483b8abe1a9", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_adaptive": "1b2ae1627d891265b22bc8f633512d365bbbc09954ca266a78aeffba4639028b", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_exact": "bf8da1c2c158665c0462b9c55db4c38a608805e2d4a39b0f8912dd8cca3f14eb", + "sunpy.map.tests.test_reproject_to.test_reproject_to_hpc_interpolation": "3f29022c68615cbfc94294b31e48dd41d1791ac36ca979cfc0fca4c409ab6d54", + "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[PlanarScreen]": "f7fef6ebf50d64098c82c2cf5c5ad388b62e853df6780adc6b5b4d5c141c44f7", + "sunpy.map.tests.test_reproject_to.test_reproject_to_screen_plus_diffrot[SphericalScreen]": "cddf9a465580d22a6c18b554778040ff5290c8057ddbdf7451b158910f0bbc86", + "sunpy.timeseries.sources.tests.test_eve.test_esp_peek": "def94de87f94900813558471037ebd1cbb3777ae73f53a7994a9d05034a020b8", + "sunpy.timeseries.sources.tests.test_eve.test_eve_peek": "60635fe0496c7acd687d1a130c04be42c2f6644f103ca9d4730e0768daac29f8", + "sunpy.timeseries.sources.tests.test_fermi_gbm.test_fermi_gbm_peek": "4b33235b8862a239dfda1e594c96886672399e7c7f400d50f0df5e999355188f", + "sunpy.timeseries.sources.tests.test_goes.test_goes_peek": "7f891a842285d94afc492b9d75cdbbc65d9f6fbd3a3a9876138b49ffa10d2e65", + "sunpy.timeseries.sources.tests.test_goes.test_goes_ylim": "c278f6e36d63ce8b2a8ea5d9baf875a6624b22e4573c9ae900c8da8c47995427", + "sunpy.timeseries.sources.tests.test_lyra.test_lyra_peek": "f54fabd3c8f42977283692cdec9df183f6e318b5d3f8dae3c3b41c14845a4ce9", + "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_ind_peek": "8d553c78b46064d03a2811acd178fa0c6c1cfc425d5a0d1ae1a5395ece19e3e1", + "sunpy.timeseries.sources.tests.test_noaa.test_noaa_json_pre_peek": "736979df04bd61ee7eb84c9290590c58cfd7e4c96363df6eed51355abf905a9f", + "sunpy.timeseries.sources.tests.test_norh.test_norh_peek": "e2a76010927cdf443f5595cb7c9089bcd6046bbaf2680a1b162c7a6c9ef0d295", + "sunpy.timeseries.sources.tests.test_rhessi.test_rhessi_peek": "4d27daf59c58b8d3171cb7419632ea596b8ce1bdff0f37e726cf7677bef54e37", + "sunpy.timeseries.tests.test_timeseriesbase.test_column_subset_peek": "c2d7a46442a7e82c436579971c548c91d59f1974b23945054f8fe21e5b9ec8de", + "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "59c11df98874ad49bb91b03908f41a5cb96ec235682e81b02f4cf84bbaddf1dc", + "sunpy.visualization.animator.tests.test_mapsequenceanimator.test_map_sequence_animator_wcs_simple_plot": "9da6b4c3682b0a996aa4fce296f93915de716a75fca51a38a512c434cbf17646", + "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "c68cd97a4592af1092e9801991d945ee45ba66806bb9b9eb03d4b1e7b8661e36", + "sunpy.visualization.tests.test_drawing.test_draw_equator_aia171": "475f677ed6c1108e78612c4b9f6dbaea0c6a1211f902fe1d54ce6157c1f42c44", + "sunpy.visualization.tests.test_drawing.test_draw_extent": "a755ff30c6199f103165bc3e02ed8a194e4badc949050c417f9d5a4377d2ab22", + "sunpy.visualization.tests.test_drawing.test_draw_extent_3d": "4ce066dbbc0b9134dcdb87691888375bbfef3cf56e252917ce89138837412131", + "sunpy.visualization.tests.test_drawing.test_draw_prime_meridian_aia171": "ee1ca9019c8873bd631ebea6e791792c6179f8f6436f9fa8bcf7ed4859ba09c3", + "sunpy.visualization.tests.test_drawing.test_heliographic_equator_prime_meridian": "22a628bc8e1b644511f2e720d3fbf3252dd3c920c24cf2220ff6c58ec4818f01", + "sunpy.visualization.tests.test_visualization.test_show_hpr_impact_angle": "c5963b0e9a17c4a1ed592d99d7f0979073ecaaa5d2eed766d1a2d8ccd9c7a4f5" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json --- old/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 +++ new/sunpy-7.1.2/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -{ - "sunpy.image.tests.test_transform.test_clipping": "3d4d308a9807a7e0f5f71e5a77f04e671c65c8eb13fe3c6c4d3cfc68c2cf0650", - "sunpy.image.tests.test_transform.test_nans": "776e5a2c12bbbff9f5f9de647052cd2ad1be03b39586b91502c8ebba08e87c1b", - "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_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": "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_visualization.test_show_hpr_impact_angle": "b6cdb96de7411476a395f41c30877ff48db6f17a2f72a3d05b5d8406144072f3" -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy/tests/helpers.py new/sunpy-7.1.2/sunpy/tests/helpers.py --- old/sunpy-7.1.1/sunpy/tests/helpers.py 2026-03-26 10:58:57.000000000 +0100 +++ new/sunpy-7.1.2/sunpy/tests/helpers.py 2026-04-19 23:08:51.000000000 +0200 @@ -90,10 +90,9 @@ import mpl_animators animators_version = "dev" if (("dev" in mpl_animators.__version__) or ("rc" in mpl_animators.__version__)) else mpl_animators.__version__.replace('.', '') - ft2_version = f"{mpl.ft2font.__freetype_version__.replace('.', '')}" mpl_version = "dev" if (("dev" in mpl.__version__) or ("rc" in mpl.__version__)) else mpl.__version__.replace('.', '') astropy_version = "dev" if (("dev" in astropy.__version__) or ("rc" in astropy.__version__)) else astropy.__version__.replace('.', '') - return f"figure_hashes_mpl_{mpl_version}_ft_{ft2_version}_astropy_{astropy_version}_animators_{animators_version}.json" + return f"figure_hashes_mpl_{mpl_version}_astropy_{astropy_version}_animators_{animators_version}.json" def figure_test(test_function): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy.egg-info/PKG-INFO new/sunpy-7.1.2/sunpy.egg-info/PKG-INFO --- old/sunpy-7.1.1/sunpy.egg-info/PKG-INFO 2026-03-26 10:59:06.000000000 +0100 +++ new/sunpy-7.1.2/sunpy.egg-info/PKG-INFO 2026-04-19 23:09:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: sunpy -Version: 7.1.1 +Version: 7.1.2 Summary: SunPy core package: Python for Solar Physics Author-email: The SunPy Community <[email protected]> License-Expression: BSD-3-Clause @@ -56,7 +56,7 @@ Requires-Dist: reproject>=0.13.0; extra == "map" Requires-Dist: scipy>=1.12.0; extra == "map" Provides-Extra: opencv -Requires-Dist: opencv-python>=4.8.0.74; extra == "opencv" +Requires-Dist: opencv-python!=4.13.0.*,>=4.8.0.74; extra == "opencv" Provides-Extra: net Requires-Dist: beautifulsoup4>=4.13.1; extra == "net" Requires-Dist: drms>=0.7.1; extra == "net" @@ -120,12 +120,15 @@ Requires-Dist: astroquery>=0.4.6; extra == "docs-gallery" Requires-Dist: jplephem>=2.19; extra == "docs-gallery" Requires-Dist: pillow; extra == "docs-gallery" +Requires-Dist: exifread; extra == "docs-gallery" Provides-Extra: dev Requires-Dist: sunpy[docs,tests]; extra == "dev" Dynamic: license-file +``sunpy`` +========= + SunPy core package: Python for Solar Physics -============================================ |SunPy Logo| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy.egg-info/SOURCES.txt new/sunpy-7.1.2/sunpy.egg-info/SOURCES.txt --- old/sunpy-7.1.1/sunpy.egg-info/SOURCES.txt 2026-03-26 10:59:06.000000000 +0100 +++ new/sunpy-7.1.2/sunpy.egg-info/SOURCES.txt 2026-04-19 23:09:02.000000000 +0200 @@ -212,6 +212,8 @@ examples/saving_and_loading_data/genericmap_in_fits.py examples/saving_and_loading_data/load_adapt_fits_into_map.py examples/showcase/README.txt +examples/showcase/artemis-ii-eclipse.py +examples/showcase/artemis-ii-trajectory.py examples/showcase/eclipse_amount.py examples/showcase/hmi_cutout.py examples/showcase/los_simulation_box_intersection.py @@ -701,8 +703,8 @@ sunpy/sun/tests/test_constants.py sunpy/sun/tests/test_models.py sunpy/tests/__init__.py -sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json -sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json +sunpy/tests/figure_hashes_mpl_382_astropy_702_animators_121.json +sunpy/tests/figure_hashes_mpl_dev_astropy_dev_animators_dev.json sunpy/tests/helpers.py sunpy/tests/mocks.py sunpy/tests/self_test.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sunpy-7.1.1/sunpy.egg-info/requires.txt new/sunpy-7.1.2/sunpy.egg-info/requires.txt --- old/sunpy-7.1.1/sunpy.egg-info/requires.txt 2026-03-26 10:59:06.000000000 +0100 +++ new/sunpy-7.1.2/sunpy.egg-info/requires.txt 2026-04-19 23:09:01.000000000 +0200 @@ -51,6 +51,7 @@ astroquery>=0.4.6 jplephem>=2.19 pillow +exifread [image] scipy>=1.12.0 @@ -78,7 +79,7 @@ zeep>=4.3.0 [opencv] -opencv-python>=4.8.0.74 +opencv-python!=4.13.0.*,>=4.8.0.74 [s3] fsspec[s3]>=2023.6.0
