"""Pins for PREREG_flat_regime_2026-09-21.md: the flat gate (prestep='flat').""" from __future__ import annotations import math import pytest from simroot.pure import pure_root XTOL, MAXFEV = 1e-12, 200 PROBS = ( (lambda t: t ** 3 - 2.0 * t - 5.0, 1.0, 4.0), (lambda t: math.exp(t) - 2.0, 0.0, 3.0), (lambda t: 6.0 * (t - 2.0) ** 5, 0.0, 10.0), (lambda t: t ** 19, -10.0, 100.0), ) @pytest.mark.parametrize("f,a,b", PROBS) @pytest.mark.parametrize("guard", ("project", "credit", "safe")) def test_the_default_is_untouched(f, a, b, guard): ref = pure_root(f, a, b, XTOL, MAXFEV, similarity="ratio", scale="derived3", guard=guard) off = pure_root(f, a, b, XTOL, MAXFEV, similarity="ratio", scale="derived3", guard=guard, prestep="none") assert ref == off @pytest.mark.parametrize("f,a,b", PROBS) @pytest.mark.parametrize("guard", ("project", "credit")) @pytest.mark.parametrize("ext", ("none", "pattern")) def test_the_guarantee_holds_with_the_gate(f, a, b, guard, ext): x, n, ok = pure_root(f, a, b, XTOL, MAXFEV, similarity="ratio", scale="derived3", guard=guard, prestep="flat", extrapolate=ext) assert ok and min(a, b) <= x <= max(a, b) half = math.ceil(math.log2(abs(b - a) / XTOL)) assert n <= (2 * half + 3 if guard == "project" else half + 4), n def test_the_gate_never_fires_where_the_model_is_exact(): """On a straight line the model's step lands on the root: r = 0, never >= 1/4.""" st = {} pure_root(lambda t: 3.0 * t - 1.0, -2.0, 5.0, XTOL, MAXFEV, similarity="ratio", scale="derived3", guard="project", prestep="flat", stats=st) assert st["pre_refused"] == 0 def test_the_gate_fires_on_a_pure_power(): """On x^9 the tangent step leaves (8/9)^9 = 0.35 of |f| on the same side.""" st = {} pure_root(lambda t: t ** 9, -1.0, 2.0, XTOL, MAXFEV, similarity="ratio", scale="derived3", guard="project", prestep="flat", stats=st) assert st["pre_refused"] > 0