planetarypy 0.76.0__tar.gz → 0.76.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {planetarypy-0.76.0 → planetarypy-0.76.2}/CHANGELOG.md +12 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/PKG-INFO +2 -1
- {planetarypy-0.76.0 → planetarypy-0.76.2}/pyproject.toml +3 -2
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/__init__.py +1 -1
- planetarypy-0.76.2/src/planetarypy/spice/_deps.py +19 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/generic_kernels.py +1 -2
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/spicer.py +5 -2
- {planetarypy-0.76.0 → planetarypy-0.76.2}/.gitignore +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/AUTHORS.md +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/LICENSE +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/README.md +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/docs/README.md +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_index_resolver.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_mission_map.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_objects.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_parser.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_pattern_resolver.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_repo.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_resolver.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_schema.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_url_rewrite.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_validation.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/cli.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/config.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/_gm_jpl.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/base.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/iau2009.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/iau2015.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/_loader.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/crs.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/data/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/datetime_format_converters.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/geo.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/go/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/go/ssi.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_calib.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_edr.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/hirise.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/utils.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/io.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/isis/autoseed.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_index.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_url_handlers.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_fixes.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_labels.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_logging.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_main.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/meta_display.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/static_index.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/utils.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/plotting.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/psa.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/search.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/__init__.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/archived_kernels.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/config.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/pckernels.py +0 -0
- {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/utils.py +0 -0
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.76.2] - 2026-06-12
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Graceful error when the optional `[spice]` extra is missing.** `spiceypy` and `scipy` ship in the `[spice]` extra rather than core, so a bare `pip install planetarypy` does not have them — yet importing `planetarypy.spice` (or `planetarypy.spice.spicer`) failed with a bare `ModuleNotFoundError: No module named 'spiceypy'` that gave no hint about the fix. SPICE imports now route through a small guard that raises a clear `ImportError` telling the user to `pip install 'planetarypy[spice]'` (the conda package ships SPICE by default). Core is unaffected — `planetarypy` itself never imports SPICE, and the `scipy` import in `spicer.py` stays lazy.
|
|
13
|
+
|
|
14
|
+
## [0.76.1] - 2026-06-12
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Declare `pyarrow` as a core dependency.** The PDS index cache writes and reads its parquet files through pandas (`to_parquet`/`read_parquet`), which needs a parquet engine that pandas does not bundle. `pyarrow` was never declared, so a clean `pip install planetarypy` raised `ImportError: Unable to find a usable engine` the first time any index was downloaded or read back. The gap went unnoticed because the CI test gate installs its dependencies from conda-forge, which pulls `pyarrow` in transitively and masked the missing declaration that pip-based installs — and real users — actually hit; the new pip-based daily PDS-download smoke canary surfaced it. Now declared in both the PyPI core dependencies and the conda recipe.
|
|
19
|
+
|
|
8
20
|
## [0.76.0] - 2026-06-11
|
|
9
21
|
|
|
10
22
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: planetarypy
|
|
3
|
-
Version: 0.76.
|
|
3
|
+
Version: 0.76.2
|
|
4
4
|
Summary: Core package for planetary data tools. Includes PDS index utilities, SPICE integrations, and more.
|
|
5
5
|
Project-URL: Homepage, https://github.com/planetarypy/planetarypy
|
|
6
6
|
Project-URL: Repository, https://github.com/planetarypy/planetarypy
|
|
@@ -29,6 +29,7 @@ Requires-Dist: pandas
|
|
|
29
29
|
Requires-Dist: pdr[pillow]
|
|
30
30
|
Requires-Dist: pooch
|
|
31
31
|
Requires-Dist: pvl
|
|
32
|
+
Requires-Dist: pyarrow
|
|
32
33
|
Requires-Dist: pyproj
|
|
33
34
|
Requires-Dist: python-dateutil
|
|
34
35
|
Requires-Dist: rasterio
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "planetarypy"
|
|
7
|
-
version = "0.76.
|
|
7
|
+
version = "0.76.2"
|
|
8
8
|
description = "Core package for planetary data tools. Includes PDS index utilities, SPICE integrations, and more."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">= 3.11, <4"
|
|
@@ -29,6 +29,7 @@ dependencies = [
|
|
|
29
29
|
"typer>=0.9", # For command-line interface
|
|
30
30
|
"numpy", # For numerical operations
|
|
31
31
|
"pandas", # For data handling
|
|
32
|
+
"pyarrow", # Parquet engine for the PDS index cache (pandas to_parquet/read_parquet)
|
|
32
33
|
"pooch", # For downloading and caching data files
|
|
33
34
|
"pvl", # For PDS label parsing
|
|
34
35
|
"lxml", # Runtime backend for pandas.read_html in spice/archived_kernels.py
|
|
@@ -200,7 +201,7 @@ DEP003 = [
|
|
|
200
201
|
]
|
|
201
202
|
|
|
202
203
|
[tool.bumpversion]
|
|
203
|
-
current_version = "0.76.
|
|
204
|
+
current_version = "0.76.2"
|
|
204
205
|
commit = true
|
|
205
206
|
tag = true
|
|
206
207
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Friendly import guard for the optional SPICE dependency stack.
|
|
2
|
+
|
|
3
|
+
``spiceypy`` and ``scipy`` ship in the ``[spice]`` extra rather than core, so a
|
|
4
|
+
bare ``pip install planetarypy`` does not have them. Routing their imports
|
|
5
|
+
through this module turns an otherwise cryptic ``ModuleNotFoundError`` into an
|
|
6
|
+
actionable hint pointing at the extra.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
SPICE_INSTALL_HINT = (
|
|
10
|
+
"planetarypy SPICE support requires the optional 'spice' dependencies "
|
|
11
|
+
"(spiceypy, scipy), which are not installed. Install them with:\n\n"
|
|
12
|
+
" pip install 'planetarypy[spice]'\n\n"
|
|
13
|
+
"(The conda package ships them by default.)"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
import spiceypy as spice # noqa: F401
|
|
18
|
+
except ImportError as exc: # pragma: no cover - only without the [spice] extra
|
|
19
|
+
raise ImportError(SPICE_INSTALL_HINT) from exc
|
|
@@ -36,8 +36,8 @@ from math import tau
|
|
|
36
36
|
|
|
37
37
|
import dateutil.parser as tparser
|
|
38
38
|
import numpy as np
|
|
39
|
-
import spiceypy as spice
|
|
40
39
|
|
|
40
|
+
from ._deps import SPICE_INSTALL_HINT, spice
|
|
41
41
|
from .generic_kernels import load_generic_kernels
|
|
42
42
|
|
|
43
43
|
_kernels_loaded = False
|
|
@@ -64,7 +64,10 @@ def _rotate_vector(vector, axis, angle_rad):
|
|
|
64
64
|
np.ndarray
|
|
65
65
|
Rotated 3D vector.
|
|
66
66
|
"""
|
|
67
|
-
|
|
67
|
+
try:
|
|
68
|
+
from scipy.spatial.transform import Rotation
|
|
69
|
+
except ImportError as exc: # pragma: no cover - only without the [spice] extra
|
|
70
|
+
raise ImportError(SPICE_INSTALL_HINT) from exc
|
|
68
71
|
|
|
69
72
|
axis = np.array(axis, dtype=np.float64)
|
|
70
73
|
axis /= np.linalg.norm(axis)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|