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,136 @@
|
|
|
1
|
+
/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
|
|
2
|
+
* See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
|
|
3
|
+
* Author(s): Hannah Schreiber
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2022-24 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file chain_pairing.h
|
|
13
|
+
* @author Hannah Schreiber
|
|
14
|
+
* @brief Contains the @ref Gudhi::persistence_matrix::Chain_pairing class and
|
|
15
|
+
* @ref Gudhi::persistence_matrix::Dummy_chain_pairing structure.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef PM_CHAIN_PAIRING_H
|
|
19
|
+
#define PM_CHAIN_PAIRING_H
|
|
20
|
+
|
|
21
|
+
#include <utility> //std::move
|
|
22
|
+
|
|
23
|
+
namespace Gudhi {
|
|
24
|
+
namespace persistence_matrix {
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @ingroup persistence_matrix
|
|
28
|
+
*
|
|
29
|
+
* @brief Empty structure.
|
|
30
|
+
* Inherited instead of @ref Chain_pairing, when the computation of the barcode was not enabled or if the pairing
|
|
31
|
+
* is already managed by the vine update classes.
|
|
32
|
+
*/
|
|
33
|
+
struct Dummy_chain_pairing
|
|
34
|
+
{
|
|
35
|
+
friend void swap([[maybe_unused]] Dummy_chain_pairing& d1, [[maybe_unused]] Dummy_chain_pairing& d2) {}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @class Chain_pairing chain_pairing.h gudhi/Persistence_matrix/chain_pairing.h
|
|
40
|
+
* @ingroup persistence_matrix
|
|
41
|
+
*
|
|
42
|
+
* @brief Class managing the barcode for @ref Chain_matrix if the option was enabled.
|
|
43
|
+
*
|
|
44
|
+
* @tparam Master_matrix An instantiation of @ref Matrix from which all types and options are deduced.
|
|
45
|
+
*/
|
|
46
|
+
template <class Master_matrix>
|
|
47
|
+
class Chain_pairing
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
using Barcode = typename Master_matrix::Barcode; /**< Barcode type. */
|
|
51
|
+
using Dimension = typename Master_matrix::Dimension; /**< Dimension value type. */
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @brief Default constructor.
|
|
55
|
+
*/
|
|
56
|
+
Chain_pairing();
|
|
57
|
+
/**
|
|
58
|
+
* @brief Copy constructor.
|
|
59
|
+
*
|
|
60
|
+
* @param matrixToCopy Matrix to copy.
|
|
61
|
+
*/
|
|
62
|
+
Chain_pairing(const Chain_pairing& matrixToCopy);
|
|
63
|
+
/**
|
|
64
|
+
* @brief Move constructor.
|
|
65
|
+
*
|
|
66
|
+
* @param other Matrix to move.
|
|
67
|
+
*/
|
|
68
|
+
Chain_pairing(Chain_pairing&& other) noexcept;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @brief Returns the current barcode which is maintained at any insertion, removal or vine swap.
|
|
72
|
+
*
|
|
73
|
+
* @return Const reference to the barcode.
|
|
74
|
+
*/
|
|
75
|
+
const Barcode& get_current_barcode() const;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @brief Assign operator.
|
|
79
|
+
*/
|
|
80
|
+
Chain_pairing& operator=(Chain_pairing other);
|
|
81
|
+
/**
|
|
82
|
+
* @brief Swap operator.
|
|
83
|
+
*/
|
|
84
|
+
friend void swap(Chain_pairing& pairing1, Chain_pairing& pairing2) {
|
|
85
|
+
pairing1.barcode_.swap(pairing2.barcode_);
|
|
86
|
+
pairing1.indexToBar_.swap(pairing2.indexToBar_);
|
|
87
|
+
std::swap(pairing1.nextPosition_, pairing2.nextPosition_);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
protected:
|
|
91
|
+
using Dictionary = typename Master_matrix::Bar_dictionary;
|
|
92
|
+
using Pos_index = typename Master_matrix::Pos_index;
|
|
93
|
+
|
|
94
|
+
Barcode barcode_; /**< Bar container. */
|
|
95
|
+
Dictionary indexToBar_; /**< Map from @ref MatIdx index to bar index. */
|
|
96
|
+
Pos_index nextPosition_; /**< Next relative position in the filtration. */
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
template <class Master_matrix>
|
|
100
|
+
inline Chain_pairing<Master_matrix>::Chain_pairing() : nextPosition_(0)
|
|
101
|
+
{}
|
|
102
|
+
|
|
103
|
+
template <class Master_matrix>
|
|
104
|
+
inline Chain_pairing<Master_matrix>::Chain_pairing(const Chain_pairing& matrixToCopy)
|
|
105
|
+
: barcode_(matrixToCopy.barcode_),
|
|
106
|
+
indexToBar_(matrixToCopy.indexToBar_),
|
|
107
|
+
nextPosition_(matrixToCopy.nextPosition_)
|
|
108
|
+
{}
|
|
109
|
+
|
|
110
|
+
template <class Master_matrix>
|
|
111
|
+
inline Chain_pairing<Master_matrix>::Chain_pairing(Chain_pairing<Master_matrix>&& other) noexcept
|
|
112
|
+
: barcode_(std::move(other.barcode_)),
|
|
113
|
+
indexToBar_(std::move(other.indexToBar_)),
|
|
114
|
+
nextPosition_(std::exchange(other.nextPosition_, 0))
|
|
115
|
+
{}
|
|
116
|
+
|
|
117
|
+
template <class Master_matrix>
|
|
118
|
+
inline const typename Chain_pairing<Master_matrix>::Barcode& Chain_pairing<Master_matrix>::get_current_barcode()
|
|
119
|
+
const
|
|
120
|
+
{
|
|
121
|
+
return barcode_;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
template <class Master_matrix>
|
|
125
|
+
inline Chain_pairing<Master_matrix>& Chain_pairing<Master_matrix>::operator=(Chain_pairing<Master_matrix> other)
|
|
126
|
+
{
|
|
127
|
+
barcode_.swap(other.barcode_);
|
|
128
|
+
indexToBar_.swap(other.indexToBar_);
|
|
129
|
+
std::swap(nextPosition_, other.nextPosition_);
|
|
130
|
+
return *this;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
} // namespace persistence_matrix
|
|
134
|
+
} // namespace Gudhi
|
|
135
|
+
|
|
136
|
+
#endif // PM_CHAIN_PAIRING_H
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
|
|
2
|
+
* See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
|
|
3
|
+
* Author(s): Hannah Schreiber
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2022-24 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file chain_rep_cycles.h
|
|
13
|
+
* @author Hannah Schreiber
|
|
14
|
+
* @brief Contains the @ref Gudhi::persistence_matrix::Chain_representative_cycles class and
|
|
15
|
+
* @ref Gudhi::persistence_matrix::Dummy_chain_representative_cycles structure.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef PM_CHAIN_REP_CYCLES_H
|
|
19
|
+
#define PM_CHAIN_REP_CYCLES_H
|
|
20
|
+
|
|
21
|
+
#include <utility> //std::move
|
|
22
|
+
#include <algorithm> //std::sort
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace Gudhi {
|
|
26
|
+
namespace persistence_matrix {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @ingroup persistence_matrix
|
|
30
|
+
*
|
|
31
|
+
* @brief Empty structure.
|
|
32
|
+
* Inherited instead of @ref Chain_representative_cycles, when the computation of the representative cycles
|
|
33
|
+
* were not enabled.
|
|
34
|
+
*/
|
|
35
|
+
struct Dummy_chain_representative_cycles
|
|
36
|
+
{
|
|
37
|
+
friend void swap([[maybe_unused]] Dummy_chain_representative_cycles& d1,
|
|
38
|
+
[[maybe_unused]] Dummy_chain_representative_cycles& d2) {}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// TODO: add coefficients ? Only Z2 token into account for now.
|
|
42
|
+
/**
|
|
43
|
+
* @class Chain_representative_cycles chain_rep_cycles.h gudhi/Persistence_matrix/chain_rep_cycles.h
|
|
44
|
+
* @ingroup persistence_matrix
|
|
45
|
+
*
|
|
46
|
+
* @brief Class managing the representative cycles for @ref Chain_matrix if the option was enabled.
|
|
47
|
+
*
|
|
48
|
+
* @tparam Master_matrix An instantiation of @ref Matrix from which all types and options are deduced.
|
|
49
|
+
*/
|
|
50
|
+
template <class Master_matrix>
|
|
51
|
+
class Chain_representative_cycles
|
|
52
|
+
{
|
|
53
|
+
public:
|
|
54
|
+
using Bar = typename Master_matrix::Bar; /**< Bar type. */
|
|
55
|
+
using Cycle = typename Master_matrix::Cycle; /**< Cycle type. */
|
|
56
|
+
using Column_container = typename Master_matrix::Column_container; /**< Column container type. */
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @brief Default constructor.
|
|
60
|
+
*/
|
|
61
|
+
Chain_representative_cycles();
|
|
62
|
+
/**
|
|
63
|
+
* @brief Copy constructor.
|
|
64
|
+
*
|
|
65
|
+
* @param matrixToCopy Matrix to copy.
|
|
66
|
+
*/
|
|
67
|
+
Chain_representative_cycles(const Chain_representative_cycles& matrixToCopy);
|
|
68
|
+
/**
|
|
69
|
+
* @brief Move constructor.
|
|
70
|
+
*
|
|
71
|
+
* @param other Matrix to move.
|
|
72
|
+
*/
|
|
73
|
+
Chain_representative_cycles(Chain_representative_cycles&& other) noexcept;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @brief Computes the current representative cycles of the matrix.
|
|
77
|
+
*/
|
|
78
|
+
void update_representative_cycles();
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @brief Returns the current representative cycles. If the matrix is modified later after the first call,
|
|
82
|
+
* @ref update_representative_cycles has to be called to update the returned cycles.
|
|
83
|
+
*
|
|
84
|
+
* @return A const reference to a vector of @ref Matrix::Cycle containing all representative cycles.
|
|
85
|
+
*/
|
|
86
|
+
const std::vector<Cycle>& get_representative_cycles();
|
|
87
|
+
/**
|
|
88
|
+
* @brief Returns the representative cycle corresponding to the given bar.
|
|
89
|
+
* If the matrix is modified later after the first call,
|
|
90
|
+
* @ref update_representative_cycles has to be called to update the returned cycles.
|
|
91
|
+
*
|
|
92
|
+
* @param bar Bar corresponding to the wanted representative cycle.
|
|
93
|
+
* @return A const reference to the representative cycle.
|
|
94
|
+
*/
|
|
95
|
+
const Cycle& get_representative_cycle(const Bar& bar);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @brief Assign operator.
|
|
99
|
+
*/
|
|
100
|
+
Chain_representative_cycles& operator=(Chain_representative_cycles other);
|
|
101
|
+
/**
|
|
102
|
+
* @brief Swap operator.
|
|
103
|
+
*/
|
|
104
|
+
friend void swap(Chain_representative_cycles& base1, Chain_representative_cycles& base2) {
|
|
105
|
+
base1.representativeCycles_.swap(base2.representativeCycles_);
|
|
106
|
+
base1.birthToCycle_.swap(base2.birthToCycle_);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private:
|
|
110
|
+
using Master_chain_matrix = typename Master_matrix::Master_chain_matrix;
|
|
111
|
+
|
|
112
|
+
std::vector<Cycle> representativeCycles_; /**< Cycle container. */
|
|
113
|
+
std::vector<typename Master_matrix::Index> birthToCycle_; /**< Map from birth index to cycle index. */
|
|
114
|
+
|
|
115
|
+
//access to inheriting Chain_matrix class
|
|
116
|
+
constexpr Master_chain_matrix* _matrix() { return static_cast<Master_chain_matrix*>(this); }
|
|
117
|
+
constexpr const Master_chain_matrix* _matrix() const { return static_cast<const Master_chain_matrix*>(this); }
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
template <class Master_matrix>
|
|
121
|
+
inline Chain_representative_cycles<Master_matrix>::Chain_representative_cycles()
|
|
122
|
+
{}
|
|
123
|
+
|
|
124
|
+
template <class Master_matrix>
|
|
125
|
+
inline Chain_representative_cycles<Master_matrix>::Chain_representative_cycles(
|
|
126
|
+
const Chain_representative_cycles<Master_matrix>& matrixToCopy)
|
|
127
|
+
: representativeCycles_(matrixToCopy.representativeCycles_), birthToCycle_(matrixToCopy.birthToCycle_)
|
|
128
|
+
{}
|
|
129
|
+
|
|
130
|
+
template <class Master_matrix>
|
|
131
|
+
inline Chain_representative_cycles<Master_matrix>::Chain_representative_cycles(
|
|
132
|
+
Chain_representative_cycles<Master_matrix>&& other) noexcept
|
|
133
|
+
: representativeCycles_(std::move(other.representativeCycles_)), birthToCycle_(std::move(other.birthToCycle_))
|
|
134
|
+
{}
|
|
135
|
+
|
|
136
|
+
template <class Master_matrix>
|
|
137
|
+
inline void Chain_representative_cycles<Master_matrix>::update_representative_cycles()
|
|
138
|
+
{
|
|
139
|
+
birthToCycle_.clear();
|
|
140
|
+
birthToCycle_.resize(_matrix()->get_number_of_columns(), -1);
|
|
141
|
+
representativeCycles_.clear();
|
|
142
|
+
|
|
143
|
+
// for birthToCycle_, assumes that @ref PosIdx == @ref IDIdx, ie pivot == birth index... which is not true with
|
|
144
|
+
// vineyards
|
|
145
|
+
// TODO: with vineyard, there is a @ref IDIdx --> @ref PosIdx map stored. somehow get access to it here
|
|
146
|
+
for (typename Master_matrix::ID_index i = 0; i < _matrix()->get_number_of_columns(); i++) {
|
|
147
|
+
auto& col = _matrix()->get_column(_matrix()->get_column_with_pivot(i));
|
|
148
|
+
if (!col.is_paired() || i < col.get_paired_chain_index()) {
|
|
149
|
+
Cycle cycle;
|
|
150
|
+
for (auto& c : col) {
|
|
151
|
+
cycle.push_back(c.get_row_index());
|
|
152
|
+
}
|
|
153
|
+
if constexpr (std::is_same_v<typename Master_matrix::Column, typename Master_matrix::Matrix_heap_column> ||
|
|
154
|
+
std::is_same_v<typename Master_matrix::Column, typename Master_matrix::Matrix_unordered_set_column>)
|
|
155
|
+
std::sort(cycle.begin(), cycle.end());
|
|
156
|
+
representativeCycles_.push_back(cycle);
|
|
157
|
+
birthToCycle_[i] = representativeCycles_.size() - 1;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
template <class Master_matrix>
|
|
163
|
+
inline const std::vector<typename Chain_representative_cycles<Master_matrix>::Cycle>&
|
|
164
|
+
Chain_representative_cycles<Master_matrix>::get_representative_cycles()
|
|
165
|
+
{
|
|
166
|
+
if (representativeCycles_.empty()) update_representative_cycles();
|
|
167
|
+
return representativeCycles_;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
template <class Master_matrix>
|
|
171
|
+
inline const typename Chain_representative_cycles<Master_matrix>::Cycle&
|
|
172
|
+
Chain_representative_cycles<Master_matrix>::get_representative_cycle(const Bar& bar)
|
|
173
|
+
{
|
|
174
|
+
if (representativeCycles_.empty()) update_representative_cycles();
|
|
175
|
+
return representativeCycles_[birthToCycle_[bar.birth]];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
template <class Master_matrix>
|
|
179
|
+
inline Chain_representative_cycles<Master_matrix>& Chain_representative_cycles<Master_matrix>::operator=(
|
|
180
|
+
Chain_representative_cycles<Master_matrix> other)
|
|
181
|
+
{
|
|
182
|
+
representativeCycles_.swap(other.representativeCycles_);
|
|
183
|
+
birthToCycle_.swap(other.birthToCycle_);
|
|
184
|
+
return *this;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
} // namespace persistence_matrix
|
|
188
|
+
} // namespace Gudhi
|
|
189
|
+
|
|
190
|
+
#endif // PM_CHAIN_REP_CYCLES_H
|