"""Fast regression canaries for the final G22 monotonic method extension."""
from __future__ import annotations

import unittest

from ap1_r2c_implicit_dae_multiresolution import classify
from g22_monotonic_precision_audit import PRECISION_SCHEDULE
from p42_fixed_h_minimax import solve_fixed_h_minimax


class MonotonicPrecisionTests(unittest.TestCase):
    def test_precision_schedule_strictly_refines_with_p(self) -> None:
        self.assertEqual(tuple(PRECISION_SCHEDULE), (17, 33, 65))
        digits = tuple(PRECISION_SCHEDULE[nodes] for nodes in PRECISION_SCHEDULE)
        self.assertEqual(digits, (60, 70, 80))
        self.assertTrue(all(b > a for a, b in zip(digits, digits[1:])))

    def test_frozen_classifier_accepts_monotonic_full_gate_levels(self) -> None:
        values = (
            (3.0e-16, 1.2e-7, 2.0e-5, 4.0e-50),
            (2.0e-16, 1.0e-7, 1.9e-5, 4.0e-60),
            (1.0e-16, 4.0e-8, 1.8e-5, 4.0e-70),
        )
        levels = []
        for friedmann, ward, source, wronskian in values:
            levels.append({
                "diagnostics": {
                    "max_abs_friedmann_residual": friedmann,
                    "ward_normalized": ward,
                    "validation_source_relative_change": source,
                    "validation_wronskian_relative_error": wronskian,
                    "gate_pass": {
                        "dae_residual": True,
                        "max_abs_friedmann_residual": True,
                        "ward_normalized": True,
                        "validation_source_relative_change": True,
                        "validation_wronskian_relative_error": True,
                        "structural": True,
                    },
                }
            })
        verdict = classify(levels)
        self.assertTrue(verdict["pass"])
        self.assertEqual(verdict["classification"], "G22_PASS")

    def test_unknown_minimax_objective_fails_closed(self) -> None:
        with self.assertRaises(ValueError):
            solve_fixed_h_minimax(None, None, objective_mode="unknown")


if __name__ == "__main__":
    unittest.main()
