multipers 2.3.3b1__cp312-cp312-win_amd64.whl → 2.3.3b2__cp312-cp312-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.

@@ -37,3 +37,7 @@ def api_from_tensors(*args):
37
37
  if is_torch:
38
38
  return torchapi
39
39
  raise ValueError(f"Incompatible types got {[type(x) for x in args]=}.")
40
+
41
+ def to_numpy(x):
42
+ api = api_from_tensor(x)
43
+ return api.asnumpy(x)
Binary file
Binary file
Binary file
multipers/plots.py CHANGED
@@ -3,13 +3,9 @@ from typing import Optional
3
3
  import matplotlib.pyplot as plt
4
4
  import numpy as np
5
5
  from numpy.typing import ArrayLike
6
+ from warnings import warn
7
+ from multipers.array_api import to_numpy
6
8
 
7
- try:
8
- import torch
9
-
10
- istensor = torch.is_tensor
11
- except ImportError:
12
- istensor = lambda x: False
13
9
 
14
10
 
15
11
  def _plot_rectangle(rectangle: np.ndarray, weight, **plt_kwargs):
@@ -124,11 +120,8 @@ def plot_signed_measure(signed_measure, threshold=None, ax=None, **plt_kwargs):
124
120
  else:
125
121
  plt.sca(ax)
126
122
  pts, weights = signed_measure
127
- if istensor(pts):
128
- pts = pts.detach().numpy()
129
- if istensor(weights):
130
- weights = weights.detach().numpy()
131
- pts = np.asarray(pts)
123
+ pts = to_numpy(pts)
124
+ weights = to_numpy(weights)
132
125
  num_pts = pts.shape[0]
133
126
  num_parameters = pts.shape[1]
134
127
  if threshold is None:
@@ -143,15 +136,6 @@ def plot_signed_measure(signed_measure, threshold=None, ax=None, **plt_kwargs):
143
136
  threshold = np.max(
144
137
  [threshold, [plt.gca().get_xlim()[1], plt.gca().get_ylim()[1]]], axis=0
145
138
  )
146
- if isinstance(pts, np.ndarray):
147
- pass
148
- else:
149
- import torch
150
-
151
- if isinstance(pts, torch.Tensor):
152
- pts = pts.detach().numpy()
153
- else:
154
- raise Exception("Invalid measure type.")
155
139
 
156
140
  assert num_parameters in (2, 4)
157
141
  if num_parameters == 2:
@@ -222,9 +206,9 @@ def plot_surface(
222
206
 
223
207
  def plot_surfaces(HF, size=4, **plt_args):
224
208
  grid, hf = HF
225
- assert (
226
- hf.ndim == 3
227
- ), f"Found hf.shape = {hf.shape}, expected ndim = 3 : degree, 2-parameter surface."
209
+ assert hf.ndim == 3, (
210
+ f"Found hf.shape = {hf.shape}, expected ndim = 3 : degree, 2-parameter surface."
211
+ )
228
212
  num_degrees = hf.shape[0]
229
213
  fig, axes = plt.subplots(
230
214
  nrows=1, ncols=num_degrees, figsize=(num_degrees * size, size)
@@ -260,7 +244,7 @@ def plot2d_PyModule(
260
244
  dimension=-1,
261
245
  separated=False,
262
246
  min_persistence=0,
263
- alpha=0.8,
247
+ alpha=None,
264
248
  verbose=False,
265
249
  save=False,
266
250
  dpi=200,
@@ -278,12 +262,14 @@ def plot2d_PyModule(
278
262
 
279
263
  shapely = True and shapely
280
264
  except ImportError:
281
- from warnings import warn
282
-
283
265
  shapely = False
284
266
  warn(
285
267
  "Shapely not installed. Fallbacking to matplotlib. The plots may be inacurate."
286
268
  )
269
+ if alpha is None:
270
+ alpha = 0.8 if shapely else 1
271
+ if not shapely and alpha != 1:
272
+ warn("Opacity without shapely will lead to incorect plots.")
287
273
  cmap = (
288
274
  matplotlib.colormaps["Spectral"] if cmap is None else matplotlib.colormaps[cmap]
289
275
  )
@@ -373,22 +359,26 @@ def plot_simplicial_complex(
373
359
  pts = np.asarray(pts)
374
360
  values = np.array([-f[1] for s, f in st.get_skeleton(0)])
375
361
  qs = np.quantile(values, np.linspace(0, 1, 100))
376
- color_idx = lambda d: np.searchsorted(qs, d) / 100
362
+
363
+ def color_idx(d):
364
+ return np.searchsorted(qs, d) / 100
377
365
 
378
366
  from matplotlib.pyplot import get_cmap
379
367
 
380
- color = lambda d: get_cmap("viridis")([0, color_idx(d), 1])[1]
368
+ def color(d):
369
+ return get_cmap("viridis")([0, color_idx(d), 1])[1]
370
+
381
371
  cols_pc = np.asarray([color(v) for v in values])
382
372
  ax = plt.gca()
383
- for s, f in st: ## simplexe, filtration
373
+ for s, f in st: # simplexe, filtration
384
374
  density = -f[1]
385
- if len(s) <= 1 or f[0] > x or density < -y: ## simplexe = point
375
+ if len(s) <= 1 or f[0] > x or density < -y: # simplexe = point
386
376
  continue
387
- if len(s) == 2: ## simplexe = segment
377
+ if len(s) == 2: # simplexe = segment
388
378
  xx = np.array([pts[a, 0] for a in s])
389
379
  yy = np.array([pts[a, 1] for a in s])
390
380
  plt.plot(xx, yy, c=color(density), alpha=1, zorder=10 * density, lw=1.5)
391
- if len(s) == 3: ## simplexe = triangle
381
+ if len(s) == 3: # simplexe = triangle
392
382
  xx = np.array([pts[a, 0] for a in s])
393
383
  yy = np.array([pts[a, 1] for a in s])
394
384
  _c = color(density)
@@ -415,11 +405,16 @@ def plot_point_cloud(pts, function, x, y, mma=None, degree=None):
415
405
  return
416
406
  values = 1 - function
417
407
  qs = np.quantile(values, np.linspace(0, 1, 100))
418
- color_idx = lambda d: np.searchsorted(qs, d) / 100
408
+
409
+ def color_idx(d):
410
+ return np.searchsorted(qs, d) / 100
411
+
419
412
  from matplotlib.pyplot import get_cmap
420
413
  from matplotlib.collections import PatchCollection
421
414
 
422
- color = lambda d: get_cmap("viridis")([0, color_idx(d), 1])[1]
415
+ def color(d):
416
+ return get_cmap("viridis")([0, color_idx(d), 1])[1]
417
+
423
418
  ax = plt.gca()
424
419
  idx = function <= y
425
420
  circles = [plt.Circle(pt, x, color=color(c)) for pt, c in zip(pts[idx], function)]
Binary file
Binary file
multipers/slicer.pxd CHANGED
@@ -2013,51 +2013,51 @@ cdef extern from "multiparameter_module_approximation/approximation.h" namespace
2013
2013
 
2014
2014
  import multipers.slicer as mps
2015
2015
  from cython.operator cimport dereference
2016
- cdef inline Module[double] _multiparameter_module_approximation_f64(object slicer, One_critical_filtration[double] direction, double max_error, Box[double] box, bool threshold, bool complete, bool verbose):
2016
+ cdef inline Module[float] _multiparameter_module_approximation_f32(object slicer, One_critical_filtration[float] direction, float max_error, Box[float] box, bool threshold, bool complete, bool verbose):
2017
2017
  import multipers.slicer as mps
2018
2018
  cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
2019
- cdef Module[double] mod
2019
+ cdef Module[float] mod
2020
2020
  if False:
2021
2021
  pass
2022
- elif isinstance(slicer, mps._KSlicer_Matrix0_vine_f64):
2022
+ elif isinstance(slicer, mps._KSlicer_Matrix0_vine_f32):
2023
2023
  with nogil:
2024
- mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix0_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2024
+ mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix0_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2025
2025
  return mod
2026
- elif isinstance(slicer, mps._KSlicer_Matrix1_vine_f64):
2026
+ elif isinstance(slicer, mps._KSlicer_Matrix1_vine_f32):
2027
2027
  with nogil:
2028
- mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix1_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2028
+ mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix1_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2029
2029
  return mod
2030
- elif isinstance(slicer, mps._Slicer_Matrix0_vine_f64):
2030
+ elif isinstance(slicer, mps._Slicer_Matrix0_vine_f32):
2031
2031
  with nogil:
2032
- mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix0_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2032
+ mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix0_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2033
2033
  return mod
2034
- elif isinstance(slicer, mps._Slicer_Matrix1_vine_f64):
2034
+ elif isinstance(slicer, mps._Slicer_Matrix1_vine_f32):
2035
2035
  with nogil:
2036
- mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix1_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2036
+ mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix1_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2037
2037
  return mod
2038
2038
  else:
2039
2039
  raise ValueError(f"Unsupported slicer type {type(slicer)}")
2040
- cdef inline Module[float] _multiparameter_module_approximation_f32(object slicer, One_critical_filtration[float] direction, float max_error, Box[float] box, bool threshold, bool complete, bool verbose):
2040
+ cdef inline Module[double] _multiparameter_module_approximation_f64(object slicer, One_critical_filtration[double] direction, double max_error, Box[double] box, bool threshold, bool complete, bool verbose):
2041
2041
  import multipers.slicer as mps
2042
2042
  cdef intptr_t slicer_ptr = <intptr_t>(slicer.get_ptr())
2043
- cdef Module[float] mod
2043
+ cdef Module[double] mod
2044
2044
  if False:
2045
2045
  pass
2046
- elif isinstance(slicer, mps._KSlicer_Matrix0_vine_f32):
2046
+ elif isinstance(slicer, mps._KSlicer_Matrix0_vine_f64):
2047
2047
  with nogil:
2048
- mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix0_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2048
+ mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix0_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2049
2049
  return mod
2050
- elif isinstance(slicer, mps._KSlicer_Matrix1_vine_f32):
2050
+ elif isinstance(slicer, mps._KSlicer_Matrix1_vine_f64):
2051
2051
  with nogil:
2052
- mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix1_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2052
+ mod = multiparameter_module_approximation(dereference(<C_KSlicer_Matrix1_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2053
2053
  return mod
2054
- elif isinstance(slicer, mps._Slicer_Matrix0_vine_f32):
2054
+ elif isinstance(slicer, mps._Slicer_Matrix0_vine_f64):
2055
2055
  with nogil:
2056
- mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix0_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2056
+ mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix0_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2057
2057
  return mod
2058
- elif isinstance(slicer, mps._Slicer_Matrix1_vine_f32):
2058
+ elif isinstance(slicer, mps._Slicer_Matrix1_vine_f64):
2059
2059
  with nogil:
2060
- mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix1_vine_f32*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2060
+ mod = multiparameter_module_approximation(dereference(<C_Slicer_Matrix1_vine_f64*>(slicer_ptr)), direction, max_error, box, threshold, complete, verbose)
2061
2061
  return mod
2062
2062
  else:
2063
2063
  raise ValueError(f"Unsupported slicer type {type(slicer)}")
multipers/slicer.pyx CHANGED
@@ -19914,7 +19914,7 @@ def _from_bitmapf32(image, **slicer_kwargs):
19914
19914
  # print(f"F = {np.asarray(F[i])}")
19915
19915
  slicer = _Slicer(gen_maps, gen_dims, filtration_values)
19916
19916
  return slicer
19917
- def _from_bitmapi64(image, **slicer_kwargs):
19917
+ def _from_bitmapi32(image, **slicer_kwargs):
19918
19918
  from multipers import Slicer
19919
19919
  dtype = slicer_kwargs.get("dtype", image.dtype)
19920
19920
  slicer_kwargs["dtype"] = dtype
@@ -19932,9 +19932,9 @@ def _from_bitmapi64(image, **slicer_kwargs):
19932
19932
  cdef cset[unsigned int] vertices
19933
19933
 
19934
19934
  cdef unsigned int num_gens = gen_dims.size()
19935
- filtration_values = np.zeros(shape=(num_gens, num_parameters), dtype = np.int64) - _Slicer._inf_value()
19936
- cdef int64_t[:,:] F = filtration_values
19937
- cdef int64_t[:,:] c_img = image.reshape(-1,num_parameters)
19935
+ filtration_values = np.zeros(shape=(num_gens, num_parameters), dtype = np.int32) - _Slicer._inf_value()
19936
+ cdef int32_t[:,:] F = filtration_values
19937
+ cdef int32_t[:,:] c_img = image.reshape(-1,num_parameters)
19938
19938
  with nogil:
19939
19939
  for i in range(num_gens):
19940
19940
  # with gil:
@@ -19952,7 +19952,7 @@ def _from_bitmapi64(image, **slicer_kwargs):
19952
19952
  # print(f"F = {np.asarray(F[i])}")
19953
19953
  slicer = _Slicer(gen_maps, gen_dims, filtration_values)
19954
19954
  return slicer
19955
- def _from_bitmapi32(image, **slicer_kwargs):
19955
+ def _from_bitmapi64(image, **slicer_kwargs):
19956
19956
  from multipers import Slicer
19957
19957
  dtype = slicer_kwargs.get("dtype", image.dtype)
19958
19958
  slicer_kwargs["dtype"] = dtype
@@ -19970,9 +19970,9 @@ def _from_bitmapi32(image, **slicer_kwargs):
19970
19970
  cdef cset[unsigned int] vertices
19971
19971
 
19972
19972
  cdef unsigned int num_gens = gen_dims.size()
19973
- filtration_values = np.zeros(shape=(num_gens, num_parameters), dtype = np.int32) - _Slicer._inf_value()
19974
- cdef int32_t[:,:] F = filtration_values
19975
- cdef int32_t[:,:] c_img = image.reshape(-1,num_parameters)
19973
+ filtration_values = np.zeros(shape=(num_gens, num_parameters), dtype = np.int64) - _Slicer._inf_value()
19974
+ cdef int64_t[:,:] F = filtration_values
19975
+ cdef int64_t[:,:] c_img = image.reshape(-1,num_parameters)
19976
19976
  with nogil:
19977
19977
  for i in range(num_gens):
19978
19978
  # with gil:
@@ -20033,10 +20033,10 @@ def from_bitmap(img, **kwargs):
20033
20033
  img = np.asarray(img)
20034
20034
  if img.dtype == np.float32:
20035
20035
  return _from_bitmapf32(img, **kwargs)
20036
- if img.dtype == np.int64:
20037
- return _from_bitmapi64(img, **kwargs)
20038
20036
  if img.dtype == np.int32:
20039
20037
  return _from_bitmapi32(img, **kwargs)
20038
+ if img.dtype == np.int64:
20039
+ return _from_bitmapi64(img, **kwargs)
20040
20040
  if img.dtype == np.float64:
20041
20041
  return _from_bitmapf64(img, **kwargs)
20042
20042
  raise ValueError(f"Invalid dtype. Got {img.dtype=}, was expecting {available_dtype=}.")
@@ -20046,7 +20046,7 @@ def from_function_delaunay(
20046
20046
  grades,
20047
20047
  int degree=-1,
20048
20048
  backend:Optional[_valid_pers_backend]=None,
20049
- vineyard=None, # TODO : Optional[bool] when cython fixes it
20049
+ vineyard=None, # Optionmal[bool], wait for cython
20050
20050
  dtype=np.float64,
20051
20051
  bool verbose = False,
20052
20052
  bool clear = True,
@@ -20061,9 +20061,9 @@ def from_function_delaunay(
20061
20061
  backend : slicer backend, e.g. "matrix", "clement"
20062
20062
  vineyard : bool, use a vineyard-compatible backend
20063
20063
  """
20064
- from multipers.io import _check_available, function_delaunay_presentation_to_slicer
20064
+ from multipers.io import function_delaunay_presentation_to_slicer, _init_external_softwares
20065
20065
  s = multipers.Slicer(None, backend=backend, vineyard=vineyard, dtype=dtype)
20066
- assert _check_available("function_delaunay"), f"Could not find function_delaunay"
20066
+ _init_external_softwares(requires=["function_delaunay"])
20067
20067
  function_delaunay_presentation_to_slicer(s, points, grades, degree=degree, verbose=verbose,clear=clear)
20068
20068
  if degree >= 0:
20069
20069
  s.minpres_degree = degree
multipers/slicer.pyx.tp CHANGED
@@ -764,7 +764,7 @@ def from_function_delaunay(
764
764
  grades,
765
765
  int degree=-1,
766
766
  backend:Optional[_valid_pers_backend]=None,
767
- vineyard=None, # TODO : Optional[bool] when cython fixes it
767
+ vineyard=None, # Optionmal[bool], wait for cython
768
768
  dtype=np.float64,
769
769
  bool verbose = False,
770
770
  bool clear = True,
@@ -779,9 +779,9 @@ def from_function_delaunay(
779
779
  backend : slicer backend, e.g. "matrix", "clement"
780
780
  vineyard : bool, use a vineyard-compatible backend
781
781
  """
782
- from multipers.io import _check_available, function_delaunay_presentation_to_slicer
782
+ from multipers.io import function_delaunay_presentation_to_slicer, _init_external_softwares
783
783
  s = multipers.Slicer(None, backend=backend, vineyard=vineyard, dtype=dtype)
784
- assert _check_available("function_delaunay"), f"Could not find function_delaunay"
784
+ _init_external_softwares(requires=["function_delaunay"])
785
785
  function_delaunay_presentation_to_slicer(s, points, grades, degree=degree, verbose=verbose,clear=clear)
786
786
  if degree >= 0:
787
787
  s.minpres_degree = degree
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multipers
3
- Version: 2.3.3b1
3
+ Version: 2.3.3b2
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>
@@ -5,39 +5,39 @@ 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.cp312-win_amd64.pyd,sha256=AJ0if5RRyDIX8WeUTfZC8G8Rnd-DdncUdWaOpVuABRw,333312
8
+ multipers/function_rips.cp312-win_amd64.pyd,sha256=1OoP8ySxNk67o3L-Y-vhvyLd4_g6r61IeN_Auo9sp0I,332800
9
9
  multipers/function_rips.pyx,sha256=j5NjbK3YrAv_2s8YHB1JB0k6m9NC7RQCSFlJe-w_kgE,5252
10
- multipers/grids.cp312-win_amd64.pyd,sha256=NIc7-FDDODdTHkwYnTTxLcs_yNPjh6yyB6ETv1QXoWA,480768
10
+ multipers/grids.cp312-win_amd64.pyd,sha256=jgNU_LxJnp-gcCRnmtc9YMgh2GmP1f4agF9G1p_3J_A,479232
11
11
  multipers/grids.pyx,sha256=ONN_RKkuxqwb9IaS9gd42FUGaiBLc8QWcd3L-ubZjKE,16575
12
- multipers/io.cp312-win_amd64.pyd,sha256=ffxPHz9pKUpETris9JxRXEtbRzlzf4RlDgaBEQZ466g,221184
12
+ multipers/io.cp312-win_amd64.pyd,sha256=CVyI02FVhZo1aEY9HGuwRqXHMOJ_XKTHxM6zeNyZLGA,220160
13
13
  multipers/io.pyx,sha256=pQBH_rSqaCZqDSxTLnhlyECP3fLbX2tR_RKJHydHm_0,22210
14
- multipers/mma_structures.cp312-win_amd64.pyd,sha256=SvgW2bSzaY5Wtnww1lslrFMUUlmewEI1GYKJaOlGA7Y,1302528
14
+ multipers/mma_structures.cp312-win_amd64.pyd,sha256=_eOijo8kHpG_SBQ16BuxvBBSECoxnvlS9cTzPVYCLOA,1279488
15
15
  multipers/mma_structures.pxd,sha256=jh1QnQRidt_VK0CK7losQi6rAl_1qG5DNuR23J42pUA,6595
16
16
  multipers/mma_structures.pyx,sha256=4zNC6ePfFKMvx0MrH-FqJVouyTMciRc49oevKDnsJhI,109530
17
17
  multipers/mma_structures.pyx.tp,sha256=hWuuk9USDFa8CbQVRHNjWSAdGgpkWKvSCNjTtVuSzwM,42299
18
18
  multipers/multiparameter_edge_collapse.py,sha256=MFt0eKQQSv2354omeIqOmzASYTKIMsYdxZHFZauQr8g,1229
19
- multipers/multiparameter_module_approximation.cp312-win_amd64.pyd,sha256=0hntlxYoA9drxAvAhluzh5rhuZMfNcI70wiJB6q4etE,457728
19
+ multipers/multiparameter_module_approximation.cp312-win_amd64.pyd,sha256=gp7wBVt4OdaDLHB9CvMYm8dUOW6pQFGoA69f0jP2Boo,451584
20
20
  multipers/multiparameter_module_approximation.pyx,sha256=wp7la7Z9wBngnfw6WOVddf93mPyXf4HfNT6dKW2Z0r0,9030
21
21
  multipers/pickle.py,sha256=YYVt4iHiD16E1x5Yn_4mX6P5P8rKi56pNGjJo5IzPhc,2579
22
- multipers/plots.py,sha256=9yLuNLJ3XefALKTbdtGu6cJfOt0faXyE0bMGDyFRL4g,14417
23
- multipers/point_measure.cp312-win_amd64.pyd,sha256=HyJES-KCkQoUjpCE1DFYgECfLqpJ_BeqB6utd_kFAc0,585728
22
+ multipers/plots.py,sha256=UrVWFQvc7csmRIhTbY-3J1VQh78EjpaduCk76dbt-x0,14229
23
+ multipers/point_measure.cp312-win_amd64.pyd,sha256=dHTEYZtq5Zepb8o1Crnh3d92fWHGNeSqOxqYVj9yRmQ,573952
24
24
  multipers/point_measure.pyx,sha256=DVhal6HgCCuALSJMcHHKOW16CwDQCVTc2PpK8cGCqx8,12109
25
- multipers/simplex_tree_multi.cp312-win_amd64.pyd,sha256=YMrwGX2OzFFtgaxyrVUnSYdj8Qq47K3n8-FmAjNrgNU,3605504
25
+ multipers/simplex_tree_multi.cp312-win_amd64.pyd,sha256=AM1BNI-qheFX4uqMa64fY3jaIyMdyQJVEeHebtGEY2M,3616256
26
26
  multipers/simplex_tree_multi.pxd,sha256=KpyDEQNPoMC2sOU9-d4LtrGXx_UVCJGxMJ1kk1AzHgU,6631
27
27
  multipers/simplex_tree_multi.pyx,sha256=reHyva5AR1lOQyiCs2_jQ2XfwHtktcQ1nmY_BNmyxhk,498156
28
28
  multipers/simplex_tree_multi.pyx.tp,sha256=fUTuIscfDlNjsImWU1YALVZ1Mf9OEkdl-IFKcRQqalI,89202
29
- multipers/slicer.cp312-win_amd64.pyd,sha256=PmybWHUqg8z1Snw4xY1rr8mXdlh7-HxC3cwpGWjvlIY,11772416
30
- multipers/slicer.pxd,sha256=fzA-lL_QWyUMf9rRSpcKG35QNS9UXEmVC9r7kR0geho,185230
29
+ multipers/slicer.cp312-win_amd64.pyd,sha256=4WGcvaU8mHke6lAb2hP9H_rDhplJTSoZQOlB3OXcoJI,11682816
30
+ multipers/slicer.pxd,sha256=bHcV5COzDcjhaVcL3bWSHivUYtdkSx4bdj24fVOe_DU,185230
31
31
  multipers/slicer.pxd.tp,sha256=fLOUPtPGqiY9o1fPDyc_whBrgKLh_6HVfvl7OtE-34Y,10243
32
- multipers/slicer.pyx,sha256=r_-8a-peMXe43r9OUgyKIDKxKgIq-U7hhSLYOn7Fka4,894068
33
- multipers/slicer.pyx.tp,sha256=0oSaqT6-traFiDW9R3IFRQ-u0kYle9Hum8xVzkVsa3c,44550
32
+ multipers/slicer.pyx,sha256=SYjCsYtPY-16fwABZvZncNJ3tKU5shVkx_WCvqs467U,894041
33
+ multipers/slicer.pyx.tp,sha256=jZOdsHKMpq0nclmvlzkZUDzdjffT3_mFDVY_mnsl9Es,44523
34
34
  multipers/tbb12.dll,sha256=6AsPR4GauU53hj2xqJNM0SfLkCKCDskjy-uKeS01tCk,338944
35
35
  multipers/tbbbind_2_5.dll,sha256=8TtH7JJZlCEKF0UwfyJoiyrFt9utOI_x5AFOxpP-pGw,23040
36
36
  multipers/tbbmalloc.dll,sha256=1MRBYYNzNcooog8__yuLq40l7kSgZ4lkNZhDFfTWM8A,112640
37
37
  multipers/tbbmalloc_proxy.dll,sha256=fcM6szEVHayvxKW8sPUTWoqEZx1_4FbWni81hbOcbi4,31232
38
38
  multipers/tensor.pxd,sha256=MSmaMU0sOP9CHLmg4dym7nOGaI1S4cOdM01TQ9flI54,417
39
39
  multipers/test.pyx,sha256=-g7WU-jKrZK8H0c-6eAPsfrApjvTKrUoswVYFu8LoV4,1798
40
- multipers/array_api/__init__.py,sha256=mEJ-vc8t9_pvwW06Psmww7EsZntZA_SiHxzRugJ_X4A,1038
40
+ multipers/array_api/__init__.py,sha256=y8WJQwh9rkzM2vZn_WpsLMzOxdg5ZDqockSnpK8vBfY,1111
41
41
  multipers/array_api/numpy.py,sha256=aXNzWLfDIv0_kFqRzYUUcpAJuM9SX3_fm73Bx18nogs,606
42
42
  multipers/array_api/torch.py,sha256=w55ow_Gxht2FOvc5EksCfaceh5gMTNKixHVsAMeSZik,548
43
43
  multipers/data/MOL2.py,sha256=nLZHy2OSFN9Z2uJKsbqWOEG2R7G-uH6dCLHG48UjvR4,15428
@@ -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.3b1.dist-info/licenses/LICENSE,sha256=UsQRnvlo_9wpQS9DNt52GEraERHwK2GIRwuqr2Yv5JI,1071
182
- multipers-2.3.3b1.dist-info/METADATA,sha256=MU-U7yqOEIFamD8-E2ctFsjHx2xpWJXSpbV6JEiSPXQ,9672
183
- multipers-2.3.3b1.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
184
- multipers-2.3.3b1.dist-info/top_level.txt,sha256=L9e0AGmhRzrNw9FpuUx-zlqi5NcBOmrI9wYY8kYWr8A,10
185
- multipers-2.3.3b1.dist-info/RECORD,,
181
+ multipers-2.3.3b2.dist-info/licenses/LICENSE,sha256=UsQRnvlo_9wpQS9DNt52GEraERHwK2GIRwuqr2Yv5JI,1071
182
+ multipers-2.3.3b2.dist-info/METADATA,sha256=dzqMyVIOk45QhWOjmyZRVi4oT6P6ogNxcGZ9hoSfemw,9672
183
+ multipers-2.3.3b2.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
184
+ multipers-2.3.3b2.dist-info/top_level.txt,sha256=L9e0AGmhRzrNw9FpuUx-zlqi5NcBOmrI9wYY8kYWr8A,10
185
+ multipers-2.3.3b2.dist-info/RECORD,,