"""DBITS paper engine — full certificate suite for LinkedIn release.""" from __future__ import annotations import asyncio from symbolic_recursion.dbits import ( D0, MU, DbitParams, apply_gate, continuous_offset_series, list_gates, multi_dbit_trajectory, run_all_proofs, spine_summary, trajectory, ) from symbolic_recursion.equations.catalog import catalog_stats, get_equation from symbolic_recursion.tools.kernel_tools import KernelToolRunner def test_constants() -> None: assert abs(MU - 0.16905) < 1e-12 assert abs(D0 - 149.9992314) < 1e-6 def test_stability_box_and_rho() -> None: p = DbitParams(0.3, 0.3, 0.05) assert p.in_stability_box() assert p.rho() < 1.0 p_bad = DbitParams(0.3, 0.3, 0.8) assert p_bad.rho() >= 1.0 def test_trajectory_contracts() -> None: p = DbitParams() x, m = trajectory(p, 100, 0.5, 0.3) assert abs(x[-1]) < abs(x[0]) or abs(x[-1]) < 0.05 def test_all_gates_apply() -> None: assert len(list_gates()) == 10 for g in list_gates(): out = apply_gate(g["key"], 0.4, 0.2) assert "output" in out def test_multi_dbit_energy_decays() -> None: out = multi_dbit_trajectory(n_agents=16, steps=100) assert out["status"] == "PASS" assert out["E_final"] < out["E0"] def test_offset_to_D0() -> None: out = continuous_offset_series(t_end=4.0, n_points=30, x0=160.0) assert out["status"] in ("STABILIZED", "CONVERGING") assert abs(out["state_series"][-1] - D0) < 2.0 def test_full_proof_suite_pass() -> None: report = run_all_proofs() assert report["overall"] == "PASS" assert report["n_pass"] == 6 assert report["n_total"] == 6 def test_catalog_includes_dbits() -> None: stats = catalog_stats() assert stats["by_family"].get("dbits", 0) >= 20 eq = get_equation("D05") assert "0.2" in eq.latex or "stability" in eq.name.lower() or "box" in eq.name.lower() def test_tool_dbits_proofs() -> None: data = asyncio.run(KernelToolRunner().run("dbits_proofs")) assert data["overall"] == "PASS" assert data["n_pass"] == 6 def test_tool_dbits_simulate_and_spine() -> None: sim = asyncio.run(KernelToolRunner().run("dbits_simulate", steps=80, n_agents=16)) assert sim["in_stability_box"] is True spine = asyncio.run(KernelToolRunner().run("dbits_spine")) assert spine["summary"]["nodes"] >= 20 assert spine_summary()["spine_id"] == "piqb-dbits-spine-v2"