multipers 2.2.3__cp311-cp311-win_amd64.whl → 2.3.1__cp311-cp311-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/{ml/convolutions.py → filtrations/density.py} +563 -520
  15. multipers/filtrations/filtrations.py +289 -0
  16. multipers/filtrations.pxd +224 -224
  17. multipers/function_rips.cp311-win_amd64.pyd +0 -0
  18. multipers/function_rips.pyx +105 -105
  19. multipers/grids.cp311-win_amd64.pyd +0 -0
  20. multipers/grids.pyx +350 -350
  21. multipers/gudhi/Persistence_slices_interface.h +132 -132
  22. multipers/gudhi/Simplex_tree_interface.h +239 -245
  23. multipers/gudhi/Simplex_tree_multi_interface.h +516 -561
  24. multipers/gudhi/cubical_to_boundary.h +59 -59
  25. multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -450
  26. multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -1070
  27. multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -579
  28. multipers/gudhi/gudhi/Debug_utils.h +45 -45
  29. multipers/gudhi/gudhi/Fields/Multi_field.h +484 -484
  30. multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -455
  31. multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -450
  32. multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -531
  33. multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -507
  34. multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -531
  35. multipers/gudhi/gudhi/Fields/Z2_field.h +355 -355
  36. multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -376
  37. multipers/gudhi/gudhi/Fields/Zp_field.h +420 -420
  38. multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -400
  39. multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -418
  40. multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -337
  41. multipers/gudhi/gudhi/Matrix.h +2107 -2107
  42. multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -1038
  43. multipers/gudhi/gudhi/Multi_persistence/Box.h +171 -171
  44. multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -282
  45. multipers/gudhi/gudhi/Off_reader.h +173 -173
  46. multipers/gudhi/gudhi/One_critical_filtration.h +1433 -1431
  47. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -769
  48. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -686
  49. multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -842
  50. multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -1350
  51. multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -1105
  52. multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -859
  53. multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -910
  54. multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -139
  55. multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -230
  56. multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -211
  57. multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -60
  58. multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -60
  59. multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -136
  60. multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -190
  61. multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -616
  62. multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -150
  63. multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -106
  64. multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -219
  65. multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -327
  66. multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -1140
  67. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -934
  68. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -934
  69. multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -980
  70. multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -1092
  71. multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -192
  72. multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -921
  73. multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -1093
  74. multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -1012
  75. multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -1244
  76. multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -186
  77. multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -164
  78. multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -156
  79. multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -376
  80. multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -540
  81. multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -118
  82. multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -173
  83. multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -128
  84. multipers/gudhi/gudhi/Persistent_cohomology.h +745 -745
  85. multipers/gudhi/gudhi/Points_off_io.h +171 -171
  86. multipers/gudhi/gudhi/Simple_object_pool.h +69 -69
  87. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -463
  88. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -83
  89. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -106
  90. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -277
  91. multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -62
  92. multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -27
  93. multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -62
  94. multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -157
  95. multipers/gudhi/gudhi/Simplex_tree.h +2794 -2794
  96. multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -163
  97. multipers/gudhi/gudhi/distance_functions.h +62 -62
  98. multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -104
  99. multipers/gudhi/gudhi/persistence_interval.h +253 -253
  100. multipers/gudhi/gudhi/persistence_matrix_options.h +170 -170
  101. multipers/gudhi/gudhi/reader_utils.h +367 -367
  102. multipers/gudhi/mma_interface_coh.h +256 -255
  103. multipers/gudhi/mma_interface_h0.h +223 -231
  104. multipers/gudhi/mma_interface_matrix.h +291 -282
  105. multipers/gudhi/naive_merge_tree.h +536 -575
  106. multipers/gudhi/scc_io.h +310 -289
  107. multipers/gudhi/truc.h +957 -888
  108. multipers/io.cp311-win_amd64.pyd +0 -0
  109. multipers/io.pyx +714 -711
  110. multipers/ml/accuracies.py +90 -90
  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.cp311-win_amd64.pyd +0 -0
  120. multipers/mma_structures.pxd +127 -127
  121. multipers/mma_structures.pyx +4 -8
  122. multipers/mma_structures.pyx.tp +1083 -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 +2298 -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.cp311-win_amd64.pyd +0 -0
  148. multipers/multiparameter_module_approximation.pyx +218 -217
  149. multipers/pickle.py +90 -53
  150. multipers/plots.py +342 -334
  151. multipers/point_measure.cp311-win_amd64.pyd +0 -0
  152. multipers/point_measure.pyx +322 -320
  153. multipers/simplex_tree_multi.cp311-win_amd64.pyd +0 -0
  154. multipers/simplex_tree_multi.pxd +133 -133
  155. multipers/simplex_tree_multi.pyx +115 -48
  156. multipers/simplex_tree_multi.pyx.tp +1947 -1935
  157. multipers/slicer.cp311-win_amd64.pyd +0 -0
  158. multipers/slicer.pxd +301 -120
  159. multipers/slicer.pxd.tp +218 -214
  160. multipers/slicer.pyx +1570 -507
  161. multipers/slicer.pyx.tp +931 -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.1.dist-info}/LICENSE +21 -21
  169. {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/METADATA +21 -11
  170. multipers-2.3.1.dist-info/RECORD +182 -0
  171. {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/WHEEL +1 -1
  172. multipers/tests/test_diff_helper.py +0 -73
  173. multipers/tests/test_hilbert_function.py +0 -82
  174. multipers/tests/test_mma.py +0 -83
  175. multipers/tests/test_point_clouds.py +0 -49
  176. multipers/tests/test_python-cpp_conversion.py +0 -82
  177. multipers/tests/test_signed_betti.py +0 -181
  178. multipers/tests/test_signed_measure.py +0 -89
  179. multipers/tests/test_simplextreemulti.py +0 -221
  180. multipers/tests/test_slicer.py +0 -221
  181. multipers-2.2.3.dist-info/RECORD +0 -189
  182. {multipers-2.2.3.dist-info → multipers-2.3.1.dist-info}/top_level.txt +0 -0
multipers/slicer.pxd.tp CHANGED
@@ -1,214 +1,218 @@
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
+
62
+ {{D['C_TEMPLATE_TYPE']}} colexical_rearange() except + nogil
63
+
64
+ vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]] get_barcode() nogil
65
+ void push_to(const Line[{{D['C_VALUE_TYPE']}}]&) nogil
66
+ void set_one_filtration(const vector[{{D['C_VALUE_TYPE']}}]&) nogil
67
+ int prune_above_dimension(int) except + nogil
68
+
69
+ vector[{{D['C_VALUE_TYPE']}}] get_one_filtration()
70
+ # void compute_persistence(vector[bool]) except+ nogil
71
+ void compute_persistence(bool) except+ nogil # ignore_inf
72
+ void compute_persistence() except+ nogil # ignore_inf
73
+ uint32_t num_generators() nogil
74
+ uint32_t num_parameters() nogil
75
+ string to_str() nogil
76
+ pair[One_critical_filtration[{{D['C_VALUE_TYPE']}}], One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_bounding_box() except + nogil
77
+ vector[One_critical_filtration[{{D['C_VALUE_TYPE']}}]] get_filtration_values() nogil
78
+ vector[int] get_dimensions() nogil
79
+ vector[vector[uint]] get_boundaries() nogil
80
+ void coarsen_on_grid_inplace(vector[vector[{{D['C_VALUE_TYPE']}}]], bool) nogil
81
+ vector[{{D['FILTRATION_TYPE']}}]& get_filtrations() nogil
82
+ {{if D['COLUMN_TYPE'] is not None}}
83
+ {{D['C_TEMPLATE_TYPE'][:-3]+"i32"}} coarsen_on_grid(vector[vector[{{D['C_VALUE_TYPE']}}]]) nogil
84
+ {{endif}}
85
+ {{if D['IS_VINE']}}
86
+ void vineyard_update() nogil
87
+ vector[vector[vector[vector[unsigned int]]]] get_representative_cycles(bool, bool) nogil
88
+ vector[uint32_t] get_current_order() nogil
89
+ {{endif}}
90
+
91
+ {{if D['IS_KCRITICAL']}}
92
+ void add_generator(const One_critical_filtration[{{D['C_VALUE_TYPE']}}] &) nogil
93
+ {{endif}}
94
+
95
+ void write_to_scc_file(const string&, int, int, bool, bool, bool, bool) nogil
96
+ {{if not D['IS_KCRITICAL']}}
97
+ void build_from_scc_file(const string&, bool, bool, int) except + nogil
98
+ {{endif}}
99
+
100
+
101
+ vector[vector[vector[pair[{{D['C_VALUE_TYPE']}}, {{D['C_VALUE_TYPE']}}]]]] persistence_on_lines(vector[vector[{{D['C_VALUE_TYPE']}}]], bool) nogil
102
+ 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']}}]]],bool) nogil
103
+ {{endfor}}
104
+
105
+
106
+
107
+ #### MMA Stuff
108
+
109
+ from multipers.mma_structures cimport Module
110
+ cdef extern from "multiparameter_module_approximation/approximation.h" namespace "Gudhi::multiparameter::mma":
111
+ {{for D in slicers}}
112
+ {{if D['IS_VINE'] and D['IS_FLOAT']}}
113
+ 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
114
+ {{endif}}
115
+ {{endfor}}
116
+ pass
117
+
118
+
119
+
120
+
121
+ import multipers.slicer as mps
122
+ from cython.operator cimport dereference
123
+ {{for C_VALUE_TYPE,PYTHON_VALUE_TYPE,SHORT_VALUE_TYPE in float_value_types}}
124
+ 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):
125
+ import multipers.slicer as mps
126
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
127
+ cdef Module[{{C_VALUE_TYPE}}] mod
128
+ if False:
129
+ pass
130
+ {{for D in slicers}}
131
+ {{if D['IS_VINE'] and D['SHORT_VALUE_TYPE'] == SHORT_VALUE_TYPE}}
132
+ elif isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
133
+ with nogil:
134
+ mod = multiparameter_module_approximation(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
135
+ return mod
136
+ {{endif}}
137
+ {{endfor}}
138
+ else:
139
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
140
+ {{endfor}}
141
+
142
+ ###### RANK INVARIANT
143
+ from libc.stdint cimport intptr_t, uint16_t, uint32_t, int32_t, int16_t, int8_t
144
+ ctypedef int32_t tensor_dtype
145
+ ctypedef int32_t indices_type
146
+ python_indices_type=np.int32
147
+ python_tensor_dtype = np.int32
148
+
149
+
150
+
151
+ ctypedef pair[vector[vector[indices_type]], vector[tensor_dtype]] signed_measure_type
152
+
153
+
154
+
155
+ cdef extern from "multi_parameter_rank_invariant/rank_invariant.h" namespace "Gudhi::multiparameter::rank_invariant":
156
+ ## from slicers
157
+ {{for D in slicers}}
158
+ 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
159
+ 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
160
+ {{endfor}}
161
+
162
+
163
+
164
+
165
+
166
+ 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):
167
+ import multipers.slicer as mps
168
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
169
+ {{for D in slicers}}
170
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
171
+ with nogil:
172
+ compute_rank_invariant_python(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs,ignore_inf)
173
+ return
174
+ {{endfor}}
175
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
176
+
177
+
178
+
179
+ 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):
180
+ import multipers.slicer as mps
181
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
182
+ cdef signed_measure_type sm
183
+ cdef cnp.ndarray[indices_type, ndim=2] pts
184
+ cdef cnp.ndarray[tensor_dtype, ndim=1] weights
185
+ {{for D in slicers}}
186
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
187
+ with nogil:
188
+ sm = compute_rank_signed_measure(dereference(<{{D['C_TEMPLATE_TYPE']}}*>(slicer_ptr)),container_ptr, c_grid_shape,degrees, n_jobs, verbose, ignore_inf)
189
+ pts = np.asarray(sm.first,dtype=python_indices_type)
190
+ weights = np.asarray(sm.second,dtype=python_tensor_dtype)
191
+ return (pts,weights)
192
+ {{endfor}}
193
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")
194
+
195
+
196
+
197
+ #### Hilbert Function
198
+
199
+ cdef extern from "multi_parameter_rank_invariant/hilbert_function.h" namespace "Gudhi::multiparameter::hilbert_function":
200
+ ## from slicers
201
+ {{for D in slicers}}
202
+ 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
203
+ {{endfor}}
204
+ 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):
205
+ import multipers.slicer as mps
206
+ cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
207
+ cdef signed_measure_type sm
208
+ cdef cnp.ndarray[indices_type, ndim=2] pts
209
+ cdef cnp.ndarray[tensor_dtype, ndim=1] weights
210
+ {{for D in slicers}}
211
+ if isinstance(slicer, mps.{{D['PYTHON_TYPE']}}):
212
+ with nogil:
213
+ 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)
214
+ pts = np.asarray(sm.first,dtype=python_indices_type)
215
+ weights = np.asarray(sm.second,dtype=python_tensor_dtype)
216
+ return (pts,weights)
217
+ {{endfor}}
218
+ raise ValueError(f"Unsupported slicer type {type(slicer)}")