smftools 0.3.2__tar.gz → 0.4.5__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 (425) hide show
  1. smftools-0.4.5/.claude/scheduled_tasks.lock +1 -0
  2. smftools-0.4.5/.claude/settings.local.json +8 -0
  3. smftools-0.4.5/.devcontainer/Dockerfile +38 -0
  4. smftools-0.4.5/.devcontainer/devcontainer.json +32 -0
  5. {smftools-0.3.2 → smftools-0.4.5}/.github/workflows/ci.yml +2 -2
  6. {smftools-0.3.2 → smftools-0.4.5}/PKG-INFO +37 -7
  7. smftools-0.4.5/docs/source/api/analysis.md +65 -0
  8. {smftools-0.3.2 → smftools-0.4.5}/docs/source/api/index.md +1 -0
  9. {smftools-0.3.2 → smftools-0.4.5}/docs/source/conf.py +0 -1
  10. {smftools-0.3.2 → smftools-0.4.5}/docs/source/tutorials/cli_usage.md +56 -3
  11. smftools-0.4.5/docs/source/tutorials/experiment_config.md +99 -0
  12. {smftools-0.3.2 → smftools-0.4.5}/experiment_config.csv +13 -13
  13. {smftools-0.3.2 → smftools-0.4.5}/notebooks/Kissiov_and_McKenna_2025_sample_sheet.csv +10 -10
  14. {smftools-0.3.2 → smftools-0.4.5}/pyproject.toml +60 -5
  15. {smftools-0.3.2 → smftools-0.4.5}/requirements.txt +1 -1
  16. {smftools-0.3.2 → smftools-0.4.5}/sample_sheet.csv +10 -10
  17. {smftools-0.3.2 → smftools-0.4.5}/smftools/_version.py +1 -1
  18. smftools-0.4.5/smftools/analysis/CLAUDE.md +103 -0
  19. smftools-0.4.5/smftools/analysis/__init__.py +19 -0
  20. smftools-0.4.5/smftools/analysis/compute/__init__.py +23 -0
  21. smftools-0.4.5/smftools/analysis/compute/autocorrelation.py +320 -0
  22. smftools-0.4.5/smftools/analysis/compute/dimensionality_reduction.py +205 -0
  23. smftools-0.4.5/smftools/analysis/compute/ep_classification.py +122 -0
  24. smftools-0.4.5/smftools/analysis/compute/hmm_features.py +79 -0
  25. smftools-0.4.5/smftools/analysis/compute/ls_periodicity.py +379 -0
  26. smftools-0.4.5/smftools/analysis/compute/metrics_store.py +89 -0
  27. smftools-0.4.5/smftools/analysis/compute/ml_cnn.py +505 -0
  28. smftools-0.4.5/smftools/analysis/compute/ml_metrics.py +215 -0
  29. smftools-0.4.5/smftools/analysis/compute/ml_splits.py +112 -0
  30. smftools-0.4.5/smftools/analysis/compute/pearson.py +58 -0
  31. smftools-0.4.5/smftools/analysis/compute/read_cache.py +398 -0
  32. smftools-0.4.5/smftools/analysis/config/__init__.py +11 -0
  33. smftools-0.4.5/smftools/analysis/config/hmm_histogram.py +83 -0
  34. smftools-0.4.5/smftools/analysis/filters/__init__.py +10 -0
  35. smftools-0.4.5/smftools/analysis/filters/obs_filters.py +113 -0
  36. smftools-0.4.5/smftools/analysis/filters/position_filters.py +39 -0
  37. smftools-0.4.5/smftools/analysis/plot/__init__.py +16 -0
  38. smftools-0.4.5/smftools/analysis/plot/autocorr.py +465 -0
  39. smftools-0.4.5/smftools/analysis/plot/embeddings.py +633 -0
  40. smftools-0.4.5/smftools/analysis/plot/heatmaps.py +66 -0
  41. smftools-0.4.5/smftools/analysis/plot/histograms.py +267 -0
  42. smftools-0.4.5/smftools/analysis/plot/locus.py +9 -0
  43. smftools-0.4.5/smftools/analysis/plot/ml.py +133 -0
  44. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/chimeric_adata.py +8 -37
  45. smftools-0.4.5/smftools/cli/helpers.py +410 -0
  46. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/hmm_adata.py +121 -46
  47. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/latent_adata.py +6 -35
  48. smftools-0.4.5/smftools/cli/load_adata.py +1330 -0
  49. smftools-0.4.5/smftools/cli/plot_current.py +64 -0
  50. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/preprocess_adata.py +225 -95
  51. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/spatial_adata.py +73 -52
  52. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/variant_adata.py +301 -37
  53. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli_entry.py +93 -51
  54. smftools-0.4.5/smftools/config/barcodes/SQK-NBD114-24.yaml +35 -0
  55. smftools-0.4.5/smftools/config/barcodes/SQK-NBD114-96.yaml +107 -0
  56. smftools-0.4.5/smftools/config/barcodes/SQK-RBK114-24.yaml +35 -0
  57. smftools-0.4.5/smftools/config/barcodes/SQK-RBK114-96.yaml +113 -0
  58. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/deaminase.yaml +3 -3
  59. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/default.yaml +83 -5
  60. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/direct.yaml +1 -0
  61. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/discover_input_files.py +1 -1
  62. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/experiment_config.py +487 -65
  63. smftools-0.4.5/smftools/config/umis/dual-nextera-12.yaml +9 -0
  64. {smftools-0.3.2 → smftools-0.4.5}/smftools/constants.py +48 -0
  65. {smftools-0.3.2 → smftools-0.4.5}/smftools/datasets/F1_sample_sheet.csv +4 -4
  66. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/call_hmm_peaks.py +2 -84
  67. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/__init__.py +5 -0
  68. smftools-0.4.5/smftools/informatics/bam_functions.py +4915 -0
  69. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/basecalling.py +16 -7
  70. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/binarize_converted_base_identities.py +10 -10
  71. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/converted_BAM_to_adata.py +378 -182
  72. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/h5ad_functions.py +204 -21
  73. smftools-0.4.5/smftools/informatics/modkit_extract_to_adata.py +2907 -0
  74. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/modkit_functions.py +13 -6
  75. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/pod5_functions.py +88 -2
  76. smftools-0.4.5/smftools/informatics/run_multiqc.py +65 -0
  77. smftools-0.4.5/smftools/informatics/sidecar_manifest.py +66 -0
  78. smftools-0.4.5/smftools/memory_guard.py +204 -0
  79. smftools-0.4.5/smftools/parallel_utils.py +93 -0
  80. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/__init__.py +3 -0
  81. smftools-0.4.5/smftools/plotting/hmm_plotting.py +2135 -0
  82. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/plotting_utils.py +49 -6
  83. smftools-0.4.5/smftools/plotting/pod5_plotting.py +463 -0
  84. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/position_stats.py +6 -3
  85. smftools-0.4.5/smftools/plotting/preprocess_plotting.py +419 -0
  86. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/qc_plotting.py +29 -2
  87. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/spatial_plotting.py +501 -420
  88. smftools-0.4.5/smftools/plotting/umi_plotting.py +119 -0
  89. smftools-0.4.5/smftools/plotting/variant_plotting.py +1831 -0
  90. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/__init__.py +6 -0
  91. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/append_base_context.py +13 -1
  92. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/append_binary_layer_by_base_context.py +60 -57
  93. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/append_variant_call_layer.py +71 -0
  94. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/binarize_on_Youden.py +13 -5
  95. smftools-0.4.5/smftools/preprocessing/clean_NaN.py +162 -0
  96. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/filter_reads_on_length_quality_mapping.py +82 -12
  97. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/flag_duplicate_reads.py +581 -489
  98. smftools-0.4.5/smftools/preprocessing/invert_adata.py +71 -0
  99. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/load_sample_sheet.py +7 -0
  100. smftools-0.4.5/smftools/preprocessing/preprocess_umi_annotations.py +938 -0
  101. smftools-0.4.5/smftools/preprocessing/umi_bipartite_analysis.py +186 -0
  102. {smftools-0.3.2 → smftools-0.4.5}/smftools/readwrite.py +337 -93
  103. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/position_stats.py +66 -4
  104. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/read_stats.py +7 -4
  105. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/spatial_autocorrelation.py +4 -1
  106. smftools-0.4.5/tests/_test_inputs/parallel_dispatch/sample.bam +0 -0
  107. smftools-0.4.5/tests/_test_inputs/parallel_dispatch/sample.bam.bai +0 -0
  108. smftools-0.4.5/tests/_test_inputs/parallel_dispatch/sample.fasta +4 -0
  109. smftools-0.4.5/tests/_test_inputs/parallel_dispatch/sample.fasta.fai +2 -0
  110. smftools-0.4.5/tests/_test_inputs/parallel_dispatch/sample_extract.tsv.gz +0 -0
  111. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/test_experiment_config_conversion_I.csv +12 -12
  112. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/test_experiment_config_deaminase_I.csv +12 -12
  113. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/test_experiment_config_direct_I.csv +14 -14
  114. smftools-0.4.5/tests/e2e/cli/test_load_adata.py +43 -0
  115. smftools-0.4.5/tests/integration/informatics/test_modkit_extract_to_adata_parallel.py +232 -0
  116. smftools-0.4.5/tests/unit/analysis/__init__.py +0 -0
  117. smftools-0.4.5/tests/unit/analysis/test_autocorrelation.py +211 -0
  118. smftools-0.4.5/tests/unit/analysis/test_hmm_features.py +105 -0
  119. smftools-0.4.5/tests/unit/analysis/test_ls_periodicity.py +220 -0
  120. smftools-0.4.5/tests/unit/analysis/test_obs_filters.py +175 -0
  121. smftools-0.4.5/tests/unit/analysis/test_pearson.py +101 -0
  122. smftools-0.4.5/tests/unit/analysis/test_position_filters.py +47 -0
  123. smftools-0.4.5/tests/unit/config/test_ExperimentConfig_skip_bam_qc.py +36 -0
  124. smftools-0.4.5/tests/unit/informatics/test_bam_bi_sidecar.py +66 -0
  125. smftools-0.4.5/tests/unit/informatics/test_bam_qc.py +164 -0
  126. smftools-0.4.5/tests/unit/informatics/test_barcode_extraction.py +1419 -0
  127. smftools-0.4.5/tests/unit/informatics/test_barcode_labels.py +26 -0
  128. smftools-0.4.5/tests/unit/informatics/test_converted_sequence_encoding.py +45 -0
  129. smftools-0.4.5/tests/unit/informatics/test_modkit_demux_type_annotation_mode.py +44 -0
  130. smftools-0.4.5/tests/unit/informatics/test_modkit_loop_b_skip.py +18 -0
  131. smftools-0.4.5/tests/unit/informatics/test_modkit_max_workers.py +221 -0
  132. smftools-0.4.5/tests/unit/informatics/test_modkit_sequence_batch_files.py +80 -0
  133. smftools-0.4.5/tests/unit/informatics/test_modkit_tsv_split.py +67 -0
  134. smftools-0.4.5/tests/unit/informatics/test_sidecar_manifest.py +29 -0
  135. smftools-0.4.5/tests/unit/informatics/test_umi_annotation.py +1095 -0
  136. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_append_variant_segment_layer.py +35 -0
  137. smftools-0.4.5/tests/unit/test_cli_artifact_helpers.py +94 -0
  138. smftools-0.4.5/tests/unit/test_expand_bi_tag_columns.py +32 -0
  139. smftools-0.4.5/tests/unit/test_filter_reads_length_thresholds.py +70 -0
  140. smftools-0.4.5/tests/unit/test_flag_duplicate_reads.py +366 -0
  141. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_hmm_variant_overlay_index_mapping.py +2 -4
  142. smftools-0.4.5/tests/unit/test_load_sample_sheet.py +25 -0
  143. smftools-0.4.5/tests/unit/test_memory_guard.py +97 -0
  144. smftools-0.4.5/tests/unit/test_plot_read_span_quality_clustermaps.py +87 -0
  145. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_variant_segment_clustermaps.py +1 -0
  146. smftools-0.4.5/tests/unit/test_plot_variant_segment_clustermaps_multi_obs.py +76 -0
  147. smftools-0.4.5/tests/unit/test_preprocess_umi_annotations.py +442 -0
  148. smftools-0.4.5/tests/unit/test_qc_plotting_histograms.py +51 -0
  149. smftools-0.4.5/tests/unit/test_variant_adata_umi_duplicate_plot_section.py +116 -0
  150. smftools-0.3.2/docs/source/tutorials/experiment_config.md +0 -52
  151. smftools-0.3.2/smftools/cli/helpers.py +0 -98
  152. smftools-0.3.2/smftools/cli/load_adata.py +0 -793
  153. smftools-0.3.2/smftools/informatics/bam_functions.py +0 -1951
  154. smftools-0.3.2/smftools/informatics/modkit_extract_to_adata.py +0 -1901
  155. smftools-0.3.2/smftools/informatics/run_multiqc.py +0 -37
  156. smftools-0.3.2/smftools/plotting/hmm_plotting.py +0 -1961
  157. smftools-0.3.2/smftools/plotting/preprocess_plotting.py +0 -281
  158. smftools-0.3.2/smftools/plotting/variant_plotting.py +0 -1231
  159. smftools-0.3.2/smftools/preprocessing/clean_NaN.py +0 -72
  160. smftools-0.3.2/smftools/preprocessing/invert_adata.py +0 -53
  161. smftools-0.3.2/tests/e2e/cli/test_load_adata.py +0 -29
  162. smftools-0.3.2/tests/unit/informatics/test_modkit_sequence_batch_files.py +0 -43
  163. smftools-0.3.2/tests/unit/test_plot_read_span_quality_clustermaps.py +0 -35
  164. {smftools-0.3.2 → smftools-0.4.5}/.gitattributes +0 -0
  165. {smftools-0.3.2 → smftools-0.4.5}/.gitignore +0 -0
  166. {smftools-0.3.2 → smftools-0.4.5}/.pre-commit-config.yaml +0 -0
  167. {smftools-0.3.2 → smftools-0.4.5}/.readthedocs.yaml +0 -0
  168. {smftools-0.3.2 → smftools-0.4.5}/AGENTS.md +0 -0
  169. {smftools-0.3.2 → smftools-0.4.5}/CLAUDE.md +0 -0
  170. {smftools-0.3.2 → smftools-0.4.5}/CONTRIBUTING.md +0 -0
  171. {smftools-0.3.2 → smftools-0.4.5}/LICENSE +0 -0
  172. {smftools-0.3.2 → smftools-0.4.5}/README.md +0 -0
  173. {smftools-0.3.2 → smftools-0.4.5}/docs/Makefile +0 -0
  174. {smftools-0.3.2 → smftools-0.4.5}/docs/make.bat +0 -0
  175. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/converted_BAM_to_adata.png +0 -0
  176. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/modkit_extract_to_adata.png +0 -0
  177. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/smftools-1.svg +0 -0
  178. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/smftools-1.tif +0 -0
  179. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/smftools_informatics_diagram.pdf +0 -0
  180. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/smftools_informatics_diagram.png +0 -0
  181. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_static/smftools_preprocessing_diagram.png +0 -0
  182. {smftools-0.3.2 → smftools-0.4.5}/docs/source/_templates/tmp +0 -0
  183. {smftools-0.3.2 → smftools-0.4.5}/docs/source/api/datasets.md +0 -0
  184. {smftools-0.3.2 → smftools-0.4.5}/docs/source/api/informatics.md +0 -0
  185. {smftools-0.3.2 → smftools-0.4.5}/docs/source/api/preprocessing.md +0 -0
  186. {smftools-0.3.2 → smftools-0.4.5}/docs/source/api/tools.md +0 -0
  187. {smftools-0.3.2 → smftools-0.4.5}/docs/source/basic_usage.md +0 -0
  188. {smftools-0.3.2 → smftools-0.4.5}/docs/source/cli.md +0 -0
  189. {smftools-0.3.2 → smftools-0.4.5}/docs/source/contributors.md +0 -0
  190. {smftools-0.3.2 → smftools-0.4.5}/docs/source/dev/index.md +0 -0
  191. {smftools-0.3.2 → smftools-0.4.5}/docs/source/index.md +0 -0
  192. {smftools-0.3.2 → smftools-0.4.5}/docs/source/installation.md +0 -0
  193. {smftools-0.3.2 → smftools-0.4.5}/docs/source/references.bib +0 -0
  194. {smftools-0.3.2 → smftools-0.4.5}/docs/source/references.rst +0 -0
  195. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.1.0.md +0 -0
  196. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.1.1.md +0 -0
  197. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.1.6.md +0 -0
  198. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.2.1.md +0 -0
  199. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.2.3.md +0 -0
  200. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/0.3.0.md +0 -0
  201. {smftools-0.3.2 → smftools-0.4.5}/docs/source/release-notes/index.md +0 -0
  202. {smftools-0.3.2 → smftools-0.4.5}/docs/source/requirements.txt +0 -0
  203. {smftools-0.3.2 → smftools-0.4.5}/docs/source/schema/anndata_schema.md +0 -0
  204. {smftools-0.3.2 → smftools-0.4.5}/docs/source/tutorials/index.md +0 -0
  205. {smftools-0.3.2 → smftools-0.4.5}/notebooks/Kissiov_and_McKenna_2025_example_notebook.ipynb +0 -0
  206. {smftools-0.3.2 → smftools-0.4.5}/smftools/__init__.py +0 -0
  207. {smftools-0.3.2 → smftools-0.4.5}/smftools/_settings.py +0 -0
  208. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/__init__.py +0 -0
  209. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/archived/cli_flows.py +0 -0
  210. {smftools-0.3.2 → smftools-0.4.5}/smftools/cli/recipes.py +0 -0
  211. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/__init__.py +0 -0
  212. {smftools-0.3.2 → smftools-0.4.5}/smftools/config/conversion.yaml +0 -0
  213. {smftools-0.3.2 → smftools-0.4.5}/smftools/datasets/F1_hybrid_NKG2A_enhander_promoter_GpC_conversion_SMF.h5ad.gz +0 -0
  214. {smftools-0.3.2 → smftools-0.4.5}/smftools/datasets/__init__.py +0 -0
  215. {smftools-0.3.2 → smftools-0.4.5}/smftools/datasets/dCas9_m6A_invitro_kinetics.h5ad.gz +0 -0
  216. {smftools-0.3.2 → smftools-0.4.5}/smftools/datasets/datasets.py +0 -0
  217. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/HMM.py +0 -0
  218. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/__init__.py +0 -0
  219. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/archived/apply_hmm_batched.py +0 -0
  220. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/archived/calculate_distances.py +0 -0
  221. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/archived/call_hmm_peaks.py +0 -0
  222. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/archived/train_hmm.py +0 -0
  223. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/display_hmm.py +0 -0
  224. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/hmm_readwrite.py +0 -0
  225. {smftools-0.3.2 → smftools-0.4.5}/smftools/hmm/nucleosome_hmm_refinement.py +0 -0
  226. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/bam_conversion.py +0 -0
  227. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/bam_direct.py +0 -0
  228. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/basecall_pod5s.py +0 -0
  229. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/basecalls_to_adata.py +0 -0
  230. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/conversion_smf.py +0 -0
  231. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/deaminase_smf.py +0 -0
  232. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/direct_smf.py +0 -0
  233. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/fast5_to_pod5.py +0 -0
  234. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/__init__.py +0 -0
  235. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/align_and_sort_BAM.py +0 -0
  236. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/aligned_BAM_to_bed.py +0 -0
  237. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/bam_qc.py +0 -0
  238. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/bed_to_bigwig.py +0 -0
  239. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/canoncall.py +0 -0
  240. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/concatenate_fastqs_to_bam.py +0 -0
  241. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/converted_BAM_to_adata.py +0 -0
  242. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/count_aligned_reads.py +0 -0
  243. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/demux_and_index_BAM.py +0 -0
  244. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/extract_base_identities.py +0 -0
  245. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/extract_mods.py +0 -0
  246. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/extract_read_features_from_bam.py +0 -0
  247. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/extract_read_lengths_from_bed.py +0 -0
  248. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/extract_readnames_from_BAM.py +0 -0
  249. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/find_conversion_sites.py +0 -0
  250. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/generate_converted_FASTA.py +0 -0
  251. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/get_chromosome_lengths.py +0 -0
  252. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/get_native_references.py +0 -0
  253. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/index_fasta.py +0 -0
  254. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/informatics.py +0 -0
  255. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/load_adata.py +0 -0
  256. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/make_modbed.py +0 -0
  257. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/modQC.py +0 -0
  258. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/modcall.py +0 -0
  259. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/ohe_batching.py +0 -0
  260. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/ohe_layers_decode.py +0 -0
  261. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/one_hot_decode.py +0 -0
  262. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/one_hot_encode.py +0 -0
  263. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/plot_bed_histograms.py +0 -0
  264. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/separate_bam_by_bc.py +0 -0
  265. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/helpers/archived/split_and_index_BAM.py +0 -0
  266. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/print_bam_query_seq.py +0 -0
  267. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/subsample_fasta_from_bed.py +0 -0
  268. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/archived/subsample_pod5.py +0 -0
  269. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/bed_functions.py +0 -0
  270. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/complement_base_list.py +0 -0
  271. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/fasta_functions.py +0 -0
  272. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/ohe.py +0 -0
  273. {smftools-0.3.2 → smftools-0.4.5}/smftools/informatics/sequence_encoding.py +0 -0
  274. {smftools-0.3.2 → smftools-0.4.5}/smftools/logging_utils.py +0 -0
  275. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/__init__.py +0 -0
  276. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/data/__init__.py +0 -0
  277. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/data/anndata_data_module.py +0 -0
  278. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/data/preprocessing.py +0 -0
  279. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/evaluation/__init__.py +0 -0
  280. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/evaluation/eval_utils.py +0 -0
  281. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/evaluation/evaluators.py +0 -0
  282. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/inference/__init__.py +0 -0
  283. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/inference/inference_utils.py +0 -0
  284. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/inference/lightning_inference.py +0 -0
  285. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/inference/sklearn_inference.py +0 -0
  286. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/inference/sliding_window_inference.py +0 -0
  287. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/__init__.py +0 -0
  288. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/base.py +0 -0
  289. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/cnn.py +0 -0
  290. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/lightning_base.py +0 -0
  291. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/mlp.py +0 -0
  292. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/positional.py +0 -0
  293. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/rnn.py +0 -0
  294. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/sklearn_models.py +0 -0
  295. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/transformer.py +0 -0
  296. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/models/wrappers.py +0 -0
  297. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/training/__init__.py +0 -0
  298. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/training/train_lightning_model.py +0 -0
  299. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/training/train_sklearn_model.py +0 -0
  300. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/utils/__init__.py +0 -0
  301. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/utils/device.py +0 -0
  302. {smftools-0.3.2 → smftools-0.4.5}/smftools/machine_learning/utils/grl.py +0 -0
  303. {smftools-0.3.2 → smftools-0.4.5}/smftools/metadata.py +0 -0
  304. {smftools-0.3.2 → smftools-0.4.5}/smftools/optional_imports.py +0 -0
  305. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/autocorrelation_plotting.py +0 -0
  306. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/chimeric_plotting.py +0 -0
  307. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/classifiers.py +0 -0
  308. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/general_plotting.py +0 -0
  309. {smftools-0.3.2 → smftools-0.4.5}/smftools/plotting/latent_plotting.py +0 -0
  310. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/append_mismatch_frequency_sites.py +0 -0
  311. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/append_sequence_mismatch_annotations.py +0 -0
  312. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/archived/add_read_length_and_mapping_qc.py +0 -0
  313. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/archived/calculate_complexity.py +0 -0
  314. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/archived/mark_duplicates.py +0 -0
  315. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/archived/preprocessing.py +0 -0
  316. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/archived/remove_duplicates.py +0 -0
  317. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/binarize.py +0 -0
  318. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/binary_layers_to_ohe.py +0 -0
  319. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_complexity_II.py +0 -0
  320. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_consensus.py +0 -0
  321. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_coverage.py +0 -0
  322. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_pairwise_differences.py +0 -0
  323. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_pairwise_hamming_distances.py +0 -0
  324. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_position_Youden.py +0 -0
  325. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_read_length_stats.py +0 -0
  326. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/calculate_read_modification_stats.py +0 -0
  327. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/filter_adata_by_nan_proportion.py +0 -0
  328. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/filter_reads_on_modification_thresholds.py +0 -0
  329. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/make_dirs.py +0 -0
  330. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/min_non_diagonal.py +0 -0
  331. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/recipes.py +0 -0
  332. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/reindex_references_adata.py +0 -0
  333. {smftools-0.3.2 → smftools-0.4.5}/smftools/preprocessing/subsample_adata.py +0 -0
  334. {smftools-0.3.2 → smftools-0.4.5}/smftools/schema/__init__.py +0 -0
  335. {smftools-0.3.2 → smftools-0.4.5}/smftools/schema/anndata_schema_v1.yaml +0 -0
  336. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/__init__.py +0 -0
  337. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/apply_hmm.py +0 -0
  338. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/classifiers.py +0 -0
  339. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/classify_methylated_features.py +0 -0
  340. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/classify_non_methylated_features.py +0 -0
  341. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/subset_adata_v1.py +0 -0
  342. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/archived/subset_adata_v2.py +0 -0
  343. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/calculate_knn.py +0 -0
  344. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/calculate_leiden.py +0 -0
  345. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/calculate_nmf.py +0 -0
  346. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/calculate_pca.py +0 -0
  347. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/calculate_umap.py +0 -0
  348. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/cluster_adata_on_methylation.py +0 -0
  349. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/general_tools.py +0 -0
  350. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/rolling_nn_distance.py +0 -0
  351. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/sequence_alignment.py +0 -0
  352. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/subset_adata.py +0 -0
  353. {smftools-0.3.2 → smftools-0.4.5}/smftools/tools/tensor_factorization.py +0 -0
  354. {smftools-0.3.2 → smftools-0.4.5}/tests/__init__.py +0 -0
  355. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/_test_bed_I.bed +0 -0
  356. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/_test_fasta_I.fa +0 -0
  357. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/_test_fasta_I.fa.fai +0 -0
  358. {smftools-0.3.2 → smftools-0.4.5}/tests/_test_inputs/_test_pod5_I.pod5 +0 -0
  359. {smftools-0.3.2 → smftools-0.4.5}/tests/conftest.py +0 -0
  360. {smftools-0.3.2 → smftools-0.4.5}/tests/e2e/__init__.py +0 -0
  361. {smftools-0.3.2 → smftools-0.4.5}/tests/e2e/cli/test_spatial_adata.py +0 -0
  362. {smftools-0.3.2 → smftools-0.4.5}/tests/integration/__init__.py +0 -0
  363. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/__init__.py +0 -0
  364. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/cli/test_cli_imports.py +0 -0
  365. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/config/test_config_imports.py +0 -0
  366. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/datasets/test_datasets_imports.py +0 -0
  367. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/hmm/test_hmm_imports.py +0 -0
  368. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/import_helpers.py +0 -0
  369. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/informatics/test_informatics_imports.py +0 -0
  370. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/data/test_data_imports.py +0 -0
  371. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/evaluation/test_evaluation_imports.py +0 -0
  372. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/inference/test_inference_imports.py +0 -0
  373. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/models/test_models_imports.py +0 -0
  374. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/training/test_training_imports.py +0 -0
  375. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/machine_learning/utils/test_utils_imports.py +0 -0
  376. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/plotting/test_plotting_imports.py +0 -0
  377. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/preprocessing/test_preprocessing_imports.py +0 -0
  378. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/test_smftools_imports.py +0 -0
  379. {smftools-0.3.2 → smftools-0.4.5}/tests/smoke/tools/test_tools_imports.py +0 -0
  380. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/__init__.py +0 -0
  381. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/config/test_LoadExperimentConfig.py +0 -0
  382. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/datasets/test_datasets.py +0 -0
  383. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/hmm/test_mask_read_span.py +0 -0
  384. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_bam_base_identities.py +0 -0
  385. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_bam_read_tags.py +0 -0
  386. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_bam_secondary_supplementary.py +0 -0
  387. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_h5ad_secondary_supplementary.py +0 -0
  388. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_modkit_sequence_encoding.py +0 -0
  389. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/informatics/test_tool_backends.py +0 -0
  390. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_annotate_zero_hamming_segments_parent_layer.py +0 -0
  391. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_append_mismatch_frequency_sites.py +0 -0
  392. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_append_reference_strand_quality_stats.py +0 -0
  393. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_append_sequence_mismatch_annotations.py +0 -0
  394. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_calculate_nmf.py +0 -0
  395. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_chimeric_adata_mod_hamming_flag.py +0 -0
  396. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_chimeric_adata_span_layer.py +0 -0
  397. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_chimeric_adata_top_segments.py +0 -0
  398. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_combined_hmm_length_clustermap_barplot.py +0 -0
  399. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_combined_hmm_length_clustermap_outputs.py +0 -0
  400. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_combined_hmm_raw_clustermap_nan_fill.py +0 -0
  401. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_combined_raw_clustermap_barplot_nan_ignore.py +0 -0
  402. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_combined_raw_clustermap_nan_fill.py +0 -0
  403. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_hmm_clustermap_colormap.py +0 -0
  404. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_latent_adata_var_filters.py +0 -0
  405. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_length_layer_subclass_mapping.py +0 -0
  406. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_metadata.py +0 -0
  407. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_methylation_fraction_nan_handling.py +0 -0
  408. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_cp_sequence_components.py +0 -0
  409. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_hamming_span_trio.py +0 -0
  410. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_hmm_size_contours_feature_ranges.py +0 -0
  411. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_hmm_size_contours_nan_values.py +0 -0
  412. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_mismatch_base_frequency_by_position.py +0 -0
  413. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_nmf_components.py +0 -0
  414. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_pca_components.py +0 -0
  415. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_rolling_nn_and_layer.py +0 -0
  416. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_rolling_nn_and_two_layers.py +0 -0
  417. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_sequence_integer_encoding_clustermaps.py +0 -0
  418. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_zero_hamming_pair_counts.py +0 -0
  419. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_plot_zero_hamming_span_and_layer.py +0 -0
  420. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_readwrite.py +0 -0
  421. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_rolling_nn_distance.py +0 -0
  422. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_tensor_factorization.py +0 -0
  423. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/test_variant_adata_overlay_config_forwarding.py +0 -0
  424. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/tools/test_calculate_umap.py +0 -0
  425. {smftools-0.3.2 → smftools-0.4.5}/tests/unit/tools/test_sequence_alignment.py +0 -0
@@ -0,0 +1 @@
1
+ {"sessionId":"15d14348-db85-4d8f-9fbc-7c6144caa7f9","pid":71788,"procStart":"Sun Jul 19 22:49:56 2026","acquiredAt":1784563851455}
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python:*)",
5
+ "Bash(tail:*)"
6
+ ]
7
+ }
8
+ }
@@ -0,0 +1,38 @@
1
+ FROM python:3.12-slim-bookworm
2
+
3
+ # System deps needed by pysam, pybedtools, htslib, etc.
4
+ RUN apt-get update && apt-get install -y --no-install-recommends \
5
+ build-essential \
6
+ git \
7
+ zlib1g-dev \
8
+ libbz2-dev \
9
+ liblzma-dev \
10
+ libcurl4-openssl-dev \
11
+ libssl-dev \
12
+ libdeflate-dev \
13
+ samtools \
14
+ bedtools \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ # Create non-root user
18
+ ARG USERNAME=vscode
19
+ ARG USER_UID=1000
20
+ ARG USER_GID=$USER_UID
21
+ RUN groupadd --gid $USER_GID $USERNAME \
22
+ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME
23
+
24
+ # Set up a venv so the editable install is isolated
25
+ RUN python -m venv /opt/venv \
26
+ && /opt/venv/bin/pip install --upgrade pip
27
+ ENV PATH="/opt/venv/bin:$PATH"
28
+
29
+ # Pre-install heavy deps so rebuilds are faster
30
+ COPY pyproject.toml README.md LICENSE /tmp/smftools/
31
+ RUN pip install --no-cache-dir \
32
+ "numpy>=1.22.0,<2" \
33
+ "scipy>=1.7.3" \
34
+ "torch>=1.9.0" \
35
+ "anndata>=0.10.0" \
36
+ "pysam>=0.19.1"
37
+
38
+ USER $USERNAME
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "smftools",
3
+ "build": {
4
+ "dockerfile": "Dockerfile",
5
+ "context": ".."
6
+ },
7
+ "customizations": {
8
+ "vscode": {
9
+ "settings": {
10
+ "python.defaultInterpreterPath": "/opt/venv/bin/python",
11
+ "python.testing.pytestEnabled": true,
12
+ "python.testing.pytestArgs": ["tests"],
13
+ "editor.formatOnSave": true,
14
+ "[python]": {
15
+ "editor.defaultFormatter": "charliermarsh.ruff",
16
+ "editor.codeActionsOnSave": {
17
+ "source.fixAll": "explicit",
18
+ "source.organizeImports": "explicit"
19
+ }
20
+ }
21
+ },
22
+ "extensions": [
23
+ "ms-python.python",
24
+ "ms-python.vscode-pylance",
25
+ "charliermarsh.ruff",
26
+ "ms-toolsai.jupyter"
27
+ ]
28
+ }
29
+ },
30
+ "postCreateCommand": "pip install -e '.[all,dev]'",
31
+ "remoteUser": "vscode"
32
+ }
@@ -26,7 +26,7 @@ jobs:
26
26
  - name: Install dependencies
27
27
  run: |
28
28
  python -m pip install --upgrade pip
29
- python -m pip install "ruff==0.8.6"
29
+ python -m pip install "ruff==0.15.0"
30
30
  - name: Check formatting with ruff
31
31
  run: ruff format --check .
32
32
 
@@ -45,7 +45,7 @@ jobs:
45
45
  - name: Install dependencies
46
46
  run: |
47
47
  python -m pip install --upgrade pip
48
- python -m pip install "ruff==0.8.6"
48
+ python -m pip install "ruff==0.15.0"
49
49
  - name: Lint with ruff
50
50
  run: ruff check --output-format=github .
51
51
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: smftools
3
- Version: 0.3.2
3
+ Version: 0.4.5
4
4
  Summary: Single Molecule Footprinting Analysis in Python.
5
5
  Project-URL: Source, https://github.com/jkmckenna/smftools
6
6
  Project-URL: Documentation, https://smftools.readthedocs.io/
@@ -47,13 +47,15 @@ Requires-Python: >=3.10
47
47
  Requires-Dist: anndata>=0.10.0
48
48
  Requires-Dist: biopython>=1.79
49
49
  Requires-Dist: click
50
+ Requires-Dist: dask[array]
50
51
  Requires-Dist: numpy<2,>=1.22.0
51
52
  Requires-Dist: pandas>=1.4.2
53
+ Requires-Dist: psutil>=5.9.0
52
54
  Requires-Dist: scipy>=1.7.3
53
55
  Requires-Dist: tqdm
54
56
  Provides-Extra: all
55
57
  Requires-Dist: captum; extra == 'all'
56
- Requires-Dist: fastcluster; extra == 'all'
58
+ Requires-Dist: edlib; extra == 'all'
57
59
  Requires-Dist: hydra-core; extra == 'all'
58
60
  Requires-Dist: igraph; extra == 'all'
59
61
  Requires-Dist: leidenalg; extra == 'all'
@@ -63,8 +65,6 @@ Requires-Dist: multiqc; extra == 'all'
63
65
  Requires-Dist: networkx>=3.2; extra == 'all'
64
66
  Requires-Dist: omegaconf; extra == 'all'
65
67
  Requires-Dist: pod5>=0.1.21; extra == 'all'
66
- Requires-Dist: pybedtools>=0.12.0; extra == 'all'
67
- Requires-Dist: pybigwig>=0.3.24; extra == 'all'
68
68
  Requires-Dist: pynndescent>=0.5.10; extra == 'all'
69
69
  Requires-Dist: pysam>=0.19.1; extra == 'all'
70
70
  Requires-Dist: scikit-learn>=1.0.2; extra == 'all'
@@ -75,15 +75,40 @@ Requires-Dist: torch>=1.9.0; extra == 'all'
75
75
  Requires-Dist: umap-learn>=0.5.5; extra == 'all'
76
76
  Requires-Dist: upsetplot; extra == 'all'
77
77
  Requires-Dist: wandb; extra == 'all'
78
+ Requires-Dist: xgboost>=1.7; extra == 'all'
79
+ Provides-Extra: all-2
80
+ Requires-Dist: captum; extra == 'all-2'
81
+ Requires-Dist: edlib; extra == 'all-2'
82
+ Requires-Dist: hydra-core; extra == 'all-2'
83
+ Requires-Dist: igraph; extra == 'all-2'
84
+ Requires-Dist: leidenalg; extra == 'all-2'
85
+ Requires-Dist: lightning; extra == 'all-2'
86
+ Requires-Dist: matplotlib>=3.6.2; extra == 'all-2'
87
+ Requires-Dist: multiqc; extra == 'all-2'
88
+ Requires-Dist: networkx>=3.2; extra == 'all-2'
89
+ Requires-Dist: omegaconf; extra == 'all-2'
90
+ Requires-Dist: pod5>=0.1.21; extra == 'all-2'
91
+ Requires-Dist: pybedtools>=0.12.0; extra == 'all-2'
92
+ Requires-Dist: pybigwig>=0.3.24; extra == 'all-2'
93
+ Requires-Dist: pynndescent>=0.5.10; extra == 'all-2'
94
+ Requires-Dist: pysam>=0.19.1; extra == 'all-2'
95
+ Requires-Dist: scikit-learn>=1.0.2; extra == 'all-2'
96
+ Requires-Dist: seaborn>=0.11; extra == 'all-2'
97
+ Requires-Dist: shap; extra == 'all-2'
98
+ Requires-Dist: tensorly; extra == 'all-2'
99
+ Requires-Dist: torch>=1.9.0; extra == 'all-2'
100
+ Requires-Dist: umap-learn>=0.5.5; extra == 'all-2'
101
+ Requires-Dist: upsetplot; extra == 'all-2'
102
+ Requires-Dist: wandb; extra == 'all-2'
103
+ Requires-Dist: xgboost>=1.7; extra == 'all-2'
78
104
  Provides-Extra: cluster
79
- Requires-Dist: fastcluster; extra == 'cluster'
80
105
  Requires-Dist: igraph; extra == 'cluster'
81
106
  Requires-Dist: leidenalg; extra == 'cluster'
82
107
  Provides-Extra: dev
83
108
  Requires-Dist: pre-commit; extra == 'dev'
84
109
  Requires-Dist: pytest; extra == 'dev'
85
110
  Requires-Dist: pytest-cov; extra == 'dev'
86
- Requires-Dist: ruff; extra == 'dev'
111
+ Requires-Dist: ruff==0.15.0; extra == 'dev'
87
112
  Provides-Extra: docs
88
113
  Requires-Dist: ipython>=7.20; extra == 'docs'
89
114
  Requires-Dist: matplotlib!=3.6.1; extra == 'docs'
@@ -108,6 +133,7 @@ Provides-Extra: ml-base
108
133
  Requires-Dist: scikit-learn>=1.0.2; extra == 'ml-base'
109
134
  Requires-Dist: tensorly; extra == 'ml-base'
110
135
  Requires-Dist: torch>=1.9.0; extra == 'ml-base'
136
+ Requires-Dist: xgboost>=1.7; extra == 'ml-base'
111
137
  Provides-Extra: ml-extended
112
138
  Requires-Dist: captum; extra == 'ml-extended'
113
139
  Requires-Dist: hydra-core; extra == 'ml-extended'
@@ -133,6 +159,10 @@ Requires-Dist: torch>=1.9.0; extra == 'torch'
133
159
  Provides-Extra: umap
134
160
  Requires-Dist: pynndescent>=0.5.10; extra == 'umap'
135
161
  Requires-Dist: umap-learn>=0.5.5; extra == 'umap'
162
+ Provides-Extra: umi
163
+ Requires-Dist: edlib; extra == 'umi'
164
+ Provides-Extra: xgboost
165
+ Requires-Dist: xgboost>=1.7; extra == 'xgboost'
136
166
  Description-Content-Type: text/markdown
137
167
 
138
168
  [![PyPI](https://img.shields.io/pypi/v/smftools.svg)](https://pypi.org/project/smftools)
@@ -0,0 +1,65 @@
1
+ ## Analysis: `an`
2
+
3
+ Downstream statistical analysis library. Pure functions with no project-specific knowledge,
4
+ organised into four subpackages by role:
5
+
6
+ | Subpackage | Input | Output |
7
+ |---|---|---|
8
+ | `compute` | numpy arrays / DataFrames | arrays / dicts (no I/O) |
9
+ | `plot` | results + `output_path` | figure written to disk |
10
+ | `filters` | obs or var DataFrame | boolean `np.ndarray` mask |
11
+ | `config` | none (static) | configuration dicts |
12
+
13
+ ### Compute
14
+
15
+ Pure statistical compute functions. No AnnData dependency (except `ep_classification`).
16
+
17
+ ```{eval-rst}
18
+ .. autosummary::
19
+ :toctree: generated/analysis_compute
20
+
21
+ smftools.analysis.compute.autocorrelation
22
+ smftools.analysis.compute.pearson
23
+ smftools.analysis.compute.hmm_features
24
+ smftools.analysis.compute.ep_classification
25
+ smftools.analysis.compute.ls_periodicity
26
+ smftools.analysis.compute.dimensionality_reduction
27
+ smftools.analysis.compute.read_cache
28
+ ```
29
+
30
+ ### Plot
31
+
32
+ Figure rendering. Accepts results and an explicit `output_path`; writes a figure to disk.
33
+
34
+ ```{eval-rst}
35
+ .. autosummary::
36
+ :toctree: generated/analysis_plot
37
+
38
+ smftools.analysis.plot.heatmaps
39
+ smftools.analysis.plot.histograms
40
+ smftools.analysis.plot.autocorr
41
+ smftools.analysis.plot.locus
42
+ ```
43
+
44
+ ### Filters
45
+
46
+ Boolean mask builders for obs-level and var-level (position) selection.
47
+
48
+ ```{eval-rst}
49
+ .. autosummary::
50
+ :toctree: generated/analysis_filters
51
+
52
+ smftools.analysis.filters.obs_filters
53
+ smftools.analysis.filters.position_filters
54
+ ```
55
+
56
+ ### Config
57
+
58
+ Static configuration objects; no runtime inputs.
59
+
60
+ ```{eval-rst}
61
+ .. autosummary::
62
+ :toctree: generated/analysis_config
63
+
64
+ smftools.analysis.config.hmm_histogram
65
+ ```
@@ -12,6 +12,7 @@ import smftools as smf
12
12
  informatics
13
13
  preprocessing
14
14
  tools
15
+ analysis
15
16
  datasets
16
17
  ```
17
18
 
@@ -82,7 +82,6 @@ autodoc_mock_imports = [
82
82
  "anndata",
83
83
  "Bio",
84
84
  "captum",
85
- "fastcluster",
86
85
  "hydra",
87
86
  "igraph",
88
87
  "leidenalg",
@@ -29,7 +29,7 @@ The load command builds the raw AnnData object from your raw sequencing data. It
29
29
  - adata.X contains binarized modification data (conversion/deaminase), or modification probabilitiesc (native).
30
30
  - Adds basic read-level QC annotations (Read start, end, length, mean quality).
31
31
  - Adds layers encoding read DNA sequences, base quality scores, base mismatches.
32
- - Maintains BAM Tags/Flags in adata.obs.
32
+ - Maintains BAM tags/flags in adata.obs (UMI and barcode annotations loaded from Parquet sidecars).
33
33
  - Writes the raw AnnData to the canonical output path and runs MultiQC.
34
34
  - Optionally deletes intermediate BAMs, H5ADs, and TSVs.
35
35
 
@@ -52,6 +52,26 @@ The preprocess command performs QC, binarization, filtering, and duplicate detec
52
52
  - Visualizes read span masks and base quality scores with clustermaps.
53
53
  - Writes preprocessed (duplicates flagged, but kept) and preprocessed/deduplicated AnnData outputs.
54
54
 
55
+ General AnnData structures added by `preprocess`:
56
+
57
+ - `obs`
58
+ - sample-sheet metadata columns (when `sample_sheet_path` is provided) mapped by `sample_sheet_mapping_column`.
59
+ - read-level QC/ratio/modification summary fields used for filtering and plotting (for example read length/quality/mapping and fraction-modified metrics).
60
+ - optional UMI preprocessing fields when `use_umi=True`, including validity and clustering annotations (for example `U1_valid`, `U2_valid`, `U1_cluster`, `U2_cluster`, `RX_cluster`).
61
+ - optional UMI bipartite graph annotations and dominance metrics (for example edge-count/dominant-pair style fields) plus group-level stats in `uns`.
62
+ - duplicate-detection fields for non-direct modalities (for example merged cluster IDs/sizes and duplicate flags).
63
+ - `var`
64
+ - per-reference position masks and site-context columns used downstream (for example `position_in_<reference>` and `<reference>_<site_type>_site`).
65
+ - optional reindex columns from `reindex_references_adata` (suffix controlled by `reindexed_var_suffix`).
66
+ - `layers`
67
+ - binarized signal layer for direct modality (name controlled by `output_binary_layer_name`).
68
+ - NaN-cleaning strategy layers (for example `fill_nans_closest`, `nan0_0minus1`, `nan1_12`, `nan_minus_1`, `nan_half`).
69
+ - base-context/site-type derived binary layers used for downstream analyses and duplicate detection.
70
+ - `obsm`
71
+ - base-context level arrays written by context appending steps for downstream plotting/analysis.
72
+ - `uns`
73
+ - preprocessing stage metadata/flags plus auxiliary analysis outputs (for example UMI bipartite summaries and complexity-analysis summaries/fit outputs).
74
+
55
75
  ### `smftools variant`
56
76
 
57
77
  The variant command focuses on DNA sequence variation analyses. It:
@@ -61,6 +81,24 @@ The variant command focuses on DNA sequence variation analyses. It:
61
81
  - Generates z-scores for variant occurance given read level Q-scores and assuming uniform Palt transitions.
62
82
  - Visualizes read DNA sequence encodings and mismatch encodings.
63
83
 
84
+ General AnnData structures added by `variant`:
85
+
86
+ - `layers`
87
+ - `"{seq1_col}__{seq2_col}_variant_call"`: per-position variant call state (`1=seq1`, `2=seq2`, `0=unknown/no-coverage`, `-1=non-informative/non-mismatch`).
88
+ - `"{seq1_col}__{seq2_col}_variant_segments"`: segmented track per read span (`0=outside span`, `1=seq1 segment`, `2=seq2 segment`, `3=transition zone`).
89
+ - `var`
90
+ - `"{prefix}_seq1_acceptable_bases"` and `"{prefix}_seq2_acceptable_bases"`: accepted base sets used for variant matching at informative sites.
91
+ - `"{prefix}_informative_site"`: boolean mask of informative mismatch positions.
92
+ - `obs`
93
+ - `"{prefix}_breakpoint_count"` and `"{prefix}_is_chimeric"`: per-read breakpoint summary.
94
+ - `"{prefix}_variant_breakpoints"` and `variant_breakpoints`: list of inferred breakpoint positions per read.
95
+ - `chimeric_variant_sites` and `chimeric_variant_sites_type`: mismatch-segment chimera flags and categorical type labels.
96
+ - `"{prefix}_variant_segment_cigar"` and `variant_segment_cigar`: run-length string using `S` (self) and `X` (other).
97
+ - `"{prefix}_variant_self_base_count"` / `variant_self_base_count`: count of self-classified bases per read span.
98
+ - `"{prefix}_variant_other_base_count"` / `variant_other_base_count`: count of other-classified bases per read span.
99
+ - `uns`
100
+ - workflow completion flags (e.g., `append_variant_call_layer_performed`, `append_variant_segment_layer_performed`) and prior mismatch/substitution metadata used by variant calling.
101
+
64
102
  ### `smftools chimeric`
65
103
 
66
104
  The chimeric command is meant to find putative PCR chimeras. It:
@@ -69,7 +107,22 @@ The chimeric command is meant to find putative PCR chimeras. It:
69
107
  - Performs sliding window nearest neighbor hamming distance analysis per read.
70
108
  - Visualizes the windowed nearest neighbor hamming distances per read.
71
109
  - Assembles maximum spanning intervals of 0-hamming distance neighbors per read within the reference/sample.
72
- - In progress.
110
+
111
+ General AnnData structures added by `chimeric`:
112
+
113
+ - `obsm`
114
+ - `cfg.rolling_nn_obsm_key`: per-read rolling nearest-neighbor hamming distance tracks.
115
+ - `layers`
116
+ - `zero_hamming_distance_spans`: within-sample/reference top span mask derived from zero-distance partners.
117
+ - `cross_sample_zero_hamming_distance_spans`: top span mask from cross-sample pooling.
118
+ - `delta_zero_hamming_distance_spans`: clipped difference (`within - cross`) used for delta-based chimera evidence.
119
+ - `obs`
120
+ - `chimeric_by_mod_hamming_distance`: boolean flag based on longest positive delta span threshold.
121
+ - per-read top-segment tuple lists under keys like `"{rolling_nn_obsm_key}__top_segments"` (when top-segment extraction is enabled).
122
+ - `uns`
123
+ - rolling-distance and zero-pair metadata keyed by `rolling_nn_obsm_key`, including maps such as:
124
+ - `"{rolling_nn_obsm_key}_zero_pairs_map"` and `"{rolling_nn_obsm_key}_reference_map"`.
125
+ - optional stored segment records (`...__zero_hamming_segments`) and plotting metadata (`..._starts`, `..._window`, `..._step`, etc.), depending on cleanup settings in config.
73
126
 
74
127
  ### `smftools spatial`
75
128
 
@@ -133,4 +186,4 @@ smftools batch spatial /path/to/configs.tsv --column my_config --sep $'\t'
133
186
  ```
134
187
 
135
188
  Each path is validated; missing configs are skipped with a message, while valid configs run the
136
- requested task in sequence.
189
+ requested task in sequence.
@@ -0,0 +1,99 @@
1
+ # Experiment configuration CSV
2
+
3
+ smftools uses an experiment configuration CSV to define paths, modality settings, and workflow
4
+ options. You can start from the repository template (`experiment_config.csv`) and fill in your
5
+ experiment-specific values. The configuration CSV can override any parameter within the default.yaml
6
+ and modality specific config .yamls found within the config subpackage of smftools.
7
+
8
+ ## CSV format
9
+
10
+ The configuration CSV is a table with the following columns:
11
+
12
+ | Column | Description |
13
+ | --- | --- |
14
+ | `variable` | Configuration key name (used by smftools). |
15
+ | `value` | Your value for this key. |
16
+ | `help` | Short description of the key. |
17
+ | `options` | Expected values (when applicable). |
18
+ | `type` | Expected value type (`str`, `int`, `float`, `list`). |
19
+
20
+ A shortened example looks like:
21
+
22
+ ```text
23
+ variable,value,help,options,type
24
+ smf_modality,conversion,Modality of SMF. Can either be conversion or direct.,"conversion, direct",str
25
+ input_data_path,/path_to_POD5_directory,Path to directory/file containing input sequencing data,,str
26
+ fasta,/path_to_fasta.fasta,Path to initial FASTA file,,str
27
+ output_directory,/outputs,Directory to act as root for all analysis outputs,,str
28
+ experiment_name,,An experiment name for the final h5ad file,,str
29
+ ```
30
+
31
+ ## Common fields
32
+
33
+ Below are some of the most commonly edited fields and how they affect the CLI workflows:
34
+
35
+ - `smf_modality`: Defines whether the data is `conversion`, `direct` or `deaminase`, which determines
36
+ preprocessing and HMM feature handling.
37
+ - `input_data_path`: Location of raw input data (fast5/pod5/fastq/bam).
38
+ - `fasta`: Reference FASTA for alignment and positional context.
39
+ - `fasta_regions_of_interest`: Optional BED file to subset the FASTA.
40
+ - `output_directory`: Root output folder for all generated AnnData files and plots.
41
+ - `experiment_name`: Base name used for output AnnData files.
42
+ - `model_dir` / `model`: Dorado basecalling model configuration (nanopore runs).
43
+ - `demux_backend`: Demultiplexing backend (`dorado` or `smftools`).
44
+ - `barcode_kit`: Barcode kit name. Required for `dorado`; for `smftools`, use either a known alias or
45
+ `custom` plus `custom_barcode_yaml`.
46
+ - `custom_barcode_yaml`: Barcode reference YAML path used when `demux_backend=smftools` and
47
+ `barcode_kit=custom`.
48
+ - `use_umi` / `umi_yaml`: Optional UMI extraction controls. `umi_yaml` can define flanking-aware UMI
49
+ extraction.
50
+ - `mapping_threshold`: Minimum mapping proportion per reference required for downstream steps.
51
+ - `mod_list`: Modification calls to use for direct-modality workflows.
52
+ - `conversion_types`: Target modification types for conversion workflows.
53
+
54
+ ## Tips
55
+
56
+ - Keep paths absolute whenever possible to avoid ambiguity.
57
+ - Lists are written in bracketed form, e.g. `[5mC]` or `[5mC_5hmC]`.
58
+ - If you update the CSV, re-run the CLI command pointing at the updated file.
59
+
60
+ ## Read annotations
61
+
62
+ smftools annotates reads during `load_adata` and stores the results in `adata.obs`. Standard BAM
63
+ tags (e.g. `NM`, `MD`, `MM`, `ML`) are read directly from BAM files. UMI and barcode annotations
64
+ are computed in parallel and written to Parquet sidecar files alongside the aligned BAM, then loaded
65
+ into `adata.obs` from those sidecars. The aligned BAM itself is not modified.
66
+
67
+ **UMI annotations** (written to `.umi_tags.parquet`)
68
+
69
+ - `U1`: Orientation-corrected UMI for the *left* reference end of the mapped fragment (forward reads: US, reverse reads: UE).
70
+ - `U2`: Orientation-corrected UMI for the *right* reference end of the mapped fragment (forward reads: UE, reverse reads: US).
71
+ - `US`: Positional UMI from read start (delimited `UMI_seq;slot;flank_seq`).
72
+ - `UE`: Positional UMI from read end (delimited `UMI_seq;slot;flank_seq`).
73
+ - `RX`: Combined UMI string (`U1-U2`, or `U1`/`U2` if only one is present).
74
+ - `FC`: Flank context of the U1/U2 pair (e.g. `top-bottom`).
75
+
76
+ When `threads` is set, UMI extraction is parallelized across multiple CPU cores.
77
+
78
+ **Barcode annotations (smftools demux backend)** (written to `.barcode_tags.parquet`)
79
+
80
+ - `BC`: Assigned barcode name, or `unclassified`.
81
+ - `BM`: Match type (`both`, `read_start_only`, `read_end_only`, `mismatch`, `unclassified`).
82
+ - `B1`: Edit distance for the read-start barcode match.
83
+ - `B2`: Edit distance for the read-end barcode match.
84
+ - `B3`: Extracted barcode sequence from the read start (forward orientation).
85
+ - `B4`: Extracted barcode sequence from the read end (reverse-complemented to forward orientation).
86
+ - `B5`: Barcode name matched at the read start (corresponds to `B1`/`B3`).
87
+ - `B6`: Barcode name matched at the read end (corresponds to `B2`/`B4`).
88
+
89
+ When `threads` is set, barcode extraction is parallelized across multiple CPU cores.
90
+ Demultiplexing (splitting reads into per-barcode BAMs) uses the sidecar `BC` assignments.
91
+ Only primary alignments are included in split BAMs and sidecar files.
92
+
93
+ **Barcode annotations (dorado demux backend)**
94
+
95
+ - `BC`: Assigned barcode name (read from BAM tag).
96
+ - `bi`: Dorado barcode info array (if present; expanded into columns during load).
97
+
98
+ Notes:
99
+ - `BE`/`BF` are not used by smftools.
@@ -1,14 +1,14 @@
1
- variable,value,help,options,type
2
- smf_modality,conversion,Modality of SMF. Can either be conversion or direct.,"conversion, direct",str
3
- input_data_path,/path_to_POD5_directory,Path to directory/file containing input sequencing data,,str
4
- fasta,/path_to_fasta.fasta,Path to initial FASTA file,,str
5
- fasta_regions_of_interest,/path_to_bed.bed,Path to a bed file to subsample the fasta on.,,str
6
- output_directory,/outputs,Directory to act as root for all analysis outputs,,str
7
- experiment_name,,An experiment name for the final h5ad file,,str
8
- model_dir,/path_to_dorado_model_dir,Path,,str
9
- model,None,The dorado basecalling model to use,,str
10
- barcode_kit,SQK-NBD114-24,The barcoding kit used for the experiment,,str
11
- mapping_threshold,0.05,Minimum proportion of reads mapping to a reference to further use that reference (Ranges from 0-1 as a proportion of mapped reads),,float
12
- mod_list,[5mC_5hmC],Modified base names for Dorado,"""6mA"", ""5mC_5hmC""",list
13
- batch_size,4,number of samples to analyze at a time,,int
1
+ variable,value,help,options,type
2
+ smf_modality,conversion,Modality of SMF. Can either be conversion or direct.,"conversion, direct",str
3
+ input_data_path,/path_to_POD5_directory,Path to directory/file containing input sequencing data,,str
4
+ fasta,/path_to_fasta.fasta,Path to initial FASTA file,,str
5
+ fasta_regions_of_interest,/path_to_bed.bed,Path to a bed file to subsample the fasta on.,,str
6
+ output_directory,/outputs,Directory to act as root for all analysis outputs,,str
7
+ experiment_name,,An experiment name for the final h5ad file,,str
8
+ model_dir,/path_to_dorado_model_dir,Path,,str
9
+ model,None,The dorado basecalling model to use,,str
10
+ barcode_kit,SQK-NBD114-24,The barcoding kit used for the experiment,,str
11
+ mapping_threshold,0.05,Minimum proportion of reads mapping to a reference to further use that reference (Ranges from 0-1 as a proportion of mapped reads),,float
12
+ mod_list,[5mC_5hmC],Modified base names for Dorado,"""6mA"", ""5mC_5hmC""",list
13
+ batch_size,4,number of samples to analyze at a time,,int
14
14
  conversion_types,[5mC],Types of modification types to use in conversion SMF,"5mC', '6mA'",list
@@ -1,11 +1,11 @@
1
- Sample,Sample_names,MTase,Time (sec),Group
2
- 0,,Hia5,0,0
3
- 1,,Hia5,15,0
4
- 2,,Hia5,30,0
5
- 3,,Hia5,120,0
6
- 4,,Hia5,300,0
7
- 5,,Hia5,0,1
8
- 6,,Hia5,15,1
9
- 7,,Hia5,30,1
10
- 8,,Hia5,120,1
1
+ Sample,Sample_names,MTase,Time (sec),Group
2
+ 0,,Hia5,0,0
3
+ 1,,Hia5,15,0
4
+ 2,,Hia5,30,0
5
+ 3,,Hia5,120,0
6
+ 4,,Hia5,300,0
7
+ 5,,Hia5,0,1
8
+ 6,,Hia5,15,1
9
+ 7,,Hia5,30,1
10
+ 8,,Hia5,120,1
11
11
  9,,Hia5,300,1
@@ -43,8 +43,10 @@ dependencies = [
43
43
  "anndata>=0.10.0",
44
44
  "biopython>=1.79",
45
45
  "click",
46
+ "dask[array]",
46
47
  "numpy>=1.22.0,<2",
47
48
  "pandas>=1.4.2",
49
+ "psutil>=5.9.0",
48
50
  "scipy>=1.7.3",
49
51
  "tqdm",
50
52
  ]
@@ -60,9 +62,9 @@ smftools = "smftools.cli_entry:cli"
60
62
  [project.optional-dependencies]
61
63
 
62
64
  dev = [
63
- "ruff",
64
- "pre-commit",
65
- "pytest",
65
+ "ruff==0.15.0",
66
+ "pre-commit",
67
+ "pytest",
66
68
  "pytest-cov"]
67
69
 
68
70
  docs = [
@@ -85,7 +87,6 @@ docs = [
85
87
  ]
86
88
 
87
89
  cluster = [
88
- "fastcluster",
89
90
  "igraph",
90
91
  "leidenalg",
91
92
  ]
@@ -120,6 +121,11 @@ ml-base = [
120
121
  "scikit-learn>=1.0.2",
121
122
  "tensorly",
122
123
  "torch>=1.9.0",
124
+ "xgboost>=1.7",
125
+ ]
126
+
127
+ xgboost = [
128
+ "xgboost>=1.7",
123
129
  ]
124
130
 
125
131
  ml-extended = [
@@ -135,6 +141,10 @@ qc = [
135
141
  "multiqc",
136
142
  ]
137
143
 
144
+ umi = [
145
+ "edlib",
146
+ ]
147
+
138
148
  umap = [
139
149
  "pynndescent>=0.5.10",
140
150
  "umap-learn>=0.5.5",
@@ -146,7 +156,48 @@ torch = [
146
156
 
147
157
  all = [
148
158
  # cluster
149
- "fastcluster",
159
+ "igraph",
160
+ "leidenalg",
161
+
162
+ # informatics
163
+ "pysam>=0.19.1",
164
+
165
+ # misc
166
+ "networkx>=3.2",
167
+ "upsetplot",
168
+
169
+ # ont
170
+ "pod5>=0.1.21",
171
+
172
+ # plotting
173
+ "matplotlib>=3.6.2",
174
+ "seaborn>=0.11",
175
+
176
+ # ml
177
+ "captum",
178
+ "hydra-core",
179
+ "lightning",
180
+ "omegaconf",
181
+ "scikit-learn>=1.0.2",
182
+ "shap",
183
+ "tensorly",
184
+ "torch>=1.9.0",
185
+ "wandb",
186
+ "xgboost>=1.7",
187
+
188
+ # umap
189
+ "pynndescent>=0.5.10",
190
+ "umap-learn>=0.5.5",
191
+
192
+ # qc
193
+ "multiqc",
194
+
195
+ # umi
196
+ "edlib",
197
+ ]
198
+
199
+ all_2 = [
200
+ # cluster
150
201
  "igraph",
151
202
  "leidenalg",
152
203
 
@@ -176,6 +227,7 @@ all = [
176
227
  "tensorly",
177
228
  "torch>=1.9.0",
178
229
  "wandb",
230
+ "xgboost>=1.7",
179
231
 
180
232
  # umap
181
233
  "pynndescent>=0.5.10",
@@ -183,6 +235,9 @@ all = [
183
235
 
184
236
  # qc
185
237
  "multiqc",
238
+
239
+ # umi
240
+ "edlib",
186
241
  ]
187
242
 
188
243
  [tool.hatch.build]
@@ -10,7 +10,6 @@ seaborn>=0.11
10
10
  tqdm
11
11
 
12
12
  # Graph / clustering
13
- fastcluster
14
13
  igraph
15
14
  leidenalg
16
15
  networkx>=3.2
@@ -33,6 +32,7 @@ shap
33
32
  tensorly
34
33
  torch>=1.9.0
35
34
  wandb
35
+ xgboost>=1.7
36
36
 
37
37
  # QC / viz
38
38
  multiqc