sciv 0.0.101__py3-none-any.whl → 0.0.103__py3-none-any.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.
sciv/model/_core_.py CHANGED
@@ -21,7 +21,7 @@ __name__: str = "model_core"
21
21
 
22
22
 
23
23
  def _run_random_walk_(random_walk: RandomWalk, is_ablation: bool, is_simple: bool) -> AnnData:
24
- start_time = time.time()
24
+ start_time = time.perf_counter()
25
25
 
26
26
  if not random_walk.is_run_core:
27
27
  random_walk.run_core()
@@ -57,7 +57,7 @@ def _run_random_walk_(random_walk: RandomWalk, is_ablation: bool, is_simple: boo
57
57
  if not random_walk.is_run_en_ablation_m_knn:
58
58
  random_walk.run_en_ablation_m_knn()
59
59
 
60
- random_walk.elapsed_time += time.time() - start_time
60
+ random_walk.elapsed_time += time.perf_counter() - start_time
61
61
 
62
62
  return random_walk.trs_adata
63
63
 
@@ -76,8 +76,8 @@ def core(
76
76
  early_stopping_patience: int = 50,
77
77
  batch_key: Optional[str] = None,
78
78
  resolution: float = 0.5,
79
- k: int = 30,
80
- or_k: int = 1,
79
+ k: int = 50,
80
+ or_k: int = 25,
81
81
  weight: float = 0.1,
82
82
  kernel: Literal["laplacian", "gaussian"] = "gaussian",
83
83
  local_k: int = 10,
@@ -181,7 +181,7 @@ def core(
181
181
  """
182
182
 
183
183
  # start time
184
- start_time = time.time()
184
+ start_time = time.perf_counter()
185
185
 
186
186
  if len(variants.keys()) == 0:
187
187
  ul.log(__name__).error("The number of mutations is empty.")
@@ -591,7 +591,7 @@ def core(
591
591
  random_walk_time = random_walk.elapsed_time
592
592
 
593
593
  # end time
594
- elapsed_time = time.time() - start_time
594
+ elapsed_time = time.perf_counter() - start_time
595
595
  step_time = poisson_vi_time + overlap_time + init_score_time + smknn_time + random_walk_time
596
596
 
597
597
  if elapsed_time < step_time:
sciv/plot/_pie_.py CHANGED
@@ -115,6 +115,7 @@ def pie_label(
115
115
  startangle=90,
116
116
  labeldistance=label_distance,
117
117
  pctdistance=pct_distance,
118
+ wedgeprops=dict(linewidth=0),
118
119
  **kwargs
119
120
  )
120
121
  ax.pie(
@@ -122,7 +123,7 @@ def pie_label(
122
123
  colors=['white'],
123
124
  radius=radius,
124
125
  startangle=90,
125
- wedgeprops=dict(width=radius, edgecolor='w'),
126
+ wedgeprops=dict(width=radius, edgecolor='w', linewidth=0),
126
127
  **kwargs
127
128
  )
128
129
  ax.text(0, 0, "{:.2f}%".format(top_x[0] / top_sum * 100), ha='center', va='center', fontsize=fontsize)
sciv/plot/_scatter_.py CHANGED
@@ -174,6 +174,8 @@ def scatter_3d(
174
174
  edge_color: str = None,
175
175
  size: Union[float, collection] = 0.1,
176
176
  legend_name: str = None,
177
+ is_add_max_label: bool = False,
178
+ text_left_offset: float = 0.5,
177
179
  output: path = None,
178
180
  show: bool = True,
179
181
  close: bool = False,
@@ -186,13 +188,14 @@ def scatter_3d(
186
188
  fig = plt.figure(figsize=(width, height))
187
189
  ax = fig.add_subplot(projection='3d')
188
190
 
189
- hue_cat = pd.Categorical(df[hue])
191
+ if hue is not None:
192
+ hue_cat = pd.Categorical(df[hue])
190
193
 
191
194
  scatter = ax.scatter(
192
195
  df[x],
193
196
  df[y],
194
197
  df[z],
195
- c=hue_cat.codes,
198
+ c=hue_cat.codes if hue is not None else None,
196
199
  cmap=cmap,
197
200
  s=size,
198
201
  edgecolors=edge_color,
@@ -214,7 +217,7 @@ def scatter_3d(
214
217
  if title is not None:
215
218
  ax.set_title(title, fontsize=font_size)
216
219
 
217
- if is_add_legend:
220
+ if is_add_legend and hue is not None:
218
221
  unique_types = hue_cat.categories
219
222
  legend_elements = [
220
223
  plt.Line2D(
@@ -226,6 +229,24 @@ def scatter_3d(
226
229
 
227
230
  ax.legend(handles=legend_elements, title=legend_name, loc='upper left')
228
231
 
232
+ if is_add_max_label:
233
+
234
+ max_idx = df[z].idxmax()
235
+ max_x = df.loc[max_idx, x]
236
+ max_y = df.loc[max_idx, y]
237
+ max_value = df.loc[max_idx, z]
238
+
239
+ # 在最大值点的位置添加文本标签
240
+ ax.text(
241
+ max_x - text_left_offset,
242
+ max_y,
243
+ max_value,
244
+ f'({max_x}, {max_y}): {max_value:.3f}',
245
+ fontsize=font_size - 2,
246
+ color='red',
247
+ ha='left'
248
+ )
249
+
229
250
  plot_end(fig, None, None, None, output, show, close)
230
251
 
231
252
 
@@ -1,4 +1,5 @@
1
1
  # -*- coding: UTF-8 -*-
2
+
2
3
  import time
3
4
  import warnings
4
5
  from typing import Optional, Literal
@@ -47,7 +48,7 @@ def filter_data(
47
48
  """
48
49
 
49
50
  # start time
50
- start_time = time.time()
51
+ start_time = time.perf_counter()
51
52
 
52
53
  import scanpy as sc
53
54
 
@@ -109,7 +110,7 @@ def filter_data(
109
110
  )
110
111
  ul.log(__name__).info(f"Size of filtered scATAC-seq data: {filter_adata.shape}")
111
112
  filter_adata.uns["step"] = 0
112
- filter_adata.uns["elapsed_time"] = time.time() - start_time
113
+ filter_adata.uns["elapsed_time"] = time.perf_counter() - start_time
113
114
 
114
115
  return filter_adata
115
116
 
@@ -50,7 +50,7 @@ def poisson_vi(
50
50
  """
51
51
  ul.log(__name__).info("Start PoissonVI")
52
52
 
53
- start_time = time.time()
53
+ start_time = time.perf_counter()
54
54
 
55
55
  import scvi
56
56
  import scanpy as sc
@@ -137,7 +137,7 @@ def poisson_vi(
137
137
  ul.log(__name__).warning(f"GPU failed to run, try to switch to CPU running.\n {ome}")
138
138
 
139
139
  try:
140
- model = scvi.external.POISSONVI.load(model_dir, adata=adata, accelerator="cpu", device="cpu")
140
+ model = scvi.external.POISSONVI.load(model_dir, adata=adata, accelerator="cpu")
141
141
  except Exception as e:
142
142
  ul.log(__name__).error(f"File `model.pt` failed to load, you can execute `Poisson VI` again by deleting file `model.pt` ({model_dir}/model.pt).\n {e}")
143
143
  raise ValueError(f"File `model.pt` failed to load, you can execute `Poisson VI` again by deleting file `model.pt` ({model_dir}/model.pt).")
@@ -241,7 +241,7 @@ def poisson_vi(
241
241
  da_peaks_adata.layers["emp_prob1"] = matrix_ep1
242
242
  da_peaks_adata.uns["latent_name"] = latent_name
243
243
  da_peaks_adata.uns["dp_delta"] = dp_delta
244
- da_peaks_adata.uns["elapsed_time"] = time.time() - start_time
244
+ da_peaks_adata.uns["elapsed_time"] = time.perf_counter() - start_time
245
245
 
246
246
  adata.uns["step"] = 1
247
247
 
sciv/tool/__init__.py CHANGED
@@ -36,7 +36,7 @@ from ._algorithm_ import (
36
36
  calculate_init_score_weight,
37
37
  obtain_cell_cell_network,
38
38
  perturb_data,
39
- add_noise
39
+ add_bernoulli_fluctuation_noise
40
40
  )
41
41
 
42
42
  from ._random_walk_ import (
@@ -98,7 +98,7 @@ __all__ = [
98
98
  "calculate_init_score_weight",
99
99
  "obtain_cell_cell_network",
100
100
  "perturb_data",
101
- "add_noise",
101
+ "add_bernoulli_fluctuation_noise",
102
102
  "split_matrix",
103
103
  "merge_matrix",
104
104
  "down_sampling_data",
sciv/tool/_algorithm_.py CHANGED
@@ -8,7 +8,6 @@ from scipy import sparse
8
8
  from scipy.stats import norm
9
9
  from tqdm import tqdm
10
10
  from joblib import Parallel, delayed
11
- import multiprocessing
12
11
 
13
12
  import numpy as np
14
13
  from anndata import AnnData
@@ -913,7 +912,7 @@ def overlap_sum(regions: AnnData, variants: dict, trait_info: DataFrame, n_jobs:
913
912
  :return: overlap data
914
913
  """
915
914
 
916
- start_time = time.time()
915
+ start_time = time.perf_counter()
917
916
 
918
917
  # Unique feature set
919
918
  label_all = regions.var.index.tolist()
@@ -1005,15 +1004,15 @@ def overlap_sum(regions: AnnData, variants: dict, trait_info: DataFrame, n_jobs:
1005
1004
  total = sum(len(ld) for ld, _, _ in results)
1006
1005
  row_indices = np.empty(total, dtype=np.int32)
1007
1006
  col_indices = np.empty(total, dtype=np.int32)
1008
- data_vals = np.empty(total, dtype=np.float32)
1007
+ data_vals = np.empty(total, dtype=np.float32)
1009
1008
 
1010
1009
  ptr = 0
1011
1010
 
1012
1011
  for local_data, local_rows, local_cols in results:
1013
1012
  n = len(local_data)
1014
- row_indices[ptr:ptr+n] = local_rows
1015
- col_indices[ptr:ptr+n] = local_cols
1016
- data_vals[ptr:ptr+n] = local_data
1013
+ row_indices[ptr:ptr + n] = local_rows
1014
+ col_indices[ptr:ptr + n] = local_cols
1015
+ data_vals[ptr:ptr + n] = local_data
1017
1016
  ptr += n
1018
1017
 
1019
1018
  # Build sparse matrix, then convert to csr format
@@ -1025,7 +1024,7 @@ def overlap_sum(regions: AnnData, variants: dict, trait_info: DataFrame, n_jobs:
1025
1024
 
1026
1025
  overlap_adata = AnnData(overlap_sparse, var=trait_info, obs=regions.var)
1027
1026
  overlap_adata.uns["is_overlap"] = True
1028
- overlap_adata.uns["elapsed_time"] = time.time() - start_time
1027
+ overlap_adata.uns["elapsed_time"] = time.perf_counter() - start_time
1029
1028
 
1030
1029
  return overlap_adata
1031
1030
 
@@ -1129,7 +1128,7 @@ def calculate_init_score_weight(
1129
1128
  :return: Initial TRS with weight.
1130
1129
  """
1131
1130
 
1132
- start_time = time.time()
1131
+ start_time = time.perf_counter()
1133
1132
 
1134
1133
  if "is_overlap" not in overlap_adata.uns:
1135
1134
  ul.log(__name__).warning(
@@ -1258,7 +1257,7 @@ def calculate_init_score_weight(
1258
1257
  del _init_trs_ncw_, _cell_type_weight_
1259
1258
 
1260
1259
  init_trs_adata.uns["is_sample"] = is_simple
1261
- init_trs_adata.uns["elapsed_time"] = time.time() - start_time
1260
+ init_trs_adata.uns["elapsed_time"] = time.perf_counter() - start_time
1262
1261
  return init_trs_adata
1263
1262
 
1264
1263
 
@@ -1314,7 +1313,7 @@ def obtain_cell_cell_network(
1314
1313
  :return: Cell similarity data.
1315
1314
  """
1316
1315
 
1317
- start_time = time.time()
1316
+ start_time = time.perf_counter()
1318
1317
 
1319
1318
  from sklearn.metrics.pairwise import laplacian_kernel, rbf_kernel
1320
1319
 
@@ -1373,7 +1372,7 @@ def obtain_cell_cell_network(
1373
1372
  if not is_simple:
1374
1373
  cc_data.layers["cell_mutual_knn"] = to_sparse(cell_mutual_knn)
1375
1374
 
1376
- cc_data.uns["elapsed_time"] = time.time() - start_time
1375
+ cc_data.uns["elapsed_time"] = time.perf_counter() - start_time
1377
1376
 
1378
1377
  return cc_data
1379
1378
 
@@ -1404,39 +1403,36 @@ def perturb_data(data: collection, percentage: float) -> collection:
1404
1403
  return new_data
1405
1404
 
1406
1405
 
1407
- def add_noise(data: matrix_data, rate: float) -> matrix_data:
1408
- """
1409
- Add peak percentage noise to each cell
1406
+ def add_bernoulli_fluctuation_noise(
1407
+ counts_matrix: matrix_data,
1408
+ noise_level: float = 0.1
1409
+ ) -> matrix_data:
1410
1410
  """
1411
+ Add Bernoulli fluctuation noise to the counts matrix (add 1 with probability noise_level)
1411
1412
 
1412
- if rate <= 0 or rate >= 1:
1413
- raise ValueError("The value of the `rate` parameter must be greater than 0 and less than 1.")
1413
+ Parameters
1414
+ ----------
1415
+ counts_matrix : matrix_data
1416
+ Input counts matrix
1417
+ noise_level : float, default 0.1
1418
+ Noise level, i.e., the probability of randomly adding 1 (range: 0.0 - 1.0)
1414
1419
 
1415
- shape = data.shape
1416
- noise = to_dense(data.copy())
1417
-
1418
- for i in tqdm(range(shape[0])):
1419
- count_i = np.array(noise[i, :]).flatten()
1420
- # Add noise to the accessibility of unopened chromatin
1421
- count0_i = count_i[count_i == 0]
1422
- max_i = np.max(count_i)
1423
- count0 = int(count0_i.size * rate)
1424
- noise0_i = np.random.randint(low=1, high=2 if max_i < 2 else max_i, size=count0)
1425
- random_index0 = np.random.choice(np.arange(0, count0_i.size), size=count0, replace=False)
1426
- count0_i[random_index0] = noise0_i
1427
- count_i_value = count_i.copy()
1428
- count_i_value[count_i_value == 0] = count0_i
1429
- noise[i, :] = count_i_value
1420
+ Returns
1421
+ -------
1422
+ matrix_data
1423
+ Matrix after adding noise
1424
+ """
1425
+ if noise_level < 0 or noise_level > 1:
1426
+ ul.log(__name__).error("The value of the `noise_level` parameter must be greater than 0 and less than 1.")
1427
+ raise ValueError("The value of the `noise_level` parameter must be greater than 0 and less than 1.")
1430
1428
 
1431
- # Close open chromatin accessibility
1432
- count1_i = count_i[count_i == 1]
1433
- count1 = int(count1_i.size * rate)
1434
- random_index1 = np.random.choice(np.arange(0, count1_i.size), size=count1, replace=False)
1435
- count1_i[random_index1] = 0
1436
- count_i[count_i == 1] = count1_i
1437
- noise[i, :] = count_i
1429
+ if noise_level == 0:
1430
+ return counts_matrix.copy()
1438
1431
 
1439
- # disturbance
1440
- noise[i, :] = perturb_data(noise[i, :], rate)
1432
+ noise = np.random.binomial(
1433
+ n=1,
1434
+ p=noise_level,
1435
+ size=counts_matrix.shape
1436
+ ).astype(counts_matrix.dtype)
1441
1437
 
1442
- return noise
1438
+ return counts_matrix + noise
@@ -282,7 +282,7 @@ class RandomWalk:
282
282
  """
283
283
  ul.log(__name__).info("Random walk with weighted seed cells.")
284
284
 
285
- start_time = time.time()
285
+ start_time = time.perf_counter()
286
286
 
287
287
  # judge length
288
288
  if cc_adata.shape[0] != init_status.shape[0]:
@@ -459,7 +459,7 @@ class RandomWalk:
459
459
  del self.cell_affinity
460
460
  del init_status
461
461
 
462
- self.elapsed_time = time.time() - start_time
462
+ self.elapsed_time = time.perf_counter() - start_time
463
463
 
464
464
  def _random_walk_(
465
465
  self,
sciv/util/__init__.py CHANGED
@@ -29,6 +29,7 @@ from ._constant_ import (
29
29
  from ._core_ import (
30
30
  file_method,
31
31
  log,
32
+ track_with_memory,
32
33
  to_dense,
33
34
  to_sparse,
34
35
  sum_min_max,
@@ -58,6 +59,7 @@ __all__ = [
58
59
  "log_file_path",
59
60
  "file_method",
60
61
  "log",
62
+ "track_with_memory",
61
63
  "path",
62
64
  "plot_color_types",
63
65
  "sparse_array",
sciv/util/_core_.py CHANGED
@@ -4,7 +4,11 @@ import math
4
4
  import os
5
5
  import random
6
6
  import string
7
- from typing import Tuple, Union, Literal
7
+ import threading
8
+ import time
9
+ from functools import wraps
10
+ from typing import Tuple, Union, Literal, Callable, Any
11
+ import psutil
8
12
 
9
13
  import numpy as np
10
14
  import pandas as pd
@@ -35,6 +39,71 @@ def log(name: str = None) -> Logger:
35
39
  return Logger(name, log_path=os.path.join(ul.log_file_path, name), is_form_file=ul.is_form_log_file)
36
40
 
37
41
 
42
+ def track_with_memory(is_monitor: bool = False , interval: float = 60) -> Callable:
43
+ """
44
+ Decorator: Records memory usage at fixed intervals during function execution and returns the result, elapsed time, and memory list.
45
+
46
+ Parameters
47
+ ----------
48
+ is_monitor : bool, optional
49
+ Whether to enable memory monitoring, default is False.
50
+ interval : float, optional
51
+ Sampling interval (seconds), default is 60 seconds.
52
+
53
+ Returns
54
+ -------
55
+ Callable
56
+ Decorator function; when the wrapped function is called, it returns a dictionary containing:
57
+ - 'result': the original function's return value
58
+ - 'time': function execution time (seconds) if is_monitor is True, otherwise None.
59
+ - 'memory': list of sampled memory usage (bytes) if is_monitor is True, otherwise None.
60
+ """
61
+
62
+ def decorator(func) -> Callable:
63
+ @wraps(func)
64
+ def wrapper(*args, **kwargs) -> Union[Any, dict]:
65
+
66
+ if not is_monitor:
67
+ return func(*args, **kwargs)
68
+
69
+ process = psutil.Process(os.getpid())
70
+
71
+ stop_monitor = False
72
+
73
+ mem_list = []
74
+
75
+ def monitor():
76
+ nonlocal stop_monitor
77
+
78
+ while not stop_monitor:
79
+ current_mem = process.memory_info().rss
80
+ mem_list.append(current_mem)
81
+
82
+ time.sleep(interval)
83
+
84
+ t = threading.Thread(target=monitor, daemon=True)
85
+ t.start()
86
+
87
+ start_time = time.perf_counter()
88
+ _result_ = func(*args, **kwargs)
89
+ end_time = time.perf_counter()
90
+
91
+ stop_monitor = True
92
+ t.join()
93
+
94
+ exec_time = end_time - start_time
95
+
96
+ return {
97
+ 'result': _result_,
98
+ 'time': exec_time,
99
+ 'memory': mem_list
100
+ }
101
+
102
+ return wrapper
103
+
104
+ return decorator
105
+
106
+
38
107
  def to_dense(sm: matrix_data, is_array: bool = False) -> dense_data:
39
108
  """
40
109
  Convert sparse matrix to dense matrix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sciv
3
- Version: 0.0.101
3
+ Version: 0.0.103
4
4
  Summary: Unveiling the pivotal cell types involved in variant function regulation at a single-cell resolution
5
5
  Project-URL: github, https://github.com/YuZhengM/sciv
6
6
  Author-email: Zheng-Min Yu <yuzmbio@163.com>
@@ -48,6 +48,7 @@ Requires-Dist: numba==0.60.0
48
48
  Requires-Dist: numpy==1.26.4
49
49
  Requires-Dist: palettable==3.3.3
50
50
  Requires-Dist: pandas==1.5.3
51
+ Requires-Dist: psutil==7.2.1
51
52
  Requires-Dist: pycomplexheatmap==1.6.1
52
53
  Requires-Dist: pynndescent==0.5.13
53
54
  Requires-Dist: scanpy==1.11.5
@@ -3,7 +3,7 @@ sciv/file/__init__.py,sha256=8cYLG0S0nilblmyX46CWFrbLr-rmLbO1EEO477pZ-gk,520
3
3
  sciv/file/_read_.py,sha256=UZJpN3_5hBiTjzEYO6YXORcE_dqA8HmLpV80nqTLNSo,30554
4
4
  sciv/file/_write_.py,sha256=W3M9CmPi7BuKAffz1fdi-vA5DzAFZ7wmcggp33N9Xtg,7848
5
5
  sciv/model/__init__.py,sha256=k8SO9FpJaGn2ANqJyaz3HXMas7jH9toPVtpw703kOqg,149
6
- sciv/model/_core_.py,sha256=K4X1kGCdFW_5zxwMtACfjKeg_X34eYSPcSl5F2hMX_8,33690
6
+ sciv/model/_core_.py,sha256=ELOhkkKYTPEx4mJ5bJ47Si53afJpJ4weSzW6EPAmvvQ,33723
7
7
  sciv/plot/__init__.py,sha256=2tRNT6TZNz9r38lnna712RGsH7OJ2QkGa37XKgzejHQ,1865
8
8
  sciv/plot/_bar_.py,sha256=iQoFsFFbPbFj3JX2BgG45dqG-hjOka90LDw0WfdYNY8,14823
9
9
  sciv/plot/_barcode_.py,sha256=RDOedQ8ZtXWFyJ2c772RDfqO4TMIpHMvcMZMAVqky90,5073
@@ -14,26 +14,26 @@ sciv/plot/_graph_.py,sha256=-AasDYbFnRbWS4eTPDcZ4fzySqrLihUqiY_EBixrQUs,12617
14
14
  sciv/plot/_heat_map_.py,sha256=pne4DSydBg0sc4KT88N5A_7QkDnvvmGUwyqZ7-WWtcM,14896
15
15
  sciv/plot/_kde_.py,sha256=A7_NFoSD0ih9h0Hh_1Y8ZOOz06AyANfi3M6sdkz61ZE,2399
16
16
  sciv/plot/_line_.py,sha256=qOSf4MJSXCTh8WCcd_dFlTsqMp-MeR2fGqR9lzEVPwo,3834
17
- sciv/plot/_pie_.py,sha256=OVPv85MdjkjABh-uP5Y-KVk1VygFIzz87QT3OE1hZjU,6399
17
+ sciv/plot/_pie_.py,sha256=GDoHES4AfOtnFeK99gh0a1KdUXIs7ZCCs6YHzoBLpbk,6451
18
18
  sciv/plot/_radar_.py,sha256=g_abzmzibJIR6it59TendUI236inbzYl0IzzdoA3Uuc,6304
19
- sciv/plot/_scatter_.py,sha256=HPy1eFqDk4vksAiKjn_Qk00fYO4GyqRs1O3ZZh44Ezw,16998
19
+ sciv/plot/_scatter_.py,sha256=XoRl4I9L1bmTTnH-ByAXEf4q2P0VABCjvk4FoBw1sfU,17632
20
20
  sciv/plot/_venn_.py,sha256=TfNTuxog2pT7sicKBEEMtleoHXwnenbl3CMWJu9c2vs,2675
21
21
  sciv/plot/_violin_.py,sha256=IoeAv-ipGkBO0LouI2Y2huPP44u_-6O9CfBkgrPsK6s,6486
22
22
  sciv/preprocessing/__init__.py,sha256=56RgDai5I3sZ4hl3aaV80ogOeUscYsU3nJUWE80jZ-k,742
23
23
  sciv/preprocessing/_anndata_.py,sha256=3d1cHFs1YA9UZkIPE089nZHFi-DjK-c1fRyi2shfSh4,6302
24
24
  sciv/preprocessing/_gencode_.py,sha256=HKhRgK76khGepdv4FaKiOvTys1uJTbvIyrKUta5W0K8,2108
25
25
  sciv/preprocessing/_gsea_.py,sha256=AH_PpUNfMN7WkF0pqAuUhEC6qZwKrtQm6VaaYu6JLfI,3803
26
- sciv/preprocessing/_scanpy_.py,sha256=tB8BD2wpLAU8_YxdqrgNtcjpNXNRo-JCdm2lxaKDBLc,11611
27
- sciv/preprocessing/_scvi_.py,sha256=7QxwPA2kR_g15X28aEak7AFA4kyQ-UbtpiLH-rc5Ksg,10780
26
+ sciv/preprocessing/_scanpy_.py,sha256=95kt6ylfqKmjLr8GZ1XH1khP9Q3uBYy4vqc4_2Zf1J4,11629
27
+ sciv/preprocessing/_scvi_.py,sha256=vtMzaAuy3LZXPmg92MNJfFw5jIZv71_tZdpeEyl3JHc,10782
28
28
  sciv/preprocessing/_snapatac_.py,sha256=Dq8CHF7Psl3CQszaEokQYO56Oe2uzyWOy_cGlaOywfc,27798
29
- sciv/tool/__init__.py,sha256=WXzHkWt6RgBC3qqD-98nR5wQmt6oC850ox_VpMrapSU,2468
30
- sciv/tool/_algorithm_.py,sha256=82ATnZ9-6Cxl6UV9n6jzQawTt7s53crl0hLuZiW-JZ0,54012
29
+ sciv/tool/__init__.py,sha256=WgyiWuCvBadTZfNEB70VurbN1YfpNodnVCIcAABTYEA,2512
30
+ sciv/tool/_algorithm_.py,sha256=5H_LHGyRfx0ng9wm8pux0_dEXuJJJVdnGLM9MjD12Fo,53682
31
31
  sciv/tool/_matrix_.py,sha256=SnC3sXic_ufuEXStcD_HncvYH6apBdNK6nhG6jFLmjA,24324
32
- sciv/tool/_random_walk_.py,sha256=L7bpYDVNwGSpeB5ipDw81Y6KCJoAjTx1Cs9o4JWZej8,48896
33
- sciv/util/__init__.py,sha256=nOxZ8if27X7AUJ6hZwTwxOJwIBJb0obWlHjqCzjg_Gc,1964
32
+ sciv/tool/_random_walk_.py,sha256=2DPBRtd4A2MadfYDhkTw33WOATriiCULozNsUPE6lsY,48912
33
+ sciv/util/__init__.py,sha256=nER-hRRaBGl3CGgl2rLZAUOQ3uY6-m9wQ9VNrjO5EFE,2014
34
34
  sciv/util/_constant_.py,sha256=w0wKQd8guLd1ZTW24_5aECrWsIWDiNQmEpLsWlHar1A,3000
35
- sciv/util/_core_.py,sha256=TUWfBNRJzWuoQ9ffew_DjnlkNydG-Rmujl_RH4Ln9io,14917
36
- sciv-0.0.101.dist-info/METADATA,sha256=AHOc-TQXHovRT5hgIsJ0tSRLdd6L5-axMiiKYF3_NGU,3466
37
- sciv-0.0.101.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
38
- sciv-0.0.101.dist-info/licenses/LICENSE,sha256=4UvHVf3qCOZjHLs4LkYz8u96XRpXnZrpTKrkUQPs5_A,1075
39
- sciv-0.0.101.dist-info/RECORD,,
35
+ sciv/util/_core_.py,sha256=3Z5r_ssFEYGc0ZHSaRPLz6Ur4LKKMyOBA76qX_Kmemw,16982
36
+ sciv-0.0.103.dist-info/METADATA,sha256=sUdT4krE1mTLee_PvzQXg0syisUxPtNf-1DHXVGVFyE,3495
37
+ sciv-0.0.103.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
38
+ sciv-0.0.103.dist-info/licenses/LICENSE,sha256=4UvHVf3qCOZjHLs4LkYz8u96XRpXnZrpTKrkUQPs5_A,1075
39
+ sciv-0.0.103.dist-info/RECORD,,
File without changes