from abc import ABC, abstractmethod


class _BaseScaler(ABC):
    def __init__(self, with_copy=True, with_std=True, with_coslat=False, with_weights=False):
        self._params = dict(
            with_copy=with_copy,
            with_std=with_std,
            with_coslat=with_coslat,
            with_weights=with_weights
        )

        self.mean = None
        self.std = None
        self.coslat_weights = None
        self.weights = None

    @abstractmethod
    def fit(self, X, sample_dims, feature_dims, weights=None):
        raise NotImplementedError
    
    @abstractmethod
    def transform(self, X):
        raise NotImplementedError
    
    @abstractmethod
    def inverse_transform(self, X):
        raise NotImplementedError
    
    def get_params(self):
        return self._params.copy()