exprmat 0.2.73__tar.gz → 0.2.77__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 (431) hide show
  1. {exprmat-0.2.73 → exprmat-0.2.77}/PKG-INFO +9 -1
  2. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/__init__.py +2 -1
  3. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/ansi.py +1 -3
  4. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/tcr.py +6 -3
  5. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/expression.py +7 -7
  6. exprmat-0.2.77/exprmat/plotting/matrix.py +276 -0
  7. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/order.py +1 -1
  8. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/track.py +25 -11
  9. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/__init__.py +1 -1
  10. exprmat-0.2.77/exprmat/preprocessing/doublets/ddetect.py +359 -0
  11. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/filter.py +1 -1
  12. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/qc.py +12 -0
  13. exprmat-0.2.77/exprmat/reader/cite/__init__.py +93 -0
  14. exprmat-0.2.77/exprmat/reader/cite/preprocessing.py +62 -0
  15. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/experiment.py +64 -32
  16. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/matcher.py +330 -328
  17. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/__init__.py +22 -0
  18. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/impute.py +1 -0
  19. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/proportion.py +194 -11
  20. exprmat-0.2.77/exprmat/reader/rna/repertoire.py +792 -0
  21. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/plot.py +135 -16
  22. exprmat-0.2.77/exprmat/repertoire/__init__.py +23 -0
  23. exprmat-0.2.77/exprmat/repertoire/analysis.py +213 -0
  24. exprmat-0.2.77/exprmat/repertoire/convergence.py +602 -0
  25. exprmat-0.2.77/exprmat/repertoire/distance.py +185 -0
  26. exprmat-0.2.77/exprmat/repertoire/plotting.py +640 -0
  27. exprmat-0.2.77/exprmat/repertoire/reference.py +206 -0
  28. {exprmat-0.2.73 → exprmat-0.2.77}/pyproject.toml +12 -4
  29. exprmat-0.2.73/exprmat/plotting/matrix.py +0 -91
  30. exprmat-0.2.73/exprmat/reader/cite/__init__.py +0 -13
  31. exprmat-0.2.73/exprmat/reader/cite/preprocessing.py +0 -31
  32. exprmat-0.2.73/exprmat/reader/rna/repertoire.py +0 -510
  33. {exprmat-0.2.73 → exprmat-0.2.77}/Cargo.lock +0 -0
  34. {exprmat-0.2.73 → exprmat-0.2.77}/Cargo.toml +0 -0
  35. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/__init__.py +0 -0
  36. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/cnmf.py +0 -0
  37. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/dbscan.py +0 -0
  38. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/gating.py +0 -0
  39. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/kmeans.py +0 -0
  40. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/leiden.py +0 -0
  41. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/nmf.py +0 -0
  42. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/rogue.py +0 -0
  43. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/sc3.py +0 -0
  44. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/seriation.py +0 -0
  45. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/spectral.py +0 -0
  46. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/utils.py +0 -0
  47. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/__init__.py +0 -0
  48. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/cnvscore.py +0 -0
  49. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/infercnv.py +0 -0
  50. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/configuration.py +0 -0
  51. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/__init__.py +0 -0
  52. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/deconv.py +0 -0
  53. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/simulation.py +0 -0
  54. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/__init__.py +0 -0
  55. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/mapping.py +0 -0
  56. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/optimizer.py +0 -0
  57. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/spatial.py +0 -0
  58. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/utils.py +0 -0
  59. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/__init__.py +0 -0
  60. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/aggregate.py +0 -0
  61. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/atac.py +0 -0
  62. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/aucell.py +0 -0
  63. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/composition.py +0 -0
  64. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/covar.py +0 -0
  65. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/de.py +0 -0
  66. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/geneset.py +0 -0
  67. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/gse.py +0 -0
  68. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/kde.py +0 -0
  69. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/recovery.py +0 -0
  70. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/sccoda.py +0 -0
  71. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/summary.py +0 -0
  72. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/dataset.py +0 -0
  73. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/gridsearch.py +0 -0
  74. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/inference.py +0 -0
  75. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/preprocessing.py +0 -0
  76. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/stats.py +0 -0
  77. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/utils.py +0 -0
  78. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/__init__.py +0 -0
  79. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/__init__.py +0 -0
  80. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/adjacency.py +0 -0
  81. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/api.py +0 -0
  82. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/augment.py +0 -0
  83. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/image_features.py +0 -0
  84. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/model.py +0 -0
  85. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/runner.py +0 -0
  86. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/trainer.py +0 -0
  87. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/__init__.py +0 -0
  88. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/adjacency.py +0 -0
  89. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/api.py +0 -0
  90. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/layers.py +0 -0
  91. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/models.py +0 -0
  92. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/morans.py +0 -0
  93. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/spagcn.py +0 -0
  94. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/svg.py +0 -0
  95. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/__init__.py +0 -0
  96. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/api.py +0 -0
  97. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/kernels.py +0 -0
  98. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/score_test.py +0 -0
  99. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/__init__.py +0 -0
  100. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/generank.py +0 -0
  101. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/linreg.py +0 -0
  102. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/moments.py +0 -0
  103. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/optimization.py +0 -0
  104. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/parallel.py +0 -0
  105. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/preprocess.py +0 -0
  106. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/pseudotime.py +0 -0
  107. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/transition.py +0 -0
  108. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/utils.py +0 -0
  109. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/velocity.py +0 -0
  110. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/__init__.py +0 -0
  111. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/infergrn.py +0 -0
  112. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/modules.py +0 -0
  113. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/prune.py +0 -0
  114. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/regressors.py +0 -0
  115. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/utils.py +0 -0
  116. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/help.py +0 -0
  117. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/__init__.py +0 -0
  118. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/augment.py +0 -0
  119. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/axis.py +0 -0
  120. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/channel.py +0 -0
  121. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/compensation.py +0 -0
  122. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/density.py +0 -0
  123. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/segmentation.py +0 -0
  124. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/tissue.py +0 -0
  125. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/transform.py +0 -0
  126. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/__init__.py +0 -0
  127. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/aggregate.py +0 -0
  128. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/__init__.py +0 -0
  129. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/api.py +0 -0
  130. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/gat.py +0 -0
  131. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/intra.py +0 -0
  132. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/model.py +0 -0
  133. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/plotting.py +0 -0
  134. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/postprocess.py +0 -0
  135. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/preprocess.py +0 -0
  136. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/relay.py +0 -0
  137. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/stats.py +0 -0
  138. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/train.py +0 -0
  139. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/utils.py +0 -0
  140. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/__init__.py +0 -0
  141. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/construction.py +0 -0
  142. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/importance.py +0 -0
  143. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/ligand.py +0 -0
  144. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/metrics.py +0 -0
  145. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/pagerank.py +0 -0
  146. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/method.py +0 -0
  147. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/__init__.py +0 -0
  148. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/cellchat.py +0 -0
  149. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/cellphonedb.py +0 -0
  150. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/connectome.py +0 -0
  151. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/geomean.py +0 -0
  152. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/logfc.py +0 -0
  153. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/natmi.py +0 -0
  154. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/rank_aggregate.py +0 -0
  155. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/scseqcomm.py +0 -0
  156. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/singlecellsignalr.py +0 -0
  157. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/pipeline.py +0 -0
  158. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/preprocess.py +0 -0
  159. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/resources.py +0 -0
  160. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/utils.py +0 -0
  161. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/__init__.py +0 -0
  162. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/engine.py +0 -0
  163. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/model.py +0 -0
  164. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/utils.py +0 -0
  165. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/__init__.py +0 -0
  166. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/__init__.py +0 -0
  167. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/bd.py +0 -0
  168. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/bmf.py +0 -0
  169. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/icm.py +0 -0
  170. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/lfnmf.py +0 -0
  171. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/lsnmf.py +0 -0
  172. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/nmf.py +0 -0
  173. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/nsnmf.py +0 -0
  174. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/pmf.py +0 -0
  175. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/pmfcc.py +0 -0
  176. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/psmf.py +0 -0
  177. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/sepnmf.py +0 -0
  178. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/snmf.py +0 -0
  179. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/snmnmf.py +0 -0
  180. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/__init__.py +0 -0
  181. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/fixed.py +0 -0
  182. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/nndsvd.py +0 -0
  183. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random.py +0 -0
  184. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random_c.py +0 -0
  185. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random_vcol.py +0 -0
  186. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/__init__.py +0 -0
  187. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/mf_fit.py +0 -0
  188. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/mf_track.py +0 -0
  189. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf.py +0 -0
  190. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_mm.py +0 -0
  191. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_ns.py +0 -0
  192. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_std.py +0 -0
  193. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/smf.py +0 -0
  194. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/__init__.py +0 -0
  195. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/linalg.py +0 -0
  196. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/utils.py +0 -0
  197. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/__init__.py +0 -0
  198. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/converter.py +0 -0
  199. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/rds.py +0 -0
  200. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/seurat.py +0 -0
  201. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/__init__.py +0 -0
  202. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/callpeak.py +0 -0
  203. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/common.py +0 -0
  204. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/coverage.py +0 -0
  205. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/footprint.py +0 -0
  206. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/__init__.py +0 -0
  207. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/constants.py +0 -0
  208. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/idr.py +0 -0
  209. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/invcdf.pyx +0 -0
  210. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/optimization.py +0 -0
  211. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/utils.py +0 -0
  212. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/linkage.py +0 -0
  213. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/motif.py +0 -0
  214. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/sequence.py +0 -0
  215. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/__init__.py +0 -0
  216. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/atac.py +0 -0
  217. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/cnmf.py +0 -0
  218. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/cnv.py +0 -0
  219. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/de.py +0 -0
  220. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/gse.py +0 -0
  221. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/icnet.py +0 -0
  222. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/knee.py +0 -0
  223. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/lr.py +0 -0
  224. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/milestone.py +0 -0
  225. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/network.py +0 -0
  226. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/palettes.py +0 -0
  227. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/proximity.py +0 -0
  228. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/sankey.py +0 -0
  229. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/sequence.py +0 -0
  230. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/summary.py +0 -0
  231. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/trajectory.py +0 -0
  232. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/utils.py +0 -0
  233. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/velocity.py +0 -0
  234. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/wgcna.py +0 -0
  235. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/__init__.py +0 -0
  236. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/correction.py +0 -0
  237. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/dirichlet_multinomial.py +0 -0
  238. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/emptydrops.py +0 -0
  239. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/estimation.py +0 -0
  240. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/multinomial.py +0 -0
  241. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/sgt.py +0 -0
  242. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/soupx.py +0 -0
  243. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/__init__.py +0 -0
  244. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/composite.py +0 -0
  245. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/scrublet.py +0 -0
  246. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/emptydrops.py +0 -0
  247. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/impute/__init__.py +0 -0
  248. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/impute/magic.py +0 -0
  249. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/integrate.py +0 -0
  250. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/linear.py +0 -0
  251. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/normal.py +0 -0
  252. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/plot.py +0 -0
  253. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/__init__.py +0 -0
  254. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/estimate.py +0 -0
  255. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/ksmooth.py +0 -0
  256. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/residual.py +0 -0
  257. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/transform.py +0 -0
  258. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sparse.py +0 -0
  259. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/uniform.py +0 -0
  260. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/__init__.py +0 -0
  261. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/accessor.py +0 -0
  262. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/__init__.py +0 -0
  263. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/derive.py +0 -0
  264. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/peaks.py +0 -0
  265. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/preprocessing.py +0 -0
  266. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/conversions.py +0 -0
  267. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/data-structure.txt +0 -0
  268. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/general/__init__.py +0 -0
  269. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/history.py +0 -0
  270. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/introspect.py +0 -0
  271. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/introspective.txt +0 -0
  272. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/metadata.py +0 -0
  273. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/atlas.py +0 -0
  274. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/bulk.py +0 -0
  275. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/cnv.py +0 -0
  276. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/geneset.py +0 -0
  277. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/getter.py +0 -0
  278. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/interaction.py +0 -0
  279. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/markers.py +0 -0
  280. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/nmf.py +0 -0
  281. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/qc.py +0 -0
  282. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/reduction.py +0 -0
  283. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/summarize.py +0 -0
  284. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/trajectory.py +0 -0
  285. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/schema.py +0 -0
  286. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/__init__.py +0 -0
  287. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/classifier.py +0 -0
  288. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/coordinates.py +0 -0
  289. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/deconv.py +0 -0
  290. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/density.py +0 -0
  291. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/domains.py +0 -0
  292. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/getter.py +0 -0
  293. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/graph.py +0 -0
  294. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/image.py +0 -0
  295. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/lr.py +0 -0
  296. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/proximity.py +0 -0
  297. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/qc.py +0 -0
  298. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/segmentation.py +0 -0
  299. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/snn.py +0 -0
  300. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/tmap.py +0 -0
  301. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/transform.py +0 -0
  302. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/static.py +0 -0
  303. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/updater.py +0 -0
  304. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/__init__.py +0 -0
  305. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/diffmap.py +0 -0
  306. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/forceatlas.py +0 -0
  307. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/mde.py +0 -0
  308. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/nn.py +0 -0
  309. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/outliers.py +0 -0
  310. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/pca.py +0 -0
  311. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/scvi.py +0 -0
  312. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/spectral.py +0 -0
  313. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/tsne.py +0 -0
  314. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/umap.py +0 -0
  315. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/__init__.py +0 -0
  316. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/landmarks.py +0 -0
  317. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/plan.md +0 -0
  318. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/projection.py +0 -0
  319. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/refinement.py +0 -0
  320. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/sampling.py +0 -0
  321. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/umap_landmarks.py +0 -0
  322. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/__init__.py +0 -0
  323. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/datatype.py +0 -0
  324. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/download.py +0 -0
  325. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/log.py +0 -0
  326. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/method.py +0 -0
  327. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/__init__.py +0 -0
  328. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/aucell.py +0 -0
  329. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/consensus.py +0 -0
  330. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/decouple.py +0 -0
  331. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/gsea.py +0 -0
  332. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/gsva.py +0 -0
  333. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/mdt.py +0 -0
  334. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/mlm.py +0 -0
  335. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/ora.py +0 -0
  336. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/pv.py +0 -0
  337. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/query_set.py +0 -0
  338. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/registry.py +0 -0
  339. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/run.py +0 -0
  340. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/udt.py +0 -0
  341. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/ulm.py +0 -0
  342. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/viper.py +0 -0
  343. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/waggr.py +0 -0
  344. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/zscore.py +0 -0
  345. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/odeps.py +0 -0
  346. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotter.py +0 -0
  347. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/__init__.py +0 -0
  348. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/barplot.py +0 -0
  349. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/dotplot.py +0 -0
  350. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_by_expr.py +0 -0
  351. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_by_prop.py +0 -0
  352. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_samples.py +0 -0
  353. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/leading_edge.py +0 -0
  354. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/network.py +0 -0
  355. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/obsbar.py +0 -0
  356. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/obsm.py +0 -0
  357. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/order.py +0 -0
  358. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/order_targets.py +0 -0
  359. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/source_targets.py +0 -0
  360. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/volcano.py +0 -0
  361. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/__init__.py +0 -0
  362. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/anndata.py +0 -0
  363. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/data.py +0 -0
  364. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/net.py +0 -0
  365. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_group.py +0 -0
  366. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_obsm.py +0 -0
  367. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_order.py +0 -0
  368. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/__init__.py +0 -0
  369. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/classifier.py +0 -0
  370. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/hd.py +0 -0
  371. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/interac.py +0 -0
  372. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ligrec.py +0 -0
  373. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/mif.py +0 -0
  374. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/nhood.py +0 -0
  375. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/niche.py +0 -0
  376. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ometiff.py +0 -0
  377. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/pattern.py +0 -0
  378. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ripley.py +0 -0
  379. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/snn.py +0 -0
  380. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/tmap.py +0 -0
  381. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/utils.py +0 -0
  382. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/visium.py +0 -0
  383. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/xenium.py +0 -0
  384. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/__init__.py +0 -0
  385. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/cytotrace.py +0 -0
  386. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/elpi.py +0 -0
  387. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/pcurve.py +0 -0
  388. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/pseudotime.py +0 -0
  389. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/root.py +0 -0
  390. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/trace.py +0 -0
  391. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/transfer/__init__.py +0 -0
  392. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/transfer/atlas.py +0 -0
  393. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/utils.py +0 -0
  394. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/wgcna/__init__.py +0 -0
  395. {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/wgcna/core.py +0 -0
  396. {exprmat-0.2.73 → exprmat-0.2.77}/license +0 -0
  397. {exprmat-0.2.73 → exprmat-0.2.77}/readme.md +0 -0
  398. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/Cargo.toml +0 -0
  399. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/license +0 -0
  400. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/readme +0 -0
  401. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/call_peaks.rs +0 -0
  402. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/embedding.rs +0 -0
  403. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/export.rs +0 -0
  404. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/knn.rs +0 -0
  405. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/lib.rs +0 -0
  406. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/motif.rs +0 -0
  407. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/network.rs +0 -0
  408. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/preprocessing.rs +0 -0
  409. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/utils/anndata.rs +0 -0
  410. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/utils.rs +0 -0
  411. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/Cargo.toml +0 -0
  412. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/embedding.rs +0 -0
  413. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/export.rs +0 -0
  414. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/counter.rs +0 -0
  415. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/data_iter.rs +0 -0
  416. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/matrix.rs +0 -0
  417. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/mod.rs +0 -0
  418. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/genome.rs +0 -0
  419. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/lib.rs +0 -0
  420. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/motif.rs +0 -0
  421. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/network.rs +0 -0
  422. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/flagstat.rs +0 -0
  423. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/header.rs +0 -0
  424. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/mark_duplicates.rs +0 -0
  425. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam.rs +0 -0
  426. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/import.rs +0 -0
  427. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/mod.rs +0 -0
  428. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/qc.rs +0 -0
  429. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/knn.rs +0 -0
  430. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/mod.rs +0 -0
  431. {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/similarity.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exprmat
3
- Version: 0.2.73
3
+ Version: 0.2.77
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -102,11 +102,19 @@ Requires-Dist: cuvs-cu12==25.8.* ; extra == 'cuda12'
102
102
  Requires-Dist: nx-cugraph-cu12==25.8.* ; extra == 'cuda12'
103
103
  Requires-Dist: cupy-cuda12x ; extra == 'cuda12'
104
104
  Requires-Dist: rapids-singlecell ; extra == 'cuda12'
105
+ Requires-Dist: cudf-cu13==25.10.* ; extra == 'cuda13'
106
+ Requires-Dist: cuml-cu13==25.10.* ; extra == 'cuda13'
107
+ Requires-Dist: cugraph-cu13==25.10.* ; extra == 'cuda13'
108
+ Requires-Dist: cuvs-cu13==25.10.* ; extra == 'cuda13'
109
+ Requires-Dist: cupy-cuda13x ; extra == 'cuda13'
110
+ Requires-Dist: rapids-singlecell ; extra == 'cuda13'
105
111
  Requires-Dist: sphinx ; extra == 'dev'
106
112
  Requires-Dist: twine ; extra == 'dev'
107
113
  Requires-Dist: ipykernel ; extra == 'dev'
108
114
  Requires-Dist: ipytree ; extra == 'dev'
115
+ Requires-Dist: uv ; extra == 'dev'
109
116
  Provides-Extra: cuda12
117
+ Provides-Extra: cuda13
110
118
  Provides-Extra: dev
111
119
  License-File: license
112
120
  Summary: exprmat: Routines for expression matrices
@@ -130,6 +130,7 @@ from exprmat.utils import setup_styles as _setup_styles
130
130
  from exprmat.ansi import pprog, pproga, info, error, warning, default_logger, logger
131
131
  from exprmat.reader.experiment import experiment, load_experiment
132
132
  from exprmat.reader.metadata import metadata, load_metadata
133
+ from . import repertoire
133
134
 
134
135
 
135
136
  _setup_styles()
@@ -263,4 +264,4 @@ __all__ = [
263
264
  # constants
264
265
  'SPECIFICATION',
265
266
  'ENABLE_AGENT_PROMPT'
266
- ]
267
+ ]
@@ -279,6 +279,4 @@ class pproga(tqdma):
279
279
  super().__init__(iterable, **progress_styles, **kwargs)
280
280
 
281
281
 
282
- def tqinfo(x):
283
- if SILENT: return
284
- tqdm.write(cyan('[i] ') + x)
282
+ def tqinfo(x): tqdm.write(cyan('[i] ') + x)
@@ -68,7 +68,7 @@ def pairwise_transition(
68
68
  ):
69
69
 
70
70
  mat, clono_ids, clust_ids = clone_cluster_matrix(adata, clonotype = clonotype, cluster = cluster)
71
- adata.obs[key] = 0
71
+ adata.obs[key] = 0.0
72
72
  baseid = clust_ids.index(base)
73
73
 
74
74
  for j, cs in enumerate(clust_ids):
@@ -82,7 +82,10 @@ def pairwise_transition(
82
82
  weights = weights / weights.sum()
83
83
  submat = (submat.T / submat.sum(axis = 1)).T # row normalize
84
84
 
85
- shannon_e = -(submat[:, 0] * np.log2(submat[:, 0]) + submat[:, 1] * np.log2(submat[:, 1]))
85
+ logarithms = np.zeros_like(submat)
86
+ positive = submat > 0
87
+ logarithms[positive] = np.log2(submat[positive])
88
+ shannon_e = -(submat * logarithms).sum(axis = 1)
86
89
  shannon_e[either_zero] = 0
87
90
  adata.obs.loc[adata.obs[cluster] == cs, key] = np.sum(shannon_e * weights)
88
91
 
@@ -103,4 +106,4 @@ def transition(adata, clonotype = 'clone.id', cluster = 'leiden', key = 'clone.t
103
106
 
104
107
  def migration(adata, clonotype = 'clone.id', cluster = 'tissue', key = 'clone.migr'):
105
108
  # completely the same.
106
- transition(adata, clonotype = clonotype, cluster = cluster, key = key)
109
+ transition(adata, clonotype = clonotype, cluster = cluster, key = key)
@@ -61,9 +61,9 @@ def barplot(
61
61
  data = dropzeros.loc[dropzeros['name'] == gene,:],
62
62
  x = "row", y = "logc", hue = 'split', ax = axes, fill = True,
63
63
  palette = palette, saturation = 0.8, log_scale = False,
64
- color = '.8', linecolor = '0', order = selected_groups, gap = 0.3,
64
+ color = '.8', linecolor = '0', order = selected_groups, hue_order = selected_splits, gap = 0.3,
65
65
  flierprops = flierprops if flierprops else dict(markerfacecolor = '0.1', markersize = 1, linestyle = 'none'),
66
- showfliers = True, width = 0.6
66
+ showfliers = True, width = 0.8
67
67
  )
68
68
 
69
69
  elif style == 'violin':
@@ -72,7 +72,7 @@ def barplot(
72
72
  data = dropzeros.loc[dropzeros['name'] == gene,:],
73
73
  x = "row", y = "logc", hue = 'split', ax = axes, fill = True,
74
74
  palette = palette, saturation = 0.8, log_scale = False,
75
- color = '.8', linecolor = '0', order = selected_groups, gap = 0,
75
+ color = '.8', linecolor = '0', order = selected_groups, hue_order = selected_splits, gap = 0,
76
76
  width = 0.8, **violin_kwargs
77
77
  )
78
78
 
@@ -275,7 +275,7 @@ def volcano(
275
275
  names = plots['gene'].tolist()
276
276
 
277
277
  fig, axes = plt.subplots(1, 1, figsize = figsize, dpi = dpi)
278
- axes.scatter(fc, pvals, c = color_null, s = 4)
278
+ axes.scatter(fc, pvals, c = color_null, s = 4, rasterized = True)
279
279
 
280
280
  sig_pvals = []
281
281
  sig_fc = []
@@ -283,12 +283,12 @@ def volcano(
283
283
 
284
284
  for p, f, nm in zip(pvals, fc, names):
285
285
  if nm in label:
286
- sig_pvals += [p]
286
+ sig_pvals += [min(p, ylim)]
287
287
  sig_fc += [f]
288
288
  sig_names += [nm]
289
289
 
290
290
  if (p > highlight_min_logp and abs(f) >= highlight_min_lfc) and show_all:
291
- sig_pvals += [p]
291
+ sig_pvals += [min(p, ylim)]
292
292
  sig_fc += [f]
293
293
  sig_names += [nm]
294
294
 
@@ -310,7 +310,7 @@ def volcano(
310
310
  axes.grid(False)
311
311
 
312
312
  xlim = min(np.abs(np.array(fc)).max(), xlim)
313
- ylim = min(ylim, np.max(np.array(pvals)))
313
+ # ylim = min(ylim, np.max(np.array(pvals)))
314
314
  axes.set_xlim([-xlim, xlim])
315
315
  axes.set_ylim([-ylim / 20, ylim])
316
316
 
@@ -0,0 +1,276 @@
1
+
2
+ import numpy as np
3
+ import pandas as pd
4
+ import matplotlib.pyplot as plt
5
+ from scipy.cluster.hierarchy import dendrogram, linkage, leaves_list
6
+ from scipy.spatial.distance import pdist
7
+ from typing import Optional, Tuple
8
+ from exprmat import error
9
+
10
+
11
+ def plot_matrix(
12
+ mat: pd.DataFrame,
13
+ dend_x: bool = True,
14
+ dend_y: bool = True,
15
+ show_dend_x: bool = True,
16
+ show_dend_y: bool = True,
17
+ width_dend_x = 1,
18
+ height_dend_y = 1,
19
+ dpi: int = 100,
20
+ figsize: Tuple[int, int] = (5, 4),
21
+ cmap: str = 'viridis',
22
+ meta_x: Optional[pd.DataFrame] = None,
23
+ meta_x_cmap: str | dict = 'reds/r',
24
+ meta_x_height_per_row: float = 0.15,
25
+ meta_x_pad: float = 0.5,
26
+ meta_x_show_legend: bool = True,
27
+ ) -> None:
28
+
29
+ from exprmat.plotting.palettes import mpl
30
+
31
+ if not isinstance(mat, pd.DataFrame):
32
+ error('mat should be a pandas dataframe')
33
+
34
+ if not np.issubdtype(mat.values.dtype, np.number):
35
+ error('mat should contain numerical values')
36
+
37
+ if mat.isnull().any().any():
38
+ error('mat contains non-numeric values (e.g. nan, inf)')
39
+
40
+ if meta_x is not None and not isinstance(meta_x, pd.DataFrame):
41
+ error('meta_x should be a pandas dataframe')
42
+
43
+ mat_copy = mat.copy()
44
+
45
+ # column dendrogram
46
+ col_order = np.arange(mat_copy.shape[1])
47
+ col_linkage = None
48
+ if dend_x:
49
+ col_linkage = linkage(pdist(mat_copy.T, metric = 'euclidean'), method = 'ward')
50
+ col_order = leaves_list(col_linkage)
51
+ mat_copy = mat_copy.iloc[:, col_order]
52
+
53
+ # row dendrogram
54
+ row_order = np.arange(mat_copy.shape[0])
55
+ row_linkage = None
56
+ if dend_y:
57
+ row_linkage = linkage(pdist(mat_copy, metric = 'euclidean'), method = 'ward')
58
+ row_order = leaves_list(row_linkage)
59
+ mat_copy = mat_copy.iloc[row_order, :]
60
+
61
+ # metadata table — compute height before layout
62
+ meta_height = 0
63
+ meta_pad = 0
64
+ meta_bottom = 0.05
65
+ legend_height = 0
66
+ legend_entries = []
67
+ if meta_x is not None:
68
+ meta_x = meta_x.reindex(columns = mat_copy.columns)
69
+ meta_height = meta_x.shape[0] * meta_x_height_per_row / figsize[1]
70
+ meta_pad = meta_x_pad / figsize[1]
71
+
72
+ # legend for metadata
73
+ if meta_x_show_legend:
74
+ legend_height_per_row = 0.08
75
+ for label, row_data in meta_x.iterrows():
76
+ is_numeric = False
77
+ try:
78
+ row_data.astype(float)
79
+ is_numeric = True
80
+ except: is_numeric = False
81
+
82
+ if is_numeric:
83
+ legend_entries.append(('numeric', label, None, None,
84
+ row_data.min(), row_data.max()))
85
+ else:
86
+ cats = pd.Categorical(row_data.dropna())
87
+ n_cats = len(cats.categories)
88
+ if isinstance(meta_x_cmap, dict) and label in meta_x_cmap and isinstance(meta_x_cmap[label], list):
89
+ colors = list(meta_x_cmap[label])
90
+ else:
91
+ cat_cmap = plt.cm.tab10 if n_cats <= 10 else plt.cm.tab20
92
+ colors = [cat_cmap((c + 0.5) / n_cats) for c in range(n_cats)]
93
+ legend_entries.append(('categorical', label, cats.categories,
94
+ colors, None, None))
95
+ legend_height = len(legend_entries) * legend_height_per_row
96
+ meta_bottom = 0.15 + legend_height
97
+
98
+ fig = plt.figure(figsize = figsize, dpi = dpi)
99
+
100
+ heatmap_left = (0.05 + width_dend_x / figsize[0]) if show_dend_y else 0.1
101
+ heatmap_width = (figsize[0] * 0.9 - width_dend_x) / figsize[0] if show_dend_x else 0.8
102
+
103
+ # heatmap keeps its original size; when meta is present, everything above
104
+ # shifts up so that metadata sits at the very bottom with a gap (meta_pad)
105
+ # between the metadata top and heatmap_bottom, giving room for x-axis labels
106
+ if show_dend_y:
107
+ heatmap_height = ((figsize[1] * 0.9 - height_dend_y) / figsize[1])
108
+ else:
109
+ heatmap_height = 0.9
110
+
111
+ heatmap_bottom = meta_bottom + meta_height + meta_pad
112
+
113
+ ax_row_dend = None
114
+ if show_dend_y and dend_y:
115
+ ax_row_dend = fig.add_axes([0.05, heatmap_bottom, width_dend_x / figsize[0], heatmap_height])
116
+
117
+ dendrogram(row_linkage, orientation='left', ax=ax_row_dend, no_labels=True)
118
+ ax_row_dend.set_xticks([])
119
+ ax_row_dend.set_yticks([])
120
+ ax_row_dend.spines['top'].set_visible(False)
121
+ ax_row_dend.spines['bottom'].set_visible(False)
122
+ ax_row_dend.spines['left'].set_visible(False)
123
+
124
+ ax_col_dend = None
125
+ if show_dend_x and dend_x:
126
+ col_dend_bottom = heatmap_bottom + heatmap_height
127
+ ax_col_dend = fig.add_axes([heatmap_left, col_dend_bottom, heatmap_width, height_dend_y / figsize[1]])
128
+
129
+ dendrogram(col_linkage, orientation='top', ax=ax_col_dend, no_labels=True)
130
+ ax_col_dend.set_xticks([])
131
+ ax_col_dend.set_yticks([])
132
+ ax_col_dend.spines['top'].set_visible(False)
133
+ ax_col_dend.spines['left'].set_visible(False)
134
+ ax_col_dend.spines['right'].set_visible(False)
135
+
136
+
137
+ ax_heatmap = fig.add_axes([heatmap_left, heatmap_bottom, heatmap_width, heatmap_height])
138
+ im = ax_heatmap.imshow(mat_copy.values, cmap = mpl(cmap), aspect = 'auto', interpolation = 'nearest')
139
+ # print(mat_copy.index.tolist())
140
+ # print(mat_copy.columns.tolist())
141
+
142
+ ax_heatmap.set_xticks(range(len(mat_copy.columns)))
143
+ ax_heatmap.set_xticklabels(mat_copy.columns, rotation = 90, ha='center', fontsize=9)
144
+ ax_heatmap.set_yticks(range(len(mat_copy.index)))
145
+ ax_heatmap.yaxis.tick_right()
146
+ ax_heatmap.set_yticklabels(mat_copy.index, fontsize = 9, ha = 'left')
147
+
148
+ # metadata table — placed at the very bottom, below the heatmap x-axis labels
149
+ if meta_x is not None:
150
+ for i, (label, row_data) in enumerate(meta_x.iterrows()):
151
+ row_bottom = meta_bottom + (meta_x.shape[0] - i - 1) * meta_x_height_per_row / figsize[1]
152
+ ax_meta = fig.add_axes([
153
+ heatmap_left,
154
+ row_bottom,
155
+ heatmap_width,
156
+ meta_x_height_per_row / figsize[1]
157
+ ])
158
+
159
+ n_cols = len(row_data)
160
+ values = row_data.values.reshape(1, -1)
161
+
162
+ is_numeric = False
163
+ try:
164
+ row_data.astype(float)
165
+ is_numeric = True
166
+ except: is_numeric = False
167
+
168
+ if is_numeric:
169
+ vmin, vmax = row_data.min(), row_data.max()
170
+ if vmax == vmin: normed = np.zeros_like(values, dtype = float)
171
+ else: normed = (values.astype(float) - vmin) / (vmax - vmin)
172
+ if isinstance(meta_x_cmap, dict) and label in meta_x_cmap:
173
+ val = meta_x_cmap[label]
174
+ if isinstance(val, str):
175
+ _cmap = mpl(val)
176
+ else:
177
+ from matplotlib.colors import ListedColormap
178
+ _cmap = ListedColormap(val)
179
+ else:
180
+ _cmap = mpl(meta_x_cmap)
181
+ ax_meta.imshow(normed, cmap = _cmap, aspect = 'auto', vmin = 0, vmax = 1)
182
+ else:
183
+ cats = pd.Categorical(row_data)
184
+ codes = cats.codes.reshape(1, -1)
185
+ n_cats = len(cats.categories)
186
+ if isinstance(meta_x_cmap, dict) and label in meta_x_cmap and isinstance(meta_x_cmap[label], list):
187
+ from matplotlib.colors import ListedColormap
188
+ cat_cmap = ListedColormap(meta_x_cmap[label])
189
+ else:
190
+ cat_cmap = plt.cm.tab10 if n_cats <= 10 else plt.cm.tab20
191
+ ax_meta.imshow(codes, cmap = cat_cmap, aspect = 'auto',
192
+ vmin = -0.5, vmax = n_cats - 0.5)
193
+
194
+ # borders
195
+ ax_meta.set_xticks(np.arange(-0.5, n_cols, 1), minor = True)
196
+ ax_meta.set_yticks(np.arange(-0.5, 1, 1), minor = True)
197
+ ax_meta.grid(which = 'minor', color = 'white', linewidth = 2)
198
+ ax_meta.tick_params(which = 'minor', length = 0)
199
+ ax_meta.set_xticks([])
200
+ ax_meta.set_yticks([])
201
+ ax_meta.spines['top'].set_visible(False)
202
+ ax_meta.spines['bottom'].set_visible(False)
203
+ ax_meta.spines['left'].set_visible(False)
204
+ ax_meta.spines['right'].set_visible(False)
205
+
206
+ # label on the right
207
+ ax_meta.text(1.01, 0.5, str(label), transform = ax_meta.transAxes,
208
+ fontsize = 9, va = 'center', ha = 'left')
209
+
210
+ # legend for metadata — below the metadata table
211
+ if legend_entries:
212
+ from matplotlib.patches import Rectangle
213
+
214
+ ax_legend = fig.add_axes([heatmap_left, 0.01, heatmap_width, legend_height])
215
+ ax_legend.set_xlim(0, 1)
216
+ ax_legend.set_ylim(0, 1)
217
+ ax_legend.axis('off')
218
+
219
+ n_rows = len(legend_entries)
220
+ row_h = 1.0 / n_rows
221
+
222
+ for i, entry in enumerate(legend_entries):
223
+ ltype, name, cats, colors, mn, mx = entry
224
+ y_c = (i + 0.5) * row_h
225
+
226
+ # metadata name
227
+ ax_legend.text(-0.02, y_c, str(name), fontsize = 9, va = 'center',
228
+ ha = 'right', transform = ax_legend.transAxes)
229
+
230
+ if ltype == 'categorical':
231
+ x = 0.0
232
+ base_y = y_c
233
+ sub = 0
234
+ for cat, color in zip(cats, colors):
235
+ if x > 0.85:
236
+ sub += 1
237
+ x = 0.0
238
+ y_disp = base_y - sub * row_h * 0.55
239
+
240
+ rect = Rectangle((x, y_disp - row_h * 0.3), 0.02, row_h * 0.6,
241
+ facecolor = color, edgecolor = 'gray',
242
+ linewidth = 0.3, transform = ax_legend.transAxes)
243
+ ax_legend.add_patch(rect)
244
+ ax_legend.text(x + 0.025, y_disp, str(cat), fontsize = 9,
245
+ va = 'center', ha = 'left',
246
+ transform = ax_legend.transAxes)
247
+ x += 0.03 + max(0.05, len(str(cat)) * 0.012)
248
+
249
+ elif ltype == 'numeric':
250
+ gradient = np.linspace(0, 1, 256).reshape(1, -1)
251
+ cb_left = 0.0
252
+ cb_width = 0.35
253
+ cb_height = row_h * 0.4
254
+ cb_bottom = y_c - cb_height / 2
255
+
256
+ if isinstance(meta_x_cmap, dict) and name in meta_x_cmap:
257
+ val = meta_x_cmap[name]
258
+ if isinstance(val, str):
259
+ _lgnd_cmap = mpl(val)
260
+ else:
261
+ from matplotlib.colors import ListedColormap
262
+ _lgnd_cmap = ListedColormap(val)
263
+ else:
264
+ _lgnd_cmap = mpl(meta_x_cmap)
265
+ ax_legend.imshow(gradient, cmap = _lgnd_cmap, aspect = 'auto',
266
+ extent = [cb_left + 0.05, cb_left + cb_width - 0.1,
267
+ cb_bottom, cb_bottom + cb_height])
268
+
269
+ ax_legend.text(cb_left, cb_bottom + cb_height + 0.01, f'{mn:.2g}', fontsize = 9,
270
+ va = 'top', ha = 'left',
271
+ transform = ax_legend.transAxes)
272
+ ax_legend.text(cb_left + cb_width - 0.05, cb_bottom + cb_height + 0.01, f'{mx:.2g}', fontsize = 9,
273
+ va = 'top', ha = 'right',
274
+ transform = ax_legend.transAxes)
275
+
276
+ return fig
@@ -306,7 +306,7 @@ def variable_order(
306
306
  heat_data,
307
307
  aspect = 'auto',
308
308
  cmap = _mpl(cmap),
309
- vmin = vmin_h, vmax = vmax_h,
309
+ # vmin = vmin_h, vmax = vmax_h,
310
310
  extent = [0, 1, n_feat - 0.5, -0.5],
311
311
  interpolation = 'nearest'
312
312
  )
@@ -227,7 +227,9 @@ def gene_track(
227
227
  xfrom, xto,
228
228
  chr = '1',
229
229
  assembly = 'grcm39',
230
- show_gene_name = True
230
+ show_gene_name = True,
231
+ hide_unnamed = False,
232
+ show_only = None
231
233
  ):
232
234
  from exprmat.data.finders import get_genome, get_genome_model
233
235
  from exprmat import config as cfg
@@ -246,16 +248,6 @@ def gene_track(
246
248
  for name in gnames:
247
249
 
248
250
  gene = model[model['gid'] == name].copy()
249
- requested_x = gene['start'].min()
250
- requested_y = -1
251
- for i, z in enumerate(waterflow):
252
- if z < requested_x:
253
- requested_y = i
254
- break
255
-
256
- if requested_y == -1:
257
- waterflow += [requested_x]
258
- requested_y = len(waterflow) - 1
259
251
 
260
252
  displayname = str(name)
261
253
  if show_gene_name:
@@ -266,6 +258,28 @@ def gene_track(
266
258
 
267
259
  if str(displayname) == 'nan':
268
260
  displayname = ''
261
+
262
+ if (
263
+ displayname == '' or
264
+ displayname.startswith('ENS') or
265
+ displayname.startswith('Gm') or
266
+ displayname.endswith('Rik')
267
+ ):
268
+ if hide_unnamed: continue
269
+
270
+ if show_only is not None:
271
+ if not displayname in show_only: continue
272
+
273
+ requested_x = gene['start'].min()
274
+ requested_y = -1
275
+ for i, z in enumerate(waterflow):
276
+ if z < requested_x:
277
+ requested_y = i
278
+ break
279
+
280
+ if requested_y == -1:
281
+ waterflow += [requested_x]
282
+ requested_y = len(waterflow) - 1
269
283
 
270
284
  ntranscript = len(gene[gene['type'] == 'transcript'])
271
285
  if ntranscript > 1: displayname += f' ({ntranscript})'
@@ -103,7 +103,7 @@ def highly_variable(
103
103
 
104
104
  # method implemented in cellranger's selection of hvg.
105
105
  elif method == 'cellranger':
106
- m_lognorm = choose_layer(adata, lognorm)
106
+ m_lognorm = choose_layer(adata, layer = lognorm)
107
107
  df = highly_variable_nb_log(m_lognorm, adata.var, **kwargs)
108
108
 
109
109
  # here, we get the full ranked list for all genes in the dataset.