import pytest from cosmosmesh_privacy_preserving_federated.catopt_bridge import ( LocalProblem, SharedVariable, DualVariable, PlanDelta, CatOptBridge, ContractRegistry, ) def test_map_local_problem_to_catopt(): lp = LocalProblem( problem_id="lp_1", version=1, variables={"a": 1.0}, objective="optimize", constraints=["c1 <= 5"], ) bridge = CatOptBridge() catopt = bridge.map_local_problem(lp) assert isinstance(catopt, dict) assert "Objects" in catopt assert catopt["Objects"]["LocalProblem"]["problem_id"] == "lp_1" def test_shared_and_dual_variables_round_trip(): sv = SharedVariable("signalA", 42.0, 1) dv = DualVariable("signalA_dual", 0.5, 1) bridge = CatOptBridge() lp = LocalProblem(problem_id="lp_2", version=1, variables={"x": 2}, objective="o", constraints=None) rt = bridge.build_round_trip(lp, [sv], [dv]) assert isinstance(rt, dict) assert rt.get("kind") == "RoundTrip" payload = rt.get("payload", {}) assert payload.get("object").get("id") == lp.problem_id morphisms = payload.get("morphisms", []) assert any(m["name"] == sv.channel for m in morphisms) assert any(m["name"] == dv.channel for m in morphisms) def test_contract_registry_basic(): reg = ContractRegistry() reg.register_contract("example", "0.1", {"schema": "dummy"}) assert reg.get_contract("example", "0.1")["schema"] == "dummy"