148 lines
4.7 KiB
Python
148 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Versioned Stage-B v3 plan and locked-confirmation contracts."""
|
|
|
|
from pathlib import Path
|
|
import sys
|
|
import unittest
|
|
|
|
|
|
CODE_ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(CODE_ROOT))
|
|
|
|
from experiments.plan import build_trial_plan, load_document # noqa: E402
|
|
|
|
|
|
CONFIG_ROOT = CODE_ROOT / "config" / "experiments"
|
|
|
|
|
|
class BilateralNetworkV3ConfigTest(unittest.TestCase):
|
|
def test_screening_grid_is_directional_paired_and_bounded(self):
|
|
plan = build_trial_plan(
|
|
load_document(
|
|
CONFIG_ROOT / "bilateral_network_v3_screening.json"
|
|
)
|
|
)
|
|
|
|
self.assertEqual(plan["pair_count"], 30)
|
|
self.assertEqual(plan["trial_count"], 30)
|
|
self.assertEqual(
|
|
{trial["method"]["method_id"] for trial in plan["trials"]},
|
|
{"proposed_energy"},
|
|
)
|
|
self.assertEqual(
|
|
{
|
|
trial["trajectory"]["trajectory_id"]
|
|
for trial in plan["trials"]
|
|
},
|
|
{
|
|
"free_space_network_roundtrip",
|
|
"slow_contact_network_roundtrip",
|
|
},
|
|
)
|
|
self.assertEqual(
|
|
{
|
|
trial["factors"]["network_profile"]["profile_id"]
|
|
for trial in plan["trials"]
|
|
},
|
|
{
|
|
"nominal",
|
|
"symmetric_delay_40ms",
|
|
"asymmetric_delay_20_60ms",
|
|
"symmetric_40ms_jitter_4ms",
|
|
"symmetric_40ms_loss_2pct",
|
|
},
|
|
)
|
|
self.assertTrue(
|
|
all(
|
|
trial["factors"]["bilateral_pair_network_profiles"]
|
|
and trial["factors"]["network_common_random_numbers"]
|
|
for trial in plan["trials"]
|
|
)
|
|
)
|
|
|
|
def test_locked_confirmation_uses_disjoint_data_root(self):
|
|
calibration = load_document(
|
|
CONFIG_ROOT
|
|
/ "bilateral_calibration_v3_stable_contact.json"
|
|
)
|
|
calibration_data_root = calibration["factors"][
|
|
"bilateral_data_root_seed"
|
|
][0]
|
|
locked_names = (
|
|
"bilateral_locked_v3_stable_contact.json",
|
|
"bilateral_locked_v3_energy_challenge.json",
|
|
)
|
|
locked_data_roots = set()
|
|
for name in locked_names:
|
|
specification = load_document(CONFIG_ROOT / name)
|
|
plan = build_trial_plan(specification)
|
|
self.assertEqual(plan["split"], "locked")
|
|
self.assertEqual(plan["pair_count"], 20)
|
|
self.assertEqual(plan["trial_count"], 20)
|
|
locked_data_roots.add(
|
|
specification["factors"]["bilateral_data_root_seed"][0]
|
|
)
|
|
|
|
self.assertEqual(len(locked_data_roots), 1)
|
|
self.assertNotIn(calibration_data_root, locked_data_roots)
|
|
|
|
def test_network_metric_order_freezes_paired_gate_names(self):
|
|
configuration = load_document(
|
|
CONFIG_ROOT
|
|
/ "metrics_bilateral_network_v3_screening.json"
|
|
)
|
|
self.assertEqual(
|
|
configuration["enabled"],
|
|
["h3", "h4", "bilateral", "network"],
|
|
)
|
|
paired = configuration["network"]["paired_gates"]
|
|
self.assertEqual(paired["nominal_profile_id"], "nominal")
|
|
self.assertEqual(
|
|
paired[
|
|
"maximum_tracking_rmse_delta_vs_nominal_rad"
|
|
],
|
|
0.005,
|
|
)
|
|
self.assertEqual(
|
|
paired[
|
|
"maximum_abs_contact_rms_relative_change_vs_nominal"
|
|
],
|
|
0.1,
|
|
)
|
|
|
|
def test_locked_network_grid_uses_disjoint_twenty_seed_protocol(self):
|
|
screening = load_document(
|
|
CONFIG_ROOT / "bilateral_network_v3_screening.json"
|
|
)
|
|
locked = load_document(
|
|
CONFIG_ROOT / "bilateral_network_v3_locked.json"
|
|
)
|
|
plan = build_trial_plan(locked)
|
|
|
|
self.assertEqual(plan["split"], "locked")
|
|
self.assertEqual(plan["pair_count"], 200)
|
|
self.assertEqual(plan["trial_count"], 200)
|
|
self.assertEqual(
|
|
{trial["method"]["method_id"] for trial in plan["trials"]},
|
|
{"proposed_energy"},
|
|
)
|
|
self.assertNotEqual(
|
|
screening["factors"]["bilateral_data_root_seed"][0],
|
|
locked["factors"]["bilateral_data_root_seed"][0],
|
|
)
|
|
locked_metrics = load_document(
|
|
CONFIG_ROOT / "metrics_bilateral_network_v3_locked.json"
|
|
)
|
|
screening_metrics = load_document(
|
|
CONFIG_ROOT
|
|
/ "metrics_bilateral_network_v3_screening.json"
|
|
)
|
|
self.assertEqual(
|
|
locked_metrics["network"]["paired_gates"],
|
|
screening_metrics["network"]["paired_gates"],
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|