Skill Tracer
Skills › Scientific Agent Skills › astropy › review.md

review.md

102 lines · skills/astropy/references/review.md at 5f2bc03

Open on GitHub
1# Astropy review and verification
2
3Reviewed 2026-09-30 against official stable **Astropy 8.0.1** documentation,
4release notes, PyPI metadata and installed 8.0.1 source. Python 3.11+ and NumPy
52+ are required. The installed test stack used NumPy 2.5.1 and SciPy 1.18.1.
6

Astropy review and verification

Reviewed 2026-09-30 against official stable Astropy 8.0.1 documentation, release notes, PyPI metadata and installed 8.0.1 source. Python 3.11+ and NumPy 2+ are required. The installed test stack used NumPy 2.5.1 and SciPy 1.18.1.

Raw lines 1 to 6
7## Executed scope
8
9`tests/astropy/test_workflows.py` exercises small synthetic data only:
11- Units: spectral and Doppler round trips, magnitude conversion, no-copy aliases,
12 scoped custom units.
13- Coordinates: ICRS/Galactic round trip, FK5 equinox, unrefracted AltAz, proper
14 motion propagation, unit-aware columns and repeated nearest-neighbor matches.
15- Time: same-instant scale conversion, UTC leap second interval, two-part JD,
16 masks, sidereal/rotation angles and barycentric time/RV corrections.
17- Cosmology: distance duality, angular-size units, age/lookback identity,
18 two inverse-distance branches, named cloning and differential-volume units.
19- FITS/table: images, sections, headers, checksums, logical NULL/variable-length
20 columns, ECSV/FITS masks and Time, table indices, copying, joins, HDF5, Pandas
21 and a tiny Dask write.
22- WCS: FITS versus zero-based pixel origin, NumPy row/column order, round trip,
23 footprint and scale representation. Modeling/other modules: Gaussian fit and
24 compound models, CCDData uncertainty round trip, normalization, convolution,
25 robust statistics and constants.
27A supplemental synthetic smoke also executed the remaining listed unit helpers,
28coordinate representations, cosmology distance/density methods, Time formats and
29scales, table mutations and local formats, FITS update/append/diff, model
30constructors and progress API. It reproduced the unnamed-cosmology clone failure
31and the unrestricted `w0wzCDM.age` failure documented in the cosmology reference.
33IERS auto-download was disabled; 2023 epochs are covered by bundled data. These
34checks establish API behavior on synthetic examples, not calibration accuracy,
35real-observation validity or every optional backend. The standalone fragments
36throughout the references are recipes, not one sequential program. File/column
37placeholders need the user's corresponding inputs. Remote resolver/geocoder,
38S3, large-file performance, browser display, SAMP hub and external ephemeris
39examples are illustrative and were not run end to end. The broad `[all]` extras
40installation was not exercised; only the local test dependencies were installed.

Executed scope

tests/astropy/test_workflows.py exercises small synthetic data only:

  • Units: spectral and Doppler round trips, magnitude conversion, no-copy aliases, scoped custom units.
  • Coordinates: ICRS/Galactic round trip, FK5 equinox, unrefracted AltAz, proper motion propagation, unit-aware columns and repeated nearest-neighbor matches.
  • Time: same-instant scale conversion, UTC leap second interval, two-part JD, masks, sidereal/rotation angles and barycentric time/RV corrections.
  • Cosmology: distance duality, angular-size units, age/lookback identity, two inverse-distance branches, named cloning and differential-volume units.
  • FITS/table: images, sections, headers, checksums, logical NULL/variable-length columns, ECSV/FITS masks and Time, table indices, copying, joins, HDF5, Pandas and a tiny Dask write.
  • WCS: FITS versus zero-based pixel origin, NumPy row/column order, round trip, footprint and scale representation. Modeling/other modules: Gaussian fit and compound models, CCDData uncertainty round trip, normalization, convolution, robust statistics and constants.

A supplemental synthetic smoke also executed the remaining listed unit helpers, coordinate representations, cosmology distance/density methods, Time formats and scales, table mutations and local formats, FITS update/append/diff, model constructors and progress API. It reproduced the unnamed-cosmology clone failure and the unrestricted w0wzCDM.age failure documented in the cosmology reference.

IERS auto-download was disabled; 2023 epochs are covered by bundled data. These checks establish API behavior on synthetic examples, not calibration accuracy, real-observation validity or every optional backend. The standalone fragments throughout the references are recipes, not one sequential program. File/column placeholders need the user's corresponding inputs. Remote resolver/geocoder, S3, large-file performance, browser display, SAMP hub and external ephemeris examples are illustrative and were not run end to end. The broad [all] extras installation was not exercised; only the local test dependencies were installed.

Raw lines 7 to 41
42## Remote surfaces and provenance
44This skill uses Python interfaces, not a paginated astronomy REST client. The
45following network behavior was checked against the current SDK source/docs:
47| Interface | Verified contract and boundary |
48| --- | --- |
49| `SkyCoord.from_name(name)` | Sesame resolver; returns a `SkyCoord` or raises a resolution error. SDK constructs a database selector plus URL-encoded object name; defaults to all databases and may try configured mirrors. No authentication or pagination. Record returned coordinates, frame, service and date; names are disclosed to the resolver. |
50| `EarthLocation.of_site` / `get_site_names` | Reads `coordinates/sites.json` through Astropy's data server/cache. An empty cache causes a download; `refresh_cache=True` replaces it. Preserve retrieved geodetic values and registry metadata for reproducibility. |
51| `EarthLocation.of_address` | Nominatim `GET /search?q=...&format=json` by default; first result is used. Google `GET /maps/api/geocode/json?address=...&key=...` with a supplied key; optional elevation uses `/maps/api/elevation/json?locations=lat,lon&key=...`. Height defaults to zero. These convenience calls are not precision survey measurements or a bulk geocoding service. |
52| IERS/time transforms | Bundled `astropy-iers-data`; auto-download can fetch IERS-A from `https://datacenter.iers.org/data/9/finals2000A.all`, with USNO mirror `https://maia.usno.navy.mil/ser7/finals2000A.all`. Disabling auto-download also suppresses online leap-second refresh. Record data version/coverage and handle degraded accuracy explicitly. |
53| `fits.open(..., use_fsspec=True)` | Uses the selected filesystem backend and its auth. Anonymous S3 requires public data; `.section` enables partial access subject to range/backend/compression behavior. No generic Astropy authentication or pagination contract. |
54| `download_file(url, cache=True)` | Fetches the supplied URL and returns a local filename; caching is opt-in. `cache=False` uses temporary storage rather than guaranteeing no local persistence during execution. |
55| `pyvo.samp.SAMPIntegratedClient` | Replacement for deprecated `astropy.samp`; requires a hub. `notify_all` discloses the supplied table URI to connected clients, so it belongs only in an explicitly requested sharing workflow. |
57Do not substitute HTTP status probes for scientific payload verification. No
58private targets, credentials, authenticated service requests or large remote
59datasets were used in this review. Provider limits still apply; public Nominatim
60requires an identifying user agent and at most one request per second, so do not
61copy the older high-throughput wording from Astropy's method docstring.

Remote surfaces and provenance

This skill uses Python interfaces, not a paginated astronomy REST client. The following network behavior was checked against the current SDK source/docs:

InterfaceVerified contract and boundary
SkyCoord.from_name(name)Sesame resolver; returns a SkyCoord or raises a resolution error. SDK constructs a database selector plus URL-encoded object name; defaults to all databases and may try configured mirrors. No authentication or pagination. Record returned coordinates, frame, service and date; names are disclosed to the resolver.
EarthLocation.of_site / get_site_namesReads coordinates/sites.json through Astropy's data server/cache. An empty cache causes a download; refresh_cache=True replaces it. Preserve retrieved geodetic values and registry metadata for reproducibility.
EarthLocation.of_addressNominatim GET /search?q=...&format=json by default; first result is used. Google GET /maps/api/geocode/json?address=...&key=... with a supplied key; optional elevation uses /maps/api/elevation/json?locations=lat,lon&key=.... Height defaults to zero. These convenience calls are not precision survey measurements or a bulk geocoding service.
IERS/time transformsBundled astropy-iers-data; auto-download can fetch IERS-A from https://datacenter.iers.org/data/9/finals2000A.all, with USNO mirror https://maia.usno.navy.mil/ser7/finals2000A.all. Disabling auto-download also suppresses online leap-second refresh. Record data version/coverage and handle degraded accuracy explicitly.
fits.open(..., use_fsspec=True)Uses the selected filesystem backend and its auth. Anonymous S3 requires public data; .section enables partial access subject to range/backend/compression behavior. No generic Astropy authentication or pagination contract.
download_file(url, cache=True)Fetches the supplied URL and returns a local filename; caching is opt-in. cache=False uses temporary storage rather than guaranteeing no local persistence during execution.
pyvo.samp.SAMPIntegratedClientReplacement for deprecated astropy.samp; requires a hub. notify_all discloses the supplied table URI to connected clients, so it belongs only in an explicitly requested sharing workflow.

Do not substitute HTTP status probes for scientific payload verification. No private targets, credentials, authenticated service requests or large remote datasets were used in this review. Provider limits still apply; public Nominatim requires an identifying user agent and at most one request per second, so do not copy the older high-throughput wording from Astropy's method docstring.

Raw lines 42 to 62
63## Official sources
65- [8.0 changes](https://docs.astropy.org/en/stable/whatsnew/8.0.html),
66 [full changelog](https://docs.astropy.org/en/stable/changelog.html),
67 [release metadata](https://pypi.org/pypi/astropy/json).
68- [Units](https://docs.astropy.org/en/stable/units/index.html),
69 [Quantity behavior](https://docs.astropy.org/en/stable/units/quantity.html).
70- [Coordinates](https://docs.astropy.org/en/stable/coordinates/index.html),
71 [SkyCoord API](https://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html),
72 [EarthLocation API](https://docs.astropy.org/en/stable/api/astropy.coordinates.EarthLocation.html),
73 [remote methods](https://docs.astropy.org/en/stable/coordinates/remote_methods.html),
74 [8.0.1 resolver source](https://github.com/astropy/astropy/blob/v8.0.1/astropy/coordinates/name_resolve.py),
75 [8.0.1 location source](https://github.com/astropy/astropy/blob/v8.0.1/astropy/coordinates/earth.py),
76 [Nominatim policy](https://operations.osmfoundation.org/policies/nominatim/),
77 [Nominatim search](https://nominatim.org/release-docs/latest/api/Search/),
78 [Google geocoding](https://developers.google.com/maps/documentation/geocoding/guides-v3/requests-geocoding),
79 [Google elevation](https://developers.google.com/maps/documentation/elevation/requests-elevation).
80- [Time](https://docs.astropy.org/en/stable/time/index.html),
81 [IERS](https://docs.astropy.org/en/stable/utils/iers.html).
82- [FITS](https://docs.astropy.org/en/stable/io/fits/index.html),
83 [file API](https://docs.astropy.org/en/stable/io/fits/api/files.html),
84 [remote FITS](https://docs.astropy.org/en/stable/io/fits/usage/cloud.html),
85 [FITS tables](https://docs.astropy.org/en/stable/io/unified_table_fits.html).
86- [Tables](https://docs.astropy.org/en/stable/table/index.html),
87 [copy/view behavior](https://docs.astropy.org/en/stable/table/access_table.html),
88 [unique API](https://docs.astropy.org/en/stable/api/astropy.table.unique.html).
89- [Cosmology](https://docs.astropy.org/en/stable/cosmology/index.html),
90 [inverse branches](https://docs.astropy.org/en/stable/api/astropy.cosmology.z_at_value.html),
91 [linear dark-energy limits](https://docs.astropy.org/en/stable/api/astropy.cosmology.w0wzCDM.html).
92- [WCS interface](https://docs.astropy.org/en/stable/wcs/wcsapi.html),
93 [WCS API](https://docs.astropy.org/en/stable/api/astropy.wcs.WCS.html).
94- [NDData](https://docs.astropy.org/en/stable/nddata/index.html),
95 [fitters](https://docs.astropy.org/en/stable/modeling/fitting.html),
96 [Gaussian1D](https://docs.astropy.org/en/stable/api/astropy.modeling.functional_models.Gaussian1D.html),
97 [normalization](https://docs.astropy.org/en/stable/visualization/normalization.html),
98 [convolution](https://docs.astropy.org/en/stable/convolution/index.html),
99 [statistics](https://docs.astropy.org/en/stable/stats/index.html),
100 [constants](https://docs.astropy.org/en/stable/constants/index.html),
101 [download API](https://docs.astropy.org/en/stable/api/astropy.utils.data.download_file.html),
102 [PyVO SAMP](https://pyvo.readthedocs.io/en/latest/samp/index.html).