import json from elac_plan.core import LocalProblem, SharedVariables, PlanDelta, DualVariables from elac_plan.dsl import to_dsl_object, to_dsl_morphisms, to_dsl_plan, to_dsl_dual def test_dsl_object_translation(): lp = LocalProblem( id="lp1", asset="AAPL", venue="NYSE", objective="minimize_spread", constraints={"max_volume": 1000}, price_target=150.0, tolerance=0.5, ) dsl = to_dsl_object(lp) assert dsl.id == lp.id assert dsl.asset == lp.asset assert dsl.price_target == lp.price_target def test_dsl_morphisms_translation(): sv = SharedVariables(variables={"mid_price": 150.0}, version=1, contract_id="c1") dsl = to_dsl_morphisms(sv) assert dsl.contract_id == sv.contract_id assert dsl.version == sv.version assert dsl.variables["mid_price"] == 150.0 def test_dsl_plan_and_dual_translation(): delta = PlanDelta(delta={"action": "noop"}, timestamp="2024-01-01T00:00:00Z", author="tester", contract_id="c1", privacy_budget=0.0) dsl_plan = to_dsl_plan(delta) assert dsl_plan.contract_id == delta.contract_id assert dsl_plan.delta["action"] == "noop" dual = DualVariables(shadow_prices={"AAPL": 0.1}, version=1) dsl_dual = to_dsl_dual(dual) assert dsl_dual.contract_id == "" # default, not set in DualVariables dataclass; ok as placeholder assert dsl_dual.shadow_prices["AAPL"] == 0.1