multipers 2.0.0__cp311-cp311-macosx_13_0_x86_64.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 (78) hide show
  1. multipers/.dylibs/libc++.1.0.dylib +0 -0
  2. multipers/.dylibs/libtbb.12.12.dylib +0 -0
  3. multipers/.dylibs/libtbbmalloc.2.12.dylib +0 -0
  4. multipers/__init__.py +11 -0
  5. multipers/_signed_measure_meta.py +268 -0
  6. multipers/_slicer_meta.py +171 -0
  7. multipers/data/MOL2.py +350 -0
  8. multipers/data/UCR.py +18 -0
  9. multipers/data/__init__.py +1 -0
  10. multipers/data/graphs.py +466 -0
  11. multipers/data/immuno_regions.py +27 -0
  12. multipers/data/minimal_presentation_to_st_bf.py +0 -0
  13. multipers/data/pytorch2simplextree.py +91 -0
  14. multipers/data/shape3d.py +101 -0
  15. multipers/data/synthetic.py +68 -0
  16. multipers/distances.py +198 -0
  17. multipers/euler_characteristic.pyx +132 -0
  18. multipers/filtration_conversions.pxd +229 -0
  19. multipers/filtrations.pxd +225 -0
  20. multipers/function_rips.cpython-311-darwin.so +0 -0
  21. multipers/function_rips.pyx +105 -0
  22. multipers/grids.cpython-311-darwin.so +0 -0
  23. multipers/grids.pyx +281 -0
  24. multipers/hilbert_function.pyi +46 -0
  25. multipers/hilbert_function.pyx +153 -0
  26. multipers/io.cpython-311-darwin.so +0 -0
  27. multipers/io.pyx +571 -0
  28. multipers/ml/__init__.py +0 -0
  29. multipers/ml/accuracies.py +90 -0
  30. multipers/ml/convolutions.py +532 -0
  31. multipers/ml/invariants_with_persistable.py +79 -0
  32. multipers/ml/kernels.py +176 -0
  33. multipers/ml/mma.py +659 -0
  34. multipers/ml/one.py +472 -0
  35. multipers/ml/point_clouds.py +238 -0
  36. multipers/ml/signed_betti.py +50 -0
  37. multipers/ml/signed_measures.py +1542 -0
  38. multipers/ml/sliced_wasserstein.py +461 -0
  39. multipers/ml/tools.py +113 -0
  40. multipers/mma_structures.cpython-311-darwin.so +0 -0
  41. multipers/mma_structures.pxd +127 -0
  42. multipers/mma_structures.pyx +2433 -0
  43. multipers/multiparameter_edge_collapse.py +41 -0
  44. multipers/multiparameter_module_approximation.cpython-311-darwin.so +0 -0
  45. multipers/multiparameter_module_approximation.pyx +211 -0
  46. multipers/pickle.py +53 -0
  47. multipers/plots.py +326 -0
  48. multipers/point_measure_integration.cpython-311-darwin.so +0 -0
  49. multipers/point_measure_integration.pyx +139 -0
  50. multipers/rank_invariant.cpython-311-darwin.so +0 -0
  51. multipers/rank_invariant.pyx +229 -0
  52. multipers/simplex_tree_multi.cpython-311-darwin.so +0 -0
  53. multipers/simplex_tree_multi.pxd +129 -0
  54. multipers/simplex_tree_multi.pyi +715 -0
  55. multipers/simplex_tree_multi.pyx +4655 -0
  56. multipers/slicer.cpython-311-darwin.so +0 -0
  57. multipers/slicer.pxd +781 -0
  58. multipers/slicer.pyx +3393 -0
  59. multipers/tensor.pxd +13 -0
  60. multipers/test.pyx +44 -0
  61. multipers/tests/__init__.py +40 -0
  62. multipers/tests/old_test_rank_invariant.py +91 -0
  63. multipers/tests/test_diff_helper.py +74 -0
  64. multipers/tests/test_hilbert_function.py +82 -0
  65. multipers/tests/test_mma.py +51 -0
  66. multipers/tests/test_point_clouds.py +59 -0
  67. multipers/tests/test_python-cpp_conversion.py +82 -0
  68. multipers/tests/test_signed_betti.py +181 -0
  69. multipers/tests/test_simplextreemulti.py +98 -0
  70. multipers/tests/test_slicer.py +63 -0
  71. multipers/torch/__init__.py +1 -0
  72. multipers/torch/diff_grids.py +217 -0
  73. multipers/torch/rips_density.py +257 -0
  74. multipers-2.0.0.dist-info/LICENSE +21 -0
  75. multipers-2.0.0.dist-info/METADATA +29 -0
  76. multipers-2.0.0.dist-info/RECORD +78 -0
  77. multipers-2.0.0.dist-info/WHEEL +5 -0
  78. multipers-2.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,257 @@
1
+ from typing import Callable, Literal, Optional
2
+
3
+ import numpy as np
4
+ import torch
5
+ from gudhi.rips_complex import RipsComplex
6
+
7
+ import multipers as mp
8
+ from multipers.ml.convolutions import DTM, KDE
9
+ from multipers.simplex_tree_multi import _available_strategies
10
+ from multipers.torch.diff_grids import get_grid
11
+
12
+
13
+ def function_rips_signed_measure_old(
14
+ x,
15
+ theta: Optional[float] = None,
16
+ function: Literal["dtm", "gaussian", "exponential"] | Callable = "dtm",
17
+ threshold: float = np.inf,
18
+ grid_strategy: _available_strategies = "regular_closest",
19
+ resolution: int = 100,
20
+ return_original: bool = False,
21
+ return_st: bool = False,
22
+ safe_conversion: bool = False,
23
+ num_collapses: int = -1,
24
+ expand_collapse: bool = False,
25
+ dtype=torch.float32,
26
+ **sm_kwargs,
27
+ ):
28
+ """
29
+ Computes a torch-differentiable function-rips signed measure.
30
+
31
+ Input
32
+ -----
33
+ - x (num_pts, dim) : The point cloud
34
+ - theta: For density-like functions : the bandwidth
35
+ - threshold : rips threshold
36
+ - function : Either "dtm", "gaussian", or "exponenetial" or Callable.
37
+ Function to compute the second parameter.
38
+ - grid_strategy: grid coarsenning strategy.
39
+ - resolution : when coarsenning, the target resolution,
40
+ - return_original : Also returns the non-differentiable signed measure.
41
+ - safe_conversion : Activate this if you encounter crashes.
42
+ - **kwargs : for the signed measure computation.
43
+ """
44
+ assert isinstance(x, torch.Tensor)
45
+ if function == "dtm":
46
+ assert theta is not None, "Provide a theta to compute DTM"
47
+ codensity = DTM(masses=[theta]).fit(x).score_samples_diff(x)[0].type(dtype)
48
+ elif function in ["gaussian", "exponential"]:
49
+ assert theta is not None, "Provide a theta to compute density estimation"
50
+ codensity = (
51
+ -KDE(
52
+ bandwidth=theta,
53
+ kernel=function,
54
+ return_log=True,
55
+ )
56
+ .fit(x)
57
+ .score_samples(x)
58
+ .type(dtype)
59
+ )
60
+ else:
61
+ assert callable(function), "Function has to be callable"
62
+ if theta is None:
63
+ codensity = function(x).type(dtype)
64
+ else:
65
+ codensity = function(x, theta=theta).type(dtype)
66
+
67
+ distance_matrix = torch.cdist(x, x).type(dtype)
68
+ if threshold < np.inf:
69
+ distance_matrix[distance_matrix > threshold] = np.inf
70
+
71
+ st = RipsComplex(
72
+ distance_matrix=distance_matrix.detach(), max_edge_length=threshold
73
+ ).create_simplex_tree()
74
+ # detach makes a new (reference) tensor, without tracking the gradient
75
+ st = mp.SimplexTreeMulti(st, num_parameters=2, safe_conversion=safe_conversion)
76
+ st.fill_lowerstar(
77
+ codensity.detach(), parameter=1
78
+ ) # fills the codensity in the second parameter of the simplextree
79
+
80
+ # simplificates the simplextree for computation, the signed measure will be recovered from the copy afterward
81
+ st_copy = st.grid_squeeze(
82
+ grid_strategy=grid_strategy, resolution=resolution, coordinate_values=True
83
+ )
84
+ if sm_kwargs.get("degree", None) is None and sm_kwargs.get("degrees", [None]) == [
85
+ None
86
+ ]:
87
+ expansion_degree = st.num_vertices
88
+ else:
89
+ expansion_degree = (
90
+ max(np.max(sm_kwargs.get("degrees", 1)), sm_kwargs.get("degree", 1)) + 1
91
+ )
92
+ st.collapse_edges(num=num_collapses)
93
+ if not expand_collapse:
94
+ st.expansion(expansion_degree) # edge collapse
95
+ sms = mp.signed_measure(st, **sm_kwargs) # computes the signed measure
96
+ del st
97
+
98
+ simplices_list = tuple(
99
+ s for s, _ in st_copy.get_simplices()
100
+ ) # not optimal, we may want to do that in cython to get edges and nodes
101
+ sms_diff = []
102
+ for sm, weights in sms:
103
+ indices, not_found_indices = st_copy.pts_to_indices(
104
+ sm, simplices_dimensions=[1, 0]
105
+ )
106
+ if sm_kwargs.get("verbose", False):
107
+ print(
108
+ f"Found {(1-(indices == -1).mean()).round(2)} indices. \
109
+ Out : {(indices == -1).sum()}, {len(not_found_indices)}"
110
+ )
111
+ sm_diff = torch.empty(sm.shape).type(dtype)
112
+ # sim_dim = sm_diff.shape[1] // 2
113
+
114
+ # fills the Rips-filtrations of the signed measure.
115
+ # the loop is for the rank invariant
116
+ for i in range(0, sm_diff.shape[1], 2):
117
+ idxs = indices[:, i]
118
+ if (idxs == -1).all():
119
+ continue
120
+ useful_idxs = idxs != -1
121
+ # Retrieves the differentiable values from the distance_matrix
122
+ if useful_idxs.size > 0:
123
+ edges_filtrations = torch.cat(
124
+ [
125
+ distance_matrix[*simplices_list[idx], None]
126
+ for idx in idxs[useful_idxs]
127
+ ]
128
+ )
129
+ # fills theses values into the signed measure
130
+ sm_diff[:, i][useful_idxs] = edges_filtrations
131
+ # same for the other axis
132
+ for i in range(1, sm_diff.shape[1], 2):
133
+ idxs = indices[:, i]
134
+ if (idxs == -1).all():
135
+ continue
136
+ useful_idxs = idxs != -1
137
+ if useful_idxs.size > 0:
138
+ nodes_filtrations = torch.cat(
139
+ [codensity[simplices_list[idx]] for idx in idxs[useful_idxs]]
140
+ )
141
+ sm_diff[:, i][useful_idxs] = nodes_filtrations
142
+
143
+ # fills not-found values as constants
144
+ if len(not_found_indices) > 0:
145
+ not_found_indices = indices == -1
146
+ sm_diff[indices == -1] = torch.from_numpy(sm[indices == -1]).type(dtype)
147
+
148
+ sms_diff.append((sm_diff, torch.from_numpy(weights)))
149
+ flags = [True, return_original, return_st]
150
+ if np.sum(flags) == 1:
151
+ return sms_diff
152
+ return tuple(stuff for stuff, flag in zip([sms_diff, sms, st_copy], flags) if flag)
153
+
154
+
155
+ def function_rips_signed_measure(
156
+ x,
157
+ theta: Optional[float] = None,
158
+ function: Literal["dtm", "gaussian", "exponential"] | Callable = "dtm",
159
+ threshold: float = np.inf,
160
+ grid_strategy: Literal["regular_closest", "exact", "quantile"] = "exact",
161
+ resolution: int = 100,
162
+ safe_conversion: bool = False,
163
+ num_collapses: int = -1,
164
+ expand_collapse: bool = False,
165
+ dtype=torch.float32,
166
+ plot=False,
167
+ return_st: bool = False,
168
+ *,
169
+ log_density: bool = True,
170
+ **sm_kwargs,
171
+ ):
172
+ """
173
+ Computes a torch-differentiable function-rips signed measure.
174
+
175
+ Input
176
+ -----
177
+ - x (num_pts, dim) : The point cloud
178
+ - theta: For density-like functions : the bandwidth
179
+ - threshold : rips threshold
180
+ - function : Either "dtm", "gaussian", or "exponenetial" or Callable.
181
+ Function to compute the second parameter.
182
+ - grid_strategy: grid coarsenning strategy.
183
+ - resolution : when coarsenning, the target resolution,
184
+ - return_original : Also returns the non-differentiable signed measure.
185
+ - safe_conversion : Activate this if you encounter crashes.
186
+ - **kwargs : for the signed measure computation.
187
+ """
188
+ assert isinstance(x, torch.Tensor)
189
+ if function == "dtm":
190
+ assert theta is not None, "Provide a theta to compute DTM"
191
+ codensity = DTM(masses=[theta]).fit(x).score_samples_diff(x)[0].type(dtype)
192
+ elif function in ["gaussian", "exponential"]:
193
+ assert theta is not None, "Provide a theta to compute density estimation"
194
+ codensity = (
195
+ -KDE(
196
+ bandwidth=theta,
197
+ kernel=function,
198
+ return_log=log_density,
199
+ )
200
+ .fit(x)
201
+ .score_samples(x)
202
+ .type(dtype)
203
+ )
204
+ else:
205
+ assert callable(function), "Function has to be callable"
206
+ if theta is None:
207
+ codensity = function(x).type(dtype)
208
+ else:
209
+ codensity = function(x, theta=theta).type(dtype)
210
+
211
+ distance_matrix = torch.cdist(x, x).type(dtype)
212
+
213
+ st = RipsComplex(
214
+ distance_matrix=distance_matrix.detach(), max_edge_length=threshold
215
+ ).create_simplex_tree()
216
+ # detach makes a new (reference) tensor, without tracking the gradient
217
+ st = mp.SimplexTreeMulti(st, num_parameters=2, safe_conversion=safe_conversion)
218
+ st.fill_lowerstar(
219
+ codensity.detach(), parameter=1
220
+ ) # fills the codensity in the second parameter of the simplextree
221
+
222
+ # simplificates the simplextree for computation, the signed measure will be recovered from the copy afterward
223
+ distances = distance_matrix.ravel()
224
+ if threshold < np.inf:
225
+ distances = distances[distances < threshold]
226
+ reduced_grid = get_grid(strategy=grid_strategy)((distances, codensity), resolution)
227
+
228
+ st = st.grid_squeeze(reduced_grid, coordinate_values=True)
229
+ if sm_kwargs.get("degree", None) is None and sm_kwargs.get("degrees", [None]) == [
230
+ None
231
+ ]:
232
+ expansion_degree = st.num_vertices
233
+ else:
234
+ expansion_degree = (
235
+ max(np.max(sm_kwargs.get("degrees", 1)), sm_kwargs.get("degree", 1)) + 1
236
+ )
237
+ st.collapse_edges(num=num_collapses)
238
+ if not expand_collapse:
239
+ st.expansion(expansion_degree) # edge collapse
240
+
241
+ s = mp.Slicer(st)
242
+ degrees = sm_kwargs.get("degrees", [])
243
+ if sm_kwargs.get("degree", None) is not None:
244
+ degrees = [sm_kwargs.get("degree", None)] + degrees
245
+ s = mp.slicer.minimal_presentation(s, degrees=degrees)
246
+ sms = tuple(
247
+ sm
248
+ for slicer_of_degree in s
249
+ for sm in mp.signed_measure(slicer_of_degree, grid_conversion=reduced_grid, **sm_kwargs)
250
+ ) # computes the signed measure
251
+ if plot:
252
+ mp.plots.plot_signed_measures(
253
+ tuple((sm.detach().numpy(), w.detach().numpy()) for sm, w in sms)
254
+ )
255
+ if return_st:
256
+ sms = (sms, st)
257
+ return sms
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 David Loiseaux
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ Metadata-Version: 2.1
2
+ Name: multipers
3
+ Version: 2.0.0
4
+ Summary: Scikit-style Multiparameter persistence toolkit
5
+ Home-page: https://github.com/DavidLapous/multipers
6
+ Author: David Loiseaux
7
+ Author-email: david.loiseaux@inria.fr
8
+ License: MIT
9
+ Keywords: TDA Persistence Multiparameter sklearn
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: Implementation :: CPython
15
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
16
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
17
+ Classifier: Topic :: Scientific/Engineering :: Visualization
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Requires-Python: >=3.10
21
+ License-File: LICENSE
22
+ Requires-Dist: gudhi
23
+ Requires-Dist: numpy
24
+ Requires-Dist: filtration-domination
25
+ Requires-Dist: pykeops
26
+ Requires-Dist: scikit-learn
27
+ Requires-Dist: joblib
28
+ Requires-Dist: pot
29
+
@@ -0,0 +1,78 @@
1
+ multipers-2.0.0.dist-info/RECORD,,
2
+ multipers-2.0.0.dist-info/LICENSE,sha256=UsQRnvlo_9wpQS9DNt52GEraERHwK2GIRwuqr2Yv5JI,1071
3
+ multipers-2.0.0.dist-info/WHEEL,sha256=0OA11EH3H5oq5QyS1H2wXw2ofFV1W7OMKKqH05gk2ho,111
4
+ multipers-2.0.0.dist-info/top_level.txt,sha256=L9e0AGmhRzrNw9FpuUx-zlqi5NcBOmrI9wYY8kYWr8A,10
5
+ multipers-2.0.0.dist-info/METADATA,sha256=wEkKxxTLxnqx0mLLeYRhZrbBDXQKx8xEhhYX9QNzlQA,1099
6
+ multipers/point_measure_integration.cpython-311-darwin.so,sha256=ghvJ6D1BkJamBmiJ1-4y5jIHeEl2_9568NQU-p5Tsf4,516896
7
+ multipers/function_rips.cpython-311-darwin.so,sha256=wOpW5W-qpdq6iZZb2AHxFzlpEysoPChUuap0YkoXwzM,516336
8
+ multipers/euler_characteristic.pyx,sha256=Y3dzv590wffWR-UZvnL4mu9ETjMdQIVQWEEMPYB5rco,5846
9
+ multipers/distances.py,sha256=am3_SqSkGB9N59grxb_EZt-KYqqKln0WiR4Wia6N_LA,6067
10
+ multipers/mma_structures.pyx,sha256=5NF2-OeEi7YtT9yn6DqG7qTcCunQQyt7As1IJOkQfEQ,92297
11
+ multipers/filtrations.pxd,sha256=4ZSlqRc9MfBbQfBtmEsjCNBBVEC1I3iekgYmw_plecQ,9666
12
+ multipers/slicer.pyx,sha256=ePRWMxwCTNtinkqrhX7j2OzaoiPrxsYegIiNiZ-0K_E,128685
13
+ multipers/simplex_tree_multi.pyx,sha256=MyD3n0Z51KuNpMOdrnD4fxnuLW5pP6zQA-I2IMM_oPY,208003
14
+ multipers/__init__.py,sha256=NBT0tTFnmjEt2oa7v0AKmcCtiY89P3fqAp_BJZ1mI6c,389
15
+ multipers/_slicer_meta.py,sha256=-TAKssM_mW26dHyZ-AcfgYAFA4OmLmfyJpenjhlt0Jw,5651
16
+ multipers/mma_structures.cpython-311-darwin.so,sha256=nF3ZicAaQYMRP9ru4PrvEcLjWKrVtbrBqGhl5NnKGbA,1845472
17
+ multipers/io.pyx,sha256=oKTI572ra7Uwn91ckZoYkCb0KPJiBHPeW-gST_ZGQts,20233
18
+ multipers/hilbert_function.pyx,sha256=ujcMc6hJthrqxQjYXTQBmQI6Y3A7m8t8s94s1A1VZV0,6965
19
+ multipers/multiparameter_edge_collapse.py,sha256=g4GRF_UWCinbftMhuE8e4jHYZTkbIx-lITibG4pDoH4,1229
20
+ multipers/plots.py,sha256=KsfER-9hb9xyudbGK8roaec-dCMUOcu-GJKQ1GT9N_4,10690
21
+ multipers/simplex_tree_multi.cpython-311-darwin.so,sha256=QCtcPVx-vl8OssWrHKEPUA_GwObMMQkChKq4uQS5y2Q,3015248
22
+ multipers/rank_invariant.cpython-311-darwin.so,sha256=9MFir7nzRPyuSTdHYMrfJFJ2pysW-NYvjlZR_koomVY,1172608
23
+ multipers/simplex_tree_multi.pxd,sha256=1chZRR03pbfB3aUJKpj67HXe8NhqeY0KPOE6u4_YVpU,6333
24
+ multipers/slicer.pxd,sha256=YaELAN7tqE7Tk1xZ6SnchF5RNrapybFdpO3-K42OpnM,42497
25
+ multipers/grids.pyx,sha256=nnDa7W6hBlioWpUClszY1bO05rSyUL8iAfLG_cZQq1c,10799
26
+ multipers/test.pyx,sha256=-g7WU-jKrZK8H0c-6eAPsfrApjvTKrUoswVYFu8LoV4,1798
27
+ multipers/multiparameter_module_approximation.pyx,sha256=eyU4WzGB8QRfCVyPp29QBwcrOJzV2NOh-ADv1bYvQVk,8268
28
+ multipers/pickle.py,sha256=9XAh65HQo_MD663OLbP5-DEG6WNU4zyEJePybDu7Hww,2141
29
+ multipers/multiparameter_module_approximation.cpython-311-darwin.so,sha256=EQBygFB4OHL469aOF3ifNh8JFKapA65O6YCiMah67Xc,766240
30
+ multipers/_signed_measure_meta.py,sha256=M2d4rIBG9yQLdpU-gVy-41KXtCGRhrPC0kQUn3Ab-zA,9128
31
+ multipers/tensor.pxd,sha256=MSmaMU0sOP9CHLmg4dym7nOGaI1S4cOdM01TQ9flI54,417
32
+ multipers/mma_structures.pxd,sha256=s-JSLqoh9y0x74DqHzdaZwszSBenhefpDh2Rmv1LRYU,6533
33
+ multipers/point_measure_integration.pyx,sha256=T4oGq8DHZiQj3XnPMQXzH-DdJk_FZ34Vyxqc8FQP38U,4794
34
+ multipers/rank_invariant.pyx,sha256=svqh31G-oRzG-jHtJHLQvlgV771KeXu4cUG4Vf1HE0k,11626
35
+ multipers/slicer.cpython-311-darwin.so,sha256=HFq4ScfrkzUGt8t6U5kkfmoQRifqR-Jg6ZpR8A_UC-4,2126048
36
+ multipers/grids.cpython-311-darwin.so,sha256=CmvyRQ9Cnf8z1rInAh8wfiyLXJglFFlFKfC0qBxYOAU,647344
37
+ multipers/io.cpython-311-darwin.so,sha256=7ER7zuktlAW1A3xkyc6pc4rYgLtLmRJhVr61nxgVTco,345696
38
+ multipers/simplex_tree_multi.pyi,sha256=2HbiG_Dwgf965gR__C94uUnNgieM5X5fPfbWjbkNkJ4,26162
39
+ multipers/function_rips.pyx,sha256=GcUpTZKups7a4MewOqzrdVuPK-TFHponTeoGAcVOyK0,5254
40
+ multipers/hilbert_function.pyi,sha256=Od6PAT53p6ni8-WwRBPhmTz4rR-WhaT45vjGfxyrJrs,1876
41
+ multipers/filtration_conversions.pxd,sha256=etjFZ8w2oqBystKjDeXrgr1_UjS8FjO16fzl_eaMy6k,9594
42
+ multipers/tests/old_test_rank_invariant.py,sha256=W2npwO1ZXOVNzaguImHfILTOqBO7BhIeUYYEZzjcju4,3148
43
+ multipers/tests/test_slicer.py,sha256=28jN1OdvJMOZlb1xmMVCy1JjNdaQIZzKwC05N1IzkLE,2052
44
+ multipers/tests/test_diff_helper.py,sha256=oBFqpxX1y9keslh3J_5K0QDXzeBqOQw8Z-OEYARfdcU,3027
45
+ multipers/tests/__init__.py,sha256=ef-EvmUw6qiGuBAkwPzUidTAr46Zd2XsGI7TxAGFb4c,1081
46
+ multipers/tests/test_hilbert_function.py,sha256=K0BNst0EPrwC2zaHWwjVQ9snOwt5KCr6bMXYrYLtxRM,2693
47
+ multipers/tests/test_mma.py,sha256=YkltnBs9lcKIQswMiTmkfJLnXmPjmpZHDsIpY5HfIt8,1581
48
+ multipers/tests/test_simplextreemulti.py,sha256=cKT2Lm0PkZFLLHPgL5xwApk_iy-RSvUPj9kSu7ap1co,2923
49
+ multipers/tests/test_point_clouds.py,sha256=iKqvO4svYJ6cKDjG-T-TfpfrMrnnZld3EwipEDziV78,2328
50
+ multipers/tests/test_signed_betti.py,sha256=LBW2I9QmTxQyvwK1KWJyJmHBgRxFQ9yNvbWQqctGaQ4,5452
51
+ multipers/tests/test_python-cpp_conversion.py,sha256=0t1NKiUp4NJW5Duw__A1k7qHTHGU4DNjJZ8hLxH2C7g,3136
52
+ multipers/torch/diff_grids.py,sha256=x8spZdEtTP-hlSdlYTfgt1ScvqSZTMzCkRN7MLoTLVc,6748
53
+ multipers/torch/rips_density.py,sha256=jIgeyw3wNJFG8n8uQ49EaG2YSsCDbAo8RWmMdbWrIQI,9766
54
+ multipers/torch/__init__.py,sha256=OLxIiZ389uCqehpUxBPUI_x1SYu531onc4tiTscAuIw,27
55
+ multipers/.dylibs/libtbbmalloc.2.12.dylib,sha256=kUMRPeCt8AMJ75Ms0ZJXQwXhhShpvdhQXQRYlt3g9A4,162976
56
+ multipers/.dylibs/libc++.1.0.dylib,sha256=VApHnJJKm2jLHjWWUuz4Czf7dx4UWmYw1Idyx4-xggM,1074944
57
+ multipers/.dylibs/libtbb.12.12.dylib,sha256=KRfuSSQse7dQdUWxJrVlxXKpjOBCfvz63-hWbuzRdSo,482896
58
+ multipers/ml/one.py,sha256=np5jM8gywm65TsK1yeZ1BDWqP-Ym-7hz4brTXI_0imk,20119
59
+ multipers/ml/point_clouds.py,sha256=-1gNz9SrkY8sImVbtTHbfmmU87uEtHAC1PlBphloHlI,9550
60
+ multipers/ml/signed_betti.py,sha256=0Gl8nYJv-zN6FTE_JaiARbA-ySzppRDYjFqlnjndpJg,2213
61
+ multipers/ml/accuracies.py,sha256=4KfH7EB6-3KjXhOcleHcCP_2OOA6mC9v7DI7MSA2PnU,2940
62
+ multipers/ml/tools.py,sha256=DOPcqmvZP2bA7M08GrwccdebwDq1HEwYdhNRGT7eZMI,3453
63
+ multipers/ml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
+ multipers/ml/convolutions.py,sha256=LLD453VrKgYpuHA3njCvLVSUsKAdqqrBe6z5R5ENJAw,18616
65
+ multipers/ml/signed_measures.py,sha256=kwhJUY-6umGqgqFTY_MFdvRKGzJxnZPKWYYV0hMnHKY,57227
66
+ multipers/ml/sliced_wasserstein.py,sha256=jgq4ND3EWwwJBopqRvfJLsoOptiMHjS3zEAENBmPJDc,18644
67
+ multipers/ml/kernels.py,sha256=XWfvKY68-c9E-MpRzdNqGzGD6K24Aizx95TkiSeAtIY,6175
68
+ multipers/ml/invariants_with_persistable.py,sha256=HL0_IIrcJdAmCIqcyHPg0PNLle_pa2esnGQJsK2hnHc,2261
69
+ multipers/ml/mma.py,sha256=kAETzfQtGq-t5n4ln7VwTI4F35DyD1UeruAkomq2M2Y,22962
70
+ multipers/data/synthetic.py,sha256=gO3gpK4QuigDeQ75NvTR1TqnVQq5B8cJcB7CoFhJjQo,2018
71
+ multipers/data/pytorch2simplextree.py,sha256=cvOJTUleK_qEbcpygRD77GuQl_0qDsSjjD6e6UFUDD0,3048
72
+ multipers/data/shape3d.py,sha256=AE-vvjKrhKxOwMo-lurUsFqqLjIg5obo-RTbRZF_5Mk,3893
73
+ multipers/data/minimal_presentation_to_st_bf.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ multipers/data/MOL2.py,sha256=Deu94qPDQFMf_qNwwtn5zYSYO2KmVBufQfUjq3NDkrI,12988
75
+ multipers/data/__init__.py,sha256=w7uUe4LOHbdbKU4R8MNs7em65wZJN0v5ukoG1otFanQ,24
76
+ multipers/data/UCR.py,sha256=PuT8l3i26y0goBzIESwdgJAe6YFCyDiWSoxECcP5rhs,798
77
+ multipers/data/immuno_regions.py,sha256=BNN81DOwdu6sJTkaSeziAYyx0jd0kuZZB5Se0Fo95vA,903
78
+ multipers/data/graphs.py,sha256=wef36QXuzi2EMQJi6W_sEB3JnShfSAbfylP6-2rLSUA,16346
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.43.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-macosx_13_0_x86_64
5
+
@@ -0,0 +1 @@
1
+ multipers