43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
import time
|
|
from dataclasses import asdict
|
|
|
|
from idea151_aidmesh_federated_privacy.core import LocalProblem, SharedSignals, DualVariables, AuditLog, PlanDelta, GoC, PolicyBlock
|
|
from idea151_aidmesh_federated_privacy.adapters import SupplyDepotController, FieldDistributionPlanner
|
|
from idea151_aidmesh_federated_privacy.solver import admm_step
|
|
|
|
|
|
def test_datamodel_instantiation():
|
|
lp = LocalProblem(
|
|
id="lp-1",
|
|
domain="water-allocation",
|
|
assets={"water": 100.0, "food": 50.0},
|
|
objectives=["minimize_delivery_time"],
|
|
constraints={"max_distance": 500}
|
|
)
|
|
ss = SharedSignals(forecast={"water": 120.0}, capacity_proxies={"water": 60.0}, privacy_budget=0.1, version=1)
|
|
dual = DualVariables(multipliers={"water": 1.0})
|
|
contract_id = lp.id
|
|
pd = admm_step(contract_id, lp, ss, dual)
|
|
assert isinstance(pd, PlanDelta)
|
|
assert contract_id == pd.contract_id
|
|
assert isinstance(pd.delta, dict)
|
|
|
|
|
|
def test_adapters_compile_and_generate_plan():
|
|
lp = LocalProblem(
|
|
id="lp-2",
|
|
domain="shelter-allocation",
|
|
assets={"shelter": 20.0},
|
|
objectives=["maximize_coverage"],
|
|
constraints={}
|
|
)
|
|
ss = SharedSignals(forecast={"shelter": 25.0}, capacity_proxies={"shelter": 10.0}, privacy_budget=0.05, version=1)
|
|
dual = DualVariables(multipliers={"shelter": 1.0})
|
|
cfg1 = SupplyDepotController("dep-1").propose_plan("lp-2", lp, ss, dual)
|
|
cfg2 = FieldDistributionPlanner("planner-1").propose_plan("lp-2", lp, ss, dual)
|
|
assert isinstance(cfg1, PlanDelta)
|
|
assert isinstance(cfg2, PlanDelta)
|
|
assert cfg1.contract_id == "lp-2"
|
|
assert cfg2.contract_id == "lp-2"
|
|
|