import numpy as np
from typing import Optional, Dict, Any
from ..risk_meter import RiskMeter


class DPRisk(RiskMeter):
    """
    差分隐私风险度量器。
    直接从 params 中读取 epsilon 作为风险值。
    如果 params 中不包含 'epsilon'，返回 np.inf。
    """

    def measure(self,
                original: np.ndarray,
                perturbed: np.ndarray,
                params: Optional[Dict[str, Any]] = None) -> float:
        if params is None or 'epsilon' not in params:
            return np.inf
        return float(params['epsilon'])