multipers 2.0.0__cp310-cp310-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.
- multipers/.dylibs/libc++.1.0.dylib +0 -0
- multipers/.dylibs/libtbb.12.12.dylib +0 -0
- multipers/.dylibs/libtbbmalloc.2.12.dylib +0 -0
- multipers/__init__.py +11 -0
- multipers/_signed_measure_meta.py +268 -0
- multipers/_slicer_meta.py +171 -0
- multipers/data/MOL2.py +350 -0
- multipers/data/UCR.py +18 -0
- multipers/data/__init__.py +1 -0
- multipers/data/graphs.py +466 -0
- multipers/data/immuno_regions.py +27 -0
- multipers/data/minimal_presentation_to_st_bf.py +0 -0
- multipers/data/pytorch2simplextree.py +91 -0
- multipers/data/shape3d.py +101 -0
- multipers/data/synthetic.py +68 -0
- multipers/distances.py +198 -0
- multipers/euler_characteristic.pyx +132 -0
- multipers/filtration_conversions.pxd +229 -0
- multipers/filtrations.pxd +225 -0
- multipers/function_rips.cpython-310-darwin.so +0 -0
- multipers/function_rips.pyx +105 -0
- multipers/grids.cpython-310-darwin.so +0 -0
- multipers/grids.pyx +281 -0
- multipers/hilbert_function.pyi +46 -0
- multipers/hilbert_function.pyx +153 -0
- multipers/io.cpython-310-darwin.so +0 -0
- multipers/io.pyx +571 -0
- multipers/ml/__init__.py +0 -0
- multipers/ml/accuracies.py +90 -0
- multipers/ml/convolutions.py +532 -0
- multipers/ml/invariants_with_persistable.py +79 -0
- multipers/ml/kernels.py +176 -0
- multipers/ml/mma.py +659 -0
- multipers/ml/one.py +472 -0
- multipers/ml/point_clouds.py +238 -0
- multipers/ml/signed_betti.py +50 -0
- multipers/ml/signed_measures.py +1542 -0
- multipers/ml/sliced_wasserstein.py +461 -0
- multipers/ml/tools.py +113 -0
- multipers/mma_structures.cpython-310-darwin.so +0 -0
- multipers/mma_structures.pxd +127 -0
- multipers/mma_structures.pyx +2433 -0
- multipers/multiparameter_edge_collapse.py +41 -0
- multipers/multiparameter_module_approximation.cpython-310-darwin.so +0 -0
- multipers/multiparameter_module_approximation.pyx +211 -0
- multipers/pickle.py +53 -0
- multipers/plots.py +326 -0
- multipers/point_measure_integration.cpython-310-darwin.so +0 -0
- multipers/point_measure_integration.pyx +139 -0
- multipers/rank_invariant.cpython-310-darwin.so +0 -0
- multipers/rank_invariant.pyx +229 -0
- multipers/simplex_tree_multi.cpython-310-darwin.so +0 -0
- multipers/simplex_tree_multi.pxd +129 -0
- multipers/simplex_tree_multi.pyi +715 -0
- multipers/simplex_tree_multi.pyx +4655 -0
- multipers/slicer.cpython-310-darwin.so +0 -0
- multipers/slicer.pxd +781 -0
- multipers/slicer.pyx +3393 -0
- multipers/tensor.pxd +13 -0
- multipers/test.pyx +44 -0
- multipers/tests/__init__.py +40 -0
- multipers/tests/old_test_rank_invariant.py +91 -0
- multipers/tests/test_diff_helper.py +74 -0
- multipers/tests/test_hilbert_function.py +82 -0
- multipers/tests/test_mma.py +51 -0
- multipers/tests/test_point_clouds.py +59 -0
- multipers/tests/test_python-cpp_conversion.py +82 -0
- multipers/tests/test_signed_betti.py +181 -0
- multipers/tests/test_simplextreemulti.py +98 -0
- multipers/tests/test_slicer.py +63 -0
- multipers/torch/__init__.py +1 -0
- multipers/torch/diff_grids.py +217 -0
- multipers/torch/rips_density.py +257 -0
- multipers-2.0.0.dist-info/LICENSE +21 -0
- multipers-2.0.0.dist-info/METADATA +29 -0
- multipers-2.0.0.dist-info/RECORD +78 -0
- multipers-2.0.0.dist-info/WHEEL +5 -0
- 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=B6sf1mRtxWXPHc55fFl79iPQz4bJNGe_JC06RPNikd8,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/mma_structures.cpython-310-darwin.so,sha256=w0BG5rgIqHMy9a-HVeyq9YUasmVO4sZlb1zyCUNxB9g,1828672
|
|
7
|
+
multipers/euler_characteristic.pyx,sha256=Y3dzv590wffWR-UZvnL4mu9ETjMdQIVQWEEMPYB5rco,5846
|
|
8
|
+
multipers/distances.py,sha256=am3_SqSkGB9N59grxb_EZt-KYqqKln0WiR4Wia6N_LA,6067
|
|
9
|
+
multipers/mma_structures.pyx,sha256=5NF2-OeEi7YtT9yn6DqG7qTcCunQQyt7As1IJOkQfEQ,92297
|
|
10
|
+
multipers/filtrations.pxd,sha256=4ZSlqRc9MfBbQfBtmEsjCNBBVEC1I3iekgYmw_plecQ,9666
|
|
11
|
+
multipers/slicer.pyx,sha256=ePRWMxwCTNtinkqrhX7j2OzaoiPrxsYegIiNiZ-0K_E,128685
|
|
12
|
+
multipers/point_measure_integration.cpython-310-darwin.so,sha256=EKLXK2tvwrqwSdDjC4cCNc9denCaVoaq1oRwRNOxXYo,516624
|
|
13
|
+
multipers/function_rips.cpython-310-darwin.so,sha256=g6eKO5XkDXszur3uj2FCItwiyh1_BYvv4rPFtFjl-Og,516128
|
|
14
|
+
multipers/simplex_tree_multi.pyx,sha256=MyD3n0Z51KuNpMOdrnD4fxnuLW5pP6zQA-I2IMM_oPY,208003
|
|
15
|
+
multipers/__init__.py,sha256=NBT0tTFnmjEt2oa7v0AKmcCtiY89P3fqAp_BJZ1mI6c,389
|
|
16
|
+
multipers/_slicer_meta.py,sha256=-TAKssM_mW26dHyZ-AcfgYAFA4OmLmfyJpenjhlt0Jw,5651
|
|
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/multiparameter_module_approximation.cpython-310-darwin.so,sha256=JokX67ypbDkT70QkFtjya1r9DwqXz6WqswhCq_KS9zI,765968
|
|
21
|
+
multipers/plots.py,sha256=KsfER-9hb9xyudbGK8roaec-dCMUOcu-GJKQ1GT9N_4,10690
|
|
22
|
+
multipers/slicer.cpython-310-darwin.so,sha256=5dsHGbFnZ5uWISKWrbRRSWXB-39pPS-lwPp1jRWZjf8,2092752
|
|
23
|
+
multipers/simplex_tree_multi.pxd,sha256=1chZRR03pbfB3aUJKpj67HXe8NhqeY0KPOE6u4_YVpU,6333
|
|
24
|
+
multipers/io.cpython-310-darwin.so,sha256=ZuiHIl3BaT0XVLDIhjaOvD_q7Wr0pBubvnZMFw28wu8,345472
|
|
25
|
+
multipers/grids.cpython-310-darwin.so,sha256=uChhyRHk5P-tHlbVY13y2_S-x8-4U7SEsKSawcS0xBY,647056
|
|
26
|
+
multipers/slicer.pxd,sha256=YaELAN7tqE7Tk1xZ6SnchF5RNrapybFdpO3-K42OpnM,42497
|
|
27
|
+
multipers/grids.pyx,sha256=nnDa7W6hBlioWpUClszY1bO05rSyUL8iAfLG_cZQq1c,10799
|
|
28
|
+
multipers/test.pyx,sha256=-g7WU-jKrZK8H0c-6eAPsfrApjvTKrUoswVYFu8LoV4,1798
|
|
29
|
+
multipers/multiparameter_module_approximation.pyx,sha256=eyU4WzGB8QRfCVyPp29QBwcrOJzV2NOh-ADv1bYvQVk,8268
|
|
30
|
+
multipers/pickle.py,sha256=9XAh65HQo_MD663OLbP5-DEG6WNU4zyEJePybDu7Hww,2141
|
|
31
|
+
multipers/_signed_measure_meta.py,sha256=M2d4rIBG9yQLdpU-gVy-41KXtCGRhrPC0kQUn3Ab-zA,9128
|
|
32
|
+
multipers/tensor.pxd,sha256=MSmaMU0sOP9CHLmg4dym7nOGaI1S4cOdM01TQ9flI54,417
|
|
33
|
+
multipers/mma_structures.pxd,sha256=s-JSLqoh9y0x74DqHzdaZwszSBenhefpDh2Rmv1LRYU,6533
|
|
34
|
+
multipers/point_measure_integration.pyx,sha256=T4oGq8DHZiQj3XnPMQXzH-DdJk_FZ34Vyxqc8FQP38U,4794
|
|
35
|
+
multipers/rank_invariant.cpython-310-darwin.so,sha256=NJBp9a5oTC1tEQHSd8V1ZP5y8vE9TOVZvAwspmOsYuA,1172320
|
|
36
|
+
multipers/simplex_tree_multi.cpython-310-darwin.so,sha256=TKMOk-UbQeGpGkaw-GkbMop9D2PYoa32fUydYHDLngM,2998400
|
|
37
|
+
multipers/rank_invariant.pyx,sha256=svqh31G-oRzG-jHtJHLQvlgV771KeXu4cUG4Vf1HE0k,11626
|
|
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 @@
|
|
|
1
|
+
multipers
|