A Newtonian N-body engine built around a sixth-order Yoshida integrator, an independent Decimal Bulirsch-Stoer reference, and conservative scientific claim controls.
By Lino Avila | JX Planet X project | August 2026
JX N-Body Engine 0.1.0 is a reusable Newtonian propagation and numerical-validation toolkit written in Python. It grew out of the JX Planet X investigation, but its purpose is broader: to make high-precision N-body experiments reproducible, inspectable, and difficult to overinterpret.
The software is not evidence of a Planet X detection. The original investigation remains unresolved. Passing a numerical gate shows that a calculation behaved as specified; it does not establish that an astronomical source exists.
Evidence classification: MODEL_OUTPUT / numerical validation
Claim decision: SCREENING_ONLY
Numerical status: PRODUCTION_NUMERICAL_GATE_PASSED
Latest source-inference status: BLOCKED_SOURCE_POPULATION_NONCONVERGENCE
License: MIT
High-precision output is not automatically trustworthy. A result can contain many digits and still be wrong because of an implementation error, an unstable method, an incorrect frame, or an unsupported scientific interpretation.
JX therefore uses two deliberately different propagation foundations:
Agreement between independent methods is stronger evidence of numerical correctness than agreement between two precision settings of the same implementation. It is still only numerical evidence.
The Python package is organized into focused, auditable modules:
decimal_math.py
: Decimal construction, three-dimensional vector operations, and a small analytic sine/cosine kernel used by validation problems.dynamics.py
: deterministic Newtonian accelerations, state management, and energy and angular-momentum diagnostics.yoshida6.py
: the sixth-order symmetric Yoshida integrator and force-evaluation accounting.decimal_bs.py
: the independent arbitrary-precision Bulirsch-Stoer reference integrator.ias15_gate.py
: optional adaptive IAS15 convergence tests through REBOUND.gates.py
: analytic convergence, coefficient closure, two-body invariant, and force-count gates.claims.py
: evidence labels and a conservative decision state machine.provenance.py
: source hashes, environment records, and run-record generation.production_benchmark.py
: locked benchmark verification and cross-trajectory comparisons.de441_anchor.py
: import and validation of a transparent DE441-anchored benchmark state.cli.py
: command-line access to validation and reproduction workflows.The complete executable source, tests, benchmark inputs, machine-readable results, and checksum manifest should be downloaded from the versioned release linked at the end of this article. Publishing the source as an archive rather than as formatted article text preserves ASCII characters, indentation, and file boundaries.
The core validation suite encodes its acceptance criteria in the software rather than relying on a visual judgment of trajectories. The preserved version 0.1.0 run produced the following results:
| Gate | Measured value | Encoded acceptance criterion | Result |
|---|---|---|---|
| Yoshida coefficient closure | 0 at stored precision | Exactly zero | PASS |
| Analytic oscillator convergence | 64.00069 | Between 60 and 68; sixth-order expectation is 64 | PASS |
| Two-body energy | 8.68e-27 relative drift | Less than 1e-12 | PASS |
| Two-body angular momentum | 2.0e-79 relative drift | Less than 1e-60 | PASS |
| Optimized force count | 8,000 | Exactly 8,000 | PASS |
The oscillator test compares the propagated phase-space state against independently evaluated Decimal sine and cosine values. That matters because a symplectic map can preserve a phase-space norm unusually well even when its phase is wrong.
The preserved production workflow adds stronger checks around the core unit-scale tests. It verifies the benchmark manifest, reruns 160-bit and 224-bit Yoshida members, compares serialized trajectories, and checks the higher-precision Yoshida output against an independently preserved Bulirsch-Stoer reference.
The encoded production criteria include:
The final 100-year DE441 numerical audit used an independent 78-decimal-digit Bulirsch-Stoer reference. It completed in 232.0 seconds and reported:
The complete release record reports thirteen packaged tests passed. The numerical status is PRODUCTION_NUMERICAL_GATE_PASSED
. These are numerical acceptance results, not observational findings.
The DE441 workflow constructs a 20-body benchmark containing the Sun, Jupiter, Saturn, Uranus, Neptune, and fifteen massless synthetic tracers. The preserved epoch is TDB Julian Date 2461200.5 in J2000 ecliptic axes.
The benchmark distinguishes its inputs explicitly:
Before the independent reference was added, the 160/224-bit Yoshida precision pair already produced a massive-body position mismatch of 3.66e-44 AU, zero bound-state mismatches, and a relative energy drift of 6.59e-17. Its projected 30,000-year runtime was 1,861 to 2,269 seconds. The independent 78-digit Bulirsch-Stoer run then closed the numerical gate.
Even though the numerical comparisons passed, the final decision remains SCREENING_ONLY because numerical propagation cannot establish an observed source.
A useful scientific engine must reject an attractive result when its prerequisite convergence fails. JX did exactly that in the subsequent 100,000-year IAS15 population test.
The matched no-source population converged, with 0.0295 AU disagreement. The middle compact-source population did not converge:
The governing result was BLOCKED_SOURCE_POPULATION_NONCONVERGENCE
. The apparent source effect was therefore excluded from scientific use. This does not reject every compact-source model; it rejects an inference drawn from that nonconverged fifteen-trajectory population.
This failed gate is evidence that the claim controller is functioning as intended. The software passed its numerical foundation tests while refusing to convert an unstable model comparison into a Planet X claim.
After down and verifying the release archive, run the core suite from the project root:
PYTHONPATH=src python3 -m jxplanetx.cli validate \
--decimal-digits 80 --output runs/validation.json
To reproduce the locked Yoshida benchmark:
PYTHONPATH=src python3 -m jxplanetx.cli reproduce-yoshida6 \
--bundle-dir PATH_TO_VERIFIED_BUNDLE \
--run-dir runs/yoshida6_reproduction \
--output runs/yoshida6_reproduction.json
The command should return a nonzero exit status when a required gate fails. The JSON run record preserves the configuration, gate results, evidence classification, environment, and source manifest.
JX 0.1.0 is intentionally narrow. Readers should understand the following boundaries before using it:
acos
, use binary floating-point transcendental functions and are judged numerically rather than byte-for-byte.These limitations are part of the scientific record, not footnotes to be hidden.
Every published release should include:
The source-only archive hash associated with version 0.1.0 is:
9c478f9006d4a3aaa08676f4c61da291e9b961654ff5114b70907a5cc7d6b8c2
Readers must compare this value with the downloaded archive before treating it as the release discussed here.
The preserved complete JX research archive, including equations, tests, benchmark inputs, results, and reproduction instructions, has SHA-256:
286a6b834bb2df509b1ce0a83e21ac90112306a43ea98c997d2308c2be579fa8
The source-only archive and complete research release are different artifacts and should be labeled separately on the public release page.
The public release is available from these permanent links:
JX N-Body Engine 0.1.0 is released by Lino Avila and the JX Planet X project under the MIT License. Preserved third-party material retains its included licenses and notices. Modifications should preserve evidence labels, failed gates, unresolved blockers, and claim limits. Technical review is especially welcome on the Yoshida composition, independent Bulirsch-Stoer path, benchmark provenance, and the boundaries between numerical and observational evidence.
Editorial disclosure: This article was prepared with OpenAI Codex assistance under Lino Avila’s direction and reviewed against the preserved JX source code, tests, numerical results, and release checksums.