22 lines
541 B
Python
22 lines
541 B
Python
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
|