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,253 +1,253 @@
|
|
|
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) 2024 Inria
|
|
6
|
-
*
|
|
7
|
-
* Modification(s):
|
|
8
|
-
* - YYYY/MM Author: Description of the modification
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @file persistence_interval.h
|
|
13
|
-
* @author Hannah Schreiber
|
|
14
|
-
* @brief Contains @ref Gudhi::persistence_matrix::Persistence_interval class.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
#ifndef PM_INTERVAL_INCLUDED
|
|
18
|
-
#define PM_INTERVAL_INCLUDED
|
|
19
|
-
|
|
20
|
-
#include <ostream> //std::ostream
|
|
21
|
-
#include <limits> //std::numeric_limits
|
|
22
|
-
#include <tuple>
|
|
23
|
-
#include <utility> //std::move
|
|
24
|
-
|
|
25
|
-
namespace Gudhi {
|
|
26
|
-
namespace persistence_matrix {
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @class Persistence_interval persistence_interval.h gudhi/persistence_interval.h
|
|
30
|
-
* @ingroup persistence_matrix
|
|
31
|
-
*
|
|
32
|
-
* @brief Type for an interval in a persistent diagram or barcode. Stores the birth, death and dimension of the
|
|
33
|
-
* interval. It can be used as a tuple with `get`/`std::get` (birth, death and dimension in this order),
|
|
34
|
-
* `std::tuple_element` and `std::tuple_size`, as well as structured binding.
|
|
35
|
-
*
|
|
36
|
-
* @tparam Dimension Type of the dimension value.
|
|
37
|
-
* @tparam Event_value Type of the birth and death value.
|
|
38
|
-
*/
|
|
39
|
-
template <typename Dimension, typename Event_value>
|
|
40
|
-
struct Persistence_interval {
|
|
41
|
-
/**
|
|
42
|
-
* @brief Stores the infinity value for birth and death events. Its value depends on the template parameter
|
|
43
|
-
* `Event_value`:
|
|
44
|
-
* - if `Event_value` has a native infinity value, it takes this value,
|
|
45
|
-
* - otherwise, if `Event_value` is a signed type, it takes value -1,
|
|
46
|
-
* - otherwise, if `Event_value` is a unsigned type, it takes the maximal possible value.
|
|
47
|
-
*
|
|
48
|
-
* Is also used as default value for birth and death attributes when not initialized.
|
|
49
|
-
*/
|
|
50
|
-
static constexpr Event_value inf = std::numeric_limits<Event_value>::has_infinity
|
|
51
|
-
? std::numeric_limits<Event_value>::infinity()
|
|
52
|
-
: static_cast<Event_value>(-1);
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @brief Constructor.
|
|
56
|
-
*
|
|
57
|
-
* @param birth Birth value of the cycle. Default value: @ref inf.
|
|
58
|
-
* @param death Death value of the cycle. Default value: @ref inf.
|
|
59
|
-
* @param dim Dimension of the cycle. Default value: -1.
|
|
60
|
-
*/
|
|
61
|
-
Persistence_interval(Event_value birth = inf, Event_value death = inf, Dimension dim = -1)
|
|
62
|
-
: dim(dim), birth(birth), death(death) {}
|
|
63
|
-
|
|
64
|
-
Dimension dim; /**< Dimension of the cycle.*/
|
|
65
|
-
Event_value birth; /**< Birth value of the cycle. */
|
|
66
|
-
Event_value death; /**< Death value of the cycle. */
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* @brief operator<<
|
|
70
|
-
*
|
|
71
|
-
* @param stream outstream
|
|
72
|
-
* @param interval interval to stream
|
|
73
|
-
*/
|
|
74
|
-
inline friend std::ostream& operator<<(std::ostream& stream, const Persistence_interval& interval) {
|
|
75
|
-
stream << "[" << interval.dim << "] ";
|
|
76
|
-
if constexpr (std::numeric_limits<Event_value>::has_infinity) {
|
|
77
|
-
stream << interval.birth << " - " << interval.death;
|
|
78
|
-
} else {
|
|
79
|
-
if (interval.birth == inf)
|
|
80
|
-
stream << "inf";
|
|
81
|
-
else
|
|
82
|
-
stream << interval.birth;
|
|
83
|
-
stream << " - ";
|
|
84
|
-
if (interval.death == inf)
|
|
85
|
-
stream << "inf";
|
|
86
|
-
else
|
|
87
|
-
stream << interval.death;
|
|
88
|
-
}
|
|
89
|
-
return stream;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
94
|
-
*
|
|
95
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
96
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
97
|
-
*/
|
|
98
|
-
template <std::size_t I>
|
|
99
|
-
constexpr auto& get() & noexcept {
|
|
100
|
-
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
101
|
-
|
|
102
|
-
if constexpr (I == 0) return birth;
|
|
103
|
-
if constexpr (I == 1) return death;
|
|
104
|
-
if constexpr (I == 2) return dim;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
109
|
-
*
|
|
110
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
111
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
112
|
-
*/
|
|
113
|
-
template <std::size_t I>
|
|
114
|
-
constexpr const auto& get() const& noexcept {
|
|
115
|
-
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
116
|
-
|
|
117
|
-
if constexpr (I == 0) return birth;
|
|
118
|
-
if constexpr (I == 1) return death;
|
|
119
|
-
if constexpr (I == 2) return dim;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
124
|
-
*
|
|
125
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
126
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
127
|
-
*/
|
|
128
|
-
template <std::size_t I>
|
|
129
|
-
constexpr auto&& get() && noexcept {
|
|
130
|
-
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
131
|
-
|
|
132
|
-
if constexpr (I == 0) return std::move(birth);
|
|
133
|
-
if constexpr (I == 1) return std::move(death);
|
|
134
|
-
if constexpr (I == 2) return std::move(dim);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
139
|
-
*
|
|
140
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
141
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
142
|
-
*/
|
|
143
|
-
template <std::size_t I>
|
|
144
|
-
constexpr const auto&& get() const&& noexcept {
|
|
145
|
-
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
146
|
-
|
|
147
|
-
if constexpr (I == 0) return std::move(birth);
|
|
148
|
-
if constexpr (I == 1) return std::move(death);
|
|
149
|
-
if constexpr (I == 2) return std::move(dim);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
} // namespace persistence_matrix
|
|
154
|
-
} // namespace Gudhi
|
|
155
|
-
|
|
156
|
-
namespace std {
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* @ingroup persistence_matrix
|
|
160
|
-
*
|
|
161
|
-
* @brief Partial specialization of `std::tuple_size` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
162
|
-
*
|
|
163
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
164
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
165
|
-
*/
|
|
166
|
-
template <typename Dimension, typename Event_value>
|
|
167
|
-
struct tuple_size<Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> >
|
|
168
|
-
: integral_constant<size_t, 3> {};
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* @ingroup persistence_matrix
|
|
172
|
-
*
|
|
173
|
-
* @brief Partial specialization of `std::tuple_element` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
174
|
-
*
|
|
175
|
-
* @tparam I Index of the type to store: 0 for the birth value type, 1 for the death value type and 2 for the
|
|
176
|
-
* dimension value type.
|
|
177
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
178
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
179
|
-
*/
|
|
180
|
-
template <size_t I, typename Dimension, typename Event_value>
|
|
181
|
-
struct tuple_element<I, Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> > {
|
|
182
|
-
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
183
|
-
|
|
184
|
-
using type = typename conditional <I < 2, Event_value, Dimension>::type;
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* @ingroup persistence_matrix
|
|
189
|
-
*
|
|
190
|
-
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
191
|
-
*
|
|
192
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
193
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
194
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
195
|
-
* @param i Interval from which the value should be returned.
|
|
196
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
197
|
-
*/
|
|
198
|
-
template <size_t I, typename Dimension, typename Event_value>
|
|
199
|
-
constexpr auto& get(Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>& i) noexcept {
|
|
200
|
-
return i.template get<I>();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* @ingroup persistence_matrix
|
|
205
|
-
*
|
|
206
|
-
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
207
|
-
*
|
|
208
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
209
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
210
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
211
|
-
* @param i Interval from which the value should be returned.
|
|
212
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
213
|
-
*/
|
|
214
|
-
template <size_t I, typename Dimension, typename Event_value>
|
|
215
|
-
constexpr const auto& get(const Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>& i) noexcept {
|
|
216
|
-
return i.template get<I>();
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* @ingroup persistence_matrix
|
|
221
|
-
*
|
|
222
|
-
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
223
|
-
*
|
|
224
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
225
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
226
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
227
|
-
* @param i Interval from which the value should be returned.
|
|
228
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
229
|
-
*/
|
|
230
|
-
template <size_t I, typename Dimension, typename Event_value>
|
|
231
|
-
constexpr auto&& get(Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>&& i) noexcept {
|
|
232
|
-
return std::move(i).template get<I>();
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* @ingroup persistence_matrix
|
|
237
|
-
*
|
|
238
|
-
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
239
|
-
*
|
|
240
|
-
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
241
|
-
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
242
|
-
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
243
|
-
* @param i Interval from which the value should be returned.
|
|
244
|
-
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
245
|
-
*/
|
|
246
|
-
template <size_t I, typename Dimension, typename Event_value>
|
|
247
|
-
constexpr const auto&& get(const Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>&& i) noexcept {
|
|
248
|
-
return std::move(i).template get<I>();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
} // namespace std
|
|
252
|
-
|
|
253
|
-
#endif // PM_INTERVAL_INCLUDED
|
|
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) 2024 Inria
|
|
6
|
+
*
|
|
7
|
+
* Modification(s):
|
|
8
|
+
* - YYYY/MM Author: Description of the modification
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file persistence_interval.h
|
|
13
|
+
* @author Hannah Schreiber
|
|
14
|
+
* @brief Contains @ref Gudhi::persistence_matrix::Persistence_interval class.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#ifndef PM_INTERVAL_INCLUDED
|
|
18
|
+
#define PM_INTERVAL_INCLUDED
|
|
19
|
+
|
|
20
|
+
#include <ostream> //std::ostream
|
|
21
|
+
#include <limits> //std::numeric_limits
|
|
22
|
+
#include <tuple>
|
|
23
|
+
#include <utility> //std::move
|
|
24
|
+
|
|
25
|
+
namespace Gudhi {
|
|
26
|
+
namespace persistence_matrix {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @class Persistence_interval persistence_interval.h gudhi/persistence_interval.h
|
|
30
|
+
* @ingroup persistence_matrix
|
|
31
|
+
*
|
|
32
|
+
* @brief Type for an interval in a persistent diagram or barcode. Stores the birth, death and dimension of the
|
|
33
|
+
* interval. It can be used as a tuple with `get`/`std::get` (birth, death and dimension in this order),
|
|
34
|
+
* `std::tuple_element` and `std::tuple_size`, as well as structured binding.
|
|
35
|
+
*
|
|
36
|
+
* @tparam Dimension Type of the dimension value.
|
|
37
|
+
* @tparam Event_value Type of the birth and death value.
|
|
38
|
+
*/
|
|
39
|
+
template <typename Dimension, typename Event_value>
|
|
40
|
+
struct Persistence_interval {
|
|
41
|
+
/**
|
|
42
|
+
* @brief Stores the infinity value for birth and death events. Its value depends on the template parameter
|
|
43
|
+
* `Event_value`:
|
|
44
|
+
* - if `Event_value` has a native infinity value, it takes this value,
|
|
45
|
+
* - otherwise, if `Event_value` is a signed type, it takes value -1,
|
|
46
|
+
* - otherwise, if `Event_value` is a unsigned type, it takes the maximal possible value.
|
|
47
|
+
*
|
|
48
|
+
* Is also used as default value for birth and death attributes when not initialized.
|
|
49
|
+
*/
|
|
50
|
+
static constexpr Event_value inf = std::numeric_limits<Event_value>::has_infinity
|
|
51
|
+
? std::numeric_limits<Event_value>::infinity()
|
|
52
|
+
: static_cast<Event_value>(-1);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @brief Constructor.
|
|
56
|
+
*
|
|
57
|
+
* @param birth Birth value of the cycle. Default value: @ref inf.
|
|
58
|
+
* @param death Death value of the cycle. Default value: @ref inf.
|
|
59
|
+
* @param dim Dimension of the cycle. Default value: -1.
|
|
60
|
+
*/
|
|
61
|
+
Persistence_interval(Event_value birth = inf, Event_value death = inf, Dimension dim = -1)
|
|
62
|
+
: dim(dim), birth(birth), death(death) {}
|
|
63
|
+
|
|
64
|
+
Dimension dim; /**< Dimension of the cycle.*/
|
|
65
|
+
Event_value birth; /**< Birth value of the cycle. */
|
|
66
|
+
Event_value death; /**< Death value of the cycle. */
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @brief operator<<
|
|
70
|
+
*
|
|
71
|
+
* @param stream outstream
|
|
72
|
+
* @param interval interval to stream
|
|
73
|
+
*/
|
|
74
|
+
inline friend std::ostream& operator<<(std::ostream& stream, const Persistence_interval& interval) {
|
|
75
|
+
stream << "[" << interval.dim << "] ";
|
|
76
|
+
if constexpr (std::numeric_limits<Event_value>::has_infinity) {
|
|
77
|
+
stream << interval.birth << " - " << interval.death;
|
|
78
|
+
} else {
|
|
79
|
+
if (interval.birth == inf)
|
|
80
|
+
stream << "inf";
|
|
81
|
+
else
|
|
82
|
+
stream << interval.birth;
|
|
83
|
+
stream << " - ";
|
|
84
|
+
if (interval.death == inf)
|
|
85
|
+
stream << "inf";
|
|
86
|
+
else
|
|
87
|
+
stream << interval.death;
|
|
88
|
+
}
|
|
89
|
+
return stream;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
94
|
+
*
|
|
95
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
96
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
97
|
+
*/
|
|
98
|
+
template <std::size_t I>
|
|
99
|
+
constexpr auto& get() & noexcept {
|
|
100
|
+
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
101
|
+
|
|
102
|
+
if constexpr (I == 0) return birth;
|
|
103
|
+
if constexpr (I == 1) return death;
|
|
104
|
+
if constexpr (I == 2) return dim;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
109
|
+
*
|
|
110
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
111
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
112
|
+
*/
|
|
113
|
+
template <std::size_t I>
|
|
114
|
+
constexpr const auto& get() const& noexcept {
|
|
115
|
+
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
116
|
+
|
|
117
|
+
if constexpr (I == 0) return birth;
|
|
118
|
+
if constexpr (I == 1) return death;
|
|
119
|
+
if constexpr (I == 2) return dim;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
124
|
+
*
|
|
125
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
126
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
127
|
+
*/
|
|
128
|
+
template <std::size_t I>
|
|
129
|
+
constexpr auto&& get() && noexcept {
|
|
130
|
+
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
131
|
+
|
|
132
|
+
if constexpr (I == 0) return std::move(birth);
|
|
133
|
+
if constexpr (I == 1) return std::move(death);
|
|
134
|
+
if constexpr (I == 2) return std::move(dim);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @brief Specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
139
|
+
*
|
|
140
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
141
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
142
|
+
*/
|
|
143
|
+
template <std::size_t I>
|
|
144
|
+
constexpr const auto&& get() const&& noexcept {
|
|
145
|
+
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
146
|
+
|
|
147
|
+
if constexpr (I == 0) return std::move(birth);
|
|
148
|
+
if constexpr (I == 1) return std::move(death);
|
|
149
|
+
if constexpr (I == 2) return std::move(dim);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
} // namespace persistence_matrix
|
|
154
|
+
} // namespace Gudhi
|
|
155
|
+
|
|
156
|
+
namespace std {
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @ingroup persistence_matrix
|
|
160
|
+
*
|
|
161
|
+
* @brief Partial specialization of `std::tuple_size` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
162
|
+
*
|
|
163
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
164
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
165
|
+
*/
|
|
166
|
+
template <typename Dimension, typename Event_value>
|
|
167
|
+
struct tuple_size<Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> >
|
|
168
|
+
: integral_constant<size_t, 3> {};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @ingroup persistence_matrix
|
|
172
|
+
*
|
|
173
|
+
* @brief Partial specialization of `std::tuple_element` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
174
|
+
*
|
|
175
|
+
* @tparam I Index of the type to store: 0 for the birth value type, 1 for the death value type and 2 for the
|
|
176
|
+
* dimension value type.
|
|
177
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
178
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
179
|
+
*/
|
|
180
|
+
template <size_t I, typename Dimension, typename Event_value>
|
|
181
|
+
struct tuple_element<I, Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> > {
|
|
182
|
+
static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
|
|
183
|
+
|
|
184
|
+
using type = typename conditional <I < 2, Event_value, Dimension>::type;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @ingroup persistence_matrix
|
|
189
|
+
*
|
|
190
|
+
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
191
|
+
*
|
|
192
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
193
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
194
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
195
|
+
* @param i Interval from which the value should be returned.
|
|
196
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
197
|
+
*/
|
|
198
|
+
template <size_t I, typename Dimension, typename Event_value>
|
|
199
|
+
constexpr auto& get(Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>& i) noexcept {
|
|
200
|
+
return i.template get<I>();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @ingroup persistence_matrix
|
|
205
|
+
*
|
|
206
|
+
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
207
|
+
*
|
|
208
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
209
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
210
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
211
|
+
* @param i Interval from which the value should be returned.
|
|
212
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
213
|
+
*/
|
|
214
|
+
template <size_t I, typename Dimension, typename Event_value>
|
|
215
|
+
constexpr const auto& get(const Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>& i) noexcept {
|
|
216
|
+
return i.template get<I>();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @ingroup persistence_matrix
|
|
221
|
+
*
|
|
222
|
+
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
223
|
+
*
|
|
224
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
225
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
226
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
227
|
+
* @param i Interval from which the value should be returned.
|
|
228
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
229
|
+
*/
|
|
230
|
+
template <size_t I, typename Dimension, typename Event_value>
|
|
231
|
+
constexpr auto&& get(Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>&& i) noexcept {
|
|
232
|
+
return std::move(i).template get<I>();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @ingroup persistence_matrix
|
|
237
|
+
*
|
|
238
|
+
* @brief Partial specialization of `get` for @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
239
|
+
*
|
|
240
|
+
* @tparam I Index of the value to return: 0 for the birth value, 1 for the death value and 2 for the dimension.
|
|
241
|
+
* @tparam Dimension First template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
242
|
+
* @tparam Event_value Second template parameter of @ref Gudhi::persistence_matrix::Persistence_interval.
|
|
243
|
+
* @param i Interval from which the value should be returned.
|
|
244
|
+
* @return Either the birth value if @p I == 0, the death value if @p I == 1 or the dimension if @p I == 2.
|
|
245
|
+
*/
|
|
246
|
+
template <size_t I, typename Dimension, typename Event_value>
|
|
247
|
+
constexpr const auto&& get(const Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value>&& i) noexcept {
|
|
248
|
+
return std::move(i).template get<I>();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
} // namespace std
|
|
252
|
+
|
|
253
|
+
#endif // PM_INTERVAL_INCLUDED
|