from __future__ import annotations from dataclasses import dataclass, field from typing import Dict @dataclass class PrivacyBudget: epsilon: float remaining: Dict[str, float] = field(default_factory=dict) def __post_init__(self): if not self.remaining: self.remaining = {} def allocate(self, signal: str, amount: float) -> bool: rem = self.remaining.get(signal, self.epsilon) if amount > rem: return False self.remaining[signal] = rem - amount return True