Source code for perda.core_data_structures.masking

from __future__ import annotations

from enum import Enum
from typing import Callable

from .data_instance import DataInstance


[docs] class FilterOptions(Enum): """Specifies which array(s) a filter function receives as input.""" VALUES = "left_only" TIMESTAMPS = "right_only" BOTH = "both"
[docs] def apply_ufunc_filter( data: DataInstance, filter_func: Callable, apply_to: FilterOptions = FilterOptions.VALUES, ) -> DataInstance: """ Apply a filter function to a DataInstance. Parameters ---------- data : DataInstance Input DataInstance filter_func : Callable Function that takes in values and/or timestamps and returns a boolean mask apply_to : FilterOptions, optional Whether to apply the filter to values, timestamps, or both. Default is values Returns ------- DataInstance Filtered DataInstance """ if apply_to == FilterOptions.VALUES: mask = filter_func(data.value_np) elif apply_to == FilterOptions.TIMESTAMPS: mask = filter_func(data.timestamp_np) else: mask = filter_func(data.timestamp_np, data.value_np) return DataInstance( timestamp_np=data.timestamp_np[mask], value_np=data.value_np[mask], label=data.label, var_id=data.var_id, cpp_name=data.cpp_name, )