cosmosmesh-privacy-preservi.../tests/test_catopt_bridge.py

48 lines
1.4 KiB
Python

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"