chalc.sixpack.morphisms

Helper classes representing morphisms between filtered simplicial complexes.

Classes

FiltrationInclusion

Abstract inclusion of a filtered subcomplex.

FiltrationMorphism

Abstract map between filtered simplicial complexes.

FiltrationQuotient

Represents the gluing map of a disjoint union of subfiltrations.

KChromaticInclusion

Inclusion of the simplices having at most \(k\) colours.

KChromaticQuotient

Corresponds to gluing all subfiltrations spanned by \(k\) colours.

SubChromaticInclusion

Inclusion of a subfiltration spanned by any combination(s) of colours.

SubChromaticQuotient

Represents a gluing map in a chromatic filtration.

Module Contents

class FiltrationInclusion(filtration: chalc.filtration.Filtration)

Bases: FiltrationMorphism, abc.ABC

digraph inheritance0abae83a1b { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationInclusion" [URL="#chalc.sixpack.morphisms.FiltrationInclusion",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract inclusion of a filtered subcomplex."]; "FiltrationMorphism" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Abstract inclusion of a filtered subcomplex.

This class constructs the inclusion of an arbitrary subfiltration of a chromatic filtration.

This is an abstract class. To specify an inclusion map, use one of its concrete subclasses or create your own. To implement your own inclusion map, you need to implement the membership test simplex_in_domain which checks if a simplex is in the domain of the inclusion map.

abstractmethod simplex_in_domain(column: tuple[list[int], int, float, list[int]]) bool

Check if a simplex is in the domain of the inclusion map.

A simplex is identified by its column in the boundary matrix of the filtration. This column has the same format as the columns returned by chalc.filtration.Filtration.boundary_matrix().

sixpack(max_diagram_dimension: int | None = None) chalc.sixpack.types.SixPack

Compute the 6-pack of persistence diagrams of a coloured point-cloud.

This function constructs a filtered simplicial complex \(K\) from the point cloud, and computes the 6-pack of persistence diagrams associated with a map of \(f : L \to K\) of filtrations, where \(L\) is some filtration constructed from \(K\).

Parameters:

max_diagram_dimension – Maximum homological dimension for which the persistence diagrams are computed. By default diagrams of all dimensions are computed.

Returns :

Diagrams corresponding to the following persistence modules (where \(H_*\) is the persistent homology functor and \(f_*\) is the induced map on persistent homology):

  1. \(H_*(L)\) (domain)

  2. \(H_*(K)\) (codomain)

  3. \(\ker(f_*)\) (kernel)

  4. \(\mathrm{coker}(f_*)\) (cokernel)

  5. \(\mathrm{im}(f_*)\) (image)

  6. \(H_*(\mathrm{cyl}(f), L)\) (relative homology)

Each diagram is represented by sets of paired and unpaired simplices, and contains simplices of all dimensions. dgms also contains the entrance times of the simplices and their dimensions.

class FiltrationMorphism(filtration: chalc.filtration.Filtration)

Bases: abc.ABC

digraph inheritance0e18d8d56c { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Abstract map between filtered simplicial complexes.

The map is a combinatorial proxy for the spatial relationships between points in the filtration of different colours. This is an abstract class. To specify a morphism, instantiate one of its concrete subclasses.

abstractmethod sixpack(max_diagram_dimension: int | None = None) chalc.sixpack.types.SixPack

Compute the 6-pack of persistence diagrams of a coloured point-cloud.

This function constructs a filtered simplicial complex \(K\) from the point cloud, and computes the 6-pack of persistence diagrams associated with a map of \(f : L \to K\) of filtrations, where \(L\) is some filtration constructed from \(K\).

Parameters:

max_diagram_dimension – Maximum homological dimension for which the persistence diagrams are computed. By default diagrams of all dimensions are computed.

Returns :

Diagrams corresponding to the following persistence modules (where \(H_*\) is the persistent homology functor and \(f_*\) is the induced map on persistent homology):

  1. \(H_*(L)\) (domain)

  2. \(H_*(K)\) (codomain)

  3. \(\ker(f_*)\) (kernel)

  4. \(\mathrm{coker}(f_*)\) (cokernel)

  5. \(\mathrm{im}(f_*)\) (image)

  6. \(H_*(\mathrm{cyl}(f), L)\) (relative homology)

Each diagram is represented by sets of paired and unpaired simplices, and contains simplices of all dimensions. dgms also contains the entrance times of the simplices and their dimensions.

class FiltrationQuotient(filtration: chalc.filtration.Filtration, num_subfiltrations: int)

Bases: FiltrationMorphism, abc.ABC

digraph inheritancec2f0653ac3 { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationQuotient" [URL="#chalc.sixpack.morphisms.FiltrationQuotient",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Represents the gluing map of a disjoint union of subfiltrations."]; "FiltrationMorphism" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Represents the gluing map of a disjoint union of subfiltrations.

This is an abstract class. To specify a quotient map, use one of its concrete subclasses or create your own. To implement a quotient map, you need to implement the simplex_in_filtration method, and make sure that self.num_subfiltrations is initialized before sixpack() is called.

num_subfiltrations: int

The number of subfiltrations in the quotient map.

abstractmethod simplex_in_filtration(column: tuple[list[int], int, float, list[int]], i: int) bool

Check if a simplex is in the ith subfiltration.

sixpack(max_diagram_dimension: int | None = None) chalc.sixpack.types.SixPack

Compute the 6-pack of persistence diagrams of a coloured point-cloud.

This function constructs a filtered simplicial complex \(K\) from the point cloud, and computes the 6-pack of persistence diagrams associated with a map of \(f : L \to K\) of filtrations, where \(L\) is some filtration constructed from \(K\).

Parameters:

max_diagram_dimension – Maximum homological dimension for which the persistence diagrams are computed. By default diagrams of all dimensions are computed.

Returns :

Diagrams corresponding to the following persistence modules (where \(H_*\) is the persistent homology functor and \(f_*\) is the induced map on persistent homology):

  1. \(H_*(L)\) (domain)

  2. \(H_*(K)\) (codomain)

  3. \(\ker(f_*)\) (kernel)

  4. \(\mathrm{coker}(f_*)\) (cokernel)

  5. \(\mathrm{im}(f_*)\) (image)

  6. \(H_*(\mathrm{cyl}(f), L)\) (relative homology)

Each diagram is represented by sets of paired and unpaired simplices, and contains simplices of all dimensions. dgms also contains the entrance times of the simplices and their dimensions.

class KChromaticInclusion(filtration: chalc.filtration.Filtration, k: int)

Bases: FiltrationInclusion

digraph inheritance26b4a12fc1 { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationInclusion" [URL="#chalc.sixpack.morphisms.FiltrationInclusion",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract inclusion of a filtered subcomplex."]; "FiltrationMorphism" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; "KChromaticInclusion" [URL="#chalc.sixpack.morphisms.KChromaticInclusion",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Inclusion of the simplices having at most :math:`k` colours."]; "FiltrationInclusion" -> "KChromaticInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Inclusion of the simplices having at most \(k\) colours.

The \(k\)-chromatic subfiltration is spanned by simplices having at most \(k\) colours. This represents a special case of SubChromaticInclusion. Using the notation from SubChromaticInclusion, this class corresponds to setting \(\tau\) to be the \(k\)-skeleton of \(\Delta^s\), where \(\{0, \ldots, s\}\) is the set of colours.

In practical terms, the following code:

KChromaticInclusion(filtration, k).sixpack()

should give the same 6-pack of persistence diagrams as this:

SubChromaticInclusion(
        filtration,
        itertools.combinations(range(n_colours), k)
).sixpack()

There is, however, a slight performance benefit to using KChromaticInclusion over SubChromaticInclusion in this situation.

Examples

To consider the inclusion of all monochromatic simplices:

KChromaticInclusion(filtration, 1).sixpack()

To consider the inclusion of all simplices spanned by at most two colours:

KChromaticInclusion(filtration, 2).sixpack()
k: int

The value k.

simplex_in_domain(column: tuple[list[int], int, float, list[int]]) bool

Check if a simplex is in the domain of the inclusion map.

A simplex is identified by its column in the boundary matrix of the filtration. This column has the same format as the columns returned by chalc.filtration.Filtration.boundary_matrix().

class KChromaticQuotient(filtration: chalc.filtration.Filtration, k: int)

Bases: FiltrationQuotient

digraph inheritancea06ef1a856 { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationQuotient" [URL="#chalc.sixpack.morphisms.FiltrationQuotient",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Represents the gluing map of a disjoint union of subfiltrations."]; "FiltrationMorphism" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; "KChromaticQuotient" [URL="#chalc.sixpack.morphisms.KChromaticQuotient",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Corresponds to gluing all subfiltrations spanned by :math:`k` colours."]; "FiltrationQuotient" -> "KChromaticQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Corresponds to gluing all subfiltrations spanned by \(k\) colours.

This represents a special case of SubChromaticQuotient. Using the notation from SubChromaticQuotient, this class corresponds to having the \(\tau_i\) range over all combinations of \(k\) colours from the set of colours \(\{0, \ldots, s\}\).

In practical terms, the following code:

KChromaticInclusion(filtration, k).sixpack()

should give the same 6-pack of persistence diagrams as this:

n_colours = len(set(colours))
SubChromaticQuotient(
        filtration,
        tuple(
                (combination,)
                for combination in combinations(range(n_colours), k))
        )
)

Note

KChromaticQuotient(1) is essentially the same as KChromaticInclusion(1) since both represent the inclusion of all monochromatic simplices. You should prefer to use KChromaticInclusion(1) for performance reasons, since KChromaticQuotient(1) will compute the mapping cylinder of the inclusion map, which is unnecessary.

k: int

The value k.

simplex_in_filtration(column: tuple[list[int], int, float, list[int]], i: int) bool

Check if a simplex is in the ith subfiltration.

class SubChromaticInclusion(
filtration: chalc.filtration.Filtration,
tau: collections.abc.Collection[collections.abc.Collection[int]] | collections.abc.Collection[int],
)

Bases: FiltrationInclusion, collections.abc.Sized

digraph inheritance69a03633f5 { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationInclusion" [URL="#chalc.sixpack.morphisms.FiltrationInclusion",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract inclusion of a filtered subcomplex."]; "FiltrationMorphism" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; "Sized" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled"]; "SubChromaticInclusion" [URL="#chalc.sixpack.morphisms.SubChromaticInclusion",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Inclusion of a subfiltration spanned by any combination(s) of colours."]; "FiltrationInclusion" -> "SubChromaticInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; "Sized" -> "SubChromaticInclusion" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Inclusion of a subfiltration spanned by any combination(s) of colours.

Let \(\{0, \ldots, s\}\) be a set of colours, let \(\Delta^s\) be the abstract simplicial complex whose vertices represent individual colours, and let \(\tau\) be any subcomplex of \(\Delta^s\). For a filtered simplicial complex \(K\) on a vertex set \(V\), and a colouring \(\mu:V \to \{0, \ldots, s\}\) of \(V\), let \(K/\tau\) denote the subfiltration of \(K\) comprising simplices \(\sigma \in K\) satisfying \(\mu(\sigma) \in \tau\). This class represents the inclusion map \(K/\tau \hookrightarrow K\).

The complex \(\tau\) is specified by its maximal faces, or by its maximal face if there is only one.

Examples

The inclusion of all monochromatic simplices of colours 0 and 1:

SubChromaticInclusion(filtration, [[0], [1]]).sixpack()

The inclusion of any simplex with colours in \(\{0, 1\}\), (which includes all monochromatic simplices of colours 0 and 1), i.e., \(\tau = \{\{0, 1\}, \{0\}, \{1\}\}\):

SubChromaticInclusion(filtration, [[0, 1]]).sixpack()

In this case since \(\tau\) has a single maximal face, you can also write the following.

SubChromaticInclusion(filtration, [0, 1]).sixpack()

You can also specify more general subsets of colours, for example \(\tau = \{\{0, 1\}, \{1, 2\}, \{0\}, \{1\}, \{2\}\}\).

SubChromaticInclusion(filtration, [[0, 1], [1, 2]]).sixpack()
simplex_in_domain(column: tuple[list[int], int, float, list[int]]) bool

Check if a simplex is in the domain of the inclusion map.

A simplex is identified by its column in the boundary matrix of the filtration. This column has the same format as the columns returned by chalc.filtration.Filtration.boundary_matrix().

class SubChromaticQuotient(filtration: chalc.filtration.Filtration, tau: collections.abc.Collection[collections.abc.Collection[collections.abc.Collection[int]]])

Bases: FiltrationQuotient

digraph inheritance3cf1c688bd { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "FiltrationMorphism" [URL="#chalc.sixpack.morphisms.FiltrationMorphism",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract map between filtered simplicial complexes."]; "ABC" -> "FiltrationMorphism" [arrowsize=0.5,style="setlinewidth(0.5)"]; "FiltrationQuotient" [URL="#chalc.sixpack.morphisms.FiltrationQuotient",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Represents the gluing map of a disjoint union of subfiltrations."]; "FiltrationMorphism" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "FiltrationQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; "SubChromaticQuotient" [URL="#chalc.sixpack.morphisms.SubChromaticQuotient",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Represents a gluing map in a chromatic filtration."]; "FiltrationQuotient" -> "SubChromaticQuotient" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Represents a gluing map in a chromatic filtration.

Let \(\{0, \ldots, s\}\) be a set of colours, let \(\Delta^s\) be the abstract simplicial complex whose vertices represent individual colours, and let \(\tau_0, \ldots, \tau_m\) be any subcomplexes of \(\Delta^s\). For a filtered simplicial complex \(K\) on a vertex set \(V\), and a colouring \(\mu:V \to \{0, \ldots, s\}\) of \(V\), let \(K/\tau_i\) denote the subfiltration of \(K\) comprising simplices \(\sigma \in K\) satisfying \(\mu(\sigma) \in \tau_i\) (\(1 \leq i \leq m\)). This class represents the quotient map

\[\bigsqcup_{i=0}^m K/\tau_i \twoheadrightarrow K,\]

Each complex \(\tau_i\) is specified by its maximal faces, or by its maximal face if there is only one.

Examples

If there is only one \(\tau_i\), then this is the same as the SubChromaticInclusion of \(\tau_i\). For example, both of the following computations produce the same 6-pack of persistence diagrams, corresponding to the inclusion of all monochromatic simplices of colours 0 and 1:

# Using SubChromaticQuotient
SubChromaticQuotient(
        filtration,
        [
                [[0, 1]],  # tau_0 = {{0,1}, {0}, {1}}
        ],
).sixpack()

# Using SubChromaticInclusion
SubChromaticInclusion(
        filtration,
        [[0,1]],
).sixpack()

If the \(\tau_i\) are disjoint, then this class produces the same result as SubChromaticInclusion:

# Using SubChromaticQuotient
SubChromaticQuotient(
        filtration,
        [
                [
                        [0, 1],
                ],  # tau_0 = {{0,1}, {0}, {1}}
                [
                        [2, 3],
                ],  # tau_1 = {{2,3}, {2}, {3}}
        ]
).sixpack()

# Using SubChromaticInclusion
SubChromaticInclusion(
        filtration,
        [
                # tau = {{0, 1}, {2, 3}, {0}, {1}, {2}, {3}}
                [0, 1], [2, 3],
        ]
).sixpack()

In general this is not necessarily the case:

# Using SubChromaticQuotient - gluing two subfiltrations
SubChromaticQuotient(
        filtration,
        [
                [
                        [0, 1],
                ],  # tau_0 = {{0,1}, {0}, {1}}
                [
                        [1, 2],
                ],  # tau_1 = {{1,2}, {1}, {2}}
        ],
).sixpack()

# Using SubChromaticInclusion - inclusion of a union of two subfiltrations
SubChromaticInclusion(
        filtration,
        [
                # tau = {{0, 1}, {1, 2}, {0}, {1}, {2}}
                [0, 1], [1, 2],
        ]
)
simplex_in_filtration(column: tuple[list[int], int, float, list[int]], i: int) bool

Check if a simplex is in the ith subfiltration.