idea165-commonsgrid-communi.../idea165_commonsgrid_communi.../dsl.py

59 lines
1.7 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
@dataclass
class LocalProblem:
neighborhood_id: str
objective: str = "minimize_cost"
data_sources: List[str] = field(default_factory=list)
constraints: Dict[str, Any] = field(default_factory=dict)
def to_dict(self) -> Dict[str, Any]:
return {
"type": "LocalProblem",
"neighborhood_id": self.neighborhood_id,
"objective": self.objective,
"data_sources": self.data_sources,
"constraints": self.constraints,
}
@dataclass
class SharedSignals:
signals: Dict[str, Any] = field(default_factory=dict)
privacy_budget: Optional[float] = None
def to_dict(self) -> Dict[str, Any]:
return {
"type": "SharedSignals",
"signals": self.signals,
"privacy_budget": self.privacy_budget,
}
@dataclass
class PlanDelta:
timestamp: float
delta: Dict[str, Any]
def to_dict(self) -> Dict[str, Any]:
return {"type": "PlanDelta", "timestamp": self.timestamp, "delta": self.delta}
@dataclass
class PrivacyBudget:
signal: str
budget: float
def to_dict(self) -> Dict[str, Any]:
return {"type": "PrivacyBudget", "signal": self.signal, "budget": self.budget}
@dataclass
class AuditLog:
entries: List[Dict[str, Any]] = field(default_factory=list)
def add(self, entry: Dict[str, Any]) -> None:
self.entries.append(entry)
def to_dict(self) -> Dict[str, Any]:
return {"type": "AuditLog", "entries": self.entries}
__all__ = ["LocalProblem", "SharedSignals", "PlanDelta", "PrivacyBudget", "AuditLog"]