multipers 2.3.4__cp311-cp311-win_amd64.whl → 2.3.5b2__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.
- multipers/_signed_measure_meta.py +50 -84
- multipers/array_api/numpy.py +7 -0
- multipers/array_api/torch.py +7 -2
- multipers/filtrations/filtrations.py +2 -0
- multipers/function_rips.cp311-win_amd64.pyd +0 -0
- multipers/grids.cp311-win_amd64.pyd +0 -0
- multipers/grids.pyx +57 -19
- multipers/io.cp311-win_amd64.pyd +0 -0
- multipers/mma_structures.cp311-win_amd64.pyd +0 -0
- multipers/multi_parameter_rank_invariant/function_rips.h +1 -1
- multipers/multiparameter_module_approximation/approximation.h +8 -2
- multipers/multiparameter_module_approximation.cp311-win_amd64.pyd +0 -0
- multipers/plots.py +3 -2
- multipers/point_measure.cp311-win_amd64.pyd +0 -0
- multipers/point_measure.pyx +1 -1
- multipers/simplex_tree_multi.cp311-win_amd64.pyd +0 -0
- multipers/simplex_tree_multi.pyx +88 -56
- multipers/simplex_tree_multi.pyx.tp +23 -7
- multipers/slicer.cp311-win_amd64.pyd +0 -0
- multipers/slicer.pxd +60 -60
- multipers/slicer.pxd.tp +1 -1
- multipers/slicer.pyx +2052 -1137
- multipers/slicer.pyx.tp +100 -43
- multipers/tbb12.dll +0 -0
- multipers/tbbbind_2_5.dll +0 -0
- multipers/tbbmalloc.dll +0 -0
- multipers/tbbmalloc_proxy.dll +0 -0
- {multipers-2.3.4.dist-info → multipers-2.3.5b2.dist-info}/METADATA +1 -1
- {multipers-2.3.4.dist-info → multipers-2.3.5b2.dist-info}/RECORD +32 -32
- {multipers-2.3.4.dist-info → multipers-2.3.5b2.dist-info}/WHEEL +0 -0
- {multipers-2.3.4.dist-info → multipers-2.3.5b2.dist-info}/licenses/LICENSE +0 -0
- {multipers-2.3.4.dist-info → multipers-2.3.5b2.dist-info}/top_level.txt +0 -0
multipers/slicer.pyx.tp
CHANGED
|
@@ -28,8 +28,8 @@ from multipers.filtrations cimport *
|
|
|
28
28
|
from multipers.filtration_conversions cimport *
|
|
29
29
|
## TODO: these two are not needed, remove that by updating rank code.
|
|
30
30
|
from multipers.point_measure import sparsify, rank_decomposition_by_rectangles
|
|
31
|
-
from multipers.grids import compute_grid, sanitize_grid, evaluate_in_grid,
|
|
32
|
-
from multipers.array_api import api_from_tensor
|
|
31
|
+
from multipers.grids import compute_grid, sanitize_grid, evaluate_in_grid, _push_pts_to_lines, _inf_value
|
|
32
|
+
from multipers.array_api import api_from_tensor, api_from_tensors
|
|
33
33
|
|
|
34
34
|
import numpy as np
|
|
35
35
|
cimport cython
|
|
@@ -37,6 +37,7 @@ from libcpp.string cimport string
|
|
|
37
37
|
# python_value_type = np.float32
|
|
38
38
|
from typing import Union
|
|
39
39
|
from cython.operator cimport dereference
|
|
40
|
+
import time
|
|
40
41
|
|
|
41
42
|
## WARNING : This is repeated in the pxd file ...
|
|
42
43
|
python_indices_type=np.int32
|
|
@@ -302,10 +303,8 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
302
303
|
def persistence_on_line(self,basepoint,direction=None, bool keep_inf=True, bool full=False, bool ignore_infinite_filtration_values = True):
|
|
303
304
|
"""
|
|
304
305
|
Computes the persistence on a line L defined by
|
|
305
|
-
- a basepoint (num_parameters,) array
|
|
306
|
-
- an optional direction (num_parameters,) array
|
|
307
|
-
|
|
308
|
-
Warning: This is not parallelizable. Use `persitence_on_lines`.
|
|
306
|
+
- a basepoint (num_parameters,) or (num_basepoints, num_parameters,) array
|
|
307
|
+
- an optional direction (num_parameters,) or (num_basepoints, num_parameters,) array
|
|
309
308
|
"""
|
|
310
309
|
{{if D['IS_FLOAT']}}
|
|
311
310
|
self.push_to_line(basepoint,direction)
|
|
@@ -320,21 +319,25 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
320
319
|
return bcs
|
|
321
320
|
{{else}}
|
|
322
321
|
if not self.is_squeezed:
|
|
323
|
-
raise ValueError("Unsqueeze tensor, or provide a filtration grid. Cannot slice lines with integers
|
|
324
|
-
api =
|
|
325
|
-
|
|
322
|
+
raise ValueError("Unsqueeze tensor, or provide a filtration grid. Cannot slice lines with integers.")
|
|
323
|
+
api = api_from_tensors(basepoint, *self.filtration_grid)
|
|
324
|
+
basepoint = api.astensor(basepoint)
|
|
326
325
|
fil = evaluate_in_grid(np.asarray(self.get_filtrations()), self.filtration_grid)
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
326
|
+
if basepoint.ndim == 0 or basepoint.ndim >2:
|
|
327
|
+
raise ValueError(f"Expected a basepoint shape of the form (num_parameters,). Got {basepoint.shape=}")
|
|
328
|
+
if basepoint.ndim == 1:
|
|
329
|
+
basepoint = basepoint[None]
|
|
330
|
+
if direction is not None:
|
|
331
|
+
direction = api.astensor(direction)
|
|
332
|
+
if direction.ndim == 0 or direction.ndim >2:
|
|
333
|
+
raise ValueError(f"Expected a direction shape of the form (num_parameters,). Got {direction.shape=}")
|
|
334
|
+
if direction.ndim == 1:
|
|
335
|
+
direction = direction[None]
|
|
336
|
+
projected_fil = _push_pts_to_lines(fil, basepoint, direction, api=api)
|
|
337
|
+
bcs = self.compute_persistence(projected_fil, ignore_infinite_filtration_values=ignore_infinite_filtration_values)
|
|
336
338
|
if full:
|
|
337
|
-
|
|
339
|
+
_dirs = [None]*len(basepoint) if direction is None else direction
|
|
340
|
+
bcs = tuple({{D['PYTHON_TYPE']}}._bc_to_full(bcs, bp, dir) for bcs, bp, dir in zip(bcs,basepoint,_dirs))
|
|
338
341
|
return bcs
|
|
339
342
|
{{endif}}
|
|
340
343
|
|
|
@@ -412,18 +415,16 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
412
415
|
|
|
413
416
|
|
|
414
417
|
|
|
415
|
-
def compute_persistence(self,one_filtration=None, bool ignore_infinite_filtration_values = True)->tuple:
|
|
418
|
+
def compute_persistence(self,one_filtration=None, bool ignore_infinite_filtration_values = True, bool verbose=False)->tuple:
|
|
416
419
|
"""
|
|
417
420
|
Computes the current persistence, or the persistence
|
|
418
|
-
given by the filtration one_filtration (num_generators,).
|
|
421
|
+
given by the filtration one_filtration (num_generators,) or (num_filtrations, num_generators,).
|
|
419
422
|
"""
|
|
420
423
|
if one_filtration is not None:
|
|
424
|
+
if verbose:
|
|
425
|
+
print(f"Computing persistence on custom filtration: {one_filtration.shape=} {one_filtration.dtype=}")
|
|
421
426
|
api = api_from_tensor(one_filtration)
|
|
422
427
|
one_filtration=api.astensor(one_filtration)
|
|
423
|
-
# self.truc.set_one_filtration(one_filtration)
|
|
424
|
-
# s = self.unsqueeze()
|
|
425
|
-
# fil = evaluate_in_grid(np.asarray(self.get_filtrations()), self.filtration_grid)
|
|
426
|
-
# projected_fil =_push_pts_to_line(fil, basepoint, direction)
|
|
427
428
|
if one_filtration.ndim > 2 or one_filtration.ndim == 0:
|
|
428
429
|
raise ValueError(f"Expected a filtration shape of the form ((num_1_param), num_generators). Got {one_filtration.shape=}")
|
|
429
430
|
squeeze = False
|
|
@@ -431,16 +432,25 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
431
432
|
one_filtration = one_filtration[None]
|
|
432
433
|
squeeze = True
|
|
433
434
|
|
|
434
|
-
|
|
435
|
-
|
|
435
|
+
if self.is_squeezed:
|
|
436
|
+
if verbose:
|
|
437
|
+
print(f"Input is squeezed. Unsqueezing it for the line projection.")
|
|
438
|
+
temp = self.unsqueeze() ## TODO : optimize
|
|
439
|
+
bcs = temp._custom_persistences_idx(api.asnumpy(one_filtration),ignore_infinite_filtration_values)
|
|
440
|
+
else:
|
|
441
|
+
bcs = self._custom_persistences_idx(api.asnumpy(one_filtration),ignore_infinite_filtration_values)
|
|
442
|
+
|
|
443
|
+
num_filtrations = one_filtration.shape[0]
|
|
436
444
|
bcs = tuple(tuple(
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
445
|
+
evaluate_in_grid(
|
|
446
|
+
np.asarray(bcs[i][j]) if len(bcs[i][j]) else np.empty((0,2), dtype=np.int32),
|
|
447
|
+
[one_filtration[i]]*2, # 2 bc of 1d barcode
|
|
448
|
+
input_inf_value=-1,
|
|
449
|
+
)
|
|
450
|
+
for j in range(len(bcs[i])))
|
|
451
|
+
for i in range(num_filtrations)
|
|
443
452
|
)
|
|
453
|
+
|
|
444
454
|
return bcs[0] if squeeze else bcs
|
|
445
455
|
|
|
446
456
|
# TODO: Later
|
|
@@ -449,7 +459,6 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
449
459
|
# else:
|
|
450
460
|
# self.truc.compute_persistence()
|
|
451
461
|
self.truc.compute_persistence(ignore_infinite_filtration_values)
|
|
452
|
-
# return self
|
|
453
462
|
return self.get_barcode()
|
|
454
463
|
def get_barcode(self):
|
|
455
464
|
"""
|
|
@@ -496,14 +505,21 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
496
505
|
strategy=grid_strategy,
|
|
497
506
|
**infer_grid_kwargs,
|
|
498
507
|
)
|
|
499
|
-
def get_filtrations(self):
|
|
508
|
+
def get_filtrations(self, bool unsqueeze = False):
|
|
500
509
|
"""
|
|
501
510
|
Returns a view of the filtration values, as a list of numpy arrays.
|
|
502
511
|
"""
|
|
503
512
|
{{if D['IS_KCRITICAL']}}
|
|
513
|
+
if unsqueeze:
|
|
514
|
+
raise NotImplementedError("Unsqueezed version not implemented for multicritical filtrations.")
|
|
504
515
|
return _vff2kcview_{{D['SHORT_VALUE_TYPE']}}(self.truc.get_filtrations(), copy=False, duplicate=self.num_parameters)
|
|
505
516
|
{{else}}
|
|
506
|
-
|
|
517
|
+
out = _vff21cview_{{D['SHORT_VALUE_TYPE']}}(self.truc.get_filtrations(), copy=False, duplicate=self.num_parameters)
|
|
518
|
+
if not unsqueeze:
|
|
519
|
+
return out
|
|
520
|
+
if not self.is_squeezed:
|
|
521
|
+
raise ValueError(f"Already unsqueezed. Got {unsqueeze=}")
|
|
522
|
+
return evaluate_in_grid(np.asarray(out), self.filtration_grid)
|
|
507
523
|
{{endif}}
|
|
508
524
|
|
|
509
525
|
def get_dimensions(self)-> np.ndarray:
|
|
@@ -523,6 +539,35 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
523
539
|
"""
|
|
524
540
|
self.truc.prune_above_dimension(max_dimension)
|
|
525
541
|
return self
|
|
542
|
+
{{if not D["IS_KCRITICAL"]}}
|
|
543
|
+
def make_filtration_non_decreasing(self, bool safe=True):
|
|
544
|
+
if self.is_squeezed and safe:
|
|
545
|
+
for i_ in range(self.num_parameters):
|
|
546
|
+
F = self.filtration_grid[i_]
|
|
547
|
+
if not (F[1:]>=F[:-1]).all():
|
|
548
|
+
raise ValueError("Found non-sorted grid.")
|
|
549
|
+
|
|
550
|
+
cdef int i = 0
|
|
551
|
+
cdef int N = len(self)
|
|
552
|
+
cdef vector[int] dims = self.truc.get_dimensions()
|
|
553
|
+
cdef Py_ssize_t num_parameters = self.num_parameters
|
|
554
|
+
cdef vector[vector[unsigned int]] B = self.truc.get_boundaries() # const issues, I was lazy
|
|
555
|
+
|
|
556
|
+
with nogil:
|
|
557
|
+
for i in range(N):
|
|
558
|
+
for b in B[i]:
|
|
559
|
+
for j in range(num_parameters):
|
|
560
|
+
self.truc.get_filtrations()[b][j] = max(
|
|
561
|
+
self.truc.get_filtrations()[b][j],
|
|
562
|
+
self.truc.get_filtrations()[i][j]
|
|
563
|
+
)
|
|
564
|
+
return self
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
{{endif}}
|
|
570
|
+
|
|
526
571
|
def get_boundaries(self)->tuple[tuple]:
|
|
527
572
|
"""
|
|
528
573
|
Returns the boundaries of the generators.
|
|
@@ -686,8 +731,6 @@ cdef class {{D['PYTHON_TYPE']}}:
|
|
|
686
731
|
return self
|
|
687
732
|
|
|
688
733
|
def unsqueeze(self, grid=None)->{{D['PYTHON_TYPE'][:-3]+"f64"}}:
|
|
689
|
-
from multipers.grids import evaluate_in_grid, sanitize_grid
|
|
690
|
-
from multipers import Slicer
|
|
691
734
|
grid = self.filtration_grid if grid is None else grid
|
|
692
735
|
grid = sanitize_grid(grid, numpyfy=True)
|
|
693
736
|
new_filtrations = evaluate_in_grid(np.asarray(self.get_filtrations(), dtype=np.int32), grid)
|
|
@@ -1049,7 +1092,11 @@ def _rank_from_slicer(
|
|
|
1049
1092
|
grid_shape_with_degree = np.asarray(np.concatenate([[len(degrees)], grid_shape, grid_shape]), dtype=python_indices_type)
|
|
1050
1093
|
if verbose:
|
|
1051
1094
|
print("Container shape: ", grid_shape_with_degree)
|
|
1095
|
+
print("Mallocing...", end="", flush=True)
|
|
1096
|
+
t0 = time.time()
|
|
1052
1097
|
container_array = np.ascontiguousarray(np.zeros(grid_shape_with_degree, dtype=python_tensor_dtype).ravel())
|
|
1098
|
+
if verbose:
|
|
1099
|
+
print(f" Done. ({time.time()-t0:.3f}s).")
|
|
1053
1100
|
assert len(container_array) < np.iinfo(python_indices_type).max, "Too large container. Raise an issue on github if you encounter this issue. (Due to tensor's operator[])"
|
|
1054
1101
|
# if zero_pad:
|
|
1055
1102
|
# grid_shape_with_degree[1:] -= 1
|
|
@@ -1059,20 +1106,25 @@ def _rank_from_slicer(
|
|
|
1059
1106
|
|
|
1060
1107
|
## SLICERS
|
|
1061
1108
|
if verbose:
|
|
1062
|
-
print("Computing rank invariant...", end="")
|
|
1109
|
+
print("Computing rank invariant...", end="", flush=True)
|
|
1110
|
+
t0 = time.time()
|
|
1063
1111
|
_compute_rank_invariant(slicer, container_ptr, c_grid_shape, degrees, n_jobs, ignore_inf)
|
|
1064
1112
|
if verbose:
|
|
1065
|
-
print("Done.")
|
|
1113
|
+
print(f" Done. ({time.time()-t0:.3f}s).")
|
|
1066
1114
|
|
|
1067
1115
|
if verbose:
|
|
1068
|
-
print("Computing Möbius inversion...", end="")
|
|
1116
|
+
print("Computing Möbius inversion...", end="", flush=True)
|
|
1117
|
+
t0 = time.time()
|
|
1069
1118
|
# if zero_pad:
|
|
1070
1119
|
# grid_shape_with_degree[1:] += 1
|
|
1071
1120
|
rank = container_array.reshape(grid_shape_with_degree)
|
|
1072
1121
|
rank = tuple(rank_decomposition_by_rectangles(rank_of_degree, threshold=zero_pad) for rank_of_degree in rank)
|
|
1122
|
+
if verbose:
|
|
1123
|
+
print(f" Done. ({time.time()-t0:.3f}s).")
|
|
1124
|
+
|
|
1073
1125
|
if return_raw:
|
|
1074
1126
|
return rank
|
|
1075
|
-
|
|
1127
|
+
|
|
1076
1128
|
def clean_rank(rank_decomposition):
|
|
1077
1129
|
(coords, weights) = sparsify(np.ascontiguousarray(rank_decomposition))
|
|
1078
1130
|
births = coords[:,:num_parameters]
|
|
@@ -1082,7 +1134,12 @@ def _rank_from_slicer(
|
|
|
1082
1134
|
weights = weights[correct_indices]
|
|
1083
1135
|
return coords, weights
|
|
1084
1136
|
|
|
1137
|
+
if verbose:
|
|
1138
|
+
print("Cleaning output...", end="", flush=True)
|
|
1139
|
+
t0 = time.time()
|
|
1085
1140
|
out = tuple(clean_rank(rank_decomposition) for rank_decomposition in rank)
|
|
1086
1141
|
if verbose:
|
|
1087
|
-
print("Done.")
|
|
1142
|
+
print(f" Done. ({time.time()-t0:.3f}s).")
|
|
1088
1143
|
return out
|
|
1144
|
+
# %%
|
|
1145
|
+
|
multipers/tbb12.dll
CHANGED
|
Binary file
|
multipers/tbbbind_2_5.dll
CHANGED
|
Binary file
|
multipers/tbbmalloc.dll
CHANGED
|
Binary file
|
multipers/tbbmalloc_proxy.dll
CHANGED
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multipers
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5b2
|
|
4
4
|
Summary: Multiparameter Topological Persistence for Machine Learning
|
|
5
5
|
Author-email: David Loiseaux <david.lapous@proton.me>, Hannah Schreiber <hannah.schreiber@inria.fr>
|
|
6
6
|
Maintainer-email: David Loiseaux <david.lapous@proton.me>
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
multipers/__init__.py,sha256=y4BfbXAY2M2yZYob758IegZHwIbRgmKrph6lwe6WR6Q,733
|
|
2
|
-
multipers/_signed_measure_meta.py,sha256=
|
|
2
|
+
multipers/_signed_measure_meta.py,sha256=A7Zwd47qvL55xQjBebo9ZE9XI4tmnoKn3Ue-FM34vno,16460
|
|
3
3
|
multipers/_slicer_meta.py,sha256=mjIGR-B6HnQLSiMowEQ8EWQkD_IF3bBnDVzvwrZugZ4,7203
|
|
4
4
|
multipers/distances.py,sha256=uAZj2GtUQp50OxN2qU7sl2JqsmJ74IG9j5tZapLO2Us,6220
|
|
5
5
|
multipers/filtration_conversions.pxd,sha256=Je7a3F4zS1PQn6Ul1YCXgA6p39X2FouStru-XtN-aOw,10800
|
|
6
6
|
multipers/filtration_conversions.pxd.tp,sha256=_9tUvZVUA7J_RUM3q7BxY48fYgDHCUA7Xhy4nBfLLs0,3309
|
|
7
7
|
multipers/filtrations.pxd,sha256=08ONkZNCjs8Nme8lcD9myPz-K662sA-EDpSwzgC2_ts,9461
|
|
8
|
-
multipers/function_rips.cp311-win_amd64.pyd,sha256=
|
|
8
|
+
multipers/function_rips.cp311-win_amd64.pyd,sha256=EpJS_BfE8XkFp0wldk8agQ_sD-DPmI34Kq9GzEPy3wM,329728
|
|
9
9
|
multipers/function_rips.pyx,sha256=j5NjbK3YrAv_2s8YHB1JB0k6m9NC7RQCSFlJe-w_kgE,5252
|
|
10
|
-
multipers/grids.cp311-win_amd64.pyd,sha256=
|
|
11
|
-
multipers/grids.pyx,sha256=
|
|
12
|
-
multipers/io.cp311-win_amd64.pyd,sha256=
|
|
10
|
+
multipers/grids.cp311-win_amd64.pyd,sha256=7w-gWvqGhFR5tbafTMXQCc4Z9QdirrNS1pDDON1lIsw,477184
|
|
11
|
+
multipers/grids.pyx,sha256=8iHLcwm5f4PXJkt6DS81RgiXgyNp5VF4KayF1vBRV4k,19521
|
|
12
|
+
multipers/io.cp311-win_amd64.pyd,sha256=qpBRC2xAJWYwuaWJJDj--qtFc-KWCjNMAF1htYVkhko,221696
|
|
13
13
|
multipers/io.pyx,sha256=pQBH_rSqaCZqDSxTLnhlyECP3fLbX2tR_RKJHydHm_0,22210
|
|
14
|
-
multipers/mma_structures.cp311-win_amd64.pyd,sha256=
|
|
14
|
+
multipers/mma_structures.cp311-win_amd64.pyd,sha256=HzwL8GOCxEe2dz17QSX-7BgT0nmAY8k4Qc1H5R_3mq8,1323520
|
|
15
15
|
multipers/mma_structures.pxd,sha256=jh1QnQRidt_VK0CK7losQi6rAl_1qG5DNuR23J42pUA,6595
|
|
16
16
|
multipers/mma_structures.pyx,sha256=1FQ_sqkpHHkCyCLLKkR9lUgZKDZFt-YgjnDd8NGmw6Q,109526
|
|
17
17
|
multipers/mma_structures.pyx.tp,sha256=QLo4ZZDnFuWNot771jYkYHc9ZQq6CJIpkRkeRwGi7XA,42297
|
|
18
18
|
multipers/multiparameter_edge_collapse.py,sha256=MFt0eKQQSv2354omeIqOmzASYTKIMsYdxZHFZauQr8g,1229
|
|
19
|
-
multipers/multiparameter_module_approximation.cp311-win_amd64.pyd,sha256=
|
|
19
|
+
multipers/multiparameter_module_approximation.cp311-win_amd64.pyd,sha256=1UIH-77AS_Pj_zOXv1V4LqOK2JDGrCkBIL0zTnco1qY,445952
|
|
20
20
|
multipers/multiparameter_module_approximation.pyx,sha256=wp7la7Z9wBngnfw6WOVddf93mPyXf4HfNT6dKW2Z0r0,9030
|
|
21
21
|
multipers/pickle.py,sha256=YYVt4iHiD16E1x5Yn_4mX6P5P8rKi56pNGjJo5IzPhc,2579
|
|
22
|
-
multipers/plots.py,sha256=
|
|
23
|
-
multipers/point_measure.cp311-win_amd64.pyd,sha256=
|
|
24
|
-
multipers/point_measure.pyx,sha256=
|
|
25
|
-
multipers/simplex_tree_multi.cp311-win_amd64.pyd,sha256=
|
|
22
|
+
multipers/plots.py,sha256=jXENhITNIbLcLpIKibn5MXzxaeq8DEr1WLAoEU3fmTQ,15436
|
|
23
|
+
multipers/point_measure.cp311-win_amd64.pyd,sha256=LVIX6u8qr-o4HXdi_0rT6u5wc4I0NRbxeeFl5EgdtzQ,620544
|
|
24
|
+
multipers/point_measure.pyx,sha256=AzlAz1C0TW6jxPllbhMxG38ISlSE7h4U-y0mT7Uzndc,14084
|
|
25
|
+
multipers/simplex_tree_multi.cp311-win_amd64.pyd,sha256=G2eica-DZ9vDu_kKAOmI0lrEpnSziJfxOXru_1WB6N4,3812352
|
|
26
26
|
multipers/simplex_tree_multi.pxd,sha256=KBX_vcNgtBjNHThUUOXp0r4HWj3EX1DGa6cX9mDi6aI,6649
|
|
27
|
-
multipers/simplex_tree_multi.pyx,sha256=
|
|
28
|
-
multipers/simplex_tree_multi.pyx.tp,sha256=
|
|
29
|
-
multipers/slicer.cp311-win_amd64.pyd,sha256=
|
|
30
|
-
multipers/slicer.pxd,sha256=
|
|
31
|
-
multipers/slicer.pxd.tp,sha256=
|
|
32
|
-
multipers/slicer.pyx,sha256=
|
|
33
|
-
multipers/slicer.pyx.tp,sha256=
|
|
34
|
-
multipers/tbb12.dll,sha256=
|
|
35
|
-
multipers/tbbbind_2_5.dll,sha256=
|
|
36
|
-
multipers/tbbmalloc.dll,sha256=
|
|
37
|
-
multipers/tbbmalloc_proxy.dll,sha256=
|
|
27
|
+
multipers/simplex_tree_multi.pyx,sha256=lzxlJnkgv43N6gZsYthIuoYKT45jaah9ogUdO1nvWBk,506429
|
|
28
|
+
multipers/simplex_tree_multi.pyx.tp,sha256=_UCL4n9P0gdqccJPx05dC6lwZFlP64M4WVX0uu6gTlA,90051
|
|
29
|
+
multipers/slicer.cp311-win_amd64.pyd,sha256=_6RxVTWeSUXHSCWbApH7_0Nb93-AeCVvZuvUTILsrko,11885056
|
|
30
|
+
multipers/slicer.pxd,sha256=RB0W089T2sFVJGdD1N9C274_GqLPqPH0Hb2nEj2WEwM,185510
|
|
31
|
+
multipers/slicer.pxd.tp,sha256=z-fdpEJWiDncVCFcwVh5Gr_MtRjIV8ln8xOPmd1B1-s,10250
|
|
32
|
+
multipers/slicer.pyx,sha256=GO_Y0JQMmpJNjindQSmCPT2AiluzzOGdbYctMv7wTsQ,947463
|
|
33
|
+
multipers/slicer.pyx.tp,sha256=9qgb4CYhZ-hEEF42mLgfbRNbfr5CconsimVnXInDWRQ,47254
|
|
34
|
+
multipers/tbb12.dll,sha256=M6QIBW4AdNhi0lTMy6FcxTPR_BaOYLcQquMZ5YZ6MD8,344576
|
|
35
|
+
multipers/tbbbind_2_5.dll,sha256=Mys6mt1_Yc4-n0XrKLY4BTPD6QwsqSpbiQHrg5Yk0Bo,23552
|
|
36
|
+
multipers/tbbmalloc.dll,sha256=DkUcOTkoUlc5bwSWW-KF3Vzdm9lL6EVA_D_SebFH_q4,113664
|
|
37
|
+
multipers/tbbmalloc_proxy.dll,sha256=n_GlUK8IfYnRz0Piuw2mN4HmPHtyBtqDsrqoFkKyCb4,30720
|
|
38
38
|
multipers/tensor.pxd,sha256=MSmaMU0sOP9CHLmg4dym7nOGaI1S4cOdM01TQ9flI54,417
|
|
39
39
|
multipers/test.pyx,sha256=-g7WU-jKrZK8H0c-6eAPsfrApjvTKrUoswVYFu8LoV4,1798
|
|
40
40
|
multipers/array_api/__init__.py,sha256=jyvi7Gzd7Si_imgaodz80fcA-68MikAGk8g79_vj6yo,1545
|
|
41
|
-
multipers/array_api/numpy.py,sha256=
|
|
42
|
-
multipers/array_api/torch.py,sha256=
|
|
41
|
+
multipers/array_api/numpy.py,sha256=0Ln_jY891Jei_HQlWY9S_1-lLPYYOzXRyZknPO5ZYTc,2518
|
|
42
|
+
multipers/array_api/torch.py,sha256=B5ukw4m2OeHLTLaHSytTKDqdcJ4BwV8nKK3JREJAjuQ,2613
|
|
43
43
|
multipers/data/MOL2.py,sha256=nLZHy2OSFN9Z2uJKsbqWOEG2R7G-uH6dCLHG48UjvR4,15428
|
|
44
44
|
multipers/data/UCR.py,sha256=PuT8l3i26y0goBzIESwdgJAe6YFCyDiWSoxECcP5rhs,798
|
|
45
45
|
multipers/data/__init__.py,sha256=w7uUe4LOHbdbKU4R8MNs7em65wZJN0v5ukoG1otFanQ,24
|
|
@@ -51,7 +51,7 @@ multipers/data/shape3d.py,sha256=AE-vvjKrhKxOwMo-lurUsFqqLjIg5obo-RTbRZF_5Mk,389
|
|
|
51
51
|
multipers/data/synthetic.py,sha256=RvLWIBE5j99kJSt-D7cnPGI3c7skD4p8_qofJbMIXM0,3078
|
|
52
52
|
multipers/filtrations/__init__.py,sha256=Lg0EHe2cxT32UQAg0kr_Vpua-xPBZxGol8VIfz8UwWk,319
|
|
53
53
|
multipers/filtrations/density.py,sha256=XNPHCwyC8FwAdSfNp1ofxcxfP5ZFGZ6K-DUeXsfM4eg,18155
|
|
54
|
-
multipers/filtrations/filtrations.py,sha256=
|
|
54
|
+
multipers/filtrations/filtrations.py,sha256=5d-i6JfxM5_WzteVkBHtTelZvD1lsL9hsHBYvbeY8FM,13454
|
|
55
55
|
multipers/gudhi/Persistence_slices_interface.h,sha256=QnUeCCKi9K8CfqI3W5i3Ra1Jy2Z1IIivr3MIpnBsnYU,6562
|
|
56
56
|
multipers/gudhi/Simplex_tree_interface.h,sha256=kkq8pE3jKGLY1dK7sYpb_uERHaWGurrRXfaw_ygs-mY,10217
|
|
57
57
|
multipers/gudhi/Simplex_tree_multi_interface.h,sha256=7D9EqyO9dgi-VMTf-O8SR2UMQL95q_TL9ApmmN4ggFw,25484
|
|
@@ -151,11 +151,11 @@ multipers/ml/sliced_wasserstein.py,sha256=jgq4ND3EWwwJBopqRvfJLsoOptiMHjS3zEAENB
|
|
|
151
151
|
multipers/ml/tools.py,sha256=DOPcqmvZP2bA7M08GrwccdebwDq1HEwYdhNRGT7eZMI,3453
|
|
152
152
|
multipers/multi_parameter_rank_invariant/diff_helpers.h,sha256=wMCOhAewWd6-lulLND0y8M0MZoru6zn_8J3qfXDjLds,3477
|
|
153
153
|
multipers/multi_parameter_rank_invariant/euler_characteristic.h,sha256=gLzz-VCY2xPW11Fmi1kG_On33h7EHFmW1TdsVWdzovA,3295
|
|
154
|
-
multipers/multi_parameter_rank_invariant/function_rips.h,sha256=
|
|
154
|
+
multipers/multi_parameter_rank_invariant/function_rips.h,sha256=Fl-CqyQ3PGKjHWZbFa_aBh6-vmR8RKOFliC--Ho_2yo,13507
|
|
155
155
|
multipers/multi_parameter_rank_invariant/hilbert_function.h,sha256=S_LRkNSU_bjjcPRS1pWpVHWOLMFQIAYa9dbAhwz0W8c,36412
|
|
156
156
|
multipers/multi_parameter_rank_invariant/persistence_slices.h,sha256=oVMsNkn_VB5lQ_2qsKw5ydPoHnMuGbtvrIN_ga7XnGQ,5986
|
|
157
157
|
multipers/multi_parameter_rank_invariant/rank_invariant.h,sha256=-W_ai4I_wkAIodU3Ubgvuc5cD_VLJzB4479EsVSynsM,16371
|
|
158
|
-
multipers/multiparameter_module_approximation/approximation.h,sha256=
|
|
158
|
+
multipers/multiparameter_module_approximation/approximation.h,sha256=VbVNRdxvNqrSJKfszPwbYK4Fyxfox8S-rstVRRDdz6s,96988
|
|
159
159
|
multipers/multiparameter_module_approximation/combinatory.h,sha256=Ck-VKQ56wsXCgQvIbpfTnBOweSBRm4rnChLfHf6JWlc,3605
|
|
160
160
|
multipers/multiparameter_module_approximation/debug.h,sha256=yy7miaqw-Lj8u1yMB9HmtJL02abf3K6JlqS6LbkUVfI,2692
|
|
161
161
|
multipers/multiparameter_module_approximation/euler_curves.h,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -178,8 +178,8 @@ multipers/tests/__init__.py,sha256=-7Fj-zFAfBJv18trg0CPglQTmYu_ehySZGqtJzPlN8U,1
|
|
|
178
178
|
multipers/torch/__init__.py,sha256=OLxIiZ389uCqehpUxBPUI_x1SYu531onc4tiTscAuIw,27
|
|
179
179
|
multipers/torch/diff_grids.py,sha256=2YK-c351tBpj8sfzjf26fbE1l0xlWse7oVVfDHD3zwM,7492
|
|
180
180
|
multipers/torch/rips_density.py,sha256=H-kmSzY8hXhmVn15Oltc71DHs1IUHg5oPRgNyWW8L4Q,11706
|
|
181
|
-
multipers-2.3.
|
|
182
|
-
multipers-2.3.
|
|
183
|
-
multipers-2.3.
|
|
184
|
-
multipers-2.3.
|
|
185
|
-
multipers-2.3.
|
|
181
|
+
multipers-2.3.5b2.dist-info/licenses/LICENSE,sha256=UsQRnvlo_9wpQS9DNt52GEraERHwK2GIRwuqr2Yv5JI,1071
|
|
182
|
+
multipers-2.3.5b2.dist-info/METADATA,sha256=KHctITvlAapkwilssVT9VkgDMeuatKEzPNZOU62f5Ik,9825
|
|
183
|
+
multipers-2.3.5b2.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
|
|
184
|
+
multipers-2.3.5b2.dist-info/top_level.txt,sha256=L9e0AGmhRzrNw9FpuUx-zlqi5NcBOmrI9wYY8kYWr8A,10
|
|
185
|
+
multipers-2.3.5b2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|