planetarypy 0.76.1__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.1 → planetarypy-0.76.2}/CHANGELOG.md +6 -0
  2. {planetarypy-0.76.1 → planetarypy-0.76.2}/PKG-INFO +1 -1
  3. {planetarypy-0.76.1 → planetarypy-0.76.2}/pyproject.toml +2 -2
  4. {planetarypy-0.76.1 → 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.1 → planetarypy-0.76.2}/src/planetarypy/spice/generic_kernels.py +1 -2
  7. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/spice/spicer.py +5 -2
  8. {planetarypy-0.76.1 → planetarypy-0.76.2}/.gitignore +0 -0
  9. {planetarypy-0.76.1 → planetarypy-0.76.2}/AUTHORS.md +0 -0
  10. {planetarypy-0.76.1 → planetarypy-0.76.2}/LICENSE +0 -0
  11. {planetarypy-0.76.1 → planetarypy-0.76.2}/README.md +0 -0
  12. {planetarypy-0.76.1 → planetarypy-0.76.2}/docs/README.md +0 -0
  13. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/__init__.py +0 -0
  14. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_index_resolver.py +0 -0
  15. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_mission_map.py +0 -0
  16. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_objects.py +0 -0
  17. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_parser.py +0 -0
  18. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_pattern_resolver.py +0 -0
  19. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_repo.py +0 -0
  20. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_resolver.py +0 -0
  21. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_schema.py +0 -0
  22. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_url_rewrite.py +0 -0
  23. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/catalog/_validation.py +0 -0
  24. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/cli.py +0 -0
  25. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/config.py +0 -0
  26. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/__init__.py +0 -0
  27. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/_gm_jpl.py +0 -0
  28. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/base.py +0 -0
  29. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/iau2009.py +0 -0
  30. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/iau2015.py +0 -0
  31. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/__init__.py +0 -0
  32. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/constants/nssdc/_loader.py +0 -0
  33. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/crs.py +0 -0
  34. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/data/__init__.py +0 -0
  35. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/datetime_format_converters.py +0 -0
  36. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/geo.py +0 -0
  37. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/__init__.py +0 -0
  38. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/go/__init__.py +0 -0
  39. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/go/ssi.py +0 -0
  40. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/__init__.py +0 -0
  41. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/__init__.py +0 -0
  42. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_calib.py +0 -0
  43. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/ctx/ctx_edr.py +0 -0
  44. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/mro/hirise.py +0 -0
  45. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/instruments/utils.py +0 -0
  46. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/io.py +0 -0
  47. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/isis/autoseed.py +0 -0
  48. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/__init__.py +0 -0
  49. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_index.py +0 -0
  50. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/dynamic_url_handlers.py +0 -0
  51. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/index_fixes.py +0 -0
  52. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/index_labels.py +0 -0
  53. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/index_logging.py +0 -0
  54. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/index_main.py +0 -0
  55. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/meta_display.py +0 -0
  56. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/static_index.py +0 -0
  57. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/pds/utils.py +0 -0
  58. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/plotting.py +0 -0
  59. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/psa.py +0 -0
  60. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/search.py +0 -0
  61. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/spice/__init__.py +0 -0
  62. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/spice/archived_kernels.py +0 -0
  63. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/spice/config.py +0 -0
  64. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/spice/pckernels.py +0 -0
  65. {planetarypy-0.76.1 → planetarypy-0.76.2}/src/planetarypy/utils.py +0 -0
@@ -5,6 +5,12 @@ 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
+
8
14
  ## [0.76.1] - 2026-06-12
9
15
 
10
16
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: planetarypy
3
- Version: 0.76.1
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "planetarypy"
7
- version = "0.76.1"
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"
@@ -201,7 +201,7 @@ DEP003 = [
201
201
  ]
202
202
 
203
203
  [tool.bumpversion]
204
- current_version = "0.76.1"
204
+ current_version = "0.76.2"
205
205
  commit = true
206
206
  tag = true
207
207
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  __author__ = """PlanetaryPy Developers"""
4
4
  __email__ = "kmichael.aye@gmail.com"
5
- __version__ = "0.76.1"
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