{
  "source": "benchmarks.py — original three benchmark families (Roth Complexity Lab, 21 October 2026). Benchmark 1 values are exact finite-state arithmetic. Benchmark 2/3 floating-point values are transcribed from the paper's Tables 4-5 and Finding 4.6; ulp merger times and rounding drift can depend on runtime, processor and NumPy version.",
  "benchmark1_shift_rule90": {
    "N=6": {
      "shift_conjugate": true,
      "rule90_distinct_images": 16,
      "multiplicity": "4-to-1",
      "entropy_series_bits": [6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
      "total_erased_bits": 2
    },
    "N=7": {
      "shift_conjugate": true,
      "rule90_distinct_images": 64,
      "multiplicity": "2-to-1",
      "entropy_series_bits": [7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
      "total_erased_bits": 1
    },
    "N=8": {
      "shift_conjugate": true,
      "rule90_distinct_images": 64,
      "multiplicity": "4-to-1",
      "entropy_series_bits": [8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      "total_erased_bits": 8
    }
  },
  "benchmark2_oscillator": {
    "parameters": {"dt": 0.01, "x0": 1, "p0": 0, "E0": 0.5},
    "explicit_euler": {
      "epsilon_unit_shell": 5.0e-5,
      "n=10000": {"energy_error": 0.8591, "trajectory_error": 0.6487},
      "n=100000": {"energy_error": 11010.0, "trajectory_error": 147.4},
      "n=1000000": {"energy_error": 1.34e43, "trajectory_error": 5.2e21}
    },
    "implicit_euler": {
      "epsilon_unit_shell": 5.0e-5,
      "n=10000": {"energy_error": -0.3161, "trajectory_error": 0.393},
      "n=100000": {"energy_error": -0.49998, "trajectory_error": 0.993},
      "n=1000000": {"energy_error": -0.5, "trajectory_error": 1.0}
    },
    "stormer_verlet": {
      "epsilon_unit_shell": 1.667e-7,
      "n=10000": {"energy_error_max": 1.25e-5, "trajectory_error": 4.22e-4},
      "n=100000": {"energy_error_max": 1.25e-5, "trajectory_error": 4.16e-3},
      "n=1000000": {"energy_error_max": 1.25e-5, "trajectory_error": 4.17e-2}
    },
    "exact_rotation_fp64": {
      "epsilon_unit_shell": 0,
      "n=10000": {"energy_error": -1.43e-13, "trajectory_error": 1.43e-13},
      "n=100000": {"energy_error": -1.45e-12, "trajectory_error": 1.45e-12},
      "n=1000000": {"energy_error": -1.44e-11, "trajectory_error": 1.44e-11}
    }
  },
  "benchmark3_lorenz63": {
    "parameters": {"sigma": 10, "rho": 28, "beta": 2.6666667, "h": 1e-3},
    "uref": [-4.40848, -3.32421, 24.10480],
    "ulp_x": 8.88e-16,
    "divergence_horizons": {
      "delta0=1e-6": {"measured_tcrit": 12.36, "lyapunov_estimate": 15.26, "illustrative_rate": 0.46, "fitted_local_lambda": 0.83},
      "delta0=1e-9": {"measured_tcrit": 22.51, "lyapunov_estimate": 22.88, "illustrative_rate": 0.68, "fitted_local_lambda": 0.81},
      "delta0=1e-12": {"measured_tcrit": 29.43, "lyapunov_estimate": 30.51, "illustrative_rate": 0.91, "fitted_local_lambda": 0.83}
    },
    "step_size_test": {"h_vs_h_over_2_tcrit": 23.86, "rk4_local_error_per_step": 8.6e-11},
    "ulp_merging": {
      "k=1": {"first_coincidence_step": 8},
      "k=2": {"first_coincidence_step": 14},
      "k=3": {"first_coincidence_step": 34},
      "k=4_and_k=8": {"first_coincidence_with_each_other_step": 191},
      "k=16": {"first_coincidence_step": null, "note": "no coincidence within 10000 steps"}
    },
    "sampled_jacobian_norm_max": 30.3,
    "sampled_jacobian_norm_mean": 18.27,
    "note": "The sampled norm 30.3 is not a certified global Lipschitz constant; first-merger times can vary across machines or numerical libraries."
  }
}
