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.

Files changed (183) hide show
  1. multipers/.dylibs/libc++.1.0.dylib +0 -0
  2. multipers/.dylibs/libtbb.12.16.dylib +0 -0
  3. multipers/__init__.py +33 -0
  4. multipers/_signed_measure_meta.py +453 -0
  5. multipers/_slicer_meta.py +211 -0
  6. multipers/array_api/__init__.py +45 -0
  7. multipers/array_api/numpy.py +41 -0
  8. multipers/array_api/torch.py +58 -0
  9. multipers/data/MOL2.py +458 -0
  10. multipers/data/UCR.py +18 -0
  11. multipers/data/__init__.py +1 -0
  12. multipers/data/graphs.py +466 -0
  13. multipers/data/immuno_regions.py +27 -0
  14. multipers/data/minimal_presentation_to_st_bf.py +0 -0
  15. multipers/data/pytorch2simplextree.py +91 -0
  16. multipers/data/shape3d.py +101 -0
  17. multipers/data/synthetic.py +113 -0
  18. multipers/distances.py +202 -0
  19. multipers/filtration_conversions.pxd +229 -0
  20. multipers/filtration_conversions.pxd.tp +84 -0
  21. multipers/filtrations/__init__.py +18 -0
  22. multipers/filtrations/density.py +574 -0
  23. multipers/filtrations/filtrations.py +361 -0
  24. multipers/filtrations.pxd +224 -0
  25. multipers/function_rips.cpython-312-darwin.so +0 -0
  26. multipers/function_rips.pyx +105 -0
  27. multipers/grids.cpython-312-darwin.so +0 -0
  28. multipers/grids.pyx +433 -0
  29. multipers/gudhi/Persistence_slices_interface.h +132 -0
  30. multipers/gudhi/Simplex_tree_interface.h +239 -0
  31. multipers/gudhi/Simplex_tree_multi_interface.h +551 -0
  32. multipers/gudhi/cubical_to_boundary.h +59 -0
  33. multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -0
  34. multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -0
  35. multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -0
  36. multipers/gudhi/gudhi/Debug_utils.h +45 -0
  37. multipers/gudhi/gudhi/Fields/Multi_field.h +484 -0
  38. multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -0
  39. multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -0
  40. multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -0
  41. multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -0
  42. multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -0
  43. multipers/gudhi/gudhi/Fields/Z2_field.h +355 -0
  44. multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -0
  45. multipers/gudhi/gudhi/Fields/Zp_field.h +420 -0
  46. multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -0
  47. multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -0
  48. multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -0
  49. multipers/gudhi/gudhi/Matrix.h +2107 -0
  50. multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -0
  51. multipers/gudhi/gudhi/Multi_persistence/Box.h +174 -0
  52. multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -0
  53. multipers/gudhi/gudhi/Off_reader.h +173 -0
  54. multipers/gudhi/gudhi/One_critical_filtration.h +1441 -0
  55. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -0
  56. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -0
  57. multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -0
  58. multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -0
  59. multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -0
  60. multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -0
  61. multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -0
  62. multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -0
  63. multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -0
  64. multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -0
  65. multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -0
  66. multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -0
  67. multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -0
  68. multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -0
  69. multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -0
  70. multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -0
  71. multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -0
  72. multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -0
  73. multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -0
  74. multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -0
  75. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -0
  76. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -0
  77. multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -0
  78. multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -0
  79. multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -0
  80. multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -0
  81. multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -0
  82. multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -0
  83. multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -0
  84. multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -0
  85. multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -0
  86. multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -0
  87. multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -0
  88. multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -0
  89. multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -0
  90. multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -0
  91. multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -0
  92. multipers/gudhi/gudhi/Persistent_cohomology.h +745 -0
  93. multipers/gudhi/gudhi/Points_off_io.h +171 -0
  94. multipers/gudhi/gudhi/Simple_object_pool.h +69 -0
  95. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -0
  96. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -0
  97. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -0
  98. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -0
  99. multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -0
  100. multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -0
  101. multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -0
  102. multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -0
  103. multipers/gudhi/gudhi/Simplex_tree.h +2794 -0
  104. multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -0
  105. multipers/gudhi/gudhi/distance_functions.h +62 -0
  106. multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -0
  107. multipers/gudhi/gudhi/persistence_interval.h +253 -0
  108. multipers/gudhi/gudhi/persistence_matrix_options.h +170 -0
  109. multipers/gudhi/gudhi/reader_utils.h +367 -0
  110. multipers/gudhi/mma_interface_coh.h +256 -0
  111. multipers/gudhi/mma_interface_h0.h +223 -0
  112. multipers/gudhi/mma_interface_matrix.h +293 -0
  113. multipers/gudhi/naive_merge_tree.h +536 -0
  114. multipers/gudhi/scc_io.h +310 -0
  115. multipers/gudhi/truc.h +1403 -0
  116. multipers/io.cpython-312-darwin.so +0 -0
  117. multipers/io.pyx +644 -0
  118. multipers/ml/__init__.py +0 -0
  119. multipers/ml/accuracies.py +90 -0
  120. multipers/ml/invariants_with_persistable.py +79 -0
  121. multipers/ml/kernels.py +176 -0
  122. multipers/ml/mma.py +713 -0
  123. multipers/ml/one.py +472 -0
  124. multipers/ml/point_clouds.py +352 -0
  125. multipers/ml/signed_measures.py +1589 -0
  126. multipers/ml/sliced_wasserstein.py +461 -0
  127. multipers/ml/tools.py +113 -0
  128. multipers/mma_structures.cpython-312-darwin.so +0 -0
  129. multipers/mma_structures.pxd +128 -0
  130. multipers/mma_structures.pyx +2786 -0
  131. multipers/mma_structures.pyx.tp +1094 -0
  132. multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -0
  133. multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -0
  134. multipers/multi_parameter_rank_invariant/function_rips.h +322 -0
  135. multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -0
  136. multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -0
  137. multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -0
  138. multipers/multiparameter_edge_collapse.py +41 -0
  139. multipers/multiparameter_module_approximation/approximation.h +2330 -0
  140. multipers/multiparameter_module_approximation/combinatory.h +129 -0
  141. multipers/multiparameter_module_approximation/debug.h +107 -0
  142. multipers/multiparameter_module_approximation/euler_curves.h +0 -0
  143. multipers/multiparameter_module_approximation/format_python-cpp.h +286 -0
  144. multipers/multiparameter_module_approximation/heap_column.h +238 -0
  145. multipers/multiparameter_module_approximation/images.h +79 -0
  146. multipers/multiparameter_module_approximation/list_column.h +174 -0
  147. multipers/multiparameter_module_approximation/list_column_2.h +232 -0
  148. multipers/multiparameter_module_approximation/ru_matrix.h +347 -0
  149. multipers/multiparameter_module_approximation/set_column.h +135 -0
  150. multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -0
  151. multipers/multiparameter_module_approximation/unordered_set_column.h +166 -0
  152. multipers/multiparameter_module_approximation/utilities.h +403 -0
  153. multipers/multiparameter_module_approximation/vector_column.h +223 -0
  154. multipers/multiparameter_module_approximation/vector_matrix.h +331 -0
  155. multipers/multiparameter_module_approximation/vineyards.h +464 -0
  156. multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -0
  157. multipers/multiparameter_module_approximation.cpython-312-darwin.so +0 -0
  158. multipers/multiparameter_module_approximation.pyx +235 -0
  159. multipers/pickle.py +90 -0
  160. multipers/plots.py +456 -0
  161. multipers/point_measure.cpython-312-darwin.so +0 -0
  162. multipers/point_measure.pyx +395 -0
  163. multipers/simplex_tree_multi.cpython-312-darwin.so +0 -0
  164. multipers/simplex_tree_multi.pxd +134 -0
  165. multipers/simplex_tree_multi.pyx +10840 -0
  166. multipers/simplex_tree_multi.pyx.tp +2009 -0
  167. multipers/slicer.cpython-312-darwin.so +0 -0
  168. multipers/slicer.pxd +3034 -0
  169. multipers/slicer.pxd.tp +234 -0
  170. multipers/slicer.pyx +20481 -0
  171. multipers/slicer.pyx.tp +1088 -0
  172. multipers/tensor/tensor.h +672 -0
  173. multipers/tensor.pxd +13 -0
  174. multipers/test.pyx +44 -0
  175. multipers/tests/__init__.py +62 -0
  176. multipers/torch/__init__.py +1 -0
  177. multipers/torch/diff_grids.py +240 -0
  178. multipers/torch/rips_density.py +310 -0
  179. multipers-2.3.3b6.dist-info/METADATA +128 -0
  180. multipers-2.3.3b6.dist-info/RECORD +183 -0
  181. multipers-2.3.3b6.dist-info/WHEEL +6 -0
  182. multipers-2.3.3b6.dist-info/licenses/LICENSE +21 -0
  183. 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_