"""EnergiBridge-like canonical IR bridge for ArbSphere primitives. Provides simple to_json / from_json translations between ArbSphere primitives and a lightweight Graph-of-Contracts (GoC) like payload format. This is intentionally minimal as a scaffold for MVP interoperability. """ from __future__ import annotations from typing import Dict, Any from .primitives import LocalArbProblem, SharedSignals, PlanDelta, DualVariables, PrivacyBudget, AuditLog, TimeRounds, GoCRegistry def to_ir(obj: object) -> Dict[str, Any]: """Serialize a primitive to a canonical IR dict.""" if isinstance(obj, LocalArbProblem): return {"contract_type": "LocalArbProblem", "payload": obj.to_json()} if isinstance(obj, SharedSignals): return {"contract_type": "SharedSignals", "payload": obj.to_json()} if isinstance(obj, PlanDelta): return {"contract_type": "PlanDelta", "payload": obj.to_json()} if isinstance(obj, DualVariables): return {"contract_type": "DualVariables", "payload": obj.to_json()} if isinstance(obj, PrivacyBudget): return {"contract_type": "PrivacyBudget", "payload": obj.to_json()} if isinstance(obj, AuditLog): return {"contract_type": "AuditLog", "payload": obj.to_json()} if isinstance(obj, TimeRounds): return {"contract_type": "TimeRounds", "payload": obj.to_json()} if isinstance(obj, GoCRegistry): return {"contract_type": "GoCRegistry", "payload": obj.to_json()} raise TypeError(f"Unsupported type for IR translation: {type(obj)}") def from_ir(payload: Dict[str, Any]) -> object: """Deserialize a canonical IR payload back into a primitive instance when possible.""" ct = payload.get("contract_type") data = payload.get("payload", {}) if ct == "LocalArbProblem": return LocalArbProblem.from_json(data) if ct == "SharedSignals": return SharedSignals.from_json(data) if ct == "PlanDelta": return PlanDelta.from_json(data) if ct == "DualVariables": return DualVariables.from_json(data) if ct == "PrivacyBudget": return PrivacyBudget.from_json(data) if ct == "AuditLog": return AuditLog.from_json(data) if ct == "TimeRounds": return TimeRounds.from_json(data) if ct == "GoCRegistry": return GoCRegistry.from_json(data) raise ValueError(f"Unknown contract_type in IR payload: {ct}")