<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lino Avila</title>
    <description>The latest articles on DEV Community by Lino Avila (@linomx90).</description>
    <link>https://dev.to/linomx90</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4087551%2F441036c8-41bf-46a6-8dab-2fd83b3f8495.png</url>
      <title>DEV Community: Lino Avila</title>
      <link>https://dev.to/linomx90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/linomx90"/>
    <language>en</language>
    <item>
      <title>JX N-Body Engine 0.1.0: Arbitrary-Precision Python and Numerical Validation</title>
      <dc:creator>Lino Avila</dc:creator>
      <pubDate>Fri, 21 Aug 2026 04:45:15 +0000</pubDate>
      <link>https://dev.to/linomx90/jx-n-body-engine-010-arbitrary-precision-python-and-numerical-validation-g50</link>
      <guid>https://dev.to/linomx90/jx-n-body-engine-010-arbitrary-precision-python-and-numerical-validation-g50</guid>
      <description>&lt;p&gt;&lt;em&gt;A Newtonian N-body engine built around a sixth-order Yoshida integrator, an independent Decimal Bulirsch-Stoer reference, and conservative scientific claim controls.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By Lino Avila | JX Planet X project | August 2026&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence classification:&lt;/strong&gt; MODEL_OUTPUT / numerical validation&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Claim decision:&lt;/strong&gt; SCREENING_ONLY&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Numerical status:&lt;/strong&gt; PRODUCTION_NUMERICAL_GATE_PASSED&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Latest source-inference status:&lt;/strong&gt; BLOCKED_SOURCE_POPULATION_NONCONVERGENCE&lt;br&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I built a second numerical path
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;JX therefore uses two deliberately different propagation foundations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A sixth-order symmetric Yoshida composition.&lt;/strong&gt; This is the primary fixed-step symplectic path. Its coefficients are stored as decimal strings, and adjacent kick stages are merged so each macro-step requires eight force evaluations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An independent Decimal Bulirsch-Stoer implementation.&lt;/strong&gt; This uses modified midpoint integration and extrapolation as a separate reference path. It does not reuse the Yoshida stepping logic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the release contains
&lt;/h2&gt;

&lt;p&gt;The Python package is organized into focused, auditable modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;decimal_math.py&lt;/code&gt;: Decimal construction, three-dimensional vector operations, and a small analytic sine/cosine kernel used by validation problems.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dynamics.py&lt;/code&gt;: deterministic Newtonian accelerations, state management, and energy and angular-momentum diagnostics.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;yoshida6.py&lt;/code&gt;: the sixth-order symmetric Yoshida integrator and force-evaluation accounting.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;decimal_bs.py&lt;/code&gt;: the independent arbitrary-precision Bulirsch-Stoer reference integrator.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ias15_gate.py&lt;/code&gt;: optional adaptive IAS15 convergence tests through REBOUND.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gates.py&lt;/code&gt;: analytic convergence, coefficient closure, two-body invariant, and force-count gates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claims.py&lt;/code&gt;: evidence labels and a conservative decision state machine.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;provenance.py&lt;/code&gt;: source hashes, environment records, and run-record generation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;production_benchmark.py&lt;/code&gt;: locked benchmark verification and cross-trajectory comparisons.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;de441_anchor.py&lt;/code&gt;: import and validation of a transparent DE441-anchored benchmark state.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cli.py&lt;/code&gt;: command-line access to validation and reproduction workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  Core numerical gates
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gate&lt;/th&gt;
&lt;th&gt;Measured value&lt;/th&gt;
&lt;th&gt;Encoded acceptance criterion&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Yoshida coefficient closure&lt;/td&gt;
&lt;td&gt;0 at stored precision&lt;/td&gt;
&lt;td&gt;Exactly zero&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analytic oscillator convergence&lt;/td&gt;
&lt;td&gt;64.00069&lt;/td&gt;
&lt;td&gt;Between 60 and 68; sixth-order expectation is 64&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two-body energy&lt;/td&gt;
&lt;td&gt;8.68e-27 relative drift&lt;/td&gt;
&lt;td&gt;Less than 1e-12&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two-body angular momentum&lt;/td&gt;
&lt;td&gt;2.0e-79 relative drift&lt;/td&gt;
&lt;td&gt;Less than 1e-60&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimized force count&lt;/td&gt;
&lt;td&gt;8,000&lt;/td&gt;
&lt;td&gt;Exactly 8,000&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  Production benchmark and independent comparison
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The encoded production criteria include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;projected 30,000-year wall time no greater than 4,500 seconds for the locked benchmark configuration;&lt;/li&gt;
&lt;li&gt;oscillator error ratio between 60 and 68;&lt;/li&gt;
&lt;li&gt;relative energy drift no greater than 1e-9;&lt;/li&gt;
&lt;li&gt;relative angular-momentum-vector drift no greater than 1e-10;&lt;/li&gt;
&lt;li&gt;exactly 5,000 macro-steps and 40,000 force evaluations;&lt;/li&gt;
&lt;li&gt;bounded cross-precision and cross-method trajectory differences;&lt;/li&gt;
&lt;li&gt;zero bound/unbound classification mismatches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final 100-year DE441 numerical audit used an independent 78-decimal-digit Bulirsch-Stoer reference. It completed in 232.0 seconds and reported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;relative energy drift of 5.47e-35;&lt;/li&gt;
&lt;li&gt;relative angular-momentum drift of 1.03e-35;&lt;/li&gt;
&lt;li&gt;a maximum Yoshida-versus-Bulirsch-Stoer massive-body position difference of 3.77e-11 AU, against a 1e-7 AU gate;&lt;/li&gt;
&lt;li&gt;zero bound-state mismatches;&lt;/li&gt;
&lt;li&gt;exact agreement of the repeated massive-body paths across all fifteen massless-tracer blocks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete release record reports thirteen packaged tests passed. The numerical status is &lt;code&gt;PRODUCTION_NUMERICAL_GATE_PASSED&lt;/code&gt;. These are numerical acceptance results, not observational findings.&lt;/p&gt;
&lt;h2&gt;
  
  
  A transparent DE441-anchored test
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The benchmark distinguishes its inputs explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the massive-body state is classified as &lt;strong&gt;RECONSTRUCTED&lt;/strong&gt; from a preserved DE441 source;&lt;/li&gt;
&lt;li&gt;the synthetic tracer population is classified as an &lt;strong&gt;ASSUMPTION&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;the propagated trajectories are classified as &lt;strong&gt;MODEL_OUTPUT&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Even though the numerical comparisons passed, the final decision remains SCREENING_ONLY because numerical propagation cannot establish an observed source.&lt;/p&gt;
&lt;h2&gt;
  
  
  The gate that correctly failed
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The matched no-source population converged, with 0.0295 AU disagreement. The middle compact-source population did not converge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mean-perihelion disagreement: 0.1457 AU, against a 0.1 AU gate;&lt;/li&gt;
&lt;li&gt;Wasserstein-perihelion disagreement: 0.1551 AU, against a 0.1 AU gate;&lt;/li&gt;
&lt;li&gt;bound-state mismatches: zero;&lt;/li&gt;
&lt;li&gt;pointwise trajectories became chaotic after approximately 39,000 to 95,000 years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The governing result was &lt;code&gt;BLOCKED_SOURCE_POPULATION_NONCONVERGENCE&lt;/code&gt;. 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running the core validation
&lt;/h2&gt;

&lt;p&gt;After downloading and verifying the release archive, run the core suite from the project root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PYTHONPATH=src python3 -m jxplanetx.cli validate \
  --decimal-digits 80 --output runs/validation.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To reproduce the locked Yoshida benchmark:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PYTHONPATH=src python3 -m jxplanetx.cli reproduce-yoshida6 \
  --bundle-dir PATH_TO_VERIFIED_BUNDLE \
  --run-dir runs/yoshida6_reproduction \
  --output runs/yoshida6_reproduction.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important limitations
&lt;/h2&gt;

&lt;p&gt;JX 0.1.0 is intentionally narrow. Readers should understand the following boundaries before using it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The core implements Newtonian point-mass dynamics. It does not include relativistic, nongravitational, oblateness, or other production ephemeris forces.&lt;/li&gt;
&lt;li&gt;Massless tracers do not exert force on massive bodies.&lt;/li&gt;
&lt;li&gt;Coincident positions are treated as collisions and stop the calculation; the core has no collision regularization.&lt;/li&gt;
&lt;li&gt;The current Decimal sine/cosine validation kernel accepts arguments with absolute value no greater than one.&lt;/li&gt;
&lt;li&gt;Some derived quantities, such as inclination through &lt;code&gt;acos&lt;/code&gt;, use binary floating-point transcendental functions and are judged numerically rather than byte-for-byte.&lt;/li&gt;
&lt;li&gt;The optional REBOUND/IAS15 path is a separate adaptive comparison path, not an arbitrary-precision Decimal implementation.&lt;/li&gt;
&lt;li&gt;Long chaotic integrations require population-level and source-minus-control convergence tests; a single trajectory match is not sufficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These limitations are part of the scientific record, not footnotes to be hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducibility and provenance
&lt;/h2&gt;

&lt;p&gt;Every published release should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the exact source archive and its SHA-256 hash;&lt;/li&gt;
&lt;li&gt;a checksum manifest covering source, tests, documentation, and benchmarks;&lt;/li&gt;
&lt;li&gt;the Python version, platform, dependency versions, and runtime configuration;&lt;/li&gt;
&lt;li&gt;the initial states, trajectory files, summaries, and run logs used for each reported result;&lt;/li&gt;
&lt;li&gt;a machine-readable statement of passed, failed, and missing gates;&lt;/li&gt;
&lt;li&gt;the precise distinction between measured data, reconstructed inputs, assumptions, model output, and speculation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The source-only archive hash associated with version 0.1.0 is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;9c478f9006d4a3aaa08676f4c61da291e9b961654ff5114b70907a5cc7d6b8c2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Readers must compare this value with the downloaded archive before treating it as the release discussed here.&lt;/p&gt;

&lt;p&gt;The preserved complete JX research archive, including equations, tests, benchmark inputs, results, and reproduction instructions, has SHA-256:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;286a6b834bb2df509b1ce0a83e21ac90112306a43ea98c997d2308c2be579fa8&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The source-only archive and complete research release are different artifacts and should be labeled separately on the public release page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download, review, and license
&lt;/h2&gt;

&lt;p&gt;The public release is available from these permanent links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/linomx90/jx-planet-x-engine" rel="noopener noreferrer"&gt;Repository&lt;/a&gt; · &lt;a href="https://github.com/linomx90/jx-planet-x-engine/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;v0.1.0 release&lt;/a&gt; · &lt;a href="https://github.com/linomx90/jx-planet-x-engine/tree/v0.1.0" rel="noopener noreferrer"&gt;Tagged source&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/releases/download/v0.1.0/JX_NBODY_ENGINE_CODE_0_1_0.zip" rel="noopener noreferrer"&gt;Source-only ZIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/releases/download/v0.1.0/JX_PLANET_X_ENGINE_0_1_0.zip" rel="noopener noreferrer"&gt;Complete research ZIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/releases/download/v0.1.0/JX_RELEASE_SHA256SUMS.txt" rel="noopener noreferrer"&gt;SHA-256 checksum manifest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/blob/v0.1.0/runs/core_validation.json" rel="noopener noreferrer"&gt;Core validation record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/blob/v0.1.0/runs/de441_anchor/independent_reference_gate.json" rel="noopener noreferrer"&gt;Independent DE441 reference gate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/blob/v0.1.0/runs/ias15_equation_gate/governing_result.json" rel="noopener noreferrer"&gt;Governing IAS15 equation-gate result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linomx90/jx-planet-x-engine/issues" rel="noopener noreferrer"&gt;Issue tracker and technical review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;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.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>computerscience</category>
      <category>science</category>
    </item>
  </channel>
</rss>
