smftools 0.2.5__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. {smftools-0.2.5 → smftools-0.3.1}/.github/workflows/ci.yml +43 -40
  2. {smftools-0.2.5 → smftools-0.3.1}/AGENTS.md +10 -0
  3. {smftools-0.2.5 → smftools-0.3.1}/PKG-INFO +69 -33
  4. {smftools-0.2.5 → smftools-0.3.1}/docs/source/installation.md +35 -9
  5. smftools-0.3.1/docs/source/release-notes/0.3.0.md +4 -0
  6. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/index.md +5 -0
  7. smftools-0.3.1/docs/source/requirements.txt +16 -0
  8. {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/experiment_config.md +2 -1
  9. {smftools-0.2.5 → smftools-0.3.1}/pyproject.toml +115 -34
  10. {smftools-0.2.5 → smftools-0.3.1}/requirements.txt +24 -16
  11. smftools-0.3.1/smftools/__init__.py +60 -0
  12. {smftools-0.2.5 → smftools-0.3.1}/smftools/_settings.py +2 -0
  13. smftools-0.3.1/smftools/_version.py +3 -0
  14. smftools-0.3.1/smftools/cli/__init__.py +1 -0
  15. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/archived/cli_flows.py +2 -0
  16. smftools-0.3.1/smftools/cli/helpers.py +82 -0
  17. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/hmm_adata.py +239 -33
  18. smftools-0.3.1/smftools/cli/latent_adata.py +318 -0
  19. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/load_adata.py +167 -131
  20. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/preprocess_adata.py +180 -53
  21. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/spatial_adata.py +152 -100
  22. {smftools-0.2.5 → smftools-0.3.1}/smftools/cli_entry.py +38 -1
  23. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/__init__.py +2 -0
  24. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/conversion.yaml +11 -1
  25. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/default.yaml +42 -2
  26. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/experiment_config.py +59 -1
  27. smftools-0.3.1/smftools/constants.py +102 -0
  28. {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/__init__.py +2 -0
  29. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/HMM.py +97 -3
  30. smftools-0.3.1/smftools/hmm/__init__.py +24 -0
  31. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/apply_hmm_batched.py +2 -0
  32. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/calculate_distances.py +2 -0
  33. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/call_hmm_peaks.py +2 -0
  34. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/train_hmm.py +2 -0
  35. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/call_hmm_peaks.py +5 -2
  36. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/display_hmm.py +4 -1
  37. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/hmm_readwrite.py +7 -2
  38. {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/nucleosome_hmm_refinement.py +2 -0
  39. smftools-0.3.1/smftools/informatics/__init__.py +68 -0
  40. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/bam_conversion.py +2 -0
  41. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/bam_direct.py +2 -0
  42. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/basecall_pod5s.py +2 -0
  43. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/basecalls_to_adata.py +2 -0
  44. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/conversion_smf.py +2 -0
  45. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/deaminase_smf.py +1 -0
  46. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/direct_smf.py +2 -0
  47. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/fast5_to_pod5.py +2 -0
  48. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/__init__.py +2 -0
  49. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/align_and_sort_BAM.py +2 -0
  50. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/aligned_BAM_to_bed.py +2 -0
  51. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/bed_to_bigwig.py +2 -0
  52. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/canoncall.py +2 -0
  53. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/converted_BAM_to_adata.py +2 -0
  54. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/count_aligned_reads.py +2 -0
  55. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/demux_and_index_BAM.py +2 -0
  56. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_base_identities.py +2 -0
  57. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_mods.py +2 -0
  58. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_read_features_from_bam.py +2 -0
  59. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_read_lengths_from_bed.py +2 -0
  60. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_readnames_from_BAM.py +2 -0
  61. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/find_conversion_sites.py +2 -0
  62. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/generate_converted_FASTA.py +2 -0
  63. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/get_chromosome_lengths.py +2 -0
  64. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/get_native_references.py +2 -0
  65. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/index_fasta.py +2 -0
  66. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/informatics.py +2 -0
  67. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/load_adata.py +2 -0
  68. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/make_modbed.py +2 -0
  69. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/modQC.py +2 -0
  70. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/modcall.py +2 -0
  71. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/ohe_batching.py +2 -0
  72. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/ohe_layers_decode.py +2 -0
  73. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/one_hot_decode.py +2 -0
  74. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/one_hot_encode.py +2 -0
  75. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/plot_bed_histograms.py +2 -0
  76. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/separate_bam_by_bc.py +2 -0
  77. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/split_and_index_BAM.py +2 -0
  78. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/print_bam_query_seq.py +2 -0
  79. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/subsample_fasta_from_bed.py +2 -0
  80. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/subsample_pod5.py +2 -0
  81. smftools-0.3.1/smftools/informatics/bam_functions.py +1951 -0
  82. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/basecalling.py +2 -0
  83. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/bed_functions.py +271 -61
  84. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/binarize_converted_base_identities.py +3 -0
  85. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/complement_base_list.py +2 -0
  86. smftools-0.3.1/smftools/informatics/converted_BAM_to_adata.py +1125 -0
  87. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/fasta_functions.py +94 -10
  88. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/h5ad_functions.py +123 -4
  89. smftools-0.3.1/smftools/informatics/modkit_extract_to_adata.py +1897 -0
  90. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/modkit_functions.py +2 -0
  91. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/ohe.py +2 -0
  92. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/pod5_functions.py +3 -2
  93. smftools-0.3.1/smftools/informatics/sequence_encoding.py +72 -0
  94. {smftools-0.2.5 → smftools-0.3.1}/smftools/logging_utils.py +21 -2
  95. smftools-0.3.1/smftools/machine_learning/__init__.py +23 -0
  96. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/__init__.py +2 -0
  97. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/anndata_data_module.py +18 -4
  98. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/preprocessing.py +2 -0
  99. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/__init__.py +2 -0
  100. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/eval_utils.py +2 -0
  101. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/evaluators.py +14 -9
  102. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/__init__.py +2 -0
  103. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/inference_utils.py +2 -0
  104. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/lightning_inference.py +6 -1
  105. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/sklearn_inference.py +2 -0
  106. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/sliding_window_inference.py +2 -0
  107. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/__init__.py +2 -0
  108. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/base.py +7 -2
  109. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/cnn.py +7 -2
  110. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/lightning_base.py +16 -11
  111. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/mlp.py +5 -1
  112. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/positional.py +7 -2
  113. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/rnn.py +5 -1
  114. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/sklearn_models.py +14 -9
  115. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/transformer.py +7 -2
  116. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/wrappers.py +6 -2
  117. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/__init__.py +2 -0
  118. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/train_lightning_model.py +13 -3
  119. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/train_sklearn_model.py +2 -0
  120. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/__init__.py +2 -0
  121. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/device.py +5 -1
  122. {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/grl.py +5 -1
  123. {smftools-0.2.5 → smftools-0.3.1}/smftools/metadata.py +1 -1
  124. smftools-0.3.1/smftools/optional_imports.py +31 -0
  125. smftools-0.3.1/smftools/plotting/__init__.py +42 -0
  126. {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/autocorrelation_plotting.py +9 -5
  127. {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/classifiers.py +16 -4
  128. smftools-0.3.1/smftools/plotting/general_plotting.py +3368 -0
  129. {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/hmm_plotting.py +97 -9
  130. {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/position_stats.py +15 -7
  131. {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/qc_plotting.py +6 -1
  132. smftools-0.3.1/smftools/preprocessing/__init__.py +37 -0
  133. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/append_base_context.py +17 -17
  134. smftools-0.3.1/smftools/preprocessing/append_mismatch_frequency_sites.py +158 -0
  135. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/add_read_length_and_mapping_qc.py +2 -0
  136. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/calculate_complexity.py +2 -0
  137. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/mark_duplicates.py +2 -0
  138. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/preprocessing.py +2 -0
  139. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/remove_duplicates.py +2 -0
  140. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binary_layers_to_ohe.py +2 -1
  141. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_complexity_II.py +4 -1
  142. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_consensus.py +1 -1
  143. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_pairwise_differences.py +2 -0
  144. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_pairwise_hamming_distances.py +3 -0
  145. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_position_Youden.py +9 -2
  146. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_read_modification_stats.py +6 -1
  147. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_reads_on_length_quality_mapping.py +2 -0
  148. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_reads_on_modification_thresholds.py +2 -0
  149. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/flag_duplicate_reads.py +42 -54
  150. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/make_dirs.py +2 -1
  151. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/min_non_diagonal.py +2 -0
  152. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/recipes.py +2 -0
  153. {smftools-0.2.5 → smftools-0.3.1}/smftools/readwrite.py +53 -17
  154. {smftools-0.2.5 → smftools-0.3.1}/smftools/schema/anndata_schema_v1.yaml +15 -1
  155. smftools-0.3.1/smftools/tools/__init__.py +31 -0
  156. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/apply_hmm.py +2 -0
  157. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classifiers.py +2 -0
  158. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classify_methylated_features.py +2 -0
  159. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classify_non_methylated_features.py +2 -0
  160. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/subset_adata_v1.py +2 -0
  161. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/subset_adata_v2.py +2 -0
  162. smftools-0.3.1/smftools/tools/calculate_leiden.py +57 -0
  163. smftools-0.3.1/smftools/tools/calculate_nmf.py +119 -0
  164. smftools-0.3.1/smftools/tools/calculate_umap.py +186 -0
  165. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/cluster_adata_on_methylation.py +7 -1
  166. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/position_stats.py +17 -27
  167. smftools-0.3.1/smftools/tools/rolling_nn_distance.py +235 -0
  168. smftools-0.3.1/smftools/tools/tensor_factorization.py +169 -0
  169. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/tools/test_tools_imports.py +2 -0
  170. smftools-0.3.1/tests/unit/hmm/test_mask_read_span.py +43 -0
  171. smftools-0.3.1/tests/unit/informatics/test_bam_base_identities.py +81 -0
  172. smftools-0.3.1/tests/unit/informatics/test_bam_read_tags.py +50 -0
  173. smftools-0.3.1/tests/unit/informatics/test_bam_secondary_supplementary.py +125 -0
  174. smftools-0.3.1/tests/unit/informatics/test_h5ad_secondary_supplementary.py +33 -0
  175. smftools-0.3.1/tests/unit/informatics/test_modkit_sequence_batch_files.py +43 -0
  176. smftools-0.3.1/tests/unit/informatics/test_modkit_sequence_encoding.py +49 -0
  177. smftools-0.3.1/tests/unit/informatics/test_tool_backends.py +170 -0
  178. smftools-0.3.1/tests/unit/test_append_mismatch_frequency_sites.py +62 -0
  179. smftools-0.3.1/tests/unit/test_calculate_nmf.py +29 -0
  180. smftools-0.3.1/tests/unit/test_combined_hmm_length_clustermap_barplot.py +46 -0
  181. smftools-0.3.1/tests/unit/test_combined_hmm_length_clustermap_outputs.py +41 -0
  182. smftools-0.3.1/tests/unit/test_combined_hmm_raw_clustermap_nan_fill.py +43 -0
  183. smftools-0.3.1/tests/unit/test_combined_raw_clustermap_barplot_nan_ignore.py +91 -0
  184. smftools-0.3.1/tests/unit/test_combined_raw_clustermap_nan_fill.py +43 -0
  185. smftools-0.3.1/tests/unit/test_hmm_clustermap_colormap.py +18 -0
  186. smftools-0.3.1/tests/unit/test_length_layer_subclass_mapping.py +28 -0
  187. smftools-0.3.1/tests/unit/test_methylation_fraction_nan_handling.py +36 -0
  188. smftools-0.3.1/tests/unit/test_plot_cp_sequence_components.py +38 -0
  189. smftools-0.3.1/tests/unit/test_plot_hmm_size_contours_feature_ranges.py +41 -0
  190. smftools-0.3.1/tests/unit/test_plot_hmm_size_contours_nan_values.py +35 -0
  191. smftools-0.3.1/tests/unit/test_plot_nmf_components.py +26 -0
  192. smftools-0.3.1/tests/unit/test_plot_read_span_quality_clustermaps.py +35 -0
  193. smftools-0.3.1/tests/unit/test_plot_rolling_nn_and_layer.py +61 -0
  194. smftools-0.3.1/tests/unit/test_plot_sequence_integer_encoding_clustermaps.py +40 -0
  195. smftools-0.3.1/tests/unit/test_readwrite.py +36 -0
  196. smftools-0.3.1/tests/unit/test_rolling_nn_distance.py +232 -0
  197. smftools-0.3.1/tests/unit/test_tensor_factorization.py +65 -0
  198. smftools-0.3.1/tests/unit/tools/test_calculate_umap.py +74 -0
  199. smftools-0.2.5/docs/source/requirements.txt +0 -16
  200. smftools-0.2.5/smftools/__init__.py +0 -28
  201. smftools-0.2.5/smftools/_version.py +0 -1
  202. smftools-0.2.5/smftools/cli/helpers.py +0 -54
  203. smftools-0.2.5/smftools/constants.py +0 -37
  204. smftools-0.2.5/smftools/hmm/__init__.py +0 -13
  205. smftools-0.2.5/smftools/informatics/__init__.py +0 -43
  206. smftools-0.2.5/smftools/informatics/bam_functions.py +0 -1034
  207. smftools-0.2.5/smftools/informatics/converted_BAM_to_adata.py +0 -660
  208. smftools-0.2.5/smftools/informatics/modkit_extract_to_adata.py +0 -1309
  209. smftools-0.2.5/smftools/machine_learning/__init__.py +0 -7
  210. smftools-0.2.5/smftools/plotting/__init__.py +0 -32
  211. smftools-0.2.5/smftools/plotting/general_plotting.py +0 -1582
  212. smftools-0.2.5/smftools/preprocessing/__init__.py +0 -38
  213. smftools-0.2.5/smftools/tools/__init__.py +0 -19
  214. smftools-0.2.5/smftools/tools/calculate_umap.py +0 -101
  215. smftools-0.2.5/tests/unit/__init__.py +0 -0
  216. smftools-0.2.5/tests/unit/test_readwrite.py +0 -7
  217. {smftools-0.2.5 → smftools-0.3.1}/.gitattributes +0 -0
  218. {smftools-0.2.5 → smftools-0.3.1}/.gitignore +0 -0
  219. {smftools-0.2.5 → smftools-0.3.1}/.pre-commit-config.yaml +0 -0
  220. {smftools-0.2.5 → smftools-0.3.1}/.readthedocs.yaml +0 -0
  221. {smftools-0.2.5 → smftools-0.3.1}/CONTRIBUTING.md +0 -0
  222. {smftools-0.2.5 → smftools-0.3.1}/LICENSE +0 -0
  223. {smftools-0.2.5 → smftools-0.3.1}/README.md +0 -0
  224. {smftools-0.2.5 → smftools-0.3.1}/docs/Makefile +0 -0
  225. {smftools-0.2.5 → smftools-0.3.1}/docs/make.bat +0 -0
  226. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/converted_BAM_to_adata.png +0 -0
  227. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/modkit_extract_to_adata.png +0 -0
  228. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools-1.svg +0 -0
  229. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools-1.tif +0 -0
  230. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_informatics_diagram.pdf +0 -0
  231. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_informatics_diagram.png +0 -0
  232. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_preprocessing_diagram.png +0 -0
  233. {smftools-0.2.5 → smftools-0.3.1}/docs/source/_templates/tmp +0 -0
  234. {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/datasets.md +0 -0
  235. {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/index.md +0 -0
  236. {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/informatics.md +0 -0
  237. {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/preprocessing.md +0 -0
  238. {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/tools.md +0 -0
  239. {smftools-0.2.5 → smftools-0.3.1}/docs/source/basic_usage.md +0 -0
  240. {smftools-0.2.5 → smftools-0.3.1}/docs/source/cli.md +0 -0
  241. {smftools-0.2.5 → smftools-0.3.1}/docs/source/conf.py +0 -0
  242. {smftools-0.2.5 → smftools-0.3.1}/docs/source/contributors.md +0 -0
  243. {smftools-0.2.5 → smftools-0.3.1}/docs/source/dev/index.md +0 -0
  244. {smftools-0.2.5 → smftools-0.3.1}/docs/source/index.md +0 -0
  245. {smftools-0.2.5 → smftools-0.3.1}/docs/source/references.bib +0 -0
  246. {smftools-0.2.5 → smftools-0.3.1}/docs/source/references.rst +0 -0
  247. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.0.md +0 -0
  248. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.1.md +0 -0
  249. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.6.md +0 -0
  250. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.2.1.md +0 -0
  251. {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.2.3.md +0 -0
  252. {smftools-0.2.5 → smftools-0.3.1}/docs/source/schema/anndata_schema.md +0 -0
  253. {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/cli_usage.md +0 -0
  254. {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/index.md +0 -0
  255. {smftools-0.2.5 → smftools-0.3.1}/experiment_config.csv +0 -0
  256. {smftools-0.2.5 → smftools-0.3.1}/notebooks/Kissiov_and_McKenna_2025_example_notebook.ipynb +0 -0
  257. {smftools-0.2.5 → smftools-0.3.1}/notebooks/Kissiov_and_McKenna_2025_sample_sheet.csv +0 -0
  258. {smftools-0.2.5 → smftools-0.3.1}/sample_sheet.csv +0 -0
  259. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/deaminase.yaml +0 -0
  260. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/direct.yaml +0 -0
  261. {smftools-0.2.5 → smftools-0.3.1}/smftools/config/discover_input_files.py +0 -0
  262. {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/F1_hybrid_NKG2A_enhander_promoter_GpC_conversion_SMF.h5ad.gz +0 -0
  263. {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/F1_sample_sheet.csv +0 -0
  264. {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/dCas9_m6A_invitro_kinetics.h5ad.gz +0 -0
  265. {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/datasets.py +0 -0
  266. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/bam_qc.py +0 -0
  267. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/concatenate_fastqs_to_bam.py +0 -0
  268. {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/run_multiqc.py +0 -0
  269. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/append_binary_layer_by_base_context.py +0 -0
  270. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binarize.py +0 -0
  271. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binarize_on_Youden.py +0 -0
  272. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_coverage.py +0 -0
  273. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_read_length_stats.py +0 -0
  274. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/clean_NaN.py +0 -0
  275. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_adata_by_nan_proportion.py +0 -0
  276. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/invert_adata.py +0 -0
  277. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/load_sample_sheet.py +0 -0
  278. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/reindex_references_adata.py +0 -0
  279. {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/subsample_adata.py +0 -0
  280. {smftools-0.2.5 → smftools-0.3.1}/smftools/schema/__init__.py +0 -0
  281. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/general_tools.py +0 -0
  282. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/read_stats.py +0 -0
  283. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/spatial_autocorrelation.py +0 -0
  284. {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/subset_adata.py +0 -0
  285. {smftools-0.2.5 → smftools-0.3.1}/tests/__init__.py +0 -0
  286. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_bed_I.bed +0 -0
  287. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_fasta_I.fa +0 -0
  288. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_fasta_I.fa.fai +0 -0
  289. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_pod5_I.pod5 +0 -0
  290. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_conversion_I.csv +0 -0
  291. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_deaminase_I.csv +0 -0
  292. {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_direct_I.csv +0 -0
  293. {smftools-0.2.5/smftools/cli → smftools-0.3.1/tests/e2e}/__init__.py +0 -0
  294. {smftools-0.2.5 → smftools-0.3.1}/tests/e2e/cli/test_load_adata.py +0 -0
  295. {smftools-0.2.5 → smftools-0.3.1}/tests/e2e/cli/test_spatial_adata.py +0 -0
  296. {smftools-0.2.5/tests/e2e → smftools-0.3.1/tests/integration}/__init__.py +0 -0
  297. {smftools-0.2.5/tests/integration → smftools-0.3.1/tests/smoke}/__init__.py +0 -0
  298. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/cli/test_cli_imports.py +0 -0
  299. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/config/test_config_imports.py +0 -0
  300. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/datasets/test_datasets_imports.py +0 -0
  301. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/hmm/test_hmm_imports.py +0 -0
  302. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/import_helpers.py +0 -0
  303. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/informatics/test_informatics_imports.py +0 -0
  304. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/data/test_data_imports.py +0 -0
  305. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/evaluation/test_evaluation_imports.py +0 -0
  306. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/inference/test_inference_imports.py +0 -0
  307. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/models/test_models_imports.py +0 -0
  308. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/training/test_training_imports.py +0 -0
  309. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/utils/test_utils_imports.py +0 -0
  310. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/plotting/test_plotting_imports.py +0 -0
  311. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/preprocessing/test_preprocessing_imports.py +0 -0
  312. {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/test_smftools_imports.py +0 -0
  313. {smftools-0.2.5/tests/smoke → smftools-0.3.1/tests/unit}/__init__.py +0 -0
  314. {smftools-0.2.5 → smftools-0.3.1}/tests/unit/config/test_LoadExperimentConfig.py +0 -0
  315. {smftools-0.2.5 → smftools-0.3.1}/tests/unit/datasets/test_datasets.py +0 -0
  316. {smftools-0.2.5 → smftools-0.3.1}/tests/unit/test_metadata.py +0 -0
@@ -2,9 +2,13 @@ name: CI
2
2
 
3
3
  on:
4
4
  push:
5
- branches: ["main"]
5
+ branches: ["main", "0.3.0"]
6
6
  pull_request:
7
- branches: ["main"]
7
+ branches: ["main", "0.3.0"]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
8
12
 
9
13
  jobs:
10
14
  format:
@@ -13,21 +17,16 @@ jobs:
13
17
  fail-fast: false
14
18
  matrix:
15
19
  python-version: ["3.12"]
16
-
17
20
  steps:
18
- - name: Check out repository
19
- uses: actions/checkout@v4
20
-
21
- - name: Set up Python ${{ matrix.python-version }}
22
- uses: actions/setup-python@v5
21
+ - uses: actions/checkout@v4
22
+ - uses: actions/setup-python@v5
23
23
  with:
24
24
  python-version: ${{ matrix.python-version }}
25
-
25
+ cache: pip
26
26
  - name: Install dependencies
27
27
  run: |
28
28
  python -m pip install --upgrade pip
29
- python -m pip install ruff
30
-
29
+ python -m pip install "ruff==0.8.6"
31
30
  - name: Check formatting with ruff
32
31
  run: ruff format --check .
33
32
 
@@ -37,40 +36,31 @@ jobs:
37
36
  fail-fast: false
38
37
  matrix:
39
38
  python-version: ["3.12"]
40
-
41
39
  steps:
42
- - name: Check out repository
43
- uses: actions/checkout@v4
44
-
45
- - name: Set up Python ${{ matrix.python-version }}
46
- uses: actions/setup-python@v5
40
+ - uses: actions/checkout@v4
41
+ - uses: actions/setup-python@v5
47
42
  with:
48
43
  python-version: ${{ matrix.python-version }}
49
-
44
+ cache: pip
50
45
  - name: Install dependencies
51
46
  run: |
52
47
  python -m pip install --upgrade pip
53
- python -m pip install ruff
54
-
48
+ python -m pip install "ruff==0.8.6"
55
49
  - name: Lint with ruff
56
- run: ruff check .
50
+ run: ruff check --output-format=github .
57
51
 
58
52
  smoke:
59
53
  runs-on: ubuntu-latest
60
54
  strategy:
61
55
  fail-fast: false
62
56
  matrix:
63
- python-version: ["3.10"]
64
-
57
+ python-version: ["3.10", "3.12"]
65
58
  steps:
66
- - name: Check out repository
67
- uses: actions/checkout@v4
68
-
69
- - name: Set up Python ${{ matrix.python-version }}
70
- uses: actions/setup-python@v5
59
+ - uses: actions/checkout@v4
60
+ - uses: actions/setup-python@v5
71
61
  with:
72
62
  python-version: ${{ matrix.python-version }}
73
-
63
+ cache: pip
74
64
  - name: Install system deps for pysam
75
65
  run: |
76
66
  sudo apt-get update
@@ -81,35 +71,48 @@ jobs:
81
71
  liblzma-dev \
82
72
  libcurl4-openssl-dev \
83
73
  pkg-config
84
-
85
74
  - name: Install dependencies
86
75
  run: |
87
76
  python -m pip install --upgrade pip
88
77
  python -m pip install .[dev]
89
-
90
78
  - name: Run smoke tests
91
79
  run: pytest -m smoke -q
92
80
 
81
+ docs:
82
+ runs-on: ubuntu-latest
83
+ strategy:
84
+ matrix:
85
+ python-version: ["3.12"]
86
+ steps:
87
+ - uses: actions/checkout@v4
88
+ - uses: actions/setup-python@v5
89
+ with:
90
+ python-version: ${{ matrix.python-version }}
91
+ cache: pip
92
+ - name: Install docs deps
93
+ run: |
94
+ python -m pip install --upgrade pip
95
+ python -m pip install .[docs]
96
+ - name: Build docs
97
+ run: sphinx-build -W -b html docs/source docs/_build/html
98
+
93
99
  build:
94
100
  runs-on: ubuntu-latest
95
101
  strategy:
96
102
  fail-fast: false
97
103
  matrix:
98
104
  python-version: ["3.10", "3.11", "3.12"]
99
-
100
105
  steps:
101
- - name: Check out repository
102
- uses: actions/checkout@v4
103
-
104
- - name: Set up Python ${{ matrix.python-version }}
105
- uses: actions/setup-python@v5
106
+ - uses: actions/checkout@v4
107
+ - uses: actions/setup-python@v5
106
108
  with:
107
109
  python-version: ${{ matrix.python-version }}
108
-
110
+ cache: pip
109
111
  - name: Install build tooling
110
112
  run: |
111
113
  python -m pip install --upgrade pip
112
- python -m pip install build
113
-
114
+ python -m pip install build twine
114
115
  - name: Build package
115
116
  run: python -m build
117
+ - name: Check dist metadata
118
+ run: twine check dist/*
@@ -11,6 +11,15 @@ This file tells coding agents (including OpenAI Codex) how to work in this repo.
11
11
  - Read existing patterns before inventing new ones.
12
12
  - Don’t refactor broadly unless asked.
13
13
  - If you’re unsure about intended behavior, look for tests/docs first.
14
+ - Ignore all files in any directory named "archived".
15
+
16
+ ## Project dependencies
17
+ - A core set of dependencies is required for the project.
18
+ - Various optional dependencies are provided for:
19
+ - Optional functional modules of the package (ont, plotting, ml-base, ml-extended, scanpy, qc)
20
+ - If a Python version of a CLI tool is preferred (Such as for Samtools, Bedtools, BedGraphToBigWig).
21
+ - For potential performance boosts in computation (torch)
22
+ - All dependencies can be installed with `pip install -e ".[all]"`
14
23
 
15
24
  ## Setup
16
25
  - Create env (pick one):
@@ -38,6 +47,7 @@ This file tells coding agents (including OpenAI Codex) how to work in this repo.
38
47
  - Use type hints for new/modified functions where reasonable.
39
48
  - Use Google style docstring format.
40
49
  - Avoid heavy dependencies unless necessary.
50
+ - Use typing.TYPE_CHECKING and annotations.
41
51
 
42
52
  ## Testing expectations
43
53
  - New functionality must include tests.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: smftools
3
- Version: 0.2.5
3
+ Version: 0.3.1
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/
@@ -29,7 +29,7 @@ License: MIT License
29
29
  SOFTWARE.
30
30
  License-File: LICENSE
31
31
  Keywords: anndata,chromatin-accessibility,machine-learning,nanopore,protein-dna-binding,single-locus,single-molecule-footprinting
32
- Classifier: Development Status :: 2 - Pre-Alpha
32
+ Classifier: Development Status :: 3 - Alpha
33
33
  Classifier: Environment :: Console
34
34
  Classifier: Intended Audience :: Developers
35
35
  Classifier: Intended Audience :: Science/Research
@@ -41,38 +41,42 @@ Classifier: Programming Language :: Python :: 3.10
41
41
  Classifier: Programming Language :: Python :: 3.11
42
42
  Classifier: Programming Language :: Python :: 3.12
43
43
  Classifier: Programming Language :: Python :: 3.13
44
- Classifier: Programming Language :: Python :: 3.14
45
44
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
46
45
  Classifier: Topic :: Scientific/Engineering :: Visualization
47
46
  Requires-Python: >=3.10
48
47
  Requires-Dist: anndata>=0.10.0
49
48
  Requires-Dist: biopython>=1.79
50
- Requires-Dist: captum
51
49
  Requires-Dist: click
52
- Requires-Dist: fastcluster
53
- Requires-Dist: hydra-core
54
- Requires-Dist: igraph
55
- Requires-Dist: leidenalg
56
- Requires-Dist: lightning
57
- Requires-Dist: multiqc
58
- Requires-Dist: networkx>=3.2
59
50
  Requires-Dist: numpy<2,>=1.22.0
60
- Requires-Dist: omegaconf
61
51
  Requires-Dist: pandas>=1.4.2
62
- Requires-Dist: pod5>=0.1.21
63
- Requires-Dist: pybedtools>=0.12.0
64
- Requires-Dist: pybigwig>=0.3.24
65
- Requires-Dist: pyfaidx>=0.8.0
66
- Requires-Dist: pysam>=0.19.1
67
- Requires-Dist: scanpy>=1.9
68
- Requires-Dist: scikit-learn>=1.0.2
69
52
  Requires-Dist: scipy>=1.7.3
70
- Requires-Dist: seaborn>=0.11
71
- Requires-Dist: shap
72
- Requires-Dist: torch>=1.9.0
73
53
  Requires-Dist: tqdm
74
- Requires-Dist: upsetplot
75
- Requires-Dist: wandb
54
+ Provides-Extra: all
55
+ Requires-Dist: captum; extra == 'all'
56
+ Requires-Dist: fastcluster; extra == 'all'
57
+ Requires-Dist: hydra-core; extra == 'all'
58
+ Requires-Dist: leidenalg; extra == 'all'
59
+ Requires-Dist: lightning; extra == 'all'
60
+ Requires-Dist: matplotlib>=3.6.2; extra == 'all'
61
+ Requires-Dist: multiqc; extra == 'all'
62
+ Requires-Dist: networkx>=3.2; extra == 'all'
63
+ Requires-Dist: omegaconf; extra == 'all'
64
+ Requires-Dist: pod5>=0.1.21; extra == 'all'
65
+ Requires-Dist: pybedtools>=0.12.0; extra == 'all'
66
+ Requires-Dist: pybigwig>=0.3.24; extra == 'all'
67
+ Requires-Dist: pynndescent>=0.5.10; extra == 'all'
68
+ Requires-Dist: pysam>=0.19.1; extra == 'all'
69
+ Requires-Dist: scikit-learn>=1.0.2; extra == 'all'
70
+ Requires-Dist: seaborn>=0.11; extra == 'all'
71
+ Requires-Dist: shap; extra == 'all'
72
+ Requires-Dist: torch>=1.9.0; extra == 'all'
73
+ Requires-Dist: umap-learn>=0.5.5; extra == 'all'
74
+ Requires-Dist: upsetplot; extra == 'all'
75
+ Requires-Dist: wandb; extra == 'all'
76
+ Provides-Extra: cluster
77
+ Requires-Dist: fastcluster; extra == 'cluster'
78
+ Requires-Dist: igraph; extra == 'cluster'
79
+ Requires-Dist: leidenalg; extra == 'cluster'
76
80
  Provides-Extra: dev
77
81
  Requires-Dist: pre-commit; extra == 'dev'
78
82
  Requires-Dist: pytest; extra == 'dev'
@@ -81,20 +85,52 @@ Requires-Dist: ruff; extra == 'dev'
81
85
  Provides-Extra: docs
82
86
  Requires-Dist: ipython>=7.20; extra == 'docs'
83
87
  Requires-Dist: matplotlib!=3.6.1; extra == 'docs'
84
- Requires-Dist: myst-nb>=1; extra == 'docs'
85
- Requires-Dist: myst-parser>=2; extra == 'docs'
88
+ Requires-Dist: myst-nb<2,>=1; extra == 'docs'
89
+ Requires-Dist: myst-parser<3,>=2; extra == 'docs'
86
90
  Requires-Dist: nbsphinx>=0.9; extra == 'docs'
87
91
  Requires-Dist: pyyaml; extra == 'docs'
88
92
  Requires-Dist: readthedocs-sphinx-search; extra == 'docs'
89
93
  Requires-Dist: setuptools; extra == 'docs'
90
- Requires-Dist: sphinx-autodoc-typehints>=1.25.2; extra == 'docs'
91
- Requires-Dist: sphinx-book-theme>=1.1.0; extra == 'docs'
92
- Requires-Dist: sphinx-click; extra == 'docs'
93
- Requires-Dist: sphinx-copybutton; extra == 'docs'
94
+ Requires-Dist: sphinx-autodoc-typehints<4,>=1.25.2; extra == 'docs'
95
+ Requires-Dist: sphinx-book-theme<2,>=1.1; extra == 'docs'
96
+ Requires-Dist: sphinx-click<7,>=5; extra == 'docs'
97
+ Requires-Dist: sphinx-copybutton<0.6,>=0.5; extra == 'docs'
94
98
  Requires-Dist: sphinx-design; extra == 'docs'
95
- Requires-Dist: sphinx>=7; extra == 'docs'
96
- Requires-Dist: sphinxcontrib-bibtex; extra == 'docs'
97
- Requires-Dist: sphinxext-opengraph; extra == 'docs'
99
+ Requires-Dist: sphinx<8,>=7; extra == 'docs'
100
+ Requires-Dist: sphinxcontrib-bibtex<3,>=2; extra == 'docs'
101
+ Requires-Dist: sphinxext-opengraph<0.10,>=0.9; extra == 'docs'
102
+ Provides-Extra: misc
103
+ Requires-Dist: networkx>=3.2; extra == 'misc'
104
+ Requires-Dist: upsetplot; extra == 'misc'
105
+ Provides-Extra: ml-base
106
+ Requires-Dist: scikit-learn>=1.0.2; extra == 'ml-base'
107
+ Requires-Dist: tensorly; extra == 'ml-base'
108
+ Requires-Dist: torch>=1.9.0; extra == 'ml-base'
109
+ Provides-Extra: ml-extended
110
+ Requires-Dist: captum; extra == 'ml-extended'
111
+ Requires-Dist: hydra-core; extra == 'ml-extended'
112
+ Requires-Dist: lightning; extra == 'ml-extended'
113
+ Requires-Dist: omegaconf; extra == 'ml-extended'
114
+ Requires-Dist: shap; extra == 'ml-extended'
115
+ Requires-Dist: wandb; extra == 'ml-extended'
116
+ Provides-Extra: ont
117
+ Requires-Dist: pod5>=0.1.21; extra == 'ont'
118
+ Provides-Extra: plotting
119
+ Requires-Dist: matplotlib>=3.6.2; extra == 'plotting'
120
+ Requires-Dist: seaborn>=0.11; extra == 'plotting'
121
+ Provides-Extra: pybedtools
122
+ Requires-Dist: pybedtools>=0.12.0; extra == 'pybedtools'
123
+ Provides-Extra: pybigwig
124
+ Requires-Dist: pybigwig>=0.3.24; extra == 'pybigwig'
125
+ Provides-Extra: pysam
126
+ Requires-Dist: pysam>=0.19.1; extra == 'pysam'
127
+ Provides-Extra: qc
128
+ Requires-Dist: multiqc; extra == 'qc'
129
+ Provides-Extra: torch
130
+ Requires-Dist: torch>=1.9.0; extra == 'torch'
131
+ Provides-Extra: umap
132
+ Requires-Dist: pynndescent>=0.5.10; extra == 'umap'
133
+ Requires-Dist: umap-learn>=0.5.5; extra == 'umap'
98
134
  Description-Content-Type: text/markdown
99
135
 
100
136
  [![PyPI](https://img.shields.io/pypi/v/smftools.svg)](https://pypi.org/project/smftools)
@@ -2,18 +2,13 @@
2
2
 
3
3
  ## PyPi version - Easiest starting point
4
4
 
5
- Install smftools from [PyPI](https://pypi.org/project/smftools):
6
-
7
- ```shell
8
- pip install smftools
9
- ```
10
-
11
- It is recommended to first create and activate a conda environment before installing smftools to ensure dependencies are managed smoothly:
5
+ It is recommended to first create and activate a conda environment before installing smftools to ensure dependencies are managed smoothly. The following sets up a conda environment, activates the environment, and installs the base smftools and uses a Pytorch backend:
12
6
 
13
7
  ```shell
14
8
  conda create -n smftools
15
9
  conda activate smftools
16
- pip install smftools
10
+ pip install --upgrade pip
11
+ pip install smftools[torch]
17
12
  ```
18
13
 
19
14
  Ensure that you can access dorado, modkit, and minimap2 executables from the terminal in this environment.
@@ -24,7 +19,8 @@ For example, if you want to check if dorado is executable, simply run this in th
24
19
  dorado
25
20
  ```
26
21
 
27
- On Mac OSX, the following can be used to congigure minimap2 (with brew) and BedGraphToBigWig (with wget).
22
+ On Mac OSX, the following can be used to congigure minimap2 (with brew) if you do not want to use the dorado aligner.
23
+ Also, optional samtools (brew), bedtools (brew) and BedGraphToBigWig (with wget) can be installed and configured if you prefer to use the CLI backend. SMFtools also has the option to use a Python backend instead of these CLI backends if you pip install with the optional dependency flags: pysamtools, pybedtools, pybigwig.
28
24
 
29
25
  ```shell
30
26
  brew install minimap2
@@ -33,6 +29,36 @@ chmod +x bedGraphToBigWig
33
29
  sudo mv bedGraphToBigWig /usr/local/bin/
34
30
  ```
35
31
 
32
+ If you are starting from Nanopore POD5 files, you will need to install with the ont option.
33
+ ```shell
34
+ pip install smftools[ont]
35
+ ```
36
+
37
+ If you want multiqc to be performed on your experiment, you will need to use the qc option on install.
38
+ ```shell
39
+ pip install smftools[qc]
40
+ ```
41
+
42
+ If you want to use the automated plotting functions, you will need to install the plotting dependencies.
43
+ ```shell
44
+ pip install smftools[plotting]
45
+ ```
46
+
47
+ If you prefer to use python backends (or do not have the CLI backends installed) for samtools, bedtools, BedGraphToBigWig, use the following options.
48
+ ```shell
49
+ pip install smftools[pysamtools,pybedtools,pybigwig]
50
+ ```
51
+
52
+ If you want to generate UMAPs and perform Leiden clustering, use the following options.
53
+ ```shell
54
+ pip install smftools[scanpy,clustering]
55
+ ```
56
+
57
+ If you just want to install the full functionality of smftools, just use the following install option.
58
+ ```shell
59
+ pip install smftools[all]
60
+ ```
61
+
36
62
  ## Development Version - recommended to use this method for most up to date versions
37
63
 
38
64
  Clone smftools from source and change into the smftools directory:
@@ -0,0 +1,4 @@
1
+ (v0.3.0)=
2
+
3
+ 0.3.0 2026-01-20
4
+ Version 0.3.0 Has split the smftools dependencies into its core dependencies, as well as various optional dependencies depending on the user's intended use in order to keep the package as light as possible. The package can now use wither a CLI or a Python based backend for Samtools, Bedtools, and BedGraphToBigWig for smftools load functionality.
@@ -2,6 +2,11 @@
2
2
 
3
3
  # Release notes
4
4
 
5
+ ### Version 0.3.0
6
+
7
+ ```{include} /release-notes/0.3.0.md
8
+ ```
9
+
5
10
  ### Version 0.2.3
6
11
 
7
12
  ```{include} /release-notes/0.2.3.md
@@ -0,0 +1,16 @@
1
+ sphinx>=7,<8
2
+ sphinx-book-theme>=1.1.0,<2
3
+ sphinx-autodoc-typehints>=1.25.2,<4
4
+ myst-parser>=2,<3
5
+ myst-nb>=1,<2
6
+ sphinx-design
7
+ readthedocs-sphinx-search
8
+ sphinxext-opengraph
9
+ sphinx-copybutton>=0.5,<0.6
10
+ sphinx-click>=5,<7
11
+ nbsphinx>=0.9
12
+ ipython>=7.20
13
+ matplotlib!=3.6.1
14
+ sphinxcontrib-bibtex
15
+ setuptools
16
+ pyyaml
@@ -2,7 +2,8 @@
2
2
 
3
3
  smftools uses an experiment configuration CSV to define paths, modality settings, and workflow
4
4
  options. You can start from the repository template (`experiment_config.csv`) and fill in your
5
- experiment-specific values.
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.
6
7
 
7
8
  ## CSV format
8
9
 
@@ -25,7 +25,7 @@ keywords = [
25
25
  readme = "README.md"
26
26
  classifiers = [
27
27
  "License :: OSI Approved :: MIT License",
28
- "Development Status :: 2 - Pre-Alpha",
28
+ "Development Status :: 3 - Alpha",
29
29
  "Environment :: Console",
30
30
  "Intended Audience :: Developers",
31
31
  "Intended Audience :: Science/Research",
@@ -36,39 +36,17 @@ classifiers = [
36
36
  "Programming Language :: Python :: 3.11",
37
37
  "Programming Language :: Python :: 3.12",
38
38
  "Programming Language :: Python :: 3.13",
39
- "Programming Language :: Python :: 3.14",
40
39
  "Topic :: Scientific/Engineering :: Bio-Informatics",
41
40
  "Topic :: Scientific/Engineering :: Visualization"
42
41
  ]
43
42
  dependencies = [
44
43
  "anndata>=0.10.0",
45
44
  "biopython>=1.79",
46
- "captum",
47
45
  "click",
48
- "fastcluster",
49
- "hydra-core",
50
- "igraph",
51
- "leidenalg",
52
- "lightning",
53
- "multiqc",
54
- "networkx>=3.2",
55
46
  "numpy>=1.22.0,<2",
56
- "omegaconf",
57
47
  "pandas>=1.4.2",
58
- "pod5>=0.1.21",
59
- "pyfaidx>=0.8.0",
60
- "pybedtools>=0.12.0",
61
- "pyBigWig>=0.3.24",
62
- "pysam>=0.19.1",
63
- "scanpy>=1.9",
64
- "scikit-learn>=1.0.2",
65
48
  "scipy>=1.7.3",
66
- "shap",
67
- "seaborn>=0.11",
68
- "torch>=1.9.0",
69
49
  "tqdm",
70
- "upsetplot",
71
- "wandb"
72
50
  ]
73
51
  dynamic = ["version"]
74
52
 
@@ -81,27 +59,130 @@ smftools = "smftools.cli_entry:cli"
81
59
 
82
60
  [project.optional-dependencies]
83
61
 
84
- dev = ["ruff", "pre-commit", "pytest", "pytest-cov"]
62
+ dev = [
63
+ "ruff",
64
+ "pre-commit",
65
+ "pytest",
66
+ "pytest-cov"]
85
67
 
86
68
  docs = [
87
- "sphinx>=7",
88
- "sphinx-book-theme>=1.1.0",
89
- "sphinx-autodoc-typehints>=1.25.2",
90
- "myst-parser>=2",
91
- "myst-nb>=1",
69
+ "sphinx>=7,<8",
70
+ "sphinx-book-theme>=1.1,<2",
71
+ "sphinx-autodoc-typehints>=1.25.2,<4",
72
+ "myst-parser>=2,<3",
73
+ "myst-nb>=1,<2",
92
74
  "sphinx-design",
93
75
  "readthedocs-sphinx-search",
94
- "sphinxext-opengraph",
95
- "sphinx-copybutton",
96
- "sphinx-click",
76
+ "sphinxext-opengraph>=0.9,<0.10",
77
+ "sphinx-copybutton>=0.5,<0.6",
78
+ "sphinx-click>=5,<7",
97
79
  "nbsphinx>=0.9",
98
80
  "ipython>=7.20",
99
81
  "matplotlib!=3.6.1",
100
- "sphinxcontrib-bibtex",
82
+ "sphinxcontrib-bibtex>=2,<3",
101
83
  "setuptools",
102
84
  "pyyaml"
103
85
  ]
104
86
 
87
+ cluster = [
88
+ "fastcluster",
89
+ "igraph",
90
+ "leidenalg",
91
+ ]
92
+
93
+ misc = [
94
+ "networkx>=3.2",
95
+ "upsetplot",
96
+ ]
97
+
98
+ ont = [
99
+ "pod5>=0.1.21",
100
+ ]
101
+
102
+ plotting = [
103
+ "matplotlib>=3.6.2",
104
+ "seaborn>=0.11",
105
+ ]
106
+
107
+ pybedtools = [
108
+ "pybedtools>=0.12.0",
109
+ ]
110
+
111
+ pybigwig = [
112
+ "pyBigWig>=0.3.24",
113
+ ]
114
+
115
+ pysam = [
116
+ "pysam>=0.19.1",
117
+ ]
118
+
119
+ ml-base = [
120
+ "scikit-learn>=1.0.2",
121
+ "tensorly",
122
+ "torch>=1.9.0",
123
+ ]
124
+
125
+ ml-extended = [
126
+ "captum",
127
+ "hydra-core",
128
+ "lightning",
129
+ "omegaconf",
130
+ "shap",
131
+ "wandb",
132
+ ]
133
+
134
+ qc = [
135
+ "multiqc",
136
+ ]
137
+
138
+ umap = [
139
+ "pynndescent>=0.5.10",
140
+ "umap-learn>=0.5.5",
141
+ ]
142
+
143
+ torch = [
144
+ "torch>=1.9.0",
145
+ ]
146
+
147
+ all = [
148
+ # cluster
149
+ "fastcluster",
150
+ "leidenalg",
151
+
152
+ # informatics
153
+ "pybedtools>=0.12.0",
154
+ "pyBigWig>=0.3.24",
155
+ "pysam>=0.19.1",
156
+
157
+ # misc
158
+ "networkx>=3.2",
159
+ "upsetplot",
160
+
161
+ # ont
162
+ "pod5>=0.1.21",
163
+
164
+ # plotting
165
+ "matplotlib>=3.6.2",
166
+ "seaborn>=0.11",
167
+
168
+ # ml
169
+ "captum",
170
+ "hydra-core",
171
+ "lightning",
172
+ "omegaconf",
173
+ "scikit-learn>=1.0.2",
174
+ "shap",
175
+ "torch>=1.9.0",
176
+ "wandb",
177
+
178
+ # umap
179
+ "pynndescent>=0.5.10",
180
+ "umap-learn>=0.5.5",
181
+
182
+ # qc
183
+ "multiqc",
184
+ ]
185
+
105
186
  [tool.hatch.build]
106
187
  sources = ["src"]
107
188
 
@@ -150,4 +231,4 @@ line-ending = "lf"
150
231
 
151
232
  [tool.ruff.lint]
152
233
  select = ["E", "F", "I", "B", "UP", "SIM", "ISC"]
153
- ignore = ["E501", "F", "B", "UP","SIM"]
234
+ ignore = ["E501", "F", "B", "UP","SIM"]
@@ -1,31 +1,39 @@
1
- # Essential packages
1
+ # Core
2
2
  anndata>=0.10.0
3
3
  biopython>=1.79
4
- captum
5
4
  click
5
+ numpy>=1.22.0,<2
6
+ pandas>=1.4.2
7
+ pyfaidx>=0.8.0
8
+ scipy>=1.7.3
9
+ seaborn>=0.11
10
+ tqdm
11
+
12
+ # Graph / clustering
6
13
  fastcluster
7
- hydra-core
8
- leidenalg
9
- lightning
10
14
  igraph
11
15
  leidenalg
12
- lightning
13
- multiqc
14
16
  networkx>=3.2
15
- numpy>=1.22.0,<2
16
- omegaconf
17
- pandas>=1.4.2
17
+
18
+ # Genomics / informatics
18
19
  pod5>=0.1.21
19
20
  pybedtools>=0.12.0
20
21
  pyBigWig>=0.3.24
21
- pyfaidx>=0.8.0
22
22
  pysam>=0.19.1
23
- scanpy>=1.11
23
+ umap-learn>=0.5.5
24
+ pynndescent>=0.5.10
25
+
26
+ # ML / modeling
27
+ captum
28
+ hydra-core
29
+ lightning
30
+ omegaconf
24
31
  scikit-learn>=1.0.2
25
- scipy>=1.7.3
26
- seaborn>=0.11
27
32
  shap
33
+ tensorly
28
34
  torch>=1.9.0
29
- tqdm
30
- upsetplot
31
35
  wandb
36
+
37
+ # QC / viz
38
+ multiqc
39
+ upsetplot