decoupler 2.2.0__tar.gz → 2.3.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 (202) hide show
  1. {decoupler-2.2.0 → decoupler-2.3.1}/.cruft.json +7 -4
  2. {decoupler-2.2.0 → decoupler-2.3.1}/.editorconfig +1 -1
  3. {decoupler-2.2.0 → decoupler-2.3.1}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -2
  4. decoupler-2.3.1/.github/dependabot.yml +12 -0
  5. {decoupler-2.2.0 → decoupler-2.3.1}/.github/workflows/build.yaml +6 -2
  6. decoupler-2.3.1/.github/workflows/notebooks.yaml +62 -0
  7. {decoupler-2.2.0 → decoupler-2.3.1}/.github/workflows/release.yaml +9 -3
  8. {decoupler-2.2.0 → decoupler-2.3.1}/.github/workflows/test.yaml +20 -13
  9. {decoupler-2.2.0 → decoupler-2.3.1}/.pre-commit-config.yaml +9 -3
  10. {decoupler-2.2.0 → decoupler-2.3.1}/.readthedocs.yaml +2 -2
  11. {decoupler-2.2.0 → decoupler-2.3.1}/CHANGELOG.md +51 -2
  12. {decoupler-2.2.0 → decoupler-2.3.1}/PKG-INFO +27 -22
  13. {decoupler-2.2.0 → decoupler-2.3.1}/README.md +22 -17
  14. decoupler-2.3.1/docs/_static/images/logo.svg +35 -0
  15. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/ds.md +5 -0
  16. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/pp.md +3 -0
  17. {decoupler-2.2.0 → decoupler-2.3.1}/docs/conf.py +8 -7
  18. {decoupler-2.2.0 → decoupler-2.3.1}/docs/references.bib +14 -0
  19. {decoupler-2.2.0 → decoupler-2.3.1}/pyproject.toml +10 -8
  20. decoupler-2.3.1/src/decoupler/_skills/data/SKILL.md +145 -0
  21. decoupler-2.3.1/src/decoupler/_skills/data/references/contrast.md +86 -0
  22. decoupler-2.3.1/src/decoupler/_skills/data/references/resources.md +82 -0
  23. decoupler-2.3.1/src/decoupler/_skills/install.py +175 -0
  24. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/_spatial.py +7 -1
  25. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_gsea.py +8 -6
  26. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_ora.py +10 -2
  27. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_query_set.py +5 -0
  28. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_waggr.py +26 -15
  29. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_zscore.py +2 -2
  30. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_dotplot.py +8 -3
  31. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pp/anndata.py +1 -1
  32. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_gsea.py +46 -0
  33. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_ora.py +70 -2
  34. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_query_set.py +9 -0
  35. decoupler-2.3.1/tests/mt/test_waggr.py +72 -0
  36. decoupler-2.3.1/tests/mt/test_zscore.py +27 -0
  37. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_dotplot.py +10 -0
  38. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pp/test_anndata.py +1 -1
  39. decoupler-2.3.1/tests/test_install_skills.py +214 -0
  40. decoupler-2.2.0/.github/workflows/notebooks.yaml +0 -57
  41. decoupler-2.2.0/docs/_static/images/logo.svg +0 -65
  42. decoupler-2.2.0/docs/_templates/autosummary/class.rst +0 -61
  43. decoupler-2.2.0/docs/extensions/typed_returns.py +0 -32
  44. decoupler-2.2.0/src/decoupler/_skills/data/SKILL.md +0 -85
  45. decoupler-2.2.0/src/decoupler/_skills/data/references/benchmarking.md +0 -59
  46. decoupler-2.2.0/src/decoupler/_skills/data/references/calling-convention.md +0 -91
  47. decoupler-2.2.0/src/decoupler/_skills/data/references/datasets.md +0 -88
  48. decoupler-2.2.0/src/decoupler/_skills/data/references/getting-started.md +0 -82
  49. decoupler-2.2.0/src/decoupler/_skills/data/references/io-and-outputs.md +0 -80
  50. decoupler-2.2.0/src/decoupler/_skills/data/references/methods.md +0 -67
  51. decoupler-2.2.0/src/decoupler/_skills/data/references/multi-method.md +0 -72
  52. decoupler-2.2.0/src/decoupler/_skills/data/references/preprocessing.md +0 -66
  53. decoupler-2.2.0/src/decoupler/_skills/data/references/priors.md +0 -79
  54. decoupler-2.2.0/src/decoupler/_skills/data/references/ranking-and-plotting.md +0 -131
  55. decoupler-2.2.0/src/decoupler/_skills/install.py +0 -143
  56. decoupler-2.2.0/tests/mt/test_waggr.py +0 -35
  57. decoupler-2.2.0/tests/mt/test_zscore.py +0 -16
  58. decoupler-2.2.0/tests/test_install_skills.py +0 -158
  59. {decoupler-2.2.0 → decoupler-2.3.1}/.codecov.yaml +0 -0
  60. {decoupler-2.2.0 → decoupler-2.3.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  61. {decoupler-2.2.0 → decoupler-2.3.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  62. {decoupler-2.2.0 → decoupler-2.3.1}/.gitignore +0 -0
  63. {decoupler-2.2.0 → decoupler-2.3.1}/.gitmodules +0 -0
  64. {decoupler-2.2.0 → decoupler-2.3.1}/.vscode/extensions.json +0 -0
  65. {decoupler-2.2.0 → decoupler-2.3.1}/.vscode/launch.json +0 -0
  66. {decoupler-2.2.0 → decoupler-2.3.1}/.vscode/settings.json +0 -0
  67. {decoupler-2.2.0 → decoupler-2.3.1}/LICENSE +0 -0
  68. {decoupler-2.2.0 → decoupler-2.3.1}/biome.jsonc +0 -0
  69. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/.gitkeep +0 -0
  70. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/css/custom.css +0 -0
  71. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/images/logo.png +0 -0
  72. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/images/mlm.png +0 -0
  73. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/images/ora.png +0 -0
  74. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_static/images/ulm.png +0 -0
  75. {decoupler-2.2.0 → decoupler-2.3.1}/docs/_templates/.gitkeep +0 -0
  76. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/bm.md +1 -1
  77. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/index.md +0 -0
  78. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/mt.md +0 -0
  79. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/op.md +0 -0
  80. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/pl.md +0 -0
  81. {decoupler-2.2.0 → decoupler-2.3.1}/docs/api/tl.md +0 -0
  82. {decoupler-2.2.0 → decoupler-2.3.1}/docs/changelog.md +0 -0
  83. {decoupler-2.2.0 → decoupler-2.3.1}/docs/index.md +0 -0
  84. {decoupler-2.2.0 → decoupler-2.3.1}/docs/references.md +0 -0
  85. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_Method.py +0 -0
  86. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_Plotter.py +0 -0
  87. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/__init__.py +0 -0
  88. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_datatype.py +0 -0
  89. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_docs.py +0 -0
  90. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_download.py +0 -0
  91. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_log.py +0 -0
  92. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_odeps.py +0 -0
  93. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/_skills/__init__.py +0 -0
  94. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/__init__.py +0 -0
  95. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/_pp.py +0 -0
  96. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/_run.py +0 -0
  97. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/_Metric.py +0 -0
  98. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/__init__.py +0 -0
  99. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/_auc.py +0 -0
  100. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/_fscore.py +0 -0
  101. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/_hmean.py +0 -0
  102. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/metric/_qrank.py +0 -0
  103. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/__init__.py +0 -0
  104. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_auc.py +0 -0
  105. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_bar.py +0 -0
  106. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_format.py +0 -0
  107. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_fscore.py +0 -0
  108. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_qrank.py +0 -0
  109. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/bm/pl/_summary.py +0 -0
  110. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/__init__.py +0 -0
  111. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/_bulk.py +0 -0
  112. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/_scell.py +0 -0
  113. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/_toy.py +0 -0
  114. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/ds/_utils.py +0 -0
  115. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/__init__.py +0 -0
  116. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_aucell.py +0 -0
  117. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_consensus.py +0 -0
  118. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_decouple.py +0 -0
  119. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_gsva.py +0 -0
  120. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_mdt.py +0 -0
  121. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_methods.py +0 -0
  122. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_mlm.py +0 -0
  123. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_pv.py +0 -0
  124. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_run.py +0 -0
  125. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_udt.py +0 -0
  126. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_ulm.py +0 -0
  127. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/mt/_viper.py +0 -0
  128. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/__init__.py +0 -0
  129. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_collectri.py +0 -0
  130. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_dorothea.py +0 -0
  131. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_dtype.py +0 -0
  132. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_hallmark.py +0 -0
  133. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_progeny.py +0 -0
  134. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_resource.py +0 -0
  135. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/op/_translate.py +0 -0
  136. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/__init__.py +0 -0
  137. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_barplot.py +0 -0
  138. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_filter_by_expr.py +0 -0
  139. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_filter_by_prop.py +0 -0
  140. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_filter_samples.py +0 -0
  141. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_leading_edge.py +0 -0
  142. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_network.py +0 -0
  143. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_obsbar.py +0 -0
  144. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_obsm.py +0 -0
  145. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_order.py +0 -0
  146. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_order_targets.py +0 -0
  147. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_source_targets.py +0 -0
  148. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pl/_volcano.py +0 -0
  149. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pp/__init__.py +0 -0
  150. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pp/data.py +0 -0
  151. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/pp/net.py +0 -0
  152. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/tl/__init__.py +0 -0
  153. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/tl/_rankby_group.py +0 -0
  154. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/tl/_rankby_obsm.py +0 -0
  155. {decoupler-2.2.0 → decoupler-2.3.1}/src/decoupler/tl/_rankby_order.py +0 -0
  156. {decoupler-2.2.0 → decoupler-2.3.1}/tests/bm/test_benchmark.py +0 -0
  157. {decoupler-2.2.0 → decoupler-2.3.1}/tests/bm/test_pl.py +0 -0
  158. {decoupler-2.2.0 → decoupler-2.3.1}/tests/conftest.py +0 -0
  159. {decoupler-2.2.0 → decoupler-2.3.1}/tests/ds/test_bulk.py +0 -0
  160. {decoupler-2.2.0 → decoupler-2.3.1}/tests/ds/test_scell.py +0 -0
  161. {decoupler-2.2.0 → decoupler-2.3.1}/tests/ds/test_spatial.py +0 -0
  162. {decoupler-2.2.0 → decoupler-2.3.1}/tests/ds/test_toy.py +0 -0
  163. {decoupler-2.2.0 → decoupler-2.3.1}/tests/ds/test_utils.py +0 -0
  164. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_adj.py +0 -0
  165. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_aucell.py +0 -0
  166. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_consensus.py +0 -0
  167. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_decouple.py +0 -0
  168. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_gsva.py +0 -0
  169. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_mdt.py +0 -0
  170. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_methods.py +0 -0
  171. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_mlm.py +0 -0
  172. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_run.py +0 -0
  173. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_udt.py +0 -0
  174. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_ulm.py +0 -0
  175. {decoupler-2.2.0 → decoupler-2.3.1}/tests/mt/test_viper.py +0 -0
  176. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_collectri.py +0 -0
  177. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_dorothea.py +0 -0
  178. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_dtype.py +0 -0
  179. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_hallmark.py +0 -0
  180. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_progeny.py +0 -0
  181. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_resource.py +0 -0
  182. {decoupler-2.2.0 → decoupler-2.3.1}/tests/op/test_translate.py +0 -0
  183. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_Plotter.py +0 -0
  184. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_barplot.py +0 -0
  185. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_filter_by_expr.py +0 -0
  186. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_filter_by_prop.py +0 -0
  187. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_filter_samples.py +0 -0
  188. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_leading_edge.py +0 -0
  189. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_network.py +0 -0
  190. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_obsbar.py +0 -0
  191. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_obsm.py +0 -0
  192. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_order.py +0 -0
  193. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_order_targets.py +0 -0
  194. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_source_targets.py +0 -0
  195. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pl/test_volcano.py +0 -0
  196. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pp/test_data.py +0 -0
  197. {decoupler-2.2.0 → decoupler-2.3.1}/tests/pp/test_net.py +0 -0
  198. {decoupler-2.2.0 → decoupler-2.3.1}/tests/test_download.py +0 -0
  199. {decoupler-2.2.0 → decoupler-2.3.1}/tests/test_version.py +0 -0
  200. {decoupler-2.2.0 → decoupler-2.3.1}/tests/tl/test_rankby_group.py +0 -0
  201. {decoupler-2.2.0 → decoupler-2.3.1}/tests/tl/test_rankby_obsm.py +0 -0
  202. {decoupler-2.2.0 → decoupler-2.3.1}/tests/tl/test_rankby_order.py +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "template": "https://github.com/scverse/cookiecutter-scverse",
3
- "commit": "6ff5b92b5d44ea6d8a88e47538475718d467db95",
4
- "checkout": "v0.7.0",
3
+ "commit": "6518dfa1abde7379ea7255daf0ce09c23f2b4c94",
4
+ "checkout": "v0.8.0",
5
5
  "context": {
6
6
  "cookiecutter": {
7
7
  "project_name": "decoupler",
@@ -13,6 +13,7 @@
13
13
  "github_repo": "decoupler",
14
14
  "license": "BSD 3-Clause License",
15
15
  "ide_integration": true,
16
+ "issue_categorization": "",
16
17
  "_copy_without_render": [
17
18
  ".github/workflows/build.yaml",
18
19
  ".github/workflows/test.yaml",
@@ -36,8 +37,10 @@
36
37
  "trim_blocks": true
37
38
  },
38
39
  "_template": "https://github.com/scverse/cookiecutter-scverse",
39
- "_commit": "d383d94fadff9e4e6fdb59d77c68cb900d7cedec"
40
- }
40
+ "_commit": "4d6aa34fd5be7523ca3bd49fbd81a882dde01d1f"
41
+ },
42
+ "_commit": "6518dfa1abde7379ea7255daf0ce09c23f2b4c94",
43
+ "_template": "https://github.com/scverse/cookiecutter-scverse"
41
44
  },
42
45
  "directory": null
43
46
  }
@@ -8,7 +8,7 @@ charset = utf-8
8
8
  trim_trailing_whitespace = true
9
9
  insert_final_newline = true
10
10
 
11
- [{*.{yml,yaml,toml},.cruft.json}]
11
+ [{*.yml,*.yaml,*.toml,.cruft.json}]
12
12
  indent_size = 2
13
13
 
14
14
  [Makefile]
@@ -9,8 +9,7 @@ body:
9
9
  detailing how to provide the necessary information for us to reproduce your bug. In brief:
10
10
  * Please provide exact steps how to reproduce the bug in a clean Python environment.
11
11
  * In case it's not clear what's causing this bug, please provide the data or the data generation procedure.
12
- * Sometimes it is not possible to share the data, but usually it is possible to replicate problems on publicly
13
- available datasets or to share a subset of your data.
12
+ * Replicate problems on public datasets or share data subsets when full sharing isn't possible.
14
13
 
15
14
  - type: textarea
16
15
  id: report
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ cooldown:
8
+ default-days: 7
9
+ groups:
10
+ actions-deps:
11
+ patterns:
12
+ - "*"
@@ -10,16 +10,20 @@ concurrency:
10
10
  group: ${{ github.workflow }}-${{ github.ref }}
11
11
  cancel-in-progress: true
12
12
 
13
+ permissions:
14
+ contents: read
15
+
13
16
  jobs:
14
17
  package:
15
18
  runs-on: ubuntu-latest
16
19
  steps:
17
- - uses: actions/checkout@v5
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
18
21
  with:
19
22
  filter: blob:none
20
23
  fetch-depth: 0
24
+ persist-credentials: false
21
25
  - name: Install uv
22
- uses: astral-sh/setup-uv@v7
26
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
23
27
  - name: Build package
24
28
  run: uv build
25
29
  - name: Check package
@@ -0,0 +1,62 @@
1
+ name: Test notebooks
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
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ defaults:
20
+ run:
21
+ # to fail on error in multiline statements (-e), in pipes (-o pipefail), and on unset variables (-u).
22
+ shell: bash -euo pipefail {0}
23
+
24
+ env:
25
+ NOTEBOOK_PATH: docs/notebooks
26
+
27
+ strategy:
28
+ fail-fast: false
29
+ matrix:
30
+ notebook:
31
+ [
32
+ "example.ipynb",
33
+ "bench/rna.ipynb",
34
+ "bulk/rna.ipynb",
35
+ "omnipath/licenses.ipynb",
36
+ "omnipath/orthologs.ipynb",
37
+ "scell/rna_psbk.ipynb",
38
+ "scell/rna_pstime.ipynb",
39
+ "scell/rna_sc.ipynb",
40
+ "spatial/rna_visium.ipynb",
41
+ ]
42
+
43
+ steps:
44
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
45
+ with:
46
+ filter: blob:none
47
+ fetch-depth: 0
48
+ submodules: "true"
49
+ persist-credentials: false
50
+ - name: Set up Python
51
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
52
+ with:
53
+ python-version: "3.13"
54
+ - name: Install uv
55
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
56
+ - name: Install dependencies
57
+ run: |
58
+ uv pip install --system .
59
+ uv pip install --system --group dev --group test
60
+ uv pip install --system nbconvert ipykernel
61
+ - name: Run ${{ matrix.notebook }} Notebook
62
+ run: jupyter nbconvert --to notebook --execute ${{ env.NOTEBOOK_PATH }}/${{ matrix.notebook }}
@@ -5,6 +5,8 @@ on:
5
5
  types: [published]
6
6
 
7
7
  # Use "trusted publishing", see https://docs.pypi.org/trusted-publishers/
8
+ permissions: {}
9
+
8
10
  jobs:
9
11
  release:
10
12
  name: Upload release to PyPI
@@ -13,15 +15,19 @@ jobs:
13
15
  name: pypi
14
16
  url: https://pypi.org/p/decoupler
15
17
  permissions:
18
+ contents: read
16
19
  id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
17
20
  steps:
18
- - uses: actions/checkout@v5
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
19
22
  with:
20
23
  filter: blob:none
21
24
  fetch-depth: 0
25
+ persist-credentials: false
22
26
  - name: Install uv
23
- uses: astral-sh/setup-uv@v7
27
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
28
+ with:
29
+ enable-cache: false
24
30
  - name: Build package
25
31
  run: uv build
26
32
  - name: Publish package distributions to PyPI
27
- uses: pypa/gh-action-pypi-publish@release/v1
33
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -13,7 +13,7 @@ concurrency:
13
13
  cancel-in-progress: true
14
14
 
15
15
  permissions:
16
- id-token: write
16
+ contents: read
17
17
 
18
18
  jobs:
19
19
  # Get the test environment from hatch as defined in pyproject.toml.
@@ -22,17 +22,18 @@ jobs:
22
22
  # Check [[tool.hatch.envs.hatch-test.matrix]] in pyproject.toml and https://hatch.pypa.io/latest/environment/ for
23
23
  # more details.
24
24
  get-environments:
25
- runs-on: ubuntu-latest
25
+ runs-on: ubuntu-slim
26
26
  outputs:
27
27
  envs: ${{ steps.get-envs.outputs.envs }}
28
28
  allowed-failures: ${{ steps.get-envs.outputs.allowed-failures }}
29
29
  steps:
30
- - uses: actions/checkout@v5
30
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
31
31
  with:
32
32
  filter: blob:none
33
33
  fetch-depth: 0
34
+ persist-credentials: false
34
35
  - name: Install uv
35
- uses: astral-sh/setup-uv@v7
36
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
36
37
  - name: Get test environments
37
38
  id: get-envs
38
39
  run: |
@@ -52,6 +53,9 @@ jobs:
52
53
  # Run tests through hatch. Spawns a separate runner for each environment defined in the hatch matrix obtained above.
53
54
  test:
54
55
  needs: get-environments
56
+ permissions:
57
+ id-token: write # for codecov OIDC
58
+ contents: read
55
59
 
56
60
  strategy:
57
61
  fail-fast: false
@@ -61,19 +65,22 @@ jobs:
61
65
 
62
66
  name: ${{ matrix.env.label }}
63
67
  runs-on: ${{ matrix.os }}
64
- continue-on-error: ${{ contains(matrix.env.name, 'pre') }}
68
+ continue-on-error: ${{ contains(matrix.env.name, 'pre') }} # make "all-green" pass even if pre-release job fails
65
69
 
66
70
  steps:
67
- - uses: actions/checkout@v5
71
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
68
72
  with:
69
73
  filter: blob:none
70
74
  fetch-depth: 0
75
+ persist-credentials: false
71
76
  - name: Install uv
72
- uses: astral-sh/setup-uv@v7
77
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
73
78
  with:
74
79
  python-version: ${{ matrix.env.python }}
75
80
  - name: create hatch environment
76
81
  run: uvx hatch env create ${{ matrix.env.name }}
82
+ - name: list all all installed package versions
83
+ run: uvx hatch run ${{ matrix.env.name }}:uv pip list
77
84
  - name: run tests using hatch
78
85
  env:
79
86
  MPLBACKEND: agg
@@ -82,12 +89,12 @@ jobs:
82
89
  run: uvx hatch run ${{ matrix.env.name }}:run-cov -v --color=yes -n auto
83
90
  - name: generate coverage report
84
91
  run: |
85
- # See https://coverage.readthedocs.io/en/latest/config.html#run-patch
92
+ # See https://coverage.readthedocs.io/page/config.html#run-patch
86
93
  test -f .coverage || uvx hatch run ${{ matrix.env.name }}:cov-combine
87
94
  uvx hatch run ${{ matrix.env.name }}:cov-report # report visibly
88
95
  uvx hatch run ${{ matrix.env.name }}:coverage xml # create report for upload
89
96
  - name: Upload coverage
90
- uses: codecov/codecov-action@v6
97
+ uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
91
98
  with:
92
99
  fail_ci_if_error: true
93
100
  use_oidc: true
@@ -102,7 +109,7 @@ jobs:
102
109
  - test
103
110
  runs-on: ubuntu-latest
104
111
  steps:
105
- - uses: re-actors/alls-green@release/v1
106
- with:
107
- allowed-failures: ${{ needs.get-environments.outputs.allowed-failures }}
108
- jobs: ${{ toJSON(needs) }}
112
+ - uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
113
+ with:
114
+ allowed-failures: ${{ needs.get-environments.outputs.allowed-failures }}
115
+ jobs: ${{ toJSON(needs) }}
@@ -7,16 +7,16 @@ default_stages:
7
7
  minimum_pre_commit_version: 2.16.0
8
8
  repos:
9
9
  - repo: https://github.com/biomejs/pre-commit
10
- rev: v2.5.2
10
+ rev: v2.6.3
11
11
  hooks:
12
12
  - id: biome-format
13
13
  exclude: ^\.cruft\.json$ # inconsistent indentation with cruft - file never to be modified manually.
14
14
  - repo: https://github.com/tox-dev/pyproject-fmt
15
- rev: v2.25.1
15
+ rev: v2.30.3
16
16
  hooks:
17
17
  - id: pyproject-fmt
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.15.20
19
+ rev: v0.17.2
20
20
  hooks:
21
21
  - id: ruff-check
22
22
  types_or: [python, pyi, jupyter]
@@ -36,3 +36,9 @@ repos:
36
36
  # Check that there are no merge conflicts (could be generated by template sync)
37
37
  - id: check-merge-conflict
38
38
  args: [--assume-in-merge]
39
+
40
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
41
+ rev: v1.31.1
42
+ hooks:
43
+ - id: zizmor
44
+ args: [--no-progress, --fix]
@@ -1,9 +1,9 @@
1
- # https://docs.readthedocs.io/en/stable/config-file/v2.html
1
+ # https://docs.readthedocs.io/page/config-file/v2.html
2
2
  version: 2
3
3
  build:
4
4
  os: ubuntu-24.04
5
5
  tools:
6
- python: "3.13"
6
+ python: "3.14"
7
7
  nodejs: latest
8
8
  jobs:
9
9
  create_environment:
@@ -8,15 +8,46 @@ and this project adheres to [Semantic Versioning][].
8
8
  [keep a changelog]: https://keepachangelog.com/en/1.0.0/
9
9
  [semantic versioning]: https://semver.org/spec/v2.0.0.html
10
10
 
11
+ ## 2.3.1
12
+
13
+ ### Bugfixes
14
+
15
+ - Fixed `mt.zscore` swapping the `KSEA` and `RoKAI` flavors, restoring the behaviour of `decoupler<2`. Scores from the default `RoKAI` flavor change (#382)
16
+ - Fixed `mt.gsea` giving p-values of 0 when no permutation reached the observed score. The observed score is now counted as one of the permutations, as in `mt.waggr` (#383)
17
+ - Fixed `mt.waggr` aborting the Python process with numba's `workqueue` threading layer (default when TBB/OpenMP are unavailable, e.g. macOS arm64) due to nested parallel regions
18
+
19
+ ## 2.3.0
20
+
21
+ ### Changes
22
+
23
+ - Updated the bundled decoupler Agent Skill, and `decoupler-install-skills` now supports multiple agent frameworks
24
+ - `pp.filter_by_prop` now defaults to `min_prop=0.1` (was `0.2`) to match the value used in the vignettes
25
+ - `ds.msvisium` now returns log-normalized data (`sc.pp.normalize_total` + `sc.pp.log1p`), with the log-normalized matrix also stored in `adata.layers["norm"]`, instead of raw counts
26
+ - Dropped support for Python 3.11; decoupler now requires Python 3.12 or newer
27
+ - Updated to the scverse cookiecutter template v0.8.0 (hash-pinned GitHub Actions checked by zizmor, `prek` instead of `pre-commit`, `sphinx-design` instead of `sphinx-tabs`, shared Sphinx extensions from `scverse-misc`)
28
+
29
+ ### Bugfixes
30
+
31
+ - Fixed `mt.ora` selecting the bottom `nvar - n_up` features instead of the top `n_up` ones. Ranks are ascending, so the threshold is now `nvar - n_up`, restoring the behaviour of `decoupler<2`. With the default `n_up` (top 5%) this selected 95% of the features as observed, which also made `mt.ora` fail with `invalid contingency table` whenever `nvar - n_up` exceeded `n_bg` (#346)
32
+ - Fixed `n_bm` in `mt.ora` selecting the bottom `n_bm - 1` features instead of `n_bm`
33
+ - `mt.ora` now validates that `n_up` and `n_bm` do not overlap and that `n_bg` is large enough for the number of selected features, instead of failing inside the Fisher exact test
34
+ - `mt.query_set` now raises an informative error when `n_bg` is smaller than the number of features to test, instead of failing inside `scipy.stats.fisher_exact`
35
+ - Fixed `mt.gsea` not shuffling the permutation indices when `seed=0`, which produced identical permutations and invalid p-values (#355)
36
+ - Fixed `mt.waggr` folding its already two-sided permutation p-values as one-sided, which gave scores near 0 the smallest p-value (#373)
37
+ - Fixed `pl.dotplot` showing an empty size legend when all dots have the same size (#370)
38
+ - Fixed `ds.msvisium` failing with HTTP 403 by fetching the spot metadata from `cells.ucsc.edu` instead of the `cells-test.gi.ucsc.edu` mirror
39
+
11
40
  ## 2.2.0
12
41
 
13
42
  ### Added
43
+
14
44
  - Bundled a Claude Code [Agent Skill](https://docs.claude.com/en/docs/claude-code/skills) that teaches coding agents to use decoupler correctly (method selection, calling conventions, output locations, priors, datasets, and benchmarking)
15
45
  - Added the `decoupler-install-skills` console script to install the skill into `~/.claude/skills/decoupler/` (use `--force` to refresh after upgrading, or `--print-path` to point `CLAUDE_SKILLS_PATH` at the bundled copy in place)
16
46
 
17
47
  ## 2.1.6
18
48
 
19
49
  ### Bugfixes
50
+
20
51
  - Fixed `op.translate` (and every `op.resource` call for non-human organisms) failing with HTTP 404 after HGNC dropped the `genenames/` subtree from the EBI FTP mirror; the HCOP fifteen-column files are now fetched from the new HGNC Google Cloud Storage bucket (#303)
21
52
  - Removed a redundant `pd.read_csv` call in `op.translate` that re-downloaded the HCOP file a second time and bypassed the retry logic in `_download`
22
53
  - Fixed `bm.benchmark` ground-truth matrix row order not matching score matrix after `pivot`, which silently misaligned perturbation labels when obs names sort differently from their original order (#302)
@@ -24,29 +55,35 @@ and this project adheres to [Semantic Versioning][].
24
55
  ## 2.1.5
25
56
 
26
57
  ### Added
58
+
27
59
  - `pl.volcano` now accepts a gene name (`str`) or list of gene names (`list[str]`) for the `top` parameter to annotate specific features on volcano plots
28
60
 
29
61
  ### Changes
62
+
30
63
  - Refactored `ds.ensmbl_to_symbol` to reuse `_download` and fixed mirror fallback to actually switch between Ensembl mirrors
31
64
  - Made `tqdm` progress bar compact in `_download`
32
65
 
33
66
  ### Bugfixes
67
+
34
68
  - Fixed `pl.dotplot` ignoring `vcenter=0` due to falsy check (#293)
35
69
  - Fixed `_log` setting the root logging level to INFO for all packages (#296)
36
70
 
37
71
  ## 2.1.4
38
72
 
39
73
  ### Changes
74
+
40
75
  - Added `alternative` argument to `decoupler.mt.query_set`. By default `'greater'`, before it was `'two-sided'`
41
76
  - Unpinned `scipy` version limit
42
77
 
43
78
  ### Bugfixes
79
+
44
80
  - Fixed missing progressbar for `decoupler._download._download`
45
81
  - Added missing `decoupler.mt.query_set` documentation
46
82
 
47
83
  ## 2.1.3
48
84
 
49
85
  ### Changes
86
+
50
87
  - `pp.adjmat` now returns the same features as used as input instead of the subset of `net`
51
88
  - `pp.pseudobulk` now returns the same order features as used as input instead of shuffling them
52
89
  - Added a dedicated header and 5 attemps to `_download` to mitigate 429 Client Error from Zenodo downloads
@@ -54,6 +91,7 @@ and this project adheres to [Semantic Versioning][].
54
91
  ## 2.1.2
55
92
 
56
93
  ### Added
94
+
57
95
  - `pp.query_set` to test overlap between a given feature set against a database of sets
58
96
 
59
97
  ### Changes
@@ -65,10 +103,12 @@ and this project adheres to [Semantic Versioning][].
65
103
  ## 2.1.1
66
104
 
67
105
  ### Added
106
+
68
107
  - mypy checks in CI
69
108
  - notebook checks in CI
70
109
 
71
110
  ### Bugfixes
111
+
72
112
  - Fixed error in `decoupler.pp.pseudobulk` when `adata.obs_names` were not unique, now throws verbose error
73
113
  - Fixed corner case in `decoupler.mt.gsea` when p-values were infitite and could not be corrected
74
114
 
@@ -81,41 +121,49 @@ and this project adheres to [Semantic Versioning][].
81
121
  - Enrichment methods and pseudobulking now work with backed AnnData objects, useful when working with big datasets and memory is limited
82
122
 
83
123
  ### Bugfixes
124
+
84
125
  - Fixed error in `pl.obsm` where default value of `cmap_obs` was not properly set.
85
126
 
86
127
  ## 2.0.7
87
128
 
88
129
  ### Changes
130
+
89
131
  - Added `pre-commit` functionality to the repository
90
132
 
91
133
  ## 2.0.6
92
134
 
93
135
  ### Changes
136
+
94
137
  - Modified links and paths to follow scverse's repository
95
138
 
96
139
  ## 2.0.5
97
140
 
98
141
  ### Bugfixes
142
+
99
143
  - Fixed error message when extra dependencies where not installed
100
144
 
101
145
  ## 2.0.4
102
146
 
103
147
  ### Bugfixes
148
+
104
149
  - Fixed `dcor` import bug as an external dependency
105
150
 
106
151
  ## 2.0.3
107
152
 
108
153
  ### Bugfixes
154
+
109
155
  - Fixed error in `pp.pseudobulk` when obs columns were not categorical
110
156
 
111
157
  ## 2.0.2
112
158
 
113
159
  ### Changes
160
+
114
161
  - Allowed ordering functions (`pp.bin_order`, `pl.order` and `pl.order_targets`) not to be bound between 0 and 1
115
162
  - Added ipywidgets as dependency
116
163
  - Silenced xgboost warnings
117
164
 
118
165
  ### Bugfixes
166
+
119
167
  - Handled corner case in `bm.metric.auc` when scores are all 0
120
168
  - Fixed error in `bm.metric.hmean` when metrics were str instead of list
121
169
  - Fixed error when `obs` column is a list in `pp.pseudobulk`
@@ -123,6 +171,7 @@ and this project adheres to [Semantic Versioning][].
123
171
  ## 2.0.1
124
172
 
125
173
  ### Bugfixes
174
+
126
175
  - Fixed an error in `pp.pseudobulk` when handling empty samples or features
127
176
 
128
177
  ## 2.0.0
@@ -149,7 +198,7 @@ All functions have been rewritten to follow the new API, errors when running pre
149
198
  - Fixed `collectri` to the publication version instead of the OmniPath one
150
199
  - Made `progeny` only return significant genes by default instead of the top N genes per pathway
151
200
  - Plots are now in a new `pl` module
152
- - Use `decoupler.pl.<plot_name>` to call a plot
201
+ - Use `decoupler.pl.<plot_name>` to call a plot
153
202
  - They use a common class `Plotter` to make it easier to share arguments between them
154
203
  - `plot_violins` has been deprecated
155
204
  - Names that have changed
@@ -169,7 +218,7 @@ All functions have been rewritten to follow the new API, errors when running pre
169
218
  ### Added
170
219
 
171
220
  - `ds` module with functions to download several datasets at different resolutions
172
- - Bulk: `hsctgfb` and `knocktf`
221
+ - Bulk: `hsctgfb` and `knocktf`
173
222
  - Single-cell: `pbmc3k`, `covid5k` and `erygast1k`
174
223
  - Spatial: `msvisium`
175
224
  - Toy data: `toy` and `toy_bench`
@@ -1,8 +1,8 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: decoupler
3
- Version: 2.2.0
3
+ Version: 2.3.1
4
4
  Summary: Python package to perform enrichment analysis from omics data.
5
- Project-URL: Documentation, https://decoupler.readthedocs.io/
5
+ Project-URL: Documentation, https://decoupler.scverse.org/
6
6
  Project-URL: Homepage, https://github.com/scverse/decoupler
7
7
  Project-URL: Source, https://github.com/scverse/decoupler
8
8
  Author: Pau Badia i Mompel
@@ -39,11 +39,11 @@ License: BSD 3-Clause License
39
39
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
40
  License-File: LICENSE
41
41
  Classifier: Programming Language :: Python :: 3 :: Only
42
- Classifier: Programming Language :: Python :: 3.11
43
42
  Classifier: Programming Language :: Python :: 3.12
44
43
  Classifier: Programming Language :: Python :: 3.13
45
44
  Classifier: Programming Language :: Python :: 3.14
46
- Requires-Python: >=3.11
45
+ Classifier: Programming Language :: Python :: 3.15
46
+ Requires-Python: >=3.12
47
47
  Requires-Dist: adjusttext
48
48
  Requires-Dist: anndata
49
49
  Requires-Dist: docrep
@@ -56,6 +56,7 @@ Requires-Dist: tqdm
56
56
  Description-Content-Type: text/markdown
57
57
 
58
58
  # decoupler - Ensemble of methods to infer enrichment scores
59
+
59
60
  <img src="https://raw.githubusercontent.com/scverse/decoupler/refs/heads/main/docs/_static/images/logo.svg" align="right" width="120" class="no-scaled-link" />
60
61
 
61
62
  [![Tests][badge-tests]][tests]
@@ -86,7 +87,7 @@ Description-Content-Type: text/markdown
86
87
  `decoupler` is a python package containing different enrichment statistical methods to extract biologically driven scores from omics data within a unified framework.
87
88
  This is its faster and memory efficient Python implementation, a deprecated version in R can be found [here](https://github.com/saezlab/decoupler).
88
89
 
89
- [//]: # (numfocus-fiscal-sponsor-attribution)
90
+ [//]: # "numfocus-fiscal-sponsor-attribution"
90
91
 
91
92
  decoupler 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/).
92
93
  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.
@@ -107,7 +108,7 @@ in particular, the [API documentation][].
107
108
 
108
109
  ## Installation
109
110
 
110
- You need to have Python 3.11 or newer installed on your system.
111
+ You need to have Python 3.12 or newer installed on your system.
111
112
  If you don't have Python installed, we recommend installing [uv][].
112
113
 
113
114
  There are several alternative options to install decoupler:
@@ -136,19 +137,15 @@ mamba create -n=dcp conda-forge::decoupler-py
136
137
  pip install git+https://github.com/scverse/decoupler.git@main
137
138
  ```
138
139
 
139
- ## Claude Code Skill
140
+ ## Agent Skill
140
141
 
141
- decoupler ships an [Agent Skill](https://docs.claude.com/en/docs/claude-code/skills) for [Claude Code](https://claude.com/claude-code) that teaches the agent to use the library correctly. Install it once into your personal skills directory:
142
+ decoupler ships an [Agent Skill](https://docs.claude.com/en/docs/claude-code/skills) that teaches coding agents to use the library correctly. Install it into your agent's skills directory by choosing a framework with `--agent {claude,codex,agents,claude-science}` (or an explicit directory with `--dest`):
142
143
 
143
144
  ```bash
144
- decoupler-install-skills
145
+ decoupler-install-skills --agent claude
145
146
  ```
146
147
 
147
- This copies the skill to `~/.claude/skills/decoupler/`, making it available in **every** project (re-run with `--force` after upgrading). Once installed, just ask Claude Code to do decoupler tasks ("find the most active TFs in this cell cluster", "score hallmark gene sets with ora", "build a consensus across methods") and the skill is consulted automatically. To avoid copying into your home directory, point Claude Code at the bundled copy instead:
148
-
149
- ```bash
150
- export CLAUDE_SKILLS_PATH="$(decoupler-install-skills --print-path)"
151
- ```
148
+ Re-run with `--force` after upgrading, use `--check` to see whether an installed copy is up to date, or `--print-path` to show where the bundled copy lives inside the package.
152
149
 
153
150
  ## Release notes
154
151
 
@@ -159,22 +156,30 @@ See the [changelog][].
159
156
  For questions and help requests, you can reach out in the [scverse discourse][].
160
157
  If you found a bug, please use the [issue tracker][].
161
158
 
159
+ ## License
160
+
161
+ Enrichment methods inside decoupler can be used for academic or commercial purposes, except `viper` which holds a non-commercial license.
162
+
163
+ The data redistributed by OmniPath does not have a single license, each original resource has its own. By default, `decoupler`
164
+ assumes an academic license, but commercial or nonprofit licenses can be specified in the `license` parameter of `decoupler`'s OmniPath functions.
165
+ [Here](https://omnipathdb.org/info) one can find the license information of all the resources in OmniPath.
166
+
162
167
  ## Citation
163
168
 
164
169
  > Badia-i-Mompel P., Vélez Santiago J., Braunger J., Geiss C., Dimitrov D.,
165
- Müller-Dott S., Taus P., Dugourd A., Holland C.H., Ramirez Flores R.O.
166
- and Saez-Rodriguez J. 2022. decoupleR: Ensemble of computational methods
167
- to infer biological activities from omics data. Bioinformatics Advances.
168
- <https://doi.org/10.1093/bioadv/vbac016>
170
+ > Müller-Dott S., Taus P., Dugourd A., Holland C.H., Ramirez Flores R.O.
171
+ > and Saez-Rodriguez J. 2022. decoupleR: Ensemble of computational methods
172
+ > to infer biological activities from omics data. Bioinformatics Advances.
173
+ > <https://doi.org/10.1093/bioadv/vbac016>
169
174
 
170
175
  [uv]: https://github.com/astral-sh/uv
171
176
  [scverse discourse]: https://discourse.scverse.org/
172
177
  [scverse]: https://scverse.org/
173
178
  [issue tracker]: https://github.com/scverse/decoupler/issues
174
179
  [tests]: https://github.com/scverse/decoupler/actions/workflows/test.yaml
175
- [documentation]: https://decoupler.readthedocs.io
176
- [changelog]: https://decoupler.readthedocs.io/en/latest/changelog.html
177
- [api documentation]: https://decoupler.readthedocs.io/en/latest/api.html
180
+ [documentation]: https://decoupler.scverse.org/
181
+ [changelog]: https://decoupler.scverse.org/page/changelog.html
182
+ [api documentation]: https://decoupler.scverse.org/page/api.html
178
183
  [pypi]: https://pypi.org/project/decoupler
179
184
  [down]: https://pepy.tech/project/decoupler
180
185
  [conda]: https://anaconda.org/conda-forge/decoupler-py