Source code for homcloud.interface.distance

import math

import homcloud.hera_bottleneck as hera_bottleneck
import homcloud.hera_wasserstein as hera_wasserstein


[docs] def bottleneck(pd1, pd2, delta=0.000001): """ Compute the bottleneck distance between two diagrams. The parameter `delta` determines the acceptable relative error. If delta is zero, the return value is exact but slower. If delta is positive, the return value is not exact but faster. Notes: This function uses hera library <https://bitbucket.org/grey_narn/hera>. See the following paper for theoretical details: Michael Kerber, Dmitriy Morozov, and Arnur Nigmetov, "Geometry Helps to Compare Persistence Diagrams.", Journal of Experimental Algorithmics, vol. 22, 2017, pp. 1--20. (conference version: ALENEX 2016). Args: pd1 (PD): A persistence diagram pd2 (PD): Another persistence diagram delta (float): Acceptable relative error, must be zero or positive Returns: float: the bottleneck distance betweeen two diagrams """ return hera_bottleneck.bottleneck_distance(pd1.births, pd1.deaths, pd2.births, pd2.deaths, delta)
[docs] def wasserstein(pd1, pd2, power=2, internal_p=math.inf, delta=0.000001): """ Compute the Wasserstein distance between two diagrams. Example: >>> import homcloud.interface as hc >>> hc.distance.wasserstein(pd1, pd2, delta=0.01) Returns 2-Wasserstein distance with relative error <= 0.01 Notes: This function uses hera library <https://bitbucket.org/grey_narn/hera>. See the following paper for theoretical details: Michael Kerber, Dmitriy Morozov, and Arnur Nigmetov, "Geometry Helps to Compare Persistence Diagrams.", Journal of Experimental Algorithmics, vol. 22, 2017, pp. 1--20. (conference version: ALENEX 2016). Args: pd1 (PD): A persistence diagram pd2 (PD): Another persistence diagram power (float): Wasserstein degree, must be larger than or equal to 1 internal_p (float): The internal norm in Wasserstein distance, must be larger than or equal to 1 including infinity delta (float): Acceptable relative error, must be zero or positive Returns: float: the Wasserstein distance betweeen two diagrams """ return hera_wasserstein.wasserstein_distance( pd1.births, pd1.deaths, pd2.births, pd2.deaths, power, internal_p, delta )