File size: 1,252 Bytes
5d07399 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import numpy as np
from symbolic_recursion.coherence import benchmark_operators, coherence_retention
from symbolic_recursion.kernel import MetaOperator, SymbolicRecursionKernel, composite_q, run_worked_examples
def test_composite_q():
q = composite_q(1.0, 2.0, 3.0, 4.0)
assert q == 10.0
def test_kernel_integration_bounded():
t = np.linspace(0, 5, 100)
f = np.sin(t) + np.cos(t)
k = SymbolicRecursionKernel(a=1.0)
dx = k.integrate_series(f, dt=t[1] - t[0])
assert len(dx) == len(f)
assert np.all(np.isfinite(dx))
def test_meta_operator():
m = MetaOperator(b=0.091)
out = m.apply_series(np.ones(50) * 0.1, dt=0.01)
assert out[-1] > 0
def test_worked_examples_all_modes():
results = run_worked_examples(n_points=100)
assert set(results.keys()) == {"oscillatory", "decaying", "accelerating", "fractal_impulse", "hybrid_echo"}
for r in results.values():
assert "bounded" in r
def test_coherence_retention_identity():
x = np.sin(np.linspace(0, 10, 200))
score = coherence_retention(x, x)
assert score > 0.9
def test_benchmark_returns_20_operators():
rows = benchmark_operators(n_points=200)
assert len(rows) == 20
assert all("gain_pct" in r for r in rows) |