def accuracy(p2p, gt_p2p, D1_geod, return_all=False, sqrt_area=None): """ Computes the geodesic accuracy of a vertex to vertex map. The map goes from the target shape to the source shape. Borrowed from Robin. Parameters ---------------------- p2p : (n2,) - vertex to vertex map giving the index of the matched vertex on the source shape for each vertex on the target shape (from a functional map point of view) gt_p2p : (n2,) - ground truth mapping between the pairs D1_geod : (n1,n1) - geodesic distance between pairs of vertices on the source mesh return_all : bool - whether to return all the distances or only the average geodesic distance Output ----------------------- acc : float - average accuracy of the vertex to vertex map dists : (n2,) - if return_all is True, returns all the pairwise distances """ dists = D1_geod[(p2p, gt_p2p)] if sqrt_area is not None: dists /= sqrt_area if return_all: return dists.mean(), dists return dists.mean()