57 lines
2.4 KiB
Python
57 lines
2.4 KiB
Python
"""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}")
|