क्षण — Sanskrit for the precise instant, the smallest measure of time.
Open, reproducible PNT (positioning, navigation and timing) resilience simulation with published quantum-sensor performance models.
Kshana is an open, reproducible PNT-resilience simulator with quantum-sensor
performance models — PNT being positioning, navigation, and timing. This package is a thin
PyO3 (abi3, the stable Python binary interface) wrapper over the
same Rust engine: you pass a scenario TOML (Tom's Obvious, Minimal Language) string in and get a reproducible JSON (JavaScript Object Notation) result back. It quantifies, in hard numbers,
what quantum clocks, quantum inertial sensors, and optical time-transfer buy a
navigation system over classical PNT. Every result is reproducible from
scenario + seed + engine version, and every sensor parameter is traceable to a
published source.
Validated, not asserted. 666/666 AIAA (American Institute of Aeronautics and Astronautics) SGP4 (Simplified General Perturbations 4, the standard satellite-orbit propagator) vectors to 4.12 mm · Cowell force model 0.08 m vs Orekit 12.2 · Galileo 0.61 m / Swarm-A 0.10 m vs real ESA (European Space Agency) precise ephemerides · GCRS→ITRS (Geocentric Celestial Reference System to International Terrestrial Reference System) bit-for-bit vs SOFA/ERFA (the International Astronomical Union's Standards of Fundamental Astronomy library and its open port, Essential Routines for Fundamental Astronomy) · ML (machine-learning) metrics exact vs scikit-learn · 65 of 171 capabilities validated against independent external oracles; 102 honestly labelled Modelled, 4 partner-owned.
Validated against external oracles — every row gated in continuous integration
Each row is checked against an independent external oracle (real dataset, independent reference implementation, or published reference vectors) and re-checked in CI (continuous integration).
| Capability | Result | External oracle | |
|---|---|---|---|
| ✅ | SGP4/SDP4 (Simplified Deep-space Perturbations 4) propagation | 666/666 vectors, worst 4.12 mm | AIAA 2006-6753 (Vallado) + independent sgp4 crate |
| ✅ | Numerical Cowell force model | 0.08 m / 24 h, 275 epochs | Orekit 12.2 DormandPrince853 (CS GROUP) |
| ✅ | Orbit fit vs precise ephemeris | Galileo 0.61 m · Swarm-A 0.10 m | ESA/ESOC (European Space Operations Centre) SP3 (the Standard Product 3 precise-orbit format of the International GNSS Service, GNSS being Global Navigation Satellite System) precise orbits |
| ✅ | GCRS→ITRS frame chain | bit-for-bit vs SOFA; ≤ 0.86 m vs SPICE (Spacecraft, Planet, Instrument, C-matrix, Events — the planetary-geometry toolkit) | ERFA/SOFA + ANISE (Attitude, Navigation, Instrument, Spacecraft, Ephemeris — a pure-Rust SPICE) |
| ✅ | Allan deviations | reproduce reference deviations | NIST SP 1065 (National Institute of Standards and Technology Special Publication 1065) + Stable32 on a real Cs (caesium) clock |
| ✅ | GNSS DOP (dilution of precision) · ML detector metrics | to 1e-6 · to 1e-9 | gnss_lib_py · scikit-learn |
Install
pip install kshana
Wheels are built for Linux, macOS, and Windows on each release tag. To build from
source instead, use maturin: pip install maturin && maturin develop --features python.
Usage
The example is complete: it carries its own scenario, so it runs as written with nothing else on disk.
import json, kshana
# A complete scenario, not a sketch: scenarios/clock-holdover.toml without its comment
# lines. It runs 2 h, 10 min of GNSS then about 1.8 h with GNSS denied, and asks how long
# a strontium optical clock and a chip-scale atomic clock (CSAC) each hold time to within
# 20 ns. sigma_y(1s) is a clock's Allan deviation at an averaging time of one second;
# q_wf, the white-frequency-noise intensity, is its square.
toml = """
seed = 42
threshold_ns = 20.0
[time]
step_s = 10.0
duration_s = 7200.0
[gnss]
windows = [
{ t0 = 0.0, t1 = 600.0, state = "nominal" },
{ t0 = 600.0, t1 = 7200.0, state = "denied" },
]
[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (Origlia/Schiller/Bongs et al., arXiv:1503.08457); q_wf=sigma_y(1s)^2; ground-demonstrator maturity, not flown; flicker/aging not modeled"
y0 = 5.0e-17
q_wf = 1.0e-30
q_rw = 0.0
[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10; q_wf=sigma_y(1s)^2; flicker/aging not modeled"
y0 = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
"""
result = json.loads(kshana.run(toml)) # the full result document
print(result["quantum"]["fom"]["integrity"])
# The JSON result, the chart as SVG (Scalable Vector Graphics) and a one-line summary,
# all from one engine run:
result_json, chart_svg, summary = kshana.run_full(toml)
print(kshana.version(), summary)
Every other reference scenario is a file under
scenarios/ in the repository;
pass its text to kshana.run the same way. With the Rust command-line interface (CLI)
installed, kshana example <name> prints any of them.
Beyond run / run_full / version, the module exposes run_typed (a structured
result object), validate_toml (lint → list of error strings), scenario_kinds (the
dispatchable kinds as a Python list of dictionaries), list_kinds (the same metadata as
one JSON string — kept as a string so existing callers do not break; call
json.loads(kshana.list_kinds()), or use scenario_kinds() for the parsed list), and
error_kind (the KshanaError tag for a rejected scenario) — see
docs/PYTHON_API.md.
Every figure of merit is labelled validated or modelled; optical-clock figures are space goals on ground hardware (no strontium optical clock has flown). Maturity is not uniform across domains — Earth PNT is real-data validated; deep-space / Mars navigation is simulation-validated; real-mission deep-space OD (orbit determination) is on the roadmap.
Learn more
- Full README & validation matrix → https://github.com/AshfordeOU/kshana
- Live playground (runs in your browser as WebAssembly) → https://kshana.dev
- Python application programming interface (API) → docs/PYTHON_API.md
- Capabilities → docs/CAPABILITY.md
- Validation & provenance → docs/VALIDATION.md · docs/PROVENANCE.md
Licence
Free and open source under the GNU AGPL-3.0-only (the GNU Affero General Public License, version 3 only). A commercial licence is available from Ashforde OÜ (an Estonian private limited company; OÜ = osaühing) for proprietary/closed integration — see LICENSING.md. Professionally developed and maintained by Ashforde OÜ; commercial support, integration, and proprietary extensions available.
Metadata
Release files for kshana 0.27.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kshana-0.27.3.tar.gz | 3.3 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| kshana-0.27.3-cp39-abi3-win_arm64.whl | CPython 3.9 | abi3 | Windows ARM64 | Details |
| kshana-0.27.3-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| kshana-0.27.3-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| kshana-0.27.3-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| kshana-0.27.3-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| kshana-0.27.3-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 20.4 MB
Release files / kshana-0.27.3.tar.gz
| Download URL | kshana-0.27.3.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87ff8e991496311d8374b103ddaaf08681b34b71e39fb0931ab9bca9c1bde797
|
|
BLAKE2b-256 checksum How to use checksums |
e0b0101a8d0afb9f19671444c9ee4df26b5d3a51637045efdba079412f8bf78f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-win_arm64.whl
| Download URL | kshana-0.27.3-cp39-abi3-win_arm64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.9 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
a7859b984a5726b0cddecc4d1b7fe0da6d7e9f0406f6961686eda34fc90efd30
|
|
BLAKE2b-256 checksum How to use checksums |
0d0e54881200f345aa274ff8f9b247594ed6476eb96d4dbc803b06063c7a2035
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-win_amd64.whl
| Download URL | kshana-0.27.3-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7e228d4d0a024c5f085846bfee9d6d8d7985bcc850f12eeb76c589e9bfd76826
|
|
BLAKE2b-256 checksum How to use checksums |
cfdb45449a0804f305f803ae3ab17dd0a571d7e72b88923ee52e6675a023ab34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | kshana-0.27.3-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e703344b00d46c246ef8c3708884b4cc58ad0a920b13df91742138f1836cf176
|
|
BLAKE2b-256 checksum How to use checksums |
afa3a5784fb4011063ad92cb8f34019f12c53be3ba4cee0aaa51b51d9fdf63c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | kshana-0.27.3-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6e64d7876ac8d29955c5c3d828da55680b4acfaa16021457cc721224b181474c
|
|
BLAKE2b-256 checksum How to use checksums |
6b4781d8a4cd84764705467130fc26556a9d79c6ef5b182a440ff4603aa55f3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | kshana-0.27.3-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ff35397cbf819db3122c3addf5515d34a9193277141803df6596df7febb0b0ca
|
|
BLAKE2b-256 checksum How to use checksums |
c3d0827e1556bcbc0a5521bf0c56d0e4ffe15eae565d521a6e9622ab570e5eb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / kshana-0.27.3-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | kshana-0.27.3-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0c56639f08542e45e94e1828dcc79551af9716d7e8ee8cd51a3d712e7b58b97f
|
|
BLAKE2b-256 checksum How to use checksums |
644a6a66eb8de00a91885eee0a5f1a6566241bc6e1c2eb71add2e85edfd10a82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|