multipers 2.2.3__cp310-cp310-win_amd64.whl → 2.3.0__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.

Files changed (182) hide show
  1. multipers/__init__.py +33 -31
  2. multipers/_signed_measure_meta.py +430 -430
  3. multipers/_slicer_meta.py +211 -212
  4. multipers/data/MOL2.py +458 -458
  5. multipers/data/UCR.py +18 -18
  6. multipers/data/graphs.py +466 -466
  7. multipers/data/immuno_regions.py +27 -27
  8. multipers/data/pytorch2simplextree.py +90 -90
  9. multipers/data/shape3d.py +101 -101
  10. multipers/data/synthetic.py +113 -111
  11. multipers/distances.py +198 -198
  12. multipers/filtration_conversions.pxd.tp +84 -84
  13. multipers/filtrations/__init__.py +18 -0
  14. multipers/filtrations/filtrations.py +289 -0
  15. multipers/filtrations.pxd +224 -224
  16. multipers/function_rips.cp310-win_amd64.pyd +0 -0
  17. multipers/function_rips.pyx +105 -105
  18. multipers/grids.cp310-win_amd64.pyd +0 -0
  19. multipers/grids.pyx +350 -350
  20. multipers/gudhi/Persistence_slices_interface.h +132 -132
  21. multipers/gudhi/Simplex_tree_interface.h +239 -245
  22. multipers/gudhi/Simplex_tree_multi_interface.h +516 -561
  23. multipers/gudhi/cubical_to_boundary.h +59 -59
  24. multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -450
  25. multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -1070
  26. multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -579
  27. multipers/gudhi/gudhi/Debug_utils.h +45 -45
  28. multipers/gudhi/gudhi/Fields/Multi_field.h +484 -484
  29. multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -455
  30. multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -450
  31. multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -531
  32. multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -507
  33. multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -531
  34. multipers/gudhi/gudhi/Fields/Z2_field.h +355 -355
  35. multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -376
  36. multipers/gudhi/gudhi/Fields/Zp_field.h +420 -420
  37. multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -400
  38. multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -418
  39. multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -337
  40. multipers/gudhi/gudhi/Matrix.h +2107 -2107
  41. multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -1038
  42. multipers/gudhi/gudhi/Multi_persistence/Box.h +171 -171
  43. multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -282
  44. multipers/gudhi/gudhi/Off_reader.h +173 -173
  45. multipers/gudhi/gudhi/One_critical_filtration.h +1432 -1431
  46. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -769
  47. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -686
  48. multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -842
  49. multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -1350
  50. multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -1105
  51. multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -859
  52. multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -910
  53. multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -139
  54. multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -230
  55. multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -211
  56. multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -60
  57. multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -60
  58. multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -136
  59. multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -190
  60. multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -616
  61. multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -150
  62. multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -106
  63. multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -219
  64. multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -327
  65. multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -1140
  66. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -934
  67. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -934
  68. multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -980
  69. multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -1092
  70. multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -192
  71. multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -921
  72. multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -1093
  73. multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -1012
  74. multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -1244
  75. multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -186
  76. multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -164
  77. multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -156
  78. multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -376
  79. multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -540
  80. multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -118
  81. multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -173
  82. multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -128
  83. multipers/gudhi/gudhi/Persistent_cohomology.h +745 -745
  84. multipers/gudhi/gudhi/Points_off_io.h +171 -171
  85. multipers/gudhi/gudhi/Simple_object_pool.h +69 -69
  86. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -463
  87. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -83
  88. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -106
  89. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -277
  90. multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -62
  91. multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -27
  92. multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -62
  93. multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -157
  94. multipers/gudhi/gudhi/Simplex_tree.h +2794 -2794
  95. multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -163
  96. multipers/gudhi/gudhi/distance_functions.h +62 -62
  97. multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -104
  98. multipers/gudhi/gudhi/persistence_interval.h +253 -253
  99. multipers/gudhi/gudhi/persistence_matrix_options.h +170 -170
  100. multipers/gudhi/gudhi/reader_utils.h +367 -367
  101. multipers/gudhi/mma_interface_coh.h +256 -255
  102. multipers/gudhi/mma_interface_h0.h +223 -231
  103. multipers/gudhi/mma_interface_matrix.h +284 -282
  104. multipers/gudhi/naive_merge_tree.h +536 -575
  105. multipers/gudhi/scc_io.h +310 -289
  106. multipers/gudhi/truc.h +890 -888
  107. multipers/io.cp310-win_amd64.pyd +0 -0
  108. multipers/io.pyx +711 -711
  109. multipers/ml/accuracies.py +90 -90
  110. multipers/ml/convolutions.py +520 -520
  111. multipers/ml/invariants_with_persistable.py +79 -79
  112. multipers/ml/kernels.py +176 -176
  113. multipers/ml/mma.py +713 -714
  114. multipers/ml/one.py +472 -472
  115. multipers/ml/point_clouds.py +352 -346
  116. multipers/ml/signed_measures.py +1589 -1589
  117. multipers/ml/sliced_wasserstein.py +461 -461
  118. multipers/ml/tools.py +113 -113
  119. multipers/mma_structures.cp310-win_amd64.pyd +0 -0
  120. multipers/mma_structures.pxd +127 -127
  121. multipers/mma_structures.pyx +4 -4
  122. multipers/mma_structures.pyx.tp +1085 -1085
  123. multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -93
  124. multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -97
  125. multipers/multi_parameter_rank_invariant/function_rips.h +322 -322
  126. multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -769
  127. multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -148
  128. multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -369
  129. multipers/multiparameter_edge_collapse.py +41 -41
  130. multipers/multiparameter_module_approximation/approximation.h +2296 -2295
  131. multipers/multiparameter_module_approximation/combinatory.h +129 -129
  132. multipers/multiparameter_module_approximation/debug.h +107 -107
  133. multipers/multiparameter_module_approximation/format_python-cpp.h +286 -286
  134. multipers/multiparameter_module_approximation/heap_column.h +238 -238
  135. multipers/multiparameter_module_approximation/images.h +79 -79
  136. multipers/multiparameter_module_approximation/list_column.h +174 -174
  137. multipers/multiparameter_module_approximation/list_column_2.h +232 -232
  138. multipers/multiparameter_module_approximation/ru_matrix.h +347 -347
  139. multipers/multiparameter_module_approximation/set_column.h +135 -135
  140. multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -36
  141. multipers/multiparameter_module_approximation/unordered_set_column.h +166 -166
  142. multipers/multiparameter_module_approximation/utilities.h +403 -419
  143. multipers/multiparameter_module_approximation/vector_column.h +223 -223
  144. multipers/multiparameter_module_approximation/vector_matrix.h +331 -331
  145. multipers/multiparameter_module_approximation/vineyards.h +464 -464
  146. multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -649
  147. multipers/multiparameter_module_approximation.cp310-win_amd64.pyd +0 -0
  148. multipers/multiparameter_module_approximation.pyx +216 -217
  149. multipers/pickle.py +90 -53
  150. multipers/plots.py +342 -334
  151. multipers/point_measure.cp310-win_amd64.pyd +0 -0
  152. multipers/point_measure.pyx +322 -320
  153. multipers/simplex_tree_multi.cp310-win_amd64.pyd +0 -0
  154. multipers/simplex_tree_multi.pxd +133 -133
  155. multipers/simplex_tree_multi.pyx +18 -15
  156. multipers/simplex_tree_multi.pyx.tp +1939 -1935
  157. multipers/slicer.cp310-win_amd64.pyd +0 -0
  158. multipers/slicer.pxd +81 -20
  159. multipers/slicer.pxd.tp +215 -214
  160. multipers/slicer.pyx +1091 -308
  161. multipers/slicer.pyx.tp +924 -914
  162. multipers/tensor/tensor.h +672 -672
  163. multipers/tensor.pxd +13 -13
  164. multipers/test.pyx +44 -44
  165. multipers/tests/__init__.py +57 -57
  166. multipers/torch/diff_grids.py +217 -217
  167. multipers/torch/rips_density.py +310 -304
  168. {multipers-2.2.3.dist-info → multipers-2.3.0.dist-info}/LICENSE +21 -21
  169. {multipers-2.2.3.dist-info → multipers-2.3.0.dist-info}/METADATA +21 -11
  170. multipers-2.3.0.dist-info/RECORD +182 -0
  171. multipers/tests/test_diff_helper.py +0 -73
  172. multipers/tests/test_hilbert_function.py +0 -82
  173. multipers/tests/test_mma.py +0 -83
  174. multipers/tests/test_point_clouds.py +0 -49
  175. multipers/tests/test_python-cpp_conversion.py +0 -82
  176. multipers/tests/test_signed_betti.py +0 -181
  177. multipers/tests/test_signed_measure.py +0 -89
  178. multipers/tests/test_simplextreemulti.py +0 -221
  179. multipers/tests/test_slicer.py +0 -221
  180. multipers-2.2.3.dist-info/RECORD +0 -189
  181. {multipers-2.2.3.dist-info → multipers-2.3.0.dist-info}/WHEEL +0 -0
  182. {multipers-2.2.3.dist-info → multipers-2.3.0.dist-info}/top_level.txt +0 -0
multipers/slicer.pxd.tp CHANGED
@@ -1,214 +1,215 @@
1
- {{py:
2
- """
3
- Vine and non-vine slicers.
4
- both type have the same interface, defined the slicer.pyx file
5
- """
6
-
7
- ## generation with another file as Tempita is slightly bugged for python <3.12
8
- import pickle
9
- with open("build/tmp/_slicer_names.pkl", "rb") as f:
10
- slicers = pickle.load(f)
11
-
12
- # TODO: FIXME. This is not possible as the import is hardcoded as f32 and f64.
13
- # float_value_types = set([(D['C_VALUE_TYPE'],D['PY_VALUE_TYPE'],D['SHORT_VALUE_TYPE']) for D in slicers if D['IS_FLOAT']])
14
-
15
- float_value_types = set((("float", "np.float32", "f32"), ("double", "np.float64", "f64")) )
16
-
17
-
18
- }}
19
-
20
- cimport numpy as cnp
21
-
22
- # SequentialDataset and its two concrete subclasses are (optionally randomized)
23
- # iterators over the rows of a matrix X and corresponding target values y.
24
-
25
- from libcpp.utility cimport pair
26
- from libcpp cimport bool, int, float
27
- from libcpp.vector cimport vector
28
-
29
-
30
- from libc.stdint cimport intptr_t, uint16_t, uint32_t, int32_t, uint64_t, int64_t
31
- from cython cimport uint
32
-
33
- import numpy as np
34
- python_value_type=np.float32
35
- from libcpp.string cimport string
36
-
37
- cdef extern from "Simplex_tree_multi_interface.h" namespace "Gudhi::multiparameter::python_interface":
38
- cdef cppclass Simplex_tree_multi_interface[F=*, value_type=*]:
39
- pass
40
-
41
- from multipers.filtrations cimport *
42
- ctypedef vector[uint] cycle_type ## its the cycle type of matrix
43
-
44
-
45
- {{for D in slicers}}
46
-
47
- #------------------------------------------------------------------------------
48
- cdef extern from "Persistence_slices_interface.h":
49
- cdef cppclass {{D['C_TEMPLATE_TYPE']}} "{{D['TRUC_TYPE']}}":
50
- ctypedef {{D['C_VALUE_TYPE']}} value_type
51
-
52
- {{D['C_TEMPLATE_TYPE']}}()
53
-
54
- {{if D['IS_SIMPLICIAL']}}
55
- {{D['C_TEMPLATE_TYPE']}}(Simplex_tree_multi_interface[{{D['FILTRATION_TYPE']}}, {{D['C_VALUE_TYPE']}}]*)
56
- {{else}}
57
- {{D['C_TEMPLATE_TYPE']}}(const vector[vector[unsigned int]]&, const vector[int]&, const vector[{{D['FILTRATION_TYPE']}}]&)
58
- {{endif}}
59
-
60
- {{D['C_TEMPLATE_TYPE']}}& operator=(const {{D['C_TEMPLATE_TYPE']}}&)
61
- vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]] get_barcode() nogil
62
- void push_to(const Line[{{D['C_VALUE_TYPE']}}]&) nogil
63
- void set_one_filtration(const vector[{{D['C_VALUE_TYPE']}}]&) nogil
64
- int prune_above_dimension(int) except + nogil
65
-
66
- vector[{{D['C_VALUE_TYPE']}}] get_one_filtration()
67
- # void compute_persistence(vector[bool]) except+ nogil
68
- void compute_persistence(bool) except+ nogil # ignore_inf
69
- void compute_persistence() except+ nogil # ignore_inf
70
- uint32_t num_generators() nogil
71
- uint32_t num_parameters() nogil
72
- string to_str() nogil
73
- pair[One_critical_filtration[{{D['C_VALUE_TYPE']}}], One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_bounding_box() except + nogil
74
- vector[One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_filtration_values() nogil
75
- vector[int] get_dimensions() nogil
76
- vector[vector[uint]] get_boundaries() nogil
77
- void coarsen_on_grid_inplace(vector[vector[{{D['C_VALUE_TYPE']}}]], bool) nogil
78
- vector[{{D['FILTRATION_TYPE']}}]& get_filtrations() nogil
79
- {{if D['COLUMN_TYPE'] is not None}}
80
- {{D['C_TEMPLATE_TYPE'][:-3]+"i32"}} coarsen_on_grid(vector[vector[{{D['C_VALUE_TYPE']}}]]) nogil
81
- {{endif}}
82
- {{if D['IS_VINE']}}
83
- void vineyard_update() nogil
84
- vector[vector[vector[vector[unsigned int]]]] get_representative_cycles(bool, bool) nogil
85
- vector[uint32_t] get_current_order() nogil
86
- {{endif}}
87
-
88
- {{if D['IS_KCRITICAL']}}
89
- void add_generator(const One_critical_filtration[{{D['C_VALUE_TYPE']}}] &) nogil
90
- {{endif}}
91
-
92
- {{if not D['IS_KCRITICAL']}}
93
- void build_from_scc_file(const string&, bool, bool, int) except + nogil
94
- void write_to_scc_file(const string&, int, int, bool, bool, bool, bool) nogil
95
- {{endif}}
96
-
97
-
98
- vector[vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]]] persistence_on_lines(vector[vector[{{D['C_VALUE_TYPE']}}]]) nogil
99
- vector[vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]]] persistence_on_lines(vector[pair[vector[{{D['C_VALUE_TYPE']}}],vector[{{D['C_VALUE_TYPE']}}]]]) nogil
100
- {{endfor}}
101
-
102
-
103
-
104
- #### MMA Stuff
105
-
106
- from multipers.mma_structures cimport Module
107
- cdef extern from "multiparameter_module_approximation/approximation.h" namespace "Gudhi::multiparameter::mma":
108
- {{for D in slicers}}
109
- {{if D['IS_VINE'] and D['IS_FLOAT']}}
110
- Module[{{D['C_VALUE_TYPE']}}] multiparameter_module_approximation({{D['C_TEMPLATE_TYPE']}}&, One_critical_filtration[{{D['C_VALUE_TYPE']}}]&, {{D['C_VALUE_TYPE']}}, Box[{{D['C_VALUE_TYPE']}}]&, bool, bool, bool) except + nogil
111
- {{endif}}
112
- {{endfor}}
113
-
114
-
115
-
116
-
117
- import multipers.slicer as mps
118
- from cython.operator cimport dereference
119
- {{for C_VALUE_TYPE,PYTHON_VALUE_TYPE,SHORT_VALUE_TYPE in float_value_types}}
120
- cdef inline Module[{{C_VALUE_TYPE}}] _multiparameter_module_approximation_{{SHORT_VALUE_TYPE}}(object slicer, One_critical_filtration[{{C_VALUE_TYPE}}] direction, {{C_VALUE_TYPE}} max_error, Box[{{C_VALUE_TYPE}}] box, bool threshold, bool complete, bool verbose):
121
- import multipers.slicer as mps
122
- cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
123
- cdef Module[{{C_VALUE_TYPE}}] mod
124
- if False:
125
- pass
126
- {{for D in slicers}}
127
- {{if D['IS_VINE'] and D['SHORT_VALUE_TYPE'] == SHORT_VALUE_TYPE}}
128
- elif isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
129
- with nogil:
130
- mod = multiparameter_module_approximation(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
131
- return mod
132
- {{endif}}
133
- {{endfor}}
134
- else:
135
- raise ValueError(f"Unsupported slicer type {type(slicer)}")
136
- {{endfor}}
137
-
138
- ###### RANK INVARIANT
139
- from libc.stdint cimport intptr_t, uint16_t, uint32_t, int32_t, int16_t, int8_t
140
- ctypedef int32_t tensor_dtype
141
- ctypedef int32_t indices_type
142
- python_indices_type=np.int32
143
- python_tensor_dtype = np.int32
144
-
145
-
146
-
147
- ctypedef pair[vector[vector[indices_type]], vector[tensor_dtype]] signed_measure_type
148
-
149
-
150
-
151
- cdef extern from "multi_parameter_rank_invariant/rank_invariant.h" namespace "Gudhi::multiparameter::rank_invariant":
152
- ## from slicers
153
- {{for D in slicers}}
154
- void compute_rank_invariant_python({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], indices_type, bool ignore_inf) except + nogil
155
- signed_measure_type compute_rank_signed_measure({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], indices_type, bool verbose, bool ignore_inf) except + nogil
156
- {{endfor}}
157
-
158
-
159
-
160
-
161
-
162
- cdef inline void _compute_rank_invariant(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool ignore_inf):
163
- import multipers.slicer as mps
164
- cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
165
- {{for D in slicers}}
166
- if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
167
- with nogil:
168
- compute_rank_invariant_python(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs,ignore_inf)
169
- return
170
- {{endfor}}
171
- raise ValueError(f"Unsupported slicer type {type(slicer)}")
172
-
173
-
174
-
175
- cdef inline _compute_rank_sm(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool verbose, bool ignore_inf):
176
- import multipers.slicer as mps
177
- cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
178
- cdef signed_measure_type sm
179
- cdef cnp.ndarray[indices_type, ndim=2] pts
180
- cdef cnp.ndarray[tensor_dtype, ndim=1] weights
181
- {{for D in slicers}}
182
- if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
183
- with nogil:
184
- sm = compute_rank_signed_measure(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs, verbose, ignore_inf)
185
- pts = np.asarray(sm.first,dtype=python_indices_type)
186
- weights = np.asarray(sm.second,dtype=python_tensor_dtype)
187
- return (pts,weights)
188
- {{endfor}}
189
- raise ValueError(f"Unsupported slicer type {type(slicer)}")
190
-
191
-
192
-
193
- #### Hilbert Function
194
-
195
- cdef extern from "multi_parameter_rank_invariant/hilbert_function.h" namespace "Gudhi::multiparameter::hilbert_function":
196
- ## from slicers
197
- {{for D in slicers}}
198
- signed_measure_type get_hilbert_signed_measure({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], bool zero_pad,indices_type n_jobs, bool verbose, bool ignore_inf) except + nogil
199
- {{endfor}}
200
- cdef inline _compute_hilbert_sm(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool verbose,bool zero_pad, bool ignore_inf):
201
- import multipers.slicer as mps
202
- cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
203
- cdef signed_measure_type sm
204
- cdef cnp.ndarray[indices_type, ndim=2] pts
205
- cdef cnp.ndarray[tensor_dtype, ndim=1] weights
206
- {{for D in slicers}}
207
- if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
208
- with nogil:
209
- sm = get_hilbert_signed_measure(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, zero_pad, n_jobs, verbose, ignore_inf)
210
- pts = np.asarray(sm.first,dtype=python_indices_type)
211
- weights = np.asarray(sm.second,dtype=python_tensor_dtype)
212
- return (pts,weights)
213
- {{endfor}}
214
- raise ValueError(f"Unsupported slicer type {type(slicer)}")
1
+ {{py:
2
+ """
3
+ Vine and non-vine slicers.
4
+ both type have the same interface, defined the slicer.pyx file
5
+ """
6
+
7
+ ## generation with another file as Tempita is slightly bugged for python <3.12
8
+ import pickle
9
+ with open("build/tmp/_slicer_names.pkl", "rb") as f:
10
+ slicers = pickle.load(f)
11
+
12
+ # TODO: FIXME. This is not possible as the import is hardcoded as f32 and f64.
13
+ # float_value_types = set([(D['C_VALUE_TYPE'],D['PY_VALUE_TYPE'],D['SHORT_VALUE_TYPE']) for D in slicers if D['IS_FLOAT']])
14
+
15
+ float_value_types = set((("float", "np.float32", "f32"), ("double", "np.float64", "f64")) )
16
+
17
+
18
+ }}
19
+
20
+ cimport numpy as cnp
21
+
22
+ # SequentialDataset and its two concrete subclasses are (optionally randomized)
23
+ # iterators over the rows of a matrix X and corresponding target values y.
24
+
25
+ from libcpp.utility cimport pair
26
+ from libcpp cimport bool, int, float
27
+ from libcpp.vector cimport vector
28
+
29
+
30
+ from libc.stdint cimport intptr_t, uint16_t, uint32_t, int32_t, uint64_t, int64_t
31
+ from cython cimport uint
32
+
33
+ import numpy as np
34
+ python_value_type=np.float32
35
+ from libcpp.string cimport string
36
+
37
+ cdef extern from "Simplex_tree_multi_interface.h" namespace "Gudhi::multiparameter::python_interface":
38
+ cdef cppclass Simplex_tree_multi_interface[F=*, value_type=*]:
39
+ pass
40
+
41
+ from multipers.filtrations cimport *
42
+ ctypedef vector[uint] cycle_type ## its the cycle type of matrix
43
+
44
+
45
+ {{for D in slicers}}
46
+
47
+ #------------------------------------------------------------------------------
48
+ cdef extern from "Persistence_slices_interface.h":
49
+ cdef cppclass {{D['C_TEMPLATE_TYPE']}} "{{D['TRUC_TYPE']}}":
50
+ ctypedef {{D['C_VALUE_TYPE']}} value_type
51
+
52
+ {{D['C_TEMPLATE_TYPE']}}()
53
+
54
+ {{if D['IS_SIMPLICIAL']}}
55
+ {{D['C_TEMPLATE_TYPE']}}(Simplex_tree_multi_interface[{{D['FILTRATION_TYPE']}}, {{D['C_VALUE_TYPE']}}]*)
56
+ {{else}}
57
+ {{D['C_TEMPLATE_TYPE']}}(const vector[vector[unsigned int]]&, const vector[int]&, const vector[{{D['FILTRATION_TYPE']}}]&)
58
+ {{endif}}
59
+
60
+ {{D['C_TEMPLATE_TYPE']}}& operator=(const {{D['C_TEMPLATE_TYPE']}}&)
61
+ vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]] get_barcode() nogil
62
+ void push_to(const Line[{{D['C_VALUE_TYPE']}}]&) nogil
63
+ void set_one_filtration(const vector[{{D['C_VALUE_TYPE']}}]&) nogil
64
+ int prune_above_dimension(int) except + nogil
65
+
66
+ vector[{{D['C_VALUE_TYPE']}}] get_one_filtration()
67
+ # void compute_persistence(vector[bool]) except+ nogil
68
+ void compute_persistence(bool) except+ nogil # ignore_inf
69
+ void compute_persistence() except+ nogil # ignore_inf
70
+ uint32_t num_generators() nogil
71
+ uint32_t num_parameters() nogil
72
+ string to_str() nogil
73
+ pair[One_critical_filtration[{{D['C_VALUE_TYPE']}}], One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_bounding_box() except + nogil
74
+ vector[One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_filtration_values() nogil
75
+ vector[int] get_dimensions() nogil
76
+ vector[vector[uint]] get_boundaries() nogil
77
+ void coarsen_on_grid_inplace(vector[vector[{{D['C_VALUE_TYPE']}}]], bool) nogil
78
+ vector[{{D['FILTRATION_TYPE']}}]& get_filtrations() nogil
79
+ {{if D['COLUMN_TYPE'] is not None}}
80
+ {{D['C_TEMPLATE_TYPE'][:-3]+"i32"}} coarsen_on_grid(vector[vector[{{D['C_VALUE_TYPE']}}]]) nogil
81
+ {{endif}}
82
+ {{if D['IS_VINE']}}
83
+ void vineyard_update() nogil
84
+ vector[vector[vector[vector[unsigned int]]]] get_representative_cycles(bool, bool) nogil
85
+ vector[uint32_t] get_current_order() nogil
86
+ {{endif}}
87
+
88
+ {{if D['IS_KCRITICAL']}}
89
+ void add_generator(const One_critical_filtration[{{D['C_VALUE_TYPE']}}] &) nogil
90
+ {{endif}}
91
+
92
+ void write_to_scc_file(const string&, int, int, bool, bool, bool, bool) nogil
93
+ {{if not D['IS_KCRITICAL']}}
94
+ void build_from_scc_file(const string&, bool, bool, int) except + nogil
95
+ {{endif}}
96
+
97
+
98
+ vector[vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]]] persistence_on_lines(vector[vector[{{D['C_VALUE_TYPE']}}]]) nogil
99
+ vector[vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]]] persistence_on_lines(vector[pair[vector[{{D['C_VALUE_TYPE']}}],vector[{{D['C_VALUE_TYPE']}}]]]) nogil
100
+ {{endfor}}
101
+
102
+
103
+
104
+ #### MMA Stuff
105
+
106
+ from multipers.mma_structures cimport Module
107
+ cdef extern from "multiparameter_module_approximation/approximation.h" namespace "Gudhi::multiparameter::mma":
108
+ {{for D in slicers}}
109
+ {{if D['IS_VINE'] and D['IS_FLOAT']}}
110
+ Module[{{D['C_VALUE_TYPE']}}] multiparameter_module_approximation({{D['C_TEMPLATE_TYPE']}}&, One_critical_filtration[{{D['C_VALUE_TYPE']}}]&, {{D['C_VALUE_TYPE']}}, Box[{{D['C_VALUE_TYPE']}}]&, bool, bool, bool) except + nogil
111
+ {{endif}}
112
+ {{endfor}}
113
+ pass
114
+
115
+
116
+
117
+
118
+ import multipers.slicer as mps
119
+ from cython.operator cimport dereference
120
+ {{for C_VALUE_TYPE,PYTHON_VALUE_TYPE,SHORT_VALUE_TYPE in float_value_types}}
121
+ cdef inline Module[{{C_VALUE_TYPE}}] _multiparameter_module_approximation_{{SHORT_VALUE_TYPE}}(object slicer, One_critical_filtration[{{C_VALUE_TYPE}}] direction, {{C_VALUE_TYPE}} max_error, Box[{{C_VALUE_TYPE}}] box, bool threshold, bool complete, bool verbose):
122
+ import multipers.slicer as mps
123
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
124
+ cdef Module[{{C_VALUE_TYPE}}] mod
125
+ if False:
126
+ pass
127
+ {{for D in slicers}}
128
+ {{if D['IS_VINE'] and D['SHORT_VALUE_TYPE'] == SHORT_VALUE_TYPE}}
129
+ elif isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
130
+ with nogil:
131
+ mod = multiparameter_module_approximation(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
132
+ return mod
133
+ {{endif}}
134
+ {{endfor}}
135
+ else:
136
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
137
+ {{endfor}}
138
+
139
+ ###### RANK INVARIANT
140
+ from libc.stdint cimport intptr_t, uint16_t, uint32_t, int32_t, int16_t, int8_t
141
+ ctypedef int32_t tensor_dtype
142
+ ctypedef int32_t indices_type
143
+ python_indices_type=np.int32
144
+ python_tensor_dtype = np.int32
145
+
146
+
147
+
148
+ ctypedef pair[vector[vector[indices_type]], vector[tensor_dtype]] signed_measure_type
149
+
150
+
151
+
152
+ cdef extern from "multi_parameter_rank_invariant/rank_invariant.h" namespace "Gudhi::multiparameter::rank_invariant":
153
+ ## from slicers
154
+ {{for D in slicers}}
155
+ void compute_rank_invariant_python({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], indices_type, bool ignore_inf) except + nogil
156
+ signed_measure_type compute_rank_signed_measure({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], indices_type, bool verbose, bool ignore_inf) except + nogil
157
+ {{endfor}}
158
+
159
+
160
+
161
+
162
+
163
+ cdef inline void _compute_rank_invariant(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool ignore_inf):
164
+ import multipers.slicer as mps
165
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
166
+ {{for D in slicers}}
167
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
168
+ with nogil:
169
+ compute_rank_invariant_python(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs,ignore_inf)
170
+ return
171
+ {{endfor}}
172
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
173
+
174
+
175
+
176
+ cdef inline _compute_rank_sm(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool verbose, bool ignore_inf):
177
+ import multipers.slicer as mps
178
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
179
+ cdef signed_measure_type sm
180
+ cdef cnp.ndarray[indices_type, ndim=2] pts
181
+ cdef cnp.ndarray[tensor_dtype, ndim=1] weights
182
+ {{for D in slicers}}
183
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
184
+ with nogil:
185
+ sm = compute_rank_signed_measure(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs, verbose, ignore_inf)
186
+ pts = np.asarray(sm.first,dtype=python_indices_type)
187
+ weights = np.asarray(sm.second,dtype=python_tensor_dtype)
188
+ return (pts,weights)
189
+ {{endfor}}
190
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
191
+
192
+
193
+
194
+ #### Hilbert Function
195
+
196
+ cdef extern from "multi_parameter_rank_invariant/hilbert_function.h" namespace "Gudhi::multiparameter::hilbert_function":
197
+ ## from slicers
198
+ {{for D in slicers}}
199
+ signed_measure_type get_hilbert_signed_measure({{D['C_TEMPLATE_TYPE']}}&, tensor_dtype* , const vector[indices_type], const vector[indices_type], bool zero_pad,indices_type n_jobs, bool verbose, bool ignore_inf) except + nogil
200
+ {{endfor}}
201
+ cdef inline _compute_hilbert_sm(object slicer, tensor_dtype* container_ptr, vector[indices_type] c_grid_shape, vector[indices_type] degrees, int n_jobs, bool verbose,bool zero_pad, bool ignore_inf):
202
+ import multipers.slicer as mps
203
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
204
+ cdef signed_measure_type sm
205
+ cdef cnp.ndarray[indices_type, ndim=2] pts
206
+ cdef cnp.ndarray[tensor_dtype, ndim=1] weights
207
+ {{for D in slicers}}
208
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
209
+ with nogil:
210
+ sm = get_hilbert_signed_measure(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, zero_pad, n_jobs, verbose, ignore_inf)
211
+ pts = np.asarray(sm.first,dtype=python_indices_type)
212
+ weights = np.asarray(sm.second,dtype=python_tensor_dtype)
213
+ return (pts,weights)
214
+ {{endfor}}
215
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")