spicekit 0.2.1__tar.gz → 0.2.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 (37) hide show
  1. {spicekit-0.2.1 → spicekit-0.2.2}/Cargo.lock +9 -10
  2. {spicekit-0.2.1 → spicekit-0.2.2}/Cargo.toml +1 -1
  3. {spicekit-0.2.1 → spicekit-0.2.2}/PKG-INFO +1 -1
  4. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/README.md +26 -16
  5. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/daf.rs +1 -1
  6. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/lib.rs +6 -4
  7. spicekit-0.2.2/crates/spicekit/src/text_kernel.rs +949 -0
  8. {spicekit-0.2.1 → spicekit-0.2.2}/pyproject.toml +1 -1
  9. spicekit-0.2.1/crates/spicekit/src/text_kernel.rs +0 -521
  10. {spicekit-0.2.1 → spicekit-0.2.2}/LICENSE +0 -0
  11. {spicekit-0.2.1 → spicekit-0.2.2}/LICENSE-NOTICES +0 -0
  12. {spicekit-0.2.1 → spicekit-0.2.2}/README.md +0 -0
  13. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/Cargo.toml +0 -0
  14. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/LICENSE +0 -0
  15. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/LICENSE-NOTICES +0 -0
  16. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/examples/read_spk.rs +0 -0
  17. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/frame.rs +0 -0
  18. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/naif_builtin_table.rs +0 -0
  19. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/naif_ids.rs +0 -0
  20. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/pck.rs +0 -0
  21. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/spk.rs +0 -0
  22. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/spk_writer.rs +0 -0
  23. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/Cargo.toml +0 -0
  24. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/LICENSE +0 -0
  25. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/LICENSE-NOTICES +0 -0
  26. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/README.md +0 -0
  27. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/examples/read_spk.py +0 -0
  28. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/src/lib.rs +0 -0
  29. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/conftest.py +0 -0
  30. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_names.py +0 -0
  31. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_pck.py +0 -0
  32. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_spk.py +0 -0
  33. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_spk_writer.py +0 -0
  34. {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_text_kernel.py +0 -0
  35. {spicekit-0.2.1 → spicekit-0.2.2}/python/spicekit/__init__.py +0 -0
  36. {spicekit-0.2.1 → spicekit-0.2.2}/python/spicekit/__init__.pyi +0 -0
  37. {spicekit-0.2.1 → spicekit-0.2.2}/python/spicekit/py.typed +0 -0
@@ -895,15 +895,14 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
895
895
 
896
896
  [[package]]
897
897
  name = "openssl"
898
- version = "0.10.78"
898
+ version = "0.10.79"
899
899
  source = "registry+https://github.com/rust-lang/crates.io-index"
900
- checksum = "f38c4372413cdaaf3cc79dd92d29d7d9f5ab09b51b10dded508fb90bb70b9222"
900
+ checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542"
901
901
  dependencies = [
902
902
  "bitflags 2.11.1",
903
903
  "cfg-if",
904
904
  "foreign-types",
905
905
  "libc",
906
- "once_cell",
907
906
  "openssl-macros",
908
907
  "openssl-sys",
909
908
  ]
@@ -927,9 +926,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
927
926
 
928
927
  [[package]]
929
928
  name = "openssl-sys"
930
- version = "0.9.114"
929
+ version = "0.9.115"
931
930
  source = "registry+https://github.com/rust-lang/crates.io-index"
932
- checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6"
931
+ checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781"
933
932
  dependencies = [
934
933
  "cc",
935
934
  "libc",
@@ -1374,7 +1373,7 @@ dependencies = [
1374
1373
 
1375
1374
  [[package]]
1376
1375
  name = "spicekit"
1377
- version = "0.2.1"
1376
+ version = "0.2.2"
1378
1377
  dependencies = [
1379
1378
  "bytemuck",
1380
1379
  "memmap2",
@@ -1386,7 +1385,7 @@ dependencies = [
1386
1385
 
1387
1386
  [[package]]
1388
1387
  name = "spicekit-bench"
1389
- version = "0.2.1"
1388
+ version = "0.2.2"
1390
1389
  dependencies = [
1391
1390
  "cspice-sys",
1392
1391
  "spicekit",
@@ -1395,7 +1394,7 @@ dependencies = [
1395
1394
 
1396
1395
  [[package]]
1397
1396
  name = "spicekit-py"
1398
- version = "0.2.1"
1397
+ version = "0.2.2"
1399
1398
  dependencies = [
1400
1399
  "ndarray",
1401
1400
  "numpy",
@@ -1530,9 +1529,9 @@ dependencies = [
1530
1529
 
1531
1530
  [[package]]
1532
1531
  name = "tokio"
1533
- version = "1.52.1"
1532
+ version = "1.52.2"
1534
1533
  source = "registry+https://github.com/rust-lang/crates.io-index"
1535
- checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
1534
+ checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386"
1536
1535
  dependencies = [
1537
1536
  "bytes",
1538
1537
  "libc",
@@ -3,7 +3,7 @@ members = ["crates/*"]
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.1"
6
+ version = "0.2.2"
7
7
  edition = "2021"
8
8
  rust-version = "1.85"
9
9
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spicekit
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -8,7 +8,8 @@
8
8
 
9
9
  spicekit is an independent, pure-Rust reader for the SPICE kernel formats
10
10
  (DAF containers, SPK ephemeris files, binary PCK rotation files, and the
11
- text-kernel subset used for body-name bindings). It is **not affiliated
11
+ supported text-kernel subset used for body-name bindings, leapseconds,
12
+ and the Earth→ITRF93 frame association). It is **not affiliated
12
13
  with or endorsed by NAIF/JPL, and it is not a port of the CSpice
13
14
  toolkit** — all executable logic is an independent implementation
14
15
  written from the published NAIF file-format specifications, with no
@@ -23,7 +24,7 @@ distribution terms (see [`LICENSE-NOTICES`](./LICENSE-NOTICES)).
23
24
 
24
25
  ```toml
25
26
  [dependencies]
26
- spicekit = "0.1"
27
+ spicekit = "0.2"
27
28
  ```
28
29
 
29
30
  ### Python
@@ -34,18 +35,20 @@ pip install spicekit
34
35
 
35
36
  ## Scope
36
37
 
37
- `spicekit` implements the subset of SPICE consumed by the
38
- [adam-core](https://github.com/B612-Asteroid-Institute/adam_core) asteroid
39
- dynamics library, which is the project it was originally extracted from:
38
+ `spicekit` implements a focused, embeddable subset of SPICE kernel I/O
39
+ and frame evaluation:
40
40
 
41
41
  - **DAF**: memory-mapped container parser (shared by SPK and PCK)
42
42
  - **SPK**: reader for Types 2, 3, 9, 13; writer for Types 3 and 9
43
43
  - **PCK**: binary PCK reader producing J2000↔ITRF93 rotations and their
44
44
  time derivatives at machine precision
45
45
  - **Text kernels**: parser for `NAIF_BODY_NAME` / `NAIF_BODY_CODE` paired
46
- arrays (custom name ↔ code bindings used by mission kernels). Other
47
- keys (leapseconds, SCLK constants, frame definitions) parse without
48
- error but their contents are not exposed.
46
+ arrays (custom name ↔ code bindings used by mission kernels),
47
+ leapseconds-kernel `DELTET/*` values from `KPL/LSK`, and the narrow
48
+ `OBJECT_EARTH_FRAME = 'ITRF93'` FK association used with binary Earth
49
+ PCKs. Other text-kernel assignments are skipped by the parser on a
50
+ best-effort basis; furnsh-style loaders should reject otherwise-empty
51
+ unsupported text kernels instead of silently dropping them.
49
52
  - **Built-in NAIF body table**: the 692-entry name ↔ ID map mirrored from
50
53
  CSpice's `zzidmap.c`, with case-insensitive whitespace-tolerant
51
54
  matching.
@@ -58,7 +61,7 @@ dynamics library, which is the project it was originally extracted from:
58
61
  behind a feature flag and compares every code path against CSpice at
59
62
  machine-epsilon tolerance.
60
63
  - No CLI tool.
61
- - Read-only for PCK in v0.1.
64
+ - PCK support is read-only.
62
65
 
63
66
  ## Python bindings
64
67
 
@@ -80,10 +83,16 @@ spk = spicekit.NaifSpk("/path/to/de440.bsp")
80
83
  ## Parity testing and benchmarks
81
84
 
82
85
  `spicekit-bench` keeps an FFI-based CSpice reference installation and
83
- asserts that every spicekit numeric path bit-matches CSpice at a
84
- science-grade tolerance. It also runs side-by-side latency
85
- microbenchmarks on matched inputs; the latest numbers (regenerated by
86
- CI on every push to `main`) live in [`BENCHMARKS.md`](./BENCHMARKS.md).
86
+ asserts that every spicekit numeric path and supported text-kernel
87
+ semantic matches CSpice at a science-grade tolerance. It also runs
88
+ side-by-side latency microbenchmarks on matched inputs; the latest
89
+ numbers (regenerated by CI on every push to `main`) live in
90
+ [`BENCHMARKS.md`](./BENCHMARKS.md).
91
+
92
+ The base crate's MSRV is the workspace `rust-version`; local
93
+ `--features cspice` runs may require a newer stable toolchain because
94
+ transitive `cspice-sys` build dependencies can outpace the base MSRV, so
95
+ use `cargo +stable ... --features cspice` when needed.
87
96
 
88
97
  See each module's rustdoc for details.
89
98
 
@@ -101,8 +110,9 @@ the full attribution and the relevant NAIF distribution-terms excerpt.
101
110
 
102
111
  spicekit's own test suite verifies internal correctness (DAF round-trip,
103
112
  Chebyshev polynomial exactness on coefficient tables, Lagrange exactness
104
- at knot points, text-kernel parser tolerance of LSK/SCLK content, etc.).
105
- CSpice-parity testing — confirming that spicekit's numeric output
106
- bit-matches CSpice at a science-grade tolerance — lives in
113
+ at knot points, text-kernel parsing for body bindings, LSK `DELTET/*`,
114
+ and the Earth→ITRF93 FK association, etc.). CSpice-parity testing —
115
+ confirming that spicekit's numeric output and supported text-kernel
116
+ semantics match CSpice at a science-grade tolerance — lives in
107
117
  `crates/spicekit-bench`, which links the CSpice toolkit and asserts
108
118
  parity on every code path.
@@ -497,7 +497,7 @@ mod tests {
497
497
  fn summary_strips_trailing_space_padding() {
498
498
  // Real NAIF kernels we care about (SPK/PCK from Fortran producers)
499
499
  // pad the 40/48/... byte name slot with trailing spaces; the reader
500
- // must strip them so downstream display/debug output isn't littered
500
+ // must strip them so caller display/debug output isn't littered
501
501
  // with whitespace.
502
502
  //
503
503
  // `build_daf` already initializes the name record to spaces; simply
@@ -2,7 +2,8 @@
2
2
  //!
3
3
  //! Implements the subset of SPICE this crate explicitly supports — DAF
4
4
  //! containers, SPK ephemerides, binary PCK rotations, and the
5
- //! body-name slice of text kernels — with memory-mapped I/O and no
5
+ //! supported text-kernel subset (body names, LSK `DELTET/*`, and the
6
+ //! Earth→ITRF93 frame association) — with memory-mapped I/O and no
6
7
  //! FFI. The DAF parser ([`daf`]) is the shared container reader; the
7
8
  //! per-kernel-type parsers ([`spk`], [`pck`], [`text_kernel`]) build
8
9
  //! on top of it. [`spk_writer`] emits SPK Type 3 and Type 9 segments.
@@ -11,8 +12,7 @@
11
12
  //! is asserted in the sibling `spicekit-bench` crate, which links
12
13
  //! `cspice-sys` behind a feature flag and exercises every numeric
13
14
  //! code path (`spkez`, `pxform`, `sxform`, `bodc2n`, `bodn2c`, plus
14
- //! the text-kernel precedence semantics) at machine-epsilon
15
- //! tolerance.
15
+ //! the supported text-kernel semantics) at machine-epsilon tolerance.
16
16
 
17
17
  pub mod daf;
18
18
  pub mod frame;
@@ -29,5 +29,7 @@ pub use pck::{PckError, PckFile, PckSegment};
29
29
  pub use spk::{SpkError, SpkFile, SpkSegment};
30
30
  pub use spk_writer::{SpkWriter, SpkWriterError, Type3Record, Type3Segment, Type9Segment};
31
31
  pub use text_kernel::{
32
- parse_body_bindings, parse_body_bindings_from_str, BodyBinding, TextKernelError,
32
+ parse_body_bindings, parse_body_bindings_from_str, parse_text_kernel,
33
+ parse_text_kernel_from_str, BodyBinding, DeltaAtEntry, FrameAssociation, KernelDate,
34
+ LeapSecondsKernel, TextKernelContent, TextKernelError,
33
35
  };