59 lines
1.7 KiB
Python
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"]
|