pertpy 0.9.4__py3-none-any.whl → 0.10.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- pertpy/__init__.py +1 -1
- pertpy/_doc.py +19 -0
- pertpy/data/_datasets.py +1 -1
- pertpy/metadata/_cell_line.py +18 -8
- pertpy/metadata/_compound.py +3 -4
- pertpy/metadata/_metadata.py +1 -1
- pertpy/preprocessing/_guide_rna.py +114 -13
- pertpy/preprocessing/_guide_rna_mixture.py +179 -0
- pertpy/tools/__init__.py +1 -1
- pertpy/tools/_augur.py +64 -86
- pertpy/tools/_cinemaot.py +21 -17
- pertpy/tools/_coda/_base_coda.py +90 -117
- pertpy/tools/_dialogue.py +32 -40
- pertpy/tools/_differential_gene_expression/__init__.py +1 -2
- pertpy/tools/_differential_gene_expression/_base.py +486 -112
- pertpy/tools/_differential_gene_expression/_edger.py +30 -21
- pertpy/tools/_differential_gene_expression/_pydeseq2.py +15 -29
- pertpy/tools/_differential_gene_expression/_statsmodels.py +0 -11
- pertpy/tools/_distances/_distances.py +71 -56
- pertpy/tools/_enrichment.py +16 -8
- pertpy/tools/_milo.py +54 -50
- pertpy/tools/_mixscape.py +307 -208
- pertpy/tools/_perturbation_space/_perturbation_space.py +40 -31
- pertpy/tools/_perturbation_space/_simple.py +48 -0
- pertpy/tools/_scgen/_scgen.py +35 -27
- {pertpy-0.9.4.dist-info → pertpy-0.10.0.dist-info}/METADATA +6 -6
- {pertpy-0.9.4.dist-info → pertpy-0.10.0.dist-info}/RECORD +29 -28
- {pertpy-0.9.4.dist-info → pertpy-0.10.0.dist-info}/WHEEL +1 -1
- pertpy/tools/_differential_gene_expression/_formulaic.py +0 -189
- {pertpy-0.9.4.dist-info → pertpy-0.10.0.dist-info}/licenses/LICENSE +0 -0
@@ -7,6 +7,7 @@ import pandas as pd
|
|
7
7
|
from anndata import AnnData
|
8
8
|
from lamin_utils import logger
|
9
9
|
from rich import print
|
10
|
+
from scipy.stats import entropy
|
10
11
|
|
11
12
|
if TYPE_CHECKING:
|
12
13
|
from collections.abc import Iterable
|
@@ -41,7 +42,7 @@ class PerturbationSpace:
|
|
41
42
|
Args:
|
42
43
|
adata: Anndata object of size cells x genes.
|
43
44
|
target_col: .obs column name that stores the label of the perturbation applied to each cell.
|
44
|
-
group_col: .obs column name that stores the label of the group of
|
45
|
+
group_col: .obs column name that stores the label of the group of each cell. If None, ignore groups.
|
45
46
|
reference_key: The key of the control values.
|
46
47
|
layer_key: Key of the AnnData layer to use for computation.
|
47
48
|
new_layer_key: the results are stored in the given layer.
|
@@ -364,50 +365,58 @@ class PerturbationSpace:
|
|
364
365
|
self,
|
365
366
|
adata: AnnData,
|
366
367
|
column: str = "perturbation",
|
368
|
+
column_uncertainty_score_key: str = "perturbation_transfer_uncertainty",
|
367
369
|
target_val: str = "unknown",
|
368
|
-
|
369
|
-
use_rep: str = "X_umap",
|
370
|
+
neighbors_key: str = "neighbors",
|
370
371
|
) -> None:
|
371
372
|
"""Impute missing values in the specified column using KNN imputation in the space defined by `use_rep`.
|
372
373
|
|
374
|
+
Uncertainty is calculated as the entropy of the label distribution in the neighborhood of the target cell.
|
375
|
+
In other words, a cell where all neighbors have the same set of labels will have an uncertainty of 0, whereas a cell
|
376
|
+
where all neighbors have many different labels will have high uncertainty.
|
377
|
+
|
373
378
|
Args:
|
374
379
|
adata: The AnnData object containing single-cell data.
|
375
|
-
column: The column name in
|
380
|
+
column: The column name in adata.obs to perform imputation on.
|
381
|
+
column_uncertainty_score_key: The column name in adata.obs to store the uncertainty score of the label transfer.
|
376
382
|
target_val: The target value to impute.
|
377
|
-
|
378
|
-
use_rep: The key in `adata.obsm` where the embedding (UMAP, PCA, etc.) is stored.
|
383
|
+
neighbors_key: The key in adata.uns where the neighbors are stored.
|
379
384
|
|
380
385
|
Examples:
|
381
386
|
>>> import pertpy as pt
|
382
387
|
>>> import scanpy as sc
|
383
388
|
>>> import numpy as np
|
384
389
|
>>> adata = sc.datasets.pbmc68k_reduced()
|
385
|
-
>>>
|
386
|
-
>>> adata.obs["perturbation"] =
|
387
|
-
|
388
|
-
|
390
|
+
>>> # randomly dropout 10% of the data annotations
|
391
|
+
>>> adata.obs["perturbation"] = adata.obs["louvain"].astype(str).copy()
|
392
|
+
>>> random_cells = np.random.choice(adata.obs.index, int(adata.obs.shape[0] * 0.1), replace=False)
|
393
|
+
>>> adata.obs.loc[random_cells, "perturbation"] = "unknown"
|
389
394
|
>>> sc.pp.neighbors(adata)
|
390
395
|
>>> sc.tl.umap(adata)
|
391
396
|
>>> ps = pt.tl.PseudobulkSpace()
|
392
|
-
>>> ps.label_transfer(adata
|
397
|
+
>>> ps.label_transfer(adata)
|
393
398
|
"""
|
394
|
-
if
|
395
|
-
raise ValueError(f"
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
399
|
+
if neighbors_key not in adata.uns:
|
400
|
+
raise ValueError(f"Key {neighbors_key} not found in adata.uns. Please run `sc.pp.neighbors` first.")
|
401
|
+
|
402
|
+
labels = adata.obs[column].astype(str)
|
403
|
+
target_cells = labels == target_val
|
404
|
+
|
405
|
+
connectivities = adata.obsp[adata.uns[neighbors_key]["connectivities_key"]]
|
406
|
+
# convert labels to an incidence matrix
|
407
|
+
one_hot_encoded_labels = adata.obs[column].astype(str).str.get_dummies()
|
408
|
+
# convert to distance-weighted neighborhood incidence matrix
|
409
|
+
weighted_label_occurence = pd.DataFrame(
|
410
|
+
(one_hot_encoded_labels.values.T * connectivities).T,
|
411
|
+
index=adata.obs_names,
|
412
|
+
columns=one_hot_encoded_labels.columns,
|
413
|
+
)
|
414
|
+
# choose best label for each target cell
|
415
|
+
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
|
418
|
+
|
419
|
+
# calculate uncertainty
|
420
|
+
uncertainty = np.zeros(adata.n_obs)
|
421
|
+
uncertainty[target_cells] = entropy(weighted_label_occurence.drop(target_val, axis=1)[target_cells], axis=1)
|
422
|
+
adata.obs[column_uncertainty_score_key] = uncertainty
|
@@ -1,13 +1,20 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
from typing import TYPE_CHECKING
|
4
|
+
|
3
5
|
import decoupler as dc
|
6
|
+
import matplotlib.pyplot as plt
|
4
7
|
import numpy as np
|
5
8
|
from anndata import AnnData
|
6
9
|
from sklearn.cluster import DBSCAN, KMeans
|
7
10
|
|
11
|
+
from pertpy._doc import _doc_params, doc_common_plot_args
|
8
12
|
from pertpy.tools._perturbation_space._clustering import ClusteringSpace
|
9
13
|
from pertpy.tools._perturbation_space._perturbation_space import PerturbationSpace
|
10
14
|
|
15
|
+
if TYPE_CHECKING:
|
16
|
+
from matplotlib.pyplot import Figure
|
17
|
+
|
11
18
|
|
12
19
|
class CentroidSpace(PerturbationSpace):
|
13
20
|
"""Computes the centroids per perturbation of a pre-computed embedding."""
|
@@ -168,6 +175,47 @@ class PseudobulkSpace(PerturbationSpace):
|
|
168
175
|
|
169
176
|
return ps_adata
|
170
177
|
|
178
|
+
@_doc_params(common_plot_args=doc_common_plot_args)
|
179
|
+
def plot_psbulk_samples(
|
180
|
+
self,
|
181
|
+
adata: AnnData,
|
182
|
+
groupby: str,
|
183
|
+
*,
|
184
|
+
return_fig: bool = False,
|
185
|
+
**kwargs,
|
186
|
+
) -> Figure | None:
|
187
|
+
"""Plot the pseudobulk samples of an AnnData object.
|
188
|
+
|
189
|
+
Plot the count number vs. the number of cells per pseudobulk sample.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
adata: Anndata containing pseudobulk samples.
|
193
|
+
groupby: `.obs` column to color the samples by.
|
194
|
+
{common_plot_args}
|
195
|
+
**kwargs: Are passed to decoupler's plot_psbulk_samples.
|
196
|
+
|
197
|
+
Returns:
|
198
|
+
If `return_fig` is `True`, returns the figure, otherwise `None`.
|
199
|
+
|
200
|
+
Examples:
|
201
|
+
>>> import pertpy as pt
|
202
|
+
>>> adata = pt.dt.zhang_2021()
|
203
|
+
>>> ps = pt.tl.PseudobulkSpace()
|
204
|
+
>>> pdata = ps.compute(
|
205
|
+
... adata, target_col="Patient", groups_col="Cluster", mode="sum", min_cells=10, min_counts=1000
|
206
|
+
... )
|
207
|
+
>>> ps.plot_psbulk_samples(pdata, groupby=["Patient", "Major celltype"], figsize=(12, 4))
|
208
|
+
|
209
|
+
Preview:
|
210
|
+
.. image:: /_static/docstring_previews/pseudobulk_samples.png
|
211
|
+
"""
|
212
|
+
fig = dc.plot_psbulk_samples(adata, groupby, return_fig=True, **kwargs)
|
213
|
+
|
214
|
+
if return_fig:
|
215
|
+
return fig
|
216
|
+
plt.show()
|
217
|
+
return None
|
218
|
+
|
171
219
|
|
172
220
|
class KMeansSpace(ClusteringSpace):
|
173
221
|
"""Computes K-Means clustering of the expression values."""
|
pertpy/tools/_scgen/_scgen.py
CHANGED
@@ -18,12 +18,16 @@ from scvi.data.fields import CategoricalObsField, LayerField
|
|
18
18
|
from scvi.model.base import BaseModelClass, JaxTrainingMixin
|
19
19
|
from scvi.utils import setup_anndata_dsp
|
20
20
|
|
21
|
+
from pertpy._doc import _doc_params, doc_common_plot_args
|
22
|
+
|
21
23
|
from ._scgenvae import JaxSCGENVAE
|
22
24
|
from ._utils import balancer, extractor
|
23
25
|
|
24
26
|
if TYPE_CHECKING:
|
25
27
|
from collections.abc import Sequence
|
26
28
|
|
29
|
+
from matplotlib.pyplot import Figure
|
30
|
+
|
27
31
|
font = {"family": "Arial", "size": 14}
|
28
32
|
|
29
33
|
|
@@ -377,9 +381,8 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
377
381
|
condition_key: str,
|
378
382
|
axis_keys: dict[str, str],
|
379
383
|
labels: dict[str, str],
|
380
|
-
|
384
|
+
*,
|
381
385
|
gene_list: list[str] = None,
|
382
|
-
show: bool = False,
|
383
386
|
top_100_genes: list[str] = None,
|
384
387
|
verbose: bool = False,
|
385
388
|
legend: bool = True,
|
@@ -387,6 +390,8 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
387
390
|
x_coeff: float = 0.30,
|
388
391
|
y_coeff: float = 0.8,
|
389
392
|
fontsize: float = 14,
|
393
|
+
show: bool = False,
|
394
|
+
save: str | bool | None = None,
|
390
395
|
**kwargs,
|
391
396
|
) -> tuple[float, float] | float:
|
392
397
|
"""Plots mean matching for a set of specified genes.
|
@@ -397,21 +402,23 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
397
402
|
corresponding to batch and cell type metadata, respectively.
|
398
403
|
condition_key: The key for the condition
|
399
404
|
axis_keys: Dictionary of `adata.obs` keys that are used by the axes of the plot. Has to be in the following form:
|
400
|
-
`
|
401
|
-
labels: Dictionary of axes labels of the form `
|
402
|
-
path_to_save: path to save the plot.
|
403
|
-
save: Specify if the plot should be saved or not.
|
405
|
+
{`x`: `Key for x-axis`, `y`: `Key for y-axis`}.
|
406
|
+
labels: Dictionary of axes labels of the form {`x`: `x-axis-name`, `y`: `y-axis name`}.
|
404
407
|
gene_list: list of gene names to be plotted.
|
405
|
-
show: if `True`: will show to the plot after saving it.
|
406
408
|
top_100_genes: List of the top 100 differentially expressed genes. Specify if you want the top 100 DEGs to be assessed extra.
|
407
|
-
verbose: Specify if you want information to be printed while creating the plot
|
409
|
+
verbose: Specify if you want information to be printed while creating the plot.
|
408
410
|
legend: Whether to plot a legend.
|
409
411
|
title: Set if you want the plot to display a title.
|
410
412
|
x_coeff: Offset to print the R^2 value in x-direction.
|
411
413
|
y_coeff: Offset to print the R^2 value in y-direction.
|
412
414
|
fontsize: Fontsize used for text in the plot.
|
415
|
+
show: if `True`, will show to the plot after saving it.
|
416
|
+
save: Specify if the plot should be saved or not.
|
413
417
|
**kwargs:
|
414
418
|
|
419
|
+
Returns:
|
420
|
+
Returns R^2 value for all genes and R^2 value for top 100 DEGs if `top_100_genes` is not `None`.
|
421
|
+
|
415
422
|
Examples:
|
416
423
|
>>> import pertpy as pt
|
417
424
|
>>> data = pt.dt.kang_2018()
|
@@ -498,6 +505,7 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
498
505
|
r"$\mathrm{R^2_{\mathrm{\mathsf{top\ 100\ DEGs}}}}$= " + f"{r_value_diff ** 2:.2f}",
|
499
506
|
fontsize=kwargs.get("textsize", fontsize),
|
500
507
|
)
|
508
|
+
|
501
509
|
if save:
|
502
510
|
plt.savefig(save, bbox_inches="tight")
|
503
511
|
if show:
|
@@ -514,16 +522,17 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
514
522
|
condition_key: str,
|
515
523
|
axis_keys: dict[str, str],
|
516
524
|
labels: dict[str, str],
|
517
|
-
|
525
|
+
*,
|
518
526
|
gene_list: list[str] = None,
|
519
527
|
top_100_genes: list[str] = None,
|
520
|
-
show: bool = False,
|
521
528
|
legend: bool = True,
|
522
529
|
title: str = None,
|
523
530
|
verbose: bool = False,
|
524
531
|
x_coeff: float = 0.3,
|
525
532
|
y_coeff: float = 0.8,
|
526
533
|
fontsize: float = 14,
|
534
|
+
show: bool = True,
|
535
|
+
save: str | bool | None = None,
|
527
536
|
**kwargs,
|
528
537
|
) -> tuple[float, float] | float:
|
529
538
|
"""Plots variance matching for a set of specified genes.
|
@@ -534,19 +543,18 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
534
543
|
corresponding to batch and cell type metadata, respectively.
|
535
544
|
condition_key: Key of the condition.
|
536
545
|
axis_keys: Dictionary of `adata.obs` keys that are used by the axes of the plot. Has to be in the following form:
|
537
|
-
|
538
|
-
labels: Dictionary of axes labels of the form
|
539
|
-
path_to_save: path to save the plot.
|
540
|
-
save: Specify if the plot should be saved or not.
|
546
|
+
{"x": "Key for x-axis", "y": "Key for y-axis"}.
|
547
|
+
labels: Dictionary of axes labels of the form {"x": "x-axis-name", "y": "y-axis name"}.
|
541
548
|
gene_list: list of gene names to be plotted.
|
542
|
-
show: if `True`: will show to the plot after saving it.
|
543
549
|
top_100_genes: List of the top 100 differentially expressed genes. Specify if you want the top 100 DEGs to be assessed extra.
|
544
|
-
legend: Whether to plot a
|
550
|
+
legend: Whether to plot a legend.
|
545
551
|
title: Set if you want the plot to display a title.
|
546
552
|
verbose: Specify if you want information to be printed while creating the plot.
|
547
553
|
x_coeff: Offset to print the R^2 value in x-direction.
|
548
554
|
y_coeff: Offset to print the R^2 value in y-direction.
|
549
555
|
fontsize: Fontsize used for text in the plot.
|
556
|
+
show: if `True`, will show to the plot after saving it.
|
557
|
+
save: Specify if the plot should be saved or not.
|
550
558
|
"""
|
551
559
|
import seaborn as sns
|
552
560
|
|
@@ -636,6 +644,7 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
636
644
|
else:
|
637
645
|
return r_value**2
|
638
646
|
|
647
|
+
@_doc_params(common_plot_args=doc_common_plot_args)
|
639
648
|
def plot_binary_classifier(
|
640
649
|
self,
|
641
650
|
scgen: Scgen,
|
@@ -643,10 +652,10 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
643
652
|
delta: np.ndarray,
|
644
653
|
ctrl_key: str,
|
645
654
|
stim_key: str,
|
646
|
-
|
647
|
-
save: str | bool | None = None,
|
655
|
+
*,
|
648
656
|
fontsize: float = 14,
|
649
|
-
|
657
|
+
return_fig: bool = False,
|
658
|
+
) -> Figure | None:
|
650
659
|
"""Plots the dot product between delta and latent representation of a linear classifier.
|
651
660
|
|
652
661
|
Builds a linear classifier based on the dot product between
|
@@ -661,9 +670,11 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
661
670
|
delta: Difference between stimulated and control cells in latent space
|
662
671
|
ctrl_key: Key for `control` part of the `data` found in `condition_key`.
|
663
672
|
stim_key: Key for `stimulated` part of the `data` found in `condition_key`.
|
664
|
-
path_to_save: Path to save the plot.
|
665
|
-
save: Specify if the plot should be saved or not.
|
666
673
|
fontsize: Set the font size of the plot.
|
674
|
+
{common_plot_args}
|
675
|
+
|
676
|
+
Returns:
|
677
|
+
If `return_fig` is `True`, returns the figure, otherwise `None`.
|
667
678
|
"""
|
668
679
|
plt.close("all")
|
669
680
|
adata = scgen._validate_anndata(adata)
|
@@ -693,12 +704,9 @@ class Scgen(JaxTrainingMixin, BaseModelClass):
|
|
693
704
|
ax = plt.gca()
|
694
705
|
ax.grid(False)
|
695
706
|
|
696
|
-
if
|
697
|
-
plt.
|
698
|
-
|
699
|
-
plt.show()
|
700
|
-
if not (show or save):
|
701
|
-
return ax
|
707
|
+
if return_fig:
|
708
|
+
return plt.gcf()
|
709
|
+
plt.show()
|
702
710
|
return None
|
703
711
|
|
704
712
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: pertpy
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.10.0
|
4
4
|
Summary: Perturbation Analysis in the scverse ecosystem.
|
5
5
|
Project-URL: Documentation, https://pertpy.readthedocs.io
|
6
6
|
Project-URL: Source, https://github.com/scverse/pertpy
|
@@ -44,9 +44,8 @@ Classifier: Programming Language :: Python :: 3.11
|
|
44
44
|
Classifier: Programming Language :: Python :: 3.12
|
45
45
|
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
46
46
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
47
|
-
Requires-Python:
|
47
|
+
Requires-Python: <3.13,>=3.10
|
48
48
|
Requires-Dist: adjusttext
|
49
|
-
Requires-Dist: anndata<0.10.9
|
50
49
|
Requires-Dist: blitzgsea
|
51
50
|
Requires-Dist: decoupler
|
52
51
|
Requires-Dist: lamin-utils
|
@@ -58,8 +57,8 @@ Requires-Dist: pyarrow
|
|
58
57
|
Requires-Dist: requests
|
59
58
|
Requires-Dist: rich
|
60
59
|
Requires-Dist: scanpy[leiden]
|
60
|
+
Requires-Dist: scikit-learn>=1.4
|
61
61
|
Requires-Dist: scikit-misc
|
62
|
-
Requires-Dist: scipy
|
63
62
|
Requires-Dist: scvi-tools
|
64
63
|
Requires-Dist: sparsecca
|
65
64
|
Provides-Extra: coda
|
@@ -69,7 +68,8 @@ Requires-Dist: pyqt5; extra == 'coda'
|
|
69
68
|
Requires-Dist: toytree; extra == 'coda'
|
70
69
|
Provides-Extra: de
|
71
70
|
Requires-Dist: formulaic; extra == 'de'
|
72
|
-
Requires-Dist:
|
71
|
+
Requires-Dist: formulaic-contrasts>=0.2.0; extra == 'de'
|
72
|
+
Requires-Dist: pydeseq2>=v0.5.0pre1; extra == 'de'
|
73
73
|
Provides-Extra: dev
|
74
74
|
Requires-Dist: pre-commit; extra == 'dev'
|
75
75
|
Provides-Extra: doc
|
@@ -1,57 +1,58 @@
|
|
1
|
-
pertpy/__init__.py,sha256=
|
1
|
+
pertpy/__init__.py,sha256=SGZpJmqp7CRJfINcZ8YFM8pIR2LKPQ7wlMttiaJAQ5g,659
|
2
|
+
pertpy/_doc.py,sha256=jT8GIw3DVk-wLnX5qPEPaAH3Y_Jv2KAoXBX2jlCkJKY,437
|
2
3
|
pertpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
4
|
pertpy/data/__init__.py,sha256=ah3yvoxkgbdMUNAWxS3SyqcUuVamBOSeuWkF2QRAEwM,2703
|
4
5
|
pertpy/data/_dataloader.py,sha256=ENbk1T3w3N6tVI11V4FVUxuWFEwOHP8_kIB-ehiMlVQ,2428
|
5
|
-
pertpy/data/_datasets.py,sha256=
|
6
|
+
pertpy/data/_datasets.py,sha256=c_U2U2NvncPZc6vs6w_s77zmWqr8ywDpzmkx6edCfUE,65616
|
6
7
|
pertpy/metadata/__init__.py,sha256=zoE_VXNyuKa4nlXlUk2nTgsHRW3jSQSpDEulcCnzOT0,222
|
7
|
-
pertpy/metadata/_cell_line.py,sha256
|
8
|
-
pertpy/metadata/_compound.py,sha256=
|
8
|
+
pertpy/metadata/_cell_line.py,sha256=RKRxm91PBAjx2S4ou5MGoSjEIkO5PV_okZT5HBdMO_M,38937
|
9
|
+
pertpy/metadata/_compound.py,sha256=ywNNqtib0exHv0z8ctmTRf1Hk64tSGWSiUEffycxf6A,4755
|
9
10
|
pertpy/metadata/_drug.py,sha256=8QDSyxiFl25JdS80EQJC_krg6fEe5LIQEE6BsV1r8nY,9006
|
10
11
|
pertpy/metadata/_look_up.py,sha256=DoWp6OxIk_HyyyOhW1p8z5E68IZ31_nZDnqxk1rJqps,28778
|
11
|
-
pertpy/metadata/_metadata.py,sha256=
|
12
|
+
pertpy/metadata/_metadata.py,sha256=hV2LTFrExddLNU_RsDkZju6lQUSRoP4OIn_dumCyQao,3277
|
12
13
|
pertpy/metadata/_moa.py,sha256=u_OcMonjOeeoW5P9xOltquVSoTH3Vs80ztHsXf-X1DY,4701
|
13
14
|
pertpy/plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
15
|
pertpy/preprocessing/__init__.py,sha256=VAPFaeq2_qCvdFkQTCj_Hm460HC4Tersu8Rig_tnp_Y,71
|
15
|
-
pertpy/preprocessing/_guide_rna.py,sha256=
|
16
|
-
pertpy/
|
17
|
-
pertpy/tools/
|
18
|
-
pertpy/tools/
|
19
|
-
pertpy/tools/
|
20
|
-
pertpy/tools/
|
16
|
+
pertpy/preprocessing/_guide_rna.py,sha256=72NbKsgvbA9AgVU0l0pkwKH2KKX4qdAth32lRTGl9hA,12319
|
17
|
+
pertpy/preprocessing/_guide_rna_mixture.py,sha256=NJYU6gUJp_lKHKf_P5kS8QzAnkOnmX8snECmqvoNprM,6458
|
18
|
+
pertpy/tools/__init__.py,sha256=NUTwCGxRdzUzLTgsS3r7MywENwPAdcGZDKrl83sU8mo,2599
|
19
|
+
pertpy/tools/_augur.py,sha256=tZXlVeXvF7oGWXTEeVhN-5mbaNUSD1xIo40tKD_l1rg,54633
|
20
|
+
pertpy/tools/_cinemaot.py,sha256=jkJCoTX2m-xVqQs4Iq8LbHWvQyH06-SCMBYczYXUzLE,39573
|
21
|
+
pertpy/tools/_dialogue.py,sha256=NGf3yiUntWp5P0WmXHErgqietw1eyXqr40QCpHUkMZM,52076
|
22
|
+
pertpy/tools/_enrichment.py,sha256=NYBVvnGDAeoWfTEhezWBUWeNugZDRisMpZMsU0lpA_s,21592
|
21
23
|
pertpy/tools/_kernel_pca.py,sha256=_EJ9WlBLjHOafF34sZGdyBgZL6Fj0WiJ1elVT1XMmo4,1579
|
22
|
-
pertpy/tools/_milo.py,sha256=
|
23
|
-
pertpy/tools/_mixscape.py,sha256=
|
24
|
+
pertpy/tools/_milo.py,sha256=Z87RETCz7loUVov5WhrT0ieqJQrAHgknWcpU6qci_VM,43619
|
25
|
+
pertpy/tools/_mixscape.py,sha256=nNFWVJeudEiDQ7i5FTXF0xWdOILh2rIF2YyFbZuz6jE,57015
|
24
26
|
pertpy/tools/decoupler_LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
25
27
|
pertpy/tools/transferlearning_MMD_LICENSE,sha256=MUvDA-o_j9htRpI8fStVdCRuyLdPkQUuIH0a_EIc57w,1069
|
26
28
|
pertpy/tools/_coda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
|
-
pertpy/tools/_coda/_base_coda.py,sha256=
|
29
|
+
pertpy/tools/_coda/_base_coda.py,sha256=w5Tgd73tUYJ9209xncM_QhcnGfeDEgRHss8M_1NQSoM,111630
|
28
30
|
pertpy/tools/_coda/_sccoda.py,sha256=gGmyd0MGpchulV9d4PxKSmGORyZ8fCDS9tQVPOuF_Og,22622
|
29
31
|
pertpy/tools/_coda/_tasccoda.py,sha256=vNk43OQHn7pBLsez2rmSj0bMZKOf8jZTI7G8TfBByRg,30665
|
30
|
-
pertpy/tools/_differential_gene_expression/__init__.py,sha256=
|
31
|
-
pertpy/tools/_differential_gene_expression/_base.py,sha256=
|
32
|
+
pertpy/tools/_differential_gene_expression/__init__.py,sha256=SEydWg0iT3Y1pApjnCAOuHxFeI6xVUfgyBHv2s3LADU,487
|
33
|
+
pertpy/tools/_differential_gene_expression/_base.py,sha256=4BTJx1bfvDdFpJPFA_jMBVqVFWAYASM01Ec0ObIRgeE,38322
|
32
34
|
pertpy/tools/_differential_gene_expression/_checks.py,sha256=SxNHJDsCYZ6rWLTMEymEBpigs_B9cnXyw0kkAe1l6e0,1675
|
33
35
|
pertpy/tools/_differential_gene_expression/_dge_comparison.py,sha256=9HjmWkrqZhj_ZJeR-ymyEDzpRJNx7JiYJoStvCfKuCU,4188
|
34
|
-
pertpy/tools/_differential_gene_expression/_edger.py,sha256=
|
35
|
-
pertpy/tools/_differential_gene_expression/
|
36
|
-
pertpy/tools/_differential_gene_expression/_pydeseq2.py,sha256=JK7H7u4va0q_TLE_sqi4JEzoPBd_xNRycYGu1507HS4,4117
|
36
|
+
pertpy/tools/_differential_gene_expression/_edger.py,sha256=ttgTocAYnr8BTDcixwHGjRZew6zeja-U77TLKkSdd1Y,4857
|
37
|
+
pertpy/tools/_differential_gene_expression/_pydeseq2.py,sha256=aOqsdu8hKp8_h2HhjkxS0B_itxRBnzEU2oSnU2PYiQ4,2942
|
37
38
|
pertpy/tools/_differential_gene_expression/_simple_tests.py,sha256=tTSr0Z2Qbpxdy9bcO8Gi_up6R616IcoK_e4_rlanyx4,6621
|
38
|
-
pertpy/tools/_differential_gene_expression/_statsmodels.py,sha256=
|
39
|
+
pertpy/tools/_differential_gene_expression/_statsmodels.py,sha256=jBCtaCglOvvVjkIBGXuTCTDB6g2AJsZMCf7iOlDyn48,2195
|
39
40
|
pertpy/tools/_distances/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
41
|
pertpy/tools/_distances/_distance_tests.py,sha256=mNmNu5cX0Wj5IegR6x5K-CbBSid8EhrH2jZPQxuvK4U,13521
|
41
|
-
pertpy/tools/_distances/_distances.py,sha256=
|
42
|
+
pertpy/tools/_distances/_distances.py,sha256=h0FHkWF4MwfXO2ZbFHicgwVXsit-24z8PtfFzRrky2E,50497
|
42
43
|
pertpy/tools/_perturbation_space/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
44
|
pertpy/tools/_perturbation_space/_clustering.py,sha256=m52-J8c8OnIXRCf3NoFabIO2yMHIuy1X0m0amtsK2vE,3556
|
44
45
|
pertpy/tools/_perturbation_space/_comparison.py,sha256=rLO-EGU0I7t5MnLw4k1gYU-ypRu-JsDPLat1t4h2U2M,4329
|
45
46
|
pertpy/tools/_perturbation_space/_discriminator_classifiers.py,sha256=OA2eZeG_4iuW1T5ilsRIkS0rU-azmwEch7IuB546KSY,21617
|
46
47
|
pertpy/tools/_perturbation_space/_metrics.py,sha256=y8-baP8WRdB1iDgvP3uuQxSCDxA2lcxvEHHM2C_vWHY,3248
|
47
|
-
pertpy/tools/_perturbation_space/_perturbation_space.py,sha256=
|
48
|
-
pertpy/tools/_perturbation_space/_simple.py,sha256=
|
48
|
+
pertpy/tools/_perturbation_space/_perturbation_space.py,sha256=F-F-_pMCTWxjkVQSLre6hrE6PeRfCRscpt2ug3NlfuU,19531
|
49
|
+
pertpy/tools/_perturbation_space/_simple.py,sha256=tgIDXcJ-uG59BpU64gAq_RbCb_AQn3UxvJi4Gjm48BY,14190
|
49
50
|
pertpy/tools/_scgen/__init__.py,sha256=uERFlFyF88TH0uLiwmsUGEfHfLVCiZMFuk8gO5f7164,45
|
50
51
|
pertpy/tools/_scgen/_base_components.py,sha256=Qq8myRUm43q9XBrZ9gBggfa2cSV2wbz_KYoLgH7iF1A,3009
|
51
|
-
pertpy/tools/_scgen/_scgen.py,sha256=
|
52
|
+
pertpy/tools/_scgen/_scgen.py,sha256=vPpCXUGVvrP5UxuaHuEaYK7D_A27HZcbFYpSCjMUcao,30708
|
52
53
|
pertpy/tools/_scgen/_scgenvae.py,sha256=v_6tZ4wY-JjdMH1QVd_wG4_N0PoaqB-FM8zC2JsDu1o,3935
|
53
54
|
pertpy/tools/_scgen/_utils.py,sha256=1upgOt1FpadfvNG05YpMjYYG-IAlxrC3l_ZxczmIczo,2841
|
54
|
-
pertpy-0.
|
55
|
-
pertpy-0.
|
56
|
-
pertpy-0.
|
57
|
-
pertpy-0.
|
55
|
+
pertpy-0.10.0.dist-info/METADATA,sha256=U-9KOM65HXc4uHjsfbpQfu68sizlsKxsBQQGNNBAmFs,6940
|
56
|
+
pertpy-0.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
57
|
+
pertpy-0.10.0.dist-info/licenses/LICENSE,sha256=OZ-ZkXM5CmExJiEMM90b_7dGNNvRpj7kdE-49AnrLuI,1070
|
58
|
+
pertpy-0.10.0.dist-info/RECORD,,
|