multipers 2.2.3__cp312-cp312-win_amd64.whl → 2.3.1__cp312-cp312-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.cp312-win_amd64.pyd +0 -0
- multipers/function_rips.pyx +105 -105
- multipers/grids.cp312-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.cp312-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.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
- multipers/point_measure.pyx +322 -320
- multipers/simplex_tree_multi.cp312-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.cp312-win_amd64.pyd +0 -0
- multipers/slicer.pxd +281 -100
- 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
multipers/_slicer_meta.py
CHANGED
|
@@ -1,212 +1,211 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
4
|
-
import numpy as np
|
|
5
|
-
|
|
6
|
-
import multipers.
|
|
7
|
-
|
|
8
|
-
from multipers.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
rblocks
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
for
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
- `multipers.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
None
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
st.
|
|
171
|
-
st.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
backend
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
return slicer
|
|
1
|
+
from copy import deepcopy
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
import multipers.slicer as mps
|
|
7
|
+
from multipers.simplex_tree_multi import is_simplextree_multi
|
|
8
|
+
from multipers.slicer import _column_type, _valid_dtype, _valid_pers_backend, is_slicer
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## TODO : maybe optimize this with cython
|
|
12
|
+
def _blocks2boundary_dimension_grades(
|
|
13
|
+
blocks,
|
|
14
|
+
filtration_type=np.float64,
|
|
15
|
+
num_parameters: int = -1,
|
|
16
|
+
inplace: bool = False,
|
|
17
|
+
is_kcritical: bool = False,
|
|
18
|
+
):
|
|
19
|
+
"""
|
|
20
|
+
Turns blocks, aka scc, into the input of non-simplicial slicers.
|
|
21
|
+
"""
|
|
22
|
+
if num_parameters < 0:
|
|
23
|
+
for b in blocks:
|
|
24
|
+
if len(b[0]) > 0:
|
|
25
|
+
if is_kcritical:
|
|
26
|
+
num_parameters = np.asarray(b[0][0]).shape[1]
|
|
27
|
+
else:
|
|
28
|
+
num_parameters = np.asarray(b[0]).shape[1]
|
|
29
|
+
break
|
|
30
|
+
if num_parameters < 0:
|
|
31
|
+
raise ValueError("Empty Filtration")
|
|
32
|
+
rblocks = blocks if inplace else deepcopy(blocks)
|
|
33
|
+
rblocks.reverse()
|
|
34
|
+
block_sizes = [len(b[0]) for b in rblocks]
|
|
35
|
+
S = np.cumsum([0, 0] + block_sizes)
|
|
36
|
+
if is_kcritical:
|
|
37
|
+
multifiltration = tuple(
|
|
38
|
+
stuff
|
|
39
|
+
for b in rblocks
|
|
40
|
+
for stuff in (b[0] if len(b[0]) > 0 else [np.empty((0, num_parameters))])
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
else:
|
|
44
|
+
multifiltration = np.concatenate(
|
|
45
|
+
tuple(
|
|
46
|
+
b[0] if len(b[0]) > 0 else np.empty((0, num_parameters))
|
|
47
|
+
for b in rblocks
|
|
48
|
+
),
|
|
49
|
+
dtype=filtration_type,
|
|
50
|
+
)
|
|
51
|
+
boundary = tuple(x + S[i] for i, b in enumerate(rblocks) for x in b[1])
|
|
52
|
+
dimensions = np.fromiter(
|
|
53
|
+
(i for i, b in enumerate(rblocks) for _ in range(len(b[0]))), dtype=int
|
|
54
|
+
)
|
|
55
|
+
return boundary, dimensions, multifiltration
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _slicer_from_simplextree(st, backend, vineyard):
|
|
59
|
+
if vineyard:
|
|
60
|
+
if backend == "matrix":
|
|
61
|
+
slicer = mps._SlicerVineSimplicial(st)
|
|
62
|
+
elif backend == "clement":
|
|
63
|
+
raise ValueError("This one takes a minpres")
|
|
64
|
+
elif backend == "graph":
|
|
65
|
+
slicer = mps._SlicerVineGraph(st)
|
|
66
|
+
else:
|
|
67
|
+
raise ValueError(f"Inimplemented backend {backend}.")
|
|
68
|
+
else:
|
|
69
|
+
if backend == "matrix":
|
|
70
|
+
slicer = mps._SlicerNoVineSimplicial(st)
|
|
71
|
+
elif backend == "clement":
|
|
72
|
+
raise ValueError("Clement is Vineyard")
|
|
73
|
+
elif backend == "graph":
|
|
74
|
+
raise ValueError("Graph is Vineyard")
|
|
75
|
+
else:
|
|
76
|
+
raise ValueError(f"Inimplemented backend {backend}.")
|
|
77
|
+
return slicer
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _slicer_from_blocks(
|
|
81
|
+
blocks,
|
|
82
|
+
pers_backend: _valid_pers_backend,
|
|
83
|
+
vineyard: bool,
|
|
84
|
+
is_kcritical: bool,
|
|
85
|
+
dtype: type,
|
|
86
|
+
col: _column_type,
|
|
87
|
+
):
|
|
88
|
+
boundary, dimensions, multifiltrations = _blocks2boundary_dimension_grades(
|
|
89
|
+
blocks,
|
|
90
|
+
inplace=False,
|
|
91
|
+
is_kcritical=is_kcritical,
|
|
92
|
+
)
|
|
93
|
+
slicer = mps.get_matrix_slicer(vineyard, is_kcritical, dtype, col, pers_backend)(
|
|
94
|
+
boundary, dimensions, multifiltrations
|
|
95
|
+
)
|
|
96
|
+
return slicer
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def Slicer(
|
|
100
|
+
st=None,
|
|
101
|
+
vineyard: Optional[bool] = None,
|
|
102
|
+
reduce: bool = False,
|
|
103
|
+
reduce_backend: Optional[str] = None,
|
|
104
|
+
dtype: Optional[_valid_dtype] = None,
|
|
105
|
+
kcritical: Optional[bool] = None,
|
|
106
|
+
column_type: Optional[_column_type] = None,
|
|
107
|
+
backend: Optional[_valid_pers_backend] = None,
|
|
108
|
+
max_dim: Optional[int] = None,
|
|
109
|
+
return_type_only: bool = False,
|
|
110
|
+
) -> mps.Slicer_type:
|
|
111
|
+
"""
|
|
112
|
+
Given a simplextree or blocks (a.k.a scc for python),
|
|
113
|
+
returns a structure that can compute persistence on line (or more)
|
|
114
|
+
slices, eventually vineyard update, etc.
|
|
115
|
+
|
|
116
|
+
This can be used to compute interval-decomposable module approximations
|
|
117
|
+
or signed measures, using, e.g.
|
|
118
|
+
- `multipers.module_approximation(this, *args)`
|
|
119
|
+
- `multipers.signed_measure(this, *args)`
|
|
120
|
+
|
|
121
|
+
Note : it is recommended and sometime required to apply
|
|
122
|
+
a minimal presentation before computing these functions !
|
|
123
|
+
`mp.slicer.minimal_presentation(slicer, *args, **kwargs)`
|
|
124
|
+
|
|
125
|
+
Input
|
|
126
|
+
-----
|
|
127
|
+
- st : SimplexTreeMulti or scc-like blocks or path to scc file
|
|
128
|
+
- backend: slicer backend, e.g, "matrix", "clement", "graph"
|
|
129
|
+
- vineyard: vineyard capable (may slow down computations if true)
|
|
130
|
+
Output
|
|
131
|
+
------
|
|
132
|
+
The corresponding slicer.
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
if is_slicer(st, allow_minpres=False) or is_simplextree_multi(st):
|
|
136
|
+
dtype = st.dtype if dtype is None else dtype
|
|
137
|
+
is_kcritical = st.is_kcritical if kcritical is None else kcritical
|
|
138
|
+
else:
|
|
139
|
+
dtype = np.float64 if dtype is None else dtype
|
|
140
|
+
is_kcritical = False if kcritical is None else kcritical
|
|
141
|
+
|
|
142
|
+
if is_slicer(st, allow_minpres=False):
|
|
143
|
+
vineyard = st.is_vine if vineyard is None else vineyard
|
|
144
|
+
column_type = st.col_type if column_type is None else column_type
|
|
145
|
+
backend = st.pers_backend if backend is None else backend
|
|
146
|
+
else:
|
|
147
|
+
vineyard = False if vineyard is None else vineyard
|
|
148
|
+
column_type = "INTRUSIVE_SET" if column_type is None else column_type
|
|
149
|
+
backend = "Matrix" if backend is None else backend
|
|
150
|
+
|
|
151
|
+
_Slicer = mps.get_matrix_slicer(
|
|
152
|
+
is_vineyard=vineyard,
|
|
153
|
+
is_k_critical=is_kcritical,
|
|
154
|
+
dtype=dtype,
|
|
155
|
+
col=column_type,
|
|
156
|
+
pers_backend=backend,
|
|
157
|
+
)
|
|
158
|
+
if return_type_only:
|
|
159
|
+
return _Slicer
|
|
160
|
+
if st is None:
|
|
161
|
+
return _Slicer()
|
|
162
|
+
elif mps.is_slicer(st):
|
|
163
|
+
max_dim_idx = (
|
|
164
|
+
None
|
|
165
|
+
if max_dim is None
|
|
166
|
+
else np.searchsorted(st.get_dimensions(), max_dim + 1)
|
|
167
|
+
)
|
|
168
|
+
slicer = _Slicer(
|
|
169
|
+
st.get_boundaries()[slice(None, max_dim_idx)],
|
|
170
|
+
st.get_dimensions()[slice(None, max_dim_idx)],
|
|
171
|
+
st.get_filtrations()[slice(None, max_dim_idx)],
|
|
172
|
+
)
|
|
173
|
+
if st.is_squeezed:
|
|
174
|
+
slicer.filtration_grid = st.filtration_grid
|
|
175
|
+
slicer.minpres_degree = st.minpres_degree
|
|
176
|
+
elif is_simplextree_multi(st) and backend == "Graph":
|
|
177
|
+
slicer = _slicer_from_simplextree(st, backend, vineyard)
|
|
178
|
+
if st.is_squeezed:
|
|
179
|
+
slicer.filtration_grid = st.filtration_grid
|
|
180
|
+
elif backend == "Graph":
|
|
181
|
+
raise ValueError(
|
|
182
|
+
"""
|
|
183
|
+
Graph is simplicial, incompatible with minpres.
|
|
184
|
+
You can try using `multipers.slicer.to_simplextree`."""
|
|
185
|
+
)
|
|
186
|
+
else:
|
|
187
|
+
filtration_grid = None
|
|
188
|
+
if max_dim is not None: # no test for simplex tree?
|
|
189
|
+
st.prune_above_dimension(max_dim)
|
|
190
|
+
if isinstance(st, str): # is_kcritical should be false
|
|
191
|
+
slicer = _Slicer()._build_from_scc_file(st)
|
|
192
|
+
else:
|
|
193
|
+
if is_simplextree_multi(st):
|
|
194
|
+
blocks = st._to_scc()
|
|
195
|
+
if st.is_squeezed:
|
|
196
|
+
filtration_grid = st.filtration_grid
|
|
197
|
+
else:
|
|
198
|
+
blocks = st
|
|
199
|
+
slicer = _slicer_from_blocks(
|
|
200
|
+
blocks, backend, vineyard, is_kcritical, dtype, column_type
|
|
201
|
+
)
|
|
202
|
+
if filtration_grid is not None:
|
|
203
|
+
slicer.filtration_grid = filtration_grid
|
|
204
|
+
if reduce:
|
|
205
|
+
slicer = mps.minimal_presentation(
|
|
206
|
+
slicer,
|
|
207
|
+
backend=reduce_backend,
|
|
208
|
+
slicer_backend=backend,
|
|
209
|
+
vineyard=vineyard,
|
|
210
|
+
)
|
|
211
|
+
return slicer
|