Skip to content

gradient_aware_harmonisation.timeseries#

Definition of our timeseries class

Classes:

Name Description
Timeseries

Timeseries class

Timeseries #

Timeseries class

Methods:

Name Description
to_spline

Convert to a continuous spline

values_validator

Validate the values

Source code in src/gradient_aware_harmonisation/timeseries.py
@define
class Timeseries:
    """
    Timeseries class
    """

    time_axis: npt.NDArray[Any]
    values: npt.NDArray[Any] = field()

    @values.validator
    def values_validator(self, attribute: Any, value: Any) -> None:
        """
        Validate the values

        Parameters
        ----------
        attribute
            Attribute to validate

        value
            Value to validate
        """
        if value.size != self.time_axis.size:
            msg = (
                f"{attribute.name} must have the same size as time_axis. "
                f"Received {value.size=} {self.time_axis.size=}"
            )
            raise ValueError(msg)

    def to_spline(self, **kwargs: Any) -> SplineScipy:
        """
        Convert to a continuous spline

        Uses [scipy.interpolate.make_interp_spline][]
        with `self`'s values and time axis.

        Parameters
        ----------
        **kwargs
            Passed to [scipy.interpolate.make_interp_spline][]

        Returns
        -------
        :
            Spline, generated using [scipy.interpolate.make_interp_spline][]
        """
        try:
            import scipy.interpolate
        except ImportError as exc:
            raise MissingOptionalDependencyError(
                "to_spline", requirement="scipy.interpolate"
            ) from exc

        # Late import to avoid circularity
        from gradient_aware_harmonisation.spline import SplineScipy

        return SplineScipy(
            scipy.interpolate.make_interp_spline(
                x=self.time_axis, y=self.values, **kwargs
            ),
            # domain=(self.time_axis.min(), self.time_axis.max())
        )

to_spline #

to_spline(**kwargs: Any) -> SplineScipy

Convert to a continuous spline

Uses scipy.interpolate.make_interp_spline with self's values and time axis.

Parameters:

Name Type Description Default
**kwargs Any {}

Returns:

Type Description
SplineScipy

Spline, generated using scipy.interpolate.make_interp_spline

Source code in src/gradient_aware_harmonisation/timeseries.py
def to_spline(self, **kwargs: Any) -> SplineScipy:
    """
    Convert to a continuous spline

    Uses [scipy.interpolate.make_interp_spline][]
    with `self`'s values and time axis.

    Parameters
    ----------
    **kwargs
        Passed to [scipy.interpolate.make_interp_spline][]

    Returns
    -------
    :
        Spline, generated using [scipy.interpolate.make_interp_spline][]
    """
    try:
        import scipy.interpolate
    except ImportError as exc:
        raise MissingOptionalDependencyError(
            "to_spline", requirement="scipy.interpolate"
        ) from exc

    # Late import to avoid circularity
    from gradient_aware_harmonisation.spline import SplineScipy

    return SplineScipy(
        scipy.interpolate.make_interp_spline(
            x=self.time_axis, y=self.values, **kwargs
        ),
        # domain=(self.time_axis.min(), self.time_axis.max())
    )

values_validator #

values_validator(attribute: Any, value: Any) -> None

Validate the values

Parameters:

Name Type Description Default
attribute Any

Attribute to validate

required
value Any

Value to validate

required
Source code in src/gradient_aware_harmonisation/timeseries.py
@values.validator
def values_validator(self, attribute: Any, value: Any) -> None:
    """
    Validate the values

    Parameters
    ----------
    attribute
        Attribute to validate

    value
        Value to validate
    """
    if value.size != self.time_axis.size:
        msg = (
            f"{attribute.name} must have the same size as time_axis. "
            f"Received {value.size=} {self.time_axis.size=}"
        )
        raise ValueError(msg)