build(agent): molt-y#23e5c8 iteration

This commit is contained in:
agent-23e5c897f40fd19e 2026-04-15 21:52:51 +02:00
parent 97519bc61a
commit 69f0cddaa4
3 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,74 @@
"""Minimal CatOpt bridge for EnergiaMesh primitives.
This module provides a lightweight, language-agnostic translation layer
that maps EnergiaMesh core primitives (LocalProblem, SharedVariables,
PlanDelta, DualVariables, AuditLog) into a canonical CatOpt-like
representation. The goal is to bootstrap interoperability while keeping
the implementation tiny and well-scoped for the MVP.
"""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict
from energiamesh.core import LocalProblem, SharedVariables, PlanDelta, DualVariables, AuditLog
@dataclass
class CatOptBridge:
"""Tiny bridge translating EnergiaMesh primitives to CatOpt-like dicts."""
version: str = "0.1"
def to_catopt(self, obj: Any) -> Dict[str, Any]:
"""Translate a supported EnergiaMesh object to a CatOpt-like dict.
This is intentionally minimal and focuses on the structural
information needed for cross-domain interoperability in the MVP.
"""
if isinstance(obj, LocalProblem):
return {
"type": "LocalProblem",
"version": self.version,
"site_id": obj.site_id,
"objective": obj.objective,
"variables": obj.variables,
"constraints": obj.constraints,
"status": obj.status,
}
if isinstance(obj, SharedVariables):
return {
"type": "SharedVariables",
"version": self.version,
"signals": obj.signals,
"version_tag": obj.version,
"timestamp": obj.timestamp,
}
if isinstance(obj, PlanDelta):
return {
"type": "PlanDelta",
"version": self.version,
"delta_id": obj.delta_id,
"updates": obj.updates,
"metadata": obj.metadata,
"timestamp": obj.timestamp,
}
if isinstance(obj, DualVariables):
return {
"type": "DualVariables",
"version": self.version,
"multipliers": obj.multipliers,
"primal": obj.primal,
"timestamp": obj.timestamp,
}
if isinstance(obj, AuditLog):
return {
"type": "AuditLog",
"version": self.version,
"entries": obj.entries,
}
raise TypeError(f"Unsupported object type for CatOptBridge: {type(obj)!r}")
__all__ = ["CatOptBridge"]

0
test.sh Normal file → Executable file
View File

View File

@ -0,0 +1,36 @@
from energiamesh.catopt_bridge import CatOptBridge
from energiamesh.core import LocalProblem, SharedVariables, PlanDelta, DualVariables, AuditLog
def test_catopt_bridge_local_problem():
lp = LocalProblem(site_id="SiteA", objective="minimize_cost")
bridge = CatOptBridge()
catopt = bridge.to_catopt(lp)
assert catopt["type"] == "LocalProblem"
assert catopt["site_id"] == "SiteA"
def test_catopt_bridge_shared_variables():
sv = SharedVariables()
sv.update("forecast", {"temp": 20})
bridge = CatOptBridge()
catopt = bridge.to_catopt(sv)
assert catopt["type"] == "SharedVariables"
assert "forecast" in catopt["signals"]
def test_catopt_bridge_plan_delta_and_dual_variables():
pd = PlanDelta(delta_id="d1", updates={"x": 1})
dv = DualVariables(multipliers={"p": 0.5}, primal={"y": 2})
bridge = CatOptBridge()
assert bridge.to_catopt(pd)["type"] == "PlanDelta"
assert bridge.to_catopt(dv)["type"] == "DualVariables"
def test_catopt_bridge_audit_log():
al = AuditLog()
al.add_entry({"event": "start"})
bridge = CatOptBridge()
catopt = bridge.to_catopt(al)
assert catopt["type"] == "AuditLog"
assert isinstance(catopt["entries"], list)