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,331 @@
1
+ /* This file is part of the MMA Library - https://gitlab.inria.fr/dloiseau/multipers - which is released under MIT.
2
+ * See file LICENSE for full license details.
3
+ * Author(s): Hannah Schreiber
4
+ *
5
+ * Copyright (C) 2022 Inria
6
+ *
7
+ * Modification(s):
8
+ * - YYYY/MM Author: Description of the modification
9
+ */
10
+
11
+ #ifndef VECTOR_MATRIX_H
12
+ #define VECTOR_MATRIX_H
13
+
14
+ #include <utility>
15
+ #include <vector>
16
+ #include <unordered_map>
17
+ #include <iostream>
18
+ #include <algorithm>
19
+
20
+ #include "utilities.h" //type definitions
21
+
22
+ namespace Gudhi::multiparameter::mma {
23
+
24
+ template<class Column_type>
25
+ class Vector_matrix
26
+ {
27
+ public:
28
+ Vector_matrix();
29
+ Vector_matrix(std::vector<boundary_type>& orderedBoundaries);
30
+ Vector_matrix(unsigned int numberOfColumns);
31
+ Vector_matrix(Vector_matrix<Column_type>& matrixToCopy);
32
+ Vector_matrix(Vector_matrix&& other) noexcept;
33
+
34
+ void insert_boundary(index columnIndex, boundary_type& boundary);
35
+ void get_boundary(index columnIndex, boundary_type& container);
36
+ void insert_column(index columnIndex, Column_type column);
37
+ Column_type& get_column(index columnIndex);
38
+
39
+ void reduce(barcode_type& barcode);
40
+
41
+ index get_last_index() const;
42
+ dimension_type get_max_dim() const;
43
+ unsigned int get_number_of_columns() const;
44
+
45
+ void swap_columns(index columnIndex1, index columnIndex2);
46
+ void swap_rows(index rowIndex1, index rowIndex2);
47
+ void swap_at_indices(index index1, index index2);
48
+
49
+ void zero_cell(index columnIndex, index rowIndex);
50
+ void zero_column(index columnIndex);
51
+
52
+ void add_to(index sourceColumnIndex, index targetColumnIndex);
53
+ bool is_zero_cell(index columnIndex, index rowIndex) const;
54
+ bool is_zero_column(index columnIndex);
55
+
56
+ dimension_type get_column_dimension(index columnIndex) const;
57
+
58
+ Vector_matrix<Column_type>& operator=(Vector_matrix<Column_type> other);
59
+ template<class Friend_column_type>
60
+ friend void swap(Vector_matrix<Friend_column_type>& matrix1,
61
+ Vector_matrix<Friend_column_type>& matrix2);
62
+
63
+ private:
64
+ std::vector<Column_type> matrix_;
65
+ dimension_type maxDim_;
66
+ std::vector<unsigned int> indexToRow_;
67
+ std::vector<index> rowToIndex_;
68
+ bool rowSwapped_;
69
+
70
+ void _clear_column(index columnIndex);
71
+ void _orderRows();
72
+ };
73
+
74
+ template<class Column_type>
75
+ inline Vector_matrix<Column_type>::Vector_matrix() : maxDim_(0), rowSwapped_(false)
76
+ {}
77
+
78
+ template<class Column_type>
79
+ inline Vector_matrix<Column_type>::Vector_matrix(
80
+ std::vector<boundary_type>& orderedBoundaries) : maxDim_(0), rowSwapped_(false)
81
+ {
82
+ matrix_.resize(orderedBoundaries.size());
83
+ indexToRow_.resize(orderedBoundaries.size());
84
+ rowToIndex_.resize(orderedBoundaries.size());
85
+ for (unsigned int i = 0; i < orderedBoundaries.size(); i++){
86
+ boundary_type& b = orderedBoundaries.at(i);
87
+ matrix_.at(i) = Column_type(b);
88
+ if (maxDim_ < static_cast<int>(b.size()) - 1) maxDim_ = b.size() - 1;
89
+ indexToRow_.at(i) = i;
90
+ rowToIndex_.at(i) = i;
91
+ }
92
+ if (maxDim_ == -1) maxDim_ = 0;
93
+ }
94
+
95
+ template<class Column_type>
96
+ inline Vector_matrix<Column_type>::Vector_matrix(unsigned int numberOfColumns)
97
+ : maxDim_(0), rowSwapped_(false)
98
+ {
99
+ matrix_.resize(numberOfColumns);
100
+ indexToRow_.resize(numberOfColumns);
101
+ rowToIndex_.resize(numberOfColumns);
102
+ for (unsigned int i = 0; i < numberOfColumns; i++){
103
+ indexToRow_.at(i) = i;
104
+ rowToIndex_.at(i) = i;
105
+ }
106
+ }
107
+
108
+ template<class Column_type>
109
+ inline Vector_matrix<Column_type>::Vector_matrix(
110
+ Vector_matrix<Column_type>& matrixToCopy) : maxDim_(0), rowSwapped_(false)
111
+ {
112
+ matrix_.resize(matrixToCopy.get_number_of_columns());
113
+ indexToRow_.resize(matrix_.size());
114
+ rowToIndex_.resize(matrix_.size());
115
+ for (unsigned int i = 0; i < matrix_.size(); i++){
116
+ matrix_.at(i) = Column_type(matrixToCopy.get_column(i));
117
+ indexToRow_.at(i) = i;
118
+ rowToIndex_.at(i) = i;
119
+ }
120
+ maxDim_ = matrixToCopy.get_max_dim();
121
+ }
122
+
123
+ template<class Column_type>
124
+ inline Vector_matrix<Column_type>::Vector_matrix(Vector_matrix<Column_type> &&other) noexcept
125
+ : matrix_(std::move(other.matrix_)),
126
+ maxDim_(std::exchange(other.maxDim_, 0)),
127
+ indexToRow_(std::move(other.indexToRow_)),
128
+ rowToIndex_(std::move(other.rowToIndex_)),
129
+ rowSwapped_(std::exchange(other.rowSwapped_, 0))
130
+ {}
131
+
132
+ template<class Column_type>
133
+ inline void Vector_matrix<Column_type>::insert_boundary(
134
+ index columnIndex, boundary_type& boundary)
135
+ {
136
+ if (rowSwapped_) _orderRows();
137
+
138
+ if (matrix_.size() <= columnIndex) {
139
+ for (int i = matrix_.size(); i <= columnIndex; i++){
140
+ indexToRow_.push_back(i);
141
+ rowToIndex_.push_back(i);
142
+ }
143
+ matrix_.resize(columnIndex + 1);
144
+ }
145
+ matrix_.at(columnIndex) = Column_type(boundary);
146
+ if (maxDim_ < boundary.size() - 1) maxDim_ = boundary.size() - 1;
147
+ }
148
+
149
+ template<class Column_type>
150
+ inline void Vector_matrix<Column_type>::get_boundary(
151
+ index columnIndex, boundary_type& container)
152
+ {
153
+ matrix_.at(columnIndex).get_content(container);
154
+ for (unsigned int& v : container) v = rowToIndex_.at(v);
155
+ std::sort(container.begin(), container.end());
156
+ }
157
+
158
+ template<class Column_type>
159
+ inline void Vector_matrix<Column_type>::insert_column(
160
+ index columnIndex, Column_type column)
161
+ {
162
+ if (rowSwapped_) _orderRows();
163
+
164
+ dimension_type dim = column.get_dimension();
165
+ if (matrix_.size() <= columnIndex) {
166
+ for (unsigned int i = matrix_.size(); i <= columnIndex; i++){
167
+ indexToRow_.push_back(i);
168
+ rowToIndex_.push_back(i);
169
+ }
170
+ matrix_.resize(columnIndex + 1);
171
+ }
172
+ std::swap(matrix_.at(columnIndex), column);
173
+ if (maxDim_ < dim) maxDim_ = dim;
174
+ }
175
+
176
+ template<class Column_type>
177
+ inline Column_type& Vector_matrix<Column_type>::get_column(index columnIndex)
178
+ {
179
+ if (rowSwapped_) _orderRows();
180
+ return matrix_.at(columnIndex);
181
+ }
182
+
183
+ template<class Column_type>
184
+ inline void Vector_matrix<Column_type>::reduce(barcode_type& barcode)
185
+ {
186
+ if (rowSwapped_) _orderRows();
187
+ std::unordered_map<index, index> pivotsToColumn;
188
+
189
+ for (int d = maxDim_; d > 0; d--){
190
+ for (unsigned int i = 0; i < matrix_.size(); i++){
191
+ if (!(matrix_.at(i).is_empty()) && matrix_.at(i).get_dimension() == d)
192
+ {
193
+ Column_type &curr = matrix_.at(i);
194
+ int pivot = curr.get_pivot();
195
+
196
+ while (pivot != -1 && pivotsToColumn.find(pivot) != pivotsToColumn.end()){
197
+ curr.add(matrix_.at(pivotsToColumn.at(pivot)));
198
+ pivot = curr.get_pivot();
199
+ }
200
+
201
+ if (pivot != -1){
202
+ pivotsToColumn.emplace(pivot, i);
203
+ _clear_column(pivot);
204
+ barcode.push_back(Bar(d - 1, pivot, i));
205
+ } else {
206
+ _clear_column(i);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+
213
+ template<class Column_type>
214
+ inline index Vector_matrix<Column_type>::get_last_index() const
215
+ {
216
+ return matrix_.size() - 1;
217
+ }
218
+
219
+ template<class Column_type>
220
+ inline dimension_type Vector_matrix<Column_type>::get_max_dim() const
221
+ {
222
+ return maxDim_;
223
+ }
224
+
225
+ template<class Column_type>
226
+ inline unsigned int Vector_matrix<Column_type>::get_number_of_columns() const
227
+ {
228
+ return matrix_.size();
229
+ }
230
+
231
+ template<class Column_type>
232
+ inline void Vector_matrix<Column_type>::swap_columns(index columnIndex1, index columnIndex2)
233
+ {
234
+ std::swap(matrix_.at(columnIndex1), matrix_.at(columnIndex2));
235
+ }
236
+
237
+ template<class Column_type>
238
+ inline void Vector_matrix<Column_type>::swap_rows(index rowIndex1, index rowIndex2)
239
+ {
240
+ rowSwapped_ = true;
241
+ std::swap(rowToIndex_.at(indexToRow_.at(rowIndex1)), rowToIndex_.at(indexToRow_.at(rowIndex2)));
242
+ std::swap(indexToRow_.at(rowIndex1), indexToRow_.at(rowIndex2));
243
+ }
244
+
245
+ template<class Column_type>
246
+ inline void Vector_matrix<Column_type>::swap_at_indices(index index1, index index2)
247
+ {
248
+ swap_columns(index1, index2);
249
+ swap_rows(index1, index2);
250
+ }
251
+
252
+ template<class Column_type>
253
+ inline void Vector_matrix<Column_type>::zero_cell(index columnIndex, index rowIndex)
254
+ {
255
+ matrix_.at(columnIndex).clear(indexToRow_.at(rowIndex));
256
+ }
257
+
258
+ template<class Column_type>
259
+ inline void Vector_matrix<Column_type>::zero_column(index columnIndex)
260
+ {
261
+ _clear_column(columnIndex);
262
+ }
263
+
264
+ template<class Column_type>
265
+ inline void Vector_matrix<Column_type>::add_to(index sourceColumnIndex, index targetColumnIndex)
266
+ {
267
+ matrix_.at(targetColumnIndex).add(matrix_.at(sourceColumnIndex));
268
+ }
269
+
270
+ template<class Column_type>
271
+ inline bool Vector_matrix<Column_type>::is_zero_cell(index columnIndex, index rowIndex) const
272
+ {
273
+ return !(matrix_.at(columnIndex).contains(indexToRow_.at(rowIndex)));
274
+ }
275
+
276
+ template<class Column_type>
277
+ inline bool Vector_matrix<Column_type>::is_zero_column(index columnIndex)
278
+ {
279
+ return matrix_.at(columnIndex).is_empty();
280
+ }
281
+
282
+ template<class Column_type>
283
+ inline dimension_type Vector_matrix<Column_type>::get_column_dimension(index columnIndex) const
284
+ {
285
+ return matrix_.at(columnIndex).get_dimension();
286
+ }
287
+
288
+ template<class Column_type>
289
+ inline Vector_matrix<Column_type> &Vector_matrix<Column_type>::operator=(
290
+ Vector_matrix<Column_type> other)
291
+ {
292
+ std::swap(matrix_, other.matrix_);
293
+ std::swap(maxDim_, other.maxDim_);
294
+ std::swap(indexToRow_, other.indexToRow_);
295
+ std::swap(rowToIndex_, other.rowToIndex_);
296
+ std::swap(rowSwapped_, other.rowSwapped_);
297
+ return *this;
298
+ }
299
+
300
+ template<class Column_type>
301
+ inline void Vector_matrix<Column_type>::_clear_column(index columnIndex)
302
+ {
303
+ matrix_.at(columnIndex).clear();
304
+ }
305
+
306
+ template<class Column_type>
307
+ inline void Vector_matrix<Column_type>::_orderRows()
308
+ {
309
+ for (unsigned int i = 0; i < matrix_.size(); i++){
310
+ matrix_.at(i).reorder(rowToIndex_);
311
+ }
312
+ for (unsigned int i = 0; i < matrix_.size(); i++){
313
+ indexToRow_.at(i) = i;
314
+ rowToIndex_.at(i) = i;
315
+ }
316
+ rowSwapped_ = false;
317
+ }
318
+
319
+ template<class Column_type>
320
+ inline void swap(Vector_matrix<Column_type>& matrix1, Vector_matrix<Column_type>& matrix2)
321
+ {
322
+ std::swap(matrix1.matrix_, matrix2.matrix_);
323
+ std::swap(matrix1.maxDim_, matrix2.maxDim_);
324
+ std::swap(matrix1.indexToRow_, matrix2.indexToRow_);
325
+ std::swap(matrix1.rowToIndex_, matrix2.rowToIndex_);
326
+ std::swap(matrix1.rowSwapped_, matrix2.rowSwapped_);
327
+ }
328
+
329
+ } //namespace Vineyard
330
+
331
+ #endif // VECTOR_MATRIX_H