pertpy 1.0.2__py3-none-any.whl → 1.0.3__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.
@@ -6,7 +6,6 @@ import numpy as np
6
6
  import pandas as pd
7
7
  from anndata import AnnData
8
8
  from lamin_utils import logger
9
- from rich import print
10
9
  from scipy.stats import entropy
11
10
 
12
11
  if TYPE_CHECKING:
@@ -27,6 +26,7 @@ class PerturbationSpace:
27
26
  def compute_control_diff( # type: ignore
28
27
  self,
29
28
  adata: AnnData,
29
+ *,
30
30
  target_col: str = "perturbation",
31
31
  group_col: str = None,
32
32
  reference_key: str = "control",
@@ -41,8 +41,8 @@ class PerturbationSpace:
41
41
 
42
42
  Args:
43
43
  adata: Anndata object of size cells x genes.
44
- target_col: .obs column name that stores the label of the perturbation applied to each cell.
45
- group_col: .obs column name that stores the label of the group of each cell. If None, ignore groups.
44
+ target_col: `.obs` column name that stores the label of the perturbation applied to each cell.
45
+ group_col: `.obs` column name that stores the label of the group of each cell. If None, ignore groups.
46
46
  reference_key: The key of the control values.
47
47
  layer_key: Key of the AnnData layer to use for computation.
48
48
  new_layer_key: the results are stored in the given layer.
@@ -146,6 +146,7 @@ class PerturbationSpace:
146
146
  def add(
147
147
  self,
148
148
  adata: AnnData,
149
+ *,
149
150
  perturbations: Iterable[str],
150
151
  reference_key: str = "control",
151
152
  ensure_consistency: bool = False,
@@ -157,8 +158,8 @@ class PerturbationSpace:
157
158
  adata: Anndata object of size n_perts x dim.
158
159
  perturbations: Perturbations to add.
159
160
  reference_key: perturbation source from which the perturbation summation starts.
160
- ensure_consistency: If True, runs differential expression on all data matrices to ensure consistency of linear space.
161
- target_col: .obs column name that stores the label of the perturbation applied to each cell.
161
+ ensure_consistency: Whether to run differential expression on all data matrices to ensure consistency of linear space.
162
+ target_col: `.obs` column name that stores the label of the perturbation applied to each cell.
162
163
 
163
164
  Returns:
164
165
  Anndata object of size (n_perts+1) x dim, where the last row is the addition of the specified perturbations.
@@ -255,6 +256,7 @@ class PerturbationSpace:
255
256
  def subtract(
256
257
  self,
257
258
  adata: AnnData,
259
+ *,
258
260
  perturbations: Iterable[str],
259
261
  reference_key: str = "control",
260
262
  ensure_consistency: bool = False,
@@ -266,8 +268,8 @@ class PerturbationSpace:
266
268
  adata: Anndata object of size n_perts x dim.
267
269
  perturbations: Perturbations to subtract.
268
270
  reference_key: Perturbation source from which the perturbation subtraction starts.
269
- ensure_consistency: If True, runs differential expression on all data matrices to ensure consistency of linear space.
270
- target_col: .obs column name that stores the label of the perturbation applied to each cell.
271
+ ensure_consistency: Whether to run differential expression on all data matrices to ensure consistency of linear space.
272
+ target_col: `.obs` column name that stores the label of the perturbation applied to each cell.
271
273
 
272
274
  Returns:
273
275
  Anndata object of size (n_perts+1) x dim, where the last row is the subtraction of the specified perturbations.
@@ -361,13 +363,15 @@ class PerturbationSpace:
361
363
 
362
364
  return new_perturbation
363
365
 
364
- def label_transfer(
366
+ def label_transfer( # noqa: D417
365
367
  self,
366
368
  adata: AnnData,
367
- column: str = "perturbation",
369
+ *,
370
+ target_column: str = "perturbation",
368
371
  column_uncertainty_score_key: str = "perturbation_transfer_uncertainty",
369
372
  target_val: str = "unknown",
370
373
  neighbors_key: str = "neighbors",
374
+ **kwargs,
371
375
  ) -> None:
372
376
  """Impute missing values in the specified column using KNN imputation in the space defined by `use_rep`.
373
377
 
@@ -377,7 +381,7 @@ class PerturbationSpace:
377
381
 
378
382
  Args:
379
383
  adata: The AnnData object containing single-cell data.
380
- column: The column name in adata.obs to perform imputation on.
384
+ target_column: The column name in adata.obs to perform imputation on.
381
385
  column_uncertainty_score_key: The column name in adata.obs to store the uncertainty score of the label transfer.
382
386
  target_val: The target value to impute.
383
387
  neighbors_key: The key in adata.uns where the neighbors are stored.
@@ -399,12 +403,16 @@ class PerturbationSpace:
399
403
  if neighbors_key not in adata.uns:
400
404
  raise ValueError(f"Key {neighbors_key} not found in adata.uns. Please run `sc.pp.neighbors` first.")
401
405
 
402
- labels = adata.obs[column].astype(str)
406
+ # backwards compatibility
407
+ if "column" in kwargs:
408
+ target_column = kwargs.pop("column")
409
+
410
+ labels = adata.obs[target_column].astype(str)
403
411
  target_cells = labels == target_val
404
412
 
405
413
  connectivities = adata.obsp[adata.uns[neighbors_key]["connectivities_key"]]
406
414
  # convert labels to an incidence matrix
407
- one_hot_encoded_labels = adata.obs[column].astype(str).str.get_dummies()
415
+ one_hot_encoded_labels = adata.obs[target_column].astype(str).str.get_dummies()
408
416
  # convert to distance-weighted neighborhood incidence matrix
409
417
  weighted_label_occurence = pd.DataFrame(
410
418
  (one_hot_encoded_labels.values.T * connectivities).T,
@@ -413,8 +421,8 @@ class PerturbationSpace:
413
421
  )
414
422
  # choose best label for each target cell
415
423
  best_labels = weighted_label_occurence.drop(target_val, axis=1)[target_cells].idxmax(axis=1)
416
- adata.obs[column] = labels
417
- adata.obs.loc[target_cells, column] = best_labels
424
+ adata.obs[target_column] = labels
425
+ adata.obs.loc[target_cells, target_column] = best_labels
418
426
 
419
427
  # calculate uncertainty
420
428
  uncertainty = np.zeros(adata.n_obs)
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  from typing import Literal
4
4
 
5
5
  import numpy as np
6
+ import pandas as pd
6
7
  import scanpy as sc
7
8
  from anndata import AnnData
8
9
  from sklearn.cluster import DBSCAN, KMeans
@@ -29,8 +30,8 @@ class CentroidSpace(PerturbationSpace):
29
30
  target_col: .obs column that stores the label of the perturbation applied to each cell.
30
31
  layer_key: If specified pseudobulk computation is done by using the specified layer. Otherwise, computation is done with .X
31
32
  embedding_key: `obsm` key of the AnnData embedding to use for computation. Defaults to the 'X' matrix otherwise.
32
- keep_obs: Whether .obs columns in the input AnnData should be kept in the output pseudobulk AnnData. Only .obs columns with the same value for
33
- each cell of one perturbation are kept.
33
+ keep_obs: Whether .obs columns in the input AnnData should be kept in the output pseudobulk AnnData.
34
+ Only .obs columns with the same value for each cell of one perturbation are kept.
34
35
 
35
36
  Returns:
36
37
  AnnData object with one observation per perturbation, storing the embedding data of the
@@ -170,10 +171,15 @@ class PseudobulkSpace(PerturbationSpace):
170
171
  if mode in ps_adata.layers:
171
172
  ps_adata.X = ps_adata.layers[mode]
172
173
 
173
- for col in original_obs.columns:
174
- if col not in ps_adata.obs.columns:
175
- grouped_values = original_obs.groupby(grouping_cols)[col].first()
176
- ps_adata.obs[col] = grouped_values.reindex(ps_adata.obs.index).values
174
+ missing_cols = [col for col in original_obs.columns if col not in ps_adata.obs.columns]
175
+ new_cols_data = {}
176
+
177
+ for col in missing_cols:
178
+ grouped_values = original_obs.groupby(grouping_cols, observed=False)[col].first()
179
+ new_cols_data[col] = grouped_values.reindex(ps_adata.obs.index).values
180
+
181
+ if new_cols_data:
182
+ ps_adata.obs = pd.concat([ps_adata.obs, pd.DataFrame(new_cols_data, index=ps_adata.obs.index)], axis=1)
177
183
 
178
184
  ps_adata.obs[target_col] = ps_adata.obs[target_col].astype("category")
179
185
 
@@ -4,7 +4,8 @@ import flax.linen as nn
4
4
  import jax.numpy as jnp
5
5
  import numpyro.distributions as dist
6
6
  from scvi import REGISTRY_KEYS
7
- from scvi.module.base import JaxBaseModuleClass, LossOutput, flax_configure
7
+ from scvi.module._jaxvae import LossOutput
8
+ from scvi.module.base import JaxBaseModuleClass, flax_configure
8
9
 
9
10
  from ._base_components import FlaxDecoder, FlaxEncoder
10
11
 
pertpy/tools/core.py ADDED
@@ -0,0 +1,18 @@
1
+ import numpy as np
2
+ from scipy import sparse
3
+
4
+
5
+ def _is_raw_counts(X: np.ndarray | sparse.spmatrix) -> bool:
6
+ """Check if data appears to be raw counts."""
7
+ if sparse.issparse(X):
8
+ sample = X[:1000, :1000] if X.shape[0] > 1000 else X
9
+ data = sample.data
10
+ else:
11
+ sample = X[:1000, :1000] if X.shape[0] > 1000 else X
12
+ data = sample.ravel()
13
+
14
+ non_zero_data = data[data > 0]
15
+ if len(non_zero_data) == 0:
16
+ return True
17
+
18
+ return np.all(data >= 0) and np.all(data == np.round(data))
@@ -1,17 +1,41 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pertpy
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Perturbation Analysis in the scverse ecosystem.
5
+ Project-URL: Documentation, https://pertpy.readthedocs.io
6
+ Project-URL: Source, https://github.com/scverse/pertpy
7
+ Project-URL: Home-page, https://github.com/scverse/pertpy
5
8
  Author: Lukas Heumos, Lilly May, Stefan Peidli, Johannes Ostner, Gregor Sturm, Emma Dann, Yuge Ji, Xinyue Zhang, Xichen Wu, Tessa Green, Antonia Schumacher
6
9
  Maintainer-email: Lukas Heumos <lukas.heumos@posteo.net>
7
- Requires-Python: >=3.11,<3.14
8
- Description-Content-Type: text/markdown
9
- Classifier: License :: OSI Approved :: Apache Software License
10
+ License: MIT License
11
+
12
+ Copyright (c) 2021, Lukas Heumos
13
+ Copyright (c) 2025, scverse®
14
+
15
+ Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ of this software and associated documentation files (the "Software"), to deal
17
+ in the Software without restriction, including without limitation the rights
18
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ copies of the Software, and to permit persons to whom the Software is
20
+ furnished to do so, subject to the following conditions:
21
+
22
+ The above copyright notice and this permission notice shall be included in all
23
+ copies or substantial portions of the Software.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
+ SOFTWARE.
32
+ License-File: LICENSE
10
33
  Classifier: Development Status :: 5 - Production/Stable
11
34
  Classifier: Environment :: Console
12
35
  Classifier: Framework :: Jupyter
13
36
  Classifier: Intended Audience :: Developers
14
37
  Classifier: Intended Audience :: Science/Research
38
+ Classifier: License :: OSI Approved :: Apache Software License
15
39
  Classifier: Natural Language :: English
16
40
  Classifier: Operating System :: MacOS :: MacOS X
17
41
  Classifier: Operating System :: POSIX :: Linux
@@ -21,62 +45,72 @@ Classifier: Programming Language :: Python :: 3.12
21
45
  Classifier: Programming Language :: Python :: 3.13
22
46
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
23
47
  Classifier: Topic :: Scientific/Engineering :: Visualization
24
- License-File: LICENSE
25
- Requires-Dist: rich
26
- Requires-Dist: scanpy
27
- Requires-Dist: mudata
28
- Requires-Dist: requests
29
- Requires-Dist: scikit-misc
30
- Requires-Dist: scvi-tools
48
+ Requires-Python: <3.14,>=3.11
31
49
  Requires-Dist: adjusttext
32
- Requires-Dist: ott-jax
33
- Requires-Dist: sparsecca
50
+ Requires-Dist: arviz
51
+ Requires-Dist: blitzgsea
52
+ Requires-Dist: fast-array-utils[accel,sparse]
53
+ Requires-Dist: flax
54
+ Requires-Dist: funsor
55
+ Requires-Dist: lamin-utils
56
+ Requires-Dist: mudata
57
+ Requires-Dist: numpyro
34
58
  Requires-Dist: openpyxl
59
+ Requires-Dist: ott-jax
35
60
  Requires-Dist: pubchempy
36
61
  Requires-Dist: pyarrow
37
- Requires-Dist: blitzgsea
62
+ Requires-Dist: requests
63
+ Requires-Dist: rich
64
+ Requires-Dist: scanpy
38
65
  Requires-Dist: scikit-learn>=1.4
39
- Requires-Dist: fast-array-utils[accel, sparse]
40
- Requires-Dist: lamin_utils
41
- Requires-Dist: arviz
42
- Requires-Dist: formulaic-contrasts>=0.2.0 ; extra == "de"
43
- Requires-Dist: formulaic ; extra == "de"
44
- Requires-Dist: pydeseq2>=v0.5.0 ; extra == "de"
45
- Requires-Dist: pre-commit ; extra == "dev"
46
- Requires-Dist: docutils>=0.8 ; extra == "doc"
47
- Requires-Dist: sphinx>=8.1 ; extra == "doc"
48
- Requires-Dist: scanpydoc ; extra == "doc"
49
- Requires-Dist: sphinx-book-theme ; extra == "doc"
50
- Requires-Dist: myst-nb ; extra == "doc"
51
- Requires-Dist: sphinxcontrib-bibtex>=1.0.0 ; extra == "doc"
52
- Requires-Dist: sphinx-issues ; extra == "doc"
53
- Requires-Dist: sphinx-gallery ; extra == "doc"
54
- Requires-Dist: sphinx-autodoc-typehints ; extra == "doc"
55
- Requires-Dist: sphinx-copybutton ; extra == "doc"
56
- Requires-Dist: sphinx-remove-toctrees ; extra == "doc"
57
- Requires-Dist: sphinx-design ; extra == "doc"
58
- Requires-Dist: sphinx-last-updated-by-git ; extra == "doc"
59
- Requires-Dist: sphinx-automodapi ; extra == "doc"
60
- Requires-Dist: sphinxext-opengraph ; extra == "doc"
61
- Requires-Dist: pygments ; extra == "doc"
62
- Requires-Dist: nbsphinx ; extra == "doc"
63
- Requires-Dist: nbsphinx-link ; extra == "doc"
64
- Requires-Dist: ipykernel ; extra == "doc"
65
- Requires-Dist: ipython ; extra == "doc"
66
- Requires-Dist: toytree>=3.0 ; extra == "tcoda"
67
- Requires-Dist: ete4 ; extra == "tcoda"
68
- Requires-Dist: pyqt6 ; extra == "tcoda"
69
- Requires-Dist: pytest ; extra == "test"
70
- Requires-Dist: coverage ; extra == "test"
71
- Requires-Dist: leidenalg ; extra == "test"
72
- Project-URL: Documentation, https://pertpy.readthedocs.io
73
- Project-URL: Home-page, https://github.com/scverse/pertpy
74
- Project-URL: Source, https://github.com/scverse/pertpy
66
+ Requires-Dist: scikit-misc
67
+ Requires-Dist: sparsecca
68
+ Provides-Extra: all
69
+ Requires-Dist: ete4; extra == 'all'
70
+ Requires-Dist: formulaic; extra == 'all'
71
+ Requires-Dist: formulaic-contrasts>=0.2.0; extra == 'all'
72
+ Requires-Dist: pydeseq2>=v0.5.0; extra == 'all'
73
+ Requires-Dist: pyqt6; extra == 'all'
74
+ Requires-Dist: scvi-tools[jax]; extra == 'all'
75
+ Requires-Dist: toytree>=3.0; extra == 'all'
75
76
  Provides-Extra: de
77
+ Requires-Dist: formulaic; extra == 'de'
78
+ Requires-Dist: formulaic-contrasts>=0.2.0; extra == 'de'
79
+ Requires-Dist: pydeseq2>=v0.5.0; extra == 'de'
76
80
  Provides-Extra: dev
81
+ Requires-Dist: pre-commit; extra == 'dev'
77
82
  Provides-Extra: doc
83
+ Requires-Dist: docutils>=0.8; extra == 'doc'
84
+ Requires-Dist: ipykernel; extra == 'doc'
85
+ Requires-Dist: ipython; extra == 'doc'
86
+ Requires-Dist: myst-nb; extra == 'doc'
87
+ Requires-Dist: nbsphinx; extra == 'doc'
88
+ Requires-Dist: nbsphinx-link; extra == 'doc'
89
+ Requires-Dist: pygments; extra == 'doc'
90
+ Requires-Dist: scanpydoc; extra == 'doc'
91
+ Requires-Dist: sphinx-autodoc-typehints; extra == 'doc'
92
+ Requires-Dist: sphinx-automodapi; extra == 'doc'
93
+ Requires-Dist: sphinx-book-theme; extra == 'doc'
94
+ Requires-Dist: sphinx-copybutton; extra == 'doc'
95
+ Requires-Dist: sphinx-design; extra == 'doc'
96
+ Requires-Dist: sphinx-gallery; extra == 'doc'
97
+ Requires-Dist: sphinx-issues; extra == 'doc'
98
+ Requires-Dist: sphinx-last-updated-by-git; extra == 'doc'
99
+ Requires-Dist: sphinx-remove-toctrees; extra == 'doc'
100
+ Requires-Dist: sphinx>=8.1; extra == 'doc'
101
+ Requires-Dist: sphinxcontrib-bibtex>=1.0.0; extra == 'doc'
102
+ Requires-Dist: sphinxext-opengraph; extra == 'doc'
103
+ Provides-Extra: scgen
104
+ Requires-Dist: scvi-tools[jax]; extra == 'scgen'
78
105
  Provides-Extra: tcoda
106
+ Requires-Dist: ete4; extra == 'tcoda'
107
+ Requires-Dist: pyqt6; extra == 'tcoda'
108
+ Requires-Dist: toytree>=3.0; extra == 'tcoda'
79
109
  Provides-Extra: test
110
+ Requires-Dist: coverage; extra == 'test'
111
+ Requires-Dist: leidenalg; extra == 'test'
112
+ Requires-Dist: pytest; extra == 'test'
113
+ Description-Content-Type: text/markdown
80
114
 
81
115
  [![Build](https://github.com/scverse/pertpy/actions/workflows/build.yml/badge.svg)](https://github.com/scverse/pertpy/actions/workflows/build.yml)
82
116
  [![codecov](https://codecov.io/gh/scverse/pertpy/graph/badge.svg?token=1dTpIPBShv)](https://codecov.io/gh/scverse/pertpy)
@@ -183,4 +217,3 @@ If you like scverse® and want to support our mission, please consider making a
183
217
  >
184
218
  </a>
185
219
  </div>
186
-
@@ -1,34 +1,35 @@
1
- pertpy/__init__.py,sha256=BTYM-9jQll7SwO4GNHDYKoD5duQXVPwifZYGOvtDD-E,972
1
+ pertpy/__init__.py,sha256=hrz1ULRH4dscWdjRR-qELR8RJAGHCsOGcQswOodD8Z8,972
2
2
  pertpy/_doc.py,sha256=j5TMNC-DA9yIMqIIUNpjpcVgWfRqyBBfvbRjnCM_OLs,427
3
3
  pertpy/_types.py,sha256=IcHCojCUqx8CapibNkcYf2TUqjBFP2ujeELvn_IBSBQ,154
4
4
  pertpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  pertpy/data/__init__.py,sha256=ah3yvoxkgbdMUNAWxS3SyqcUuVamBOSeuWkF2QRAEwM,2703
6
- pertpy/data/_dataloader.py,sha256=Cb08iJj7vH-VishU4NJ5nzPPgviFLY1f5p3K4eVvTeg,4679
7
- pertpy/data/_datasets.py,sha256=4IceyYURpstZSFRrD6gBjoYg8uRbEPo1QLXTt-SwB5k,65507
6
+ pertpy/data/_dataloader.py,sha256=1xiux3_eb4-0ZeirM0L7VAhTg_Tos0t_d8oBLIBTCrs,4679
7
+ pertpy/data/_datasets.py,sha256=5HF7k2snJFUveidgRdLeaiane43FI2OAgwB6gl2Vp8Q,66301
8
8
  pertpy/metadata/__init__.py,sha256=wROPCXmJX2v5schJaBTPQtGW-FGCNWPfO_6bpnXwk-c,276
9
9
  pertpy/metadata/_cell_line.py,sha256=dtHjyFPtVzA31fib3IdURCBbsHDjbKyGDrJo9veSEU8,42854
10
10
  pertpy/metadata/_compound.py,sha256=JsAv_KCcNkgVVrXTyhu-BeM8rBX8a93Wq5Z6avpxN7Y,4764
11
- pertpy/metadata/_drug.py,sha256=8QDSyxiFl25JdS80EQJC_krg6fEe5LIQEE6BsV1r8nY,9006
11
+ pertpy/metadata/_drug.py,sha256=vfd6I3a9nc7vvB4Z4KVgdBIFMyCPdsQ8-cqO46b_2sA,9062
12
12
  pertpy/metadata/_look_up.py,sha256=0nrI_xy-qBZ3tyt4dwhEBwm0A9WP95ZaDiUQFf_88FU,28663
13
13
  pertpy/metadata/_metadata.py,sha256=hzaLHRyf6YtEMdkZ7_fqTvnlYhSmjQINHz42FqVYrSU,2805
14
14
  pertpy/metadata/_moa.py,sha256=kMpjqReu-WV_tbVJLrKe7gc-WyGkkEX-59V-ZUY3X5g,4536
15
15
  pertpy/plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  pertpy/preprocessing/__init__.py,sha256=VAPFaeq2_qCvdFkQTCj_Hm460HC4Tersu8Rig_tnp_Y,71
17
- pertpy/preprocessing/_guide_rna.py,sha256=ijL-bjQ-9qn4r3DlhBxzsqk-bD4RqPsFlok-Otj4hg8,15872
18
- pertpy/preprocessing/_guide_rna_mixture.py,sha256=pT_YkjmN4iEJ-THBROu_dpbr8E6u8GJw36YoGseikD0,6422
19
- pertpy/tools/__init__.py,sha256=oOhB99SZBx1XUohaqXV7T_hZoN6xf-WMOpqgvw5gn1I,2073
20
- pertpy/tools/_augur.py,sha256=tc1YKyc0BwzrEGgctsfyy7DsTNKxyvy7ZvWraTWCc1A,55262
17
+ pertpy/preprocessing/_guide_rna.py,sha256=eJ4ARuVsNJ3t3TFXeHGjbbd3UxBAwomPDR1gGlL-3yo,16107
18
+ pertpy/preprocessing/_guide_rna_mixture.py,sha256=tLFcgeNOe5K6dNUzXN2rJ4JzYW0d6q9sjEHpULB04FI,6799
19
+ pertpy/tools/__init__.py,sha256=kIYPSixvRYqprWnS09JCS2gJXd822tmbZP1xQDcyWzs,2387
20
+ pertpy/tools/_augur.py,sha256=8DPFLPoP-CTJC8ODCadhCIybEaSgp-XnqtfzUMDOGr0,56138
21
21
  pertpy/tools/_cinemaot.py,sha256=54-rS0AEj31dMe7iU4kEmLoAunq3jNuhsBE3IEp9hrI,38071
22
22
  pertpy/tools/_dialogue.py,sha256=xWW5XiQUEHTvB7WURzndmm-EF4EhLeEnOV_-7NP6heU,52360
23
23
  pertpy/tools/_enrichment.py,sha256=55mwotLH9DXQOhl85MCkxXu-MX0RysLyrPheJysAnF0,21369
24
24
  pertpy/tools/_milo.py,sha256=PfLgEsYa5i35j25BNgGEkXk9UPM-ZhFxQbEWDA1e_fc,48192
25
- pertpy/tools/_mixscape.py,sha256=HfrpBeRlxHXaOpZkF2FmX7dg35kUB1rL0_-n2aSi2_0,57905
25
+ pertpy/tools/_mixscape.py,sha256=uL6iotgBc5qcmUamhTg4iirp7GxPKqyJurVzKTN2wuU,58413
26
+ pertpy/tools/core.py,sha256=hr4aIPJlWy4Q0rJXPghNGwhwpjyQRz9tUnVprf792JM,526
26
27
  pertpy/tools/decoupler_LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
27
28
  pertpy/tools/transferlearning_MMD_LICENSE,sha256=MUvDA-o_j9htRpI8fStVdCRuyLdPkQUuIH0a_EIc57w,1069
28
29
  pertpy/tools/_coda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
30
  pertpy/tools/_coda/_base_coda.py,sha256=2YIB7rVf9CxwYyQCpC8e3VYCxfurvyAqUs-4qJ5pubg,111817
30
- pertpy/tools/_coda/_sccoda.py,sha256=BzxR6x8DvyHAYGM9SEeJGh3opm3MfSqals6yOw77tqI,24136
31
- pertpy/tools/_coda/_tasccoda.py,sha256=oNMFKdKfY_TUtaaDQpGbzctApQVtDeQUEDovBaXFjD0,32153
31
+ pertpy/tools/_coda/_sccoda.py,sha256=TRNJhY5IonCMsyvnGwRBK8w8fYqPH_hjWiT7zL25RiI,22948
32
+ pertpy/tools/_coda/_tasccoda.py,sha256=AdJTtBBFj5fUBKUSmbuu67nkFSO2cVp53Lyt7t-HBlE,30866
32
33
  pertpy/tools/_differential_gene_expression/__init__.py,sha256=8_u7nsHY5GfFITT0Rs3v1p1vXpsGIWcBzwipuhXM3Ww,1653
33
34
  pertpy/tools/_differential_gene_expression/_base.py,sha256=GbBi8o7rTA3wH5DZJ9C1QzfqB5yak4r3xMvKQrizsTY,38274
34
35
  pertpy/tools/_differential_gene_expression/_checks.py,sha256=hH_GP0lWGO-5zrCFX4YiIVCZBCuK0ZJ0jFmdlx2Qm4k,1639
@@ -42,17 +43,17 @@ pertpy/tools/_distances/_distance_tests.py,sha256=wDDRkM-WmcfT5m5Zat-3ianGU1aC6H
42
43
  pertpy/tools/_distances/_distances.py,sha256=iJNqMc9CxgZfEMHcxIocKGc4X4S2dJsRy3YerxVnFKo,51003
43
44
  pertpy/tools/_perturbation_space/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  pertpy/tools/_perturbation_space/_clustering.py,sha256=pNx_SpPkZfCbgF7vzHWqAaiiHdbxPaA-L-hTWTbzFhI,3528
45
- pertpy/tools/_perturbation_space/_comparison.py,sha256=-NzCPRT-IlhJ9hOz7NQLSk0riIzr2C0yZvX6zm3kon4,4291
46
- pertpy/tools/_perturbation_space/_discriminator_classifiers.py,sha256=ARdNatcmsz370CF-PexDHPwUrih7KW4A5URzHVDNrcw,23126
46
+ pertpy/tools/_perturbation_space/_comparison.py,sha256=2sxlnHu-kEn8jApl8uZ8AIwV_gAnIf7SmuOjLaN0kgw,4291
47
+ pertpy/tools/_perturbation_space/_discriminator_classifiers.py,sha256=4nX_PwQp3JvWPeN8FADaukPfNF87Bn1r2IvZKCy3n8I,20076
47
48
  pertpy/tools/_perturbation_space/_metrics.py,sha256=y8-baP8WRdB1iDgvP3uuQxSCDxA2lcxvEHHM2C_vWHY,3248
48
- pertpy/tools/_perturbation_space/_perturbation_space.py,sha256=Vyh15wWw9dcu2YUWhziQd2mA9-4IY8EC5dzkBT9HaIo,19457
49
- pertpy/tools/_perturbation_space/_simple.py,sha256=xS7Lrq3RzJC8IgVKKs2Utqbs7iJ5L1DANquCRcS3Fhg,13109
49
+ pertpy/tools/_perturbation_space/_perturbation_space.py,sha256=xqSC_jLzsIl4Y_uxVJX7-m3z2HWy5ZVPOAmWMno1xoQ,19677
50
+ pertpy/tools/_perturbation_space/_simple.py,sha256=8qq1skSnsvxkV9sRgDip-E-_suy2dAs7Fgu9JgHeCkQ,13349
50
51
  pertpy/tools/_scgen/__init__.py,sha256=uERFlFyF88TH0uLiwmsUGEfHfLVCiZMFuk8gO5f7164,45
51
52
  pertpy/tools/_scgen/_base_components.py,sha256=Qq8myRUm43q9XBrZ9gBggfa2cSV2wbz_KYoLgH7iF1A,3009
52
53
  pertpy/tools/_scgen/_scgen.py,sha256=AQNGsDe-9HEqli3oq7UBDg68ofLCoXm-R_jnLFQ-rlc,30856
53
- pertpy/tools/_scgen/_scgenvae.py,sha256=bPk4v7EdJc7ROdLuDitHiX_Pvwa7Flw2qHRUwBvjLJY,3889
54
+ pertpy/tools/_scgen/_scgenvae.py,sha256=L6Jfssqo7eNoZPTk4560XIU_ocvhoCpQJFb0DqWC-Nc,3920
54
55
  pertpy/tools/_scgen/_utils.py,sha256=qz5QUn_Bvk2NGyYVzp3jgjWTFOMt1YyHwUo6HWtoThY,2871
55
- pertpy-1.0.2.dist-info/licenses/LICENSE,sha256=XuiT2hxeRInhquEIBKMZ5M21n5syhDQ4XbABoposIAg,1100
56
- pertpy-1.0.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
57
- pertpy-1.0.2.dist-info/METADATA,sha256=yWRzoCvdQNhn5sy0rtuPjRHH8H9UKmgKbrogxNWiJmM,7694
58
- pertpy-1.0.2.dist-info/RECORD,,
56
+ pertpy-1.0.3.dist-info/METADATA,sha256=vPEEe65P5kDErs7u0hByiNenDuPG15uqpkYIXhw4hGA,9380
57
+ pertpy-1.0.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
58
+ pertpy-1.0.3.dist-info/licenses/LICENSE,sha256=XuiT2hxeRInhquEIBKMZ5M21n5syhDQ4XbABoposIAg,1100
59
+ pertpy-1.0.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.12.0
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any