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.
- {smftools-0.2.5 → smftools-0.3.1}/.github/workflows/ci.yml +43 -40
- {smftools-0.2.5 → smftools-0.3.1}/AGENTS.md +10 -0
- {smftools-0.2.5 → smftools-0.3.1}/PKG-INFO +69 -33
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/installation.md +35 -9
- smftools-0.3.1/docs/source/release-notes/0.3.0.md +4 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/index.md +5 -0
- smftools-0.3.1/docs/source/requirements.txt +16 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/experiment_config.md +2 -1
- {smftools-0.2.5 → smftools-0.3.1}/pyproject.toml +115 -34
- {smftools-0.2.5 → smftools-0.3.1}/requirements.txt +24 -16
- smftools-0.3.1/smftools/__init__.py +60 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/_settings.py +2 -0
- smftools-0.3.1/smftools/_version.py +3 -0
- smftools-0.3.1/smftools/cli/__init__.py +1 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/archived/cli_flows.py +2 -0
- smftools-0.3.1/smftools/cli/helpers.py +82 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/hmm_adata.py +239 -33
- smftools-0.3.1/smftools/cli/latent_adata.py +318 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/load_adata.py +167 -131
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/preprocess_adata.py +180 -53
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli/spatial_adata.py +152 -100
- {smftools-0.2.5 → smftools-0.3.1}/smftools/cli_entry.py +38 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/conversion.yaml +11 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/default.yaml +42 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/experiment_config.py +59 -1
- smftools-0.3.1/smftools/constants.py +102 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/HMM.py +97 -3
- smftools-0.3.1/smftools/hmm/__init__.py +24 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/apply_hmm_batched.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/calculate_distances.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/call_hmm_peaks.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/archived/train_hmm.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/call_hmm_peaks.py +5 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/display_hmm.py +4 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/hmm_readwrite.py +7 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/hmm/nucleosome_hmm_refinement.py +2 -0
- smftools-0.3.1/smftools/informatics/__init__.py +68 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/bam_conversion.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/bam_direct.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/basecall_pod5s.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/basecalls_to_adata.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/conversion_smf.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/deaminase_smf.py +1 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/direct_smf.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/fast5_to_pod5.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/align_and_sort_BAM.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/aligned_BAM_to_bed.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/bed_to_bigwig.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/canoncall.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/converted_BAM_to_adata.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/count_aligned_reads.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/demux_and_index_BAM.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_base_identities.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_mods.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_read_features_from_bam.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_read_lengths_from_bed.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/extract_readnames_from_BAM.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/find_conversion_sites.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/generate_converted_FASTA.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/get_chromosome_lengths.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/get_native_references.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/index_fasta.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/informatics.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/load_adata.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/make_modbed.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/modQC.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/modcall.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/ohe_batching.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/ohe_layers_decode.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/one_hot_decode.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/one_hot_encode.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/plot_bed_histograms.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/separate_bam_by_bc.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/split_and_index_BAM.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/print_bam_query_seq.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/subsample_fasta_from_bed.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/subsample_pod5.py +2 -0
- smftools-0.3.1/smftools/informatics/bam_functions.py +1951 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/basecalling.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/bed_functions.py +271 -61
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/binarize_converted_base_identities.py +3 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/complement_base_list.py +2 -0
- smftools-0.3.1/smftools/informatics/converted_BAM_to_adata.py +1125 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/fasta_functions.py +94 -10
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/h5ad_functions.py +123 -4
- smftools-0.3.1/smftools/informatics/modkit_extract_to_adata.py +1897 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/modkit_functions.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/ohe.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/pod5_functions.py +3 -2
- smftools-0.3.1/smftools/informatics/sequence_encoding.py +72 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/logging_utils.py +21 -2
- smftools-0.3.1/smftools/machine_learning/__init__.py +23 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/anndata_data_module.py +18 -4
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/data/preprocessing.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/eval_utils.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/evaluation/evaluators.py +14 -9
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/inference_utils.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/lightning_inference.py +6 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/sklearn_inference.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/inference/sliding_window_inference.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/base.py +7 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/cnn.py +7 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/lightning_base.py +16 -11
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/mlp.py +5 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/positional.py +7 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/rnn.py +5 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/sklearn_models.py +14 -9
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/transformer.py +7 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/models/wrappers.py +6 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/train_lightning_model.py +13 -3
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/training/train_sklearn_model.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/__init__.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/device.py +5 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/machine_learning/utils/grl.py +5 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/metadata.py +1 -1
- smftools-0.3.1/smftools/optional_imports.py +31 -0
- smftools-0.3.1/smftools/plotting/__init__.py +42 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/autocorrelation_plotting.py +9 -5
- {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/classifiers.py +16 -4
- smftools-0.3.1/smftools/plotting/general_plotting.py +3368 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/hmm_plotting.py +97 -9
- {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/position_stats.py +15 -7
- {smftools-0.2.5 → smftools-0.3.1}/smftools/plotting/qc_plotting.py +6 -1
- smftools-0.3.1/smftools/preprocessing/__init__.py +37 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/append_base_context.py +17 -17
- smftools-0.3.1/smftools/preprocessing/append_mismatch_frequency_sites.py +158 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/add_read_length_and_mapping_qc.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/calculate_complexity.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/mark_duplicates.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/preprocessing.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/archived/remove_duplicates.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binary_layers_to_ohe.py +2 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_complexity_II.py +4 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_consensus.py +1 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_pairwise_differences.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_pairwise_hamming_distances.py +3 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_position_Youden.py +9 -2
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_read_modification_stats.py +6 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_reads_on_length_quality_mapping.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_reads_on_modification_thresholds.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/flag_duplicate_reads.py +42 -54
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/make_dirs.py +2 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/min_non_diagonal.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/recipes.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/readwrite.py +53 -17
- {smftools-0.2.5 → smftools-0.3.1}/smftools/schema/anndata_schema_v1.yaml +15 -1
- smftools-0.3.1/smftools/tools/__init__.py +31 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/apply_hmm.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classifiers.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classify_methylated_features.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/classify_non_methylated_features.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/subset_adata_v1.py +2 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/archived/subset_adata_v2.py +2 -0
- smftools-0.3.1/smftools/tools/calculate_leiden.py +57 -0
- smftools-0.3.1/smftools/tools/calculate_nmf.py +119 -0
- smftools-0.3.1/smftools/tools/calculate_umap.py +186 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/cluster_adata_on_methylation.py +7 -1
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/position_stats.py +17 -27
- smftools-0.3.1/smftools/tools/rolling_nn_distance.py +235 -0
- smftools-0.3.1/smftools/tools/tensor_factorization.py +169 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/tools/test_tools_imports.py +2 -0
- smftools-0.3.1/tests/unit/hmm/test_mask_read_span.py +43 -0
- smftools-0.3.1/tests/unit/informatics/test_bam_base_identities.py +81 -0
- smftools-0.3.1/tests/unit/informatics/test_bam_read_tags.py +50 -0
- smftools-0.3.1/tests/unit/informatics/test_bam_secondary_supplementary.py +125 -0
- smftools-0.3.1/tests/unit/informatics/test_h5ad_secondary_supplementary.py +33 -0
- smftools-0.3.1/tests/unit/informatics/test_modkit_sequence_batch_files.py +43 -0
- smftools-0.3.1/tests/unit/informatics/test_modkit_sequence_encoding.py +49 -0
- smftools-0.3.1/tests/unit/informatics/test_tool_backends.py +170 -0
- smftools-0.3.1/tests/unit/test_append_mismatch_frequency_sites.py +62 -0
- smftools-0.3.1/tests/unit/test_calculate_nmf.py +29 -0
- smftools-0.3.1/tests/unit/test_combined_hmm_length_clustermap_barplot.py +46 -0
- smftools-0.3.1/tests/unit/test_combined_hmm_length_clustermap_outputs.py +41 -0
- smftools-0.3.1/tests/unit/test_combined_hmm_raw_clustermap_nan_fill.py +43 -0
- smftools-0.3.1/tests/unit/test_combined_raw_clustermap_barplot_nan_ignore.py +91 -0
- smftools-0.3.1/tests/unit/test_combined_raw_clustermap_nan_fill.py +43 -0
- smftools-0.3.1/tests/unit/test_hmm_clustermap_colormap.py +18 -0
- smftools-0.3.1/tests/unit/test_length_layer_subclass_mapping.py +28 -0
- smftools-0.3.1/tests/unit/test_methylation_fraction_nan_handling.py +36 -0
- smftools-0.3.1/tests/unit/test_plot_cp_sequence_components.py +38 -0
- smftools-0.3.1/tests/unit/test_plot_hmm_size_contours_feature_ranges.py +41 -0
- smftools-0.3.1/tests/unit/test_plot_hmm_size_contours_nan_values.py +35 -0
- smftools-0.3.1/tests/unit/test_plot_nmf_components.py +26 -0
- smftools-0.3.1/tests/unit/test_plot_read_span_quality_clustermaps.py +35 -0
- smftools-0.3.1/tests/unit/test_plot_rolling_nn_and_layer.py +61 -0
- smftools-0.3.1/tests/unit/test_plot_sequence_integer_encoding_clustermaps.py +40 -0
- smftools-0.3.1/tests/unit/test_readwrite.py +36 -0
- smftools-0.3.1/tests/unit/test_rolling_nn_distance.py +232 -0
- smftools-0.3.1/tests/unit/test_tensor_factorization.py +65 -0
- smftools-0.3.1/tests/unit/tools/test_calculate_umap.py +74 -0
- smftools-0.2.5/docs/source/requirements.txt +0 -16
- smftools-0.2.5/smftools/__init__.py +0 -28
- smftools-0.2.5/smftools/_version.py +0 -1
- smftools-0.2.5/smftools/cli/helpers.py +0 -54
- smftools-0.2.5/smftools/constants.py +0 -37
- smftools-0.2.5/smftools/hmm/__init__.py +0 -13
- smftools-0.2.5/smftools/informatics/__init__.py +0 -43
- smftools-0.2.5/smftools/informatics/bam_functions.py +0 -1034
- smftools-0.2.5/smftools/informatics/converted_BAM_to_adata.py +0 -660
- smftools-0.2.5/smftools/informatics/modkit_extract_to_adata.py +0 -1309
- smftools-0.2.5/smftools/machine_learning/__init__.py +0 -7
- smftools-0.2.5/smftools/plotting/__init__.py +0 -32
- smftools-0.2.5/smftools/plotting/general_plotting.py +0 -1582
- smftools-0.2.5/smftools/preprocessing/__init__.py +0 -38
- smftools-0.2.5/smftools/tools/__init__.py +0 -19
- smftools-0.2.5/smftools/tools/calculate_umap.py +0 -101
- smftools-0.2.5/tests/unit/__init__.py +0 -0
- smftools-0.2.5/tests/unit/test_readwrite.py +0 -7
- {smftools-0.2.5 → smftools-0.3.1}/.gitattributes +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/.gitignore +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/.pre-commit-config.yaml +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/.readthedocs.yaml +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/CONTRIBUTING.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/LICENSE +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/README.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/Makefile +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/make.bat +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/converted_BAM_to_adata.png +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/modkit_extract_to_adata.png +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools-1.svg +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools-1.tif +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_informatics_diagram.pdf +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_informatics_diagram.png +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_static/smftools_preprocessing_diagram.png +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/_templates/tmp +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/datasets.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/index.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/informatics.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/preprocessing.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/api/tools.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/basic_usage.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/cli.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/conf.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/contributors.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/dev/index.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/index.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/references.bib +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/references.rst +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.0.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.1.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.1.6.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.2.1.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/release-notes/0.2.3.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/schema/anndata_schema.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/cli_usage.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/docs/source/tutorials/index.md +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/experiment_config.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/notebooks/Kissiov_and_McKenna_2025_example_notebook.ipynb +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/notebooks/Kissiov_and_McKenna_2025_sample_sheet.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/sample_sheet.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/deaminase.yaml +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/direct.yaml +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/config/discover_input_files.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/F1_hybrid_NKG2A_enhander_promoter_GpC_conversion_SMF.h5ad.gz +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/F1_sample_sheet.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/dCas9_m6A_invitro_kinetics.h5ad.gz +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/datasets/datasets.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/bam_qc.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/archived/helpers/archived/concatenate_fastqs_to_bam.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/informatics/run_multiqc.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/append_binary_layer_by_base_context.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binarize.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/binarize_on_Youden.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_coverage.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/calculate_read_length_stats.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/clean_NaN.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/filter_adata_by_nan_proportion.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/invert_adata.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/load_sample_sheet.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/reindex_references_adata.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/preprocessing/subsample_adata.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/schema/__init__.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/general_tools.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/read_stats.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/spatial_autocorrelation.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/smftools/tools/subset_adata.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/__init__.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_bed_I.bed +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_fasta_I.fa +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_fasta_I.fa.fai +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/_test_pod5_I.pod5 +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_conversion_I.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_deaminase_I.csv +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/_test_inputs/test_experiment_config_direct_I.csv +0 -0
- {smftools-0.2.5/smftools/cli → smftools-0.3.1/tests/e2e}/__init__.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/e2e/cli/test_load_adata.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/e2e/cli/test_spatial_adata.py +0 -0
- {smftools-0.2.5/tests/e2e → smftools-0.3.1/tests/integration}/__init__.py +0 -0
- {smftools-0.2.5/tests/integration → smftools-0.3.1/tests/smoke}/__init__.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/cli/test_cli_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/config/test_config_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/datasets/test_datasets_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/hmm/test_hmm_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/import_helpers.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/informatics/test_informatics_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/data/test_data_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/evaluation/test_evaluation_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/inference/test_inference_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/models/test_models_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/training/test_training_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/machine_learning/utils/test_utils_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/plotting/test_plotting_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/preprocessing/test_preprocessing_imports.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/smoke/test_smftools_imports.py +0 -0
- {smftools-0.2.5/tests/smoke → smftools-0.3.1/tests/unit}/__init__.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/unit/config/test_LoadExperimentConfig.py +0 -0
- {smftools-0.2.5 → smftools-0.3.1}/tests/unit/datasets/test_datasets.py +0 -0
- {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
|
-
-
|
|
19
|
-
|
|
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
|
-
-
|
|
43
|
-
|
|
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
|
-
-
|
|
67
|
-
|
|
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
|
-
-
|
|
102
|
-
|
|
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.
|
|
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 ::
|
|
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
|
-
|
|
75
|
-
Requires-Dist:
|
|
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
|
|
85
|
-
Requires-Dist: myst-parser
|
|
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
|
|
91
|
-
Requires-Dist: sphinx-book-theme
|
|
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
|
|
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
|
[](https://pypi.org/project/smftools)
|
|
@@ -2,18 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## PyPi version - Easiest starting point
|
|
4
4
|
|
|
5
|
-
|
|
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
|
|
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)
|
|
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.
|
|
@@ -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 ::
|
|
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 = [
|
|
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
|
|
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
|
-
#
|
|
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
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|