def METHOD_NAME(self, data: SingleSensorData, *, sampling_rate_hz: float, **_) -> Self:
    """Estimate the position of the sensor based on the provided global frame data.
    Parameters
    ----------
    data
        Continuous sensor data that includes at least a Acc with all values in the global world frame
    sampling_rate_hz
        The sampling rate of the data in Hz
    Returns
    -------
    self
        The class instance with all result attributes populated
    """
    self.data = data
    self.sampling_rate_hz = sampling_rate_hz
    if not 0.0 <= self.turning_point <= 1.0:
        raise ValueError("`turning_point` must be in the rage of 0.0 to 1.0")
    is_single_sensor_data(self.data, check_gyr=False, frame="sensor", raise_exception=True)
    acc_data = data[SF_ACC].to_numpy()
    if self.gravity is not None:
        acc_data -= self.gravity
    # Add an implicit 0 to the beginning of the acc data
    padded_acc = np.pad(acc_data, pad_width=((1, 0), (0, 0)), constant_values=0)
    velocity = self._forward_backward_integration(padded_acc)
    position_xy = cumtrapz(velocity[:, :2], axis=0, initial=0) / self.sampling_rate_hz
    if self.level_assumption is True:
        position_z = self._forward_backward_integration(velocity[:, [2]])
    else:
        position_z = cumtrapz(velocity[:, [2]], axis=0, initial=0) / self.sampling_rate_hz
    position = np.hstack((position_xy, position_z))
    self.velocity_ = pd.DataFrame(velocity, columns=GF_VEL)
    self.velocity_.index.name = "sample"
    self.position_ = pd.DataFrame(position, columns=GF_POS)
    self.position_.index.name = "sample"
    return self