multipers 2.2.3__cp310-cp310-win_amd64.whl → 2.3.1__cp310-cp310-win_amd64.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.
- multipers/__init__.py +33 -31
- multipers/_signed_measure_meta.py +430 -430
- multipers/_slicer_meta.py +211 -212
- multipers/data/MOL2.py +458 -458
- multipers/data/UCR.py +18 -18
- multipers/data/graphs.py +466 -466
- multipers/data/immuno_regions.py +27 -27
- multipers/data/pytorch2simplextree.py +90 -90
- multipers/data/shape3d.py +101 -101
- multipers/data/synthetic.py +113 -111
- multipers/distances.py +198 -198
- multipers/filtration_conversions.pxd.tp +84 -84
- multipers/filtrations/__init__.py +18 -0
- multipers/{ml/convolutions.py → filtrations/density.py} +563 -520
- multipers/filtrations/filtrations.py +289 -0
- multipers/filtrations.pxd +224 -224
- multipers/function_rips.cp310-win_amd64.pyd +0 -0
- multipers/function_rips.pyx +105 -105
- multipers/grids.cp310-win_amd64.pyd +0 -0
- multipers/grids.pyx +350 -350
- multipers/gudhi/Persistence_slices_interface.h +132 -132
- multipers/gudhi/Simplex_tree_interface.h +239 -245
- multipers/gudhi/Simplex_tree_multi_interface.h +516 -561
- multipers/gudhi/cubical_to_boundary.h +59 -59
- multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -450
- multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -1070
- multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -579
- multipers/gudhi/gudhi/Debug_utils.h +45 -45
- multipers/gudhi/gudhi/Fields/Multi_field.h +484 -484
- multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -455
- multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -450
- multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -531
- multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -507
- multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -531
- multipers/gudhi/gudhi/Fields/Z2_field.h +355 -355
- multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -376
- multipers/gudhi/gudhi/Fields/Zp_field.h +420 -420
- multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -400
- multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -418
- multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -337
- multipers/gudhi/gudhi/Matrix.h +2107 -2107
- multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -1038
- multipers/gudhi/gudhi/Multi_persistence/Box.h +171 -171
- multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -282
- multipers/gudhi/gudhi/Off_reader.h +173 -173
- multipers/gudhi/gudhi/One_critical_filtration.h +1433 -1431
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -769
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -686
- multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -842
- multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -1350
- multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -1105
- multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -859
- multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -910
- multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -139
- multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -230
- multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -211
- multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -60
- multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -60
- multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -136
- multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -190
- multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -616
- multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -150
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -106
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -219
- multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -327
- multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -1140
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -934
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -934
- multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -980
- multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -1092
- multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -192
- multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -921
- multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -1093
- multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -1012
- multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -1244
- multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -186
- multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -164
- multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -156
- multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -376
- multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -540
- multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -118
- multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -173
- multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -128
- multipers/gudhi/gudhi/Persistent_cohomology.h +745 -745
- multipers/gudhi/gudhi/Points_off_io.h +171 -171
- multipers/gudhi/gudhi/Simple_object_pool.h +69 -69
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -463
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -83
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -106
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -277
- multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -62
- multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -27
- multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -62
- multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -157
- multipers/gudhi/gudhi/Simplex_tree.h +2794 -2794
- multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -163
- multipers/gudhi/gudhi/distance_functions.h +62 -62
- multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -104
- multipers/gudhi/gudhi/persistence_interval.h +253 -253
- multipers/gudhi/gudhi/persistence_matrix_options.h +170 -170
- multipers/gudhi/gudhi/reader_utils.h +367 -367
- multipers/gudhi/mma_interface_coh.h +256 -255
- multipers/gudhi/mma_interface_h0.h +223 -231
- multipers/gudhi/mma_interface_matrix.h +291 -282
- multipers/gudhi/naive_merge_tree.h +536 -575
- multipers/gudhi/scc_io.h +310 -289
- multipers/gudhi/truc.h +957 -888
- multipers/io.cp310-win_amd64.pyd +0 -0
- multipers/io.pyx +714 -711
- multipers/ml/accuracies.py +90 -90
- multipers/ml/invariants_with_persistable.py +79 -79
- multipers/ml/kernels.py +176 -176
- multipers/ml/mma.py +713 -714
- multipers/ml/one.py +472 -472
- multipers/ml/point_clouds.py +352 -346
- multipers/ml/signed_measures.py +1589 -1589
- multipers/ml/sliced_wasserstein.py +461 -461
- multipers/ml/tools.py +113 -113
- multipers/mma_structures.cp310-win_amd64.pyd +0 -0
- multipers/mma_structures.pxd +127 -127
- multipers/mma_structures.pyx +4 -8
- multipers/mma_structures.pyx.tp +1083 -1085
- multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -93
- multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -97
- multipers/multi_parameter_rank_invariant/function_rips.h +322 -322
- multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -769
- multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -148
- multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -369
- multipers/multiparameter_edge_collapse.py +41 -41
- multipers/multiparameter_module_approximation/approximation.h +2298 -2295
- multipers/multiparameter_module_approximation/combinatory.h +129 -129
- multipers/multiparameter_module_approximation/debug.h +107 -107
- multipers/multiparameter_module_approximation/format_python-cpp.h +286 -286
- multipers/multiparameter_module_approximation/heap_column.h +238 -238
- multipers/multiparameter_module_approximation/images.h +79 -79
- multipers/multiparameter_module_approximation/list_column.h +174 -174
- multipers/multiparameter_module_approximation/list_column_2.h +232 -232
- multipers/multiparameter_module_approximation/ru_matrix.h +347 -347
- multipers/multiparameter_module_approximation/set_column.h +135 -135
- multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -36
- multipers/multiparameter_module_approximation/unordered_set_column.h +166 -166
- multipers/multiparameter_module_approximation/utilities.h +403 -419
- multipers/multiparameter_module_approximation/vector_column.h +223 -223
- multipers/multiparameter_module_approximation/vector_matrix.h +331 -331
- multipers/multiparameter_module_approximation/vineyards.h +464 -464
- multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -649
- multipers/multiparameter_module_approximation.cp310-win_amd64.pyd +0 -0
- multipers/multiparameter_module_approximation.pyx +218 -217
- multipers/pickle.py +90 -53
- multipers/plots.py +342 -334
- multipers/point_measure.cp310-win_amd64.pyd +0 -0
- multipers/point_measure.pyx +322 -320
- multipers/simplex_tree_multi.cp310-win_amd64.pyd +0 -0
- multipers/simplex_tree_multi.pxd +133 -133
- multipers/simplex_tree_multi.pyx +115 -48
- multipers/simplex_tree_multi.pyx.tp +1947 -1935
- multipers/slicer.cp310-win_amd64.pyd +0 -0
- multipers/slicer.pxd +301 -120
- multipers/slicer.pxd.tp +218 -214
- multipers/slicer.pyx +1570 -507
- multipers/slicer.pyx.tp +931 -914
- multipers/tensor/tensor.h +672 -672
- multipers/tensor.pxd +13 -13
- multipers/test.pyx +44 -44
- multipers/tests/__init__.py +57 -57
- multipers/torch/diff_grids.py +217 -217
- multipers/torch/rips_density.py +310 -304
- {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/LICENSE +21 -21
- {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/METADATA +21 -11
- multipers-2.3.1.dist-info/RECORD +182 -0
- {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/WHEEL +1 -1
- multipers/tests/test_diff_helper.py +0 -73
- multipers/tests/test_hilbert_function.py +0 -82
- multipers/tests/test_mma.py +0 -83
- multipers/tests/test_point_clouds.py +0 -49
- multipers/tests/test_python-cpp_conversion.py +0 -82
- multipers/tests/test_signed_betti.py +0 -181
- multipers/tests/test_signed_measure.py +0 -89
- multipers/tests/test_simplextreemulti.py +0 -221
- multipers/tests/test_slicer.py +0 -221
- multipers-2.2.3.dist-info/RECORD +0 -189
- {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/top_level.txt +0 -0
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
|
|
2
|
-
* See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
|
|
3
|
-
* Author(s): Hannah Schreiber
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2022-24 Inria
|
|
6
|
-
*
|
|
7
|
-
* Modification(s):
|
|
8
|
-
* - YYYY/MM Author: Description of the modification
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @file matrix_dimension_holders.h
|
|
13
|
-
* @author Hannah Schreiber
|
|
14
|
-
* @brief Contains the @ref Gudhi::persistence_matrix::Matrix_max_dimension_holder
|
|
15
|
-
* @ref Gudhi::persistence_matrix::Matrix_all_dimension_holder classes
|
|
16
|
-
* and the @ref Gudhi::persistence_matrix::Dummy_matrix_dimension_holder structure.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
#ifndef PM_MATRIX_DIM_HOLDER_H
|
|
20
|
-
#define PM_MATRIX_DIM_HOLDER_H
|
|
21
|
-
|
|
22
|
-
#include <utility> //std::swap, std::move & std::exchange
|
|
23
|
-
#include <vector>
|
|
24
|
-
|
|
25
|
-
namespace Gudhi {
|
|
26
|
-
namespace persistence_matrix {
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @ingroup persistence_matrix
|
|
30
|
-
*
|
|
31
|
-
* @brief Empty structure.
|
|
32
|
-
* Inherited instead of @ref Matrix_max_dimension_holder or @ref Matrix_all_dimension_holder, when the maximal
|
|
33
|
-
* dimension of a matrix is not stored.
|
|
34
|
-
*/
|
|
35
|
-
struct Dummy_matrix_dimension_holder
|
|
36
|
-
{
|
|
37
|
-
template <typename Dimension>
|
|
38
|
-
Dummy_matrix_dimension_holder([[maybe_unused]] Dimension maximalDimension) {}
|
|
39
|
-
|
|
40
|
-
friend void swap([[maybe_unused]] Dummy_matrix_dimension_holder& d1,
|
|
41
|
-
[[maybe_unused]] Dummy_matrix_dimension_holder& d2) {}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @ingroup persistence_matrix
|
|
46
|
-
*
|
|
47
|
-
* @brief Class managing the maximal dimension of a cell represented in the inheriting matrix, when the option of
|
|
48
|
-
* cell removal is not enabled.
|
|
49
|
-
*
|
|
50
|
-
* @tparam Dimension Dimension value type. Has to be an integer type.
|
|
51
|
-
* If unsigned, the maximal value of the type should not be attained during a run.
|
|
52
|
-
*/
|
|
53
|
-
template <typename Dimension>
|
|
54
|
-
class Matrix_max_dimension_holder
|
|
55
|
-
{
|
|
56
|
-
public:
|
|
57
|
-
/**
|
|
58
|
-
* @brief Default constructor. If a dimension is specified, stores it as the maximal value.
|
|
59
|
-
*
|
|
60
|
-
* @param maximalDimension Value of the maximal dimension. Has to be either positive or -1. Default value: -1.
|
|
61
|
-
*/
|
|
62
|
-
Matrix_max_dimension_holder(Dimension maximalDimension = -1) : maxDim_(maximalDimension){};
|
|
63
|
-
/**
|
|
64
|
-
* @brief Copy constructor.
|
|
65
|
-
*
|
|
66
|
-
* @param toCopy Matrix to copy.
|
|
67
|
-
*/
|
|
68
|
-
Matrix_max_dimension_holder(const Matrix_max_dimension_holder& toCopy) : maxDim_(toCopy.maxDim_){};
|
|
69
|
-
/**
|
|
70
|
-
* @brief Move constructor.
|
|
71
|
-
*
|
|
72
|
-
* @param other Matrix to move.
|
|
73
|
-
*/
|
|
74
|
-
Matrix_max_dimension_holder(Matrix_max_dimension_holder&& other) noexcept
|
|
75
|
-
: maxDim_(std::exchange(other.maxDim_, -1)){};
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* @brief Returns the maximal dimension of a cell represented in the matrix.
|
|
79
|
-
*
|
|
80
|
-
* @return The maximal dimension.
|
|
81
|
-
*/
|
|
82
|
-
Dimension get_max_dimension() const { return maxDim_; };
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* @brief Assign operator.
|
|
86
|
-
*/
|
|
87
|
-
Matrix_max_dimension_holder& operator=(const Matrix_max_dimension_holder& other) {
|
|
88
|
-
std::swap(maxDim_, other.maxDim_);
|
|
89
|
-
return *this;
|
|
90
|
-
};
|
|
91
|
-
/**
|
|
92
|
-
* @brief Swap operator.
|
|
93
|
-
*/
|
|
94
|
-
friend void swap(Matrix_max_dimension_holder& matrix1, Matrix_max_dimension_holder& matrix2) {
|
|
95
|
-
std::swap(matrix1.maxDim_, matrix2.maxDim_);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
protected:
|
|
99
|
-
Dimension maxDim_; /**< Current maximal dimension. */
|
|
100
|
-
|
|
101
|
-
void update_up(Dimension dimension) {
|
|
102
|
-
if (maxDim_ == -1 || maxDim_ < dimension) maxDim_ = dimension;
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* @ingroup persistence_matrix
|
|
108
|
-
*
|
|
109
|
-
* @brief Class managing the maximal dimension of a cell represented in the inheriting matrix, when the option of
|
|
110
|
-
* cell removal is enabled.
|
|
111
|
-
*
|
|
112
|
-
* @tparam Dimension Dimension value type. Has to be an integer type.
|
|
113
|
-
* If unsigned, the maximal value of the type should not be attained during a run.
|
|
114
|
-
*/
|
|
115
|
-
template <typename Dimension>
|
|
116
|
-
class Matrix_all_dimension_holder
|
|
117
|
-
{
|
|
118
|
-
public:
|
|
119
|
-
/**
|
|
120
|
-
* @brief Default constructor. If a dimension is specified, stores it as the maximal value.
|
|
121
|
-
*
|
|
122
|
-
* @param maximalDimension Value of the maximal dimension. Has to be either positive or -1. Default value: -1.
|
|
123
|
-
*/
|
|
124
|
-
Matrix_all_dimension_holder(Dimension maximalDimension = -1)
|
|
125
|
-
: dimensions_(maximalDimension < 0 ? 0 : maximalDimension + 1, 0), maxDim_(maximalDimension) {
|
|
126
|
-
if (maxDim_ != -1) dimensions_[maxDim_] = 1;
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* @brief Copy constructor.
|
|
130
|
-
*
|
|
131
|
-
* @param toCopy Matrix to copy.
|
|
132
|
-
*/
|
|
133
|
-
Matrix_all_dimension_holder(const Matrix_all_dimension_holder& toCopy)
|
|
134
|
-
: dimensions_(toCopy.dimensions_), maxDim_(toCopy.maxDim_){};
|
|
135
|
-
/**
|
|
136
|
-
* @brief Move constructor.
|
|
137
|
-
*
|
|
138
|
-
* @param other Matrix to move.
|
|
139
|
-
*/
|
|
140
|
-
Matrix_all_dimension_holder(Matrix_all_dimension_holder&& other) noexcept
|
|
141
|
-
: dimensions_(std::move(other.dimensions_)), maxDim_(std::exchange(other.maxDim_, -1)){};
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @brief Returns the maximal dimension of a cell represented in the matrix.
|
|
145
|
-
*
|
|
146
|
-
* @return The maximal dimension.
|
|
147
|
-
*/
|
|
148
|
-
Dimension get_max_dimension() const { return maxDim_; };
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* @brief Assign operator.
|
|
152
|
-
*/
|
|
153
|
-
Matrix_all_dimension_holder& operator=(Matrix_all_dimension_holder other) {
|
|
154
|
-
std::swap(maxDim_, other.maxDim_);
|
|
155
|
-
dimensions_.swap(other.dimensions_);
|
|
156
|
-
return *this;
|
|
157
|
-
};
|
|
158
|
-
/**
|
|
159
|
-
* @brief Swap operator.
|
|
160
|
-
*/
|
|
161
|
-
friend void swap(Matrix_all_dimension_holder& matrix1, Matrix_all_dimension_holder& matrix2) {
|
|
162
|
-
std::swap(matrix1.maxDim_, matrix2.maxDim_);
|
|
163
|
-
matrix1.dimensions_.swap(matrix2.dimensions_);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
protected:
|
|
167
|
-
std::vector<unsigned int> dimensions_; /**< Number of cells by dimension. */
|
|
168
|
-
Dimension maxDim_; /**< Current maximal dimension. */
|
|
169
|
-
|
|
170
|
-
void update_up(unsigned int dimension) {
|
|
171
|
-
if (dimensions_.size() <= dimension) dimensions_.resize(dimension + 1, 0);
|
|
172
|
-
++(dimensions_[dimension]);
|
|
173
|
-
maxDim_ = dimensions_.size() - 1;
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
void update_down(unsigned int dimension) {
|
|
177
|
-
--(dimensions_[dimension]); // assumes dimension already exists and is not 0
|
|
178
|
-
while (!dimensions_.empty() && dimensions_.back() == 0) dimensions_.pop_back();
|
|
179
|
-
maxDim_ = dimensions_.size() - 1;
|
|
180
|
-
};
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
} // namespace persistence_matrix
|
|
184
|
-
} // namespace Gudhi
|
|
185
|
-
|
|
186
|
-
#endif // PM_MATRIX_DIM_HOLDER_H
|
|
1
|
+
/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
|
|
2
|
+
* See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
|
|
3
|
+
* Author(s): Hannah Schreiber
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2022-24 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file matrix_dimension_holders.h
|
|
13
|
+
* @author Hannah Schreiber
|
|
14
|
+
* @brief Contains the @ref Gudhi::persistence_matrix::Matrix_max_dimension_holder
|
|
15
|
+
* @ref Gudhi::persistence_matrix::Matrix_all_dimension_holder classes
|
|
16
|
+
* and the @ref Gudhi::persistence_matrix::Dummy_matrix_dimension_holder structure.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#ifndef PM_MATRIX_DIM_HOLDER_H
|
|
20
|
+
#define PM_MATRIX_DIM_HOLDER_H
|
|
21
|
+
|
|
22
|
+
#include <utility> //std::swap, std::move & std::exchange
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace Gudhi {
|
|
26
|
+
namespace persistence_matrix {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @ingroup persistence_matrix
|
|
30
|
+
*
|
|
31
|
+
* @brief Empty structure.
|
|
32
|
+
* Inherited instead of @ref Matrix_max_dimension_holder or @ref Matrix_all_dimension_holder, when the maximal
|
|
33
|
+
* dimension of a matrix is not stored.
|
|
34
|
+
*/
|
|
35
|
+
struct Dummy_matrix_dimension_holder
|
|
36
|
+
{
|
|
37
|
+
template <typename Dimension>
|
|
38
|
+
Dummy_matrix_dimension_holder([[maybe_unused]] Dimension maximalDimension) {}
|
|
39
|
+
|
|
40
|
+
friend void swap([[maybe_unused]] Dummy_matrix_dimension_holder& d1,
|
|
41
|
+
[[maybe_unused]] Dummy_matrix_dimension_holder& d2) {}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @ingroup persistence_matrix
|
|
46
|
+
*
|
|
47
|
+
* @brief Class managing the maximal dimension of a cell represented in the inheriting matrix, when the option of
|
|
48
|
+
* cell removal is not enabled.
|
|
49
|
+
*
|
|
50
|
+
* @tparam Dimension Dimension value type. Has to be an integer type.
|
|
51
|
+
* If unsigned, the maximal value of the type should not be attained during a run.
|
|
52
|
+
*/
|
|
53
|
+
template <typename Dimension>
|
|
54
|
+
class Matrix_max_dimension_holder
|
|
55
|
+
{
|
|
56
|
+
public:
|
|
57
|
+
/**
|
|
58
|
+
* @brief Default constructor. If a dimension is specified, stores it as the maximal value.
|
|
59
|
+
*
|
|
60
|
+
* @param maximalDimension Value of the maximal dimension. Has to be either positive or -1. Default value: -1.
|
|
61
|
+
*/
|
|
62
|
+
Matrix_max_dimension_holder(Dimension maximalDimension = -1) : maxDim_(maximalDimension){};
|
|
63
|
+
/**
|
|
64
|
+
* @brief Copy constructor.
|
|
65
|
+
*
|
|
66
|
+
* @param toCopy Matrix to copy.
|
|
67
|
+
*/
|
|
68
|
+
Matrix_max_dimension_holder(const Matrix_max_dimension_holder& toCopy) : maxDim_(toCopy.maxDim_){};
|
|
69
|
+
/**
|
|
70
|
+
* @brief Move constructor.
|
|
71
|
+
*
|
|
72
|
+
* @param other Matrix to move.
|
|
73
|
+
*/
|
|
74
|
+
Matrix_max_dimension_holder(Matrix_max_dimension_holder&& other) noexcept
|
|
75
|
+
: maxDim_(std::exchange(other.maxDim_, -1)){};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @brief Returns the maximal dimension of a cell represented in the matrix.
|
|
79
|
+
*
|
|
80
|
+
* @return The maximal dimension.
|
|
81
|
+
*/
|
|
82
|
+
Dimension get_max_dimension() const { return maxDim_; };
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @brief Assign operator.
|
|
86
|
+
*/
|
|
87
|
+
Matrix_max_dimension_holder& operator=(const Matrix_max_dimension_holder& other) {
|
|
88
|
+
std::swap(maxDim_, other.maxDim_);
|
|
89
|
+
return *this;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* @brief Swap operator.
|
|
93
|
+
*/
|
|
94
|
+
friend void swap(Matrix_max_dimension_holder& matrix1, Matrix_max_dimension_holder& matrix2) {
|
|
95
|
+
std::swap(matrix1.maxDim_, matrix2.maxDim_);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected:
|
|
99
|
+
Dimension maxDim_; /**< Current maximal dimension. */
|
|
100
|
+
|
|
101
|
+
void update_up(Dimension dimension) {
|
|
102
|
+
if (maxDim_ == -1 || maxDim_ < dimension) maxDim_ = dimension;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @ingroup persistence_matrix
|
|
108
|
+
*
|
|
109
|
+
* @brief Class managing the maximal dimension of a cell represented in the inheriting matrix, when the option of
|
|
110
|
+
* cell removal is enabled.
|
|
111
|
+
*
|
|
112
|
+
* @tparam Dimension Dimension value type. Has to be an integer type.
|
|
113
|
+
* If unsigned, the maximal value of the type should not be attained during a run.
|
|
114
|
+
*/
|
|
115
|
+
template <typename Dimension>
|
|
116
|
+
class Matrix_all_dimension_holder
|
|
117
|
+
{
|
|
118
|
+
public:
|
|
119
|
+
/**
|
|
120
|
+
* @brief Default constructor. If a dimension is specified, stores it as the maximal value.
|
|
121
|
+
*
|
|
122
|
+
* @param maximalDimension Value of the maximal dimension. Has to be either positive or -1. Default value: -1.
|
|
123
|
+
*/
|
|
124
|
+
Matrix_all_dimension_holder(Dimension maximalDimension = -1)
|
|
125
|
+
: dimensions_(maximalDimension < 0 ? 0 : maximalDimension + 1, 0), maxDim_(maximalDimension) {
|
|
126
|
+
if (maxDim_ != -1) dimensions_[maxDim_] = 1;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* @brief Copy constructor.
|
|
130
|
+
*
|
|
131
|
+
* @param toCopy Matrix to copy.
|
|
132
|
+
*/
|
|
133
|
+
Matrix_all_dimension_holder(const Matrix_all_dimension_holder& toCopy)
|
|
134
|
+
: dimensions_(toCopy.dimensions_), maxDim_(toCopy.maxDim_){};
|
|
135
|
+
/**
|
|
136
|
+
* @brief Move constructor.
|
|
137
|
+
*
|
|
138
|
+
* @param other Matrix to move.
|
|
139
|
+
*/
|
|
140
|
+
Matrix_all_dimension_holder(Matrix_all_dimension_holder&& other) noexcept
|
|
141
|
+
: dimensions_(std::move(other.dimensions_)), maxDim_(std::exchange(other.maxDim_, -1)){};
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @brief Returns the maximal dimension of a cell represented in the matrix.
|
|
145
|
+
*
|
|
146
|
+
* @return The maximal dimension.
|
|
147
|
+
*/
|
|
148
|
+
Dimension get_max_dimension() const { return maxDim_; };
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @brief Assign operator.
|
|
152
|
+
*/
|
|
153
|
+
Matrix_all_dimension_holder& operator=(Matrix_all_dimension_holder other) {
|
|
154
|
+
std::swap(maxDim_, other.maxDim_);
|
|
155
|
+
dimensions_.swap(other.dimensions_);
|
|
156
|
+
return *this;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* @brief Swap operator.
|
|
160
|
+
*/
|
|
161
|
+
friend void swap(Matrix_all_dimension_holder& matrix1, Matrix_all_dimension_holder& matrix2) {
|
|
162
|
+
std::swap(matrix1.maxDim_, matrix2.maxDim_);
|
|
163
|
+
matrix1.dimensions_.swap(matrix2.dimensions_);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
protected:
|
|
167
|
+
std::vector<unsigned int> dimensions_; /**< Number of cells by dimension. */
|
|
168
|
+
Dimension maxDim_; /**< Current maximal dimension. */
|
|
169
|
+
|
|
170
|
+
void update_up(unsigned int dimension) {
|
|
171
|
+
if (dimensions_.size() <= dimension) dimensions_.resize(dimension + 1, 0);
|
|
172
|
+
++(dimensions_[dimension]);
|
|
173
|
+
maxDim_ = dimensions_.size() - 1;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
void update_down(unsigned int dimension) {
|
|
177
|
+
--(dimensions_[dimension]); // assumes dimension already exists and is not 0
|
|
178
|
+
while (!dimensions_.empty() && dimensions_.back() == 0) dimensions_.pop_back();
|
|
179
|
+
maxDim_ = dimensions_.size() - 1;
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
} // namespace persistence_matrix
|
|
184
|
+
} // namespace Gudhi
|
|
185
|
+
|
|
186
|
+
#endif // PM_MATRIX_DIM_HOLDER_H
|