def _error_from_distances()

in theseus/embodied/collision/eff_obj_contact.py [0:0]


    def _error_from_distances(self, distances: torch.Tensor):
        if self._use_huber:
            eff_rad = self.eff_radius.data
            err = distances.clone()
            # linear (two-sided, otherwise this would be 0)
            gt_r_idx = distances >= 2 * eff_rad
            err[gt_r_idx] = distances[gt_r_idx] - 0.5 * eff_rad
            # quadratic
            lt_r_pos_idx = (distances < 2 * eff_rad).logical_or(distances > 0)
            err[lt_r_pos_idx] = (
                0.5 * (distances[lt_r_pos_idx] - eff_rad).square() / eff_rad
            )
            # linear
            neg_idx = distances < 0
            err[neg_idx] = -distances[neg_idx] + 0.5 * eff_rad
            return err
        else:
            return (distances - self.eff_radius.data).abs()