from abc import ABC, abstractmethod
import numpy as np
from typing import Dict, Any


class PrivacyMechanism(ABC):
    """
    隐私机制基类。
    所有具体隐私机制（如拉普拉斯机制、Copula生成器等）必须继承此类并实现 apply 方法。
    """

    @abstractmethod
    def apply(self, data: np.ndarray, params: Dict[str, Any]) -> np.ndarray:
        """
        应用隐私机制，返回扰动后的数据。

        Parameters
        ----------
        data : np.ndarray
            原始数据，形状 (n_samples, n_features)。
        params : Dict[str, Any]
            机制参数，例如 {'noise_level': 0.5, 'granularity': 100}。

        Returns
        -------
        np.ndarray
            扰动后的数据，形状与 data 相同。
        """
        pass