in clearbox/features.py [0:0]
def evaluate(self, signal_data: pd.DataFrame) -> npt.NDArray[float]:
"""Evaluate the node on `signal_data`.
Args:
signal_data: `pd.DataFrame` of signal values.
Returns:
Array of results as floats.
"""
arg_data = self._arg.evaluate(signal_data)
if self._group_by is not None:
group_by_data = self._group_by.evaluate(signal_data)
ranks = (
pd.DataFrame({"groupby": group_by_data, "arg": -arg_data})
.groupby("groupby")["arg"]
.rank()
.values
)
else:
ranks = pd.Series(-arg_data).rank().values
return 1.0 / (ranks + self._k)