multipers 2.3.3b6__cp311-cp311-manylinux_2_39_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of multipers might be problematic. Click here for more details.

Files changed (182) hide show
  1. multipers/__init__.py +33 -0
  2. multipers/_signed_measure_meta.py +453 -0
  3. multipers/_slicer_meta.py +211 -0
  4. multipers/array_api/__init__.py +45 -0
  5. multipers/array_api/numpy.py +41 -0
  6. multipers/array_api/torch.py +58 -0
  7. multipers/data/MOL2.py +458 -0
  8. multipers/data/UCR.py +18 -0
  9. multipers/data/__init__.py +1 -0
  10. multipers/data/graphs.py +466 -0
  11. multipers/data/immuno_regions.py +27 -0
  12. multipers/data/minimal_presentation_to_st_bf.py +0 -0
  13. multipers/data/pytorch2simplextree.py +91 -0
  14. multipers/data/shape3d.py +101 -0
  15. multipers/data/synthetic.py +113 -0
  16. multipers/distances.py +202 -0
  17. multipers/filtration_conversions.pxd +229 -0
  18. multipers/filtration_conversions.pxd.tp +84 -0
  19. multipers/filtrations/__init__.py +18 -0
  20. multipers/filtrations/density.py +574 -0
  21. multipers/filtrations/filtrations.py +361 -0
  22. multipers/filtrations.pxd +224 -0
  23. multipers/function_rips.cpython-311-x86_64-linux-gnu.so +0 -0
  24. multipers/function_rips.pyx +105 -0
  25. multipers/grids.cpython-311-x86_64-linux-gnu.so +0 -0
  26. multipers/grids.pyx +433 -0
  27. multipers/gudhi/Persistence_slices_interface.h +132 -0
  28. multipers/gudhi/Simplex_tree_interface.h +239 -0
  29. multipers/gudhi/Simplex_tree_multi_interface.h +551 -0
  30. multipers/gudhi/cubical_to_boundary.h +59 -0
  31. multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -0
  32. multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -0
  33. multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -0
  34. multipers/gudhi/gudhi/Debug_utils.h +45 -0
  35. multipers/gudhi/gudhi/Fields/Multi_field.h +484 -0
  36. multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -0
  37. multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -0
  38. multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -0
  39. multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -0
  40. multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -0
  41. multipers/gudhi/gudhi/Fields/Z2_field.h +355 -0
  42. multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -0
  43. multipers/gudhi/gudhi/Fields/Zp_field.h +420 -0
  44. multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -0
  45. multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -0
  46. multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -0
  47. multipers/gudhi/gudhi/Matrix.h +2107 -0
  48. multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -0
  49. multipers/gudhi/gudhi/Multi_persistence/Box.h +174 -0
  50. multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -0
  51. multipers/gudhi/gudhi/Off_reader.h +173 -0
  52. multipers/gudhi/gudhi/One_critical_filtration.h +1441 -0
  53. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -0
  54. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -0
  55. multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -0
  56. multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -0
  57. multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -0
  58. multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -0
  59. multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -0
  60. multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -0
  61. multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -0
  62. multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -0
  63. multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -0
  64. multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -0
  65. multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -0
  66. multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -0
  67. multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -0
  68. multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -0
  69. multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -0
  70. multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -0
  71. multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -0
  72. multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -0
  73. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -0
  74. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -0
  75. multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -0
  76. multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -0
  77. multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -0
  78. multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -0
  79. multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -0
  80. multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -0
  81. multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -0
  82. multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -0
  83. multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -0
  84. multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -0
  85. multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -0
  86. multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -0
  87. multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -0
  88. multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -0
  89. multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -0
  90. multipers/gudhi/gudhi/Persistent_cohomology.h +745 -0
  91. multipers/gudhi/gudhi/Points_off_io.h +171 -0
  92. multipers/gudhi/gudhi/Simple_object_pool.h +69 -0
  93. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -0
  94. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -0
  95. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -0
  96. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -0
  97. multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -0
  98. multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -0
  99. multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -0
  100. multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -0
  101. multipers/gudhi/gudhi/Simplex_tree.h +2794 -0
  102. multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -0
  103. multipers/gudhi/gudhi/distance_functions.h +62 -0
  104. multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -0
  105. multipers/gudhi/gudhi/persistence_interval.h +253 -0
  106. multipers/gudhi/gudhi/persistence_matrix_options.h +170 -0
  107. multipers/gudhi/gudhi/reader_utils.h +367 -0
  108. multipers/gudhi/mma_interface_coh.h +256 -0
  109. multipers/gudhi/mma_interface_h0.h +223 -0
  110. multipers/gudhi/mma_interface_matrix.h +293 -0
  111. multipers/gudhi/naive_merge_tree.h +536 -0
  112. multipers/gudhi/scc_io.h +310 -0
  113. multipers/gudhi/truc.h +1403 -0
  114. multipers/io.cpython-311-x86_64-linux-gnu.so +0 -0
  115. multipers/io.pyx +644 -0
  116. multipers/ml/__init__.py +0 -0
  117. multipers/ml/accuracies.py +90 -0
  118. multipers/ml/invariants_with_persistable.py +79 -0
  119. multipers/ml/kernels.py +176 -0
  120. multipers/ml/mma.py +713 -0
  121. multipers/ml/one.py +472 -0
  122. multipers/ml/point_clouds.py +352 -0
  123. multipers/ml/signed_measures.py +1589 -0
  124. multipers/ml/sliced_wasserstein.py +461 -0
  125. multipers/ml/tools.py +113 -0
  126. multipers/mma_structures.cpython-311-x86_64-linux-gnu.so +0 -0
  127. multipers/mma_structures.pxd +128 -0
  128. multipers/mma_structures.pyx +2786 -0
  129. multipers/mma_structures.pyx.tp +1094 -0
  130. multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -0
  131. multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -0
  132. multipers/multi_parameter_rank_invariant/function_rips.h +322 -0
  133. multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -0
  134. multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -0
  135. multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -0
  136. multipers/multiparameter_edge_collapse.py +41 -0
  137. multipers/multiparameter_module_approximation/approximation.h +2330 -0
  138. multipers/multiparameter_module_approximation/combinatory.h +129 -0
  139. multipers/multiparameter_module_approximation/debug.h +107 -0
  140. multipers/multiparameter_module_approximation/euler_curves.h +0 -0
  141. multipers/multiparameter_module_approximation/format_python-cpp.h +286 -0
  142. multipers/multiparameter_module_approximation/heap_column.h +238 -0
  143. multipers/multiparameter_module_approximation/images.h +79 -0
  144. multipers/multiparameter_module_approximation/list_column.h +174 -0
  145. multipers/multiparameter_module_approximation/list_column_2.h +232 -0
  146. multipers/multiparameter_module_approximation/ru_matrix.h +347 -0
  147. multipers/multiparameter_module_approximation/set_column.h +135 -0
  148. multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -0
  149. multipers/multiparameter_module_approximation/unordered_set_column.h +166 -0
  150. multipers/multiparameter_module_approximation/utilities.h +403 -0
  151. multipers/multiparameter_module_approximation/vector_column.h +223 -0
  152. multipers/multiparameter_module_approximation/vector_matrix.h +331 -0
  153. multipers/multiparameter_module_approximation/vineyards.h +464 -0
  154. multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -0
  155. multipers/multiparameter_module_approximation.cpython-311-x86_64-linux-gnu.so +0 -0
  156. multipers/multiparameter_module_approximation.pyx +235 -0
  157. multipers/pickle.py +90 -0
  158. multipers/plots.py +456 -0
  159. multipers/point_measure.cpython-311-x86_64-linux-gnu.so +0 -0
  160. multipers/point_measure.pyx +395 -0
  161. multipers/simplex_tree_multi.cpython-311-x86_64-linux-gnu.so +0 -0
  162. multipers/simplex_tree_multi.pxd +134 -0
  163. multipers/simplex_tree_multi.pyx +10840 -0
  164. multipers/simplex_tree_multi.pyx.tp +2009 -0
  165. multipers/slicer.cpython-311-x86_64-linux-gnu.so +0 -0
  166. multipers/slicer.pxd +3034 -0
  167. multipers/slicer.pxd.tp +234 -0
  168. multipers/slicer.pyx +20481 -0
  169. multipers/slicer.pyx.tp +1088 -0
  170. multipers/tensor/tensor.h +672 -0
  171. multipers/tensor.pxd +13 -0
  172. multipers/test.pyx +44 -0
  173. multipers/tests/__init__.py +62 -0
  174. multipers/torch/__init__.py +1 -0
  175. multipers/torch/diff_grids.py +240 -0
  176. multipers/torch/rips_density.py +310 -0
  177. multipers-2.3.3b6.dist-info/METADATA +128 -0
  178. multipers-2.3.3b6.dist-info/RECORD +182 -0
  179. multipers-2.3.3b6.dist-info/WHEEL +5 -0
  180. multipers-2.3.3b6.dist-info/licenses/LICENSE +21 -0
  181. multipers-2.3.3b6.dist-info/top_level.txt +1 -0
  182. multipers.libs/libtbb-ca48af5c.so.12.16 +0 -0
@@ -0,0 +1,293 @@
1
+ /* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which
2
+ * is released under MIT. See file LICENSE or go to
3
+ * https://gudhi.inria.fr/licensing/ for full license details. Author(s): Hannah
4
+ * Schreiber
5
+ *
6
+ * Copyright (C) 2022 Inria
7
+ *
8
+ * Modification(s):
9
+ * - YYYY/MM Author: Description of the modification
10
+ */
11
+ /**
12
+ * @file options.h
13
+ * @author Hannah Schreiber
14
+ * @brief Interface of the matrix for MMA
15
+ */
16
+
17
+ #ifndef MMA_INTERFACE_MATRIX_H
18
+ #define MMA_INTERFACE_MATRIX_H
19
+
20
+ #include <cstddef>
21
+ #include <cstdint>
22
+ #include <limits>
23
+ #include <ostream>
24
+ #include <utility>
25
+ #include <vector>
26
+
27
+ #include <gudhi/Matrix.h>
28
+ #include <gudhi/persistence_matrix_options.h>
29
+
30
+ namespace Gudhi {
31
+ namespace multiparameter {
32
+ namespace truc_interface {
33
+
34
+ template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
35
+ struct Multi_persistence_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
36
+ using Index = std::uint32_t;
37
+ static const bool has_matrix_maximal_dimension_access = false;
38
+ static const bool has_column_pairings = true;
39
+ static const bool has_vine_update = true;
40
+ static const bool can_retrieve_representative_cycles = true;
41
+ };
42
+
43
+ template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
44
+ struct Multi_persistence_Clement_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
45
+ using Index = std::uint32_t;
46
+ static const bool has_matrix_maximal_dimension_access = false;
47
+ static const bool has_column_pairings = true;
48
+ static const bool has_vine_update = true;
49
+ static const bool is_of_boundary_type = false;
50
+ static const Gudhi::persistence_matrix::Column_indexation_types column_indexation_type =
51
+ Gudhi::persistence_matrix::Column_indexation_types::POSITION;
52
+ static const bool can_retrieve_representative_cycles = true;
53
+ };
54
+
55
+ template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
56
+ struct No_vine_multi_persistence_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
57
+ using Index = std::uint32_t;
58
+ static const bool has_matrix_maximal_dimension_access = false;
59
+ static const bool has_column_pairings = true;
60
+ static const bool has_vine_update = false;
61
+ };
62
+
63
+ template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET, bool row_access = true>
64
+ struct fix_presentation_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
65
+ using Index = std::uint32_t;
66
+ static const bool has_row_access = row_access;
67
+ static const bool has_map_column_container = false;
68
+ static const bool has_removable_columns = false; // WARN : idx will change if map is not true
69
+ };
70
+
71
+ template <class Matrix_options, class Boundary_matrix_type>
72
+ class Persistence_backend_matrix {
73
+ public:
74
+ using matrix_type = Gudhi::persistence_matrix::Matrix<Matrix_options>;
75
+ using options = Matrix_options;
76
+ using cycle_type = typename matrix_type::Cycle;
77
+ static const bool is_vine = Matrix_options::has_vine_update;
78
+
79
+ using bar = typename matrix_type::Bar;
80
+ // using index = typename matrix_type::index;
81
+ // using id_index = typename matrix_type::id_index;
82
+ using pos_index = typename matrix_type::Pos_index;
83
+ using Index = typename matrix_type::Index;
84
+ using dimension_type = typename matrix_type::Dimension;
85
+
86
+ class Barcode_iterator : public boost::iterator_facade<Barcode_iterator, const bar &, boost::forward_traversal_tag> {
87
+ public:
88
+ Barcode_iterator(const typename matrix_type::Barcode *barcode, const std::vector<Index> *inv)
89
+ : barcode_(barcode->size() == 0 ? nullptr : barcode), perm_(barcode->size() == 0 ? nullptr : inv), currPos_(0) {
90
+ if (barcode_ != nullptr && perm_ != nullptr) {
91
+ auto &b = barcode_->operator[](currPos_);
92
+ currBar_.dim = b.dim;
93
+ currBar_.birth = perm_->operator[](b.birth);
94
+ currBar_.death = b.death == static_cast<pos_index>(-1) ? -1 : perm_->operator[](b.death);
95
+ }
96
+ }
97
+
98
+ Barcode_iterator() : barcode_(nullptr), perm_(nullptr), currPos_(0) {}
99
+
100
+ private:
101
+ // mandatory for the boost::iterator_facade inheritance.
102
+ friend class boost::iterator_core_access;
103
+
104
+ const typename matrix_type::Barcode *barcode_;
105
+ const std::vector<Index> *perm_;
106
+ std::size_t currPos_;
107
+ bar currBar_;
108
+
109
+ bool equal(Barcode_iterator const &other) const {
110
+ return barcode_ == other.barcode_ && perm_ == other.perm_ && currPos_ == other.currPos_;
111
+ }
112
+
113
+ const bar &dereference() const { return currBar_; }
114
+
115
+ void increment() {
116
+ constexpr const bool debug = false;
117
+ ++currPos_;
118
+ if (currPos_ == barcode_->size()) {
119
+ barcode_ = nullptr;
120
+ perm_ = nullptr;
121
+ currPos_ = 0;
122
+ } else {
123
+ auto &b = barcode_->operator[](currPos_);
124
+ currBar_.dim = b.dim;
125
+ currBar_.birth = perm_->operator[](b.birth);
126
+ if (debug && currBar_.birth > std::numeric_limits<decltype(currBar_.birth)>::max() / 2) {
127
+ std::cout << currBar_ << std::endl;
128
+ std::cout << "while " << b.birth;
129
+ std::cout << " " << perm_->size();
130
+ }
131
+ currBar_.death = b.death == static_cast<pos_index>(-1) ? -1 : perm_->operator[](b.death);
132
+ }
133
+ }
134
+ };
135
+
136
+ class Barcode {
137
+ public:
138
+ using iterator = Barcode_iterator;
139
+
140
+ Barcode(matrix_type &matrix, const std::vector<Index> *perm) : barcode_(&matrix.get_current_barcode()) {
141
+ const bool debug = false;
142
+ if constexpr (Matrix_options::has_vine_update) {
143
+ perm_ = perm;
144
+ } else {
145
+ perm_.reserve(perm->size());
146
+ for (const auto &stuff : *perm)
147
+ if (stuff < perm->size()) // number of generators
148
+ perm_.push_back(stuff);
149
+ }
150
+ if constexpr (debug) {
151
+ std::cout << "Built matrix of size " << matrix.get_number_of_columns() << " / " << perm->size() << std::endl;
152
+ }
153
+ }
154
+
155
+ iterator begin() const {
156
+ if constexpr (Matrix_options::has_vine_update) {
157
+ return Barcode_iterator(barcode_, perm_);
158
+ } else {
159
+ return Barcode_iterator(barcode_, &this->perm_);
160
+ }
161
+ }
162
+
163
+ iterator end() const { return Barcode_iterator(); }
164
+
165
+ /* using bar = typename matrix_type::Bar; */
166
+ /* const bar& operator[](std::size_t i){ */
167
+ /* return barcode_->at(); */
168
+ /* } */
169
+ std::size_t size() const { return barcode_->size(); }
170
+
171
+ inline friend std::ostream &operator<<(std::ostream &stream, Barcode &structure) {
172
+ stream << "Barcode: " << structure.size() << "\n";
173
+ for (const auto bar : structure) {
174
+ stream << "[" << bar.dim << "] ";
175
+ stream << bar.birth << ", " << bar.death;
176
+ stream << "\n";
177
+ }
178
+ stream << "\n";
179
+ return stream;
180
+ }
181
+
182
+ private:
183
+ const typename matrix_type::Barcode *barcode_;
184
+ typename std::conditional<Matrix_options::has_vine_update, const std::vector<Index> *, std::vector<Index>>::type
185
+ perm_;
186
+ };
187
+
188
+ Persistence_backend_matrix() : permutation_(nullptr) {};
189
+
190
+ Persistence_backend_matrix(const Boundary_matrix_type &boundaries, std::vector<Index> &permutation)
191
+ : matrix_(boundaries.size()), permutation_(&permutation) {
192
+ static_assert(Matrix_options::is_of_boundary_type || Matrix_options::has_vine_update, "Clement implies vine.");
193
+ constexpr const bool verbose = false;
194
+ if constexpr (verbose) std::cout << "Constructing matrix..." << std::endl;
195
+ std::vector<Index> permutationInv(permutation_->size());
196
+ std::vector<Index> boundary_container;
197
+ std::size_t c = 0;
198
+ for (auto i : *permutation_) {
199
+ if (i >= boundaries.size()) {
200
+ c++;
201
+ continue;
202
+ }
203
+ permutationInv[i] = c++;
204
+ boundary_container.resize(boundaries[i].size());
205
+ if constexpr (verbose)
206
+ std::cout << i << "/" << permutation_->size() << " c= " << c << " dimension " << boundaries.dimension(i)
207
+ << "..." << std::endl
208
+ << std::flush;
209
+ for (std::size_t j = 0; j < boundaries[i].size(); ++j) {
210
+ boundary_container[j] = permutationInv[boundaries[i][j]];
211
+ }
212
+ std::sort(boundary_container.begin(), boundary_container.end());
213
+ matrix_.insert_boundary(c - 1, boundary_container, boundaries.dimension(i));
214
+ }
215
+ }
216
+
217
+ Persistence_backend_matrix(const Persistence_backend_matrix &toCopy)
218
+ : matrix_(toCopy.matrix_), permutation_(toCopy.permutation_) {}
219
+
220
+ Persistence_backend_matrix(Persistence_backend_matrix &&other) noexcept
221
+ : matrix_(std::move(other.matrix_)), permutation_(std::exchange(other.permutation_, nullptr)) {}
222
+
223
+ Persistence_backend_matrix &operator=(Persistence_backend_matrix other) {
224
+ swap(matrix_, other.matrix_);
225
+ std::swap(permutation_, other.permutation_);
226
+ return *this;
227
+ }
228
+
229
+ friend void swap(Persistence_backend_matrix &be1, Persistence_backend_matrix &be2) {
230
+ swap(be1.matrix_, be2.matrix_);
231
+ std::swap(be1.permutation_, be2.permutation_);
232
+ }
233
+
234
+ inline dimension_type get_dimension(pos_index i) { return matrix_.get_column_dimension(i); }
235
+
236
+ inline void vine_swap(pos_index i) { matrix_.vine_swap(i); }
237
+
238
+ inline Barcode get_barcode() { return Barcode(matrix_, permutation_); }
239
+
240
+ inline std::size_t size() const { return this->matrix_.get_number_of_columns(); }
241
+
242
+ inline friend std::ostream &operator<<(std::ostream &stream, Persistence_backend_matrix &structure) {
243
+ stream << "[\n";
244
+ for (auto i = 0u; i < structure.matrix_.get_number_of_columns(); i++) {
245
+ stream << "[";
246
+ for (const auto &stuff : structure.matrix_.get_column(i)) stream << stuff << ", ";
247
+ stream << "]\n";
248
+ }
249
+
250
+ stream << "]\n";
251
+ return stream;
252
+ }
253
+
254
+ inline std::vector<std::vector<std::vector<unsigned int>>> get_representative_cycles(bool update,
255
+ bool detailed = false) {
256
+ // Only used when vineyard, so shrunk permutation i.e.
257
+ // without the -1, is permutation as we keep inf values (they can become
258
+ // finite) cf barcode perm which is copied to remove the -1
259
+ std::vector<unsigned int> permutation2;
260
+ permutation2.reserve(permutation_->size());
261
+ for (auto i : *permutation_) {
262
+ if (i >= matrix_.get_number_of_columns()) {
263
+ continue;
264
+ }
265
+ permutation2.push_back(i);
266
+ }
267
+ constexpr const bool verbose = false;
268
+ if (update) [[likely]]
269
+ matrix_.update_representative_cycles();
270
+ std::vector<std::vector<std::vector<unsigned int>>> current_cycles =
271
+ matrix_.get_representative_cycles_as_borders(detailed);
272
+ for (auto &cycle : current_cycles) {
273
+ if constexpr (verbose) std::cout << "Cycle (matrix_ order): ";
274
+ for (auto &border : cycle) {
275
+ for (auto &b : border) {
276
+ b = permutation2[b];
277
+ }
278
+ }
279
+ }
280
+ return current_cycles;
281
+ }
282
+
283
+ inline void _update_permutation_ptr(std::vector<Index> &perm) { permutation_ = &perm; }
284
+
285
+ private:
286
+ matrix_type matrix_;
287
+ std::vector<Index> *permutation_;
288
+ };
289
+
290
+ } // namespace truc_interface
291
+ } // namespace multiparameter
292
+ } // namespace Gudhi
293
+ #endif // MMA_INTERFACE_MATRIX_H