pertpy 0.11.4__tar.gz → 1.0.0__tar.gz
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-0.11.4 → pertpy-1.0.0}/.github/release-drafter.yml +2 -2
- pertpy-1.0.0/.github/workflows/release.yml +34 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/PKG-INFO +15 -2
- {pertpy-0.11.4 → pertpy-1.0.0}/README.md +14 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/changelog.md +27 -6
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/conf.py +13 -5
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/index.md +3 -3
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/installation.md +18 -43
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/__init__.py +4 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_coda/_base_coda.py +1 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_distances/_distances.py +3 -2
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_milo.py +138 -51
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_mixscape.py +42 -39
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_discriminator_classifiers.py +1 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_perturbation_space.py +1 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_scgen/_scgen.py +2 -1
- {pertpy-0.11.4 → pertpy-1.0.0}/pyproject.toml +15 -2
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_edger.py +10 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_pydeseq2.py +6 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_milo.py +35 -7
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_scgen.py +8 -3
- pertpy-0.11.4/.github/workflows/release.yml +0 -32
- {pertpy-0.11.4 → pertpy-1.0.0}/.editorconfig +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.gitattributes +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/labels.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/pull_request_template.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/workflows/build.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/workflows/labeler.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/workflows/release_drafter.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.github/workflows/test.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.gitignore +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.gitmodules +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.pre-commit-config.yaml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/.readthedocs.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/LICENSE +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/biome.jsonc +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/codecov.yml +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/Makefile +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_ext/edit_on_github.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_ext/typed_returns.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/SCVI_LICENSE +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/css/overwrite.css +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/css/sphinx_gallery.css +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/augur_dp_scatter.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/augur_important_features.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/augur_lollipop.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/augur_scatterplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/de_fold_change.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/de_multicomparison_fc.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/de_paired_expression.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/de_volcano.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/dialogue_pairplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/dialogue_violin.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/enrichment_dotplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/enrichment_gsea.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/milo_da_beeswarm.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/milo_nhood.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/milo_nhood_graph.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/mixscape_barplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/mixscape_heatmap.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/mixscape_lda.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/mixscape_perturbscore.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/mixscape_violin.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/pseudobulk_samples.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/sccoda_boxplots.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/sccoda_effects_barplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/sccoda_rel_abundance_dispersion_plot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/sccoda_stacked_barplot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/scgen_reg_mean.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/tasccoda_draw_effects.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/tasccoda_draw_tree.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/docstring_previews/tasccoda_effects_umap.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/icons/code-24px.svg +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/icons/computer-24px.svg +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/icons/library_books-24px.svg +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/icons/play_circle_outline-24px.svg +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/pertpy_logo.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/pertpy_logo.svg +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/placeholder.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/augur.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/cinemaot.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/dge.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/dialogue.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/distances.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/distances_tests.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/enrichment.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/guide_rna_assignment.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/mcfarland.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/metadata.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/milo.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/mixscape.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/norman.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/ontology.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/perturbation_space.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/placeholder.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/sccoda.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/sccoda_extended.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/scgen_perturbation_prediction.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/tasccoda.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_static/tutorials/zhang.png +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/_templates/autosummary/class.rst +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/about/background.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/about/cite.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/api/datasets_index.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/api/metadata_index.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/api/preprocessing_index.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/api/tools_index.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/api.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/contributing.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/make.bat +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/references.bib +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/references.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/tutorials/metadata.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/tutorials/preprocessing.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/tutorials/tools.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/tutorials.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/usecases.md +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/docs/utils.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/_doc.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/_types.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/data/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/data/_dataloader.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/data/_datasets.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_cell_line.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_compound.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_drug.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_look_up.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_metadata.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/metadata/_moa.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/plot/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/preprocessing/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/preprocessing/_guide_rna.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/preprocessing/_guide_rna_mixture.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/py.typed +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_augur.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_cinemaot.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_coda/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_coda/_sccoda.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_coda/_tasccoda.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_dialogue.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_base.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_checks.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_dge_comparison.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_edger.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_pydeseq2.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_simple_tests.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_differential_gene_expression/_statsmodels.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_distances/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_distances/_distance_tests.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_enrichment.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_clustering.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_comparison.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_metrics.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_perturbation_space/_simple.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_scgen/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_scgen/_base_components.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_scgen/_scgenvae.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/_scgen/_utils.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/decoupler_LICENSE +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/pertpy/tools/transferlearning_MMD_LICENSE +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/conftest.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/metadata/test_cell_line.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/metadata/test_compound.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/metadata/test_drug.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/metadata/test_moa.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/preprocessing/test_grna_assignment.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_coda/test_sccoda.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_coda/test_tasccoda.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/__init__.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/conftest.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_base.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_compare_groups.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_dge.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_input_checks.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_simple_tests.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_differential_gene_expression/test_statsmodels.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_distances/test_distance_tests.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_distances/test_distances.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_perturbation_space/test_comparison.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_perturbation_space/test_discriminator_classifiers.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_perturbation_space/test_simple_cluster_space.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/_perturbation_space/test_simple_perturbation_space.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_augur.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_cinemaot.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_dialogue.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_enrichment.py +0 -0
- {pertpy-0.11.4 → pertpy-1.0.0}/tests/tools/test_mixscape.py +0 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
name: Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
release:
|
5
|
+
types: [published]
|
6
|
+
|
7
|
+
defaults:
|
8
|
+
run:
|
9
|
+
shell: bash -euo pipefail {0}
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
release:
|
13
|
+
name: Upload release to PyPI
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
environment:
|
16
|
+
name: pypi
|
17
|
+
url: https://pypi.org/p/pertpy
|
18
|
+
permissions:
|
19
|
+
id-token: write
|
20
|
+
steps:
|
21
|
+
- uses: actions/checkout@v4
|
22
|
+
with:
|
23
|
+
filter: blob:none
|
24
|
+
fetch-depth: 0
|
25
|
+
|
26
|
+
- name: Install uv
|
27
|
+
uses: astral-sh/setup-uv@v5
|
28
|
+
with:
|
29
|
+
cache-dependency-glob: pyproject.toml
|
30
|
+
|
31
|
+
- name: Build package
|
32
|
+
run: uv build
|
33
|
+
- name: Publish package distributions to PyPI
|
34
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pertpy
|
3
|
-
Version: 0.
|
3
|
+
Version: 1.0.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
|
@@ -131,6 +131,12 @@ You can install _pertpy_ in less than a minute via [pip] from [PyPI]:
|
|
131
131
|
pip install pertpy
|
132
132
|
```
|
133
133
|
|
134
|
+
or [conda-forge]:
|
135
|
+
|
136
|
+
```console
|
137
|
+
conda install -c conda-forge pertpy
|
138
|
+
```
|
139
|
+
|
134
140
|
### Differential gene expression
|
135
141
|
|
136
142
|
If you want to use the differential gene expression interface, please install pertpy by running:
|
@@ -149,7 +155,13 @@ pip install 'pertpy[tcoda]'
|
|
149
155
|
|
150
156
|
### milo
|
151
157
|
|
152
|
-
milo
|
158
|
+
milo requires either the "de" extra for the "pydeseq2" solver:
|
159
|
+
|
160
|
+
```console
|
161
|
+
pip install 'pertpy[de]'
|
162
|
+
```
|
163
|
+
|
164
|
+
or, edger, statmod, and rpy2 for the "edger" solver:
|
153
165
|
|
154
166
|
```R
|
155
167
|
BiocManager::install("edgeR")
|
@@ -179,6 +191,7 @@ pip install rpy2
|
|
179
191
|
[pip]: https://pip.pypa.io/
|
180
192
|
[pypi]: https://pypi.org/
|
181
193
|
[api]: https://pertpy.readthedocs.io/en/latest/api.html
|
194
|
+
[conda-forge]: https://anaconda.org/conda-forge/pertpy
|
182
195
|
[//]: # "numfocus-fiscal-sponsor-attribution"
|
183
196
|
|
184
197
|
pertpy is part of the scverse® project ([website](https://scverse.org), [governance](https://scverse.org/about/roles)) and is fiscally sponsored by [NumFOCUS](https://numfocus.org/).
|
@@ -29,6 +29,12 @@ You can install _pertpy_ in less than a minute via [pip] from [PyPI]:
|
|
29
29
|
pip install pertpy
|
30
30
|
```
|
31
31
|
|
32
|
+
or [conda-forge]:
|
33
|
+
|
34
|
+
```console
|
35
|
+
conda install -c conda-forge pertpy
|
36
|
+
```
|
37
|
+
|
32
38
|
### Differential gene expression
|
33
39
|
|
34
40
|
If you want to use the differential gene expression interface, please install pertpy by running:
|
@@ -47,7 +53,13 @@ pip install 'pertpy[tcoda]'
|
|
47
53
|
|
48
54
|
### milo
|
49
55
|
|
50
|
-
milo
|
56
|
+
milo requires either the "de" extra for the "pydeseq2" solver:
|
57
|
+
|
58
|
+
```console
|
59
|
+
pip install 'pertpy[de]'
|
60
|
+
```
|
61
|
+
|
62
|
+
or, edger, statmod, and rpy2 for the "edger" solver:
|
51
63
|
|
52
64
|
```R
|
53
65
|
BiocManager::install("edgeR")
|
@@ -77,6 +89,7 @@ pip install rpy2
|
|
77
89
|
[pip]: https://pip.pypa.io/
|
78
90
|
[pypi]: https://pypi.org/
|
79
91
|
[api]: https://pertpy.readthedocs.io/en/latest/api.html
|
92
|
+
[conda-forge]: https://anaconda.org/conda-forge/pertpy
|
80
93
|
[//]: # "numfocus-fiscal-sponsor-attribution"
|
81
94
|
|
82
95
|
pertpy is part of the scverse® project ([website](https://scverse.org), [governance](https://scverse.org/about/roles)) and is fiscally sponsored by [NumFOCUS](https://numfocus.org/).
|
@@ -5,19 +5,40 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
-
##
|
8
|
+
## v1.0.0
|
9
|
+
|
10
|
+
### 🚀 Features
|
11
|
+
|
12
|
+
* Simplify guide assignment tutorial ([#796](https://github.com/scverse/pertpy/pull/796)) @Zethson
|
13
|
+
* Add milo pydeseq2 solver ([#795](https://github.com/scverse/pertpy/pull/795)) @Zethson
|
14
|
+
|
15
|
+
## v0.11.5
|
16
|
+
|
17
|
+
### 🚀 Features
|
18
|
+
|
19
|
+
* Move to trusted publishing ([#790](https://github.com/scverse/pertpy/pull/790)) @Zethson
|
20
|
+
* Add conda-forge to installation instructions ([#789](https://github.com/scverse/pertpy/pull/789)) @Zethson
|
21
|
+
* Fix seaborn 0.14 compat & testing dependencies & speed up tests ([#787](https://github.com/scverse/pertpy/pull/787)) @Zethson
|
22
|
+
* Support > 2 colors in `pt.tl.Sccoda.plot_boxplots` ([#784](https://github.com/scverse/pertpy/pull/784)) @mschilli87
|
23
|
+
|
24
|
+
### 🐛 Bug Fixes
|
25
|
+
|
26
|
+
* Fix LIL support for AnnData 0.12 ([#792](https://github.com/scverse/pertpy/pull/792)) @Zethson
|
27
|
+
* Fix compatibility with rpy 3.6.0 in milo ([#791](https://github.com/scverse/pertpy/pull/791)) @seohyonkim
|
28
|
+
|
29
|
+
## v0.11.4
|
9
30
|
|
10
31
|
### 🧰 Maintenance
|
11
32
|
|
12
|
-
* Remove decoupler [#783](
|
33
|
+
* Remove decoupler ([#783](https://github.com/scverse/pertpy/pull/783)) @Zethson
|
13
34
|
|
14
35
|
## v0.11.3
|
15
36
|
|
16
|
-
|
37
|
+
### 🚀 Features
|
17
38
|
|
18
|
-
* add about page [#770](
|
19
|
-
* Simplify Metadata errors [#765](
|
20
|
-
* Standardize scCODA plot palette interface [#773](
|
39
|
+
* add about page ([#770](https://github.com/scverse/pertpy/pull/770)) @Zethson
|
40
|
+
* Simplify Metadata errors ([#765](https://github.com/scverse/pertpy/pull/765)) @Zethson
|
41
|
+
* Standardize scCODA plot palette interface ([#773](https://github.com/scverse/pertpy/pull/773)) @mschilli87
|
21
42
|
|
22
43
|
## v0.11.2
|
23
44
|
|
@@ -62,32 +62,40 @@ pygments_style = "sphinx"
|
|
62
62
|
templates_path = ["_templates"]
|
63
63
|
bibtex_bibfiles = ["references.bib"]
|
64
64
|
nitpicky = True # Warn about broken links
|
65
|
-
|
65
|
+
source_suffix = {
|
66
|
+
".rst": "restructuredtext",
|
67
|
+
".ipynb": "myst-nb",
|
68
|
+
".myst": "myst-nb",
|
69
|
+
}
|
66
70
|
|
67
71
|
suppress_warnings = ["toc.not_included"]
|
68
72
|
|
69
73
|
autosummary_generate = True
|
70
74
|
autosummary_imported_members = True
|
71
|
-
autodoc_member_order = "
|
75
|
+
autodoc_member_order = "groupwise"
|
72
76
|
napoleon_google_docstring = True
|
73
77
|
napoleon_include_init_with_doc = False
|
74
78
|
napoleon_use_rtype = True
|
75
79
|
napoleon_use_param = True
|
80
|
+
myst_heading_anchors = 6
|
76
81
|
napoleon_custom_sections = [("Params", "Parameters")]
|
77
82
|
todo_include_todos = False
|
78
|
-
numpydoc_show_class_members = False
|
79
83
|
annotate_defaults = True
|
80
84
|
myst_enable_extensions = [
|
85
|
+
"amsmath",
|
81
86
|
"colon_fence",
|
87
|
+
"deflist",
|
82
88
|
"dollarmath",
|
83
|
-
"
|
89
|
+
"html_image",
|
90
|
+
"html_admonition",
|
84
91
|
]
|
92
|
+
myst_url_schemes = ("http", "https", "mailto")
|
85
93
|
nb_execution_mode = "off"
|
94
|
+
nb_merge_streams = True
|
86
95
|
warn_as_error = True
|
87
96
|
|
88
97
|
typehints_defaults = "comma"
|
89
98
|
|
90
|
-
# html_show_sourcelink = True
|
91
99
|
html_theme = "scanpydoc"
|
92
100
|
html_title = "pertpy"
|
93
101
|
html_logo = "_static/pertpy_logo.svg"
|
@@ -48,7 +48,7 @@ It provides tools for harmonizing perturbation datasets, automating metadata ann
|
|
48
48
|
```{toctree}
|
49
49
|
:caption: 'General'
|
50
50
|
:hidden: true
|
51
|
-
:maxdepth:
|
51
|
+
:maxdepth: 2
|
52
52
|
|
53
53
|
installation
|
54
54
|
api
|
@@ -60,7 +60,7 @@ references
|
|
60
60
|
```{toctree}
|
61
61
|
:caption: 'Gallery'
|
62
62
|
:hidden: true
|
63
|
-
:maxdepth:
|
63
|
+
:maxdepth: 3
|
64
64
|
|
65
65
|
tutorials
|
66
66
|
usecases
|
@@ -69,7 +69,7 @@ usecases
|
|
69
69
|
```{toctree}
|
70
70
|
:caption: 'About'
|
71
71
|
:hidden: true
|
72
|
-
:maxdepth:
|
72
|
+
:maxdepth: 2
|
73
73
|
|
74
74
|
about/background
|
75
75
|
about/cite
|
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
## Stable release
|
8
8
|
|
9
|
+
### PyPI
|
10
|
+
|
9
11
|
To install pertpy, run this command in your terminal:
|
10
12
|
|
11
13
|
```console
|
@@ -13,9 +15,16 @@ pip install pertpy
|
|
13
15
|
```
|
14
16
|
|
15
17
|
This is the preferred method to install pertpy, as it will always install the most recent stable release.
|
16
|
-
|
17
18
|
If you don't have [pip] installed, this [Python installation guide] can guide you through the process.
|
18
19
|
|
20
|
+
### conda-forge
|
21
|
+
|
22
|
+
Alternatively, you can install pertpy from [conda-forge]:
|
23
|
+
|
24
|
+
```console
|
25
|
+
conda install -c conda-forge pertpy
|
26
|
+
```
|
27
|
+
|
19
28
|
### Additional dependency groups
|
20
29
|
|
21
30
|
#### Differential gene expression interface
|
@@ -38,7 +47,13 @@ pip install rpy2
|
|
38
47
|
|
39
48
|
#### milo
|
40
49
|
|
41
|
-
milo
|
50
|
+
milo requires either the "de" extra for the "pydeseq2" solver:
|
51
|
+
|
52
|
+
```console
|
53
|
+
pip install 'pertpy[de]'
|
54
|
+
```
|
55
|
+
|
56
|
+
or, edger, statmod, and rpy2 for the "edger" solver:
|
42
57
|
|
43
58
|
```R
|
44
59
|
BiocManager::install("edgeR")
|
@@ -57,45 +72,6 @@ TascCODA requires an additional set of dependencies (ete4, pyqt6, and toytree) t
|
|
57
72
|
pip install pertpy[tcoda]
|
58
73
|
```
|
59
74
|
|
60
|
-
## Apple Silicon
|
61
|
-
|
62
|
-
If you want to install and use pertpy on a machine with macOS and M-Chip, the installation is slightly more complex.
|
63
|
-
This is because pertpy depends on [scvi-tools], which can currently only run on Apple Silicon machines when installed
|
64
|
-
using a native python version (due to a dependency on jax, which cannot be run via Rosetta).
|
65
|
-
|
66
|
-
Follow these steps to install pertpy on an Apple Silicon machine (tested on a MacBook Pro with M1 chip and macOS 14.0):
|
67
|
-
|
68
|
-
1. Install [Homebrew]
|
69
|
-
|
70
|
-
2. Install Apple Silicon version of Mambaforge (If you already have Anaconda/Miniconda installed, make sure
|
71
|
-
having both mamba and conda won't cause conflicts)
|
72
|
-
|
73
|
-
```console
|
74
|
-
brew install --cask mambaforge
|
75
|
-
```
|
76
|
-
|
77
|
-
3. Create a new environment using mamba and activate it
|
78
|
-
|
79
|
-
```console
|
80
|
-
mamba create -n pertpy-env
|
81
|
-
mamba activate pertpy-env
|
82
|
-
```
|
83
|
-
|
84
|
-
4. Clone the GitHub Repository
|
85
|
-
|
86
|
-
```console
|
87
|
-
git clone https://github.com/scverse/pertpy.git
|
88
|
-
```
|
89
|
-
|
90
|
-
5. Go inside the pertpy folder and install pertpy
|
91
|
-
|
92
|
-
```console
|
93
|
-
cd pertpy
|
94
|
-
pip install .
|
95
|
-
```
|
96
|
-
|
97
|
-
Now you're ready to use pertpy as usual within the environment (`import pertpy`).
|
98
|
-
|
99
75
|
## From sources
|
100
76
|
|
101
77
|
The sources for pertpy can be downloaded from the [Github repo].
|
@@ -114,8 +90,7 @@ $ curl -OJL https://github.com/scverse/pertpy/tarball/master
|
|
114
90
|
|
115
91
|
[github repo]: https://github.com/scverse/pertpy
|
116
92
|
[pip]: https://pip.pypa.io
|
117
|
-
[
|
93
|
+
[conda-forge]: https://anaconda.org/conda-forge/pertpy
|
118
94
|
[python installation guide]: http://docs.python-guide.org/en/latest/starting/installation/
|
119
95
|
[tarball]: https://github.com/scverse/pertpy/tarball/master
|
120
|
-
[scvi-tools]: https://docs.scvi-tools.org/en/latest/installation.html
|
121
96
|
[Homebrew]: https://brew.sh/
|
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
__author__ = "Lukas Heumos"
|
4
4
|
__email__ = "lukas.heumos@posteo.net"
|
5
|
-
__version__ = "0.
|
5
|
+
__version__ = "1.0.0"
|
6
6
|
|
7
7
|
import warnings
|
8
8
|
|
9
|
+
from anndata._core.aligned_df import ImplicitModificationWarning
|
9
10
|
from matplotlib import MatplotlibDeprecationWarning
|
10
11
|
from numba import NumbaDeprecationWarning
|
11
12
|
|
@@ -13,6 +14,8 @@ warnings.filterwarnings("ignore", category=NumbaDeprecationWarning)
|
|
13
14
|
warnings.filterwarnings("ignore", category=MatplotlibDeprecationWarning)
|
14
15
|
warnings.filterwarnings("ignore", category=SyntaxWarning)
|
15
16
|
warnings.filterwarnings("ignore", category=UserWarning, module="scvi._settings")
|
17
|
+
warnings.filterwarnings("ignore", message="Environment variable.*redefined by R")
|
18
|
+
warnings.filterwarnings("ignore", message="Transforming to str index.", category=ImplicitModificationWarning)
|
16
19
|
|
17
20
|
import mudata
|
18
21
|
|
@@ -1538,7 +1538,7 @@ class CompositionalModel2(ABC):
|
|
1538
1538
|
if isinstance(data, MuData):
|
1539
1539
|
data = data[modality_key]
|
1540
1540
|
if isinstance(palette, Colormap):
|
1541
|
-
palette = palette(range(
|
1541
|
+
palette = list(palette(range(len(data.obs[feature_name].unique()))))
|
1542
1542
|
|
1543
1543
|
# y scale transformations
|
1544
1544
|
if y_scale == "relative":
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from typing import TYPE_CHECKING, Literal, NamedTuple
|
5
5
|
|
6
|
+
import jax
|
6
7
|
import numpy as np
|
7
8
|
import pandas as pd
|
8
9
|
from numba import jit
|
@@ -685,6 +686,7 @@ class WassersteinDistance(AbstractDistance):
|
|
685
686
|
def __init__(self) -> None:
|
686
687
|
super().__init__()
|
687
688
|
self.accepts_precomputed = False
|
689
|
+
self.solver = jax.jit(Sinkhorn())
|
688
690
|
|
689
691
|
def __call__(self, X: np.ndarray, Y: np.ndarray, **kwargs) -> float:
|
690
692
|
X = np.asarray(X, dtype=np.float64)
|
@@ -699,8 +701,7 @@ class WassersteinDistance(AbstractDistance):
|
|
699
701
|
|
700
702
|
def solve_ot_problem(self, geom: Geometry, **kwargs):
|
701
703
|
ot_prob = LinearProblem(geom)
|
702
|
-
|
703
|
-
ot = solver(ot_prob, **kwargs)
|
704
|
+
ot = self.solver(ot_prob, **kwargs)
|
704
705
|
cost = float(ot.reg_ot_cost)
|
705
706
|
|
706
707
|
# Check for NaN or invalid cost
|