Record coupled correction benefit cost and nonlinear curvature limits

This commit is contained in:
2026-09-18 10:21:19 -04:00
parent 0c926f40df
commit 46249d0758
3 changed files with 282 additions and 2 deletions

View File

@@ -182,6 +182,39 @@ class CoupledTrialCheckerTests(unittest.TestCase):
def test_exact_mixed_correction_and_provenance(self):
self.valid(c.inspect_campaign(self.campaign))
def test_saved_exact_correction_reports_geometry_without_dividing_by_zero_defect(self):
result=c.inspect_case(self.folder);self.valid(result)
mechanism=result['trial_outcomes'][0]['correction_mechanism']
self.assertAlmostEqual(mechanism['correction_direction_cosine'],1/math.sqrt(3.))
self.assertAlmostEqual(mechanism['correction_over_rhs_norm'],1.)
self.assertAlmostEqual(mechanism['correction_over_alpha_squared'],10.)
self.assertAlmostEqual(mechanism['corrected_displacement_over_outer_step_norm'],math.sqrt(41.))
self.assertAlmostEqual(mechanism['effective_direction_projection_t'],13/3)
self.assertEqual(mechanism['remainder_before_norm'],10.)
self.assertEqual(mechanism['remainder_after_norm'],0.)
self.assertEqual(mechanism['remainder_decomposition_error_norm'],0.)
self.assertIsNone(mechanism['own_taylor_over_verified_defect'])
def test_quadratic_correction_separates_linear_defect_from_own_curvature(self):
# F(x)=1+x+x^2 at x0=0 has p=-1. At x=-1 the Jacobian
# is -1; the inexact c=.98 passes eta=.03 but nearly undoes p.
# Its own E=c^2=.9604 dominates the .02 verified linear defect.
corrected_x=-.02;corrected_f=1+corrected_x+corrected_x**2
mechanism=c.correction_mechanism([0.],[-1.],1.,[0.],[1.],[corrected_x],
[corrected_f],[.98],[-1.],[-.98])
self.assertAlmostEqual(mechanism['correction_direction_cosine'],-1.)
self.assertAlmostEqual(mechanism['correction_over_rhs_norm'],.98)
self.assertAlmostEqual(mechanism['corrected_displacement_over_outer_step_norm'],.02)
self.assertAlmostEqual(mechanism['effective_direction_projection_t'],.02)
self.assertAlmostEqual(mechanism['remainder_after_norm'],.9804)
self.assertAlmostEqual(mechanism['verified_linear_defect_norm'],.02)
self.assertAlmostEqual(mechanism['own_taylor_remainder_norm'],.9604)
self.assertAlmostEqual(mechanism['own_taylor_over_correction_squared'],1.)
self.assertAlmostEqual(mechanism['own_taylor_over_verified_defect'],48.02)
self.assertAlmostEqual(mechanism['linear_defect_dot_own_taylor'],.019208)
self.assertLess(mechanism['remainder_decomposition_error_norm'],1.e-15)
json.dumps(mechanism,allow_nan=False)
def test_failed_verified_gate_is_valid_evidence_but_not_a_correction_success(self):
self.make_case('failed_gate');r=c.inspect_case(self.folder);self.valid(r)
self.assertFalse(r['trial_outcomes'][0]['aux_verified_gate']);self.assertFalse(r['trial_outcomes'][0]['full_merit_improved'])