pertpy 0.9.4__py3-none-any.whl → 0.10.0__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.
- 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,,
|