pertpy 0.11.2__py3-none-any.whl → 0.11.4__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/tools/_coda/_base_coda.py +23 -18
- pertpy/tools/_dialogue.py +1 -1
- pertpy/tools/_differential_gene_expression/_base.py +1 -3
- pertpy/tools/_perturbation_space/_simple.py +10 -53
- {pertpy-0.11.2.dist-info → pertpy-0.11.4.dist-info}/METADATA +33 -6
- {pertpy-0.11.2.dist-info → pertpy-0.11.4.dist-info}/RECORD +9 -9
- {pertpy-0.11.2.dist-info → pertpy-0.11.4.dist-info}/WHEEL +0 -0
- {pertpy-0.11.2.dist-info → pertpy-0.11.4.dist-info}/licenses/LICENSE +0 -0
pertpy/__init__.py
CHANGED
pertpy/tools/_coda/_base_coda.py
CHANGED
@@ -16,7 +16,7 @@ from jax import config, random
|
|
16
16
|
from lamin_utils import logger
|
17
17
|
from matplotlib import cm, rcParams
|
18
18
|
from matplotlib import image as mpimg
|
19
|
-
from matplotlib.colors import
|
19
|
+
from matplotlib.colors import Colormap
|
20
20
|
from mudata import MuData
|
21
21
|
from numpyro.infer import HMC, MCMC, NUTS, initialization
|
22
22
|
from rich import box, print
|
@@ -34,7 +34,6 @@ if TYPE_CHECKING:
|
|
34
34
|
from ete4 import Tree
|
35
35
|
from jax._src.typing import Array
|
36
36
|
from matplotlib.axes import Axes
|
37
|
-
from matplotlib.colors import Colormap
|
38
37
|
from matplotlib.figure import Figure
|
39
38
|
|
40
39
|
config.update("jax_enable_x64", True)
|
@@ -1141,7 +1140,7 @@ class CompositionalModel2(ABC):
|
|
1141
1140
|
level_names: list[str],
|
1142
1141
|
figsize: tuple[float, float] | None = None,
|
1143
1142
|
dpi: int | None = 100,
|
1144
|
-
palette:
|
1143
|
+
palette: str | Colormap | None = cm.tab20,
|
1145
1144
|
show_legend: bool | None = True,
|
1146
1145
|
) -> plt.Axes:
|
1147
1146
|
"""Plots a stacked barplot for one (discrete) covariate.
|
@@ -1156,12 +1155,15 @@ class CompositionalModel2(ABC):
|
|
1156
1155
|
level_names: Names of the covariate's levels
|
1157
1156
|
figsize: Figure size (matplotlib).
|
1158
1157
|
dpi: Resolution in DPI (matplotlib).
|
1159
|
-
palette: The color map for the barplot.
|
1158
|
+
palette: The color map (name) for the barplot.
|
1160
1159
|
show_legend: If True, adds a legend.
|
1161
1160
|
|
1162
1161
|
Returns:
|
1163
1162
|
A :class:`~matplotlib.axes.Axes` object
|
1164
1163
|
"""
|
1164
|
+
if isinstance(palette, str):
|
1165
|
+
palette = getattr(cm, palette)
|
1166
|
+
|
1165
1167
|
n_bars, n_types = y.shape
|
1166
1168
|
|
1167
1169
|
figsize = rcParams["figure.figsize"] if figsize is None else figsize
|
@@ -1202,7 +1204,7 @@ class CompositionalModel2(ABC):
|
|
1202
1204
|
feature_name: str,
|
1203
1205
|
*,
|
1204
1206
|
modality_key: str = "coda",
|
1205
|
-
palette:
|
1207
|
+
palette: str | Colormap | None = cm.tab20,
|
1206
1208
|
show_legend: bool | None = True,
|
1207
1209
|
level_order: list[str] = None,
|
1208
1210
|
figsize: tuple[float, float] | None = None,
|
@@ -1217,7 +1219,7 @@ class CompositionalModel2(ABC):
|
|
1217
1219
|
modality_key: If data is a MuData object, specify which modality to use.
|
1218
1220
|
figsize: Figure size.
|
1219
1221
|
dpi: Dpi setting.
|
1220
|
-
palette: The matplotlib color map for the barplot.
|
1222
|
+
palette: The matplotlib color map (name) for the barplot.
|
1221
1223
|
show_legend: If True, adds a legend.
|
1222
1224
|
level_order: Custom ordering of bars on the x-axis.
|
1223
1225
|
{common_plot_args}
|
@@ -1299,7 +1301,7 @@ class CompositionalModel2(ABC):
|
|
1299
1301
|
plot_facets: bool = True,
|
1300
1302
|
plot_zero_covariate: bool = True,
|
1301
1303
|
plot_zero_cell_type: bool = False,
|
1302
|
-
palette: str |
|
1304
|
+
palette: str | Colormap | None = cm.tab20,
|
1303
1305
|
level_order: list[str] = None,
|
1304
1306
|
args_barplot: dict | None = None,
|
1305
1307
|
figsize: tuple[float, float] | None = None,
|
@@ -1321,7 +1323,7 @@ class CompositionalModel2(ABC):
|
|
1321
1323
|
plot_zero_cell_type: If True, plot cell type that have zero effect. If False, do not plot.
|
1322
1324
|
figsize: Figure size.
|
1323
1325
|
dpi: Figure size.
|
1324
|
-
palette: The seaborn color map for the barplot.
|
1326
|
+
palette: The seaborn color map (name) for the barplot.
|
1325
1327
|
level_order: Custom ordering of bars on the x-axis.
|
1326
1328
|
args_barplot: Arguments passed to sns.barplot.
|
1327
1329
|
{common_plot_args}
|
@@ -1397,7 +1399,7 @@ class CompositionalModel2(ABC):
|
|
1397
1399
|
|
1398
1400
|
# If plot as facets, create a FacetGrid and map barplot to it.
|
1399
1401
|
if plot_facets:
|
1400
|
-
if isinstance(palette,
|
1402
|
+
if isinstance(palette, Colormap):
|
1401
1403
|
palette = np.array([palette(i % palette.N) for i in range(len(plot_df["Cell Type"].unique()))]).tolist()
|
1402
1404
|
if figsize is not None:
|
1403
1405
|
height = figsize[0]
|
@@ -1437,7 +1439,7 @@ class CompositionalModel2(ABC):
|
|
1437
1439
|
else:
|
1438
1440
|
_, ax = plt.subplots(figsize=figsize, dpi=dpi)
|
1439
1441
|
if len(covariate_names) == 1:
|
1440
|
-
if isinstance(palette,
|
1442
|
+
if isinstance(palette, Colormap):
|
1441
1443
|
palette = np.array(
|
1442
1444
|
[palette(i % palette.N) for i in range(len(plot_df["Cell Type"].unique()))]
|
1443
1445
|
).tolist()
|
@@ -1451,7 +1453,7 @@ class CompositionalModel2(ABC):
|
|
1451
1453
|
)
|
1452
1454
|
ax.set_title(covariate_names[0])
|
1453
1455
|
else:
|
1454
|
-
if isinstance(palette,
|
1456
|
+
if isinstance(palette, Colormap):
|
1455
1457
|
palette = np.array([palette(i % palette.N) for i in range(len(covariate_names))]).tolist()
|
1456
1458
|
sns.barplot(
|
1457
1459
|
data=plot_df,
|
@@ -1485,7 +1487,7 @@ class CompositionalModel2(ABC):
|
|
1485
1487
|
cell_types: list | None = None,
|
1486
1488
|
args_boxplot: dict | None = None,
|
1487
1489
|
args_swarmplot: dict | None = None,
|
1488
|
-
palette: str | None = "Blues",
|
1490
|
+
palette: str | Colormap | None = "Blues",
|
1489
1491
|
show_legend: bool | None = True,
|
1490
1492
|
level_order: list[str] = None,
|
1491
1493
|
figsize: tuple[float, float] | None = None,
|
@@ -1510,7 +1512,7 @@ class CompositionalModel2(ABC):
|
|
1510
1512
|
args_swarmplot: Arguments passed to sns.swarmplot.
|
1511
1513
|
figsize: Figure size.
|
1512
1514
|
dpi: Dpi setting.
|
1513
|
-
palette: The seaborn color map for the barplot.
|
1515
|
+
palette: The seaborn color map (name) for the barplot.
|
1514
1516
|
show_legend: If True, adds a legend.
|
1515
1517
|
level_order: Custom ordering of bars on the x-axis.
|
1516
1518
|
{common_plot_args}
|
@@ -1535,6 +1537,8 @@ class CompositionalModel2(ABC):
|
|
1535
1537
|
args_swarmplot = {}
|
1536
1538
|
if isinstance(data, MuData):
|
1537
1539
|
data = data[modality_key]
|
1540
|
+
if isinstance(palette, Colormap):
|
1541
|
+
palette = palette(range(2))
|
1538
1542
|
|
1539
1543
|
# y scale transformations
|
1540
1544
|
if y_scale == "relative":
|
@@ -2104,7 +2108,7 @@ class CompositionalModel2(ABC):
|
|
2104
2108
|
modality_key_1: str = "rna",
|
2105
2109
|
modality_key_2: str = "coda",
|
2106
2110
|
color_map: Colormap | str | None = None,
|
2107
|
-
palette: str | Sequence[str] | None = None,
|
2111
|
+
palette: str | Sequence[str] | Colormap | None = None,
|
2108
2112
|
ax: Axes = None,
|
2109
2113
|
return_fig: bool = False,
|
2110
2114
|
**kwargs,
|
@@ -2122,7 +2126,7 @@ class CompositionalModel2(ABC):
|
|
2122
2126
|
modality_key_1: Key to the cell-level AnnData in the MuData object.
|
2123
2127
|
modality_key_2: Key to the aggregated sample-level AnnData object in the MuData object.
|
2124
2128
|
color_map: The color map to use for plotting.
|
2125
|
-
palette: The color palette to use for plotting.
|
2129
|
+
palette: The color palette (name) to use for plotting.
|
2126
2130
|
ax: A matplotlib axes object. Only works if plotting a single component.
|
2127
2131
|
{common_plot_args}
|
2128
2132
|
**kwargs: All other keyword arguments are passed to `scanpy.plot.umap()`
|
@@ -2154,9 +2158,6 @@ class CompositionalModel2(ABC):
|
|
2154
2158
|
>>> tasccoda_model.run_nuts(
|
2155
2159
|
... tasccoda_data, modality_key="coda", rng_key=1234, num_samples=10000, num_warmup=1000
|
2156
2160
|
... )
|
2157
|
-
>>> tasccoda_model.run_nuts(
|
2158
|
-
... tasccoda_data, modality_key="coda", rng_key=1234, num_samples=10000, num_warmup=1000
|
2159
|
-
... )
|
2160
2161
|
>>> sc.tl.umap(tasccoda_data["rna"])
|
2161
2162
|
>>> tasccoda_model.plot_effects_umap(tasccoda_data,
|
2162
2163
|
>>> effect_name=["effect_df_condition[T.Salmonella]",
|
@@ -2173,6 +2174,10 @@ class CompositionalModel2(ABC):
|
|
2173
2174
|
data_coda = mdata[modality_key_2]
|
2174
2175
|
if isinstance(effect_name, str):
|
2175
2176
|
effect_name = [effect_name]
|
2177
|
+
if isinstance(palette, Colormap):
|
2178
|
+
palette = {
|
2179
|
+
cluster: palette(i % palette.N) for i, cluster in enumerate(data_rna.obs[cluster_key].unique().tolist())
|
2180
|
+
}
|
2176
2181
|
for _, effect in enumerate(effect_name):
|
2177
2182
|
data_rna.obs[effect] = [data_coda.varm[effect].loc[f"{c}", "Effect"] for c in data_rna.obs[cluster_key]]
|
2178
2183
|
if kwargs.get("vmin"):
|
pertpy/tools/_dialogue.py
CHANGED
@@ -80,7 +80,7 @@ class Dialogue:
|
|
80
80
|
Returns:
|
81
81
|
A Pandas DataFrame of pseudobulk counts
|
82
82
|
"""
|
83
|
-
# TODO: Replace with
|
83
|
+
# TODO: Replace with scanpy get implementation
|
84
84
|
pseudobulk = {"Genes": adata.var_names.values}
|
85
85
|
|
86
86
|
for category in adata.obs.loc[:, groupby].cat.categories:
|
@@ -572,9 +572,7 @@ class MethodBase(ABC):
|
|
572
572
|
if any(adata.obs[[groupby, pairedby]].value_counts() > 1):
|
573
573
|
logger.info("Performing pseudobulk for paired samples")
|
574
574
|
ps = PseudobulkSpace()
|
575
|
-
adata = ps.compute(
|
576
|
-
adata, target_col=groupby, groups_col=pairedby, layer_key=layer, mode="sum", min_cells=1, min_counts=1
|
577
|
-
)
|
575
|
+
adata = ps.compute(adata, target_col=groupby, groups_col=pairedby, layer_key=layer, mode="sum")
|
578
576
|
|
579
577
|
X = adata.layers[layer] if layer is not None else adata.X
|
580
578
|
with contextlib.suppress(AttributeError):
|
@@ -1,21 +1,15 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from typing import
|
3
|
+
from typing import Literal
|
4
4
|
|
5
|
-
import matplotlib.pyplot as plt
|
6
5
|
import numpy as np
|
6
|
+
import scanpy as sc
|
7
7
|
from anndata import AnnData
|
8
|
-
from decoupler import get_pseudobulk as dc_get_pseudobulk
|
9
|
-
from decoupler import plot_psbulk_samples as dc_plot_psbulk_samples
|
10
8
|
from sklearn.cluster import DBSCAN, KMeans
|
11
9
|
|
12
|
-
from pertpy._doc import _doc_params, doc_common_plot_args
|
13
10
|
from pertpy.tools._perturbation_space._clustering import ClusteringSpace
|
14
11
|
from pertpy.tools._perturbation_space._perturbation_space import PerturbationSpace
|
15
12
|
|
16
|
-
if TYPE_CHECKING:
|
17
|
-
from matplotlib.pyplot import Figure
|
18
|
-
|
19
13
|
|
20
14
|
class CentroidSpace(PerturbationSpace):
|
21
15
|
"""Computes the centroids per perturbation of a pre-computed embedding."""
|
@@ -126,9 +120,9 @@ class PseudobulkSpace(PerturbationSpace):
|
|
126
120
|
groups_col: str = None,
|
127
121
|
layer_key: str = None,
|
128
122
|
embedding_key: str = None,
|
129
|
-
|
123
|
+
mode: Literal["count_nonzero", "mean", "sum", "var", "median"] = "sum",
|
130
124
|
) -> AnnData: # type: ignore
|
131
|
-
"""Determines pseudobulks of an AnnData object.
|
125
|
+
"""Determines pseudobulks of an AnnData object.
|
132
126
|
|
133
127
|
Args:
|
134
128
|
adata: Anndata object of size cells x genes
|
@@ -137,7 +131,7 @@ class PseudobulkSpace(PerturbationSpace):
|
|
137
131
|
The summarized expression per perturbation (target_col) and group (groups_col) is computed.
|
138
132
|
layer_key: If specified pseudobulk computation is done by using the specified layer. Otherwise, computation is done with .X
|
139
133
|
embedding_key: `obsm` key of the AnnData embedding to use for computation. Defaults to the 'X' matrix otherwise.
|
140
|
-
|
134
|
+
mode: Pseudobulk aggregation function
|
141
135
|
|
142
136
|
Returns:
|
143
137
|
AnnData object with one observation per perturbation.
|
@@ -167,53 +161,16 @@ class PseudobulkSpace(PerturbationSpace):
|
|
167
161
|
adata = adata_emb
|
168
162
|
|
169
163
|
adata.obs[target_col] = adata.obs[target_col].astype("category")
|
170
|
-
ps_adata =
|
164
|
+
ps_adata = sc.get.aggregate(
|
165
|
+
adata, by=[target_col] if groups_col is None else [target_col, groups_col], func=mode, layer=layer_key
|
166
|
+
)
|
167
|
+
if mode in ps_adata.layers:
|
168
|
+
ps_adata.X = ps_adata.layers[mode]
|
171
169
|
|
172
170
|
ps_adata.obs[target_col] = ps_adata.obs[target_col].astype("category")
|
173
171
|
|
174
172
|
return ps_adata
|
175
173
|
|
176
|
-
@_doc_params(common_plot_args=doc_common_plot_args)
|
177
|
-
def plot_psbulk_samples( # pragma: no cover # noqa: D417
|
178
|
-
self,
|
179
|
-
adata: AnnData,
|
180
|
-
groupby: str,
|
181
|
-
*,
|
182
|
-
return_fig: bool = False,
|
183
|
-
**kwargs,
|
184
|
-
) -> Figure | None:
|
185
|
-
"""Plot the pseudobulk samples of an AnnData object.
|
186
|
-
|
187
|
-
Plot the count number vs. the number of cells per pseudobulk sample.
|
188
|
-
|
189
|
-
Args:
|
190
|
-
adata: Anndata containing pseudobulk samples.
|
191
|
-
groupby: `.obs` column to color the samples by.
|
192
|
-
{common_plot_args}
|
193
|
-
**kwargs: Are passed to decoupler's plot_psbulk_samples.
|
194
|
-
|
195
|
-
Returns:
|
196
|
-
If `return_fig` is `True`, returns the figure, otherwise `None`.
|
197
|
-
|
198
|
-
Examples:
|
199
|
-
>>> import pertpy as pt
|
200
|
-
>>> adata = pt.dt.zhang_2021()
|
201
|
-
>>> ps = pt.tl.PseudobulkSpace()
|
202
|
-
>>> pdata = ps.compute(
|
203
|
-
... adata, target_col="Patient", groups_col="Cluster", mode="sum", min_cells=10, min_counts=1000
|
204
|
-
... )
|
205
|
-
>>> ps.plot_psbulk_samples(pdata, groupby=["Patient", "Major celltype"], figsize=(12, 4))
|
206
|
-
|
207
|
-
Preview:
|
208
|
-
.. image:: /_static/docstring_previews/pseudobulk_samples.png
|
209
|
-
"""
|
210
|
-
fig = dc_plot_psbulk_samples(adata, groupby, return_fig=True, **kwargs)
|
211
|
-
|
212
|
-
if return_fig:
|
213
|
-
return fig
|
214
|
-
plt.show()
|
215
|
-
return None
|
216
|
-
|
217
174
|
|
218
175
|
class KMeansSpace(ClusteringSpace):
|
219
176
|
"""Computes K-Means clustering of the expression values."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pertpy
|
3
|
-
Version: 0.11.
|
3
|
+
Version: 0.11.4
|
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
|
@@ -49,7 +49,6 @@ Requires-Python: <3.14,>=3.11
|
|
49
49
|
Requires-Dist: adjusttext
|
50
50
|
Requires-Dist: arviz
|
51
51
|
Requires-Dist: blitzgsea
|
52
|
-
Requires-Dist: decoupler
|
53
52
|
Requires-Dist: fast-array-utils
|
54
53
|
Requires-Dist: lamin-utils
|
55
54
|
Requires-Dist: mudata
|
@@ -132,22 +131,50 @@ You can install _pertpy_ in less than a minute via [pip] from [PyPI]:
|
|
132
131
|
pip install pertpy
|
133
132
|
```
|
134
133
|
|
134
|
+
### Differential gene expression
|
135
|
+
|
136
|
+
If you want to use the differential gene expression interface, please install pertpy by running:
|
137
|
+
|
138
|
+
```console
|
139
|
+
pip install 'pertpy[de]'
|
140
|
+
```
|
141
|
+
|
142
|
+
### tascCODA
|
143
|
+
|
135
144
|
if you want to use tascCODA, please install pertpy as follows:
|
136
145
|
|
137
146
|
```console
|
138
147
|
pip install 'pertpy[tcoda]'
|
139
148
|
```
|
140
149
|
|
141
|
-
|
150
|
+
### milo
|
151
|
+
|
152
|
+
milo further requires edger, statmod, and rpy2 to be installed:
|
153
|
+
|
154
|
+
```R
|
155
|
+
BiocManager::install("edgeR")
|
156
|
+
BiocManager::install("statmod")
|
157
|
+
```
|
142
158
|
|
143
159
|
```console
|
144
|
-
pip install
|
160
|
+
pip install rpy2
|
145
161
|
```
|
146
162
|
|
147
163
|
## Citation
|
148
164
|
|
149
|
-
|
150
|
-
|
165
|
+
```bibtex
|
166
|
+
@article {Heumos2024.08.04.606516,
|
167
|
+
author = {Heumos, Lukas and Ji, Yuge and May, Lilly and Green, Tessa and Zhang, Xinyue and Wu, Xichen and Ostner, Johannes and Peidli, Stefan and Schumacher, Antonia and Hrovatin, Karin and Müller, Michaela and Chong, Faye and Sturm, Gregor and Tejada, Alejandro and Dann, Emma and Dong, Mingze and Bahrami, Mojtaba and Gold, Ilan and Rybakov, Sergei and Namsaraeva, Altana and Moinfar, Amir and Zheng, Zihe and Roellin, Eljas and Mekki, Isra and Sander, Chris and Lotfollahi, Mohammad and Schiller, Herbert B. and Theis, Fabian J.},
|
168
|
+
title = {Pertpy: an end-to-end framework for perturbation analysis},
|
169
|
+
elocation-id = {2024.08.04.606516},
|
170
|
+
year = {2024},
|
171
|
+
doi = {10.1101/2024.08.04.606516},
|
172
|
+
publisher = {Cold Spring Harbor Laboratory},
|
173
|
+
URL = {https://www.biorxiv.org/content/early/2024/08/07/2024.08.04.606516},
|
174
|
+
eprint = {https://www.biorxiv.org/content/early/2024/08/07/2024.08.04.606516.full.pdf},
|
175
|
+
journal = {bioRxiv}
|
176
|
+
}
|
177
|
+
```
|
151
178
|
|
152
179
|
[pip]: https://pip.pypa.io/
|
153
180
|
[pypi]: https://pypi.org/
|
@@ -1,4 +1,4 @@
|
|
1
|
-
pertpy/__init__.py,sha256=
|
1
|
+
pertpy/__init__.py,sha256=fJegZfFrqw0e5er2WVo0NzDOgeJ7DZD9M_rflPLoizQ,716
|
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
|
@@ -19,18 +19,18 @@ pertpy/preprocessing/_guide_rna_mixture.py,sha256=pT_YkjmN4iEJ-THBROu_dpbr8E6u8G
|
|
19
19
|
pertpy/tools/__init__.py,sha256=xjfw3Dd_KGytjjCID0uEs6Fz7DalH46fCjVL2Zf2kOo,2629
|
20
20
|
pertpy/tools/_augur.py,sha256=tc1YKyc0BwzrEGgctsfyy7DsTNKxyvy7ZvWraTWCc1A,55262
|
21
21
|
pertpy/tools/_cinemaot.py,sha256=54-rS0AEj31dMe7iU4kEmLoAunq3jNuhsBE3IEp9hrI,38071
|
22
|
-
pertpy/tools/_dialogue.py,sha256=
|
22
|
+
pertpy/tools/_dialogue.py,sha256=mygIZm5i_bnEE37TTQtr1efl_KJq-ejzeL3V1Bmr7Pg,52354
|
23
23
|
pertpy/tools/_enrichment.py,sha256=55mwotLH9DXQOhl85MCkxXu-MX0RysLyrPheJysAnF0,21369
|
24
24
|
pertpy/tools/_milo.py,sha256=r-kZcpAcoQuhi41AnVuzh-cMIcV3HB3-RGzynHyDc1A,43712
|
25
25
|
pertpy/tools/_mixscape.py,sha256=qjXGyH-oeBFte0efuHJfhVEbivnzUVWREwC40ef6Se8,57203
|
26
26
|
pertpy/tools/decoupler_LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
27
27
|
pertpy/tools/transferlearning_MMD_LICENSE,sha256=MUvDA-o_j9htRpI8fStVdCRuyLdPkQUuIH0a_EIc57w,1069
|
28
28
|
pertpy/tools/_coda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
-
pertpy/tools/_coda/_base_coda.py,sha256
|
29
|
+
pertpy/tools/_coda/_base_coda.py,sha256=aw_aSB_NIUL0yQw2t-MUysxoXt1xdUDLK-pItRGUW3s,111703
|
30
30
|
pertpy/tools/_coda/_sccoda.py,sha256=0Ret6O56kAfCNOdBvtxqiyuj2rUPp18SV1GVK1AvYGU,22607
|
31
31
|
pertpy/tools/_coda/_tasccoda.py,sha256=BTaOAmL458zQ_og3x4ENlDnJHD6_F4YkdCoXWsF4i1U,30465
|
32
32
|
pertpy/tools/_differential_gene_expression/__init__.py,sha256=SEydWg0iT3Y1pApjnCAOuHxFeI6xVUfgyBHv2s3LADU,487
|
33
|
-
pertpy/tools/_differential_gene_expression/_base.py,sha256=
|
33
|
+
pertpy/tools/_differential_gene_expression/_base.py,sha256=ELx0e9DChJGO3yRpCLUOykt3oNOyDAPOQZZGSwzBSR0,38265
|
34
34
|
pertpy/tools/_differential_gene_expression/_checks.py,sha256=hH_GP0lWGO-5zrCFX4YiIVCZBCuK0ZJ0jFmdlx2Qm4k,1639
|
35
35
|
pertpy/tools/_differential_gene_expression/_dge_comparison.py,sha256=LXhp5djKKCAk9VI7OqxOuja849G5lnd8Ehcs9Epk8rg,4159
|
36
36
|
pertpy/tools/_differential_gene_expression/_edger.py,sha256=nSHMDA4drGq_sJwUXs5I2EbMHwqjiS08GqOU_1_dXPc,4798
|
@@ -46,13 +46,13 @@ pertpy/tools/_perturbation_space/_comparison.py,sha256=-NzCPRT-IlhJ9hOz7NQLSk0ri
|
|
46
46
|
pertpy/tools/_perturbation_space/_discriminator_classifiers.py,sha256=gDid9Z1_AAPHPWuNgAkbP7yrgcC0qjjqTuWjTzTAAZo,23373
|
47
47
|
pertpy/tools/_perturbation_space/_metrics.py,sha256=y8-baP8WRdB1iDgvP3uuQxSCDxA2lcxvEHHM2C_vWHY,3248
|
48
48
|
pertpy/tools/_perturbation_space/_perturbation_space.py,sha256=8RxVUkVEPZj5YZ-C-NP5zO4aYYVD04PzlsYuaIG-wjY,19447
|
49
|
-
pertpy/tools/_perturbation_space/_simple.py,sha256=
|
49
|
+
pertpy/tools/_perturbation_space/_simple.py,sha256=AJlHRaEP-vViBeMDvvMtUnXMuIKqZVc7wggnjsHMfMw,12721
|
50
50
|
pertpy/tools/_scgen/__init__.py,sha256=uERFlFyF88TH0uLiwmsUGEfHfLVCiZMFuk8gO5f7164,45
|
51
51
|
pertpy/tools/_scgen/_base_components.py,sha256=Qq8myRUm43q9XBrZ9gBggfa2cSV2wbz_KYoLgH7iF1A,3009
|
52
52
|
pertpy/tools/_scgen/_scgen.py,sha256=31T8ez0FxABIbunJHCk8xvGulHFb8RHXSsyM_z1WsPY,30850
|
53
53
|
pertpy/tools/_scgen/_scgenvae.py,sha256=bPk4v7EdJc7ROdLuDitHiX_Pvwa7Flw2qHRUwBvjLJY,3889
|
54
54
|
pertpy/tools/_scgen/_utils.py,sha256=qz5QUn_Bvk2NGyYVzp3jgjWTFOMt1YyHwUo6HWtoThY,2871
|
55
|
-
pertpy-0.11.
|
56
|
-
pertpy-0.11.
|
57
|
-
pertpy-0.11.
|
58
|
-
pertpy-0.11.
|
55
|
+
pertpy-0.11.4.dist-info/METADATA,sha256=Ox3dUh5YA5_a72GAOjCUj-l4Xc2vqz8sEZlhNlfEykY,8701
|
56
|
+
pertpy-0.11.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
57
|
+
pertpy-0.11.4.dist-info/licenses/LICENSE,sha256=XuiT2hxeRInhquEIBKMZ5M21n5syhDQ4XbABoposIAg,1100
|
58
|
+
pertpy-0.11.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|