def METHOD_NAME(self, data: np.ndarray) -> np.ndarray:
    # TODO: different steepness and turning point for velocity and position?
    integral_forward = cumtrapz(data, axis=0, initial=0) / self.sampling_rate_hz
    # for backward integration, we flip the signal and inverse the time by using a negative sampling rate.
    integral_backward = cumtrapz(data[::-1], axis=0, initial=0) / -self.sampling_rate_hz
    weights = self._sigmoid_weight_function(integral_forward.shape[0])
    combined = (integral_forward.T * (1 - weights) + integral_backward[::-1].T * weights).T
    return combined