Skip to main content

Kshana

क्षण — 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.

SGP4 validated against all 666 AIAA 2006-6753 vectors, worst 4.12 mm 65 of 171 capabilities validated against independent external oracles ~96% line coverage, gated at 85% in CI Release v0.27.3 Live playground — run in your browser, no install License: AGPL-3.0-only DOI 10.5281/zenodo.20528627

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.

Kshana system overview: five front doors (command-line interface, Python wheel, WebAssembly playground, Model Context Protocol server, JetBrains plugin) converge on a single api::run_toml dispatch, through the engine, to a reproducible result.json + chart.svg

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

Verification status across all 171 capabilities: 65 Validated, 102 Modelled, 4 Partner-owned

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

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)

Source distribution for kshana 0.27.3
File Size Uploaded
kshana-0.27.3.tar.gz 3.3 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for kshana 0.27.3
File
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
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page