bonesistools 1.2.5__tar.gz → 1.2.6__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 (164) hide show
  1. {bonesistools-1.2.5 → bonesistools-1.2.6}/.gitignore +1 -0
  2. {bonesistools-1.2.5 → bonesistools-1.2.6}/PKG-INFO +2 -1
  3. {bonesistools-1.2.5 → bonesistools-1.2.6}/pyproject.toml +2 -1
  4. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/__init__.py +3 -0
  5. bonesistools-1.2.6/src/bonesistools/_metadata.py +70 -0
  6. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/_orthologs.py +116 -9
  7. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/_genesyn.py +7 -3
  8. bonesistools-1.2.6/src/bonesistools/sctools/_stats.py +90 -0
  9. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/datasets/__init__.py +8 -8
  10. bonesistools-1.2.6/src/bonesistools/sctools/datasets/_geo.py +475 -0
  11. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_graph.py +62 -4
  12. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_scatterplot.py +6 -0
  13. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/preprocessing/__init__.py +12 -2
  14. bonesistools-1.2.5/src/bonesistools/sctools/preprocessing/_simple.py → bonesistools-1.2.6/src/bonesistools/sctools/preprocessing/_filter.py +1 -55
  15. bonesistools-1.2.6/src/bonesistools/sctools/preprocessing/_simple.py +63 -0
  16. bonesistools-1.2.6/src/bonesistools/sctools/preprocessing/_transform.py +491 -0
  17. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/__init__.py +11 -5
  18. bonesistools-1.2.6/src/bonesistools/sctools/tools/_binarize.py +246 -0
  19. bonesistools-1.2.6/src/bonesistools/sctools/tools/_clustering.py +649 -0
  20. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_embedding.py +18 -1
  21. bonesistools-1.2.6/src/bonesistools/sctools/tools/_graph.py +286 -0
  22. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_markers.py +262 -3
  23. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_neighbors.py +27 -12
  24. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_regress.py +19 -34
  25. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_stats.py +359 -23
  26. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_utils.py +42 -23
  27. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_influence_graph_distances.py +2 -1
  28. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/dbs/test_ncbi.py +4 -4
  29. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/reproducibility/test_reproducibility_stats.py +2 -3
  30. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/reproducibility/test_reproducibility_workflow.py +9 -5
  31. bonesistools-1.2.6/tests/sct/datasets/test_geo.py +293 -0
  32. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_graph.py +53 -0
  33. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/preprocessing/test_duplicates.py +19 -9
  34. bonesistools-1.2.6/tests/sct/preprocessing/test_transform.py +851 -0
  35. bonesistools-1.2.6/tests/sct/tools/test_binarize.py +89 -0
  36. bonesistools-1.2.6/tests/sct/tools/test_classification.py +62 -0
  37. bonesistools-1.2.6/tests/sct/tools/test_clustering.py +337 -0
  38. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_embedding.py +47 -0
  39. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_knnsc.py +79 -0
  40. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_markers.py +281 -1
  41. bonesistools-1.2.5/tests/sct/tools/test_graph_neighbors_classification.py → bonesistools-1.2.6/tests/sct/tools/test_neighbors.py +91 -95
  42. bonesistools-1.2.6/tests/sct/tools/test_paga.py +140 -0
  43. bonesistools-1.2.6/tests/sct/tools/test_regress.py +219 -0
  44. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_stats.py +430 -34
  45. bonesistools-1.2.6/tests/sct/tools/test_utils.py +391 -0
  46. bonesistools-1.2.6/tests/test_import.py +24 -0
  47. bonesistools-1.2.5/src/bonesistools/sctools/tools/_clustering.py +0 -264
  48. bonesistools-1.2.5/src/bonesistools/sctools/tools/_graph.py +0 -105
  49. bonesistools-1.2.5/tests/sct/tools/test_clustering.py +0 -101
  50. bonesistools-1.2.5/tests/sct/tools/test_utils.py +0 -207
  51. {bonesistools-1.2.5 → bonesistools-1.2.6}/LICENSE +0 -0
  52. {bonesistools-1.2.5 → bonesistools-1.2.6}/README.md +0 -0
  53. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/_compat.py +0 -0
  54. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/_typing.py +0 -0
  55. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/_validation.py +0 -0
  56. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/_warnings.py +0 -0
  57. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/__init__.py +0 -0
  58. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/__init__.py +0 -0
  59. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_algebra.py +0 -0
  60. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_boolean.py +0 -0
  61. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_hypercube.py +0 -0
  62. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_parser.py +0 -0
  63. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_representation.py +0 -0
  64. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_structure.py +0 -0
  65. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_algebra/_typing.py +0 -0
  66. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_network/__init__.py +0 -0
  67. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_network/_network.py +0 -0
  68. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_network/_parser.py +0 -0
  69. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/boolean_network/_typing.py +0 -0
  70. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/__init__.py +0 -0
  71. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_algorithms.py +0 -0
  72. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_distances.py +0 -0
  73. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_influence_graph.py +0 -0
  74. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_parser.py +0 -0
  75. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_scoring.py +0 -0
  76. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/influence_graph/_typing.py +0 -0
  77. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/plotting/__init__.py +0 -0
  78. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/plotting/_graphviz.py +0 -0
  79. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/plotting/_styles.py +0 -0
  80. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/boolpy/plotting/_svg.py +0 -0
  81. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/__init__.py +0 -0
  82. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/__init__.py +0 -0
  83. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_anole_lizard_hcop.tsv.gz +0 -0
  84. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_c.elegans_hcop.tsv.gz +0 -0
  85. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_cat_hcop.tsv.gz +0 -0
  86. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_cattle_hcop.tsv.gz +0 -0
  87. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_chicken_hcop.tsv.gz +0 -0
  88. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_chimpanzee_hcop.tsv.gz +0 -0
  89. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_dog_hcop.tsv.gz +0 -0
  90. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_fruitfly_hcop.tsv.gz +0 -0
  91. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_horse_hcop.tsv.gz +0 -0
  92. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_macaque_hcop.tsv.gz +0 -0
  93. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_mouse_hcop.tsv.gz +0 -0
  94. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_opossum_hcop.tsv.gz +0 -0
  95. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_pig_hcop.tsv.gz +0 -0
  96. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_platypus_hcop.tsv.gz +0 -0
  97. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_rat_hcop.tsv.gz +0 -0
  98. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_s.cerevisiae_hcop.tsv.gz +0 -0
  99. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_s.pombe_hcop.tsv.gz +0 -0
  100. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_xenopus_hcop.tsv.gz +0 -0
  101. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/hcop/data/human_zebrafish_hcop.tsv.gz +0 -0
  102. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/__init__.py +0 -0
  103. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/_typing.py +0 -0
  104. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/data/gi/escherichia_coli_gene_info.tsv.gz +0 -0
  105. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/data/gi/homo_sapiens_gene_info.tsv.gz +0 -0
  106. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/ncbi/data/gi/mus_musculus_gene_info.tsv.gz +0 -0
  107. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/omnipath/__init__.py +0 -0
  108. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/omnipath/_archive.py +0 -0
  109. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/omnipath/_collectri.py +0 -0
  110. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/databases/omnipath/_dorothea.py +0 -0
  111. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/grntools/__init__.py +0 -0
  112. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/py.typed +0 -0
  113. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/__init__.py +0 -0
  114. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/_dependencies.py +0 -0
  115. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/_metadata.py +0 -0
  116. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/_typing.py +0 -0
  117. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/_validation.py +0 -0
  118. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/datasets/nestorowa_hvg.h5ad +0 -0
  119. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/__init__.py +0 -0
  120. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_barplot.py +0 -0
  121. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_colors.py +0 -0
  122. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_density.py +0 -0
  123. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_distribution.py +0 -0
  124. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_figure.py +0 -0
  125. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_typing.py +0 -0
  126. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/plotting/_utils.py +0 -0
  127. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/preprocessing/_duplicates.py +0 -0
  128. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/preprocessing/_genename.py +0 -0
  129. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/preprocessing/_transfer.py +0 -0
  130. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_classification.py +4 -4
  131. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_conversion.py +0 -0
  132. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_maths.py +0 -0
  133. {bonesistools-1.2.5 → bonesistools-1.2.6}/src/bonesistools/sctools/tools/_write.py +0 -0
  134. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/conftest.py +0 -0
  135. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_aggregated_influence_graph.py +0 -0
  136. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_boolean_algebra.py +0 -0
  137. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_boolean_network.py +0 -0
  138. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_boolean_network_ensemble.py +0 -0
  139. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_hypercube.py +0 -0
  140. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_hypercube_collection.py +0 -0
  141. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_influence_graph.py +0 -0
  142. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_influence_graph_parser.py +0 -0
  143. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_influence_graph_scoring.py +0 -0
  144. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_partial_boolean.py +0 -0
  145. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/bpy/test_plotting_styles.py +0 -0
  146. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/dbs/test_hcop.py +0 -0
  147. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/dbs/test_hcop_orthologs.py +0 -0
  148. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/dbs/test_omnipath.py +0 -0
  149. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/reproducibility/test_reproducibility_omnipath.py +0 -0
  150. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/conftest.py +0 -0
  151. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_barplot.py +0 -0
  152. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_colors.py +0 -0
  153. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_density.py +0 -0
  154. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_distribution.py +0 -0
  155. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_figure.py +0 -0
  156. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/plotting/test_scatterplot.py +0 -0
  157. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/preprocessing/test_genename.py +0 -0
  158. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/preprocessing/test_simple.py +0 -0
  159. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/preprocessing/test_transfer_obs.py +0 -0
  160. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/test_typing.py +0 -0
  161. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_conversion.py +0 -0
  162. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_maths.py +0 -0
  163. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/sct/tools/test_write.py +0 -0
  164. {bonesistools-1.2.5 → bonesistools-1.2.6}/tests/test_validation.py +0 -0
@@ -62,6 +62,7 @@ Thumbs.db
62
62
  /tmp/
63
63
  /temp/
64
64
  *.tmp
65
+ *tmp*
65
66
  *.bak
66
67
  *.bak.tsv
67
68
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bonesistools
3
- Version: 1.2.5
3
+ Version: 1.2.6
4
4
  Summary: Bioinformatics toolkit for upstream and downstream analyses around the BoNesis framework
5
5
  Project-URL: Repository, https://github.com/bnediction/bonesistools
6
6
  Author: Théo Roncalli
@@ -551,6 +551,7 @@ Requires-Python: >=3.7
551
551
  Requires-Dist: anndata>=0.8
552
552
  Requires-Dist: boolean-py>=4.0
553
553
  Requires-Dist: h5py>=3.7
554
+ Requires-Dist: importlib-metadata; python_version < '3.8'
554
555
  Requires-Dist: importlib-resources; python_version < '3.9'
555
556
  Requires-Dist: matplotlib>=3.5
556
557
  Requires-Dist: networkx>=2.1
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "bonesistools"
7
7
  description = "Bioinformatics toolkit for upstream and downstream analyses around the BoNesis framework"
8
- version = "1.2.5"
8
+ version = "1.2.6"
9
9
  license = {file = "LICENSE"}
10
10
  credits = ["BNeDiction", "PEPR Santé Numérique 2030"]
11
11
  authors = [
@@ -41,6 +41,7 @@ classifiers = [
41
41
  ]
42
42
  requires-python = ">=3.7"
43
43
  dependencies = [
44
+ "importlib-metadata; python_version < '3.8'",
44
45
  "importlib_resources; python_version < '3.9'",
45
46
  "typing-extensions>=4.0",
46
47
  "numpy>=1.21",
@@ -29,6 +29,7 @@ from typing import List as _List
29
29
  from . import boolpy as bpy
30
30
  from . import databases as dbs
31
31
  from . import sctools as sct
32
+ from ._metadata import package_version as _package_version
32
33
  from ._warnings import _warn_deprecated
33
34
 
34
35
  if _TYPE_CHECKING:
@@ -37,8 +38,10 @@ if _TYPE_CHECKING:
37
38
  del annotations
38
39
 
39
40
  __credits__ = "BNeDiction; PEPR Santé Numérique 2030"
41
+ __version__ = _package_version()
40
42
 
41
43
  __all__ = [
44
+ "__version__",
42
45
  "sct",
43
46
  "bpy",
44
47
  "dbs",
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env python
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from pathlib import Path
7
+ from typing import Any, Optional, cast
8
+
9
+
10
+ def package_version(distribution: str = "bonesistools") -> str:
11
+ """
12
+ Return the installed package version.
13
+
14
+ When the package is imported directly from a source checkout, distribution
15
+ metadata can be unavailable. In that case, read the version from
16
+ `pyproject.toml`.
17
+ """
18
+
19
+ source_version = _pyproject_version()
20
+ if source_version is not None:
21
+ return source_version
22
+
23
+ installed_version = _installed_version(distribution)
24
+ return installed_version if installed_version is not None else "0+unknown"
25
+
26
+
27
+ def _installed_version(distribution: str) -> Optional[str]:
28
+
29
+ try:
30
+ metadata = importlib.import_module("importlib.metadata")
31
+ except ImportError: # pragma: no cover - Python 3.7 compatibility
32
+ metadata = importlib.import_module("importlib_metadata")
33
+
34
+ try:
35
+ return cast(str, cast(Any, metadata).version(distribution))
36
+ except Exception as error:
37
+ if error.__class__.__name__ == "PackageNotFoundError":
38
+ return None
39
+ raise
40
+
41
+
42
+ def _pyproject_version() -> Optional[str]:
43
+
44
+ pyproject = _find_pyproject()
45
+ if pyproject is None:
46
+ return None
47
+
48
+ in_project = False
49
+ for line in pyproject.read_text(encoding="utf-8").splitlines():
50
+ stripped = line.strip()
51
+ if stripped == "[project]":
52
+ in_project = True
53
+ continue
54
+ if in_project and stripped.startswith("["):
55
+ return None
56
+ if in_project and stripped.startswith("version"):
57
+ _, value = stripped.split("=", 1)
58
+ return value.strip().strip("\"'")
59
+
60
+ return None
61
+
62
+
63
+ def _find_pyproject() -> Optional[Path]:
64
+
65
+ for parent in Path(__file__).resolve().parents:
66
+ pyproject = parent / "pyproject.toml"
67
+ if pyproject.exists():
68
+ return pyproject
69
+
70
+ return None
@@ -14,6 +14,7 @@ from typing import (
14
14
  List,
15
15
  Optional,
16
16
  Sequence,
17
+ Set,
17
18
  Tuple,
18
19
  Union,
19
20
  cast,
@@ -131,11 +132,84 @@ class Orthologs:
131
132
  table=table,
132
133
  )
133
134
 
135
+ @overload
136
+ def __call__(
137
+ self,
138
+ data: str,
139
+ *args: Any,
140
+ **kwargs: Any,
141
+ ) -> List[str]: ...
142
+
143
+ @overload
144
+ def __call__(
145
+ self,
146
+ data: List[str],
147
+ *args: Any,
148
+ **kwargs: Any,
149
+ ) -> List[str]: ...
150
+
151
+ @overload
152
+ def __call__(
153
+ self,
154
+ data: Tuple[str, ...],
155
+ *args: Any,
156
+ **kwargs: Any,
157
+ ) -> Tuple[str, ...]: ...
158
+
159
+ @overload
160
+ def __call__(
161
+ self,
162
+ data: Set[str],
163
+ *args: Any,
164
+ **kwargs: Any,
165
+ ) -> Set[str]: ...
166
+
167
+ @overload
168
+ def __call__(
169
+ self,
170
+ data: Sequence[str],
171
+ *args: Any,
172
+ **kwargs: Any,
173
+ ) -> Sequence[str]: ...
174
+
175
+ @overload
176
+ def __call__(
177
+ self,
178
+ data: InteractionList,
179
+ *args: Any,
180
+ **kwargs: Any,
181
+ ) -> InteractionList: ...
182
+
183
+ @overload
184
+ def __call__(
185
+ self,
186
+ data: pd.DataFrame,
187
+ *args: Any,
188
+ **kwargs: Any,
189
+ ) -> pd.DataFrame: ...
190
+
191
+ @overload
192
+ def __call__(
193
+ self,
194
+ data: Graph[Any],
195
+ *args: Any,
196
+ **kwargs: Any,
197
+ ) -> Graph[Any]: ...
198
+
199
+ @overload
200
+ def __call__(
201
+ self,
202
+ data: "BooleanNetworkLike",
203
+ *args: Any,
204
+ **kwargs: Any,
205
+ ) -> "BooleanNetworkLike": ...
206
+
134
207
  def __call__(
135
208
  self,
136
209
  data: Union[
137
210
  str,
138
211
  Sequence[str],
212
+ Set[str],
139
213
  InteractionList,
140
214
  pd.DataFrame,
141
215
  Graph[Any],
@@ -143,7 +217,7 @@ class Orthologs:
143
217
  ],
144
218
  *args: Any,
145
219
  **kwargs: Any,
146
- ):
220
+ ) -> Any:
147
221
  """
148
222
  Translate genes in a supported object.
149
223
 
@@ -153,7 +227,8 @@ class Orthologs:
153
227
 
154
228
  Parameters
155
229
  ----------
156
- data: str, sequence, InteractionList, DataFrame, Graph or BooleanNetworkLike
230
+ data: str, sequence, set, InteractionList, DataFrame, Graph or
231
+ BooleanNetworkLike
157
232
  Object containing human gene symbols to translate.
158
233
  *args: Any
159
234
  Positional arguments forwarded to the selected translation method.
@@ -181,7 +256,11 @@ class Orthologs:
181
256
  if (
182
257
  isinstance(data, SequenceInstance) and not isinstance(data, str)
183
258
  ) or isinstance(data, set):
184
- return self.translate_sequence(cast(Sequence[str], data), *args, **kwargs)
259
+ return self.translate_sequence(
260
+ cast(Union[Sequence[str], Set[str]], data),
261
+ *args,
262
+ **kwargs,
263
+ )
185
264
  if isinstance(data, pd.DataFrame):
186
265
  return self.translate_df(data, *args, **kwargs)
187
266
  if isinstance(data, Graph):
@@ -190,7 +269,7 @@ class Orthologs:
190
269
  return self.translate_bn(data, *args, **kwargs)
191
270
  raise TypeError(
192
271
  f"unsupported argument type for 'data': "
193
- f"expected str, sequence, interaction list, {pd.DataFrame}, {Graph} "
272
+ f"expected str, sequence, set, interaction list, {pd.DataFrame}, {Graph} "
194
273
  f"or Boolean network-like object but received {type(data)}"
195
274
  )
196
275
 
@@ -257,13 +336,41 @@ class Orthologs:
257
336
  return list(self._mapping[gene])
258
337
  return [gene] if keep_if_missing else []
259
338
 
339
+ @overload
340
+ def translate_sequence(
341
+ self,
342
+ genes: List[str],
343
+ keep_if_missing: bool = True,
344
+ ) -> List[str]: ...
345
+
346
+ @overload
347
+ def translate_sequence(
348
+ self,
349
+ genes: Tuple[str, ...],
350
+ keep_if_missing: bool = True,
351
+ ) -> Tuple[str, ...]: ...
352
+
353
+ @overload
354
+ def translate_sequence(
355
+ self,
356
+ genes: Set[str],
357
+ keep_if_missing: bool = True,
358
+ ) -> Set[str]: ...
359
+
360
+ @overload
260
361
  def translate_sequence(
261
362
  self,
262
363
  genes: Sequence[str],
263
364
  keep_if_missing: bool = True,
264
- ) -> Sequence[str]:
365
+ ) -> Sequence[str]: ...
366
+
367
+ def translate_sequence(
368
+ self,
369
+ genes: Union[Sequence[str], Set[str]],
370
+ keep_if_missing: bool = True,
371
+ ) -> Union[Sequence[str], Set[str]]:
265
372
  """
266
- Translate a sequence of human gene symbols.
373
+ Translate a sequence or set of human gene symbols.
267
374
 
268
375
  Each gene is translated to one target symbol using the deterministic
269
376
  HCOP ranking. Missing genes are either kept or removed depending on
@@ -271,15 +378,15 @@ class Orthologs:
271
378
 
272
379
  Parameters
273
380
  ----------
274
- genes: sequence of str
381
+ genes: sequence or set of str
275
382
  Human gene symbols to translate.
276
383
  keep_if_missing: bool (default: True)
277
384
  If True, keep original gene symbols with no ortholog.
278
385
 
279
386
  Returns
280
387
  -------
281
- sequence of str
282
- Translated sequence, preserving the input sequence type when
388
+ sequence or set of str
389
+ Translated values, preserving the input collection type when
283
390
  possible.
284
391
  """
285
392
 
@@ -386,7 +386,7 @@ class GeneSynonyms:
386
386
  self.ncbi_file = self.__resolve_gene_info_file(self.version)
387
387
 
388
388
  self.__download_gene_info()
389
- self.__initialize_mappings(show_warnings=show_warnings)
389
+ self._initialize_mappings(show_warnings=show_warnings)
390
390
 
391
391
  def __call__(
392
392
  self,
@@ -1038,7 +1038,7 @@ class GeneSynonyms:
1038
1038
  self.ncbi_file = self.__resolve_gene_info_file(self.version)
1039
1039
 
1040
1040
  self.__download_gene_info()
1041
- self.__initialize_mappings(show_warnings=show_warnings)
1041
+ self._initialize_mappings(show_warnings=show_warnings)
1042
1042
 
1043
1043
  def get_mapping(self):
1044
1044
  """
@@ -1693,7 +1693,7 @@ class GeneSynonyms:
1693
1693
 
1694
1694
  return gene_aliases_mapping
1695
1695
 
1696
- def __initialize_mappings(self, show_warnings: bool) -> None:
1696
+ def _initialize_mappings(self, show_warnings: bool) -> None:
1697
1697
 
1698
1698
  self.show_warnings = show_warnings
1699
1699
  try:
@@ -1724,6 +1724,10 @@ class GeneSynonyms:
1724
1724
  *self.databases,
1725
1725
  )
1726
1726
 
1727
+ def __initialize_mappings(self, show_warnings: bool) -> None:
1728
+
1729
+ self._initialize_mappings(show_warnings=show_warnings)
1730
+
1727
1731
  @support_legacy_gene_synonyms_args
1728
1732
  def __conversion_function(
1729
1733
  self,
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env python
2
+
3
+ from __future__ import annotations
4
+
5
+ import warnings
6
+ from typing import Any, Optional, Tuple, cast
7
+
8
+ import numpy as np
9
+ from scipy import sparse
10
+
11
+
12
+ def _column_mean_variance(
13
+ matrix: Any,
14
+ max_memory: Optional[int] = None,
15
+ ) -> Tuple[np.ndarray, np.ndarray]:
16
+
17
+ n_obs = int(matrix.shape[0])
18
+ n_vars = int(matrix.shape[1])
19
+ if sparse.issparse(matrix):
20
+ sparse_format = getattr(matrix, "format", None)
21
+ if sparse_format == "csr":
22
+ sums = np.bincount(
23
+ matrix.indices,
24
+ weights=matrix.data,
25
+ minlength=n_vars,
26
+ )
27
+ squared_sums = np.bincount(
28
+ matrix.indices,
29
+ weights=matrix.data * matrix.data,
30
+ minlength=n_vars,
31
+ )
32
+ elif sparse_format == "csc":
33
+ sums = np.zeros(n_vars, dtype=np.float64)
34
+ squared_sums = np.zeros(n_vars, dtype=np.float64)
35
+ nonempty_columns = np.diff(matrix.indptr) > 0
36
+ if np.any(nonempty_columns):
37
+ starts = matrix.indptr[:-1][nonempty_columns]
38
+ data = np.asarray(matrix.data, dtype=np.float64)
39
+ sums[nonempty_columns] = np.add.reduceat(data, starts)
40
+ squared_sums[nonempty_columns] = np.add.reduceat(data * data, starts)
41
+ else:
42
+ return _column_mean_variance(
43
+ matrix.tocsr(),
44
+ max_memory=max_memory,
45
+ )
46
+
47
+ means = sums / n_obs
48
+ mean_squares = squared_sums / n_obs
49
+ else:
50
+ dense_matrix = cast(np.ndarray, matrix)
51
+ means = np.empty(n_vars, dtype=np.float64)
52
+ mean_squares = np.empty(n_vars, dtype=np.float64)
53
+ chunk_size = _dense_column_chunk_size(dense_matrix, max_memory)
54
+ for start in range(0, n_vars, chunk_size):
55
+ end = min(start + chunk_size, n_vars)
56
+ dense_chunk = dense_matrix[:, start:end]
57
+ means[start:end] = np.asarray(
58
+ dense_chunk.mean(axis=0, dtype=np.float64)
59
+ ).ravel()
60
+ squared_chunk = np.multiply(dense_chunk, dense_chunk)
61
+ mean_squares[start:end] = np.asarray(
62
+ squared_chunk.mean(axis=0, dtype=np.float64)
63
+ ).ravel()
64
+
65
+ variances = np.maximum(mean_squares - means**2, 0)
66
+ if n_obs > 1:
67
+ variances *= n_obs / (n_obs - 1)
68
+ return means, variances
69
+
70
+
71
+ def _dense_column_chunk_size(
72
+ matrix: np.ndarray,
73
+ max_memory: Optional[int],
74
+ ) -> int:
75
+
76
+ n_obs = int(matrix.shape[0])
77
+ n_vars = int(matrix.shape[1])
78
+ if max_memory is None:
79
+ return max(1, n_vars)
80
+
81
+ bytes_per_value = np.dtype(matrix.dtype).itemsize
82
+ bytes_per_column = n_obs * bytes_per_value
83
+ if max_memory < bytes_per_column:
84
+ warnings.warn(
85
+ "Requested memory budget is smaller than the memory required for a "
86
+ "single variable. Computation will proceed with chunk_size=1.",
87
+ RuntimeWarning,
88
+ stacklevel=2,
89
+ )
90
+ return max(1, int(max_memory // bytes_per_column))
@@ -20,9 +20,12 @@ else:
20
20
  import anndata as _ad
21
21
  from anndata import AnnData as _AnnData
22
22
 
23
+ from ._geo import from_geo
24
+
23
25
  del annotations
24
26
 
25
27
  __all__ = [
28
+ "from_geo",
26
29
  "nestorowa",
27
30
  ]
28
31
 
@@ -37,14 +40,11 @@ def nestorowa() -> _AnnData:
37
40
  AnnData
38
41
  Preprocessed AnnData object containing highly variable genes.
39
42
 
40
- Notes
41
- -----
42
- Dataset derived from:
43
-
44
- Nestorowa et al. (2016)
45
- "A single-cell resolution map of mouse hematopoietic stem and "
46
- "progenitor cell differentiation"
47
- Blood 128(8): e20-e31
43
+ References
44
+ ----------
45
+ Nestorowa et al. (2016). A single-cell resolution map of mouse
46
+ hematopoietic stem and progenitor cell differentiation. Blood, 128(8),
47
+ e20-e31.
48
48
  """
49
49
 
50
50
  path = _files(__package__) / "nestorowa_hvg.h5ad"