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,129 +1,129 @@
|
|
|
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): David Loiseaux
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2021 Inria
|
|
6
|
-
*
|
|
7
|
-
* Modification(s):
|
|
8
|
-
* - 2022/03 Hannah Schreiber: Integration of the new Vineyard_persistence class, renaming and cleanup.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* @file combinatory.h
|
|
12
|
-
* @author David Loiseaux, Hannah Schreiber
|
|
13
|
-
* @brief Combinatorial and sorting functions
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
#ifndef COMBINATORY_H_INCLUDED
|
|
17
|
-
#define COMBINATORY_H_INCLUDED
|
|
18
|
-
|
|
19
|
-
#include <vector>
|
|
20
|
-
#include <iostream>
|
|
21
|
-
#include <functional>
|
|
22
|
-
#include <algorithm>
|
|
23
|
-
#include <climits>
|
|
24
|
-
#include <assert.h>
|
|
25
|
-
#include "utilities.h"
|
|
26
|
-
#include "debug.h"
|
|
27
|
-
|
|
28
|
-
namespace Gudhi::multiparameter::mma::Combinatorics {
|
|
29
|
-
|
|
30
|
-
using Gudhi::multiparameter::mma::permutation_type;
|
|
31
|
-
|
|
32
|
-
template<typename T> void compose(std::vector<T> &p, const permutation_type &q);
|
|
33
|
-
unsigned int prod(const std::vector<unsigned int>& toMultiply,
|
|
34
|
-
unsigned int until = UINT_MAX);
|
|
35
|
-
template<typename T>
|
|
36
|
-
permutation_type sort_and_return_permutation(
|
|
37
|
-
std::vector<T>& toSort,
|
|
38
|
-
std::function<bool(T&, T&)> lessOrEqualComparator);
|
|
39
|
-
template<typename T>
|
|
40
|
-
void quicksort_and_record_permutation(
|
|
41
|
-
std::vector<T>& toSort,
|
|
42
|
-
permutation_type& p,
|
|
43
|
-
unsigned int low,
|
|
44
|
-
unsigned int high,
|
|
45
|
-
std::function<bool(T&, T&)> lessOrEqualComparator);
|
|
46
|
-
|
|
47
|
-
template<typename T>
|
|
48
|
-
void compose(std::vector<T> &p,const permutation_type &q){
|
|
49
|
-
unsigned int n = p.size();
|
|
50
|
-
// assert(q.size() == n);
|
|
51
|
-
std::vector<T> r(n);
|
|
52
|
-
for(unsigned int i = 0; i< n; i++){
|
|
53
|
-
r[i] = p[q[i]];
|
|
54
|
-
}
|
|
55
|
-
p.swap(r);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
template<typename T>
|
|
59
|
-
std::vector<T> inverse(const std::vector<T> &p){
|
|
60
|
-
unsigned int n = p.size();
|
|
61
|
-
std::vector<T> inv(n);
|
|
62
|
-
for(unsigned int i = 0; i< n; i++)
|
|
63
|
-
inv[p[i]] = i;
|
|
64
|
-
|
|
65
|
-
return inv;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
unsigned int prod(const std::vector<unsigned int>& toMultiply,
|
|
69
|
-
unsigned int until)
|
|
70
|
-
{
|
|
71
|
-
unsigned int output = 1;
|
|
72
|
-
for (unsigned int i = 0; i < toMultiply.size() && i <= until; i++){
|
|
73
|
-
output *= toMultiply[i];
|
|
74
|
-
}
|
|
75
|
-
return output;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
template<typename T>
|
|
79
|
-
permutation_type sort_and_return_permutation(
|
|
80
|
-
std::vector<T>& toSort, std::function<bool(T&, T&)> lessOrEqualComparator)
|
|
81
|
-
{
|
|
82
|
-
unsigned int n = toSort.size();
|
|
83
|
-
|
|
84
|
-
// initialize p as the identity
|
|
85
|
-
permutation_type p(n);
|
|
86
|
-
for (unsigned int i = 0; i < n ; i++) p[i] = i;
|
|
87
|
-
|
|
88
|
-
// call the recursive function doing the job
|
|
89
|
-
quicksort_and_record_permutation<T>(toSort, p, 0, n - 1, lessOrEqualComparator);
|
|
90
|
-
|
|
91
|
-
return p;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
template<typename T>
|
|
95
|
-
void quicksort_and_record_permutation(
|
|
96
|
-
std::vector<T>& toSort,
|
|
97
|
-
permutation_type& p,
|
|
98
|
-
unsigned int low,
|
|
99
|
-
unsigned int high,
|
|
100
|
-
std::function<bool(T&, T&)> lessOrEqualComparator)
|
|
101
|
-
{
|
|
102
|
-
// compatibility check
|
|
103
|
-
assert(toSort.size() == p.size());
|
|
104
|
-
assert(high < toSort.size());
|
|
105
|
-
|
|
106
|
-
if (high <= low) return;
|
|
107
|
-
|
|
108
|
-
// take the last element as pivot.
|
|
109
|
-
T pivot = toSort[high];
|
|
110
|
-
|
|
111
|
-
int i = low - 1 ;
|
|
112
|
-
|
|
113
|
-
for (unsigned int j = low; j < high; j++){
|
|
114
|
-
if (lessOrEqualComparator(toSort[j], pivot)){
|
|
115
|
-
i++;
|
|
116
|
-
std::swap(toSort[i], toSort[j]);
|
|
117
|
-
std::swap(p[i], p[j]);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
std::swap(toSort[i+1], toSort[high]);
|
|
121
|
-
std::swap(p[i+1], p[high]);
|
|
122
|
-
|
|
123
|
-
quicksort_and_record_permutation<T>(toSort, p, low, std::max(i, 0), lessOrEqualComparator);
|
|
124
|
-
quicksort_and_record_permutation<T>(toSort, p, i + 2, high, lessOrEqualComparator);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
} //namespace Combinatorics
|
|
128
|
-
|
|
129
|
-
#endif // COMBINATORY_H_INCLUDED
|
|
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): David Loiseaux
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2021 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - 2022/03 Hannah Schreiber: Integration of the new Vineyard_persistence class, renaming and cleanup.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file combinatory.h
|
|
12
|
+
* @author David Loiseaux, Hannah Schreiber
|
|
13
|
+
* @brief Combinatorial and sorting functions
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#ifndef COMBINATORY_H_INCLUDED
|
|
17
|
+
#define COMBINATORY_H_INCLUDED
|
|
18
|
+
|
|
19
|
+
#include <vector>
|
|
20
|
+
#include <iostream>
|
|
21
|
+
#include <functional>
|
|
22
|
+
#include <algorithm>
|
|
23
|
+
#include <climits>
|
|
24
|
+
#include <assert.h>
|
|
25
|
+
#include "utilities.h"
|
|
26
|
+
#include "debug.h"
|
|
27
|
+
|
|
28
|
+
namespace Gudhi::multiparameter::mma::Combinatorics {
|
|
29
|
+
|
|
30
|
+
using Gudhi::multiparameter::mma::permutation_type;
|
|
31
|
+
|
|
32
|
+
template<typename T> void compose(std::vector<T> &p, const permutation_type &q);
|
|
33
|
+
unsigned int prod(const std::vector<unsigned int>& toMultiply,
|
|
34
|
+
unsigned int until = UINT_MAX);
|
|
35
|
+
template<typename T>
|
|
36
|
+
permutation_type sort_and_return_permutation(
|
|
37
|
+
std::vector<T>& toSort,
|
|
38
|
+
std::function<bool(T&, T&)> lessOrEqualComparator);
|
|
39
|
+
template<typename T>
|
|
40
|
+
void quicksort_and_record_permutation(
|
|
41
|
+
std::vector<T>& toSort,
|
|
42
|
+
permutation_type& p,
|
|
43
|
+
unsigned int low,
|
|
44
|
+
unsigned int high,
|
|
45
|
+
std::function<bool(T&, T&)> lessOrEqualComparator);
|
|
46
|
+
|
|
47
|
+
template<typename T>
|
|
48
|
+
void compose(std::vector<T> &p,const permutation_type &q){
|
|
49
|
+
unsigned int n = p.size();
|
|
50
|
+
// assert(q.size() == n);
|
|
51
|
+
std::vector<T> r(n);
|
|
52
|
+
for(unsigned int i = 0; i< n; i++){
|
|
53
|
+
r[i] = p[q[i]];
|
|
54
|
+
}
|
|
55
|
+
p.swap(r);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
template<typename T>
|
|
59
|
+
std::vector<T> inverse(const std::vector<T> &p){
|
|
60
|
+
unsigned int n = p.size();
|
|
61
|
+
std::vector<T> inv(n);
|
|
62
|
+
for(unsigned int i = 0; i< n; i++)
|
|
63
|
+
inv[p[i]] = i;
|
|
64
|
+
|
|
65
|
+
return inv;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
unsigned int prod(const std::vector<unsigned int>& toMultiply,
|
|
69
|
+
unsigned int until)
|
|
70
|
+
{
|
|
71
|
+
unsigned int output = 1;
|
|
72
|
+
for (unsigned int i = 0; i < toMultiply.size() && i <= until; i++){
|
|
73
|
+
output *= toMultiply[i];
|
|
74
|
+
}
|
|
75
|
+
return output;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template<typename T>
|
|
79
|
+
permutation_type sort_and_return_permutation(
|
|
80
|
+
std::vector<T>& toSort, std::function<bool(T&, T&)> lessOrEqualComparator)
|
|
81
|
+
{
|
|
82
|
+
unsigned int n = toSort.size();
|
|
83
|
+
|
|
84
|
+
// initialize p as the identity
|
|
85
|
+
permutation_type p(n);
|
|
86
|
+
for (unsigned int i = 0; i < n ; i++) p[i] = i;
|
|
87
|
+
|
|
88
|
+
// call the recursive function doing the job
|
|
89
|
+
quicksort_and_record_permutation<T>(toSort, p, 0, n - 1, lessOrEqualComparator);
|
|
90
|
+
|
|
91
|
+
return p;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
template<typename T>
|
|
95
|
+
void quicksort_and_record_permutation(
|
|
96
|
+
std::vector<T>& toSort,
|
|
97
|
+
permutation_type& p,
|
|
98
|
+
unsigned int low,
|
|
99
|
+
unsigned int high,
|
|
100
|
+
std::function<bool(T&, T&)> lessOrEqualComparator)
|
|
101
|
+
{
|
|
102
|
+
// compatibility check
|
|
103
|
+
assert(toSort.size() == p.size());
|
|
104
|
+
assert(high < toSort.size());
|
|
105
|
+
|
|
106
|
+
if (high <= low) return;
|
|
107
|
+
|
|
108
|
+
// take the last element as pivot.
|
|
109
|
+
T pivot = toSort[high];
|
|
110
|
+
|
|
111
|
+
int i = low - 1 ;
|
|
112
|
+
|
|
113
|
+
for (unsigned int j = low; j < high; j++){
|
|
114
|
+
if (lessOrEqualComparator(toSort[j], pivot)){
|
|
115
|
+
i++;
|
|
116
|
+
std::swap(toSort[i], toSort[j]);
|
|
117
|
+
std::swap(p[i], p[j]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
std::swap(toSort[i+1], toSort[high]);
|
|
121
|
+
std::swap(p[i+1], p[high]);
|
|
122
|
+
|
|
123
|
+
quicksort_and_record_permutation<T>(toSort, p, low, std::max(i, 0), lessOrEqualComparator);
|
|
124
|
+
quicksort_and_record_permutation<T>(toSort, p, i + 2, high, lessOrEqualComparator);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
} //namespace Combinatorics
|
|
128
|
+
|
|
129
|
+
#endif // COMBINATORY_H_INCLUDED
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
/* This file is part of the MMA Library -
|
|
2
|
-
* https://gitlab.inria.fr/dloiseau/multipers - which is released under MIT. See
|
|
3
|
-
* file LICENSE for full license details. Author(s): David Loiseaux
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2021 Inria
|
|
6
|
-
*
|
|
7
|
-
* Modification(s):
|
|
8
|
-
* - 2022/03 Hannah Schreiber: Integration of the new Vineyard_persistence
|
|
9
|
-
* class, renaming and cleanup.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* @file debug.h
|
|
13
|
-
* @author David Loiseaux, Hannah Schreiber
|
|
14
|
-
* @brief Display functions for debug purposes
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
#ifndef DEBUG_H_INCLUDED
|
|
18
|
-
#define DEBUG_H_INCLUDED
|
|
19
|
-
|
|
20
|
-
#include <chrono>
|
|
21
|
-
#include <iostream>
|
|
22
|
-
#include <list>
|
|
23
|
-
#include <vector>
|
|
24
|
-
|
|
25
|
-
namespace Gudhi::multiparameter::mma::Debug {
|
|
26
|
-
|
|
27
|
-
using clk = std::chrono::high_resolution_clock;
|
|
28
|
-
using tp = clk::time_point;
|
|
29
|
-
|
|
30
|
-
constexpr bool debug = false;
|
|
31
|
-
|
|
32
|
-
class Timer {
|
|
33
|
-
public:
|
|
34
|
-
Timer() : activated_(false) {}
|
|
35
|
-
Timer(const std::string &string, bool verbose)
|
|
36
|
-
: timer_(clk::now()), activated_(verbose) {
|
|
37
|
-
if (verbose) {
|
|
38
|
-
std::cout << string << std::flush;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
~Timer() {
|
|
42
|
-
if (activated_) {
|
|
43
|
-
std::chrono::duration<double> elapsed =
|
|
44
|
-
std::chrono::duration_cast<std::chrono::duration<double>>(clk::now() -
|
|
45
|
-
timer_);
|
|
46
|
-
std::cout << " Done ! (" << elapsed.count() << " s)." << std::endl;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
private:
|
|
51
|
-
tp timer_;
|
|
52
|
-
bool activated_;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
template <typename T> void disp_vect(std::vector<T> v) {
|
|
56
|
-
for (auto i = 0u; i < v.size(); i++) {
|
|
57
|
-
std::cout << v[i] << " ";
|
|
58
|
-
}
|
|
59
|
-
std::cout << std::endl;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
template <typename T> void disp_vect(std::list<T> v) {
|
|
63
|
-
while (!v.empty()) {
|
|
64
|
-
std::cout << v.front() << " ";
|
|
65
|
-
v.pop_front();
|
|
66
|
-
}
|
|
67
|
-
std::cout << std::endl;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
template <typename T> void disp_vect(std::vector<std::pair<T, T>> v) {
|
|
71
|
-
for (unsigned int i = 0; i < v.size(); i++) {
|
|
72
|
-
std::cout << "(" << v[i].first << " " << v[i].second << ") ";
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
template <typename T>
|
|
77
|
-
void disp_vect(std::vector<std::vector<T>> v, bool show_small = true) {
|
|
78
|
-
for (auto i = 0u; i < v.size(); i++) {
|
|
79
|
-
if (v[i].size() <= 1 && !show_small)
|
|
80
|
-
continue;
|
|
81
|
-
std::cout << "(";
|
|
82
|
-
for (auto j = 0u; j < v[i].size(); j++) {
|
|
83
|
-
std::cout << v[i][j];
|
|
84
|
-
if (j < v[i].size() - 1)
|
|
85
|
-
std::cout << " ";
|
|
86
|
-
}
|
|
87
|
-
std::cout << ") ";
|
|
88
|
-
}
|
|
89
|
-
std::cout << std::endl;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
} // namespace Gudhi::multiparameter::mma::Debug
|
|
93
|
-
namespace std {
|
|
94
|
-
template <typename T>
|
|
95
|
-
std::ostream &operator<<(std::ostream &stream, const std::vector<T> truc) {
|
|
96
|
-
stream << "[";
|
|
97
|
-
for (unsigned int i = 0; i < truc.size() - 1; i++) {
|
|
98
|
-
stream << truc[i] << ", ";
|
|
99
|
-
}
|
|
100
|
-
if (!truc.empty())
|
|
101
|
-
stream << truc.back();
|
|
102
|
-
stream << "]";
|
|
103
|
-
return stream;
|
|
104
|
-
}
|
|
105
|
-
} // namespace std
|
|
106
|
-
|
|
107
|
-
#endif // DEBUG_H_INCLUDED
|
|
1
|
+
/* This file is part of the MMA Library -
|
|
2
|
+
* https://gitlab.inria.fr/dloiseau/multipers - which is released under MIT. See
|
|
3
|
+
* file LICENSE for full license details. Author(s): David Loiseaux
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2021 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - 2022/03 Hannah Schreiber: Integration of the new Vineyard_persistence
|
|
9
|
+
* class, renaming and cleanup.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @file debug.h
|
|
13
|
+
* @author David Loiseaux, Hannah Schreiber
|
|
14
|
+
* @brief Display functions for debug purposes
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#ifndef DEBUG_H_INCLUDED
|
|
18
|
+
#define DEBUG_H_INCLUDED
|
|
19
|
+
|
|
20
|
+
#include <chrono>
|
|
21
|
+
#include <iostream>
|
|
22
|
+
#include <list>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace Gudhi::multiparameter::mma::Debug {
|
|
26
|
+
|
|
27
|
+
using clk = std::chrono::high_resolution_clock;
|
|
28
|
+
using tp = clk::time_point;
|
|
29
|
+
|
|
30
|
+
constexpr bool debug = false;
|
|
31
|
+
|
|
32
|
+
class Timer {
|
|
33
|
+
public:
|
|
34
|
+
Timer() : activated_(false) {}
|
|
35
|
+
Timer(const std::string &string, bool verbose)
|
|
36
|
+
: timer_(clk::now()), activated_(verbose) {
|
|
37
|
+
if (verbose) {
|
|
38
|
+
std::cout << string << std::flush;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
~Timer() {
|
|
42
|
+
if (activated_) {
|
|
43
|
+
std::chrono::duration<double> elapsed =
|
|
44
|
+
std::chrono::duration_cast<std::chrono::duration<double>>(clk::now() -
|
|
45
|
+
timer_);
|
|
46
|
+
std::cout << " Done ! (" << elapsed.count() << " s)." << std::endl;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private:
|
|
51
|
+
tp timer_;
|
|
52
|
+
bool activated_;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
template <typename T> void disp_vect(std::vector<T> v) {
|
|
56
|
+
for (auto i = 0u; i < v.size(); i++) {
|
|
57
|
+
std::cout << v[i] << " ";
|
|
58
|
+
}
|
|
59
|
+
std::cout << std::endl;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
template <typename T> void disp_vect(std::list<T> v) {
|
|
63
|
+
while (!v.empty()) {
|
|
64
|
+
std::cout << v.front() << " ";
|
|
65
|
+
v.pop_front();
|
|
66
|
+
}
|
|
67
|
+
std::cout << std::endl;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
template <typename T> void disp_vect(std::vector<std::pair<T, T>> v) {
|
|
71
|
+
for (unsigned int i = 0; i < v.size(); i++) {
|
|
72
|
+
std::cout << "(" << v[i].first << " " << v[i].second << ") ";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <typename T>
|
|
77
|
+
void disp_vect(std::vector<std::vector<T>> v, bool show_small = true) {
|
|
78
|
+
for (auto i = 0u; i < v.size(); i++) {
|
|
79
|
+
if (v[i].size() <= 1 && !show_small)
|
|
80
|
+
continue;
|
|
81
|
+
std::cout << "(";
|
|
82
|
+
for (auto j = 0u; j < v[i].size(); j++) {
|
|
83
|
+
std::cout << v[i][j];
|
|
84
|
+
if (j < v[i].size() - 1)
|
|
85
|
+
std::cout << " ";
|
|
86
|
+
}
|
|
87
|
+
std::cout << ") ";
|
|
88
|
+
}
|
|
89
|
+
std::cout << std::endl;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
} // namespace Gudhi::multiparameter::mma::Debug
|
|
93
|
+
namespace std {
|
|
94
|
+
template <typename T>
|
|
95
|
+
std::ostream &operator<<(std::ostream &stream, const std::vector<T> truc) {
|
|
96
|
+
stream << "[";
|
|
97
|
+
for (unsigned int i = 0; i < truc.size() - 1; i++) {
|
|
98
|
+
stream << truc[i] << ", ";
|
|
99
|
+
}
|
|
100
|
+
if (!truc.empty())
|
|
101
|
+
stream << truc.back();
|
|
102
|
+
stream << "]";
|
|
103
|
+
return stream;
|
|
104
|
+
}
|
|
105
|
+
} // namespace std
|
|
106
|
+
|
|
107
|
+
#endif // DEBUG_H_INCLUDED
|