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.
Files changed (65) hide show
  1. {planetarypy-0.76.0 → planetarypy-0.76.2}/CHANGELOG.md +12 -0
  2. {planetarypy-0.76.0 → planetarypy-0.76.2}/PKG-INFO +2 -1
  3. {planetarypy-0.76.0 → planetarypy-0.76.2}/pyproject.toml +3 -2
  4. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/__init__.py +1 -1
  5. planetarypy-0.76.2/src/planetarypy/spice/_deps.py +19 -0
  6. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/generic_kernels.py +1 -2
  7. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/spicer.py +5 -2
  8. {planetarypy-0.76.0 → planetarypy-0.76.2}/.gitignore +0 -0
  9. {planetarypy-0.76.0 → planetarypy-0.76.2}/AUTHORS.md +0 -0
  10. {planetarypy-0.76.0 → planetarypy-0.76.2}/LICENSE +0 -0
  11. {planetarypy-0.76.0 → planetarypy-0.76.2}/README.md +0 -0
  12. {planetarypy-0.76.0 → planetarypy-0.76.2}/docs/README.md +0 -0
  13. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/__init__.py +0 -0
  14. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_index_resolver.py +0 -0
  15. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_mission_map.py +0 -0
  16. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_objects.py +0 -0
  17. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_parser.py +0 -0
  18. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_pattern_resolver.py +0 -0
  19. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_repo.py +0 -0
  20. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_resolver.py +0 -0
  21. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_schema.py +0 -0
  22. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_url_rewrite.py +0 -0
  23. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/catalog/_validation.py +0 -0
  24. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/cli.py +0 -0
  25. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/config.py +0 -0
  26. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/__init__.py +0 -0
  27. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/_gm_jpl.py +0 -0
  28. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/base.py +0 -0
  29. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/iau2009.py +0 -0
  30. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/iau2015.py +0 -0
  31. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/__init__.py +0 -0
  32. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/_loader.py +0 -0
  33. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/crs.py +0 -0
  34. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/data/__init__.py +0 -0
  35. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/datetime_format_converters.py +0 -0
  36. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/geo.py +0 -0
  37. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/__init__.py +0 -0
  38. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/go/__init__.py +0 -0
  39. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/go/ssi.py +0 -0
  40. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/__init__.py +0 -0
  41. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/__init__.py +0 -0
  42. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_calib.py +0 -0
  43. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_edr.py +0 -0
  44. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/hirise.py +0 -0
  45. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/instruments/utils.py +0 -0
  46. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/io.py +0 -0
  47. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/isis/autoseed.py +0 -0
  48. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/__init__.py +0 -0
  49. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_index.py +0 -0
  50. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_url_handlers.py +0 -0
  51. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_fixes.py +0 -0
  52. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_labels.py +0 -0
  53. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_logging.py +0 -0
  54. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/index_main.py +0 -0
  55. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/meta_display.py +0 -0
  56. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/static_index.py +0 -0
  57. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/pds/utils.py +0 -0
  58. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/plotting.py +0 -0
  59. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/psa.py +0 -0
  60. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/search.py +0 -0
  61. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/__init__.py +0 -0
  62. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/archived_kernels.py +0 -0
  63. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/config.py +0 -0
  64. {planetarypy-0.76.0 → planetarypy-0.76.2}/src/planetarypy/spice/pckernels.py +0 -0
  65. {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.0
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.0"
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.0"
204
+ current_version = "0.76.2"
204
205
  commit = true
205
206
  tag = true
206
207
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  __author__ = """PlanetaryPy Developers"""
4
4
  __email__ = "kmichael.aye@gmail.com"
5
- __version__ = "0.76.0"
5
+ __version__ = "0.76.2"
6
6
 
7
7
  __all__ = [
8
8
  "enable_logging",
@@ -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
@@ -18,8 +18,7 @@ __all__ = [
18
18
 
19
19
  from pathlib import Path
20
20
 
21
- import spiceypy as spice
22
-
21
+ from ._deps import spice
23
22
  from ..utils import url_retrieve
24
23
  from .config import KERNEL_STORAGE, NAIF_URL
25
24
 
@@ -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
- from scipy.spatial.transform import Rotation
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