import math from cosmosmesh_privacy_preserving_federated.catopt_bridge import ( CatOptBridge, LocalProblem, SharedVariable, DualVariable, ) def test_basic_roundtrip_encoding(): # Build a tiny LocalProblem and signals lp = LocalProblem( problem_id="lp-task-01", objective="minimize_energy", variables=["x1", "x2"], constraints=["x1>=0", "x2>=0", "x1+x2<=10"], version=1, ) sv1 = SharedVariable(name="sigma", value=0.5, version=1) dv1 = DualVariable(name="lambda", value=1.25, version=1) round_msg = CatOptBridge.build_round_trip(lp, [sv1], [dv1]) # Basic invariants about the payload assert round_msg["kind"] == "RoundTrip" payload = round_msg["payload"] assert payload["object"]["id"] == lp.problem_id assert any(m.get("name") == sv1.name for m in payload["morphisms"]) assert any(m.get("name") == dv1.name for m in payload["morphisms"])