Skip to content

scale

Scale

Bases: OneToOneInversableDerivableTransformer

Transform series by a scaling by a value.

Parameters:

Name Type Description Default
value float

Scaling value.

required
Source code in eki_mmo_equations/one_to_one_transformations/normalisation_functions/scale.py
class Scale(OneToOneInversableDerivableTransformer):
    """Transform series by a scaling by a value.

    ```math
        \\frac{serie}{value}
    ```

    Args:
        value (float): Scaling value.
    """

    def __init__(self, value: float) -> None:
        self.value = value

    @property
    def parameters(self) -> Dict[str, float]:
        return self.__dict__

    @property
    def is_linear(self) -> bool:
        return True

    # ------- METHODS -------

    def fit(self, serie: np.ndarray, y=None):
        if self.value == 0:
            self.value = 1

        return super().fit(serie, y)

    def transform(self, serie: np.ndarray, copy=False) -> np.ndarray:
        serie = super().transform(serie, copy)

        return self._transformer(serie, self.value)

    def inverse_transform(self, serie: np.ndarray, copy=False) -> np.ndarray:
        serie = super().inverse_transform(serie, copy)

        return self._inverse_transformer(serie, self.value)

    def derivative_transform(self, serie: np.ndarray, copy=False) -> np.ndarray:
        serie = super().derivative_transform(serie, copy)

        return self._derivative_transformer(serie, self.value)

    # ------- TRANSFORMERS -------

    @staticmethod
    def _transformer(serie: np.ndarray, value: float) -> np.ndarray:
        if abs(value - 1) < FLOAT_TOLERANCE_THRESHOLD:
            return serie
        with np.errstate(over="raise", divide="raise"):
            return serie / value

    @staticmethod
    def _inverse_transformer(serie: np.ndarray, value) -> np.ndarray:
        return serie * value

    @staticmethod
    def _derivative_transformer(serie: np.ndarray, value) -> np.ndarray:
        with np.errstate(over="raise", divide="raise"):
            return (1 / value) * np.ones(np.shape(serie))

    # ------- CHECKERS -------

    def check_params(self, serie: np.ndarray):
        """Check if parameters respect their application scope."""
        if not self.value != 0:
            raise ParameterScopeException("The parameter 'value' should be different than 0")
        if not self.value != np.inf and self.value != -np.inf:
            raise ParameterScopeException(
                f"The parameter 'value' should be different than infinite. value: {self.value}"
            )

check_params(serie)

Check if parameters respect their application scope.

Source code in eki_mmo_equations/one_to_one_transformations/normalisation_functions/scale.py
def check_params(self, serie: np.ndarray):
    """Check if parameters respect their application scope."""
    if not self.value != 0:
        raise ParameterScopeException("The parameter 'value' should be different than 0")
    if not self.value != np.inf and self.value != -np.inf:
        raise ParameterScopeException(
            f"The parameter 'value' should be different than infinite. value: {self.value}"
        )