17#ifndef PM_ID_TO_POS_TRANSLATION_H
18#define PM_ID_TO_POS_TRANSLATION_H
39template <
class Underlying_matrix,
class Master_matrix>
43 using Index =
typename Master_matrix::Index;
44 using ID_index =
typename Master_matrix::ID_index;
45 using Pos_index =
typename Master_matrix::Pos_index;
46 using Dimension =
typename Master_matrix::Dimension;
52 using Boundary =
typename Master_matrix::Boundary;
53 using Column =
typename Master_matrix::Column;
54 using Row =
typename Master_matrix::Row;
56 using Bar =
typename Master_matrix::Bar;
57 using Barcode =
typename Master_matrix::Barcode;
58 using Cycle =
typename Master_matrix::Cycle;
91 template <
class Boundary_range = Boundary>
123 template <
typename BirthComparatorFunction,
typename DeathComparatorFunction>
125 const BirthComparatorFunction& birthComparator,
126 const DeathComparatorFunction& deathComparator);
163 template <
typename BirthComparatorFunction,
typename DeathComparatorFunction,
class Boundary_range>
166 const BirthComparatorFunction& birthComparator,
167 const DeathComparatorFunction& deathComparator);
191 template <
typename BirthComparatorFunction,
typename DeathComparatorFunction>
194 const BirthComparatorFunction& birthComparator,
195 const DeathComparatorFunction& deathComparator);
244 template <
class Boundary_range = Boundary>
246 Dimension dim = Master_matrix::template get_null_value<Dimension>());
264 template <
class Boundary_range = Boundary>
266 const Boundary_range& boundary,
267 Dimension dim = Master_matrix::template get_null_value<Dimension>());
282 template <
class Boundary_range = Boundary>
284 const Boundary_range& boundary,
285 Dimension dim = Master_matrix::template get_null_value<Dimension>());
303 template <
class Boundary_range = Boundary>
306 const Boundary_range& boundary,
307 Dimension dim = Master_matrix::template get_null_value<Dimension>());
551 matrix_.reset(colSettings);
552 if constexpr (Master_matrix::Option_list::is_of_boundary_type)
553 if (idToIndex_ !=
nullptr) idToIndex_->clear();
571 swap(matrix1.matrix_, matrix2.matrix_);
572 std::swap(matrix1.idToIndex_, matrix2.idToIndex_);
573 std::swap(matrix1.nextIndex_, matrix2.nextIndex_);
613 void swap_rows(Index rowIndex1, Index rowIndex2);
679 using Dictionary =
typename Master_matrix::template Dictionary<Index>;
681 Underlying_matrix matrix_;
682 Dictionary* idToIndex_;
685 void _initialize_map(
unsigned int size);
686 Index _id_to_index(
ID_index id)
const;
693template <
class Underlying_matrix,
class Master_matrix>
695 : matrix_(colSettings), idToIndex_(nullptr), nextIndex_(0)
700template <
class Underlying_matrix,
class Master_matrix>
701template <
class Boundary_range>
703 const std::vector<Boundary_range>& orderedBoundaries,
705 : matrix_(orderedBoundaries, colSettings), idToIndex_(nullptr), nextIndex_(orderedBoundaries.size())
707 _initialize_map(orderedBoundaries.size());
708 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
709 for (
unsigned int i = 0; i < orderedBoundaries.size(); i++) {
715template <
class Underlying_matrix,
class Master_matrix>
718 : matrix_(numberOfColumns, colSettings), idToIndex_(nullptr), nextIndex_(0)
720 _initialize_map(numberOfColumns);
723template <
class Underlying_matrix,
class Master_matrix>
724template <
typename BirthComparatorFunction,
typename DeathComparatorFunction>
727 const BirthComparatorFunction& birthComparator,
728 const DeathComparatorFunction& deathComparator)
729 : matrix_(colSettings, birthComparator, deathComparator), idToIndex_(nullptr), nextIndex_(0)
734template <
class Underlying_matrix,
class Master_matrix>
735template <
typename BirthComparatorFunction,
typename DeathComparatorFunction,
class Boundary_range>
737 const std::vector<Boundary_range>& orderedBoundaries,
739 const BirthComparatorFunction& birthComparator,
740 const DeathComparatorFunction& deathComparator)
741 : matrix_(orderedBoundaries, colSettings, birthComparator, deathComparator),
743 nextIndex_(orderedBoundaries.size())
745 _initialize_map(orderedBoundaries.size());
746 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
747 for (
unsigned int i = 0; i < orderedBoundaries.size(); i++) {
753template <
class Underlying_matrix,
class Master_matrix>
754template <
typename BirthComparatorFunction,
typename DeathComparatorFunction>
756 unsigned int numberOfColumns,
758 const BirthComparatorFunction& birthComparator,
759 const DeathComparatorFunction& deathComparator)
760 : matrix_(numberOfColumns, colSettings, birthComparator, deathComparator), idToIndex_(nullptr), nextIndex_(0)
762 _initialize_map(numberOfColumns);
765template <
class Underlying_matrix,
class Master_matrix>
769 : matrix_(matrixToCopy.matrix_, colSettings), idToIndex_(nullptr), nextIndex_(matrixToCopy.nextIndex_)
771 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
772 idToIndex_ =
new Dictionary(*matrixToCopy.idToIndex_);
774 idToIndex_ = &matrix_.pivotToColumnIndex_;
778template <
class Underlying_matrix,
class Master_matrix>
780 : matrix_(std::move(other.matrix_)),
781 idToIndex_(std::exchange(other.idToIndex_,
nullptr)),
782 nextIndex_(std::exchange(other.nextIndex_, 0))
786template <
class Underlying_matrix,
class Master_matrix>
789 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
794template <
class Underlying_matrix,
class Master_matrix>
795template <
class Boundary_range>
799 matrix_.insert_boundary(boundary, dim);
800 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
801 if constexpr (Master_matrix::Option_list::has_map_column_container) {
802 idToIndex_->emplace(nextIndex_, nextIndex_);
804 if (idToIndex_->size() == nextIndex_) {
805 idToIndex_->push_back(nextIndex_);
807 _id_to_index(nextIndex_) = nextIndex_;
814template <
class Underlying_matrix,
class Master_matrix>
815template <
class Boundary_range>
817 const Boundary_range& boundary,
820 if constexpr (Master_matrix::Option_list::has_map_column_container) {
821 GUDHI_CHECK(idToIndex_->find(cellIndex) == idToIndex_->end(),
822 std::invalid_argument(
"Id_to_index_overlay::insert_boundary - Index for simplex already chosen!"));
825 (idToIndex_->size() <= cellIndex || _id_to_index(cellIndex) == Master_matrix::template get_null_value<Index>()),
826 std::invalid_argument(
"Id_to_index_overlay::insert_boundary - Index for simplex already chosen!"));
828 matrix_.insert_boundary(cellIndex, boundary, dim);
829 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
830 if constexpr (Master_matrix::Option_list::has_map_column_container) {
831 idToIndex_->emplace(cellIndex, nextIndex_);
833 if (idToIndex_->size() <= cellIndex) {
834 idToIndex_->resize(cellIndex + 1, Master_matrix::template get_null_value<Index>());
836 _id_to_index(cellIndex) = nextIndex_;
842template <
class Underlying_matrix,
class Master_matrix>
843template <
class Boundary_range>
845 const Boundary_range& boundary,
848 GUDHI_CHECK(columnIndex >= 0, std::invalid_argument(
"Indices have to be positive."));
850 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
858 matrix_.insert_maximal_cell(columnIndex, boundary, dim);
862template <
class Underlying_matrix,
class Master_matrix>
863template <
class Boundary_range>
866 const Boundary_range& boundary,
869 GUDHI_CHECK(columnIndex >= 0, std::invalid_argument(
"Indices have to be positive."));
871 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
879 matrix_.insert_maximal_cell(columnIndex, cellIndex, boundary, dim);
883template <
class Underlying_matrix,
class Master_matrix>
887 return matrix_.get_column(_id_to_index(cellID));
890template <
class Underlying_matrix,
class Master_matrix>
894 return matrix_.get_row(rowIndex);
897template <
class Underlying_matrix,
class Master_matrix>
900 return matrix_.erase_empty_row(rowIndex);
903template <
class Underlying_matrix,
class Master_matrix>
906 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
908 _move_column_in_RU<true>(_id_to_index(cellID), nextIndex_ - 1);
911 matrix_.remove_last();
912 GUDHI_CHECK(_id_to_index(cellID) == nextIndex_,
913 std::logic_error(
"Id_to_index_overlay::remove_maximal_cell - Indexation problem."));
915 if constexpr (Master_matrix::Option_list::has_map_column_container) {
916 idToIndex_->erase(cellID);
918 _id_to_index(cellID) = Master_matrix::template get_null_value<Index>();
921 matrix_.remove_maximal_cell(cellID);
925template <
class Underlying_matrix,
class Master_matrix>
928 const std::vector<ID_index>& columnsToSwap)
930 static_assert(!Master_matrix::Option_list::is_of_boundary_type,
931 "'remove_maximal_cell(ID_index,const std::vector<Index>&)' is not available for the chosen options.");
932 std::vector<Index> translatedIndices;
933 std::transform(columnsToSwap.cbegin(), columnsToSwap.cend(), std::back_inserter(translatedIndices), [&](
ID_index id) {
934 return _id_to_index(id);
936 matrix_.remove_maximal_cell(cellID, translatedIndices);
939template <
class Underlying_matrix,
class Master_matrix>
942 if (idToIndex_->empty())
return;
944 matrix_.remove_last();
946 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
948 if constexpr (Master_matrix::Option_list::has_map_column_container) {
949 auto it = idToIndex_->begin();
950 while (it->second != nextIndex_) ++it;
951 idToIndex_->erase(it);
953 Index id = idToIndex_->size() - 1;
955 while (_id_to_index(
id) == Master_matrix::template get_null_value<Index>()) --id;
956 GUDHI_CHECK(_id_to_index(
id) == nextIndex_,
957 std::logic_error(
"Id_to_index_overlay::remove_last - Indexation problem."));
958 _id_to_index(
id) = Master_matrix::template get_null_value<Index>();
963template <
class Underlying_matrix,
class Master_matrix>
967 return matrix_.get_max_dimension();
970template <
class Underlying_matrix,
class Master_matrix>
974 return matrix_.get_number_of_columns();
977template <
class Underlying_matrix,
class Master_matrix>
981 return matrix_.get_column_dimension(_id_to_index(cellID));
984template <
class Underlying_matrix,
class Master_matrix>
987 return matrix_.add_to(_id_to_index(sourceCellID), _id_to_index(targetCellID));
990template <
class Underlying_matrix,
class Master_matrix>
996 return matrix_.multiply_target_and_add_to(_id_to_index(sourceCellID), coefficient, _id_to_index(targetCellID));
999template <
class Underlying_matrix,
class Master_matrix>
1005 return matrix_.multiply_source_and_add_to(coefficient, _id_to_index(sourceCellID), _id_to_index(targetCellID));
1008template <
class Underlying_matrix,
class Master_matrix>
1011 return matrix_.zero_entry(_id_to_index(cellID), rowIndex);
1014template <
class Underlying_matrix,
class Master_matrix>
1017 return matrix_.zero_column(_id_to_index(cellID));
1020template <
class Underlying_matrix,
class Master_matrix>
1024 return matrix_.is_zero_entry(_id_to_index(cellID), rowIndex);
1027template <
class Underlying_matrix,
class Master_matrix>
1030 return matrix_.is_zero_column(_id_to_index(cellID));
1033template <
class Underlying_matrix,
class Master_matrix>
1037 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1038 Index pos = matrix_.get_column_with_pivot(cellIndex);
1040 while (_id_to_index(i) != pos) ++i;
1047template <
class Underlying_matrix,
class Master_matrix>
1051 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1052 return matrix_.get_pivot(_id_to_index(cellID));
1058template <
class Underlying_matrix,
class Master_matrix>
1062 if (
this == &other)
return *
this;
1064 matrix_ = other.matrix_;
1065 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1067 idToIndex_ = other.idToIndex_;
1069 idToIndex_ = &matrix_.pivotToColumnIndex_;
1071 nextIndex_ = other.nextIndex_;
1076template <
class Underlying_matrix,
class Master_matrix>
1080 if (
this == &other)
return *
this;
1082 matrix_ = std::move(other.matrix_);
1083 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1086 idToIndex_ = std::exchange(other.idToIndex_,
nullptr);
1087 nextIndex_ = std::exchange(other.nextIndex_, 0);
1092template <
class Underlying_matrix,
class Master_matrix>
1093inline void Id_to_index_overlay<Underlying_matrix, Master_matrix>::print()
1095 return matrix_.print();
1098template <
class Underlying_matrix,
class Master_matrix>
1102 return matrix_.get_current_barcode();
1105template <
class Underlying_matrix,
class Master_matrix>
1108 matrix_.update_all_representative_cycles(dim);
1111template <
class Underlying_matrix,
class Master_matrix>
1114 matrix_.update_representative_cycle(bar);
1117template <
class Underlying_matrix,
class Master_matrix>
1118inline const std::vector<typename Id_to_index_overlay<Underlying_matrix, Master_matrix>::Cycle>&
1121 return matrix_.get_all_representative_cycles();
1124template <
class Underlying_matrix,
class Master_matrix>
1128 return matrix_.get_representative_cycle(bar);
1131template <
class Underlying_matrix,
class Master_matrix>
1134 matrix_.swap_columns(_id_to_index(cellID1), _id_to_index(cellID2));
1135 std::swap(idToIndex_->at(cellID1), idToIndex_->at(cellID2));
1138template <
class Underlying_matrix,
class Master_matrix>
1141 matrix_.swap_rows(rowIndex1, rowIndex2);
1144template <
class Underlying_matrix,
class Master_matrix>
1148 Index first = _id_to_index(cellID1);
1149 Index second = _id_to_index(cellID2);
1150 if (first > second) std::swap(first, second);
1152 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1153 GUDHI_CHECK(second - first == 1,
1154 std::invalid_argument(
1155 "Id_to_index_overlay::vine_swap_with_z_eq_1_case - The columns to swap are not contiguous."));
1157 bool change = matrix_.vine_swap_with_z_eq_1_case(first);
1159 std::swap(idToIndex_->at(cellID1), idToIndex_->at(cellID2));
1166 return matrix_.vine_swap_with_z_eq_1_case(first, second);
1170template <
class Underlying_matrix,
class Master_matrix>
1174 Index first = _id_to_index(cellID1);
1175 Index second = _id_to_index(cellID2);
1176 if (first > second) std::swap(first, second);
1178 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1179 GUDHI_CHECK(second - first == 1,
1180 std::invalid_argument(
"Id_to_index_overlay::vine_swap - The columns to swap are not contiguous."));
1182 bool change = matrix_.vine_swap(first);
1184 std::swap(idToIndex_->at(cellID1), idToIndex_->at(cellID2));
1191 return matrix_.vine_swap(first, second);
1195template <
class Underlying_matrix,
class Master_matrix>
1196inline void Id_to_index_overlay<Underlying_matrix, Master_matrix>::_initialize_map([[maybe_unused]]
unsigned int size)
1198 if constexpr (Master_matrix::Option_list::is_of_boundary_type) {
1199 if constexpr (Master_matrix::Option_list::has_map_column_container) {
1200 idToIndex_ =
new Dictionary(size);
1202 idToIndex_ =
new Dictionary(size, Master_matrix::template get_null_value<Index>());
1205 idToIndex_ = &matrix_.pivotToColumnIndex_;
1209template <
class Underlying_matrix,
class Master_matrix>
1211Id_to_index_overlay<Underlying_matrix, Master_matrix>::_id_to_index(ID_index
id)
const
1213 if constexpr (Master_matrix::Option_list::has_map_column_container) {
1214 return idToIndex_->at(
id);
1216 return idToIndex_->operator[](id);
1220template <
class Underlying_matrix,
class Master_matrix>
1222Id_to_index_overlay<Underlying_matrix, Master_matrix>::_id_to_index(ID_index
id)
1224 return idToIndex_->operator[](id);
1227template <
class Underlying_matrix,
class Master_matrix>
1229inline void Id_to_index_overlay<Underlying_matrix, Master_matrix>::_move_column_in_RU(Pos_index start, Pos_index end)
1233 std::vector<ID_index> indexToID(nextIndex_);
1234 if constexpr (Master_matrix::Option_list::has_map_column_container) {
1235 for (
auto& p : *idToIndex_) {
1236 indexToID[p.second] = p.first;
1239 for (ID_index i = 0; i < idToIndex_->size(); ++i) {
1240 if (_id_to_index(i) != Master_matrix::template get_null_value<Index>()) indexToID[_id_to_index(i)] = i;
1243 if constexpr (dir) {
1244 for (Index curr = start; curr < end; ++curr) {
1245 matrix_.vine_swap(curr);
1246 std::swap(idToIndex_->at(indexToID[curr]), idToIndex_->at(indexToID[curr + 1]));
1247 std::swap(indexToID[curr], indexToID[curr + 1]);
1250 for (Index curr = start; curr > end; --curr) {
1251 matrix_.vine_swap(curr - 1);
1252 std::swap(idToIndex_->at(indexToID[curr - 1]), idToIndex_->at(indexToID[curr]));
1253 std::swap(indexToID[curr - 1], indexToID[curr]);
Overlay for non-basic matrices replacing all input and output MatIdx indices of the original methods ...
Definition Id_to_index_overlay.h:41
Id_to_index_overlay(Column_settings *colSettings)
Constructs an empty matrix.
Definition Id_to_index_overlay.h:694
void update_all_representative_cycles(Dimension dim=Master_matrix::template get_null_value< Dimension >())
Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true....
Definition Id_to_index_overlay.h:1106
bool is_zero_column(ID_index cellID)
Indicates if the column at given index has value zero.
Definition Id_to_index_overlay.h:1028
void remove_maximal_cell(ID_index cellID)
Only available for RU and chain matrices and if PersistenceMatrixOptions::has_removable_columns and P...
Definition Id_to_index_overlay.h:904
Id_to_index_overlay & operator=(const Id_to_index_overlay &other)
Assign operator.
Definition Id_to_index_overlay.h:1060
Dimension get_max_dimension() const
Returns the maximal dimension of a cell stored in the matrix. Only available if PersistenceMatrixOpti...
Definition Id_to_index_overlay.h:965
const Cycle & get_representative_cycle(const Bar &bar) const
Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true....
Definition Id_to_index_overlay.h:1126
void add_to(ID_index sourceCellID, ID_index targetCellID)
Adds column corresponding to sourceCellID onto the column corresponding to targetCellID.
Definition Id_to_index_overlay.h:985
ID_index get_pivot(ID_index cellID)
Returns the row index of the pivot of the given column.
Definition Id_to_index_overlay.h:1049
typename Master_matrix::Row Row
Definition Id_to_index_overlay.h:54
void remove_last()
Only available if PersistenceMatrixOptions::has_removable_columns is true. Additionally,...
Definition Id_to_index_overlay.h:940
void update_representative_cycle(const Bar &bar)
Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true....
Definition Id_to_index_overlay.h:1112
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....
Definition Id_to_index_overlay.h:991
void reset(Column_settings *colSettings)
Resets the matrix to an empty matrix.
Definition Id_to_index_overlay.h:549
void zero_column(ID_index cellID)
Zeroes the column at the given index. Not available for chain matrices. In general,...
Definition Id_to_index_overlay.h:1015
typename Master_matrix::Index Index
Definition Id_to_index_overlay.h:43
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....
Definition Id_to_index_overlay.h:1000
const Barcode & get_current_barcode()
Returns the current barcode of the matrix. Available only if PersistenceMatrixOptions::has_column_pai...
Definition Id_to_index_overlay.h:1100
typename Master_matrix::Column Column
Definition Id_to_index_overlay.h:53
typename Master_matrix::Bar Bar
Definition Id_to_index_overlay.h:56
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 ...
Definition Id_to_index_overlay.h:1035
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....
Definition Id_to_index_overlay.h:796
void erase_empty_row(ID_index rowIndex)
The effect varies depending on the matrices and the options:
Definition Id_to_index_overlay.h:898
void insert_maximal_cell(Index columnIndex, const Boundary_range &boundary, Dimension dim=Master_matrix::template get_null_value< Dimension >())
Only available if PersistenceMatrixOptions::has_vine_update is true. Assumes that the cell will be ma...
Definition Id_to_index_overlay.h:844
Column & get_column(ID_index cellID)
Returns the column at the given IDIdx index. For RU matrices, the returned column is from ....
Definition Id_to_index_overlay.h:885
typename Master_matrix::Boundary Boundary
Definition Id_to_index_overlay.h:52
friend void swap(Id_to_index_overlay &matrix1, Id_to_index_overlay &matrix2) noexcept
Swap operator.
Definition Id_to_index_overlay.h:569
Row & get_row(ID_index rowIndex)
Only available if PersistenceMatrixOptions::has_row_access is true. Returns the row at the given row ...
Definition Id_to_index_overlay.h:892
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,...
Definition Id_to_index_overlay.h:1146
typename Master_matrix::Cycle Cycle
Definition Id_to_index_overlay.h:58
bool is_zero_entry(ID_index cellID, ID_index rowIndex) const
Indicates if the entry at given coordinates has value zero.
Definition Id_to_index_overlay.h:1021
typename Master_matrix::Barcode Barcode
Definition Id_to_index_overlay.h:57
typename Master_matrix::Entry_constructor Entry_constructor
Definition Id_to_index_overlay.h:59
typename Master_matrix::Dimension Dimension
Definition Id_to_index_overlay.h:46
~Id_to_index_overlay()
Destructor.
Definition Id_to_index_overlay.h:787
void swap_columns(ID_index cellID1, ID_index cellID2)
Only available for simple boundary matrices (only storing ) and if PersistenceMatrixOptions::has_colu...
Definition Id_to_index_overlay.h:1132
typename Master_matrix::Field_operators Field_operators
Field operators class. Necessary only if PersistenceMatrixOptions::is_z2 is false.
Definition Id_to_index_overlay.h:50
typename Master_matrix::Column_settings Column_settings
Definition Id_to_index_overlay.h:60
void swap_rows(Index rowIndex1, Index rowIndex2)
Only available for simple boundary matrices (only storing R) and if PersistenceMatrixOptions::has_col...
Definition Id_to_index_overlay.h:1139
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 cel...
Definition Id_to_index_overlay.h:1172
typename Master_matrix::Pos_index Pos_index
Definition Id_to_index_overlay.h:45
void zero_entry(ID_index cellID, ID_index rowIndex)
Zeroes the entry at the given coordinates. Not available for chain matrices. In general,...
Definition Id_to_index_overlay.h:1009
Index get_number_of_columns() const
Returns the current number of columns in the matrix.
Definition Id_to_index_overlay.h:972
Dimension get_column_dimension(ID_index cellID) const
Returns the dimension of the given cell. Only available for non-basic matrices.
Definition Id_to_index_overlay.h:979
const std::vector< Cycle > & get_all_representative_cycles() const
Only available if PersistenceMatrixOptions::can_retrieve_representative_cycles is true....
Definition Id_to_index_overlay.h:1119
typename Master_matrix::ID_index ID_index
Definition Id_to_index_overlay.h:44
typename Master_matrix::Element Field_element
Definition Id_to_index_overlay.h:51
Persistence matrix namespace.
Definition FieldOperators.h:18
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14