multipers 2.3.3b6__cp312-cp312-macosx_11_0_arm64.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/.dylibs/libc++.1.0.dylib +0 -0
- multipers/.dylibs/libtbb.12.16.dylib +0 -0
- multipers/__init__.py +33 -0
- multipers/_signed_measure_meta.py +453 -0
- multipers/_slicer_meta.py +211 -0
- multipers/array_api/__init__.py +45 -0
- multipers/array_api/numpy.py +41 -0
- multipers/array_api/torch.py +58 -0
- multipers/data/MOL2.py +458 -0
- multipers/data/UCR.py +18 -0
- multipers/data/__init__.py +1 -0
- multipers/data/graphs.py +466 -0
- multipers/data/immuno_regions.py +27 -0
- multipers/data/minimal_presentation_to_st_bf.py +0 -0
- multipers/data/pytorch2simplextree.py +91 -0
- multipers/data/shape3d.py +101 -0
- multipers/data/synthetic.py +113 -0
- multipers/distances.py +202 -0
- multipers/filtration_conversions.pxd +229 -0
- multipers/filtration_conversions.pxd.tp +84 -0
- multipers/filtrations/__init__.py +18 -0
- multipers/filtrations/density.py +574 -0
- multipers/filtrations/filtrations.py +361 -0
- multipers/filtrations.pxd +224 -0
- multipers/function_rips.cpython-312-darwin.so +0 -0
- multipers/function_rips.pyx +105 -0
- multipers/grids.cpython-312-darwin.so +0 -0
- multipers/grids.pyx +433 -0
- multipers/gudhi/Persistence_slices_interface.h +132 -0
- multipers/gudhi/Simplex_tree_interface.h +239 -0
- multipers/gudhi/Simplex_tree_multi_interface.h +551 -0
- multipers/gudhi/cubical_to_boundary.h +59 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -0
- multipers/gudhi/gudhi/Debug_utils.h +45 -0
- multipers/gudhi/gudhi/Fields/Multi_field.h +484 -0
- multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -0
- multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -0
- multipers/gudhi/gudhi/Fields/Z2_field.h +355 -0
- multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -0
- multipers/gudhi/gudhi/Fields/Zp_field.h +420 -0
- multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -0
- multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -0
- multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -0
- multipers/gudhi/gudhi/Matrix.h +2107 -0
- multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -0
- multipers/gudhi/gudhi/Multi_persistence/Box.h +174 -0
- multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -0
- multipers/gudhi/gudhi/Off_reader.h +173 -0
- multipers/gudhi/gudhi/One_critical_filtration.h +1441 -0
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -0
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -0
- multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -0
- multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -0
- multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -0
- multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -0
- multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -0
- multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -0
- multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -0
- multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -0
- multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -0
- multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -0
- multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -0
- multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -0
- multipers/gudhi/gudhi/Persistent_cohomology.h +745 -0
- multipers/gudhi/gudhi/Points_off_io.h +171 -0
- multipers/gudhi/gudhi/Simple_object_pool.h +69 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -0
- multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -0
- multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -0
- multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -0
- multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -0
- multipers/gudhi/gudhi/Simplex_tree.h +2794 -0
- multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -0
- multipers/gudhi/gudhi/distance_functions.h +62 -0
- multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -0
- multipers/gudhi/gudhi/persistence_interval.h +253 -0
- multipers/gudhi/gudhi/persistence_matrix_options.h +170 -0
- multipers/gudhi/gudhi/reader_utils.h +367 -0
- multipers/gudhi/mma_interface_coh.h +256 -0
- multipers/gudhi/mma_interface_h0.h +223 -0
- multipers/gudhi/mma_interface_matrix.h +293 -0
- multipers/gudhi/naive_merge_tree.h +536 -0
- multipers/gudhi/scc_io.h +310 -0
- multipers/gudhi/truc.h +1403 -0
- multipers/io.cpython-312-darwin.so +0 -0
- multipers/io.pyx +644 -0
- multipers/ml/__init__.py +0 -0
- multipers/ml/accuracies.py +90 -0
- multipers/ml/invariants_with_persistable.py +79 -0
- multipers/ml/kernels.py +176 -0
- multipers/ml/mma.py +713 -0
- multipers/ml/one.py +472 -0
- multipers/ml/point_clouds.py +352 -0
- multipers/ml/signed_measures.py +1589 -0
- multipers/ml/sliced_wasserstein.py +461 -0
- multipers/ml/tools.py +113 -0
- multipers/mma_structures.cpython-312-darwin.so +0 -0
- multipers/mma_structures.pxd +128 -0
- multipers/mma_structures.pyx +2786 -0
- multipers/mma_structures.pyx.tp +1094 -0
- multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -0
- multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -0
- multipers/multi_parameter_rank_invariant/function_rips.h +322 -0
- multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -0
- multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -0
- multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -0
- multipers/multiparameter_edge_collapse.py +41 -0
- multipers/multiparameter_module_approximation/approximation.h +2330 -0
- multipers/multiparameter_module_approximation/combinatory.h +129 -0
- multipers/multiparameter_module_approximation/debug.h +107 -0
- multipers/multiparameter_module_approximation/euler_curves.h +0 -0
- multipers/multiparameter_module_approximation/format_python-cpp.h +286 -0
- multipers/multiparameter_module_approximation/heap_column.h +238 -0
- multipers/multiparameter_module_approximation/images.h +79 -0
- multipers/multiparameter_module_approximation/list_column.h +174 -0
- multipers/multiparameter_module_approximation/list_column_2.h +232 -0
- multipers/multiparameter_module_approximation/ru_matrix.h +347 -0
- multipers/multiparameter_module_approximation/set_column.h +135 -0
- multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -0
- multipers/multiparameter_module_approximation/unordered_set_column.h +166 -0
- multipers/multiparameter_module_approximation/utilities.h +403 -0
- multipers/multiparameter_module_approximation/vector_column.h +223 -0
- multipers/multiparameter_module_approximation/vector_matrix.h +331 -0
- multipers/multiparameter_module_approximation/vineyards.h +464 -0
- multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -0
- multipers/multiparameter_module_approximation.cpython-312-darwin.so +0 -0
- multipers/multiparameter_module_approximation.pyx +235 -0
- multipers/pickle.py +90 -0
- multipers/plots.py +456 -0
- multipers/point_measure.cpython-312-darwin.so +0 -0
- multipers/point_measure.pyx +395 -0
- multipers/simplex_tree_multi.cpython-312-darwin.so +0 -0
- multipers/simplex_tree_multi.pxd +134 -0
- multipers/simplex_tree_multi.pyx +10840 -0
- multipers/simplex_tree_multi.pyx.tp +2009 -0
- multipers/slicer.cpython-312-darwin.so +0 -0
- multipers/slicer.pxd +3034 -0
- multipers/slicer.pxd.tp +234 -0
- multipers/slicer.pyx +20481 -0
- multipers/slicer.pyx.tp +1088 -0
- multipers/tensor/tensor.h +672 -0
- multipers/tensor.pxd +13 -0
- multipers/test.pyx +44 -0
- multipers/tests/__init__.py +62 -0
- multipers/torch/__init__.py +1 -0
- multipers/torch/diff_grids.py +240 -0
- multipers/torch/rips_density.py +310 -0
- multipers-2.3.3b6.dist-info/METADATA +128 -0
- multipers-2.3.3b6.dist-info/RECORD +183 -0
- multipers-2.3.3b6.dist-info/WHEEL +6 -0
- multipers-2.3.3b6.dist-info/licenses/LICENSE +21 -0
- multipers-2.3.3b6.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,173 @@
|
|
|
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): Clément Maria
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2014 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef PERSISTENT_COHOMOLOGY_MULTI_FIELD_H_
|
|
12
|
+
#define PERSISTENT_COHOMOLOGY_MULTI_FIELD_H_
|
|
13
|
+
|
|
14
|
+
#include <gmpxx.h>
|
|
15
|
+
|
|
16
|
+
#include <vector>
|
|
17
|
+
#include <utility>
|
|
18
|
+
|
|
19
|
+
namespace Gudhi {
|
|
20
|
+
|
|
21
|
+
namespace persistent_cohomology {
|
|
22
|
+
|
|
23
|
+
/** \brief Structure representing coefficients in a set of finite fields simultaneously
|
|
24
|
+
* using the chinese remainder theorem.
|
|
25
|
+
*
|
|
26
|
+
* \implements CoefficientField
|
|
27
|
+
* \ingroup persistent_cohomology
|
|
28
|
+
|
|
29
|
+
* Details on the algorithms may be found in \cite boissonnat:hal-00922572
|
|
30
|
+
*/
|
|
31
|
+
class Multi_field {
|
|
32
|
+
public:
|
|
33
|
+
typedef mpz_class Element;
|
|
34
|
+
|
|
35
|
+
Multi_field()
|
|
36
|
+
: prod_characteristics_(0),
|
|
37
|
+
mult_id_all(0),
|
|
38
|
+
add_id_all(0) {
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Initialize the multi-field. The generation of prime numbers might fail with
|
|
42
|
+
* a very small probability.*/
|
|
43
|
+
void init(int min_prime, int max_prime) {
|
|
44
|
+
if (max_prime < 2) {
|
|
45
|
+
std::cerr << "There is no prime less than " << max_prime << std::endl;
|
|
46
|
+
}
|
|
47
|
+
if (min_prime > max_prime) {
|
|
48
|
+
std::cerr << "No prime in [" << min_prime << ":" << max_prime << "]"
|
|
49
|
+
<< std::endl;
|
|
50
|
+
}
|
|
51
|
+
// fill the list of prime numbers
|
|
52
|
+
int curr_prime = min_prime;
|
|
53
|
+
mpz_t tmp_prime;
|
|
54
|
+
mpz_init_set_ui(tmp_prime, min_prime);
|
|
55
|
+
// test if min_prime is prime
|
|
56
|
+
int is_prime = mpz_probab_prime_p(tmp_prime, 25); // probabilistic primality test
|
|
57
|
+
|
|
58
|
+
if (is_prime == 0) { // min_prime is composite
|
|
59
|
+
mpz_nextprime(tmp_prime, tmp_prime);
|
|
60
|
+
curr_prime = mpz_get_ui(tmp_prime);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
while (curr_prime <= max_prime) {
|
|
64
|
+
primes_.push_back(curr_prime);
|
|
65
|
+
mpz_nextprime(tmp_prime, tmp_prime);
|
|
66
|
+
curr_prime = mpz_get_ui(tmp_prime);
|
|
67
|
+
}
|
|
68
|
+
mpz_clear(tmp_prime);
|
|
69
|
+
// set m to primorial(bound_prime)
|
|
70
|
+
prod_characteristics_ = 1;
|
|
71
|
+
for (auto p : primes_) {
|
|
72
|
+
prod_characteristics_ *= p;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Uvect_
|
|
76
|
+
Element Ui;
|
|
77
|
+
Element tmp_elem;
|
|
78
|
+
for (auto p : primes_) {
|
|
79
|
+
assert(p > 0); // division by zero + non negative values
|
|
80
|
+
tmp_elem = prod_characteristics_ / p;
|
|
81
|
+
// Element tmp_elem_bis = 10;
|
|
82
|
+
mpz_powm_ui(tmp_elem.get_mpz_t(), tmp_elem.get_mpz_t(), p - 1,
|
|
83
|
+
prod_characteristics_.get_mpz_t());
|
|
84
|
+
Uvect_.push_back(tmp_elem);
|
|
85
|
+
}
|
|
86
|
+
mult_id_all = 0;
|
|
87
|
+
for (auto uvect : Uvect_) {
|
|
88
|
+
assert(prod_characteristics_ > 0); // division by zero + non negative values
|
|
89
|
+
mult_id_all = (mult_id_all + uvect) % prod_characteristics_;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** \brief Returns the additive idendity \f$0_{\Bbbk}\f$ of the field.*/
|
|
94
|
+
const Element& additive_identity() const {
|
|
95
|
+
return add_id_all;
|
|
96
|
+
}
|
|
97
|
+
/** \brief Returns the multiplicative identity \f$1_{\Bbbk}\f$ of the field.*/
|
|
98
|
+
const Element& multiplicative_identity() const {
|
|
99
|
+
return mult_id_all;
|
|
100
|
+
} // 1 everywhere
|
|
101
|
+
|
|
102
|
+
Element multiplicative_identity(Element Q) {
|
|
103
|
+
if (Q == prod_characteristics_) {
|
|
104
|
+
return multiplicative_identity();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
assert(prod_characteristics_ > 0); // division by zero + non negative values
|
|
108
|
+
Element mult_id = 0;
|
|
109
|
+
for (unsigned int idx = 0; idx < primes_.size(); ++idx) {
|
|
110
|
+
assert(primes_[idx] > 0); // division by zero + non negative values
|
|
111
|
+
if ((Q % primes_[idx]) == 0) {
|
|
112
|
+
mult_id = (mult_id + Uvect_[idx]) % prod_characteristics_;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return mult_id;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Returns y * w */
|
|
119
|
+
Element times(const Element& y, const Element& w) {
|
|
120
|
+
return plus_times_equal(0, y, w);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
Element plus_equal(const Element& x, const Element& y) {
|
|
124
|
+
return plus_times_equal(x, y, (Element)1);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** \brief Returns the characteristic \f$p\f$ of the field.*/
|
|
128
|
+
const Element& characteristic() const {
|
|
129
|
+
return prod_characteristics_;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Returns the inverse in the field. Modifies P. ??? */
|
|
133
|
+
std::pair<Element, Element> inverse(Element x, Element QS) {
|
|
134
|
+
Element QR;
|
|
135
|
+
mpz_gcd(QR.get_mpz_t(), x.get_mpz_t(), QS.get_mpz_t()); // QR <- gcd(x,QS)
|
|
136
|
+
if (QR == QS)
|
|
137
|
+
return std::pair<Element, Element>(additive_identity(), multiplicative_identity()); // partial inverse is 0
|
|
138
|
+
Element QT = QS / QR;
|
|
139
|
+
Element inv_qt;
|
|
140
|
+
mpz_invert(inv_qt.get_mpz_t(), x.get_mpz_t(), QT.get_mpz_t());
|
|
141
|
+
|
|
142
|
+
assert(prod_characteristics_ > 0); // division by zero + non negative values
|
|
143
|
+
return { (inv_qt * multiplicative_identity(QT)) % prod_characteristics_, QT };
|
|
144
|
+
}
|
|
145
|
+
/** Returns -x * y.*/
|
|
146
|
+
Element times_minus(const Element& x, const Element& y) {
|
|
147
|
+
assert(prod_characteristics_ > 0); // division by zero + non negative values
|
|
148
|
+
/* This assumes that (x*y)%pc cannot be zero, but Field_Zp has specific code for the 0 case ??? */
|
|
149
|
+
return prod_characteristics_ - ((x * y) % prod_characteristics_);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Set x <- x + w * y*/
|
|
153
|
+
Element plus_times_equal(const Element& x, const Element& y, const Element& w) {
|
|
154
|
+
assert(prod_characteristics_ > 0); // division by zero + non negative values
|
|
155
|
+
Element result = (x + w * y) % prod_characteristics_;
|
|
156
|
+
if (result < 0)
|
|
157
|
+
result += prod_characteristics_;
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
Element prod_characteristics_; // product of characteristics of the fields
|
|
162
|
+
// represented by the multi-field class
|
|
163
|
+
std::vector<int> primes_; // all the characteristics of the fields
|
|
164
|
+
std::vector<Element> Uvect_;
|
|
165
|
+
Element mult_id_all;
|
|
166
|
+
const Element add_id_all;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
} // namespace persistent_cohomology
|
|
170
|
+
|
|
171
|
+
} // namespace Gudhi
|
|
172
|
+
|
|
173
|
+
#endif // PERSISTENT_COHOMOLOGY_MULTI_FIELD_H_
|
|
@@ -0,0 +1,128 @@
|
|
|
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): Clément Maria
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2014 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef PERSISTENT_COHOMOLOGY_PERSISTENT_COHOMOLOGY_COLUMN_H_
|
|
12
|
+
#define PERSISTENT_COHOMOLOGY_PERSISTENT_COHOMOLOGY_COLUMN_H_
|
|
13
|
+
|
|
14
|
+
#include <boost/intrusive/set.hpp>
|
|
15
|
+
#include <boost/intrusive/list.hpp>
|
|
16
|
+
|
|
17
|
+
#include <list>
|
|
18
|
+
|
|
19
|
+
namespace Gudhi {
|
|
20
|
+
|
|
21
|
+
namespace persistent_cohomology {
|
|
22
|
+
|
|
23
|
+
template<typename SimplexKey, typename ArithmeticElement>
|
|
24
|
+
class Persistent_cohomology_column;
|
|
25
|
+
|
|
26
|
+
struct cam_h_tag;
|
|
27
|
+
// for horizontal traversal in the CAM
|
|
28
|
+
struct cam_v_tag;
|
|
29
|
+
// for vertical traversal in the CAM
|
|
30
|
+
|
|
31
|
+
typedef boost::intrusive::list_base_hook<boost::intrusive::tag<cam_h_tag>,
|
|
32
|
+
boost::intrusive::link_mode<boost::intrusive::auto_unlink> // allows .unlink()
|
|
33
|
+
> base_hook_cam_h;
|
|
34
|
+
|
|
35
|
+
typedef boost::intrusive::list_base_hook<boost::intrusive::tag<cam_v_tag>,
|
|
36
|
+
boost::intrusive::link_mode<boost::intrusive::normal_link> // faster hook, less safe
|
|
37
|
+
> base_hook_cam_v;
|
|
38
|
+
|
|
39
|
+
/** \internal
|
|
40
|
+
* \brief
|
|
41
|
+
*
|
|
42
|
+
*/
|
|
43
|
+
template<typename SimplexKey, typename ArithmeticElement>
|
|
44
|
+
class Persistent_cohomology_cell : public base_hook_cam_h,
|
|
45
|
+
public base_hook_cam_v {
|
|
46
|
+
public:
|
|
47
|
+
template<class T1, class T2> friend class Persistent_cohomology;
|
|
48
|
+
friend class Persistent_cohomology_column<SimplexKey, ArithmeticElement>;
|
|
49
|
+
|
|
50
|
+
typedef Persistent_cohomology_column<SimplexKey, ArithmeticElement> Column;
|
|
51
|
+
|
|
52
|
+
Persistent_cohomology_cell(SimplexKey key, ArithmeticElement x,
|
|
53
|
+
Column * self_col)
|
|
54
|
+
: key_(key),
|
|
55
|
+
coefficient_(x),
|
|
56
|
+
self_col_(self_col) {
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
SimplexKey key_;
|
|
60
|
+
ArithmeticElement coefficient_;
|
|
61
|
+
Column * self_col_;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* \brief Sparse column for the Compressed Annotation Matrix.
|
|
66
|
+
*
|
|
67
|
+
* The non-zero coefficients of the column are stored in a
|
|
68
|
+
* boost::intrusive::list. Contains a hook to be stored in a
|
|
69
|
+
* boost::intrusive::set.
|
|
70
|
+
*
|
|
71
|
+
* Movable but not Copyable.
|
|
72
|
+
*/
|
|
73
|
+
template<typename SimplexKey, typename ArithmeticElement>
|
|
74
|
+
class Persistent_cohomology_column : public boost::intrusive::set_base_hook<
|
|
75
|
+
boost::intrusive::link_mode<boost::intrusive::normal_link> > {
|
|
76
|
+
template<class T1, class T2> friend class Persistent_cohomology;
|
|
77
|
+
|
|
78
|
+
public:
|
|
79
|
+
typedef Persistent_cohomology_cell<SimplexKey, ArithmeticElement> Cell;
|
|
80
|
+
typedef boost::intrusive::list<Cell,
|
|
81
|
+
boost::intrusive::constant_time_size<false>,
|
|
82
|
+
boost::intrusive::base_hook<base_hook_cam_v> > Col_type;
|
|
83
|
+
|
|
84
|
+
/** \brief Creates an empty column.*/
|
|
85
|
+
explicit Persistent_cohomology_column(SimplexKey key)
|
|
86
|
+
: col_(),
|
|
87
|
+
class_key_(key) {}
|
|
88
|
+
|
|
89
|
+
/** \brief Returns true iff the column is null.*/
|
|
90
|
+
bool is_null() const {
|
|
91
|
+
return col_.empty();
|
|
92
|
+
}
|
|
93
|
+
/** \brief Returns the key of the representative simplex of
|
|
94
|
+
* the set of simplices having this column as annotation vector
|
|
95
|
+
* in the compressed annotation matrix.*/
|
|
96
|
+
SimplexKey class_key() const {
|
|
97
|
+
return class_key_;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** \brief Lexicographic comparison of two columns.*/
|
|
101
|
+
friend bool operator<(const Persistent_cohomology_column& c1,
|
|
102
|
+
const Persistent_cohomology_column& c2) {
|
|
103
|
+
typename Col_type::const_iterator it1 = c1.col_.begin();
|
|
104
|
+
typename Col_type::const_iterator it2 = c2.col_.begin();
|
|
105
|
+
while (it1 != c1.col_.end() && it2 != c2.col_.end()) {
|
|
106
|
+
if (it1->key_ == it2->key_) {
|
|
107
|
+
if (it1->coefficient_ == it2->coefficient_) {
|
|
108
|
+
++it1;
|
|
109
|
+
++it2;
|
|
110
|
+
} else {
|
|
111
|
+
return it1->coefficient_ < it2->coefficient_;
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
return it1->key_ < it2->key_;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return (it2 != c2.col_.end());
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
Col_type col_;
|
|
121
|
+
SimplexKey class_key_;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
} // namespace persistent_cohomology
|
|
125
|
+
|
|
126
|
+
} // namespace Gudhi
|
|
127
|
+
|
|
128
|
+
#endif // PERSISTENT_COHOMOLOGY_PERSISTENT_COHOMOLOGY_COLUMN_H_
|