Source code for oineus.diff.mapping_cylinder
import numpy as np
import eagerpy as epy
from .. import _oineus
from .diff_filtration import DiffFiltration
[docs]
def mapping_cylinder_filtration(fil_domain: DiffFiltration, fil_codomain: DiffFiltration,
v_domain, v_codomain,
v_domain_value=None, v_codomain_value=None) -> DiffFiltration:
assert type(fil_domain) is DiffFiltration
assert type(fil_codomain) is DiffFiltration
if isinstance(v_domain, _oineus.Simplex):
v_domain = v_domain.combinatorial_cell
if isinstance(v_codomain, _oineus.Simplex):
v_codomain = v_codomain.combinatorial_cell
under_fil_dom = fil_domain.under_fil
under_fil_cod = fil_codomain.under_fil
if v_domain_value is None:
v_domain_value = under_fil_dom.neg_infinity()
if v_codomain_value is None:
v_codomain_value = under_fil_cod.neg_infinity()
under_cyl_fil, cyl_val_inds = _oineus._mapping_cylinder_with_indices(
under_fil_dom, under_fil_cod, v_domain, v_codomain, v_domain_value, v_codomain_value
)
cyl_val_inds = epy.astensor(np.array(cyl_val_inds, dtype=np.int64))
concat_vals = epy.concatenate((epy.astensor(fil_domain.values), epy.astensor(fil_codomain.values)))
assert concat_vals.ndim == 1 and concat_vals.shape[0] == fil_domain.size() + fil_codomain.size()
cyl_values = concat_vals[cyl_val_inds].raw
under_cyl_fil.kind = _oineus.FiltrationKind.MappingCylinder
return DiffFiltration(under_cyl_fil, cyl_values)