import numpy as np


class RobustKernels:
    @staticmethod
    def huber(residual: float, delta: float = 1.0) -> float:
        raise NotImplementedError

    @staticmethod
    def cauchy(residual: float, c: float = 1.0) -> float:
        raise NotImplementedError

    @staticmethod
    def tukey(residual: float, c: float = 4.685) -> float:
        raise NotImplementedError

    @staticmethod
    def huber_weight(residual: float, delta: float = 1.0) -> float:
        raise NotImplementedError

    @staticmethod
    def cauchy_weight(residual: float, c: float = 1.0) -> float:
        raise NotImplementedError

    @staticmethod
    def compute_robust_covariance(
        residuals: np.ndarray,
        kernel: str = "huber",
        **kwargs,
    ) -> np.ndarray:
        raise NotImplementedError

