pertpy 0.10.0__tar.gz → 0.11.1__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.
Files changed (205) hide show
  1. {pertpy-0.10.0 → pertpy-0.11.1}/.editorconfig +1 -1
  2. pertpy-0.11.1/.github/ISSUE_TEMPLATE/bug_report.yml +69 -0
  3. {pertpy-0.10.0 → pertpy-0.11.1}/.github/pull_request_template.md +3 -3
  4. {pertpy-0.10.0 → pertpy-0.11.1}/.github/release-drafter.yml +2 -2
  5. pertpy-0.11.1/.github/workflows/build.yml +36 -0
  6. {pertpy-0.10.0 → pertpy-0.11.1}/.github/workflows/release.yml +8 -6
  7. {pertpy-0.10.0 → pertpy-0.11.1}/.github/workflows/test.yml +42 -17
  8. {pertpy-0.10.0 → pertpy-0.11.1}/.gitignore +5 -2
  9. {pertpy-0.10.0 → pertpy-0.11.1}/.pre-commit-config.yaml +11 -5
  10. pertpy-0.11.1/.readthedocs.yml +18 -0
  11. {pertpy-0.10.0 → pertpy-0.11.1}/LICENSE +1 -0
  12. {pertpy-0.10.0 → pertpy-0.11.1}/PKG-INFO +42 -24
  13. {pertpy-0.10.0 → pertpy-0.11.1}/README.md +21 -6
  14. pertpy-0.11.1/biome.jsonc +18 -0
  15. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_ext/edit_on_github.py +2 -2
  16. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_ext/typed_returns.py +2 -2
  17. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/css/overwrite.css +6 -7
  18. pertpy-0.11.1/docs/_static/pertpy_logo.png +0 -0
  19. pertpy-0.11.1/docs/_static/pertpy_logo.svg +5 -0
  20. pertpy-0.10.0/docs/_templates/class_no_inherited.rst → pertpy-0.11.1/docs/_templates/autosummary/class.rst +6 -14
  21. pertpy-0.11.1/docs/api/datasets_index.md +70 -0
  22. pertpy-0.11.1/docs/api/metadata_index.md +55 -0
  23. pertpy-0.11.1/docs/api/preprocessing_index.md +37 -0
  24. pertpy-0.10.0/docs/usage/usage.md → pertpy-0.11.1/docs/api/tools_index.md +43 -219
  25. pertpy-0.11.1/docs/api.md +22 -0
  26. pertpy-0.11.1/docs/changelog.md +303 -0
  27. {pertpy-0.10.0 → pertpy-0.11.1}/docs/conf.py +52 -96
  28. {pertpy-0.10.0 → pertpy-0.11.1}/docs/contributing.md +9 -9
  29. pertpy-0.11.1/docs/index.md +88 -0
  30. {pertpy-0.10.0 → pertpy-0.11.1}/docs/installation.md +5 -5
  31. pertpy-0.11.1/docs/references.bib +153 -0
  32. pertpy-0.11.1/docs/tutorials/metadata.md +8 -0
  33. pertpy-0.11.1/docs/tutorials/preprocessing.md +7 -0
  34. pertpy-0.11.1/docs/tutorials/tools.md +64 -0
  35. pertpy-0.11.1/docs/tutorials.md +19 -0
  36. pertpy-0.11.1/docs/usecases.md +13 -0
  37. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/__init__.py +5 -1
  38. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/_doc.py +1 -3
  39. pertpy-0.11.1/pertpy/_types.py +6 -0
  40. pertpy-0.11.1/pertpy/data/_dataloader.py +114 -0
  41. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/data/_datasets.py +9 -9
  42. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/__init__.py +2 -1
  43. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_cell_line.py +133 -25
  44. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_look_up.py +13 -19
  45. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_moa.py +1 -1
  46. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/preprocessing/_guide_rna.py +138 -44
  47. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/preprocessing/_guide_rna_mixture.py +17 -19
  48. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/__init__.py +4 -3
  49. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_augur.py +106 -98
  50. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_cinemaot.py +74 -114
  51. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_coda/_base_coda.py +134 -148
  52. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_coda/_sccoda.py +69 -70
  53. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_coda/_tasccoda.py +74 -80
  54. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_dialogue.py +48 -41
  55. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_base.py +21 -31
  56. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_checks.py +4 -6
  57. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_dge_comparison.py +5 -6
  58. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_edger.py +6 -10
  59. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_pydeseq2.py +1 -1
  60. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_simple_tests.py +3 -3
  61. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/_statsmodels.py +8 -5
  62. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_distances/_distance_tests.py +1 -2
  63. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_distances/_distances.py +31 -46
  64. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_enrichment.py +7 -22
  65. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_milo.py +19 -15
  66. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_mixscape.py +73 -75
  67. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_clustering.py +4 -4
  68. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_comparison.py +4 -4
  69. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_discriminator_classifiers.py +83 -32
  70. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_perturbation_space.py +10 -10
  71. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_simple.py +12 -14
  72. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_scgen/_scgen.py +16 -17
  73. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_scgen/_scgenvae.py +2 -2
  74. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_scgen/_utils.py +3 -1
  75. {pertpy-0.10.0 → pertpy-0.11.1}/pyproject.toml +55 -35
  76. {pertpy-0.10.0 → pertpy-0.11.1}/tests/metadata/test_cell_line.py +20 -6
  77. {pertpy-0.10.0 → pertpy-0.11.1}/tests/metadata/test_compound.py +17 -4
  78. pertpy-0.11.1/tests/preprocessing/test_grna_assignment.py +96 -0
  79. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_coda/test_sccoda.py +1 -7
  80. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_coda/test_tasccoda.py +2 -2
  81. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_base.py +1 -1
  82. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_compare_groups.py +13 -13
  83. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_simple_tests.py +1 -1
  84. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_distances/test_distances.py +1 -1
  85. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_augur.py +7 -20
  86. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_milo.py +33 -35
  87. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_mixscape.py +24 -27
  88. pertpy-0.10.0/.github/ISSUE_TEMPLATE/bug_report.yml +0 -89
  89. pertpy-0.10.0/.github/workflows/build.yml +0 -33
  90. pertpy-0.10.0/.readthedocs.yml +0 -18
  91. pertpy-0.10.0/CODE_OF_CONDUCT.md +0 -74
  92. pertpy-0.10.0/docs/_templates/autosummary/class.rst +0 -79
  93. pertpy-0.10.0/docs/code_of_conduct.md +0 -3
  94. pertpy-0.10.0/docs/index.md +0 -70
  95. pertpy-0.10.0/docs/references.bib +0 -10
  96. pertpy-0.10.0/docs/tutorials/index.md +0 -78
  97. pertpy-0.10.0/pertpy/data/_dataloader.py +0 -70
  98. pertpy-0.10.0/pertpy/tools/_kernel_pca.py +0 -50
  99. pertpy-0.10.0/tests/preprocessing/test_grna_assignment.py +0 -62
  100. pertpy-0.10.0/tests/tools/haber_data.csv +0 -11
  101. pertpy-0.10.0/tests/tools/r_result.csv +0 -20730
  102. {pertpy-0.10.0 → pertpy-0.11.1}/.gitattributes +0 -0
  103. {pertpy-0.10.0 → pertpy-0.11.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  104. {pertpy-0.10.0 → pertpy-0.11.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  105. {pertpy-0.10.0 → pertpy-0.11.1}/.github/labels.yml +0 -0
  106. {pertpy-0.10.0 → pertpy-0.11.1}/.github/workflows/labeler.yml +0 -0
  107. {pertpy-0.10.0 → pertpy-0.11.1}/.github/workflows/release_drafter.yml +0 -0
  108. {pertpy-0.10.0 → pertpy-0.11.1}/.gitmodules +0 -0
  109. {pertpy-0.10.0 → pertpy-0.11.1}/codecov.yml +0 -0
  110. {pertpy-0.10.0 → pertpy-0.11.1}/docs/Makefile +0 -0
  111. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/SCVI_LICENSE +0 -0
  112. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/css/sphinx_gallery.css +0 -0
  113. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/augur_dp_scatter.png +0 -0
  114. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/augur_important_features.png +0 -0
  115. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/augur_lollipop.png +0 -0
  116. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/augur_scatterplot.png +0 -0
  117. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/de_fold_change.png +0 -0
  118. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/de_multicomparison_fc.png +0 -0
  119. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/de_paired_expression.png +0 -0
  120. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/de_volcano.png +0 -0
  121. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/dialogue_pairplot.png +0 -0
  122. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/dialogue_violin.png +0 -0
  123. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/enrichment_dotplot.png +0 -0
  124. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/enrichment_gsea.png +0 -0
  125. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/milo_da_beeswarm.png +0 -0
  126. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/milo_nhood.png +0 -0
  127. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/milo_nhood_graph.png +0 -0
  128. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/mixscape_barplot.png +0 -0
  129. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/mixscape_heatmap.png +0 -0
  130. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/mixscape_lda.png +0 -0
  131. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/mixscape_perturbscore.png +0 -0
  132. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/mixscape_violin.png +0 -0
  133. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/pseudobulk_samples.png +0 -0
  134. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/sccoda_boxplots.png +0 -0
  135. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/sccoda_effects_barplot.png +0 -0
  136. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/sccoda_rel_abundance_dispersion_plot.png +0 -0
  137. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/sccoda_stacked_barplot.png +0 -0
  138. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/scgen_reg_mean.png +0 -0
  139. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/tasccoda_draw_effects.png +0 -0
  140. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/tasccoda_draw_tree.png +0 -0
  141. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/docstring_previews/tasccoda_effects_umap.png +0 -0
  142. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/icons/code-24px.svg +0 -0
  143. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/icons/computer-24px.svg +0 -0
  144. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/icons/library_books-24px.svg +0 -0
  145. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/icons/play_circle_outline-24px.svg +0 -0
  146. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/placeholder.png +0 -0
  147. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/augur.png +0 -0
  148. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/cinemaot.png +0 -0
  149. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/dge.png +0 -0
  150. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/dialogue.png +0 -0
  151. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/distances.png +0 -0
  152. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/distances_tests.png +0 -0
  153. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/enrichment.png +0 -0
  154. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/guide_rna_assignment.png +0 -0
  155. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/mcfarland.png +0 -0
  156. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/metadata.png +0 -0
  157. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/milo.png +0 -0
  158. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/mixscape.png +0 -0
  159. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/norman.png +0 -0
  160. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/ontology.png +0 -0
  161. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/perturbation_space.png +0 -0
  162. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/placeholder.png +0 -0
  163. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/sccoda.png +0 -0
  164. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/sccoda_extended.png +0 -0
  165. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/scgen_perturbation_prediction.png +0 -0
  166. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/tasccoda.png +0 -0
  167. {pertpy-0.10.0 → pertpy-0.11.1}/docs/_static/tutorials/zhang.png +0 -0
  168. {pertpy-0.10.0 → pertpy-0.11.1}/docs/make.bat +0 -0
  169. {pertpy-0.10.0 → pertpy-0.11.1}/docs/references.md +0 -0
  170. {pertpy-0.10.0 → pertpy-0.11.1}/docs/utils.py +0 -0
  171. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/data/__init__.py +0 -0
  172. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_compound.py +0 -0
  173. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_drug.py +0 -0
  174. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/metadata/_metadata.py +0 -0
  175. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/plot/__init__.py +0 -0
  176. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/preprocessing/__init__.py +0 -0
  177. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/py.typed +0 -0
  178. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_coda/__init__.py +0 -0
  179. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_differential_gene_expression/__init__.py +0 -0
  180. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_distances/__init__.py +0 -0
  181. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/__init__.py +0 -0
  182. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_perturbation_space/_metrics.py +0 -0
  183. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_scgen/__init__.py +0 -0
  184. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/_scgen/_base_components.py +0 -0
  185. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/decoupler_LICENSE +0 -0
  186. {pertpy-0.10.0 → pertpy-0.11.1}/pertpy/tools/transferlearning_MMD_LICENSE +0 -0
  187. {pertpy-0.10.0 → pertpy-0.11.1}/tests/conftest.py +0 -0
  188. {pertpy-0.10.0 → pertpy-0.11.1}/tests/metadata/test_drug.py +0 -0
  189. {pertpy-0.10.0 → pertpy-0.11.1}/tests/metadata/test_moa.py +0 -0
  190. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/__init__.py +0 -0
  191. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/conftest.py +0 -0
  192. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_dge.py +0 -0
  193. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_edger.py +0 -0
  194. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_input_checks.py +0 -0
  195. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_pydeseq2.py +0 -0
  196. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_differential_gene_expression/test_statsmodels.py +0 -0
  197. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_distances/test_distance_tests.py +0 -0
  198. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_perturbation_space/test_comparison.py +0 -0
  199. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_perturbation_space/test_discriminator_classifiers.py +0 -0
  200. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_perturbation_space/test_simple_cluster_space.py +0 -0
  201. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/_perturbation_space/test_simple_perturbation_space.py +0 -0
  202. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_cinemaot.py +0 -0
  203. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_dialogue.py +0 -0
  204. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_enrichment.py +0 -0
  205. {pertpy-0.10.0 → pertpy-0.11.1}/tests/tools/test_scgen.py +0 -0
@@ -15,7 +15,7 @@ indent_style = tab
15
15
  end_of_line = crlf
16
16
 
17
17
  [LICENSE]
18
- insert_final_newline = false
18
+ insert_final_newline = true
19
19
 
20
20
  [Makefile]
21
21
  indent_style = tab
@@ -0,0 +1,69 @@
1
+ name: Bug report
2
+ description: pertpy doesn’t do what it should? Please help us fix it!
3
+ #title: ...
4
+ labels:
5
+ - Bug
6
+ - Triage
7
+ #assignees: []
8
+ body:
9
+ - type: checkboxes
10
+ id: terms
11
+ attributes:
12
+ label: Please make sure these conditions are met
13
+ # description: ...
14
+ options:
15
+ - label: I have checked that this issue has not already been reported.
16
+ required: true
17
+ - label: I have confirmed this bug exists on the latest version of pertpy.
18
+ required: true
19
+ - label: (optional) I have confirmed this bug exists on the main branch.
20
+ required: false
21
+ - type: markdown
22
+ attributes:
23
+ value: |
24
+ **Note**: Please read [this guide][] detailing how to provide the necessary information for us to reproduce your bug.
25
+
26
+ [this guide]: https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports
27
+ - type: textarea
28
+ id: Report
29
+ attributes:
30
+ label: Report
31
+ description: |
32
+ Describe the bug you encountered, and what you were trying to do. Please use [github markdown][] features for readability.
33
+
34
+ [github markdown]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
35
+ value: |
36
+ Code:
37
+
38
+ ```python
39
+
40
+ ```
41
+
42
+ Traceback:
43
+
44
+ ```pytb
45
+
46
+ ```
47
+ validations:
48
+ required: true
49
+ - type: textarea
50
+ id: versions
51
+ attributes:
52
+ label: Versions
53
+ description: |
54
+ Which version of pertpy and other related software you used.
55
+
56
+ Please install `session-info2`, run the following command in a notebook,
57
+ click the “Copy as Markdown” button,
58
+ then paste the results into the text box below.
59
+
60
+ ```python
61
+ In[1]: import pertpy, session_info2; session_info2.session_info(dependencies=True)
62
+ ```
63
+
64
+ Alternatively, run this in a console:
65
+
66
+ ```python
67
+ >>> import session_info2; print(session_info2.session_info(dependencies=True)._repr_mimebundle_()["text/markdown"])
68
+ ```
69
+ render: python
@@ -4,9 +4,9 @@
4
4
 
5
5
  <!-- Please fill in the appropriate checklist below (delete whatever is not relevant). These are the most common things requested on pull requests (PRs). -->
6
6
 
7
- - [ ] Referenced issue is linked
8
- - [ ] If you've fixed a bug or added code that should be tested, add tests!
9
- - [ ] Documentation in `docs` is updated
7
+ - [ ] Referenced issue is linked
8
+ - [ ] If you've fixed a bug or added code that should be tested, add tests!
9
+ - [ ] Documentation in `docs` is updated
10
10
 
11
11
  **Description of changes**
12
12
 
@@ -1,5 +1,5 @@
1
- name-template: "0.10.0 🌈"
2
- tag-template: 0.10.0
1
+ name-template: "0.11.1 🌈"
2
+ tag-template: 0.11.1
3
3
  exclude-labels:
4
4
  - "skip-changelog"
5
5
 
@@ -0,0 +1,36 @@
1
+ name: Check Build
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ defaults:
14
+ run:
15
+ # to fail on error in multiline statements (-e), in pipes (-o pipefail), and on unset variables (-u).
16
+ shell: bash -euo pipefail {0}
17
+
18
+ jobs:
19
+ package:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ filter: blob:none
25
+ fetch-depth: 0
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v6
29
+ with:
30
+ cache-dependency-glob: pyproject.toml
31
+
32
+ - name: Build package
33
+ run: uv build
34
+
35
+ - name: Check package
36
+ run: uvx twine check --strict dist/*.whl
@@ -13,16 +13,18 @@ jobs:
13
13
  - name: Checkout code
14
14
  uses: actions/checkout@v4
15
15
 
16
- - name: Set up Python 3.12
16
+ - name: Set up Python
17
17
  uses: actions/setup-python@v5
18
18
  with:
19
- python-version: "3.12"
19
+ python-version: "3.x"
20
20
 
21
- - name: Install hatch
22
- run: pip install hatch
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v5
23
+ with:
24
+ cache-dependency-glob: pyproject.toml
23
25
 
24
- - name: Build project for distribution
25
- run: hatch build
26
+ - name: Build package
27
+ run: uv build
26
28
 
27
29
  - name: Publish a Python distribution to PyPI
28
30
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -15,22 +15,23 @@ jobs:
15
15
  runs-on: ${{ matrix.os }}
16
16
  defaults:
17
17
  run:
18
- shell: bash -e {0} # -e to fail on error
18
+ # to fail on error in multiline statements (-e), in pipes (-o pipefail), and on unset variables (-u).
19
+ shell: bash -euo pipefail {0}
19
20
 
20
21
  strategy:
21
22
  fail-fast: false
22
23
  matrix:
23
24
  include:
24
- - os: ubuntu-22.04 # ubuntu-latest is currently broken for joblib
25
- python: "3.12"
25
+ - os: ubuntu-latest
26
+ python: "3.13"
26
27
  run_mode: "slow"
27
- - os: ubuntu-22.04
28
- python: "3.12"
28
+ - os: ubuntu-latest
29
+ python: "3.13"
29
30
  run_mode: "fast"
30
- # - os: ubuntu-latest
31
- # python: "3.12"
32
- # run_mode: slow
33
- # pip-flags: "--pre"
31
+ - os: ubuntu-latest
32
+ python: "3.13"
33
+ run_mode: slow
34
+ pip-flags: "--pre"
34
35
 
35
36
  env:
36
37
  OS: ${{ matrix.os }}
@@ -38,26 +39,50 @@ jobs:
38
39
 
39
40
  steps:
40
41
  - uses: actions/checkout@v4
42
+ with:
43
+ filter: blob:none
44
+ fetch-depth: 0
45
+
46
+ - name: Cache .pertpy_cache
47
+ uses: actions/cache@v4
48
+ with:
49
+ path: cache
50
+ key: ${{ runner.os }}-pertpy-cache-${{ hashFiles('pertpy/metadata/**') }}
51
+ restore-keys: |
52
+ ${{ runner.os }}-pertpy-cache
53
+
41
54
  - name: Set up Python ${{ matrix.python }}
42
55
  uses: actions/setup-python@v5
43
56
  with:
44
57
  python-version: ${{ matrix.python }}
45
-
46
- - uses: actions/checkout@v4
47
58
  - name: Install R
48
59
  uses: r-lib/actions/setup-r@v2
49
60
  with:
50
- r-version: "4"
61
+ r-version: "4.4.3"
51
62
 
52
- - name: Install edgeR
53
- run: Rscript --vanilla -e "install.packages(c('BiocManager', 'statmod'), repos='https://cran.r-project.org'); library('BiocManager'); BiocManager::install('edgeR')"
63
+ - name: Cache R packages
64
+ id: r-cache
65
+ uses: actions/cache@v3
66
+ with:
67
+ path: ${{ env.R_LIBS_USER }}
68
+ key: ${{ runner.os }}-r-${{ hashFiles('**/pertpy/tools/_milo.py') }}
69
+ restore-keys: ${{ runner.os }}-r-
54
70
 
55
- - name: Install test dependencies
56
- run: python -m pip install --upgrade uv wheel
71
+ - name: Install R dependencies
72
+ if: steps.r-cache.outputs.cache-hit != 'true'
73
+ run: |
74
+ mkdir -p ${{ env.R_LIBS_USER }}
75
+ Rscript --vanilla -e "install.packages(c('BiocManager', 'statmod'), repos='https://cran.r-project.org'); BiocManager::install('edgeR', lib='${{ env.R_LIBS_USER }}')"
76
+
77
+ - name: Install uv
78
+ uses: astral-sh/setup-uv@v6
79
+ with:
80
+ enable-cache: true
81
+ cache-dependency-glob: pyproject.toml
57
82
  - name: Install dependencies
58
83
  run: |
59
84
  uv pip install --system rpy2
60
- uv pip install --system ${{ matrix.pip-flags }} ".[dev,test,coda,de]"
85
+ uv pip install --system ${{ matrix.pip-flags }} ".[dev,test,tcoda,de]"
61
86
 
62
87
  - name: Test
63
88
  env:
@@ -72,8 +72,11 @@ instance/
72
72
 
73
73
  # Sphinx documentation
74
74
  docs/_build/
75
- docs/usage/*
76
- !docs/usage/usage.md
75
+ docs/api/data
76
+ docs/api/metadata
77
+ docs/api/tools
78
+ docs/api/preprocessing
79
+ !docs/api/api.md
77
80
 
78
81
  # PyBuilder
79
82
  target/
@@ -6,18 +6,18 @@ default_stages:
6
6
  - pre-push
7
7
  minimum_pre_commit_version: 2.16.0
8
8
  repos:
9
- - repo: https://github.com/pre-commit/mirrors-prettier
10
- rev: v4.0.0-alpha.8
9
+ - repo: https://github.com/biomejs/pre-commit
10
+ rev: v1.9.4
11
11
  hooks:
12
- - id: prettier
12
+ - id: biome-format
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: v0.8.6
14
+ rev: v0.11.5
15
15
  hooks:
16
16
  - id: ruff
17
17
  args: [--fix, --exit-non-zero-on-fix, --unsafe-fixes]
18
18
  - id: ruff-format
19
19
  - repo: https://github.com/pre-commit/pre-commit-hooks
20
- rev: v4.6.0
20
+ rev: v5.0.0
21
21
  hooks:
22
22
  - id: detect-private-key
23
23
  - id: check-ast
@@ -26,6 +26,12 @@ repos:
26
26
  args: [--fix=lf]
27
27
  - id: trailing-whitespace
28
28
  - id: check-case-conflict
29
+ - id: check-added-large-files
30
+ - id: check-toml
31
+ - id: check-yaml
32
+ - id: check-merge-conflict
33
+ - id: no-commit-to-branch
34
+ args: ["--branch=main"]
29
35
  - repo: https://github.com/pre-commit/mirrors-mypy
30
36
  rev: v1.14.1
31
37
  hooks:
@@ -0,0 +1,18 @@
1
+ version: 2
2
+ build:
3
+ os: ubuntu-24.04
4
+ tools:
5
+ python: "3.13"
6
+ jobs:
7
+ create_environment:
8
+ - asdf plugin add uv
9
+ - asdf install uv latest
10
+ - asdf global uv latest
11
+ - uv venv
12
+ - uv pip install .[doc,tcoda,de]
13
+ build:
14
+ html:
15
+ - uv run sphinx-build -T -W -b html docs $READTHEDOCS_OUTPUT/html
16
+
17
+ submodules:
18
+ include: all
@@ -1,6 +1,7 @@
1
1
  MIT License
2
2
 
3
3
  Copyright (c) 2021, Lukas Heumos
4
+ Copyright (c) 2025, scverse®
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
7
  of this software and associated documentation files (the "Software"), to deal
@@ -1,15 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pertpy
3
- Version: 0.10.0
3
+ Version: 0.11.1
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
7
7
  Project-URL: Home-page, https://github.com/scverse/pertpy
8
- Author: Lukas Heumos, Yuge Ji, Lilly May, Alejandro Tejada, Johannes Köster, Emma Dann, Xinyue Zhang, Xichen Wu, Tessa Green, Stefan Peidli, Antonia Schumacher, Gregor Sturm
8
+ Author: Lukas Heumos, Lilly May, Stefan Peidli, Johannes Ostner, Gregor Sturm, Emma Dann, Yuge Ji, Xinyue Zhang, Xichen Wu, Tessa Green, Antonia Schumacher
9
9
  Maintainer-email: Lukas Heumos <lukas.heumos@posteo.net>
10
10
  License: MIT License
11
11
 
12
12
  Copyright (c) 2021, Lukas Heumos
13
+ Copyright (c) 2025, scverse®
13
14
 
14
15
  Permission is hereby granted, free of charge, to any person obtaining a copy
15
16
  of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +30,7 @@ License: MIT License
29
30
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
31
  SOFTWARE.
31
32
  License-File: LICENSE
32
- Classifier: Development Status :: 4 - Beta
33
+ Classifier: Development Status :: 5 - Production/Stable
33
34
  Classifier: Environment :: Console
34
35
  Classifier: Framework :: Jupyter
35
36
  Classifier: Intended Audience :: Developers
@@ -39,66 +40,67 @@ Classifier: Natural Language :: English
39
40
  Classifier: Operating System :: MacOS :: MacOS X
40
41
  Classifier: Operating System :: POSIX :: Linux
41
42
  Classifier: Programming Language :: Python :: 3
42
- Classifier: Programming Language :: Python :: 3.10
43
43
  Classifier: Programming Language :: Python :: 3.11
44
44
  Classifier: Programming Language :: Python :: 3.12
45
+ Classifier: Programming Language :: Python :: 3.13
45
46
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
46
47
  Classifier: Topic :: Scientific/Engineering :: Visualization
47
- Requires-Python: <3.13,>=3.10
48
+ Requires-Python: <3.14,>=3.11
48
49
  Requires-Dist: adjusttext
50
+ Requires-Dist: arviz
49
51
  Requires-Dist: blitzgsea
50
52
  Requires-Dist: decoupler
53
+ Requires-Dist: fast-array-utils
51
54
  Requires-Dist: lamin-utils
52
- Requires-Dist: muon
55
+ Requires-Dist: mudata
53
56
  Requires-Dist: openpyxl
54
57
  Requires-Dist: ott-jax
55
58
  Requires-Dist: pubchempy
56
59
  Requires-Dist: pyarrow
57
60
  Requires-Dist: requests
58
61
  Requires-Dist: rich
59
- Requires-Dist: scanpy[leiden]
62
+ Requires-Dist: scanpy
60
63
  Requires-Dist: scikit-learn>=1.4
61
64
  Requires-Dist: scikit-misc
62
65
  Requires-Dist: scvi-tools
63
66
  Requires-Dist: sparsecca
64
- Provides-Extra: coda
65
- Requires-Dist: arviz; extra == 'coda'
66
- Requires-Dist: ete3; extra == 'coda'
67
- Requires-Dist: pyqt5; extra == 'coda'
68
- Requires-Dist: toytree; extra == 'coda'
69
67
  Provides-Extra: de
70
68
  Requires-Dist: formulaic; extra == 'de'
71
69
  Requires-Dist: formulaic-contrasts>=0.2.0; extra == 'de'
72
- Requires-Dist: pydeseq2>=v0.5.0pre1; extra == 'de'
70
+ Requires-Dist: pydeseq2>=v0.5.0; extra == 'de'
73
71
  Provides-Extra: dev
74
72
  Requires-Dist: pre-commit; extra == 'dev'
75
73
  Provides-Extra: doc
76
- Requires-Dist: docutils!=0.18.*,!=0.19.*,>=0.8; extra == 'doc'
77
- Requires-Dist: furo; extra == 'doc'
74
+ Requires-Dist: docutils>=0.8; extra == 'doc'
78
75
  Requires-Dist: ipykernel; extra == 'doc'
79
76
  Requires-Dist: ipython; extra == 'doc'
80
77
  Requires-Dist: myst-nb; extra == 'doc'
81
- Requires-Dist: myst-parser; extra == 'doc'
82
78
  Requires-Dist: nbsphinx; extra == 'doc'
83
79
  Requires-Dist: nbsphinx-link; extra == 'doc'
84
- Requires-Dist: pyenchant; extra == 'doc'
85
80
  Requires-Dist: pygments; extra == 'doc'
81
+ Requires-Dist: scanpydoc; extra == 'doc'
86
82
  Requires-Dist: sphinx-autodoc-typehints; extra == 'doc'
87
83
  Requires-Dist: sphinx-automodapi; extra == 'doc'
84
+ Requires-Dist: sphinx-book-theme; extra == 'doc'
88
85
  Requires-Dist: sphinx-copybutton; extra == 'doc'
89
86
  Requires-Dist: sphinx-design; extra == 'doc'
90
87
  Requires-Dist: sphinx-gallery; extra == 'doc'
88
+ Requires-Dist: sphinx-issues; extra == 'doc'
91
89
  Requires-Dist: sphinx-last-updated-by-git; extra == 'doc'
92
90
  Requires-Dist: sphinx-remove-toctrees; extra == 'doc'
93
- Requires-Dist: sphinx>=4; extra == 'doc'
91
+ Requires-Dist: sphinx>=8.1; extra == 'doc'
94
92
  Requires-Dist: sphinxcontrib-bibtex>=1.0.0; extra == 'doc'
95
93
  Requires-Dist: sphinxext-opengraph; extra == 'doc'
94
+ Provides-Extra: tcoda
95
+ Requires-Dist: ete4; extra == 'tcoda'
96
+ Requires-Dist: pyqt6; extra == 'tcoda'
97
+ Requires-Dist: toytree; extra == 'tcoda'
96
98
  Provides-Extra: test
97
99
  Requires-Dist: coverage; extra == 'test'
100
+ Requires-Dist: leidenalg; extra == 'test'
98
101
  Requires-Dist: pytest; extra == 'test'
99
102
  Description-Content-Type: text/markdown
100
103
 
101
- [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
102
104
  [![Build](https://github.com/scverse/pertpy/actions/workflows/build.yml/badge.svg)](https://github.com/scverse/pertpy/actions/workflows/build.yml)
103
105
  [![codecov](https://codecov.io/gh/scverse/pertpy/graph/badge.svg?token=1dTpIPBShv)](https://codecov.io/gh/scverse/pertpy)
104
106
  [![License](https://img.shields.io/github/license/scverse/pertpy)](https://opensource.org/licenses/Apache2.0)
@@ -108,13 +110,16 @@ Description-Content-Type: text/markdown
108
110
  [![Test](https://github.com/scverse/pertpy/actions/workflows/test.yml/badge.svg)](https://github.com/scverse/pertpy/actions/workflows/test.yml)
109
111
  [![PyPI](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
110
112
 
111
- # pertpy
113
+ # pertpy - Perturbation Analysis in Python
114
+
115
+ Pertpy is a scverse ecosystem framework for analyzing large-scale single-cell perturbation experiments.
116
+ It provides tools for harmonizing perturbation datasets, automating metadata annotation, calculating perturbation distances, and efficiently analyzing how cells respond to various stimuli like genetic modifications, drug treatments, and environmental changes.
112
117
 
113
118
  ![fig1](https://github.com/user-attachments/assets/d2e32d69-b767-4be3-a938-77a9dce45d3f)
114
119
 
115
120
  ## Documentation
116
121
 
117
- Please read the [documentation](https://pertpy.readthedocs.io/en/latest).
122
+ Please read the [documentation](https://pertpy.readthedocs.io/en/latest) for installation, tutorials, use cases, and more.
118
123
 
119
124
  ## Installation
120
125
 
@@ -127,10 +132,10 @@ You can install _pertpy_ in less than a minute via [pip] from [PyPI]:
127
132
  pip install pertpy
128
133
  ```
129
134
 
130
- if you want to use scCODA or tascCODA, please install pertpy as follows:
135
+ if you want to use tascCODA, please install pertpy as follows:
131
136
 
132
137
  ```console
133
- pip install 'pertpy[coda]'
138
+ pip install 'pertpy[tcoda]'
134
139
  ```
135
140
 
136
141
  If you want to use the differential gene expression interface, please install pertpy by running:
@@ -146,4 +151,17 @@ bioRxiv 2024.08.04.606516; doi: https://doi.org/10.1101/2024.08.04.606516](https
146
151
 
147
152
  [pip]: https://pip.pypa.io/
148
153
  [pypi]: https://pypi.org/
149
- [usage]: https://pertpy.readthedocs.io/en/latest/usage/usage.html
154
+ [api]: https://pertpy.readthedocs.io/en/latest/api/api.html
155
+ [//]: # "numfocus-fiscal-sponsor-attribution"
156
+
157
+ 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/).
158
+ If you like scverse® and want to support our mission, please consider making a tax-deductible [donation](https://numfocus.org/donate-to-scverse) to help the project pay for developer time, professional services, travel, workshops, and a variety of other needs.
159
+
160
+ <div align="center">
161
+ <a href="https://numfocus.org/project/scverse">
162
+ <img
163
+ src="https://raw.githubusercontent.com/numfocus/templates/master/images/numfocus-logo.png"
164
+ width="200"
165
+ >
166
+ </a>
167
+ </div>
@@ -1,4 +1,3 @@
1
- [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
2
1
  [![Build](https://github.com/scverse/pertpy/actions/workflows/build.yml/badge.svg)](https://github.com/scverse/pertpy/actions/workflows/build.yml)
3
2
  [![codecov](https://codecov.io/gh/scverse/pertpy/graph/badge.svg?token=1dTpIPBShv)](https://codecov.io/gh/scverse/pertpy)
4
3
  [![License](https://img.shields.io/github/license/scverse/pertpy)](https://opensource.org/licenses/Apache2.0)
@@ -8,13 +7,16 @@
8
7
  [![Test](https://github.com/scverse/pertpy/actions/workflows/test.yml/badge.svg)](https://github.com/scverse/pertpy/actions/workflows/test.yml)
9
8
  [![PyPI](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
10
9
 
11
- # pertpy
10
+ # pertpy - Perturbation Analysis in Python
11
+
12
+ Pertpy is a scverse ecosystem framework for analyzing large-scale single-cell perturbation experiments.
13
+ It provides tools for harmonizing perturbation datasets, automating metadata annotation, calculating perturbation distances, and efficiently analyzing how cells respond to various stimuli like genetic modifications, drug treatments, and environmental changes.
12
14
 
13
15
  ![fig1](https://github.com/user-attachments/assets/d2e32d69-b767-4be3-a938-77a9dce45d3f)
14
16
 
15
17
  ## Documentation
16
18
 
17
- Please read the [documentation](https://pertpy.readthedocs.io/en/latest).
19
+ Please read the [documentation](https://pertpy.readthedocs.io/en/latest) for installation, tutorials, use cases, and more.
18
20
 
19
21
  ## Installation
20
22
 
@@ -27,10 +29,10 @@ You can install _pertpy_ in less than a minute via [pip] from [PyPI]:
27
29
  pip install pertpy
28
30
  ```
29
31
 
30
- if you want to use scCODA or tascCODA, please install pertpy as follows:
32
+ if you want to use tascCODA, please install pertpy as follows:
31
33
 
32
34
  ```console
33
- pip install 'pertpy[coda]'
35
+ pip install 'pertpy[tcoda]'
34
36
  ```
35
37
 
36
38
  If you want to use the differential gene expression interface, please install pertpy by running:
@@ -46,4 +48,17 @@ bioRxiv 2024.08.04.606516; doi: https://doi.org/10.1101/2024.08.04.606516](https
46
48
 
47
49
  [pip]: https://pip.pypa.io/
48
50
  [pypi]: https://pypi.org/
49
- [usage]: https://pertpy.readthedocs.io/en/latest/usage/usage.html
51
+ [api]: https://pertpy.readthedocs.io/en/latest/api/api.html
52
+ [//]: # "numfocus-fiscal-sponsor-attribution"
53
+
54
+ 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/).
55
+ If you like scverse® and want to support our mission, please consider making a tax-deductible [donation](https://numfocus.org/donate-to-scverse) to help the project pay for developer time, professional services, travel, workshops, and a variety of other needs.
56
+
57
+ <div align="center">
58
+ <a href="https://numfocus.org/project/scverse">
59
+ <img
60
+ src="https://raw.githubusercontent.com/numfocus/templates/master/images/numfocus-logo.png"
61
+ width="200"
62
+ >
63
+ </a>
64
+ </div>
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
+ "formatter": { "useEditorconfig": true },
4
+ "overrides": [
5
+ {
6
+ "include": ["./.vscode/*.json", "**/*.jsonc", "**/asv.conf.json"],
7
+ "json": {
8
+ "formatter": {
9
+ "trailingCommas": "all",
10
+ },
11
+ "parser": {
12
+ "allowComments": true,
13
+ "allowTrailingCommas": true,
14
+ },
15
+ },
16
+ },
17
+ ],
18
+ }
@@ -8,7 +8,7 @@ from sphinx.application import Sphinx
8
8
  __licence__ = "BSD (3 clause)"
9
9
 
10
10
 
11
- def get_github_repo(app: Sphinx, path: str) -> str:
11
+ def get_github_repo(app: Sphinx, path: str) -> str: # noqa: D103
12
12
  if path.endswith(".ipynb"):
13
13
  return str(app.config.github_nb_repo)
14
14
  if "auto_examples" in path:
@@ -43,7 +43,7 @@ def _html_page_context(
43
43
  context["conf_py_path"] = "/docs/source/"
44
44
 
45
45
 
46
- def setup(app: Sphinx) -> None:
46
+ def setup(app: Sphinx) -> None: # noqa: D103
47
47
  app.add_config_value("github_nb_repo", "", True)
48
48
  app.add_config_value("github_repo", "", True)
49
49
  app.connect("html-page-context", _html_page_context)
@@ -10,7 +10,7 @@ def _process_return(lines: Iterable[str]) -> Iterator[str]:
10
10
  m = re.fullmatch(r"(?P<param>\w+)\s+:\s+(?P<type>[\w.]+)", line)
11
11
  if m:
12
12
  # Once this is in scanpydoc, we can use the fancy hover stuff
13
- yield f'**{m["param"]}** : :class:`~{m["type"]}`'
13
+ yield f"**{m['param']}** : :class:`~{m['type']}`"
14
14
  else:
15
15
  yield line
16
16
 
@@ -23,5 +23,5 @@ def _parse_returns_section(self: NumpyDocstring, section: str) -> list[str]:
23
23
  return lines
24
24
 
25
25
 
26
- def setup(app: Sphinx) -> None:
26
+ def setup(app: Sphinx) -> None: # noqa: D103
27
27
  NumpyDocstring._parse_returns_section = _parse_returns_section
@@ -1,10 +1,3 @@
1
- /*
2
- Furo CSS variables
3
- https://github.com/pradyunsg/furo/blob/main/src/furo/assets/styles/variables/_index.scss
4
- https://github.com/pradyunsg/furo/blob/main/src/furo/theme/partials/_head_css_variables.html
5
- https://github.com/streamlink/streamlink/blob/17a4088c38709123c0bcab4a150549bd16d19e07/docs/_static/styles/custom.css
6
- */
7
-
8
1
  /* for the sphinx design cards */
9
2
  body {
10
3
  --sd-color-shadow: dimgrey;
@@ -72,3 +65,9 @@ li.toctree-l3 {
72
65
  li.toctree-l4 {
73
66
  font-size: 75% !important;
74
67
  }
68
+
69
+ .bd-sidebar .caption-text {
70
+ color: #e63946;
71
+ font-weight: 600;
72
+ text-transform: uppercase;
73
+ }
@@ -0,0 +1,5 @@
1
+ <svg width="308" height="105" viewBox="0 0 308 105" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="308" height="105" fill="#1E1E1E"/>
3
+ <path d="M26.432 17.656C41.664 17.4 48.576 31.736 48.704 47.992C48.704 62.328 41.536 75.768 26.176 76.28C19.904 76.28 14.528 74.36 9.28 71.16V104.312L0.0640001 100.984L0.192 27.384C0.0640001 27.384 7.36 17.784 26.304 17.528L26.432 17.656ZM24.128 69.624C36.416 68.856 37.952 56.824 37.952 47.352C37.952 38.136 36.416 24.312 24.768 23.8C16.832 23.288 10.432 27 9.152 28.28V64.76C12.224 66.68 18.368 70.008 24.128 69.624ZM105.92 69.88C102.976 71.8 100.032 73.464 96.32 74.616C88.256 76.92 77.76 77.048 71.104 71.416C64.96 66.168 61.248 57.336 61.248 47.864C61.376 33.144 67.392 17.912 83.776 17.912C99.392 17.912 105.152 28.664 105.408 45.944H71.104C70.08 60.536 77.504 70.392 88 70.008C94.4 69.88 99.008 67.704 103.744 65.4L105.92 69.88ZM95.936 40.44L96.064 40.568C96.064 32.376 92.48 23.672 84.16 23.672C75.2 23.672 72 32.376 71.36 40.44H95.936ZM142.476 24.568H142.348C136.204 24.568 131.98 26.872 128.652 29.688V75H119.308V28.408C122.764 24.568 127.372 21.496 132.62 19.704C138.252 17.656 143.628 16.376 151.436 17.784C150.284 20.088 148.748 23.032 147.724 25.336C145.932 24.952 143.756 24.568 142.476 24.568ZM163.362 24.952H156.962V18.936H163.362V3.32L172.706 -0.00800323V18.936H183.202V24.952H172.706V61.432C172.706 68.856 176.674 70.648 183.202 70.904V75.768C170.786 76.92 163.362 71.288 163.362 61.688V24.952Z" fill="#30679A"/>
4
+ <path d="M223.307 17.656C238.539 17.4 245.451 31.736 245.579 47.992C245.579 62.328 238.411 75.768 223.051 76.28C216.779 76.28 211.403 74.36 206.155 71.16V104.312L196.939 100.984L197.067 27.384C196.939 27.384 204.235 17.784 223.179 17.528L223.307 17.656ZM221.003 69.624C233.291 68.856 234.827 56.824 234.827 47.352C234.827 38.136 233.291 24.312 221.643 23.8C213.707 23.288 207.307 27 206.027 28.28V64.76C209.099 66.68 215.243 70.008 221.003 69.624ZM270.411 56.824V56.696C270.411 65.272 276.555 69.752 284.875 69.624C289.867 69.496 295.499 66.68 298.571 64.632V18.936H307.915V69.752C307.915 76.28 307.531 86.136 304.843 91.256C300.107 100.216 286.795 103.8 277.323 104.056L275.787 98.168C282.955 97.144 293.195 96.12 297.035 88.824C298.955 85.24 299.083 78.2 299.083 74.104C299.083 72.696 299.211 73.08 299.083 71.672C296.267 72.952 289.995 76.024 278.987 76.024C270.539 76.024 260.939 70.008 260.939 59.64V20.728L270.411 17.528V56.824Z" fill="#D2455E"/>
5
+ </svg>