Loading...
Searching...
No Matches
Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix > Class Template Reference
Persistence Matrix

Overlay for non-basic matrices replacing all input and output MatIdx indices of the original methods with IDIdx indices. More...

`#include <gudhi/Persistence_matrix/Id_to_index_overlay.h>`

## Public Types

using | Index = typename Master_matrix::Index
using | ID_index = typename Master_matrix::ID_index
using | Pos_index = typename Master_matrix::Pos_index
using | Dimension = typename Master_matrix::Dimension
using | Field_operators = typename Master_matrix::Field_operators
| Field operators class. Necessary only if PersistenceMatrixOptions::is_z2 is false.
using | Field_element = typename Master_matrix::Element
using | Boundary = typename Master_matrix::Boundary
using | Column = typename Master_matrix::Column
using | Row = typename Master_matrix::Row
using | Bar = typename Master_matrix::Bar
using | Barcode = typename Master_matrix::Barcode
using | Cycle = typename Master_matrix::Cycle
using | Entry_constructor = typename Master_matrix::Entry_constructor
using | Column_settings = typename Master_matrix::Column_settings

## Public Member Functions

| Id_to_index_overlay (Column_settings *colSettings)
| Constructs an empty matrix.
template<class Boundary_range = Boundary>
| Id_to_index_overlay (const std::vector< Boundary_range > &orderedBoundaries, Column_settings *colSettings)
| Constructs a new matrix from the given ranges of Matrix::Entry_representative. Each range corresponds to a column (the order of the ranges are preserved). The content of the ranges is assumed to be sorted by increasing IDs. The IDs of the simplices are also assumed to be consecutive, ordered by filtration value, starting with 0.
| Id_to_index_overlay (unsigned int numberOfColumns, Column_settings *colSettings)
| Constructs a new empty matrix and reserves space for the given number of columns.
template<typename BirthComparatorFunction, typename DeathComparatorFunction>
| Id_to_index_overlay (Column_settings *colSettings, const BirthComparatorFunction &birthComparator, const DeathComparatorFunction &deathComparator)
| Only available for chain matrices. Constructs an empty matrix and stores the given comparators.
template<typename BirthComparatorFunction, typename DeathComparatorFunction, class Boundary_range>
| Id_to_index_overlay (const std::vector< Boundary_range > &orderedBoundaries, Column_settings *colSettings, const BirthComparatorFunction &birthComparator, const DeathComparatorFunction &deathComparator)
| Only available for chain matrices. Constructs a new matrix from the given ranges of Matrix::Entry_representative. Each range corresponds to a column (the order of the ranges are preserved). The content of the ranges is assumed to be sorted by increasing IDs. The IDs of the simplices are also assumed to be consecutive, ordered by filtration value, starting with 0.
template<typename BirthComparatorFunction, typename DeathComparatorFunction>
| Id_to_index_overlay (unsigned int numberOfColumns, Column_settings *colSettings, const BirthComparatorFunction &birthComparator, const DeathComparatorFunction &deathComparator)
| Only available for chain matrices. Constructs a new empty matrix and reserves space for the given number of columns.
| Id_to_index_overlay (const Id_to_index_overlay &matrixToCopy, Column_settings *colSettings=nullptr)
| Copy constructor. If `operators` or `entryConstructor` is not a null pointer, its value is kept instead of the one in the copied matrix.
| Id_to_index_overlay (Id_to_index_overlay &&other) noexcept
| Move constructor.
| ~Id_to_index_overlay ()
| Destructor.
template<class Boundary_range = Boundary>
void | insert_boundary (const Boundary_range &boundary, Dimension dim=Master_matrix::template get_null_value< Dimension >())

Inserts at the end of the matrix a new ordered column corresponding to the given boundary. This means that it is assumed that this method is called on boundaries in the order of the filtration. It also assumes that the cells in the given boundary are identified by their relative position in the filtration, starting at 0. If it is not the case, use the other insert_boundary instead by indicating the cell ID used in the boundaries when the cell is inserted.

template<class Boundary_range = Boundary>
void | insert_boundary (ID_index cellIndex, const Boundary_range &boundary, Dimension dim=Master_matrix::template get_null_value< Dimension >())
| It does the same as the other version, but allows the boundary cells to be identified without restrictions except that all IDs have to be strictly increasing in the order of filtration. Note that you should avoid then to use the other insertion method to avoid overwriting IDs.
Column & | get_column (ID_index cellID)
| Returns the column at the given IDIdx index. For RU matrices, the returned column is from \( R \). The type of the column depends on the chosen options, see PersistenceMatrixOptions::column_type.
Row & | get_row (ID_index rowIndex)
| Only available if PersistenceMatrixOptions::has_row_access is true. Returns the row at the given row index. For RU matrices, the returned row is from \( R \). The type of the row depends on the chosen options, see PersistenceMatrixOptions::has_intrusive_rows.
void | erase_empty_row (ID_index rowIndex)
| The effect varies depending on the matrices and the options:
void | remove_maximal_cell (ID_index cellID)

Only available for RU and chain matrices and if PersistenceMatrixOptions::has_removable_columns and PersistenceMatrixOptions::has_vine_update are true. For chain matrices, PersistenceMatrixOptions::has_map_column_container and PersistenceMatrixOptions::has_column_pairings also need to be true. Assumes that the cell is maximal in the current complex and removes it such that the matrix remains consistent (i.e., RU is still an upper triangular decomposition of the boundary matrix and chain is still a compatible bases of the chain complex in the sense of [zigzag]). The maximality of the cell is not verified. Also updates the barcode if it was computed.

void | remove_maximal_cell (ID_index cellID, const std::vector< ID_index > &columnsToSwap)

Only available for chain matrices and if PersistenceMatrixOptions::has_removable_columns, PersistenceMatrixOptions::has_vine_update and PersistenceMatrixOptions::has_map_column_container are true. Assumes that the cell is maximal in the current complex and removes it such that the matrix remains consistent (i.e., it is still a compatible bases of the chain complex in the sense of [zigzag]). The maximality of the cell is not verified. Also updates the barcode if it was computed.

void | remove_last ()
| Only available if PersistenceMatrixOptions::has_removable_columns is true. Additionally, if the matrix is a chain matrix, either PersistenceMatrixOptions::has_map_column_container has to be true or PersistenceMatrixOptions::has_vine_update has to be false. Removes the last cell in the filtration from the matrix and updates the barcode if it is stored.
Dimension | get_max_dimension () const
| Returns the maximal dimension of a cell stored in the matrix. Only available if PersistenceMatrixOptions::has_matrix_maximal_dimension_access is true.
Index | get_number_of_columns () const
| Returns the current number of columns in the matrix.
Dimension | get_column_dimension (ID_index cellID) const
| Returns the dimension of the given cell. Only available for non-basic matrices.
void | add_to (ID_index sourceCellID, ID_index targetCellID)
| Adds column corresponding to `sourceCellID` onto the column corresponding to `targetCellID`.
void | multiply_target_and_add_to (ID_index sourceCellID, const Field_element &coefficient, ID_index targetCellID)
| Multiplies the target column with the coefficient and then adds the source column to it. That is: targetColumn = (targetColumn * coefficient) + sourceColumn.
void | multiply_source_and_add_to (const Field_element &coefficient, ID_index sourceCellID, ID_index targetCellID)
| Multiplies the source column with the coefficient before adding it to the target column. That is: targetColumn += (coefficient * sourceColumn). The source column will not be modified.
void | zero_entry (ID_index cellID, ID_index rowIndex)
| Zeroes the entry at the given coordinates. Not available for chain matrices. In general, should be used with care to not destroy the validity of the persistence related properties of the matrix.
void | zero_column (ID_index cellID)
| Zeroes the column at the given index. Not available for chain matrices. In general, should be used with care to not destroy the validity of the persistence related properties of the matrix.
bool | is_zero_entry (ID_index cellID, ID_index rowIndex) const
| Indicates if the entry at given coordinates has value zero.
bool | is_zero_column (ID_index cellID)
| Indicates if the column at given index has value zero.
ID_index | get_column_with_pivot (ID_index cellIndex) const
| Returns the IDIdx index of the column which has the given row index as pivot. Assumes that the pivot exists. For RU matrices, the column is returned from \( R \).
ID_index | get_pivot (ID_index cellID)
| Returns the row index of the pivot of the given column.
void | reset (Column_settings *colSettings)
| Resets the matrix to an empty matrix.
Id_to_index_overlay & | operator= (const Id_to_index_overlay &other)
| Assign operator.
const Barcode & | get_current_barcode ()
| Returns the current barcode of the matrix. Available only if PersistenceMatrixOptions::has_column_pairings is true.
void | swap_columns (ID_index cellID1, ID_index cellID2)
| Only available for simple boundary matrices (only storing \( R \)) and if PersistenceMatrixOptions::has_column_and_row_swaps is true. Swaps the two given columns. Note that it really just swaps two columns and do not updates anything else, nor performs additions to maintain some properties on the matrix.
void | swap_rows (Index rowIndex1, Index rowIndex2)
| Only available for simple boundary matrices (only storing R) and if PersistenceMatrixOptions::has_column_and_row_swaps is true. Swaps the two given rows. Note that it really just swaps two rows and do not updates anything else, nor performs additions to maintain some properties on the matrix.
ID_index | vine_swap_with_z_eq_1_case (ID_index cellID1, ID_index cellID2)
| Only available if PersistenceMatrixOptions::has_vine_update is true. Does the same than vine_swap, but assumes that the swap is non trivial and therefore skips a part of the case study.
ID_index | vine_swap (ID_index cellID1, ID_index cellID2)

Only available if PersistenceMatrixOptions::has_vine_update is true. Does a vine swap between two cells which are consecutive in the filtration. Roughly, if \( F \) is the current filtration represented by the matrix, the method modifies the matrix such that the new state corresponds to a valid state for the filtration \( F' \) equal to \( F \) but with the two given cells at swapped positions. Of course, the two cells should not have a face/coface relation which each other ; \( F' \) has to be a valid filtration. See [vineyards] for more information about vine and vineyards.

void | update_representative_cycles ()

Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true. Pre-computes the representative cycles of the current state of the filtration represented by the matrix. It does not need to be called before get_representative_cycles is called for the first time, but needs to be called before calling get_representative_cycles again if the matrix was modified in between. Otherwise the old cycles will be returned.

const std::vector< Cycle > & | get_representative_cycles ()
| Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true. Returns all representative cycles of the current filtration.
const Cycle & | get_representative_cycle (const Bar &bar)
| Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true. Returns the cycle representing the given bar.

## Friends

void | swap (Id_to_index_overlay &matrix1, Id_to_index_overlay &matrix2)
| Swap operator.

## Detailed Description

template<class Underlying_matrix, class Master_matrix>
class Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >

Overlay for non-basic matrices replacing all input and output MatIdx indices of the original methods with IDIdx indices.

Template Parameters

  Underlying_matrix | Matrix type taking the overlay.
  Master_matrix | An instantiation of Matrix from which all types and options are deduced.

## Member Typedef Documentation

## Bar

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Bar = typename Master_matrix::Bar

Bar type.

## Barcode

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Barcode = typename Master_matrix::Barcode

Barcode type.

## Boundary

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Boundary = typename Master_matrix::Boundary

Type of an input column.

## Column

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Column = typename Master_matrix::Column

Column type.

## Column_settings

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Column_settings = typename Master_matrix::Column_settings

Structure giving access to the columns to necessary external classes.

## Cycle

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Cycle = typename Master_matrix::Cycle

Cycle type.

## Dimension

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Dimension = typename Master_matrix::Dimension

Dimension value type.

## Entry_constructor

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Entry_constructor = typename Master_matrix::Entry_constructor

Factory of Entry classes.

## Field_element

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Field_element = typename Master_matrix::Element

Type of an field element.

## ID_index

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::ID_index = typename Master_matrix::ID_index

IDIdx index type.

## Index

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Index = typename Master_matrix::Index

MatIdx index type.

## Pos_index

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Pos_index = typename Master_matrix::Pos_index

PosIdx index type.

## Row

template<class Underlying_matrix, class Master_matrix>

using Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Row = typename Master_matrix::Row

Row type, only necessary with row access option.

## Constructor & Destructor Documentation

## Id_to_index_overlay() [1/8]

template<class Underlying_matrix, class Master_matrix>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | Column_settings * | colSettings | ) |

inline

Constructs an empty matrix.

Parameters

  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.

## Id_to_index_overlay() [2/8]

template<class Underlying_matrix, class Master_matrix>
template<class Boundary_range>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | const std::vector< Boundary_range > & | orderedBoundaries,
|  | Column_settings * | colSettings )

inline

Constructs a new matrix from the given ranges of Matrix::Entry_representative. Each range corresponds to a column (the order of the ranges are preserved). The content of the ranges is assumed to be sorted by increasing IDs. The IDs of the simplices are also assumed to be consecutive, ordered by filtration value, starting with 0.

Template Parameters

  Boundary_range | Range type for Matrix::Entry_representative ranges. Assumed to have a begin(), end() and size() method.

Parameters

  orderedBoundaries

  Range of boundaries: `orderedBoundaries` is interpreted as a boundary matrix of a filtered simplicial complex, whose boundaries are ordered by filtration order. Therefore, orderedBoundaries[i] should store the boundary of the \( i^{th} \) simplex in the filtration, as an ordered list of indices of its facets (again those indices correspond to their respective position in the matrix). That is why the indices of the simplices are assumed to be consecutive and starting with 0 (an empty boundary is interpreted as a vertex boundary and not as a non existing simplex). All dimensions up to the maximal dimension of interest have to be present. If only a higher dimension is of interest and not everything should be stored, then use the insert_boundary method instead (after creating the matrix with the Id_to_index_overlay(unsigned int, Column_settings*) constructor preferably).

  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.

## Id_to_index_overlay() [3/8]

template<class Underlying_matrix, class Master_matrix>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | unsigned int | numberOfColumns,
|  | Column_settings * | colSettings )

inline

Constructs a new empty matrix and reserves space for the given number of columns.

Parameters

  numberOfColumns | Number of columns to reserve space for.
  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.

## Id_to_index_overlay() [4/8]

template<class Underlying_matrix, class Master_matrix>
template<typename BirthComparatorFunction, typename DeathComparatorFunction>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | Column_settings * | colSettings,
|  | const BirthComparatorFunction & | birthComparator,
|  | const DeathComparatorFunction & | deathComparator )

inline

Only available for chain matrices. Constructs an empty matrix and stores the given comparators.

Warning
  If PersistenceMatrixOptions::has_vine_update is false, the comparators are not used. And if PersistenceMatrixOptions::has_vine_update is true, but PersistenceMatrixOptions::has_column_pairings is also true, the comparators are ignored and the current barcode is used to compare birth and deaths. Therefore it is useless to provide them in those cases.

Template Parameters

  BirthComparatorFunction | Type of the birth comparator: (Pos_index, Pos_index) -> bool
  DeathComparatorFunction | Type of the death comparator: (Pos_index, Pos_index) -> bool

Parameters

  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.
  birthComparator | Method taking two PosIdx indices as input and returning true if and only if the birth associated to the first position is strictly less than birth associated to the second one with respect to some self defined order. It is used while swapping two unpaired or two negative columns.
  deathComparator | Method taking two PosIdx indices as input and returning true if and only if the death associated to the first position is strictly less than death associated to the second one with respect to some self defined order. It is used while swapping two positive but paired columns.

## Id_to_index_overlay() [5/8]

template<class Underlying_matrix, class Master_matrix>
template<typename BirthComparatorFunction, typename DeathComparatorFunction, class Boundary_range>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | const std::vector< Boundary_range > & | orderedBoundaries,
|  | Column_settings * | colSettings,
|  | const BirthComparatorFunction & | birthComparator,
|  | const DeathComparatorFunction & | deathComparator )

inline

Only available for chain matrices. Constructs a new matrix from the given ranges of Matrix::Entry_representative. Each range corresponds to a column (the order of the ranges are preserved). The content of the ranges is assumed to be sorted by increasing IDs. The IDs of the simplices are also assumed to be consecutive, ordered by filtration value, starting with 0.

Warning
  If PersistenceMatrixOptions::has_vine_update is false, the comparators are not used. And if PersistenceMatrixOptions::has_vine_update is true, but PersistenceMatrixOptions::has_column_pairings is also true, the comparators are ignored and the current barcode is used to compare birth and deaths. Therefore it is useless to provide them in those cases.

Template Parameters

  BirthComparatorFunction | Type of the birth comparator: (Pos_index, Pos_index) -> bool
  DeathComparatorFunction | Type of the death comparator: (Pos_index, Pos_index) -> bool
  Boundary_range | Range type for Matrix::Entry_representative ranges. Assumed to have a begin(), end() and size() method.

Parameters

  orderedBoundaries

  Range of boundaries: `orderedBoundaries` is interpreted as a boundary matrix of a filtered simplicial complex, whose boundaries are ordered by filtration order. Therefore, orderedBoundaries[i] should store the boundary of the \( i^{th} \) simplex in the filtration, as an ordered list of indices of its facets (again those indices correspond to their respective position in the matrix). That is why the indices of the simplices are assumed to be consecutive and starting with 0 (an empty boundary is interpreted as a vertex boundary and not as a non existing simplex). All dimensions up to the maximal dimension of interest have to be present. If only a higher dimension is of interest and not everything should be stored, then use the insert_boundary method instead (after creating the matrix with the Id_to_index_overlay(unsigned int, Column_settings*, const BirthComparatorFunction&, const DeathComparatorFunction&) constructor preferably).

  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.
  birthComparator | Method taking two PosIdx indices as input and returning true if and only if the birth associated to the first position is strictly less than birth associated to the second one with respect to some self defined order. It is used while swapping two unpaired or two negative columns.
  deathComparator | Method taking two PosIdx indices as input and returning true if and only if the death associated to the first position is strictly less than death associated to the second one with respect to some self defined order. It is used while swapping two positive but paired columns.

## Id_to_index_overlay() [6/8]

template<class Underlying_matrix, class Master_matrix>
template<typename BirthComparatorFunction, typename DeathComparatorFunction>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | unsigned int | numberOfColumns,
|  | Column_settings * | colSettings,
|  | const BirthComparatorFunction & | birthComparator,
|  | const DeathComparatorFunction & | deathComparator )

inline

Only available for chain matrices. Constructs a new empty matrix and reserves space for the given number of columns.

Warning
  If PersistenceMatrixOptions::has_vine_update is false, the comparators are not used. And if PersistenceMatrixOptions::has_vine_update is true, but PersistenceMatrixOptions::has_column_pairings is also true, the comparators are ignored and the current barcode is used to compare birth and deaths. Therefore it is useless to provide them in those cases.

Template Parameters

  BirthComparatorFunction | Type of the birth comparator: (Pos_index, Pos_index) -> bool
  DeathComparatorFunction | Type of the death comparator: (Pos_index, Pos_index) -> bool

Parameters

  numberOfColumns | Number of columns to reserve space for.
  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.
  birthComparator | Method taking two PosIdx indices as input and returning true if and only if the birth associated to the first position is strictly less than birth associated to the second one with respect to some self defined order. It is used while swapping two unpaired or two negative columns.
  deathComparator | Method taking two PosIdx indices as input and returning true if and only if the death associated to the first position is strictly less than death associated to the second one with respect to some self defined order. It is used while swapping two positive but paired columns.

## Id_to_index_overlay() [7/8]

template<class Underlying_matrix, class Master_matrix>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | const Id_to_index_overlay< Underlying_matrix, Master_matrix > & | matrixToCopy,
|  | Column_settings * | colSettings = nullptr )

inline

Copy constructor. If `operators` or `entryConstructor` is not a null pointer, its value is kept instead of the one in the copied matrix.

Parameters

  matrixToCopy | Matrix to copy.
  colSettings | Either a pointer to an existing setting structure for the columns or a null pointer. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators. If null pointer, the pointer stored in `matrixToCopy` is used instead.

## Id_to_index_overlay() [8/8]

template<class Underlying_matrix, class Master_matrix>

Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::Id_to_index_overlay | ( | Id_to_index_overlay< Underlying_matrix, Master_matrix > && | other | ) |

inline noexcept

Move constructor.

Parameters

  other | Matrix to move.

## Member Function Documentation

## add_to()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::add_to | ( | ID_index | sourceCellID,
|  | ID_index | targetCellID )

inline

Adds column corresponding to `sourceCellID` onto the column corresponding to `targetCellID`.

Warning
  They will be no verification to ensure that the addition makes sense for the validity of the matrix. For example, a right-to-left addition could corrupt the computation of the barcode if done blindly. So should be used with care.

Parameters

  sourceCellID | IDIdx index of the source column.
  targetCellID | IDIdx index of the target column.

## erase_empty_row()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::erase_empty_row | ( | ID_index | rowIndex | ) |

inline

The effect varies depending on the matrices and the options:

- boundary matrix with only \( R \) stored:
  - PersistenceMatrixOptions::has_map_column_container and PersistenceMatrixOptions::has_column_and_row_swaps are true: cleans up maps used for the lazy row swaps.
  - PersistenceMatrixOptions::has_row_access and PersistenceMatrixOptions::has_removable_rows are true: assumes that the row is empty and removes it.
  - Otherwise, does nothing.
- boundary matrix with \( U \) stored: only \( R \) is affected by the above. If properly used, \( U \) will never have empty rows.
- chain matrix: only available if PersistenceMatrixOptions::has_row_access and PersistenceMatrixOptions::has_removable_rows are true. Assumes that the row is empty and removes it.

Warning
  The removed rows are always assumed to be empty. If it is not the case, the deleted row entries are not removed from their columns. And in the case of intrusive rows, this will generate a segmentation fault when the column entries are destroyed later. The row access is just meant as a "read only" access to the rows and the erase_empty_row method just as a way to specify that a row is empty and can therefore be removed from dictionaries. This allows to avoid testing the emptiness of a row at each column entry removal, what can be quite frequent.

Parameters

  rowIndex | Row index of the empty row to remove.

## get_column()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::Column & Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_column | ( | ID_index | cellID | ) |

inline

Returns the column at the given IDIdx index. For RU matrices, the returned column is from \( R \). The type of the column depends on the chosen options, see PersistenceMatrixOptions::column_type.

Parameters

  cellID | IDIdx index of the column to return.

Returns
  Reference to the column.

## get_column_dimension()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::Dimension Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_column_dimension | ( | ID_index | cellID | ) | const

inline

Returns the dimension of the given cell. Only available for non-basic matrices.

Parameters

  cellID | IDIdx index of the cell.

Returns
  Dimension of the cell.

## get_column_with_pivot()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::ID_index Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_column_with_pivot | ( | ID_index | cellIndex | ) | const

inline

Returns the IDIdx index of the column which has the given row index as pivot. Assumes that the pivot exists. For RU matrices, the column is returned from \( R \).

Recall that the row indices for chain matrices correspond to the IDIdx indices and that the row indices for a RU matrix correspond to the updated IDIdx indices which got potentially swapped by a vine swap.

Parameters

  cellIndex | Row index of the pivot.

Returns
  IDIdx index of the column with the given pivot.

## get_current_barcode()

template<class Underlying_matrix, class Master_matrix>

const Id_to_index_overlay< Underlying_matrix, Master_matrix >::Barcode & Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_current_barcode | ( |  | ) |

inline

Returns the current barcode of the matrix. Available only if PersistenceMatrixOptions::has_column_pairings is true.

Recall that we assume that the boundaries were inserted in the order of filtration for the barcode to be valid.

Warning
  For simple boundary matrices (only storing \( R \)), we assume that get_current_barcode is only called once, when the matrix is completed.

Returns
  A reference to the barcode. The barcode is a vector of Matrix::Bar. A bar stores three attributes: the PosIdx birth index, the PosIdx death index and the dimension of the bar.

## get_max_dimension()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::Dimension Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_max_dimension | ( |  | ) | const

inline

Returns the maximal dimension of a cell stored in the matrix. Only available if PersistenceMatrixOptions::has_matrix_maximal_dimension_access is true.

Returns
  The maximal dimension.

## get_number_of_columns()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::Index Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_number_of_columns | ( |  | ) | const

inline

Returns the current number of columns in the matrix.

Returns
  The number of columns.

## get_pivot()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::ID_index Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_pivot | ( | ID_index | cellID | ) |

inline

Returns the row index of the pivot of the given column.

Parameters

  cellID | IDIdx index of the cell corresponding to the column.

Returns
  The row index of the pivot.

## get_representative_cycle()

template<class Underlying_matrix, class Master_matrix>

const Id_to_index_overlay< Underlying_matrix, Master_matrix >::Cycle & Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_representative_cycle | ( | const Bar & | bar | ) |

inline

Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true. Returns the cycle representing the given bar.

Parameters

  bar | A bar from the current barcode.

Returns
  A const reference to the cycle representing `bar`.

## get_representative_cycles()

template<class Underlying_matrix, class Master_matrix>

const std::vector< typename Id_to_index_overlay< Underlying_matrix, Master_matrix >::Cycle > & Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_representative_cycles | ( |  | ) |

inline

Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true. Returns all representative cycles of the current filtration.

Returns
  A const reference to the vector of representative cycles.

## get_row()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::Row & Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::get_row | ( | ID_index | rowIndex | ) |

inline

Only available if PersistenceMatrixOptions::has_row_access is true. Returns the row at the given row index. For RU matrices, the returned row is from \( R \). The type of the row depends on the chosen options, see PersistenceMatrixOptions::has_intrusive_rows.

Warning
  The get_column_index method of the row entries returns the original PosIdx indices (before any swaps) for boundary matrices and MatIdx indices for chain matrices.

Parameters

  rowIndex | Row index of the row to return: IDIdx for chain matrices or updated IDIdx for boundary matrices if swaps occurred.

Returns
  Reference to the row.

## insert_boundary() [1/2]

template<class Underlying_matrix, class Master_matrix>
template<class Boundary_range>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::insert_boundary | ( | const Boundary_range & | boundary,
|  | Dimension | dim = Master_matrix::template get_null_value<Dimension>() )

inline

Inserts at the end of the matrix a new ordered column corresponding to the given boundary. This means that it is assumed that this method is called on boundaries in the order of the filtration. It also assumes that the cells in the given boundary are identified by their relative position in the filtration, starting at 0. If it is not the case, use the other insert_boundary instead by indicating the cell ID used in the boundaries when the cell is inserted.

Different to the constructor, the boundaries do not have to come from a simplicial complex, but also from a more general entry complex. This includes cubical complexes or Morse complexes for example.

The content of the new column will vary depending on the underlying type of the matrix:

- If it is a boundary type matrix and only \( R \) is stored, the boundary is just copied. The column will only be reduced later when the barcode is requested in order to apply some optimizations with the additional knowledge. Hence, the barcode will also not be updated.
- If it is a boundary type matrix and both \( R \) and \( U \) are stored, the new boundary is stored in its reduced form and the barcode, if active, is also updated.
- If it is a chain type matrix, the new column is of the form IDIdx + linear combination of older column IDIdxs, where the combination is deduced while reducing the given boundary. If the barcode is stored, it will also be updated.

Template Parameters

  Boundary_range | Range of Matrix::Entry_representative. Assumed to have a begin(), end() and size() method.

Parameters

  boundary | Boundary generating the new column. The content should be ordered by ID.
  dim | Dimension of the cell whose boundary is given. If the complex is simplicial, this parameter can be omitted as it can be deduced from the size of the boundary.

## insert_boundary() [2/2]

template<class Underlying_matrix, class Master_matrix>
template<class Boundary_range>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::insert_boundary | ( | ID_index | cellIndex,
|  | const Boundary_range & | boundary,
|  | Dimension | dim = Master_matrix::template get_null_value<Dimension>() )

inline

It does the same as the other version, but allows the boundary cells to be identified without restrictions except that all IDs have to be strictly increasing in the order of filtration. Note that you should avoid then to use the other insertion method to avoid overwriting IDs.

As a cell has to be inserted before one of its cofaces in a valid filtration (recall that it is assumed that the cells are inserted by order of filtration), it is sufficient to indicate the ID of the cell being inserted.

Template Parameters

  Boundary_range | Range of Matrix::Entry_representative. Assumed to have a begin(), end() and size() method.

Parameters

  cellIndex | IDIdx index to use to identify the new cell.
  boundary | Boundary generating the new column. The indices of the boundary have to correspond to the `cellIndex` values of precedent calls of the method for the corresponding cells and should be ordered in increasing order.
  dim | Dimension of the cell whose boundary is given. If the complex is simplicial, this parameter can be omitted as it can be deduced from the size of the boundary.

## is_zero_column()

template<class Underlying_matrix, class Master_matrix>

bool Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::is_zero_column | ( | ID_index | cellID | ) |

inline

Indicates if the column at given index has value zero.

For RU matrices, looks into \( R \).

Note that for chain matrices, this method should always return false, as a valid chain matrix never has empty columns.

Parameters

  cellID | IDIdx index of the cell corresponding to the column.

Returns
  true If the column has value zero.
  false Otherwise.

## is_zero_entry()

template<class Underlying_matrix, class Master_matrix>

bool Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::is_zero_entry | ( | ID_index | cellID,
|  | ID_index | rowIndex ) const

inline

Indicates if the entry at given coordinates has value zero.

For RU matrices, looks into \( R \).

Parameters

  cellID | IDIdx index of the cell corresponding to the column of the entry.
  rowIndex | Row index of the row of the entry.

Returns
  true If the entry has value zero.
  false Otherwise.

## multiply_source_and_add_to()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::multiply_source_and_add_to | ( | const Field_element & | coefficient,
|  | ID_index | sourceCellID,
|  | ID_index | targetCellID )

inline

Multiplies the source column with the coefficient before adding it to the target column. That is: targetColumn += (coefficient * sourceColumn). The source column will not be modified.

Warning
  They will be no verification to ensure that the addition makes sense for the validity of the matrix. For example, a right-to-left addition could corrupt the computation of the barcode if done blindly. So should be used with care.

Parameters

  coefficient | Value to multiply.
  sourceCellID | IDIdx index of the source column.
  targetCellID | IDIdx index of the target column.

## multiply_target_and_add_to()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::multiply_target_and_add_to | ( | ID_index | sourceCellID,
|  | const Field_element & | coefficient,
|  | ID_index | targetCellID )

inline

Multiplies the target column with the coefficient and then adds the source column to it. That is: targetColumn = (targetColumn * coefficient) + sourceColumn.

Warning
  They will be no verification to ensure that the addition makes sense for the validity of the matrix. For example, a right-to-left addition could corrupt the computation of the barcode if done blindly. So should be used with care.

Parameters

  sourceCellID | IDIdx index of the source column.
  coefficient | Value to multiply.
  targetCellID | IDIdx index of the target column.

## remove_last()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::remove_last | ( |  | ) |

inline

Only available if PersistenceMatrixOptions::has_removable_columns is true. Additionally, if the matrix is a chain matrix, either PersistenceMatrixOptions::has_map_column_container has to be true or PersistenceMatrixOptions::has_vine_update has to be false. Removes the last cell in the filtration from the matrix and updates the barcode if it is stored.

See also remove_maximal_cell.

For chain matrices, if PersistenceMatrixOptions::has_vine_update is true, the last cell does not have to be at the end of the matrix and therefore has to be searched first. In this case, if the user already knows the IDIdx of the last cell, calling remove_maximal_cell(cellID, {}) instead allows to skip the search.

## remove_maximal_cell() [1/2]

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::remove_maximal_cell | ( | ID_index | cellID | ) |

inline

Only available for RU and chain matrices and if PersistenceMatrixOptions::has_removable_columns and PersistenceMatrixOptions::has_vine_update are true. For chain matrices, PersistenceMatrixOptions::has_map_column_container and PersistenceMatrixOptions::has_column_pairings also need to be true. Assumes that the cell is maximal in the current complex and removes it such that the matrix remains consistent (i.e., RU is still an upper triangular decomposition of the boundary matrix and chain is still a compatible bases of the chain complex in the sense of [zigzag]). The maximality of the cell is not verified. Also updates the barcode if it was computed.

For chain matrices, using the other version of the method could perform better depending on how the data is maintained on the side of the user. Then, PersistenceMatrixOptions::has_column_pairings also do not need to be true.

See also remove_last.

Parameters

  cellID | IDIdx index of the cell to remove.

## remove_maximal_cell() [2/2]

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::remove_maximal_cell | ( | ID_index | cellID,
|  | const std::vector< ID_index > & | columnsToSwap )

inline

Only available for chain matrices and if PersistenceMatrixOptions::has_removable_columns, PersistenceMatrixOptions::has_vine_update and PersistenceMatrixOptions::has_map_column_container are true. Assumes that the cell is maximal in the current complex and removes it such that the matrix remains consistent (i.e., it is still a compatible bases of the chain complex in the sense of [zigzag]). The maximality of the cell is not verified. Also updates the barcode if it was computed.

To maintain the compatibility, vine swaps are done to move the cell up to the end of the filtration. Once at the end, the removal is trivial. But for chain matrices, swaps do not actually swap the position of the column every time, so the cells appearing after `cellIndex` in the filtration have to be searched first within the matrix. If the user has an easy access to the IDIdx of the cells in the order of filtration, passing them by argument with `columnsToSwap` allows to skip a linear search process. Typically, if the user knows that the cell he wants to remove is already the last cell of the filtration, calling remove_maximal_cell(cellID, {}) will be faster than remove_last().

See also remove_last.

Parameters

  cellID | IDIdx index of the cell to remove.
  columnsToSwap | Vector of IDIdx indices of the cells coming after `cellID` in the filtration.

## reset()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::reset | ( | Column_settings * | colSettings | ) |

inline

Resets the matrix to an empty matrix.

Parameters

  colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators.

## swap_columns()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::swap_columns | ( | ID_index | cellID1,
|  | ID_index | cellID2 )

inline

Only available for simple boundary matrices (only storing \( R \)) and if PersistenceMatrixOptions::has_column_and_row_swaps is true. Swaps the two given columns. Note that it really just swaps two columns and do not updates anything else, nor performs additions to maintain some properties on the matrix.

Parameters

  cellID1 | First column IDIdx index to swap.
  cellID2 | Second column IDIdx index to swap.

## swap_rows()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::swap_rows | ( | Index | rowIndex1,
|  | Index | rowIndex2 )

inline

Only available for simple boundary matrices (only storing R) and if PersistenceMatrixOptions::has_column_and_row_swaps is true. Swaps the two given rows. Note that it really just swaps two rows and do not updates anything else, nor performs additions to maintain some properties on the matrix.

Parameters

  rowIndex1 | First row index to swap.
  rowIndex2 | Second row index to swap.

## vine_swap()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::ID_index Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::vine_swap | ( | ID_index | cellID1,
|  | ID_index | cellID2 )

inline

Only available if PersistenceMatrixOptions::has_vine_update is true. Does a vine swap between two cells which are consecutive in the filtration. Roughly, if \( F \) is the current filtration represented by the matrix, the method modifies the matrix such that the new state corresponds to a valid state for the filtration \( F' \) equal to \( F \) but with the two given cells at swapped positions. Of course, the two cells should not have a face/coface relation which each other ; \( F' \) has to be a valid filtration. See [vineyards] for more information about vine and vineyards.

Parameters

  cellID1 | IDIdx index of the first cell.
  cellID2 | IDIdx index of the second cell. It is assumed that the PosIdx of both only differs by one.

Returns
  Let \( pos1 \) be the PosIdx index of `columnIndex1` and \( pos2 \) be the PosIdx index of `columnIndex2`. The method returns the MatIdx of the column which has now, after the swap, the PosIdx \( max(pos1, pos2) \).

## vine_swap_with_z_eq_1_case()

template<class Underlying_matrix, class Master_matrix>

Id_to_index_overlay< Underlying_matrix, Master_matrix >::ID_index Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::vine_swap_with_z_eq_1_case | ( | ID_index | cellID1,
|  | ID_index | cellID2 )

inline

Only available if PersistenceMatrixOptions::has_vine_update is true. Does the same than vine_swap, but assumes that the swap is non trivial and therefore skips a part of the case study.

Parameters

  cellID1 | IDIdx index of the first cell.
  cellID2 | IDIdx index of the second cell. It is assumed that the PosIdx of both only differs by one.

Returns
  Let \( pos1 \) be the PosIdx index of `columnIndex1` and \( pos2 \) be the PosIdx index of `columnIndex2`. The method returns the MatIdx of the column which has now, after the swap, the PosIdx \( max(pos1, pos2) \).

## zero_column()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::zero_column | ( | ID_index | cellID | ) |

inline

Zeroes the column at the given index. Not available for chain matrices. In general, should be used with care to not destroy the validity of the persistence related properties of the matrix.

For RU matrices, zeros only the column in \( R \).

Parameters

  cellID | IDIdx index of the cell corresponding to the column.

## zero_entry()

template<class Underlying_matrix, class Master_matrix>

void Gudhi::persistence_matrix::Id_to_index_overlay< Underlying_matrix, Master_matrix >::zero_entry | ( | ID_index | cellID,
|  | ID_index | rowIndex )

inline

Zeroes the entry at the given coordinates. Not available for chain matrices. In general, should be used with care to not destroy the validity of the persistence related properties of the matrix.

For RU matrices, zeros only the entry in \( R \).

Parameters

  cellID | IDIdx index of the cell corresponding to the column of the entry.
  rowIndex | Row index of the row of the entry.

The documentation for this class was generated from the following file:

- include/gudhi/Persistence_matrix/Id_to_index_overlay.h