Skip to main content

impulse_query_engine.model.series.points_in_time_series

PointsInTimeSeries class implementation

PointsInTimeSeries

class PointsInTimeSeries()

__init__

def __init__(tstarts: Sized,
values: Sized,
value_type: SeriesValueType = SeriesValueType.DOUBLE)

Initialize the PointsInTimeSeries object.

A PointsInTimeSeries associates a value to each timestamp. Unlike a SampleSeries, a value is only defined at its timestamp and is not considered valid in between consecutive timestamps.

Arguments:

  • tstarts (Sized): Array-like of time points.
  • values (Sized): Array-like of values, one per time point.
  • value_type (SeriesValueType): The value data type (default DOUBLE). Validated against values for a non-empty series; carried explicitly so an empty series stays typed correctly (there are no values to infer from). STRING series support only sampling and equality — see the @_numeric_only methods.

value_type

def value_type() -> SeriesValueType

This series' value data type (numeric DOUBLE or STRING).

is_string

def is_string() -> bool

Whether this series carries string (rather than numeric) values.

dtype

def dtype() -> T.DataType

Returns the Spark data type for PointsInTimeSeries.

For numeric values the element is a homogeneous [tstart, value] double pair (ArrayType(ArrayType(DoubleType))). String-valued series cannot use that homogeneous nested array, so their element is a (tstart, value) struct with a double timestamp and a string value.

Returns:

pyspark.sql.types.ArrayType: Spark ArrayType matching get_data's shape for this series' value type.

get_data

def get_data() -> list

Returns the series as a list of [tstart, value] pairs.

For numeric values this is a list of two-element double lists. For string values, column_stack would coerce the timestamps to strings, so the pairs are built explicitly as [float(tstart), str(value)] — matching the struct element type declared by :meth:dtype.

Returns:

list: List of [tstart, value] pairs.

__len__

def __len__() -> int

Returns the number of points in the series.

Returns:

int: Number of points.

start_time

def start_time() -> FloatOrNaN

Returns the time of the first point.

Returns:

float: Start time or NaN if empty.

end_time

def end_time() -> FloatOrNaN

Returns the time of the last point.

Returns:

float: End time or NaN if empty.

to_points_in_time

def to_points_in_time() -> PointsInTime

Returns the timestamps of this series as a PointsInTime object (dropping the values).

Returns:

PointsInTime: Points in time with this series' timestamps.

plane_sweep

def plane_sweep(
points, other: SampleSeries | Intervals | PointsInTime | PointsInTimeSeries
) -> list[tuple[int, int]]

Find overlaps between a point-like series and another series/interval object.

Arguments:

  • points (PointsInTimeSeries or PointsInTime): Point-like object exposing a tstarts attribute.
  • other (SampleSeries, Intervals, PointsInTime, or PointsInTimeSeries): Object to find overlaps with. Interval-like objects (SampleSeries, Intervals) match points contained in their half-open intervals; point-like objects (PointsInTime, PointsInTimeSeries) match points with equal timestamps.

Raises:

  • NotImplementedError: If other is not one of the supported types.

Returns:

list of tuple: (points_idx, other_idx) index pairs indicating overlaps.

synchronized

def synchronized(
other: SampleSeries | PointsInTimeSeries
) -> tuple[PointsInTimeSeries, PointsInTimeSeries]

Synchronize this point series with a value-carrying series.

The result grid is the subset of this series' timestamps that overlap other: points contained in one of other's intervals (when other is a SampleSeries) or points with a matching timestamp (when other is a PointsInTimeSeries). Out-of-overlap points are dropped. Both returned series share the same timestamps.

Arguments:

  • other (SampleSeries or PointsInTimeSeries): Value-carrying series to synchronize with.

Raises:

  • NotImplementedError: If other does not carry values (Intervals, PointsInTime).

Returns:

tuple of PointsInTimeSeries: Synchronized (this series, other series).

synchronized_all

def synchronized_all(
others: list[SampleSeries | PointsInTimeSeries]
) -> tuple[PointsInTimeSeries, ...]

Synchronize this point series with multiple value-carrying series.

The common grid is narrowed against each operand in turn; all previously synchronized series are re-aligned to the narrowed grid.

Arguments:

  • others (list of SampleSeries or PointsInTimeSeries): Series to synchronize with.

Raises:

  • NotImplementedError: If any operand does not carry values (Intervals, PointsInTime).

Returns:

tuple of PointsInTimeSeries: Synchronized series, one per input series (this series first).

__add__

def __add__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Add another series or scalar to this series.

__radd__

def __radd__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Add this series to another series or scalar (reversed operands).

__sub__

def __sub__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Subtract another series or scalar from this series.

__rsub__

def __rsub__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Subtract this series from another series or scalar (reversed operands).

__mul__

def __mul__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Multiply this series by another series or scalar.

__rmul__

def __rmul__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Multiply another series or scalar by this series (reversed operands).

__truediv__

def __truediv__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Divide this series by another series or scalar.

__rtruediv__

def __rtruediv__(
other: float | SampleSeries | PointsInTimeSeries
) -> PointsInTimeSeries

Divide another series or scalar by this series (reversed operands).

__gt__

def __gt__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is greater than another.

__ge__

def __ge__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is greater than or equal to another.

__lt__

def __lt__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is less than another.

__le__

def __le__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is less than or equal to another.

__eq__

def __eq__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is equal to another.

__ne__

def __ne__(other: float | SampleSeries | PointsInTimeSeries) -> PointsInTime

Return points where this series is not equal to another.

count

def count() -> int

Returns the number of points in the series.

Returns:

int: Number of points.

sum

def sum() -> FloatOrNaN

Returns the sum of the values.

Returns:

float: Sum of values, or NaN if empty.

mean

def mean() -> FloatOrNaN

Returns the mean of the values.

Returns:

float: Mean of values, or NaN if empty.

min

def min() -> FloatOrNaN

Returns the minimum value.

Returns:

float: Minimum value, or NaN if empty.

max

def max() -> FloatOrNaN

Returns the maximum value.

Returns:

float: Maximum value, or NaN if empty.

__str__

def __str__() -> str

Returns a string representation of the PointsInTimeSeries.

Returns:

str: String representation.

__repr__

def __repr__() -> str

Returns a string representation for debugging.

Returns:

str: String representation.

empty

def empty(
value_type: SeriesValueType = SeriesValueType.DOUBLE
) -> PointsInTimeSeries

Returns an empty PointsInTimeSeries of the given value type.

Arguments:

  • value_type (SeriesValueType): The value data type of the empty series (default DOUBLE).

Returns:

PointsInTimeSeries: Empty PointsInTimeSeries of value_type.