Skip to content

power

Power

Bases: OneToOneInversableDerivableTransformer

Transform series by applying power function (meant to be mainly used as sqrt function).

Parameters:

Name Type Description Default
power float

power of the function applied.

required
Source code in eki_mmo_equations/one_to_one_transformations/mathematical_functions/power.py
class Power(OneToOneInversableDerivableTransformer):
    """Transform series by applying power function (meant to be mainly used as sqrt function).

    ```math
        serie^{power}
    ```

    Args:
        power (float): power of the function applied.
    """

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

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

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

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

        return self._transformer(serie, self.power)

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

        return self._inverse_transformer(serie, self.power)

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

        return self._derivative_transformer(serie, self.power)

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

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

    @staticmethod
    def _inverse_transformer(serie: np.ndarray, power) -> np.ndarray:
        with np.errstate(over="raise", divide="raise"):
            return np.power(serie, 1 / power)

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

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

    def check_params(self, serie: np.ndarray):
        """Check if parameters respect their application scope."""
        if not self.power != 0:
            raise ParameterScopeException(f"power should be different from 0. power: {self.power}.")

check_params(serie)

Check if parameters respect their application scope.

Source code in eki_mmo_equations/one_to_one_transformations/mathematical_functions/power.py
def check_params(self, serie: np.ndarray):
    """Check if parameters respect their application scope."""
    if not self.power != 0:
        raise ParameterScopeException(f"power should be different from 0. power: {self.power}.")