48 lines
1.4 KiB
Python
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"
|