Source code for oineus.diff.vietoris_rips

import eagerpy as epy

from .. import vr_filtration as non_diff_vr_filtration
from .diff_filtration import DiffFiltration
from ._tensor_utils import tensor_to_real_numpy


[docs] def vr_filtration(data, from_pwdists: bool = False, max_dim: int = -1, max_diameter: float = -1.0, eps=1e-6, n_threads=1) -> DiffFiltration: data = epy.astensor(data) data_np = tensor_to_real_numpy(data) assert data.ndim == 2 fil, edges = non_diff_vr_filtration( data=data_np, from_pwdists=from_pwdists, with_critical_edges=True, max_dim=max_dim, max_diameter=max_diameter, n_threads=n_threads, ) if not from_pwdists: sqdists = epy.sum((data[edges[:, 0].flatten()] - data[edges[:, 1].flatten()]) ** 2, axis=1) + eps diff_dists = epy.sqrt(sqdists).raw return DiffFiltration(fil, diff_dists) else: edges = epy.astensor(edges) diff_dists = data[edges[:, 0], edges[:, 1]].raw return DiffFiltration(fil, diff_dists)