multipers 2.3.3__cp312-cp312-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of multipers might be problematic. Click here for more details.

Files changed (183) hide show
  1. multipers/.dylibs/libc++.1.0.dylib +0 -0
  2. multipers/.dylibs/libtbb.12.16.dylib +0 -0
  3. multipers/__init__.py +33 -0
  4. multipers/_signed_measure_meta.py +450 -0
  5. multipers/_slicer_meta.py +211 -0
  6. multipers/array_api/__init__.py +62 -0
  7. multipers/array_api/numpy.py +104 -0
  8. multipers/array_api/torch.py +117 -0
  9. multipers/data/MOL2.py +458 -0
  10. multipers/data/UCR.py +18 -0
  11. multipers/data/__init__.py +1 -0
  12. multipers/data/graphs.py +466 -0
  13. multipers/data/immuno_regions.py +27 -0
  14. multipers/data/minimal_presentation_to_st_bf.py +0 -0
  15. multipers/data/pytorch2simplextree.py +91 -0
  16. multipers/data/shape3d.py +101 -0
  17. multipers/data/synthetic.py +113 -0
  18. multipers/distances.py +202 -0
  19. multipers/filtration_conversions.pxd +229 -0
  20. multipers/filtration_conversions.pxd.tp +84 -0
  21. multipers/filtrations/__init__.py +18 -0
  22. multipers/filtrations/density.py +533 -0
  23. multipers/filtrations/filtrations.py +361 -0
  24. multipers/filtrations.pxd +224 -0
  25. multipers/function_rips.cpython-312-darwin.so +0 -0
  26. multipers/function_rips.pyx +105 -0
  27. multipers/grids.cpython-312-darwin.so +0 -0
  28. multipers/grids.pyx +481 -0
  29. multipers/gudhi/Persistence_slices_interface.h +132 -0
  30. multipers/gudhi/Simplex_tree_interface.h +239 -0
  31. multipers/gudhi/Simplex_tree_multi_interface.h +551 -0
  32. multipers/gudhi/cubical_to_boundary.h +59 -0
  33. multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -0
  34. multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -0
  35. multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -0
  36. multipers/gudhi/gudhi/Debug_utils.h +45 -0
  37. multipers/gudhi/gudhi/Fields/Multi_field.h +484 -0
  38. multipers/gudhi/gudhi/Fields/Multi_field_operators.h +455 -0
  39. multipers/gudhi/gudhi/Fields/Multi_field_shared.h +450 -0
  40. multipers/gudhi/gudhi/Fields/Multi_field_small.h +531 -0
  41. multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +507 -0
  42. multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +531 -0
  43. multipers/gudhi/gudhi/Fields/Z2_field.h +355 -0
  44. multipers/gudhi/gudhi/Fields/Z2_field_operators.h +376 -0
  45. multipers/gudhi/gudhi/Fields/Zp_field.h +420 -0
  46. multipers/gudhi/gudhi/Fields/Zp_field_operators.h +400 -0
  47. multipers/gudhi/gudhi/Fields/Zp_field_shared.h +418 -0
  48. multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -0
  49. multipers/gudhi/gudhi/Matrix.h +2107 -0
  50. multipers/gudhi/gudhi/Multi_critical_filtration.h +1038 -0
  51. multipers/gudhi/gudhi/Multi_persistence/Box.h +174 -0
  52. multipers/gudhi/gudhi/Multi_persistence/Line.h +282 -0
  53. multipers/gudhi/gudhi/Off_reader.h +173 -0
  54. multipers/gudhi/gudhi/One_critical_filtration.h +1441 -0
  55. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +769 -0
  56. multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +686 -0
  57. multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +842 -0
  58. multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1350 -0
  59. multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1105 -0
  60. multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +859 -0
  61. multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +910 -0
  62. multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +139 -0
  63. multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +230 -0
  64. multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +211 -0
  65. multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +60 -0
  66. multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +60 -0
  67. multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +136 -0
  68. multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +190 -0
  69. multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +616 -0
  70. multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +150 -0
  71. multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +106 -0
  72. multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +219 -0
  73. multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +327 -0
  74. multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1140 -0
  75. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +934 -0
  76. multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +934 -0
  77. multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +980 -0
  78. multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1092 -0
  79. multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +192 -0
  80. multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +921 -0
  81. multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +1093 -0
  82. multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +1012 -0
  83. multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1244 -0
  84. multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +186 -0
  85. multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +164 -0
  86. multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +156 -0
  87. multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +376 -0
  88. multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +540 -0
  89. multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -0
  90. multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -0
  91. multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -0
  92. multipers/gudhi/gudhi/Persistent_cohomology.h +745 -0
  93. multipers/gudhi/gudhi/Points_off_io.h +171 -0
  94. multipers/gudhi/gudhi/Simple_object_pool.h +69 -0
  95. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +463 -0
  96. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -0
  97. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +106 -0
  98. multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -0
  99. multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -0
  100. multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -0
  101. multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +62 -0
  102. multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +157 -0
  103. multipers/gudhi/gudhi/Simplex_tree.h +2794 -0
  104. multipers/gudhi/gudhi/Simplex_tree_multi.h +152 -0
  105. multipers/gudhi/gudhi/distance_functions.h +62 -0
  106. multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -0
  107. multipers/gudhi/gudhi/persistence_interval.h +253 -0
  108. multipers/gudhi/gudhi/persistence_matrix_options.h +170 -0
  109. multipers/gudhi/gudhi/reader_utils.h +367 -0
  110. multipers/gudhi/mma_interface_coh.h +256 -0
  111. multipers/gudhi/mma_interface_h0.h +223 -0
  112. multipers/gudhi/mma_interface_matrix.h +293 -0
  113. multipers/gudhi/naive_merge_tree.h +536 -0
  114. multipers/gudhi/scc_io.h +310 -0
  115. multipers/gudhi/truc.h +1403 -0
  116. multipers/io.cpython-312-darwin.so +0 -0
  117. multipers/io.pyx +644 -0
  118. multipers/ml/__init__.py +0 -0
  119. multipers/ml/accuracies.py +90 -0
  120. multipers/ml/invariants_with_persistable.py +79 -0
  121. multipers/ml/kernels.py +176 -0
  122. multipers/ml/mma.py +713 -0
  123. multipers/ml/one.py +472 -0
  124. multipers/ml/point_clouds.py +352 -0
  125. multipers/ml/signed_measures.py +1667 -0
  126. multipers/ml/sliced_wasserstein.py +461 -0
  127. multipers/ml/tools.py +113 -0
  128. multipers/mma_structures.cpython-312-darwin.so +0 -0
  129. multipers/mma_structures.pxd +128 -0
  130. multipers/mma_structures.pyx +2786 -0
  131. multipers/mma_structures.pyx.tp +1094 -0
  132. multipers/multi_parameter_rank_invariant/diff_helpers.h +84 -0
  133. multipers/multi_parameter_rank_invariant/euler_characteristic.h +97 -0
  134. multipers/multi_parameter_rank_invariant/function_rips.h +322 -0
  135. multipers/multi_parameter_rank_invariant/hilbert_function.h +769 -0
  136. multipers/multi_parameter_rank_invariant/persistence_slices.h +148 -0
  137. multipers/multi_parameter_rank_invariant/rank_invariant.h +369 -0
  138. multipers/multiparameter_edge_collapse.py +41 -0
  139. multipers/multiparameter_module_approximation/approximation.h +2330 -0
  140. multipers/multiparameter_module_approximation/combinatory.h +129 -0
  141. multipers/multiparameter_module_approximation/debug.h +107 -0
  142. multipers/multiparameter_module_approximation/euler_curves.h +0 -0
  143. multipers/multiparameter_module_approximation/format_python-cpp.h +286 -0
  144. multipers/multiparameter_module_approximation/heap_column.h +238 -0
  145. multipers/multiparameter_module_approximation/images.h +79 -0
  146. multipers/multiparameter_module_approximation/list_column.h +174 -0
  147. multipers/multiparameter_module_approximation/list_column_2.h +232 -0
  148. multipers/multiparameter_module_approximation/ru_matrix.h +347 -0
  149. multipers/multiparameter_module_approximation/set_column.h +135 -0
  150. multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +36 -0
  151. multipers/multiparameter_module_approximation/unordered_set_column.h +166 -0
  152. multipers/multiparameter_module_approximation/utilities.h +403 -0
  153. multipers/multiparameter_module_approximation/vector_column.h +223 -0
  154. multipers/multiparameter_module_approximation/vector_matrix.h +331 -0
  155. multipers/multiparameter_module_approximation/vineyards.h +464 -0
  156. multipers/multiparameter_module_approximation/vineyards_trajectories.h +649 -0
  157. multipers/multiparameter_module_approximation.cpython-312-darwin.so +0 -0
  158. multipers/multiparameter_module_approximation.pyx +235 -0
  159. multipers/pickle.py +90 -0
  160. multipers/plots.py +470 -0
  161. multipers/point_measure.cpython-312-darwin.so +0 -0
  162. multipers/point_measure.pyx +395 -0
  163. multipers/simplex_tree_multi.cpython-312-darwin.so +0 -0
  164. multipers/simplex_tree_multi.pxd +134 -0
  165. multipers/simplex_tree_multi.pyx +10980 -0
  166. multipers/simplex_tree_multi.pyx.tp +2007 -0
  167. multipers/slicer.cpython-312-darwin.so +0 -0
  168. multipers/slicer.pxd +3034 -0
  169. multipers/slicer.pxd.tp +234 -0
  170. multipers/slicer.pyx +20481 -0
  171. multipers/slicer.pyx.tp +1088 -0
  172. multipers/tensor/tensor.h +672 -0
  173. multipers/tensor.pxd +13 -0
  174. multipers/test.pyx +44 -0
  175. multipers/tests/__init__.py +62 -0
  176. multipers/torch/__init__.py +1 -0
  177. multipers/torch/diff_grids.py +240 -0
  178. multipers/torch/rips_density.py +310 -0
  179. multipers-2.3.3.dist-info/METADATA +128 -0
  180. multipers-2.3.3.dist-info/RECORD +183 -0
  181. multipers-2.3.3.dist-info/WHEEL +6 -0
  182. multipers-2.3.3.dist-info/licenses/LICENSE +21 -0
  183. multipers-2.3.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,62 @@
1
+ import multipers.array_api.numpy as npapi
2
+
3
+
4
+ def api_from_tensor(x, *, verbose: bool = False, strict=False):
5
+ if strict:
6
+ if npapi.is_tensor(x):
7
+ return npapi
8
+ import multipers.array_api.torch as torchapi
9
+
10
+ if torchapi.is_tensor(x):
11
+ return torchapi
12
+ raise ValueError(f"Unsupported (strict) type {type(x)=}")
13
+ if npapi.is_promotable(x):
14
+ if verbose:
15
+ print("using numpy backend")
16
+ return npapi
17
+ import multipers.array_api.torch as torchapi
18
+
19
+ if torchapi.is_promotable(x):
20
+ if verbose:
21
+ print("using torch backend")
22
+ return torchapi
23
+ raise ValueError(f"Unsupported type {type(x)=}")
24
+
25
+
26
+ def api_from_tensors(*args):
27
+ assert len(args) > 0, "no tensor given"
28
+ import multipers.array_api.numpy as npapi
29
+
30
+ is_numpy = True
31
+ for x in args:
32
+ if not npapi.is_promotable(x):
33
+ is_numpy = False
34
+ break
35
+ if is_numpy:
36
+ return npapi
37
+
38
+ # only torch for now
39
+ import multipers.array_api.torch as torchapi
40
+
41
+ is_torch = True
42
+ for x in args:
43
+ if not torchapi.is_promotable(x):
44
+ is_torch = False
45
+ break
46
+ if is_torch:
47
+ return torchapi
48
+ raise ValueError(f"Incompatible types got {[type(x) for x in args]=}.")
49
+
50
+
51
+ def to_numpy(x):
52
+ api = api_from_tensor(x)
53
+ return api.asnumpy(x)
54
+
55
+
56
+ def check_keops():
57
+ import os
58
+
59
+ if os.name == "nt":
60
+ # see https://github.com/getkeops/keops/pull/421
61
+ return False
62
+ return npapi.check_keops()
@@ -0,0 +1,104 @@
1
+ from contextlib import nullcontext
2
+
3
+ import numpy as _np
4
+ from scipy.spatial.distance import cdist
5
+
6
+ backend = _np
7
+ cat = _np.concatenate
8
+ norm = _np.linalg.norm
9
+ astensor = _np.asarray
10
+ asnumpy = _np.asarray
11
+ tensor = _np.array
12
+ stack = _np.stack
13
+ empty = _np.empty
14
+ where = _np.where
15
+ no_grad = nullcontext
16
+ zeros = _np.zeros
17
+ min = _np.min
18
+ max = _np.max
19
+ repeat_interleave = _np.repeat
20
+ cdist = cdist # type: ignore[no-redef]
21
+ unique = _np.unique
22
+ inf = _np.inf
23
+ searchsorted = _np.searchsorted
24
+ LazyTensor = None
25
+
26
+ # Test keops
27
+ _is_keops_available = None
28
+
29
+
30
+ def check_keops():
31
+ global _is_keops_available, LazyTensor
32
+ if _is_keops_available is not None:
33
+ return _is_keops_available
34
+ import pykeops.numpy as pknp
35
+ from pykeops.numpy import LazyTensor as LT
36
+
37
+ formula = "SqNorm2(x - y)"
38
+ var = ["x = Vi(3)", "y = Vj(3)"]
39
+ expected_res = _np.array([63.0, 90.0])
40
+ x = _np.arange(1, 10).reshape(-1, 3).astype("float32")
41
+ y = _np.arange(3, 9).reshape(-1, 3).astype("float32")
42
+
43
+ my_conv = pknp.Genred(formula, var)
44
+ try:
45
+ _is_keops_available = _np.allclose(my_conv(x, y).flatten(), expected_res)
46
+ LazyTensor = LT
47
+ except:
48
+ from warnings import warn
49
+
50
+ warn("Could not initialize keops (numpy). using workarounds")
51
+ _is_keops_available = False
52
+
53
+ return _is_keops_available
54
+
55
+
56
+ def from_numpy(x):
57
+ return _np.asarray(x)
58
+
59
+
60
+ def ascontiguous(x):
61
+ return _np.ascontiguousarray(x)
62
+
63
+
64
+ def sort(x, axis=-1):
65
+ return _np.sort(x, axis=axis)
66
+
67
+
68
+ def device(x): # type: ignore[no-unused-arg]
69
+ return None
70
+
71
+
72
+ # type: ignore[no-unused-arg]
73
+ def linspace(low, high, r, device=None, dtype=None):
74
+ return _np.linspace(low, high, r, dtype=dtype)
75
+
76
+
77
+ def cartesian_product(*arrays, dtype=None):
78
+ mesh = _np.meshgrid(*arrays, indexing="ij")
79
+ coordinates = _np.stack(mesh, axis=-1).reshape(-1, len(arrays)).astype(dtype)
80
+ return coordinates
81
+
82
+
83
+ def quantile_closest(x, q, axis=None):
84
+ return _np.quantile(x, q, axis=axis, method="closest_observation")
85
+
86
+
87
+ def minvalues(x: _np.ndarray, **kwargs):
88
+ return _np.min(x, **kwargs)
89
+
90
+
91
+ def maxvalues(x: _np.ndarray, **kwargs):
92
+ return _np.max(x, **kwargs)
93
+
94
+
95
+ def is_tensor(x):
96
+ return isinstance(x, _np.ndarray)
97
+
98
+
99
+ def is_promotable(x):
100
+ return isinstance(x, _np.ndarray | list | tuple)
101
+
102
+
103
+ def has_grad(_):
104
+ return False
@@ -0,0 +1,117 @@
1
+ import numpy as _np
2
+ import torch as _t
3
+
4
+ backend = _t
5
+ cat = _t.cat
6
+ norm = _t.norm
7
+ astensor = _t.as_tensor
8
+ tensor = _t.tensor
9
+ stack = _t.stack
10
+ empty = _t.empty
11
+ where = _t.where
12
+ no_grad = _t.no_grad
13
+ cdist = _t.cdist
14
+ zeros = _t.zeros
15
+ min = _t.min
16
+ max = _t.max
17
+ repeat_interleave = _t.repeat_interleave
18
+ linspace = _t.linspace
19
+ cartesian_product = _t.cartesian_prod
20
+ inf = _t.inf
21
+ searchsorted = _t.searchsorted
22
+ LazyTensor = None
23
+
24
+
25
+ _is_keops_available = None
26
+
27
+
28
+ def check_keops():
29
+ global _is_keops_available, LazyTensor
30
+ if _is_keops_available is not None:
31
+ return _is_keops_available
32
+ try:
33
+ import pykeops.torch as pknp
34
+ from pykeops.torch import LazyTensor as LT
35
+
36
+ formula = "SqNorm2(x - y)"
37
+ var = ["x = Vi(3)", "y = Vj(3)"]
38
+ expected_res = _t.tensor([63.0, 90.0])
39
+ x = _t.arange(1, 10, dtype=_t.float32).view(-1, 3)
40
+ y = _t.arange(3, 9, dtype=_t.float32).view(-1, 3)
41
+
42
+ my_conv = pknp.Genred(formula, var)
43
+ _is_keops_available = _t.allclose(
44
+ my_conv(x, y).view(-1), expected_res.type(_t.float32)
45
+ )
46
+ LazyTensor = LT
47
+
48
+ except:
49
+ from warnings import warn
50
+
51
+ warn("Could not initialize keops (torch). using workarounds")
52
+
53
+ _is_keops_available = False
54
+
55
+ return _is_keops_available
56
+ check_keops()
57
+
58
+
59
+ def from_numpy(x):
60
+ return _t.from_numpy(x)
61
+
62
+
63
+ def ascontiguous(x):
64
+ return _t.as_tensor(x).contiguous()
65
+
66
+
67
+ def device(x):
68
+ return x.device
69
+
70
+
71
+ def sort(x, axis=-1):
72
+ return _t.sort(x, dim=axis).values
73
+
74
+
75
+ # in our context, this allows to get a correct gradient.
76
+ def unique(x, assume_sorted=False, _mean=True):
77
+ if not x.requires_grad:
78
+ return x.unique(sorted=assume_sorted)
79
+ if x.ndim != 1:
80
+ raise ValueError(f"Got ndim!=1. {x=}")
81
+ if not assume_sorted:
82
+ x = x.sort().values
83
+ _, c = _t.unique(x, sorted=True, return_counts=True)
84
+ if _mean:
85
+ x = _t.segment_reduce(data=x, reduce="mean", lengths=c, unsafe=True, axis=0)
86
+ else:
87
+ c = _np.concatenate([[0], _np.cumsum(c[:-1])])
88
+ x = x[c]
89
+ return x
90
+
91
+
92
+ def quantile_closest(x, q, axis=None):
93
+ return _t.quantile(x, q, dim=axis, interpolation="nearest")
94
+
95
+
96
+ def minvalues(x: _t.Tensor, **kwargs):
97
+ return _t.min(x, **kwargs).values
98
+
99
+
100
+ def maxvalues(x: _t.Tensor, **kwargs):
101
+ return _t.max(x, **kwargs).values
102
+
103
+
104
+ def asnumpy(x):
105
+ return x.detach().numpy()
106
+
107
+
108
+ def is_tensor(x):
109
+ return isinstance(x, _t.Tensor)
110
+
111
+
112
+ def is_promotable(x):
113
+ return isinstance(x, _t.Tensor)
114
+
115
+
116
+ def has_grad(x):
117
+ return x.requires_grad