from mtsv.utils import script_path

include: "binning_snek"
include: "summary_snek"

shell.prefix("set -euo pipefail;")

SCRIPTS = {
    'random_kmers': script_path("MTSv_random_kmers.py"),
    'analyze': script_path("MTSv_analyze.py")
}


EXP_DB_PARAMS = {
    'db_path': config['database_config'],
    'kmer': config['kmer'],
    'edits': config['edits'],
    'seed_size': config['seed-size'],
    'seed_gap': config['seed-gap'],
    'min_seeds': config['min-seeds']}

rule analyze_all:
    input: config['analysis_file']


MEM = (config['kmer'] * 
        config['n_kmers'] * 
        config['threads'] * 
        len(open(config['candidate_taxa_req']).read().split("\n")))



rule random_kmers:
    input: config['candidate_taxa_req']
    output:
        fasta=config['fasta']
    message:
        """
        Generating random kmers from taxa in {input}.
        Writing to {output}.
        Logging to {log}
        Snakemake scheduler assuming {threads} thread(s) and 
        {resources.mem_mb} Mb of memory."""
    resources:
        mem_mb=lambda wildcards, attempt: max(
            1, attempt * int(MEM * 0.0000015))
    params:
        kmer_size=config['kmer'],
        n_kmers=config['n_kmers'],
        fasta_path=config['fasta_db'],
        pickle_path=config['serial_path']
    threads:
        config['threads']
    log:
        config['log_file']
    script: SCRIPTS['random_kmers']


rule analyze:
    input: config['summary_file']
    output: config['analysis_file']
    resources:
        mem_mb=lambda wildcards, attempt: attempt
    message: 
        """
        Analyzing statistics.
        Reading from {input}
        Writing to {output}.
        Logging to {log}
        Snakemake scheduler assuming {threads} thread(s) and 
        {resources.mem_mb} Mb of memory.
        """
    params:
        obs_summary=config['summary_file_in'],
        taxa=config['candidate_taxa'],
        req_taxa=config['candidate_taxa_req'],
        exp_db_params=EXP_DB_PARAMS
    log: config['log_file']
    script: SCRIPTS['analyze']    

    
