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.
- {spicekit-0.2.1 → spicekit-0.2.2}/Cargo.lock +9 -10
- {spicekit-0.2.1 → spicekit-0.2.2}/Cargo.toml +1 -1
- {spicekit-0.2.1 → spicekit-0.2.2}/PKG-INFO +1 -1
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/README.md +26 -16
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/daf.rs +1 -1
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/lib.rs +6 -4
- spicekit-0.2.2/crates/spicekit/src/text_kernel.rs +949 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/pyproject.toml +1 -1
- spicekit-0.2.1/crates/spicekit/src/text_kernel.rs +0 -521
- {spicekit-0.2.1 → spicekit-0.2.2}/LICENSE +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/LICENSE-NOTICES +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/README.md +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/Cargo.toml +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/LICENSE +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/LICENSE-NOTICES +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/examples/read_spk.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/frame.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/naif_builtin_table.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/naif_ids.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/pck.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/spk.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit/src/spk_writer.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/Cargo.toml +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/LICENSE +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/LICENSE-NOTICES +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/README.md +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/examples/read_spk.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/src/lib.rs +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/conftest.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_names.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_pck.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_spk.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_spk_writer.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/crates/spicekit-py/tests/test_text_kernel.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/python/spicekit/__init__.py +0 -0
- {spicekit-0.2.1 → spicekit-0.2.2}/python/spicekit/__init__.pyi +0 -0
- {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.
|
|
898
|
+
version = "0.10.79"
|
|
899
899
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
900
|
-
checksum = "
|
|
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.
|
|
929
|
+
version = "0.9.115"
|
|
931
930
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
932
|
-
checksum = "
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1532
|
+
version = "1.52.2"
|
|
1534
1533
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1535
|
-
checksum = "
|
|
1534
|
+
checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386"
|
|
1536
1535
|
dependencies = [
|
|
1537
1536
|
"bytes",
|
|
1538
1537
|
"libc",
|
|
@@ -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
|
|
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.
|
|
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
|
|
38
|
-
|
|
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)
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
-
|
|
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
|
|
84
|
-
science-grade tolerance. It also runs
|
|
85
|
-
microbenchmarks on matched inputs; the latest
|
|
86
|
-
CI on every push to `main`) live in
|
|
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
|
|
105
|
-
CSpice-parity testing —
|
|
106
|
-
|
|
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
|
|
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
|
-
//!
|
|
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
|
|
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,
|
|
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
|
};
|