Full Code of widdowquinn/pyani for AI

master 8e493851039b cached
510 files
346.1 MB
26.3M tokens
370 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (105,149K chars total). Download the full file to get everything.
Repository: widdowquinn/pyani
Branch: master
Commit: 8e493851039b
Files: 510
Total size: 346.1 MB

Directory structure:
gitextract_pupze2fw/

├── .all-contributorsrc
├── .codecov.yml
├── .flake8
├── .github/
│   ├── ISSUE_TEMPLATE.txt
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── requirements-rtd.txt
│   └── workflows/
│       ├── build-linux.yml
│       └── build-macos.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CHANGES.md
├── CITATIONS
├── CODEOWNERS
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── README_v_0_2_x.md
├── _config.yml
├── bandit.yml
├── docs/
│   ├── Makefile
│   ├── about.rst
│   ├── basic_use.rst
│   ├── citations.rst
│   ├── conf.py
│   ├── contributing.rst
│   ├── createdb.rst
│   ├── download.rst
│   ├── examples.rst
│   ├── index.rst
│   ├── indexing.rst
│   ├── installation.rst
│   ├── interpreting_plots.rst
│   ├── licensing.rst
│   ├── quickstart.rst
│   ├── requirements.rst
│   ├── run_anib.rst
│   ├── run_anim.rst
│   ├── run_fastani.rst
│   ├── scheduler.rst
│   ├── subcmd_anib.rst
│   ├── subcmd_anim.rst
│   ├── subcmd_classify.rst
│   ├── subcmd_createdb.rst
│   ├── subcmd_download.rst
│   ├── subcmd_fastani.rst
│   ├── subcmd_index.rst
│   ├── subcmd_listdeps.rst
│   ├── subcmd_plot.rst
│   ├── subcmd_report.rst
│   ├── subcommands.rst
│   ├── testing.rst
│   └── using_a_scheduler.rst
├── pyani/
│   ├── __init__.py
│   ├── anib.py
│   ├── aniblastall.py
│   ├── anim.py
│   ├── blast.py
│   ├── dependencies.py
│   ├── download.py
│   ├── fastani.py
│   ├── logger.py
│   ├── nucmer.py
│   ├── pyani_classify.py
│   ├── pyani_config.py
│   ├── pyani_files.py
│   ├── pyani_graphics/
│   │   ├── __init__.py
│   │   ├── mpl/
│   │   │   └── __init__.py
│   │   └── sns/
│   │       └── __init__.py
│   ├── pyani_jobs.py
│   ├── pyani_orm.py
│   ├── pyani_report.py
│   ├── pyani_tools.py
│   ├── run_multiprocessing.py
│   ├── run_sge.py
│   ├── scripts/
│   │   ├── __init__.py
│   │   ├── average_nucleotide_identity.py
│   │   ├── delta_filter_wrapper.py
│   │   ├── genbank_get_genomes_by_taxon.py
│   │   ├── parsers/
│   │   │   ├── __init__.py
│   │   │   ├── anib_parser.py
│   │   │   ├── aniblastall_parser.py
│   │   │   ├── anim_parser.py
│   │   │   ├── classify_parser.py
│   │   │   ├── common_parser.py
│   │   │   ├── createdb_parser.py
│   │   │   ├── download_parser.py
│   │   │   ├── fastani_parser.py
│   │   │   ├── index_parser.py
│   │   │   ├── listdeps_parser.py
│   │   │   ├── plot_parser.py
│   │   │   ├── report_parser.py
│   │   │   ├── run_common_parser.py
│   │   │   └── scheduling_parser.py
│   │   ├── pyani_script.py
│   │   └── subcommands/
│   │       ├── __init__.py
│   │       ├── subcmd_anib.py
│   │       ├── subcmd_aniblastall.py
│   │       ├── subcmd_anim.py
│   │       ├── subcmd_classify.py
│   │       ├── subcmd_createdb.py
│   │       ├── subcmd_download.py
│   │       ├── subcmd_fastani.py
│   │       ├── subcmd_index.py
│   │       ├── subcmd_listdeps.py
│   │       ├── subcmd_plot.py
│   │       └── subcmd_report.py
│   └── tetra.py
├── pytest.ini
├── requirements-dev.txt
├── requirements-fastani-linux.txt
├── requirements-fastani-macos.txt
├── requirements-pip.txt
├── requirements-pyqt-conda.txt
├── requirements-pyqt-pip.txt
├── requirements-thirdparty-linux.txt
├── requirements-thirdparty-macos.txt
├── requirements.txt
├── setup.py
└── tests/
    ├── README.md
    ├── conftest.py
    ├── fixtures/
    │   ├── anib/
    │   │   ├── NC_002696-fragments.fna
    │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   ├── blastall/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── blastn/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── dataframes/
    │   │   │   ├── blastall_result.csv
    │   │   │   └── blastn_result.csv
    │   │   ├── fragfiles/
    │   │   │   ├── NC_002696-fragments.fna
    │   │   │   ├── NC_010338-fragments.fna
    │   │   │   ├── NC_011916-fragments.fna
    │   │   │   └── NC_014100-fragments.fna
    │   │   └── sequences/
    │   │       ├── NC_002696.fna
    │   │       ├── NC_010338.fna
    │   │       ├── NC_011916.fna
    │   │       └── NC_014100.fna
    │   ├── anim/
    │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   ├── dataframes/
    │   │   │   └── deltadir_result.csv
    │   │   ├── deltadir/
    │   │   │   ├── NC_002696/
    │   │   │   │   ├── NC_002696_vs_NC_010338.delta
    │   │   │   │   ├── NC_002696_vs_NC_010338.filter
    │   │   │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   │   │   ├── NC_002696_vs_NC_011916.filter
    │   │   │   │   ├── NC_002696_vs_NC_014100.delta
    │   │   │   │   └── NC_002696_vs_NC_014100.filter
    │   │   │   ├── NC_010338/
    │   │   │   │   ├── NC_010338_vs_NC_002696.delta
    │   │   │   │   ├── NC_010338_vs_NC_002696.filter
    │   │   │   │   ├── NC_010338_vs_NC_011916.delta
    │   │   │   │   ├── NC_010338_vs_NC_011916.filter
    │   │   │   │   ├── NC_010338_vs_NC_014100.delta
    │   │   │   │   └── NC_010338_vs_NC_014100.filter
    │   │   │   ├── NC_011916/
    │   │   │   │   ├── NC_011916_vs_NC_002696.delta
    │   │   │   │   ├── NC_011916_vs_NC_002696.filter
    │   │   │   │   ├── NC_011916_vs_NC_010338.delta
    │   │   │   │   ├── NC_011916_vs_NC_010338.filter
    │   │   │   │   ├── NC_011916_vs_NC_014100.delta
    │   │   │   │   ├── NC_011916_vs_NC_014100.filter
    │   │   │   │   ├── out.1coords
    │   │   │   │   ├── out.1delta
    │   │   │   │   ├── out.mcoords
    │   │   │   │   ├── out.mdelta
    │   │   │   │   ├── out.qdiff
    │   │   │   │   ├── out.rdiff
    │   │   │   │   ├── out.report
    │   │   │   │   ├── out.snps
    │   │   │   │   └── test.filter1
    │   │   │   └── NC_014100/
    │   │   │       ├── NC_014100_vs_NC_002696.delta
    │   │   │       ├── NC_014100_vs_NC_002696.filter
    │   │   │       ├── NC_014100_vs_NC_010338.delta
    │   │   │       ├── NC_014100_vs_NC_010338.filter
    │   │   │       ├── NC_014100_vs_NC_011916.delta
    │   │   │       └── NC_014100_vs_NC_011916.filter
    │   │   ├── sequences/
    │   │   │   ├── NC_002696.fna
    │   │   │   ├── NC_002696.fna.md5
    │   │   │   ├── NC_010338.fna
    │   │   │   ├── NC_010338.fna.md5
    │   │   │   ├── NC_011916.fna
    │   │   │   ├── NC_011916.fna.md5
    │   │   │   ├── NC_014100.fna
    │   │   │   ├── NC_014100.fna.md5
    │   │   │   ├── classes.txt
    │   │   │   └── labels.txt
    │   │   └── test.delta
    │   ├── concordance/
    │   │   ├── GCF_000011325.1_ASM1132v1_genomic.fna
    │   │   ├── GCF_000227605.2_ASM22760v2_genomic.fna
    │   │   ├── GCF_002243555.1_ASM224355v1_genomic.fna
    │   │   └── jspecies_output.tab
    │   ├── fastani/
    │   │   └── ecoli_vs_shiga.fastani
    │   ├── graphics/
    │   │   ├── ANIm_percentage_identity.tab
    │   │   ├── classes.tab
    │   │   └── labels.tab
    │   ├── legacy/
    │   │   └── ANI_input/
    │   │       ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │       ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │       ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │       ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │       ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │       ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │       ├── GCF_009827135.1_ASM982713v1_genomic.fna
    │   │       ├── classes.txt
    │   │       └── labels.txt
    │   ├── sequences/
    │   │   ├── NC_002696.fna
    │   │   ├── NC_010338.fna
    │   │   ├── NC_011916.fna
    │   │   └── NC_014100.fna
    │   ├── single_genome_download/
    │   │   ├── GCF_000011605.1_ASM1160v1_genomic.fna
    │   │   ├── GCF_000011605.1_ASM1160v1_genomic.md5
    │   │   ├── GCF_000011605.1_ASM1160v1_hashes.txt
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   └── targets/
    │       ├── fragments/
    │       │   ├── NC_002696-fragments.fna
    │       │   ├── NC_010338-fragments.fna
    │       │   ├── NC_011916-fragments.fna
    │       │   └── NC_014100-fragments.fna
    │       └── tetra/
    │           ├── correlation.tab
    │           └── zscore.json
    ├── target_ANIb_output/
    │   ├── ANIb_alignment_coverage.tab
    │   ├── ANIb_alignment_lengths.tab
    │   ├── ANIb_hadamard.tab
    │   ├── ANIb_percentage_identity.tab
    │   └── ANIb_similarity_errors.tab
    ├── target_ANIblastall_output/
    │   ├── ANIblastall_alignment_coverage.tab
    │   ├── ANIblastall_alignment_lengths.tab
    │   ├── ANIblastall_hadamard.tab
    │   ├── ANIblastall_percentage_identity.tab
    │   └── ANIblastall_similarity_errors.tab
    ├── target_ANIm_output/
    │   ├── ANIm_alignment_coverage.tab
    │   ├── ANIm_alignment_lengths.tab
    │   ├── ANIm_hadamard.tab
    │   ├── ANIm_percentage_identity.tab
    │   └── ANIm_similarity_errors.tab
    ├── target_TETRA_output/
    │   └── TETRA_correlations.tab
    ├── test_JSpecies/
    │   ├── Group_1/
    │   │   ├── TS32_31.fna
    │   │   ├── TS32_31.fna.tetra
    │   │   ├── TS32_31.fna_1020
    │   │   ├── TS43_20.fna
    │   │   ├── TS43_20.fna.tetra
    │   │   └── TS43_20.fna_1020
    │   ├── Group_2/
    │   │   ├── TS32_31.fna
    │   │   ├── TS32_31.fna_vs_TS43_20.fna.delta
    │   │   ├── TS43_20.fna
    │   │   └── TS43_20.fna_vs_TS32_31.fna.delta
    │   ├── NC_002696_1020_vs_NC_010338_JSpecies.tab
    │   ├── README.md
    │   ├── jspecies_results.tab
    │   ├── jspecies_results_3.tab
    │   └── pyani_tests/
    │       ├── NC_002696.fna
    │       ├── NC_002696.fna.nhr
    │       ├── NC_002696.fna.nin
    │       ├── NC_002696.fna.nnd
    │       ├── NC_002696.fna.nni
    │       ├── NC_002696.fna.nsd
    │       ├── NC_002696.fna.nsi
    │       ├── NC_002696.fna.nsq
    │       ├── NC_002696.fna.tetra
    │       ├── NC_002696.fna_1020
    │       ├── NC_002696.fna_vs_NC_010338.fna.delta
    │       ├── NC_002696.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_002696.fna_vs_NC_011916.fna.delta
    │       ├── NC_002696.fna_vs_NC_011916.fna_1020.blast
    │       ├── NC_002696.fna_vs_NC_014100.fna.delta
    │       ├── NC_002696.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_010338.fna
    │       ├── NC_010338.fna.nhr
    │       ├── NC_010338.fna.nin
    │       ├── NC_010338.fna.nnd
    │       ├── NC_010338.fna.nni
    │       ├── NC_010338.fna.nsd
    │       ├── NC_010338.fna.nsi
    │       ├── NC_010338.fna.nsq
    │       ├── NC_010338.fna.tetra
    │       ├── NC_010338.fna_1020
    │       ├── NC_010338.fna_vs_NC_002696.fna.delta
    │       ├── NC_010338.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_010338.fna_vs_NC_011916.fna.delta
    │       ├── NC_010338.fna_vs_NC_011916.fna_1020.blast
    │       ├── NC_010338.fna_vs_NC_014100.fna.delta
    │       ├── NC_010338.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_011916.fna
    │       ├── NC_011916.fna.nhr
    │       ├── NC_011916.fna.nin
    │       ├── NC_011916.fna.nnd
    │       ├── NC_011916.fna.nni
    │       ├── NC_011916.fna.nsd
    │       ├── NC_011916.fna.nsi
    │       ├── NC_011916.fna.nsq
    │       ├── NC_011916.fna.tetra
    │       ├── NC_011916.fna_1020
    │       ├── NC_011916.fna_vs_NC_002696.fna.delta
    │       ├── NC_011916.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_011916.fna_vs_NC_010338.fna.delta
    │       ├── NC_011916.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_011916.fna_vs_NC_014100.fna.delta
    │       ├── NC_011916.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_014100.fna
    │       ├── NC_014100.fna.nhr
    │       ├── NC_014100.fna.nin
    │       ├── NC_014100.fna.nnd
    │       ├── NC_014100.fna.nni
    │       ├── NC_014100.fna.nsd
    │       ├── NC_014100.fna.nsi
    │       ├── NC_014100.fna.nsq
    │       ├── NC_014100.fna.tetra
    │       ├── NC_014100.fna_1020
    │       ├── NC_014100.fna_vs_NC_002696.fna.delta
    │       ├── NC_014100.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_014100.fna_vs_NC_010338.fna.delta
    │       ├── NC_014100.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_014100.fna_vs_NC_011916.fna.delta
    │       └── NC_014100.fna_vs_NC_011916.fna_1020.blast
    ├── test_ani_data/
    │   ├── NC_002696/
    │   │   └── NC_002696_vs_NC_011916.delta
    │   ├── NC_002696.fna
    │   ├── NC_010338.fna
    │   ├── NC_011916.fna
    │   ├── class_labels.tab
    │   ├── classes.tab
    │   └── labels.tab
    ├── test_anib.py
    ├── test_aniblastall.py
    ├── test_anim.py
    ├── test_cli_parsing.py
    ├── test_concordance.py
    ├── test_dependencies.py
    ├── test_failing_data/
    │   ├── NC_000918.fna
    │   ├── NC_010473.fna
    │   ├── NC_013353.fna
    │   ├── NC_015216.fna
    │   ├── NC_023044.fna
    │   └── README.md
    ├── test_fastani.py
    ├── test_graphics.py
    ├── test_input/
    │   ├── anib/
    │   │   ├── NC_002696-fragments.fna
    │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   ├── blastall/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── blastn/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   └── fragfiles/
    │   │       ├── NC_002696-fragments.fna
    │   │       ├── NC_010338-fragments.fna
    │   │       ├── NC_011916-fragments.fna
    │   │       └── NC_014100-fragments.fna
    │   ├── anim/
    │   │   ├── deltadir/
    │   │   │   ├── NC_002696_vs_NC_010338.delta
    │   │   │   ├── NC_002696_vs_NC_010338.filter
    │   │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   │   ├── NC_002696_vs_NC_011916.filter
    │   │   │   ├── NC_002696_vs_NC_014100.delta
    │   │   │   ├── NC_002696_vs_NC_014100.filter
    │   │   │   ├── NC_010338_vs_NC_011916.delta
    │   │   │   ├── NC_010338_vs_NC_011916.filter
    │   │   │   ├── NC_010338_vs_NC_014100.delta
    │   │   │   ├── NC_010338_vs_NC_014100.filter
    │   │   │   ├── NC_011916_vs_NC_014100.delta
    │   │   │   └── NC_011916_vs_NC_014100.filter
    │   │   └── test.delta
    │   ├── concordance/
    │   │   ├── GCF_000011325.1_ASM1132v1_genomic.fna
    │   │   ├── GCF_000227605.2_ASM22760v2_genomic.fna
    │   │   └── GCF_002243555.1_ASM224355v1_genomic.fna
    │   ├── sequences/
    │   │   ├── NC_002696.fna
    │   │   ├── NC_010338.fna
    │   │   ├── NC_011916.fna
    │   │   └── NC_014100.fna
    │   ├── subcmd_anib/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   ├── subcmd_anim/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   ├── subcmd_fastani/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   └── subcmd_index/
    │       ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │       ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │       ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │       ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │       ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │       ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │       └── nonexistent_hash.txt
    ├── test_jobs.py
    ├── test_legacy_scripts.py
    ├── test_multiprocessing.py
    ├── test_parsing.py
    ├── test_subcmd_01_download.py
    ├── test_subcmd_02_index.py
    ├── test_subcmd_03_createdb.py
    ├── test_subcmd_04_anim.py
    ├── test_subcmd_05_report.py
    ├── test_subcmd_06_plot.py
    ├── test_subcmd_07_classify.py
    ├── test_subcmd_08_anib.py
    ├── test_subcmd_09_fastani.py
    ├── test_targets/
    │   ├── concordance/
    │   │   └── jspecies_output.tab
    │   ├── legacy_scripts/
    │   │   ├── ANIb_mpl/
    │   │   │   ├── ANIb_alignment_coverage.tab
    │   │   │   ├── ANIb_alignment_lengths.tab
    │   │   │   ├── ANIb_hadamard.tab
    │   │   │   ├── ANIb_percentage_identity.tab
    │   │   │   └── ANIb_similarity_errors.tab
    │   │   ├── ANIb_seaborn/
    │   │   │   ├── ANIb_alignment_coverage.tab
    │   │   │   ├── ANIb_alignment_lengths.tab
    │   │   │   ├── ANIb_hadamard.tab
    │   │   │   ├── ANIb_percentage_identity.tab
    │   │   │   └── ANIb_similarity_errors.tab
    │   │   ├── ANIm_mpl_Darwin_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_mpl_Linux_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_seaborn_Darwin_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_seaborn_Linux_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── TETRA_mpl/
    │   │   │   └── TETRA_correlations.tab
    │   │   └── TETRA_seaborn/
    │   │       └── TETRA_correlations.tab
    │   └── subcmd_index/
    │       ├── GCF_000011745.1_ASM1174v1_genomic.fna.md5
    │       ├── GCF_000043285.1_ASM4328v1_genomic.fna.md5
    │       ├── GCF_000185985.2_ASM18598v2_genomic.fna.md5
    │       ├── GCF_000331065.1_ASM33106v1_genomic.fna.md5
    │       ├── GCF_000973505.1_ASM97350v1_genomic.fna.md5
    │       ├── GCF_000973545.1_ASM97354v1_genomic.fna.md5
    │       ├── classes.txt
    │       └── labels.txt
    ├── test_tetra.py
    └── tools.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .all-contributorsrc
================================================
{
  "files": [
    "README.md"
  ],
  "imageSize": 100,
  "commit": false,
  "contributors": [
    {
      "login": "widdowquinn",
      "name": "Leighton Pritchard",
      "avatar_url": "https://avatars.githubusercontent.com/u/63981?v=4",
      "profile": "https://www.strath.ac.uk/staff/pritchardleightondr/",
      "contributions": [
        "doc",
        "code",
        "design",
        "financial",
        "ideas",
        "infra",
        "projectManagement",
        "tool",
        "test",
        "tutorial"
      ]
    },
    {
      "login": "kiepczi",
      "name": "Angelika Kiepas",
      "avatar_url": "https://avatars.githubusercontent.com/u/72203476?v=4",
      "profile": "https://github.com/kiepczi",
      "contributions": [
        "code",
        "design",
        "test"
      ]
    },
    {
      "login": "peterjc",
      "name": "Peter Cock",
      "avatar_url": "https://avatars.githubusercontent.com/u/63959?v=4",
      "profile": "http://blastedbio.blogspot.com",
      "contributions": [
        "code",
        "ideas"
      ]
    },
    {
      "login": "froggleston",
      "name": "Robert Davey",
      "avatar_url": "https://avatars.githubusercontent.com/u/1872302?v=4",
      "profile": "http://www.earlham.ac.uk/rob-davey",
      "contributions": [
        "code",
        "ideas"
      ]
    },
    {
      "login": "nickp60",
      "name": "Nick Waters",
      "avatar_url": "https://avatars.githubusercontent.com/u/14367274?v=4",
      "profile": "https://github.com/nickp60",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "ytanizaw",
      "name": "YT",
      "avatar_url": "https://avatars.githubusercontent.com/u/2227458?v=4",
      "profile": "https://github.com/ytanizaw",
      "contributions": [
        "code",
        "ideas"
      ]
    },
    {
      "login": "ozcan",
      "name": "Özcan Esen",
      "avatar_url": "https://avatars.githubusercontent.com/u/940884?v=4",
      "profile": "https://github.com/ozcan",
      "contributions": [
        "code",
        "bug"
      ]
    },
    {
      "login": "b-brankovics",
      "name": "Balázs Brankovics",
      "avatar_url": "https://avatars.githubusercontent.com/u/6728856?v=4",
      "profile": "https://b-brankovics.github.io",
      "contributions": [
        "code",
        "bug"
      ]
    },
    {
      "login": "sammywinchester19",
      "name": "sammywinchester19",
      "avatar_url": "https://avatars.githubusercontent.com/u/67588791?v=4",
      "profile": "https://github.com/sammywinchester19",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "TSL-RamKrishna",
      "name": "Ram Krishna Shrestha",
      "avatar_url": "https://avatars.githubusercontent.com/u/20773891?v=4",
      "profile": "https://github.com/TSL-RamKrishna",
      "contributions": [
        "test",
        "code",
        "ideas",
        "bug"
      ]
    },
    {
      "login": "dparks1134",
      "name": "Donovan Parks",
      "avatar_url": "https://avatars.githubusercontent.com/u/3688336?v=4",
      "profile": "https://github.com/dparks1134",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "zakisaati",
      "name": "Zaki Saati Santamaría",
      "avatar_url": "https://avatars.githubusercontent.com/u/50806485?v=4",
      "profile": "https://www.researchgate.net/profile/Zaki-Saati-Santamaria",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "neelam19051",
      "name": "neelam19051",
      "avatar_url": "https://avatars.githubusercontent.com/u/97612372?v=4",
      "profile": "https://github.com/neelam19051",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "jthomp28",
      "name": "jthomp28",
      "avatar_url": "https://avatars.githubusercontent.com/u/73444930?v=4",
      "profile": "https://github.com/jthomp28",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "louellette",
      "name": "louellette",
      "avatar_url": "https://avatars.githubusercontent.com/u/24635515?v=4",
      "profile": "https://github.com/louellette",
      "contributions": [
        "ideas"
      ]
    },
    {
      "login": "sbridel",
      "name": "Seb.",
      "avatar_url": "https://avatars.githubusercontent.com/u/7995272?v=4",
      "profile": "https://github.com/sbridel",
      "contributions": [
        "ideas"
      ]
    },
    {
      "login": "ninjatacoshell",
      "name": "ninjatacoshell",
      "avatar_url": "https://avatars.githubusercontent.com/u/17790858?v=4",
      "profile": "https://github.com/ninjatacoshell",
      "contributions": [
        "ideas"
      ]
    },
    {
      "login": "phbrito",
      "name": "Patricia H. Brito",
      "avatar_url": "https://avatars.githubusercontent.com/u/20931119?v=4",
      "profile": "https://github.com/phbrito",
      "contributions": [
        "ideas"
      ]
    },
    {
      "login": "ZiliaMR",
      "name": "Zilia Y. Muñoz Ramirez",
      "avatar_url": "https://avatars.githubusercontent.com/u/17069965?v=4",
      "profile": "https://github.com/ZiliaMR",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "nclaesnacw",
      "name": "nclaesnacw",
      "avatar_url": "https://avatars.githubusercontent.com/u/14940823?v=4",
      "profile": "https://github.com/nclaesnacw",
      "contributions": [
        "ideas"
      ]
    },
    {
      "login": "EricDeveaud",
      "name": "Eric Deveaud",
      "avatar_url": "https://avatars.githubusercontent.com/u/6849075?v=4",
      "profile": "https://github.com/EricDeveaud",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "baileythegreen",
      "name": "Bailey Harrington",
      "avatar_url": "https://avatars.githubusercontent.com/u/12277715?v=4",
      "profile": "https://github.com/baileythegreen",
      "contributions": [
        "code",
        "doc",
        "design",
        "ideas",
        "infra",
        "tool"
      ]
    }
  ],
  "contributorsPerLine": 7,
  "projectName": "pyani",
  "projectOwner": "widdowquinn",
  "repoType": "github",
  "repoHost": "https://github.com",
  "skipCi": true,
  "commitType": "docs",
  "commitConvention": "angular"
}

================================================
FILE: .codecov.yml
================================================
#
# This codecov.yml is the default configuration for
# all repositories on Codecov. You may adjust the settings
# below in your own codecov.yml in your repository.
#
coverage:
  precision: 2
  round: down
  range: 70...100

  status:
    # Learn more at https://docs.codecov.io/docs/commit-status
    project: true
    patch: true
    changes: false

comment:
  layout: "header, diff"
  behavior: default  # update if exists else create new


================================================
FILE: .flake8
================================================
[flake8]
ignore = E203, E231, E266, E501, W503, F403, F401, E731
max-line-length = 88
max-complexity = 18
select = B,C,E,F,W,T4,B9


================================================
FILE: .github/ISSUE_TEMPLATE.txt
================================================
#### Summary:
Please provide a short summary of your issue (in a couple of sentences).


#### Description:
Describe the issue in detail, as clearly as possible.


#### Reproducible Steps:
Please report a series of steps (e.g. command-line instructions) that would enable someone else to reproduce the issue. If possible, please attach a small set of input files/data that would be sufficient to allow someone else to reproduce the issue. 

If it's not possible to reproduce the issue, please include a description of how you discovered the issue.

#### Current Output:
The output you get from `pyani` or at the terminal, with this issue. It is very useful to know the current "wrong" behavior on your system.


#### Expected Output:
Describe what you expect the output to be. It is also very useful to know the expected "correct" behavior on your systems.


#### pyani Version:


#### installed dependencies
If you are running a version of `pyani` v0.3 or later, then please run the command `pyani listdeps` at the command line, and enter the output below.

#### Python Version:

#### Operating System:


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Please include a summary of the change and which issue is fixed. Please also include the motivation and context, and note the tests that apply to these changes.

## Type of change

- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality not to work as expected)
- [ ] This change requires a documentation update
- [ ] This is a documentation update

## Action Checklist

- [ ] Work on a single issue/concept (if there are multiple separate issues to address, please use a separate pull request for each)
- [ ] Fork the `pyani` repository under your own account (please [allow write access for repository maintainers](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork))
- [ ] Set up an appropriate development environment (please see `CONTRIBUTING.md`)
- [ ] Create a new branch with a short, descriptive name
- [ ] Work on this branch
  - [ ] style guidelines have been followed
  - [ ] new code is commented, especially in hard-to-understand areas
  - [ ] corresponding changes to documentation have been made
  - [ ] tests for the change have been added that demonstrate the fix or feature works
- [ ] Test locally with `pytest -v` **non-passing code will not be merged**
- [ ] Rebase against `origin/master`
- [ ] Check changes with `flake8` and `black` before submission
- [ ] Commit branch
- [ ] Submit pull request, describing the content and intent of the pull request
- [ ] Request a code review
- [ ] Continue the discussion at [`Pull requests` section](https://github.com/widdowquinn/pyani/pulls) in the `pyani` repository


================================================
FILE: .github/requirements-rtd.txt
================================================
# Imports required for readthedocs.io API generation
.
sqlalchemy

================================================
FILE: .github/workflows/build-linux.yml
================================================
name: build-linux

on:
  push:
    branches: master
  # To be able to trigger a manual build
  workflow_dispatch: 

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9", "3.10", "3.11", "3.12"]

    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 
    defaults:
      run:
        shell: bash -l {0}
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - name: Install Miniconda (Python ${{ matrix.python-version }})
        uses: conda-incubator/setup-miniconda@v3
        with:
          auto-update-conda: true
          python-version: ${{ matrix.python-version }}
          activate-environment: pyani-github
          auto-activate-base: false
          channels: defaults,bioconda,conda-forge
          channel-priority: flexible

      - name: Check Miniconda Installation
        run: |
          conda info
          conda list

      - name: Install pip
        run: python -m pip install --upgrade pip

      - name: Install Development Requirements
        run: conda install --file requirements-dev.txt -y

      - name: Install Requirements
        run: conda install --file requirements.txt -y

      - name: Install third-party tools
        run: conda install --file requirements-thirdparty-linux.txt -y

      - name: Install and Check FastANI
        run: |
          conda install --file requirements-fastani-linux.txt -y
          fastANI -h

      - name: Install PyQT
        run: conda install --file requirements-pyqt-conda.txt -y

      - name: Install pip requirements
        run: pip install -r requirements-pip.txt

      - name: Install pyani
        run: pip install -e .

      - name: Check pytest modules
        run: python -m pytest -v --collect-only

      - name: Run Tests with pytest
        run: python -m pytest -v --cov=pyani --cov-report=xml:.coverage-linux-${{ matrix.python-version }}.xml

      - name: Store coverage Results
        uses: actions/upload-artifact@v4
        with:
          name: test-coverage-linux-${{ matrix.python-version }}
          path: .coverage-linux-${{ matrix.python-version }}.xml
          retention-days: 3
        if: ${{ always() }}

      - name: Codacy Coverage Reporter
        uses: codacy/codacy-coverage-reporter-action@v1
        with:
          project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
          coverage-reports: .coverage-linux-${{ matrix.python-version }}.xml
        if: ${{ always() }}

      - name: Codecov Coverage Report
        uses: codecov/codecov-action@v3
        with:
          fail_ci_if_error: true # optional (default = false)
          files: .coverage-linux-${{ matrix.python-version }}.xml # optional
          name: codecov-umbrella-linux-${{ matrix.python-version }}.xml # optional
          token: ${{ secrets.CODECOV_TOKEN }} # required
          verbose: true # optional (default = false)
        if: ${{ always() }}


================================================
FILE: .github/workflows/build-macos.yml
================================================
name: build-macos

on:
  push:
    branches: master
  # To be able to trigger a manual build
  workflow_dispatch: 

jobs:
  build:
    runs-on: macos-13
    strategy:
      matrix:
        python-version: ["3.9", "3.10", "3.11", "3.12"]

    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 
    defaults:
      run:
        shell: bash -l {0}
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - name: Install Miniconda (Python ${{ matrix.python-version }})
        uses: conda-incubator/setup-miniconda@v3
        with:
          auto-update-conda: true
          python-version: ${{ matrix.python-version }}
          activate-environment: pyani-github
          auto-activate-base: false
          channels: defaults,bioconda,conda-forge
          channel-priority: flexible

      - name: Check Miniconda Installation
        run: |
          conda info
          conda list

      - name: Install pip
        run: python -m pip install --upgrade pip

      - name: Install Development Requirements
        run: conda install --file requirements-dev.txt -y

      - name: Install Requirements
        run: conda install --file requirements.txt -y

      - name: Install third-party tools
        run: conda install --file requirements-thirdparty-macos.txt -y

      - name: Install and Check FastANI
        run: |
          conda install --file requirements-fastani-macos.txt -y
          fastani -h

      - name: Install PyQT
        run: conda install --file requirements-pyqt-conda.txt -y

      - name: Install pip requirements
        run: pip install -r requirements-pip.txt

      - name: Install pyani
        run: pip install -e .

      - name: Check pytest modules
        run: python -m pytest -v --collect-only

      - name: Run Tests with pytest
        run: python -m pytest -v --cov=pyani --cov-report=xml:.coverage-macos-${{ matrix.python-version }}.xml

      - name: Store coverage results
        uses: actions/upload-artifact@v4
        with:
          name: test-coverage-macos-${{ matrix.python-version }}
          path: .coverage-macos-${{ matrix.python-version }}.xml
          retention-days: 3
        if: ${{ always() }}

      - name: Codacy Coverage Reporter
        uses: codacy/codacy-coverage-reporter-action@v1
        with:
          project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
          coverage-reports: .coverage-macos-${{ matrix.python-version }}.xml
        if: ${{ always() }}

      - name: Codecov Coverage Report
        uses: codecov/codecov-action@v4.0.1
        with:
          fail_ci_if_error: true # optional (default = false)
          files: .coverage-macos-${{ matrix.python-version }}.xml # optional
          name: codecov-umbrella-macos-${{ matrix.python-version }}.xml # optional
          token: ${{ secrets.CODECOV_TOKEN }} # required
          verbose: true # optional (default = false)
        if: ${{ always() }}


================================================
FILE: .gitignore
================================================
# Scratch directory for local testing
scratch/

# Mac-related dreck
.DS_Store

# Emacs edit files
*~
*#
.#

# Configs for other tools
.Rhistory
.vscode

# Compiled Python modules
*.pyc

# Distribution files
build/
dist/
pyani.egg-info/
distribute*

# RTD documentation building
docs/_build/
docs/make.bat

# MyPy cache
.mypy_cache/

# Test output
*.dataframe
*.log
tests/test_*_out/
tests/test_*_output/
tests/test_concordance_*/
tests/test_output
tests/test_JSpecies/C1/
tests/test_JSpecies/C2/
tests/test_JSpecies/C3/
tests/test_JSpecies/Corynebacterium/
tests/test_JSpecies/pyani_3_species/
C_blochmannia*/
classes_pyani.pdf
packages_pyani.pdf
fix_palette_output/
new_anim_tests_output/
new_anim_tests

# Issue development output
issue_*/

# SGE output
stderr/
stdout/
jobs/
output/

# Coverage test output
cover/
htmlcov/
.coverage
.coverage.*

# iPython/Jupyter
.ipynb_checkpoints

# Development virtualenvs
venv-*
.python-version

# Don't include the development local config dir
.pyani

# Ignore mypy config
.mypy_cache

# Extra documentation output
classes_pyani.pdf
packages_pyani.pdf
api/

# Extraneous .dtd files
uilist.dtd
esummary_assembly.dtd

================================================
FILE: .pre-commit-config.yaml
================================================
repos:
-   repo: https://github.com/psf/black
    rev: 22.3.0
    hooks:
    - id: black
      language_version: python3
-   repo: https://github.com/asottile/blacken-docs
    rev: v1.12.1
    hooks:
    -   id: blacken-docs
        additional_dependencies: [black]
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.2.0
    hooks:
    - id: check-case-conflict
    - id: check-docstring-first
    - id: check-json
    - id: check-merge-conflict
#    - id: check-yaml
-   repo: https://github.com/pycqa/flake8
    rev: 3.9.2
    hooks:
    - id: flake8


================================================
FILE: .readthedocs.yml
================================================
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

# Build documentation in the docs/ directory with Sphinx
sphinx:
  configuration: docs/conf.py

# Build documentation with MkDocs
#mkdocs:
#  configuration: mkdocs.yml

# Optionally build your docs in additional formats such as PDF and ePub
formats: all

# Optionally set the version of Python and requirements required to build your docs
python:
  version: 3.7
  install:
    - requirements: .github/requirements-rtd.txt

================================================
FILE: CHANGES.md
================================================
# CHANGES.md

## v0.3.0-alpha

- major changes to the command-line API
  - the new API now uses a subcommand system: `pyani <cmd> <arguments>`
- major changes to result storage
  - results are now stored in an SQLite database, rather than reported to `.tab` files
  - enables reuse of previously calculated results in new analyses
  - enables generation of multiple output files from the same analysis, after the analysis is complete
- more output formats
  - tabular output is available as HTML tables, as well as plain text
- new documentation
  - documentation is now available at [ReadTheDocs](https://pyani.readthedocs.io/en/development/)
  - papers citing or referring to `pyani` are now listed
- `pyani download` (replacing `genbank_get_genomes_by_taxon.py`) allows use of an NCBI API key for faster/more stable downloads
  - `genbank_get_genomes_by_taxon.py` label/class file output updated to include a hash, matching the `pyani download` output format
- `pyani plot` now produces distribution plots in addition to heatmaps
- A number of bug fixes were implemented, including:
  - consistent handling of filenames as `Path`s
  - alignment length calculation for ANIm was corrected
- major refactoring of code ported from v0.2
  - static typing implemented
- testing converted to `pytest` conventions from `unittest`

## v0.2.7.dev

- update legacy BLAST download location in TravisCI
- update concordance tests (issue #105)
- extend test suites (issue #104)
- modify ANIm concordance test to accommodate new command structure
- add `delta-filter` wrapper for compatibility with SGE/OGE schedulers

## v0.2.7

- Fix for issue #97 where numeric arguments to the GenBank download script were not recognised
- GenBank download script now insists on integer input for `--batchsize`, `--retries`, and `--timeout`
- Added `setup.cfg` that points to README.md
- Fix issue #97 where valid input arguments were not recognised in the download script

## v0.2.6

- Add Dockerfiles for making Docker images

## v0.2.4

- `ANIm` now uses `delta-filter` to remove alignments of repeat regions (issue #91)
- added `--filter_exe` option to specify location of `delta-filter` utility (issue #91)
- fixed `--format` option so that GenBank downloads work again (issue #89)
- add `--SGEargs` option to `average_nucleotide_identity.py` for custom qsub settings
- `README.md` badges now clickable
- `--version` switch added to `average_nucleotide_identity.py`
- FTP timeouts are now caught differently in `genbank_get_genomes_by_taxon.py`
- Additional characters in NCBI FTP URIs now escaped in `genbank_get_genomes_by_taxon.py` - should be fewer failed downloads
- Modified error messaging when `NUCmer` alignment fails
- `average_nucleotide_identity.py` argument documentation improvements
- Script now fails immediately if label or class files missing (issue #78)
- Changes to `--noclobber` log behaviour (issue #79)
- fixed `--rerender` code (issue #85)

## v0.2.3

- fixes a bug in the installed scripts where the shebang (`#!`) in wheel and egg packages pointed to a development Python

## v0.2.2

- fix for issue #53 (--maxmatch has no effect)
- fix to `genbank_get_genomes_by_taxon.py` to account for NCBI FTP location changes
- fixed issue #52 (local variable bug)
- fixed issued #49 (TETRA failure) and #51 (matplotlib bug)
- add several tests and support for `codecov.io`, `landscape.io` and `Travis-CI`
- removed requirement for `rpy2`
- moved scripts to `bin/` subdirectory

## v0.2.1

- `pyani` now requires `rpy2` v2.8.0 in order to satisfy running under Anaconda (see issue #26)
- `pyani` now checks for presence of `rpy2` and - when run from source - if `rpy2` is not available, `pyani` doesn't throw an error until R graphical output is requested. If installed -via- `pip`, then `pyani` still raises `pkg_resources.DistributionNotFound` if `rpy2` is missing.
- Updated `genbank_get_genomes_by_taxon.py` script to use the new FTP locations at NCBI for each assembly.
- Fixed bug where `ANIb` would not go to completion if empty BLASTN files were generated (see issue #27)
- Fixed bug where `ANIm` would not finish under `multiprocessing` if input sequences were highly divergent.
- Added Hadamard product of percentage identity and alignment coverage as output.
- Fixed bug where label/classes are out of sync with new NCBI downloaded filenames
- Added --rerender option to draw (new) graphics from old output, without recalculation
- Corrected matplotlib row dendrogram orientation
- Seaborn output no longer dumps core on large (ca. 500 genome) datasets
- `genbank_get_genomes_by_taxon.py` attempts to identify cause for failed downloads and correct, where nomenclature/versions are at fault
- graceful replacement of classes that are not present in `classes.txt`
- add `pyani` version to log file

## v0.2.0

- Merged [pull request](https://github.com/widdowquinn/pyani/pull/17) from peterjc to make printing from tests Python3-friendly.
- Merged [pull request](https://github.com/widdowquinn/pyani/pull/21) from peterjc to use `open()` for opening files.
- Merged [pull request](https://github.com/widdowquinn/pyani/pull/24) from peterjc to cope with missing labels/classes more gracefully
- Fixed `-s`/`--fragsize` option in `average_nucleotide_identity.py` (thanks to Joseph Adelskov for hte report).
- BLAST and `nucmer` results are now written to a subdirectory of the output folder. By default, these sequence search output files are compressed, but this behaviour can be suppressed using the `--nocompress` option.
- Added `genbank_get_genomes_by_taxon.py` as an aid to downloading publicly-available genome files from GenBank, for analysis.


================================================
FILE: CITATIONS
================================================
# CITATIONS

Please cite the following manuscript in your work, if you have found PYANI useful:

Pritchard et al. (2016) "Genomics and taxonomy in diagnostics for food security: soft-rotting enterobacterial plant pathogens" Anal. Methods, 2016,8, 12-24
DOI: 10.1039/C5AY02550H

@Article{C5AY02550H,
author ="Pritchard, Leighton and Glover, Rachel H. and Humphris, Sonia and Elphinstone, John G. and Toth, Ian K.",
title  ="Genomics and taxonomy in diagnostics for food security: soft-rotting enterobacterial plant pathogens",
journal  ="Anal. Methods",
year  ="2016",
volume  ="8",
issue  ="1",
pages  ="12-24",
publisher  ="The Royal Society of Chemistry",
doi  ="10.1039/C5AY02550H",
url  ="http://dx.doi.org/10.1039/C5AY02550H",
abstract  ="Soft rot Enterobacteriaceae (SRE) are bacterial plant pathogens that cause blackleg{,} wilt and soft rot diseases on a broad range of important crop and ornamental plants worldwide. These organisms (spanning the genera Erwinia{,} Pectobacterium{,} Dickeya{,} and Pantoea) cause significant economic and yield losses in the field{,} and in storage. They are transmissible through surface water{,} by trade and other movement of plant material and soil{,} and in some cases are subject to international legislative and quarantine restrictions. Effective detection and diagnosis in support of food security legislation and epidemiology is dependent on the ability to classify pathogenic isolates precisely. Diagnostics and classification are made more difficult by the influence of horizontal gene transfer on phenotype{,} and historically complex and sometimes inaccurate nomenclatural and taxonomic assignments that persist in strain collections and online sequence databases. Here{,} we briefly discuss the relationship between taxonomy{,} genotype and phenotype in the SRE{,} and their implications for diagnostic testing and legislation. We present novel whole-genome classifications of the SRE{,} illustrating inconsistencies between the established taxonomies and evidence from completely sequenced isolates. We conclude with a perspective on the future impact of widespread whole-genome sequencing and classification methods on detection and identification of bacterial plant pathogens in support of legislative and policy efforts in food security."}

When citing PYANI in your text, please consider quoting the precise release version (if you are using a specific release),
or the specific commit hash (if you are using the 'bleeding-edge' development verison), e.g.

"...using PYANI (v0.2.7)..."

or 

"...using PYANI (commit bb1cb5c)..."

This will enable precise reproduction of this part of your work by others.

================================================
FILE: CODEOWNERS
================================================
# @widdowquinn is the default CODEOWNER for all branches and files.
# Unless later matches take precedence, they will be the default person
# for review when PRs come in.
*   @widdowquinn

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to `pyani`

Contributions, including bugfixes and addition of new features, are welcomed!

The `pyani` package is currently maintained on GitHub under two main branches:

- `master` is the source code underpinning the most recent/current release of pyani. It should always be in sync with the latest release found at [https://github.com/widdowquinn/pyani/releases](https://github.com/widdowquinn/pyani/releases). The only time this code should not be in sync with the release is when there are modifications to documentation, or for a release candidate immediately preceding a release.
- `development` is the current bleeding-edge version of `pyani`. It should (almost) always be in a working and usable condition, but may not be complete and/or some features may be missing or still under development.

Additional branches may also be found on GitHub, with bug fixes and or new features in varying stages of completeness.

## Table of Contents

<!-- TOC -->

- [Contributing to `pyani`](#contributing-to-pyani)
  - [Table of Contents](#table-of-contents)
  - [Licensing](#licensing)
  - [How to Contribute](#how-to-contribute)
    - [Getting the source code](#getting-the-source-code)
    - [Setting up a development environment](#setting-up-a-development-environment)
      - [Cleaning up development environment](#cleaning-up-development-environment)
    - [Editing source code](#editing-source-code)
    - [Editing documentation](#editing-documentation)
  - [Pull Requests](#pull-requests)
    - [Naming your branch](#naming-your-branch)
    - [Reviewing changes](#reviewing-changes)
    - [Coding Conventions](#coding-conventions)
    - [Code Style Checks](#code-style-checks)
    - [Commit Message Convention](#commit-message-convention)
    - [Pre-commit Checks](#pre-commit-checks)
    - [Testing](#testing)
    - [Local Testing](#local-testing)
    - [Continuous Integration](#continuous-integration)
  - [Versioning](#versioning)

<!-- /TOC -->

## Licensing

`pyani` is shared under the [MIT License](https://opensource.org/licenses/MIT) (see LICENSE file for details), and any contributions you make will be licensed under this agreement.

## How to Contribute

### Getting the source code

Please fork the repository to your own GitHub account (you will need to create a GitHub account if you do not already have one), and clone the repository from your fork. Using SSH (recommended):

```bash
git clone git@github.com:<YOUR USERNAME>/pyani.git
cd pyani
```

or HTTPS:

```bash
git clone https://github.com/<YOUR USERNAME>/pyani.git
cd curveball
```

### Setting up a development environment

`pyani` development makes use of the following tools and packages:

- `Anaconda`/`Miniconda` for virtual environment management
- `git` for version control
- `pytest` for testing
- `pre-commit` to manage pre-commit hooks
- `doc8`, `flake8` and `pylint` for code linting
- `black` for code formatting
- `bandit` to identify security issues
- `codecov` to measure code coverage

To set up a local development environment with these tools configured for `pyani` development, first create and activate a new `conda` environment:

```bash
conda create --yes --name pyani_dev python=3.7 && conda activate pyani_dev
```

then set up `conda` channels for the required dependencies:

```bash
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
```

and then use the command

```bash
make setup_env
```

This will install all dependencies for running and developing `pyani`, as well as pre-commit hooks. Once installation is complete, run the test suite to check installation, availability of dependencies, and code coverage:

```bash
make test
```

If you want to be able to edit source files and have those changes take immediate effect when calling `pyani` (useful for testing), clone the GitHub repository with:

```bash
git clone https://github.com/widdowquinn/pyani.git
```

then inside the new `pyani` directory run:

```bash
pip install -e .
```

This is the [`pip install --editable`](https://pip.pypa.io/en/stable/cli/pip_install/#install-editable) command, which links the installed package to the specified location (here `.`, i.e. the current directory) rather than the usual package location (`site-packages`). When using this option, edits to the source code are immediately available in the installed package. This allows you to test changes to the source code as you make them, without the need for an additional uninstall/install step.

#### Cleaning up development environment

You can remove the `conda` development environment with the following commands:

```bash
conda deactivate
conda remove -n pyani_dev --all
```

### Editing source code

The root directory of the repository has subdirectories specific for testing, packaging, and deploying `pyani`:

- `pyani` source code is under the `pyani` subdirectory
    - code for the CLI scripts is in the `pyani/scripts` subdirectory
- tests (written for the `pytest` framework) and test/target data are in the `tests` subdirectory
- documentation is found under the `docs` subdirectory

### Editing documentation

Package documentation for `pyani` is found in the `docs` subdirectory. Both the package documentation and docstrings are written in [`reStructured Text`](http://sphinx-doc.org/rest.html) (i.e. `RST`), and to build the documentation you will need to install [`Sphinx`](https://www.sphinx-doc.org/en/master/).

Although you can build the documentation in multiple formats, the default is the HTML website. Tho build the package docs and view them in your browser you can use the command:

```bash
make docs
```

from the repository root directory

## Pull Requests

If you plan to make a pull request, please begin by forking this repository, and creating a new branch with a short, descriptive name, instead of using the `development`, `version_0_2`, `version_0_3`, `main`, or `master` branch.

A workflow might look like this:

1. Identify something you think you can change or add
2. Fork this repository into your own account (but [please add write access for repository maintainers](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork))
3. Obtain source code and set up a development environment as described above
4. Create a new branch with a short, descriptive name (for the thing you're fixing/adding), and work on this branch locally
5. When you're finished, check the changes/additions with `flake8`/`black` and test locally with `pytest -v`.
6. Commit the branch, and submit a pull request
7. Continue the discussion in the [`Pull requests` section](https://github.com/widdowquinn/pyani/pulls) of this repository on GitHub.

**All tests must pass before a pull request will be merged at `GitHub`.**

Please keep each pull request as *atomic* as possible - fixing or adding a single conceptually-complete issue/functionality. If you would like to add several features or fix several issues, please use a separate pull request for each one, where possible.

### Naming your branch

- If you are proposing a fix to an issue, please give your branch a name that reflects this. For example, if you were proposing to fix issue #150, please call your branch `issue_150` (or some similar variation).
- If you are handling a pull request from a fork, with a view to merging, please indicate the PR number somewhere in the local branch name when you pull the forked version into the repository. For example, if you were handling pull request #250 which refers to a fork from `kenny_loggins/pyani`, please call your local branch `pr_250` (or some similar variation).

### Reviewing changes

When you have finished editing source or documentation, please check that everything you modified is committed:

```bash
git status
```

Please also review the differences that have been introduced relative to the `origin/master` or `origin/development` branch (as appropriate):

```bash
git diff origin/master
```

Please check your `git` log and consider rebasing or squashing any commits that have not been pushed:

```bash
git log
```

### Coding Conventions

So far as is possible, we aim to follow the coding conventions as described in [PEP8](http://www.python.org/dev/peps/pep-0008/) and [PEP257](http://www.python.org/dev/peps/pep-0257/), but we have adopted `black` code styling, which does vary from the PEPs in places.

We are moving to writing all docstrings as reStructuredText, for usage with Sphinx.

### Code Style Checks

We use the `flake8`, `doc8`, and `pylint` tools for style checks. These will be installed if you have used `make setup_env` to set up your development environment.

### Commit Message Convention

`git` commit messages are an important way to manage a readable revision history. We use the following conventions:

- **If a commit fixes an issue, state this in the commit message**
  - `GitHub` Projects picks up on terms like `fixes #123` and `closes #987`. Using these phrases makes project management much easier.

- **Every commit gets a short description**
  - The short description should be in *imperative form* and *around 50 characters or less*
  - The short description can, but need not, include the name of the file that is modified
  - There should be a short account of what the change does
  - The short discription *should not only contain the name of the file that is modified*

For example, if the commit updates some documentation, the following are good short descriptions:

- `update citations.rst to add new references`
- `update docs to add new references; fixes #567`
- `add new references to citations.rst`

The following are bad short descriptions

- `update citations.rst` (does not say what was done)
- `there were some new references so I added them` (not in imperative form)
- `citations.rst` (does not say what was done)
- `part of some doc updates` (does not say what was done)

- **Some commits get long/extended descriptions**
  - Long descriptions should be included where there is more information to share than can be fit in the short description
  - Long descriptions are free-form
  - Long descriptions should explain the *why* of the change. They may also explain the *what* at a high level, but should not be excessively detailed.
  - They are "long descriptions", but they should be concise, precise and clear
  - Paragraphs are fine
  - Bullet points are fine

A good long description could be

> This fix improves efficiency of the veeblefetzer. The main change is replacing a
> nested loop with asyncio calls to a new function `fetzveebles()`. This commit
> makes affects `veebles.py`, and new tests are added in `test_veeblefetzer.py`.
>
> fixes #246

A bad long description might be

> So, because it was taking too long to fetz all the veebles I looked at the
> structure. It took a while to identify the main problem, which was that there
> were a bunch of nested loops. I timed these and it turned out that one of
> them really hit performance. So I looked into a load of options (like
> multiprocessing, threading and so on) but, inspired by a Stack Overflow
> post (URL HERE:) I decided to try asyncio. After some trial and error I
> managed to get something working with that. I also wrote some tests. I
> also think this might fix one of the issues.

### Pre-commit Checks

The `flake8` and `black` styles are enforced as pre-commit hooks using the `pre-commit` package (included in `requirements-dev.txt` and `requirements-pip.txt`).

The `black` and `flake8` hooks are defined in `.pre-commit-config.yaml`. Custom settings for `flake8` are held in `.flake8`.

To enable pre-commit checks in the codebase on your local machine (once `pre-commit` has been installed), execute the following command in the root directory of this repository:

```bash
pre-commit install
```

This is done automatically if you use `make setup_env` to set up your development environment.

### Testing

New features or functions will not be accepted without tests. Bug fixes should ideally include an additional test to establish that the bug has been squashed. We expect that you will have run tests locally before a pull request is made.

Tests will also be run as part of continuous integration, and changes will not be accepted until continuous integration tests have been passed.

Tests are located in the `tests` subdirectory of this repository.

### Local Testing

We currently use `pytest` for testing, and `codecov` to establish how much of the codebase is covered by tests. These can be installed as follows:

```bash
conda install pytest codecov
```

`pytest` can then be run on the codebase with

```bash
pytest --cov-report=html --cov=pyani -v tests/
```

### Continuous Integration

When you submit a pull request on GitHub, automated tests will be run, and results reported on the pull request. **All tests must pass before a pull request will be merged.**

We currently use [GitHub Actions](https://github.com/widdowquinn/pyani/actions/) to run tests. The configuration file can be found in the repository under `.github/workflows/`.

Currently, `pyani` is tested under Python 3.9 through 3.12, and coverage is reported at [`Codacy`](https://app.codacy.com/gh/widdowquinn/pyani/dashboard).

## Versioning

We aim to comply with [`PEP440`](https://www.python.org/dev/peps/pep-0440/) and [semantic versioning](https://semver.org/).


================================================
FILE: CONTRIBUTORS.md
================================================
# CONTRIBUTORS.md

- [Leighton Pritchard](https://github.com/widdowquinn)
- [Bailey Harrington](https://github.com/baileythegreen)
- [Peter Cock](https://github.com/peterjc)
- [Rob Davey](http://www.earlham.ac.uk/rob-davey)
- [Nick Waters](https://github.com/nickp60)
- [ytanizaw](https://github.com/ytanizaw)
- [Will Trimble](https://github.com/wltrimbl)  <!-- submitted PR was not merged -->
- [Özcan Esen](https://github.com/ozcan)
- [Balázs Brankovics](https://github.com/b-brankovics)
- [Ram Krishna Shrestha](https://github.com/TSL-RamKrishna)  <!-- submitted PR was not merged -->
- [Anuj Sharma](https://github.com/rknx)


================================================
FILE: LICENSE
================================================
The MIT License

Copyright (c) 2010-2019 The James Hutton Institute
Copyright (c) 2019-present University of Strathclyde

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: MANIFEST.in
================================================
include tests/test_JSpecies/*.tab

================================================
FILE: Makefile
================================================
# Makefile
#
# This file is part of the pyani package distribution
# (https://github.com/widdowquinn/pyani)

# Install conda dependencies
setup_conda:
	@conda install --file requirements-dev.txt --yes
	@conda install --file requirements.txt --yes
	@conda install --file requirements-pyqt-conda.txt --yes

setup_conda_macos:
	@conda install --file requirements-thirdparty-macos.txt --yes
	@conda install --file requirements-fastani-macos.txt --yes

setup_conda_linux:
	@conda install --file requirements-thirdparty-linux.txt --yes
	@conda install --file requirements-fastani-linux.txt --yes

# Install pip dependencies
setup_pip:
	@pip install -r requirements-pip.txt

# Install dependencies, but not pre-commit
setup_dependencies_macos: setup_conda setup_conda_macos setup_pip
	@pip install -U -e .

setup_dependencies_linux: setup_conda setup_conda_linux setup_pip
	@pip install -U -e .

# Set up all development dependencies and pre-commit in the current conda environment
setup_env_macos: setup_conda setup_conda_macos setup_pip
	@pre-commit install
	@pip install -U -e .

setup_env_linux: setup_conda setup_conda_linux setup_pip
	@pre-commit install
	@pip install -U -e .

# Run all tests and display coverage report in a browser
test:
	@python -m pytest --cov-report=html --cov=pyani -v tests/ && open htmlcov/index.html

# Build and display documentation
docs: clean_docs
	@cd docs && make html && open _build/html/index.html

# Clean up test, walkthrough, and coverage output
clean: clean_walkthrough clean_tests clean_coverage

clean_coverage:
	@rm -rf htmlcov

clean_docs:
	@rm -rf docs/_build/html

clean_tests:
	@rm -rf tests/test_output/*

clean_walkthrough:
	@rm -rf C_blochmannia
	@rm -rf C_blochmannia_ANIm
	@rm -rf .pyani/pyanidb

# Run walkthrough
walkthrough: clean_walkthrough
	pyani download --email my.email@my.domain -t 203804 -o C_blochmannia
	pyani createdb -f
	pyani anim -i C_blochmannia -o C_blochmannia_ANIm \
        --name "C. blochmannia run 1" \
        --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt
	pyani report --runs -o C_blochmannia_ANIm/ --formats html excel stdout
	pyani report --run_results 1 --formats html excel stdout -o C_blochmannia_ANIm/
	pyani report --run_matrices 1 --formats html excel stdout -o C_blochmannia_ANIm/
	pyani plot --formats png pdf --method seaborn -o C_blochmannia_ANIm --run_id 1
	# pyani anib C_blochmannia C_blochmannia_ANIb \
    #     --name "C. blochmannia run 2" \
    #     --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt
	# pyani report --runs C_blochmannia_ANIb/ --formats html,excel,stdout
	# pyani report --run_results 2 --formats html,excel,stdout C_blochmannia_ANIb/
	# pyani report --run_matrices 2 --formats html,excel,stdout C_blochmannia_ANIb/
	# pyani plot --formats png,pdf --method seaborn C_blochmannia_ANIb 2

uml:
	pyreverse -o pdf -p pyani pyani


================================================
FILE: README.md
================================================
# `pyani`

## We have deprecated `pyani`. Please use [`pyani-plus`](https://github.com/pyani-plus/pyani-plus).

As part of the [genomeRxiv project](https://genomerxiv.cs.vt.edu/index.php), we developed a new and improved implementation of average nucleotide identity methods that scales better on a wider range of computing environments. Please use `pyani-plus` in place of `pyani`.

You can download `pyani-plus` and find instructions for using it at the links below.

- [`pyani-plus` repository](https://github.com/pyani-plus/pyani-plus)
- [`pyani-plus` documentation](https://pyani-plus.github.io/pyani-plus-docs/)

The `pyani` program and package has now reached the end of its useful life. It will no longer be maintained, and this repository is now archived.

I would like to take this opportunity to thank everyone who has used, worked on, or in any way improved `pyani` in its previous incarnations. It proved to be a popular and powerful software tool, used in over 1000 publications, and downloaded over 40,000 times. It's been great, but it's time to move on to better things (i.e. [`pyani-plus`](https://github.com/pyani-plus/pyani-plus)).

### What happens next?

Hopefully, you become an active and enthusiastic user of `pyani-plus`.

We archived this repository on 1st July 2025. All issues and pull requests have been closed, and the repository is read-only.

### What to do next

- **I am happy using this version of `pyani`**
  - If you are happy using this version of `pyani`, then by all means continue using it. But please be aware we will not be fixing bugs, or improving the codebase from this point on. The repository was archived on 1st July 2025.
- **`pyani` is no longer working for me**
- **There is a bug in `pyani` that I can't live with**
- **I would like to try the new improved `pyani-plus`** 
  - `pyani-plus` does the same job but is better in pretty much every relevant way, so please do visit the links below to download/install, and to read the documentation.
    - [`pyani-plus` repository](https://github.com/pyani-plus/pyani-plus)
    - [`pyani-plus` documentation](https://pyani-plus.github.io/pyani-plus-docs/)

### But what if we don't want `pyani` to die?

I'm sorry. `pyani` has had its time. If you would like to fork the project and maintain that fork, you are always free to do so. But I don't think anyone wants `pyani` to live on any more than I do myself and, if _I'm_ letting go, you may want to question whether using your finite time on this planet to keep this software alive is worth it.

## Roll of Honour

We are grateful to all who have contributed to this software:

### Contributors ✨  ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://www.strath.ac.uk/staff/pritchardleightondr/"><img src="https://avatars.githubusercontent.com/u/63981?v=4?s=100" width="100px;" alt="Leighton Pritchard"/><br /><sub><b>Leighton Pritchard</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=widdowquinn" title="Documentation">📖</a> <a href="https://github.com/widdowquinn/pyani/commits?author=widdowquinn" title="Code">💻</a> <a href="#design-widdowquinn" title="Design">🎨</a> <a href="#financial-widdowquinn" title="Financial">💵</a> <a href="#ideas-widdowquinn" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-widdowquinn" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#projectManagement-widdowquinn" title="Project Management">📆</a> <a href="#tool-widdowquinn" title="Tools">🔧</a> <a href="https://github.com/widdowquinn/pyani/commits?author=widdowquinn" title="Tests">⚠️</a> <a href="#tutorial-widdowquinn" title="Tutorials">✅</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/baileythegreen"><img src="https://avatars.githubusercontent.com/u/12277715?v=4?s=100" width="100px;" alt="Bailey Harrington"/><br /><sub><b>Bailey Harrington</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=baileythegreen" title="Code">💻</a> <a href="https://github.com/widdowquinn/pyani/commits?author=baileythegreen" title="Documentation">📖</a> <a href="#design-baileythegreen" title="Design">🎨</a> <a href="#ideas-baileythegreen" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-baileythegreen" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#tool-baileythegreen" title="Tools">🔧</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://blastedbio.blogspot.com"><img src="https://avatars.githubusercontent.com/u/63959?v=4?s=100" width="100px;" alt="Peter Cock"/><br /><sub><b>Peter Cock</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=peterjc" title="Code">💻</a> <a href="#ideas-peterjc" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/widdowquinn/pyani/issues?q=author%3Apeterjc" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://www.earlham.ac.uk/rob-davey"><img src="https://avatars.githubusercontent.com/u/1872302?v=4?s=100" width="100px;" alt="Robert Davey"/><br /><sub><b>Robert Davey</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=froggleston" title="Code">💻</a> <a href="#ideas-froggleston" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/nickp60"><img src="https://avatars.githubusercontent.com/u/14367274?v=4?s=100" width="100px;" alt="Nick Waters"/><br /><sub><b>Nick Waters</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=nickp60" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/ytanizaw"><img src="https://avatars.githubusercontent.com/u/2227458?v=4?s=100" width="100px;" alt="YT"/><br /><sub><b>YT</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=ytanizaw" title="Code">💻</a> <a href="#ideas-ytanizaw" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/ozcan"><img src="https://avatars.githubusercontent.com/u/940884?v=4?s=100" width="100px;" alt="Özcan Esen"/><br /><sub><b>Özcan Esen</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=ozcan" title="Code">💻</a> <a href="https://github.com/widdowquinn/pyani/issues?q=author%3Aozcan" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://b-brankovics.github.io"><img src="https://avatars.githubusercontent.com/u/6728856?v=4?s=100" width="100px;" alt="Balázs Brankovics"/><br /><sub><b>Balázs Brankovics</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=b-brankovics" title="Code">💻</a> <a href="https://github.com/widdowquinn/pyani/issues?q=author%3Ab-brankovics" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/sammywinchester19"><img src="https://avatars.githubusercontent.com/u/67588791?v=4?s=100" width="100px;" alt="sammywinchester19"/><br /><sub><b>sammywinchester19</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3Asammywinchester19" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/TSL-RamKrishna"><img src="https://avatars.githubusercontent.com/u/20773891?v=4?s=100" width="100px;" alt="Ram Krishna Shrestha"/><br /><sub><b>Ram Krishna Shrestha</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=TSL-RamKrishna" title="Tests">⚠️</a> <a href="https://github.com/widdowquinn/pyani/commits?author=TSL-RamKrishna" title="Code">💻</a> <a href="#ideas-TSL-RamKrishna" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/widdowquinn/pyani/issues?q=author%3ATSL-RamKrishna" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/dparks1134"><img src="https://avatars.githubusercontent.com/u/3688336?v=4?s=100" width="100px;" alt="Donovan Parks"/><br /><sub><b>Donovan Parks</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3Adparks1134" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://www.researchgate.net/profile/Zaki-Saati-Santamaria"><img src="https://avatars.githubusercontent.com/u/50806485?v=4?s=100" width="100px;" alt="Zaki Saati Santamaría"/><br /><sub><b>Zaki Saati Santamaría</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3Azakisaati" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/neelam19051"><img src="https://avatars.githubusercontent.com/u/97612372?v=4?s=100" width="100px;" alt="neelam19051"/><br /><sub><b>neelam19051</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3Aneelam19051" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/jthomp28"><img src="https://avatars.githubusercontent.com/u/73444930?v=4?s=100" width="100px;" alt="jthomp28"/><br /><sub><b>jthomp28</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3Ajthomp28" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/louellette"><img src="https://avatars.githubusercontent.com/u/24635515?v=4?s=100" width="100px;" alt="louellette"/><br /><sub><b>louellette</b></sub></a><br /><a href="#ideas-louellette" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/sbridel"><img src="https://avatars.githubusercontent.com/u/7995272?v=4?s=100" width="100px;" alt="Seb."/><br /><sub><b>Seb.</b></sub></a><br /><a href="#ideas-sbridel" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/ninjatacoshell"><img src="https://avatars.githubusercontent.com/u/17790858?v=4?s=100" width="100px;" alt="ninjatacoshell"/><br /><sub><b>ninjatacoshell</b></sub></a><br /><a href="#ideas-ninjatacoshell" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/phbrito"><img src="https://avatars.githubusercontent.com/u/20931119?v=4?s=100" width="100px;" alt="Patricia H. Brito"/><br /><sub><b>Patricia H. Brito</b></sub></a><br /><a href="#ideas-phbrito" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/ZiliaMR"><img src="https://avatars.githubusercontent.com/u/17069965?v=4?s=100" width="100px;" alt="Zilia Y. Muñoz Ramirez"/><br /><sub><b>Zilia Y. Muñoz Ramirez</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3AZiliaMR" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/nclaesnacw"><img src="https://avatars.githubusercontent.com/u/14940823?v=4?s=100" width="100px;" alt="nclaesnacw"/><br /><sub><b>nclaesnacw</b></sub></a><br /><a href="#ideas-nclaesnacw" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/EricDeveaud"><img src="https://avatars.githubusercontent.com/u/6849075?v=4?s=100" width="100px;" alt="Eric Deveaud"/><br /><sub><b>Eric Deveaud</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/issues?q=author%3AEricDeveaud" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/kiepczi"><img src="https://avatars.githubusercontent.com/u/72203476?v=4?s=100" width="100px;" alt="Angelika Kiepas"/><br /><sub><b>Angelika Kiepas</b></sub></a><br /><a href="https://github.com/widdowquinn/pyani/commits?author=kiepczi" title="Code">💻</a> <a href="#design-kiepczi" title="Design">🎨</a> <a href="https://github.com/widdowquinn/pyani/commits?author=kiepczi" title="Tests">⚠️</a></td>
    </tr>
  </tbody>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

> (This project followed the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!)

-----

## Citing `pyani`

A complete guide to citing `pyani` is included in the file [`CITATIONS`](CITATIONS). Please cite the following manuscript in your work, if you have found `pyani` useful:

> Pritchard *et al.* (2016) "Genomics and taxonomy in diagnostics for food security: soft-rotting enterobacterial plant pathogens" *Anal. Methods* **8**, 12-24
DOI: [10.1039/C5AY02550H](https://doi.org/10.1039/C5AY02550H)

-----

![macOS Python 3.11 build](https://github.com/widdowquinn/pyani/actions/workflows/build-macos.yml/badge.svg)
![Linux Python 3.11 build](https://github.com/widdowquinn/pyani/actions/workflows/build-linux.yml/badge.svg)
[![codecov.io coverage](https://img.shields.io/codecov/c/github/widdowquinn/pyani/master.svg)](https://codecov.io/github/widdowquinn/pyani)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f3e56b2bf118471aabf09514a3e6af75)](https://www.codacy.com/manual/widdowquinn/pyani?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=widdowquinn/pyani&amp;utm_campaign=Badge_Grade)
[![CodeFactor](https://www.codefactor.io/repository/github/widdowquinn/pyani/badge)](https://www.codefactor.io/repository/github/widdowquinn/pyani)
[![documentation](https://readthedocs.org/projects/pyani/badge/?version=latest)](https://pyani.readthedocs.io/en/latest/?badge=latest)
[![pyani sourcerank](https://img.shields.io/librariesio/sourcerank/pypi/pyani.svg?logo=koding&logoColor=white)](https://libraries.io/pypi/pyani)

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

[![pyani PyPi version](https://img.shields.io/pypi/v/pyani "PyPI version")](https://pypi.python.org/pypi/pyani)
[![pyani licence](https://img.shields.io/pypi/l/pyani "PyPI licence")](https://github.com/widdowquinn/pyani/blob/master/LICENSE)
[![pyani PyPi version](https://img.shields.io/pypi/format/pyani "PyPI format")](https://pypi.python.org/pypi/pyani)
[![pyani PyPi version](https://img.shields.io/pypi/pyversions/pyani "Python versions")](https://pypi.python.org/pypi/pyani)
[![pyani PyPi version](https://img.shields.io/pypi/dm/pyani "PyPI downloads")](https://pypi.python.org/pypi/pyani)

[![GitHub Issues](https://img.shields.io/github/issues-closed/widdowquinn/pyani.svg)](https://github.com/widdowquinn/pyani/issues)
[![GitHub Stars](https://img.shields.io/github/stars/widdowquinn/pyani.svg)](https://github.com/widdowquinn/pyani/stargazers)
[![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)

[![Anaconda-Server Badge](https://anaconda.org/bioconda/pyani/badges/version.svg)](https://anaconda.org/bioconda/pyani)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/pyani/badges/latest_release_date.svg)](https://anaconda.org/bioconda/pyani)

[![Anaconda-Server Badge](https://anaconda.org/bioconda/pyani/badges/installer/conda.svg)](https://conda.anaconda.org/bioconda)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/pyani/badges/downloads.svg)](https://anaconda.org/bioconda/pyani)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/pyani/badges/platforms.svg)](https://anaconda.org/bioconda/pyani)

-----

## The information below is retained for reference only. `pyani` is now archived.

-----

## Table of Contents

<!-- TOC -->

- [`pyani`](#pyani)
  - [Contributing](#contributing)
    - [Contributors ✨  (emoji key):](#contributors---emoji-key)
  - [Citing `pyani`](#citing-pyani)
  - [Table of Contents](#table-of-contents)
  - [Overview](#overview)
  - [Installation](#installation)
    - [IMPORTANT NOTICE](#important-notice)
    - [Documentation for stable version `pyani` v0.2.x](#documentation-for-stable-version-pyani-v02x)
    - [`conda`](#conda)
    - [`pip`](#pip)
    - [Third-party tools](#third-party-tools)
    - [NOTE: Installing legacy BLAST](#note-installing-legacy-blast)
    - [Note: Installing fastANI](#note-installing-fastani)
        - [Bypassing `conda`](#bypassing-conda)
        - [Troubleshooting](#troubleshooting)
  - [Documentation (v0.3)](#documentation-v03)
    - [Older documentation (v0.2)](#older-documentation-v02)
  - [Bugs, issues, problems and questions](#bugs-issues-problems-and-questions)
  - [Walkthrough: A First Analysis](#walkthrough-a-first-analysis)
    - [1. Download genome data](#1-download-genome-data)
    - [2. Create an analysis database](#2-create-an-analysis-database)
    - [3. Conduct ANI analysis](#3-conduct-ani-analysis)
      - [Rerunning the same analysis](#rerunning-the-same-analysis)
    - [4. Reporting Analyses and Analysis Results](#4-reporting-analyses-and-analysis-results)
    - [5. Generating graphical output for ANI](#5-generating-graphical-output-for-ani)
    - [6. Classifying Genomes from Analysis Results](#6-classifying-genomes-from-analysis-results)
  - [Using a scheduler](#using-a-scheduler)
    - [SGE/OGE](#sgeoge)
      - [Arguments assigned by Pyani](#arguments-assigned-by-pyani)
      - [Modifiable arguments](#modifiable-arguments)
      - [Specifying additional arguments](#specifying-additional-arguments)
  - [Running `pyani` version 0.2.x](#running-pyani-version-02x)
    - [Script: `average_nucleotide_identity.py`](#script-average_nucleotide_identitypy)
    - [Script: `genbank_get_genomes_by_taxon.py`](#script-genbank_get_genomes_by_taxonpy)
  - [Method and Output Description](#method-and-output-description)
    - [Average Nucleotide Identity (ANI)](#average-nucleotide-identity-ani)
  - [Licensing](#licensing)

<!-- /TOC -->

-----

## Overview

`pyani` is a software package and Python3 module that calculates average nucleotide identity (ANI) and related measures for whole genome comparisons, and renders relevant graphical summary output.

Where available, `pyani` can take advantage of multicore systems, and integrates with [SGE/OGE](http://gridscheduler.sourceforge.net/)-type job schedulers for the sequence comparisons.

`pyani` installs the program `pyani`, which enables command-line based analysis of genomes.

-----

## Installation

### IMPORTANT NOTICE

**THIS REPOSITORY DEFAULT BRANCH CONTAINS A DEVELOPMENT VERSION OF `PYANI` (v0.3+). IT HAS A DIFFERENT COMMAND-LINE INTERFACE THAN THE STABLE `PYANI` VERSION (v0.2.x).**

### Documentation for stable version `pyani` v0.2.x

- [`pyani` v0.2.x Documentation](./README_v_0_2_x.md)

**IF YOU WISH TO INSTALL THE STABLE VERSION OF `PYANI`, PLEASE FOLLOW THESE INSTRUCTIONS FOR INSTALLING v0.2.x**

The easiest way to install `pyani` v0.2 is to use `conda` or  `pip`. `conda` is recommended for the simplest installation of third-party tool dependencies (`mummer` and `BLAST`/`BLAST+`).

### `conda`

You will need to install the `bioconda` channel, following instructions at [https://bioconda.github.io/user/install.html](https://bioconda.github.io/user/install.html). Then, to create a new environment for `pyani` and install the program, issue the following command:

```bash
conda create --name pyani_env python=3.8 -y
conda activate pyani_env
conda install pyani
```

### `pip`

`pip` will install `pyani` and its Python dependencies, but not the third-party tools.

```bash
pip3 install pyani
```

### Third-party tools

Four alignment packages are required, to use all of `pyani`'s methods: `mummer`, `BLAST+`, legacy `BLAST`, and `fastANI`. (*Note that it is not necessary to install all four tools to use `pyani`. You need only install the tools that are required for the method you wish to use.*)

The simplest route to obtaining these tools is to use `conda`/`bioconda`:

```bash
conda install mummer blast legacy-blast fastani -y
```

But they can also be installed by following instructions from the tools' own websites.

- **BLAST+** (for `anib`) [ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/)
- **legacy BLAST** (for `aniblastall`) [ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/)
- **MUMmer** (for `anim`) [http://mummer.sourceforge.net/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/)
- **fastANI** (for `fastani`) [https://github.com/ParBLiSS/FastANI](https://github.com/ParBLiSS/FastANI)

### NOTE: Installing legacy BLAST

**The legacy BLAST executable available from NCBI will not run on macOS Big Sur.**

If you wish to use `pyani blastall` or the `ANIblastall` method with the legacy `pyani` interface, you will require a locally-installed copy of this package. This is one of the packages linked in the `requirements-thirdparty.txt` file.

### Note: Installing fastANI

**`fastANI` installation (via `conda`) will fail for Python 3.9 on macOS.**

If you are using Python ≥3.9 to run `pyani` on macOS, `fastANI` will fail to install due to errors in the `conda` recipe (for build `h0a26cfa_0`). Using an earlier version of Python may be the simplest solution. However, you can also install `fastANI` yourself—via `conda`—using a slightly altered version of the command produced from the `conda` recipe, as shown below.

*N.B. We have placed the `fastANI` requirement in its own `requirements-fastani.txt` file so that this will not also cause other installations to fail.*

##### Bypassing `conda`

```bash
c++ -O3 -DNDEBUG -std=c++11 -Isrc \
-I ${ENV_DIR}/lib/include -mmacosx-version-min=10.7 \
-stdlib=libc++ -Xpreprocessor -fopenmp -lomp \
-DUSE_BOOST src/cgi/core_genome_identity.cpp -o fastANI \
${ENV_DIR}/lib/lib/libboost_math_c99.a \
-lstdc++ -lz -lm
```

Two alterations need to be made to the file name specified in the fifth line here:

1. One of the `/lib`s should be removed.
1. The file extension should be changed from `.a`, to `.dylib`.

The resultant command ought to look something like this (with ${ENV_DIR} being wherever you're installing `fastANI`):

```bash
c++ -O3 -DNDEBUG -std=c++11 -Isrc \
-I ${ENV_DIR}/lib/include -mmacosx-version-min=10.7 \
-stdlib=libc++ -Xpreprocessor -fopenmp -lomp \
-DUSE_BOOST src/cgi/core_genome_identity.cpp -o fastANI \
${ENV_DIR}/lib/libboost_math_c99.dylib \
-lstdc++ -lz -lm
```

For a more technical overview of the issue, and other solutions that may be shared there, please see https://github.com/widdowquinn/pyani/issues/377.

##### Troubleshooting

This solution is how one of our developers managed to solve the problem. We hope it works for you, but can not guarantee this. Unfortunately, if this does not work for you, we will also not be able to troubleshoot the issue. In this instance, please file an issue at https://github.com/bioconda/bioconda-recipes.

-----

## Documentation (v0.3)

This `README.md` file provides a quick overview and walkthrough for **THE DEVELOPMENT VERSION (v0.3+) OF `pyani`**, and full documentation can be found at the link below:

- [`pyani` v0.3+ Documentation](https://readthedocs.org/projects/pyani/)

**THIS README AND THE DOCUMENTATION AT `READTHEDOCS` REFERS TO A DEVELOPMENT VERSION OF `PYANI` (v0.3+). IT HAS A DIFFERENT COMMAND-LINE INTERFACE THAN THE STABLE `PYANI` VERSION (v0.2.x).**

**THE STABLE VERSION OF `PYANI` (v0.2) DOES NOT HAVE THE `pyani` COMMAND**

### Older documentation (v0.2)

If you are using `pyani` v0.2.x, then please note that the command-line API has changed, and documentation for this version can be found at the following page:

- [`pyani` v0.2.x Documentation](./README_v_0_2_x.md)

## Bugs, issues, problems and questions

If you would like to report a bug or problem with `pyani`, or ask a question of the developer(s), please raise an issue at the link below:

- [`pyani` Issues page](https://github.com/widdowquinn/pyani/issues)

-----

## Walkthrough: A First Analysis

The command-line interface to `pyani` uses subcommands. These separate individual steps of an analysis into separate actions.

1. Download genomes
2. Create a database to hold genome data and analysis results
3. Perform ANI analysis
4. Report and visualise analysis results
5. Generate species hypotheses (classify genomes) using the analysis results

The steps are described in detail with examples, below.

### 1. Download genome data

The first step is to obtain genome data for analysis. `pyani` expects to find each individual genome in its own FASTA file (that file can contain multiple sequences - chromosomes and plasmids; sequenced scaffolds, etc). All the FASTA files for an analysis are expected to be located in a single subdirectory (with optional `labels` and `classes` files). You can arrange your data manually, but `pyani` provides a subcommand that downloads all genomes in a taxon subtree from NCBI, and organises them ready for use with `pyani`.

We'll use the `pyani download` subcommand to download all available genomes for *Candidatus Blochmannia* from NCBI. The taxon ID for this grouping is [203804](https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=203804&lvl=3&lin=f&keep=1&srchmode=1&unlock).

```bash
pyani download -o C_blochmannia --email my.email@my.domain -t 203804 -v -l C_blochmannia_dl.log
```

The first argument is the output directory into which the downloaded genomes will be written (`-o C_blochmannia`). To download anything from NCBI we must provide an email address (`--email my.email@my.domain`), and to specify which taxon subtree we want to download we provide the taxon ID (`-t 203804`).

Here we also request verbose output (`-v`), and write a log file for reproducible research/diagnosing bugs and errors (`-l C_blochmannia_dl.log`).

This produces a new subdirectory (`C_blochmannia`) with the following contents:

```bash
$ tree C_blochmannia
C_blochmannia
├── GCF_000011745.1_ASM1174v1_genomic.fna
├── GCF_000011745.1_ASM1174v1_genomic.fna.gz
├── GCF_000011745.1_ASM1174v1_genomic.fna.md5
├── GCF_000011745.1_ASM1174v1_hashes.txt
├── GCF_000043285.1_ASM4328v1_genomic.fna
├── GCF_000043285.1_ASM4328v1_genomic.fna.gz
├── GCF_000043285.1_ASM4328v1_genomic.fna.md5
├── GCF_000043285.1_ASM4328v1_hashes.txt
├── GCF_000185985.2_ASM18598v2_genomic.fna
├── GCF_000185985.2_ASM18598v2_genomic.fna.gz
├── GCF_000185985.2_ASM18598v2_genomic.fna.md5
├── GCF_000185985.2_ASM18598v2_hashes.txt
├── GCF_000331065.1_ASM33106v1_genomic.fna
├── GCF_000331065.1_ASM33106v1_genomic.fna.gz
├── GCF_000331065.1_ASM33106v1_genomic.fna.md5
├── GCF_000331065.1_ASM33106v1_hashes.txt
├── GCF_000973505.1_ASM97350v1_genomic.fna
├── GCF_000973505.1_ASM97350v1_genomic.fna.gz
├── GCF_000973505.1_ASM97350v1_genomic.fna.md5
├── GCF_000973505.1_ASM97350v1_hashes.txt
├── GCF_000973545.1_ASM97354v1_genomic.fna
├── GCF_000973545.1_ASM97354v1_genomic.fna.gz
├── GCF_000973545.1_ASM97354v1_genomic.fna.md5
├── GCF_000973545.1_ASM97354v1_hashes.txt
├── classes.txt
└── labels.txt
```

Seven genomes have been downloaded, and each is represented by four files:

- `_genomic.fna.gz`: the compressed genome sequence
- `_genomic.fna`: the uncompressed genome sequence
- `_genomic.fna.md5`: an MD5 hash/checksum of the (uncompressed) genome sequence; this was generated during the download
- `_hashes.txt`: a list of MD5 hashes; this is provided by NCBI and is a reference to be sure that the download did not corrupt the genome sequence

There are two additional plain text files: `classes.txt` and `labels.txt`, which provide alternative labels for use in the analysis. These files are generated during the download.

### 2. Create an analysis database

`pyani` uses a database to store genome data and analysis results. This is convenient for data sharing and developing custom analyses, but also makes it easier to extend an existing ANI analysis with new genomes, without having to repeat calculations that were already performed.

To create a new, clean, database in the default location (`.pyani/pyanidb`) issue the command:

```bash
pyani createdb -v -l C_blochmannia_createdb.log
```

As above, the verbose (`-v`) and log file (`-l C_blochmannia_createdb.log`) options allow for reproducible work. The default database location is in the hidden directory (`.pyani`):

```bash
$ tree .pyani
.pyani
└── pyanidb
```

Subsequent `pyani` commands will assume this location for the database, but you can specify the location when creating a database, or using an existing database.

### 3. Conduct ANI analysis

`pyani` provides four subcommands to run ANI analyses:

- `anim`: ANIm
- `anib`: ANIb, using BLAST+
- `aniblastall`: ANIb, using legacy BLAST
- `tetra`: TETRA

In this walkthrough, we'll run ANIm on the downloaded genomes, using the command:

```bash
pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \
    --name "C. blochmannia run 1" \
    --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt
```

All four analysis commands operate in a similar way. The first two arguments are paths to directories: the first path is to a directory containing input genomes, and the second is the path to an output directory for storing intermediate results. The `-v` and `-l` arguments work as above, specifying verbose output and logging output to a file.

You will probably notice that the verbose output is very verbose, to enable informative identification of any problems. In particular, the verbose output (which is also written to the log file) writes out the command-lines used for the pairwise comparisons so, if something goes wrong, you can test whether a specific comparison can be run at the command-line *at all*, to aid diagnosis of any problems.

#### Rerunning the same analysis

One reason for using a database backend for analysis results is so that, for very large analyses, we do not ever need to recalculate a pairwise genome comparison. All the analysis subcommands check whether input genomes have been used before (using the unique MD5 hash for each genome to identify whether it's been used previously), and whether the comparison of two genomes has been run, with the particular analysis settings that were used. If either genome was not seen before, or if the analysis settings are different, the comparison is performed.

You can test this for yourself by running the analysis command again, as below. You will see a number of messages indicating that genomes have been seen before, and that analyses performed before were skipped:

```bash
$ pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log \
    --name "C. blochmannia run 2" \
    --labels C_blochmannia/labels.txt --classes C_blochmannia/classes.txt
INFO: command-line: pyani anim -i C_blochmannia -o C_blochmannia_ANIm -v -l C_blochmannia_ANIm.log
INFO: Running ANIm analysis
INFO: Adding analysis information to database .pyani/pyanidb
INFO: Current analysis has ID 2 in this database
INFO: Identifying input genome/hash files:
[…]
INFO: Adding genome data to database...
WARNING: Genome already in database with this hash and path!
WARNING: Using existing genome from database, row 1
[…]
INFO: Complete pairwise comparison list:
    [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
INFO: Excluding pre-calculated comparisons
INFO: Comparisons still to be performed:
    []
INFO: All comparison results already present in database (skipping comparisons)
INFO: Completed. Time taken: 0.211
```

### 4. Reporting Analyses and Analysis Results

Once an analysis is run, the results are placed in a local `SQLite` database, which can be queried for information about the analyses that have been run. You can request information about:

- `--runs`: show all analysis runs with results stored in the database
- `--runs_genomes`: show all the analysis runs with results in the database, and all the genomes analysed in each run
- `--genomes`: show all the genomes used for any analysis in the database
- `--genomes_runs`: for each genome in the database, also list the analysis results it participates in
- `--run_results`: show all the pairwise comparison results for a named run (run IDs can be obtained with the `--runs` argument

The report tables are written to a named directory (compulsory argument), and are written by default to a `.tab` plain-text format, but HTML and Excel format can also be requested with the `--formats` argument:

```bash
$ pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel,stdout
INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel', dbpath='.pyani/pyanidb', formats='html,excel', func=<function subcmd_report at 0x10c674a60>, logfile=None, outdir='C_blochmannia_ANIm/', run_results=False, show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True)
INFO: command-line: ./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel
INFO: Creating output in formats: ['excel', 'tab', 'html']
INFO: Using database: .pyani/pyanidb
INFO: Writing table of pyani runs from the database to C_blochmannia_ANIm/runs.*
INFO: Completed. Time taken: 0.937
$ tree -L 1 C_blochmannia_ANIm/
C_blochmannia_ANIm/
├── nucmer_output
├── runs.html
├── runs.tab
└── runs.xlsx
```

To see all of the pairwise results for an individual run, the run ID must be provided. It is possible to get results for more than one run ID by providing a comma-separated list of run IDs (though each run's results will be provided in a separate file):

```bash
$ pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4
INFO: Processed arguments: Namespace(cmdline='./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4', dbpath='.pyani/pyanidb', formats='html,excel', func=<function subcmd_report at 0x108616a60>, logfile=None, outdir='C_blochmannia_ANIm/', run_results='1,2,3,4', show_genomes=False, show_genomes_runs=False, show_runs=True, show_runs_genomes=False, verbose=True)
INFO: command-line: ./pyani report -v --runs -o C_blochmannia_ANIm/ --formats html,excel --run_results 1,2,3,4
INFO: Creating output in formats: ['tab', 'excel', 'html']
INFO: Using database: .pyani/pyanidb
INFO: Writing table of pyani runs from the database to C_blochmannia_ANIm/runs.*
INFO: Attempting to write results tables for runs: ['1', '2', '3', '4']
INFO: Collecting data for run with ID: 1
INFO: Collecting data for run with ID: 2
INFO: Collecting data for run with ID: 3
INFO: Collecting data for run with ID: 4
INFO: Completed. Time taken: 1.285
```

You can see a run's results in the terminal by specifying the `stdout` format. For example, to see the identity, coverage, and other output matrices, you would specify `--run_matrices <RUN>` and `--formats=stdout` as below:

```bash
$ pyani report -o C_blochmannia_ANIm --formats=stdout --run_matrices 1
TABLE: C_blochmannia_ANIm/matrix_identity_1
                                                    C. Blochmannia pennsylvanicus BPEN  C. Blochmannia floridanus  C. Blochmannia vafer BVAF  C. Blochmannia chromaiodes 640  B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675  B. endosymbiont of Camponotus (Colobopsis) obliquus 757
C. Blochmannia pennsylvanicus BPEN                                            1.000000                   0.834866                   0.836903                        0.980244                                           0.843700                                                0.829509
C. Blochmannia floridanus                                                     0.834866                   1.000000                   0.828733                        0.834916                                           0.847060                                                0.857859
C. Blochmannia vafer BVAF                                                     0.836903                   0.828733                   1.000000                        0.837811                                           0.866015                                                0.844438
C. Blochmannia chromaiodes 640                                                0.980244                   0.834916                   0.837811                        1.000000                                           0.849834                                                0.834769
B. endosymbiont of Polyrhachis (Hedomyrma) turn...                            0.843700                   0.847060                   0.866015                        0.849834                                           1.000000                                                0.844228
B. endosymbiont of Camponotus (Colobopsis) obli...                            0.829509                   0.857859                   0.844438                        0.834769                                           0.844228                                                1.000000

TABLE: C_blochmannia_ANIm/matrix_coverage_1
                                                    C. Blochmannia pennsylvanicus BPEN  C. Blochmannia floridanus  C. Blochmannia vafer BVAF  C. Blochmannia chromaiodes 640  B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675  B. endosymbiont of Camponotus (Colobopsis) obliquus 757
C. Blochmannia pennsylvanicus BPEN                                            1.000000                   0.045736                   0.041404                        1.000306                                           0.017263                                                0.021027
C. Blochmannia floridanus                                                     0.051317                   1.000000                   0.152609                        0.054930                                           0.016366                                                0.010749
C. Blochmannia vafer BVAF                                                     0.045362                   0.149012                   1.000000                        0.046520                                           0.008356                                                0.014706
C. Blochmannia chromaiodes 640                                                1.000856                   0.048983                   0.042485                        1.000000                                           0.014056                                                0.016140
B. endosymbiont of Polyrhachis (Hedomyrma) turn...                            0.018238                   0.015410                   0.008058                        0.014841                                           1.000000                                                0.020416
B. endosymbiont of Camponotus (Colobopsis) obli...                            0.021508                   0.009799                   0.013730                        0.016500                                           0.019766                                                1.000000

TABLE: C_blochmannia_ANIm/matrix_aln_lengths_1
                                                    C. Blochmannia pennsylvanicus BPEN  C. Blochmannia floridanus  C. Blochmannia vafer BVAF  C. Blochmannia chromaiodes 640  B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675  B. endosymbiont of Camponotus (Colobopsis) obliquus 757
C. Blochmannia pennsylvanicus BPEN                                            791654.0                    36207.0                    32778.0                        791896.0                                            13666.0                                                 16646.0
C. Blochmannia floridanus                                                      36207.0                   705557.0                   107674.0                         38756.0                                            11547.0                                                  7584.0
C. Blochmannia vafer BVAF                                                      32778.0                   107674.0                   722585.0                         33615.0                                             6038.0                                                 10626.0
C. Blochmannia chromaiodes 640                                                791896.0                    38756.0                    33615.0                        791219.0                                            11121.0                                                 12770.0
B. endosymbiont of Polyrhachis (Hedomyrma) turn...                             13666.0                    11547.0                     6038.0                         11121.0                                           749321.0                                                 15298.0
B. endosymbiont of Camponotus (Colobopsis) obli...                             16646.0                     7584.0                    10626.0                         12770.0                                            15298.0                                                     NaN

TABLE: C_blochmannia_ANIm/matrix_sim_errors_1
                                                    C. Blochmannia pennsylvanicus BPEN  C. Blochmannia floridanus  C. Blochmannia vafer BVAF  C. Blochmannia chromaiodes 640  B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675  B. endosymbiont of Camponotus (Colobopsis) obliquus 757
C. Blochmannia pennsylvanicus BPEN                                                 0.0                     5979.0                     5346.0                         15645.0                                             2136.0                                                  2838.0
C. Blochmannia floridanus                                                       5979.0                        0.0                    18441.0                          6398.0                                             1766.0                                                  1078.0
C. Blochmannia vafer BVAF                                                       5346.0                    18441.0                        0.0                          5452.0                                              809.0                                                  1653.0
C. Blochmannia chromaiodes 640                                                 15645.0                     6398.0                     5452.0                             0.0                                             1670.0                                                  2110.0
B. endosymbiont of Polyrhachis (Hedomyrma) turn...                              2136.0                     1766.0                      809.0                          1670.0                                                0.0                                                  2383.0
B. endosymbiont of Camponotus (Colobopsis) obli...                              2838.0                     1078.0                     1653.0                          2110.0                                             2383.0                                                     0.0

TABLE: C_blochmannia_ANIm/matrix_hadamard_1
                                                    C. Blochmannia pennsylvanicus BPEN  C. Blochmannia floridanus  C. Blochmannia vafer BVAF  C. Blochmannia chromaiodes 640  B. endosymbiont of Polyrhachis (Hedomyrma) turneri 675  B. endosymbiont of Camponotus (Colobopsis) obliquus 757
C. Blochmannia pennsylvanicus BPEN                                            1.000000                   0.038183                   0.034652                        0.980543                                           0.014564                                                0.017442
C. Blochmannia floridanus                                                     0.042843                   1.000000                   0.126472                        0.045862                                           0.013863                                                0.009221
C. Blochmannia vafer BVAF                                                     0.037964                   0.123491                   1.000000                        0.038975                                           0.007237                                                0.012418
C. Blochmannia chromaiodes 640                                                0.981082                   0.040896                   0.035594                        1.000000                                           0.011945                                                0.013473
B. endosymbiont of Polyrhachis (Hedomyrma) turn...                            0.015387                   0.013053                   0.006978                        0.012613                                           1.000000                                                0.017236
B. endosymbiont of Camponotus (Colobopsis) obli...                            0.017841                   0.008406                   0.011594                        0.013774                                           0.016687                                                1.000000
```

### 5. Generating graphical output for ANI

The output of a `pyani` run can also be represented graphically, using the `plot` subcommand. For example, the command:

```bash
pyani plot -o C_blochmannia_ANIm --run_id 1 -v --formats png,pdf
```

will place `.pdf` and `.png` format output in the `C_blochmannia_ANIm` output directory for the run with ID 1, generated above. Five heatmaps are generated:

- percentage identity
- percentage coverage (for both query and subject)
- alignment length (total aligned length)
- similarity errors (total number of mismatches, not including indels)
- hadamard matrix (dot product of identity and coverage matrices)

The heatmaps also include dendrograms, clustering the rows and columns by overall similarity.

**NOTE:** Running `pyani plot` with a large number of genomes (~500) and the default figure output (`--method seaborn`) may reduce output figure quality:

- labels in `.png` files may be difficult to read
- `.pdf` files may render very slowly due to the large number of numerical values in heatmap cells.

With large datasets, `--method mpl` (matplotlib) is recommended.

Please be aware that the matrix orientation differs for these two options; so, with `seaborn` (the default, `--method seaborn`), the orientation of self-comparisons is top left to bottom right (`\`), while with `matplotlib` (`--method mpl`) the orientation is bottom left to top right (`/`).

### 6. Classifying Genomes from Analysis Results

-----

## Using a scheduler

### SGE/OGE

The `--scheduler SGE` argument allows one to use `pyani` with an an SGE-type scheduler.

In order for this work, one must be able to submit jobs using the `qsub` command. By default, this will batch the pairwise comparisons in array jobs of 10,000, in order to avoid clogging the scheduler queue. Each comparison will be run as a single-core task in an array job.

#### Arguments assigned by Pyani
The following arguments will be automatically set:

```bash
-N job_name  # this is the value passed to `--name`
-cwd
-o ./stdout  # cwd/ + "stdout"
-e ./stderr  # cwd/ + "stderr"
```

#### Modifiable arguments
The number of pairwise comparisons submitted per chunk can be modified using:

```bash
--SGEgroupsize *number*
```

The job prefix to use can be modified using:

```bash
--jobprefix *prefix*
```

#### Specifying additional arguments
Additional SGE arguments may be specified with:

```bash
--SGEargs "<your arguments here>"
```

## Running `pyani` version 0.2.x

### Script: `average_nucleotide_identity.py`

The `average_nucleotide_identity.py` script - installed as part of this package - enables straightforward ANI analysis at the command-line, and uses the `pyani` module behind the scenes.

You can get a summary of available command-line options with `average_nucleotide_identity.py -h`

```bash
$ ./average_nucleotide_identity.py -h
usage: average_nucleotide_identity.py [-h] [-o OUTDIRNAME] [-i INDIRNAME] [-v]
                                      [-f] [-s FRAGSIZE] [-l LOGFILE]
                                      [--skip_nucmer] [--skip_blastn]
                                      [--noclobber] [--nocompress] [-g]
                                      [--gformat GFORMAT] [--gmethod GMETHOD]
                                      [--labels LABELS] [--classes CLASSES]
                                      [-m METHOD] [--scheduler SCHEDULER]
                                      [--workers WORKERS]
                                      [--SGEgroupsize SGEGROUPSIZE]
                                      [--maxmatch] [--nucmer_exe NUCMER_EXE]
                                      [--blastn_exe BLASTN_EXE]
                                      [--makeblastdb_exe MAKEBLASTDB_EXE]
                                      [--blastall_exe BLASTALL_EXE]
                                      [--formatdb_exe FORMATDB_EXE]
                                      [--write_excel] [--subsample SUBSAMPLE]
                                      [--seed SEED] [--jobprefix JOBPREFIX]


[…]
```

Example data and output can be found in the directory `test_ani_data`. The data are chromosomes of four isolates of *Caulobacter*. Basic analyses can be performed with the command lines:

```bash
./average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIm_output -m ANIm -g
./average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIb_output -m ANIb -g
./average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIblastall_output -m ANIblastall -g
./average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_TETRA_output -m TETRA -g
```

The graphical output below, supporting assignment of `NC_002696` and `NC_011916` to the same species (*C.crescentus*), and the other two isolates to distinct species (`NC_014100`:*C.segnis*; `NC_010338`:*C.* sp K31), was generated with the command-line:

```bash
./average_nucleotide_identity.py -v -i tests/test_ani_data/ \
    -o tests/test_ANIm_output/ -g --gformat png,pdf,eps \
    --classes tests/test_ani_data/classes.tab \
    --labels tests/test_ani_data/labels.tab
```

![ANIm percentage identity for *Caulobacter* test data](tests/test_ani_data/ANIm_percentage_identity.png "ANIm percentage identity")
![ANIm alignment coverage for *Caulobacter* test data](tests/test_ani_data/ANIm_alignment_coverage.png "ANIm alignment coverage")
![ANIm alignment length for *Caulobacter* test data](tests/test_ani_data/ANIm_alignment_lengths.png "ANIm alignment length")
![ANIm alignment similarity errors for *Caulobacter* test data](tests/test_ani_data/ANIm_similarity_errors.png "ANIm alignment similarity")

### Script: `genbank_get_genomes_by_taxon.py`

The script `genbank_get_genomes_by_taxon.py`, installed by this package, enables download of genomes from NCBI, specified by taxon ID. The script will download all available assemblies for taxa at or below the specified node in the NCBI taxonomy tree.

Command-line options can be viewed using:

```bash
$ genbank_get_genomes_by_taxon.py -h
usage: genbacnk_get_genomes_by_taxon.py [-h] [-o OUTDIRNAME] [-t TAXON] [-v]
                                        [-f] [--noclobber] [-l LOGFILE]
                                        [--format FORMAT] [--email EMAIL]
                                        [--retries RETRIES]
                                        [--batchsize BATCHSIZE]
[…]
```

For example, the NCBI taxonomy ID for *Caulobacter* is 75, so all publicly-available *Caulobacter* sequences can be obtained using the command-line:

```bash
$ genbank_get_genomes_by_taxon.py -o Caulobacter_downloads -v -t 75 -l Caulobacter_downloads.log --email me@my.email.domain
INFO: genbank_get_genomes_by_taxon.py: Mon Apr 18 17:22:54 2016
INFO: command-line: /Users/lpritc/Virtualenvs/pyani3/bin/genbank_get_genomes_by_taxon.py -o Caulobacter_downloads -v -t 75 -l Caulobacter_downloads.log --email me@my.email.domain
INFO: Namespace(batchsize=10000, email='me@my.email.domain', force=False, format='gbk,fasta', logfile='Caulobacter_downloads.log', noclobber=False, outdirname='Caulobacter_downloads', retries=20, taxon='75', verbose=True)
INFO: Set NCBI contact email to me@my.email.domain
INFO: Creating directory Caulobacter_downloads
INFO: Output directory: Caulobacter_downloads
INFO: Passed taxon IDs: 75
INFO: Entrez ESearch with query: txid75[Organism:exp]
INFO: Entrez ESearch returns 29 assembly IDs
INFO: Identified 29 unique assemblies
INFO: Taxon 75: 29 assemblies
[…]
INFO: Assembly 639581: 271 contigs
INFO: Assembly 233261: 17 contigs
INFO: Assembly 575291: 48 contigs
INFO: Mon Apr 18 17:25:46 2016
INFO: Done.
```

**NOTE:** You must provide a valid email to identify yourself to NCBI for troubleshooting.

The number of attempted retries for each download, and the size of a batch download can be modified. By default, the script will attempt 20 download retries, and obtain sequences in batches of 10,000.

-----

## Method and Output Description

### Average Nucleotide Identity (ANI)

This module calculates Average Nucleotide Identity (ANI) according to one of a number of alternative methods described in, e.g.

- Richter M, Rossello-Mora R (2009) Shifting the genomic gold standard for the prokaryotic species definition. Proc Natl Acad Sci USA 106: 19126-19131. doi:10.1073/pnas.0906412106. (ANI1020, ANIm, ANIb)
- Goris J, Konstantinidis KT, Klappenbach JA, Coenye T, Vandamme P, et al. (2007) DNA-DNA hybridization values and their relationship to whole-genome sequence similarities. Int J Syst Evol Micr 57: 81-91. doi:10.1099/ijs.0.64483-0.

ANI is proposed to be the appropriate *in silico* substitute for DNA-DNA hybridisation (DDH), and so useful for delineating species boundaries. A typical percentage threshold for species boundary in the literature is 95% ANI (e.g. Richter et al. 2009).

All ANI methods follow the basic algorithm:

- Align the genome of organism 1 against that of organism 2, and identify the matching regions.
- Calculate the percentage nucleotide identity of the matching regions, as an average for all matching regions.

Methods differ on: (1) what alignment algorithm is used, and the choice of parameters (this affects the aligned region boundaries); (2) what the input is for alignment (typically either fragments of fixed size, or the most complete assembly available).

- **ANIm**: uses MUMmer (NUCmer) to align the input sequences
- **ANIb**: uses BLASTN+ to align 1020nt fragments of the input sequences
- **ANIblastall**: uses legacy BLASTN to align 10al20nt fragments of the input sequences
- **TETRA**: calculates tetranucleotide frequencies of each input sequence

The algorithms take as input correctly-formatted FASTA multiple sequence files. All sequences for a single organism should be contained in only one sequence file. Although it is possible to provide new labels for each input genome for rendering graphical output, the names of these files are used for identification so it is best to name them sensibly.

Output is written to a named directory. The output files differ depending on the chosen ANI method.

- **ANIm**: MUMmer/NUCmer `.delta` files, describing each pairwise sequence alignment. Output as tab-separated plain text format tables describing: alignment coverage; total alignment lengths; similarity errors; and percentage identity (ANIm).
- **ANIb** and **ANIblastall**: FASTA sequences describing 1020nt fragments of each input sequence; BLAST nucleotide databases - one for each set of fragments; and BLASTN output files (tab-separated tabular format plain text) - one for each pairwise comparison of input sequences. Output as tab-separated plain text tables describing: alignment coverage; total alignment lengths; similarity errors; and percentage identity (ANIb or ANIblastall).
- **TETRA**: Tab-separated plain text files describing the Pearson correlations between Z-score distributions for each tetranucleotide in each input sequence (TETRA).

If graphical output is chosen, the output directory will also contain PDF, PNG and EPS files representing the various output measures as a heatmap with row and column dendrograms. Other output formats (e.g. SVG) can be specified with the `--gformat` argument.

-----

## Licensing

Unless otherwise indicated, all code is subject to the following agreement:

```text
    (c) The James Hutton Institute 2014-2019
    (c) The University of Strathclyde 2019-present
    Author: Leighton Pritchard

    Contact: leighton.pritchard@strath.ac.uk

    Address:
    Leighton Pritchard,
    Strathclyde Institute of Pharmacy and Biomedical Sciences
    161 Cathedral Street
    Glasgow
    G4 0RE,
    Scotland,
    UK

The MIT License

Copyright (c) 2014-2019 The James Hutton Institute
Copyright (c) 2014-present The James Hutton Institute

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
```


================================================
FILE: README_v_0_2_x.md
================================================
# README.md (pyani)

[![pyani PyPi version](https://img.shields.io/pypi/v/pyani.svg "PyPi version")](https://pypi.python.org/pypi/pyani)
[![pyani licence](https://img.shields.io/pypi/l/pyani.svg "PyPi licence")](https://github.com/widdowquinn/pyani/blob/master/LICENSE)
[![pyani TravisCI build status](https://api.travis-ci.org/widdowquinn/pyani.svg?branch=master)](https://travis-ci.org/widdowquinn/pyani/branches)
[![pyani codecov.io coverage](https://img.shields.io/codecov/c/github/widdowquinn/pyani/master.svg)](https://codecov.io/github/widdowquinn/pyani)
[![pyani Docker Pulls](https://img.shields.io/docker/pulls/leightonpritchard/average_nucleotide_identity.svg)](https://hub.docker.com/r/leightonpritchard/average_nucleotide_identity)

<!-- TOC -->

- [README.md (pyani)](#readmemd-pyani)
  - [Overview](#overview)
  - [Installation](#installation)
    - [`conda`](#conda)
    - [`pip`](#pip)
  - [Docker images](#docker-images)
    - [NOTE](#note)
  - [Installing from the repository/source code](#installing-from-the-repositorysource-code)
    - [IMPORTANT NOTICE](#important-notice)
    - [Direct download](#direct-download)
    - [Clone the repository using `git`](#clone-the-repository-using-git)
    - [Installation](#installation-1)
    - [Third-party tools](#third-party-tools)
  - [Testing `pyani`](#testing-pyani)
  - [Running `pyani`](#running-pyani)
    - [Script: `average_nucleotide_identity.py`](#script-average_nucleotide_identitypy)
    - [Script: `genbank_get_genomes_by_taxon.py`](#script-genbank_get_genomes_by_taxonpy)
  - [Method and Output Description](#method-and-output-description)
    - [Average Nucleotide Identity (ANI)](#average-nucleotide-identity-ani)
  - [Licensing](#licensing)

<!-- /TOC -->

## Overview

`pyani` is a Python3 module that provides support for calculating average nucleotide identity (ANI) and related measures for whole genome comparisons, and rendering relevant graphical summary output. Where available, it takes advantage of multicore systems, and can integrate with [SGE/OGE](http://gridscheduler.sourceforge.net/)-type job schedulers for the sequence comparisons.

`pyani` installs the following scripts into the `$PATH`:

- `average_nucleotide_identity.py` that enables command-line ANI analysis.
- `genbank_get_genomes_by_taxon.py` that downloads publicly-available genomes from NCBI.
- `delta_filter_wrapper.py` is a helper script required to run delta-filter on SGE/OGE systems.

## Installation

The easiest way to install `pyani` v0.2 is to use `conda` or  `pip`. `conda` is recommended for the simplest installation of third-party tool dependencies (`mummer` and `BLAST`/`BLAST+`).

### `conda`

You will need to install the `bioconda` channel, following instructions at [https://bioconda.github.io/user/install.html](https://bioconda.github.io/user/install.html). Then, to create a new environment for `pyani` and install the program, issue the following command:

```bash
conda create --name pyani_env python=3.8 -y
conda activate pyani_env
conda install pyani
```

### `pip`

`pip` will install `pyani` and its Python dependencies, but not the third-party tools.

```bash
pip3 install pyani
```

## Docker images

`pyani` v0.2 scripts are also provided as [Docker](https://www.docker.com/) images, that can be run locally as containers. To use these images, first install Docker. Then, to run the corresponding scripts, issue either:

```bash
docker run -v ${PWD}:/host_dir leightonpritchard/average_nucleotide_identity
```

or

```bash
docker run -v ${PWD}:/host_dir leightonpritchard/genbank_get_genomes_by_taxon
```

### NOTE

The `-v ${PWD}:/host_dir` argument enables the Docker container to see the current directory. Without this argument, the container will not be able to see your input files, or write output data.

## Installing from the repository/source code

If you wish to install `pyani` v0.2 from source code, you will need to download this code from GitHub either directly, or by cloning the repository.

Both methods will create a directory called `pyani` which contains the source code for v0.2.

### IMPORTANT NOTICE

**THE DEFAULT REPOSITORY ON `GITHUB` IS `PYANI` v0.3+, *NOT* v0.2. THE INSTRUCTIONS ON THE MAIN REPOSITORY `README.md` DO NOT APPLY TO v0.2**

Please note that v0.2 is a **MAINTENANCE-ONLY RELEASE**. This means that bugs and security issues will be fixed, but no new features will be added. All new feature development now takes place under v0.3 (the `master` branch on the repository).

### Direct download

Download the source as `.zip` or `.tar.gz` from [https://github.com/widdowquinn/pyani/releases/tag/v0.2.10](https://github.com/widdowquinn/pyani/releases/tag/v0.2.10)

Extract the archived file using the appropriate commands (or by double-clicking in your file explorer/finder):

```bash
unzip v0.2.10.zip
```

or

```bash
tar -zxvf v0.2.10.tar.gz
```

### Clone the repository using `git`

Download the current `pyani` repository with `git clone`, and change branch to `version_0_2`:

```bash
git clone git@github.com:widdowquinn/pyani.git
git checkout version_0_2
```

### Installation

Change directory to `pyani`, and use the `python setup.py` setuptools command, to install the package and scripts. This will **not** install the third-party tools `BLAST`/`BLAST+` and `mummer`.

```bash
cd pyani
python setup.py build
python setup.py install
```

### Third-party tools

Three alignment packages are required, to use all of `pyani`'s methods: `mummer`, `BLAST+`, and legacy `BLAST`.

The simplest route to obtaining these tools is to use `conda`/`bioconda`:

```bash
conda install mummer blast legacy-blast -y
```

But they can also be installed by following instructions from the tools' own websites.

- **BLAST+** (for `anib`) [ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/)
- **legacy BLAST** (for `aniblastall`) [ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/)
- **MUMmer** (for `anim`) [http://mummer.sourceforge.net/](ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST/)
## Testing `pyani`

The `pyani` repository includes tests that can be run with `pytest` (including coverage measurement using `pytest-cov`) with the following command, executed from the repository root directory:

```bash
pytest -v
```

## Running `pyani`

### Script: `average_nucleotide_identity.py`

The `average_nucleotide_identity.py` script - installed as part of this package - enables straightforward ANI analysis at the command-line, and uses the `pyani` module behind the scenes.

You can get a summary of available command-line options with `average_nucleotide_identity.py -h`

```bash
$ average_nucleotide_identity.py -h
usage: average_nucleotide_identity.py [-h] [-o OUTDIRNAME] [-i INDIRNAME] [-v]
                                      [-f] [-s FRAGSIZE] [-l LOGFILE]
                                      [--skip_nucmer] [--skip_blastn]
                                      [--noclobber] [--nocompress] [-g]
                                      [--gformat GFORMAT] [--gmethod GMETHOD]
                                      [--labels LABELS] [--classes CLASSES]
                                      [-m METHOD] [--scheduler SCHEDULER]
                                      [--workers WORKERS]
                                      [--SGEgroupsize SGEGROUPSIZE]
                                      [--maxmatch] [--nucmer_exe NUCMER_EXE]
                                      [--blastn_exe BLASTN_EXE]
                                      [--makeblastdb_exe MAKEBLASTDB_EXE]
                                      [--blastall_exe BLASTALL_EXE]
                                      [--formatdb_exe FORMATDB_EXE]
                                      [--write_excel] [--subsample SUBSAMPLE]
                                      [--seed SEED] [--jobprefix JOBPREFIX]


[…]
```

Example data and output can be found in the directory `test_ani_data`. The data are chromosomes of four isolates of *Caulobacter*. Basic analyses can be performed with the command lines:

```bash
average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIm_output -m ANIm -g
average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIb_output -m ANIb -g
average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIblastall_output -m ANIblastall -g
average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_TETRA_output -m TETRA -g
```

The graphical output below, supporting assignment of `NC_002696` and `NC_011916` to the same species (*C.crescentus*), and the other two isolates to distinct species (`NC_014100`:*C.segnis*; `NC_010338`:*C.* sp K31), was generated with the command-line:

```bash
average_nucleotide_identity.py -v -i tests/test_ani_data/ \
    -o tests/test_ANIm_output/ -g --gformat png,pdf,eps \
    --classes tests/test_ani_data/classes.tab \
    --labels tests/test_ani_data/labels.tab
```

![ANIm percentage identity for *Caulobacter* test data](tests/test_ani_data/ANIm_percentage_identity.png "ANIm percentage identity")
![ANIm alignment coverage for *Caulobacter* test data](tests/test_ani_data/ANIm_alignment_coverage.png "ANIm alignment coverage")
![ANIm alignment length for *Caulobacter* test data](tests/test_ani_data/ANIm_alignment_lengths.png "ANIm alignment length")
![ANIm alignment similarity errors for *Caulobacter* test data](tests/test_ani_data/ANIm_similarity_errors.png "ANIm alignment similarity")

### Script: `genbank_get_genomes_by_taxon.py`

The script `genbank_get_genomes_by_taxon.py`, installed by this package, enables download of genomes from NCBI, specified by taxon ID. The script will download all available assemblies for taxa at or below the specified node in the NCBI taxonomy tree.

Command-line options can be viewed using:

```bash
$ genbank_get_genomes_by_taxon.py -h
usage: genbank_get_genomes_by_taxon.py [-h] [-o OUTDIRNAME] [-t TAXON] [-v]
                                        [-f] [--noclobber] [-l LOGFILE]
                                        [--format FORMAT] [--email EMAIL]
                                        [--retries RETRIES]
                                        [--batchsize BATCHSIZE]
[…]
```

For example, the NCBI taxonomy ID for *Caulobacter* is 75, so all publicly-available *Caulobacter* sequences can be obtained using the command-line:

```bash
$ genbank_get_genomes_by_taxon.py -o Caulobacter_downloads -v -t 75 -l Caulobacter_downloads.log --email me@my.email.domain
INFO: genbank_get_genomes_by_taxon.py: Mon Apr 18 17:22:54 2016
INFO: command-line: /Users/lpritc/Virtualenvs/pyani3/bin/genbank_get_genomes_by_taxon.py -o Caulobacter_downloads -v -t 75 -l Caulobacter_downloads.log --email me@my.email.domain
INFO: Namespace(batchsize=10000, email='me@my.email.domain', force=False, format='gbk,fasta', logfile='Caulobacter_downloads.log', noclobber=False, outdirname='Caulobacter_downloads', retries=20, taxon='75', verbose=True)
INFO: Set NCBI contact email to me@my.email.domain
INFO: Creating directory Caulobacter_downloads
INFO: Output directory: Caulobacter_downloads
INFO: Passed taxon IDs: 75
INFO: Entrez ESearch with query: txid75[Organism:exp]
INFO: Entrez ESearch returns 29 assembly IDs
INFO: Identified 29 unique assemblies
INFO: Taxon 75: 29 assemblies
[…]
INFO: Assembly 639581: 271 contigs
INFO: Assembly 233261: 17 contigs
INFO: Assembly 575291: 48 contigs
INFO: Mon Apr 18 17:25:46 2016
INFO: Done.
```

**NOTE:** You must provide a valid email to identify yourself to NCBI for troubleshooting.

The number of attempted retries for each download, and the size of a batch download can be modified. By default, the script will attempt 20 download retries, and obtain sequences in batches of 10000.

## Method and Output Description

### Average Nucleotide Identity (ANI)

This module calculates Average Nucleotide Identity (ANI) according to one of a number of alternative methods described in, e.g.

- Richter M, Rossello-Mora R (2009) Shifting the genomic gold standard for the prokaryotic species definition. Proc Natl Acad Sci USA 106: 19126-19131. doi:10.1073/pnas.0906412106. (ANI1020, ANIm, ANIb)
- Goris J, Konstantinidis KT, Klappenbach JA, Coenye T, Vandamme P, et al. (2007) DNA-DNA hybridization values and their relationship to whole-genome sequence similarities. Int J Syst Evol Micr 57: 81-91. doi:10.1099/ijs.0.64483-0.

ANI is proposed to be the appropriate *in silico* substitute for DNA-DNA
hybridisation (DDH), and so useful for delineating species boundaries. A
typical percentage threshold for species boundary in the literature is 95%
ANI (e.g. Richter et al. 2009).

All ANI methods follow the basic algorithm:

- Align the genome of organism 1 against that of organism 2, and identify the matching regions
- Calculate the percentage nucleotide identity of the matching regions, as an average for all matching regions

Methods differ on: (1) what alignment algorithm is used, and the choice of parameters (this affects the aligned region boundaries); (2) what the input is for alignment (typically either fragments of fixed size, or the most complete assembly available).

- **ANIm**: uses MUMmer (NUCmer) to align the input sequences.
- **ANIb**: uses BLASTN+ to align 1020nt fragments of the input sequences
- **ANIblastall**: uses legacy BLASTN to align 1020nt fragments of the input sequences
- **TETRA**: calculates tetranucleotide frequencies of each input sequence

The algorithms takes as input correctly-formatted FASTA multiple sequence files. All sequences for a single organism should be contained in only one sequence file. Although it is possible to provide new labels for each input genome, for rendering graphical output, the names of these files are used for identification so it is best to name
them sensibly.

Output is written to a named directory. The output files differ depending on the chosen ANI method.

- **ANIm**: MUMmer/NUCmer .delta files, describing each pairwise sequence alignment. Output as tab-separated plain text format tables describing: alignment coverage; total alignment lengths; similarity errors; and percentage identity (ANIm).
- **ANIb** and **ANIblastall**: FASTA sequences describing 1020nt fragments of each input sequence; BLAST nucleotide databases - one for each set of fragments; and BLASTN output files (tab-separated tabular format plain text) - one for each pairwise comparison of input sequences. Output as tab-separated plain text tables describing: alignment coverage; total alignment lengths; similarity errors; and percentage identity (ANIb or ANIblastall).
- **TETRA**: Tab-separated plain text files describing the Pearson correlations between Z-score distributions for each tetranucleotide in each input sequence (TETRA).

If graphical output is chosen, the output directory will also contain PDF, PNG and EPS files representing the various output measures as a heatmap with row and column dendrograms. Other output formats (e.g. SVG) can be specified with the `--gformat` argument.


## Licensing

Unless otherwise indicated, all code is subject to the following agreement:

>(c) The James Hutton Institute 2014-2019
>(c) The University of Strathclyde 2019-2021
>Author: Leighton Pritchard
>
>Contact: leighton.pritchard@strath.ac.uk
>
>Address:
>Leighton Pritchard
>Strathclyde Institute for Pharmacy and Biomedical Sciences
>University of Strathclyde
>161 Cathedral Street
>Glasgow
>Scotland
>G4 0RE
>UK
>
>The MIT License
>
>Copyright (c) 2014-2019 The James Hutton Institute
>Copyright (c) 2019-2021 The University of Strathclyde
>
>Permission is hereby granted, free of charge, to any person obtaining a copy
>of this software and associated documentation files (the "Software"), to deal
>in the Software without restriction, including without limitation the rights
>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
>copies of the Software, and to permit persons to whom the Software is
>furnished to do so, subject to the following conditions:
>
>The above copyright notice and this permission notice shall be included in
>all copies or substantial portions of the Software.
>
>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
>THE SOFTWARE.


================================================
FILE: _config.yml
================================================
theme: jekyll-theme-minimal

================================================
FILE: bandit.yml
================================================
# BANDIT configuration file
assert_used:
  skips: ['*_test.py', '*test_*.py']

================================================
FILE: docs/Makefile
================================================
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS    =
SPHINXBUILD   = python -msphinx
SPHINXPROJ    = pyani
SOURCEDIR     = .
BUILDDIR      = _build

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

================================================
FILE: docs/about.rst
================================================
.. _pyani-about:

===============
About ``pyani``
===============

``pyani`` is a Python package and standalone program for calculation of whole-genome similarity measures. It is designed to be used with draft or complete prokaryote (bacterial and archaeal) genomes, and implements the following methods:

- ANIb (average nucleotide identity using ``BLAST+``)
- ANIblastall (average nucleotide identity using ``legacy BLAST``)
- ANIm (average nucleotide identity using ``MUMmer``)
- fastANI (average nucleotide identity using ``fastANI``)
- TETRA (4-mer sequence profiles)

-------------------
Funding and Support
-------------------

The development of ``pyani`` has been made possible by generous funding from a number of sources, including:

- The Scottish Government
    - 2011-2016 workpackages
    - 2016-2019 workpackage RD2.1.4

As is the case with much bioinformatics software, ongoing development does not receive continuous direct funding support. If you use ``pyani``, please do cite this tool in your publications and outputs - this helps us justify future funding applications to maintain and improve the software.

You can find more information about how to cite `pyani` on the :ref:`pyani-citations` page.


================================================
FILE: docs/basic_use.rst
================================================
.. _pyani-basic_use:

=========
Basic Use
=========

.. toctree::
    :maxdepth: 2
    :caption: Contents:

    download
    indexing
    createdb
    run_anim
    interpreting_plots


================================================
FILE: docs/citations.rst
================================================
.. _pyani-citations:

================
Citing ``pyani``
================

We would be grateful if you could please cite the following manuscript in your work if you have found ``pyani`` useful:

    Pritchard *et al.* (2016) "Genomics and taxonomy in diagnostics for food security: soft-rotting enterobacterial plant pathogens" *Anal. Methods*, 2016, **8**, 12-24 DOI: 10.1039/C5AY02550H

.. code-block:: latex

    @Article{C5AY02550H,
    author ="Pritchard, Leighton and Glover, Rachel H. and Humphris, Sonia and Elphinstone, John G. and Toth, Ian K.",
    title  ="Genomics and taxonomy in diagnostics for food security: soft-rotting enterobacterial plant pathogens",
    journal  ="Anal. Methods",
    year  ="2016",
    volume  ="8",
    issue  ="1",
    pages  ="12-24",
    publisher  ="The Royal Society of Chemistry",
    doi  ="10.1039/C5AY02550H",
    url  ="http://dx.doi.org/10.1039/C5AY02550H",
    abstract  ="Soft rot Enterobacteriaceae (SRE) are bacterial plant pathogens that cause blackleg{,} wilt and soft rot
    diseases on a broad range of important crop and ornamental plants worldwide. These organisms (spanning the genera Erwinia{,}
    Pectobacterium{,} Dickeya{,} and Pantoea) cause significant economic and yield losses in the field{,} and in storage. They
    are transmissible through surface water{,} by trade and other movement of plant material and soil{,} and in some cases are
    subject to international legislative and quarantine restrictions. Effective detection and diagnosis in support of food
    security legislation and epidemiology is dependent on the ability to classify pathogenic isolates precisely. Diagnostics and
    classification are made more difficult by the influence of horizontal gene transfer on phenotype{,} and historically complex
    and sometimes inaccurate nomenclatural and taxonomic assignments that persist in strain collections and online sequence
    databases. Here{,} we briefly discuss the relationship between taxonomy{,} genotype and phenotype in the SRE{,} and their
    implications for diagnostic testing and legislation. We present novel whole-genome classifications of the SRE{,}
    illustrating inconsistencies between the established taxonomies and evidence from completely sequenced isolates. We conclude
    with a perspective on the future impact of widespread whole-genome sequencing and classification methods on detection and
    identification of bacterial plant pathogens in support of legislative and policy efforts in food security."}


.. TIP::
    When citing ``pyani`` in your text, please consider quoting the precise release version (if you are using a specific release), or the specific commit hash (if you are using the 'bleeding-edge' development verison), e.g.

    ``"...using PYANI (v0.3.0)..."``

    or

    ``"...using PYANI (commit bb1cb5c)..."``

    This will enable precise reproduction of this part of your work by others.

-----------------------------
Publications citing ``pyani``
-----------------------------

If you are using ``pyani``, you are in good company. These authors and manuscripts have employed ``pyani`` to help with their whole-genome classification:

(If I've missed out your paper, please do put in a pull request on ``GitHub`` or get in touch and I'll be happy to add it!)

^^^^
2022
^^^^

* Botelho *et al.* (2022) "The ESKAPE mobilome contributes to the spread of antimicrobial resistance and CRISPR-1 mediated conflict between mobile genetic elements" *bioRxiv* `doi:10.1101/2022.01.03.474784 <https://doi.org/10.1101/2022.01.03.474784>`_
* Castro-Jaimes *et al.* (2022) "Replication initiator proteins of *Acinetobacter baumannii* plasmids: An update note" *Plasmid* `doi:10.1016/j.plasmid.2021.102616 <https://doi.org/10.1016/j.plasmid.2021.102616>`_
* Jiang *et al.* (2022) "Vibrio Clade 3.0: New *Vibrionaceae* Evolutionary Units Using Genome-Based Approach." *Curr Microbiol* `doi:10.1007/s00284-021-02725-0 <https://doi.org/10.1007/s00284-021-02725-0>`_
* Narsing Rao *et al.* (2022) "Genome-based reclassification of *Evansella polygoni* as a later heterotypic synonym of *Evansella clarkii* and transfer of *Bacillus shivajii* and *Bacillus tamaricis* to the genus *Evansella* as *Evansella shivajii* comb. nov. and *Evansella tamaricis* comb. nov." *Arch Microbiol* `doi:10.1007/s00203-021-02720-w <https://doi.org/10.1007/s00203-021-02720-w>`_

^^^^
2021
^^^^

* Abdel-Glil *et al.* (2021) "Comparative in silico genome analysis of *Clostridium perfringens* unravels stable phylogroups with different genome characteristics and pathogenic potential" *Sci. Rep.* `doi:10.1038/s41598-021-86148-8 <https://doi.org/10.1038/s41598-021-86148-8>`_
* Abdullah *et al.* (2021) "Comparative analysis of whole genome sequences of *Leptospira* spp. from RefSeq database provide interspecific divergence and repertoire of virulence factors" *bioRxiv* `doi:10.1101/2021.01.12.426470 <https://doi.org/10.1101/2021.01.12.426470>`_
* Al Rubaye *et al.* (2021) "Novel genomic islands and a new vanD-subtype in the first sporadic VanD-type vancomycin resistant enterococci in Norway" *PLoS One* `doi:10.1371/journal.pone.0255187 <https://doi.org/10.1371/journal.pone.0255187>`_
* Albuquerque *et al.* (2021) "Complete Genome Sequence of Two Deep-Sea *Streptomyces* Isolates from Madeira Archipelago and Evaluation of Their Biosynthetic Potential" *marine drugs* `doi:10.3390/md19110621 <https://doi.org/10.3390/md19110621>`_
* Almeida *et al.* (2021) "Comparative pangenomic analyses and biotechnological potential of cocoa-related *Acetobacter senegalensis* strains" *Antonie van Leeuwenhoek* `doi:10.1007/s10482-021-01684-7 <https://doi.org/10.1007/s10482-021-01684-7>`_
* Alonso-Reyes *et al.* (2021) "Genomic insights into an andean multiresistant soil actinobacterium of biotechnological interest." *World J Microbiol Biotechnol* `doi:10.1007/s11274-021-03129-9 <https://doi.org/10.1007/s11274-021-03129-9>`_
* Asselin *et al.* (2021) "Complete genome sequence resources for the onion pathogen, *Pantoea ananatis* OC5a" *Phytopath.* `doi:10.1094/phyto-09-20-0416-a <https://doi.org/10.1094/phyto-09-20-0416-a>`_
* Badhai *et al.* (2021) "Genomic plasticity and antibody response of *Bordetella bronchiseptica* strain HT200, a natural variant from a thermal spring" *FEMS Micro. Lett.* `doi:10.1093/femsle/fnab035 <https://doi.org/10.1093/femsle/fnab035>`_
* Baxter *et al.* (2021) "Comparative Genomics across Three Ensifer Species Using a New Complete Genome Sequence of the Medicago Symbiont *Sinorhizobium (Ensifer) meliloti* WSM1022" *microorganisms* `doi:10.3390/microorganisms9122428 <https://doi.org/10.3390/microorganisms9122428>`_
* Becken *et al.* (2021) "Genotypic and Phenotypic Diversity among Human Isolates of *Akkermansia muciniphila*" *mBio* `doi:10.1128/mBio.00478-21 <https://doi.org/10.1128/mBio.00478-21>`_
* Bei *et al.* (2021) "Shedding light on the functional role of the *Ignavibacteria* in Italian rice field soil: A meta-genomic/transcriptomic analysis" *Soil Biol. Biochem.* `doi:10.1016/j.soilbio.2021.108444 <https://doi.org/10.1016/j.soilbio.2021.108444>`_
* Biffignandi *et al* (2021) "Genome of *Superficieibacter maynardsmithii*, a novel, antibiotic susceptible representative of *Enterobacteriaceae*" *G3* `doi:10.1093/g3journal/jkab019 <https://doi.org/10.1093/g3journal/jkab019>`_
* Biggel *et al.* (2021) "Spread of vancomycin-resistant *Enterococcus faecium* ST133 in the aquatic environment in Switzerland" *J. Glob. Anitmicrob. Res.* `doi:10.1016/j.jgar.2021.08.002 <https://doi.org/10.1016/j.jgar.2021.08.002>`_
* Boeuf *et al.* (2021) "Meta-pangenomics Reveals Depth-dependent Shifts in Metabolic Potential for the Ubiquitous Marine Bacterial SAR324 Lineage" *Research Squared* `doi:10.21203/rs.3.rs-225427/v1 <https://doi.org/10.21203/rs.3.rs-225427/v1>`_
* Carlin *et al.* (2021) "*Listeria cossartiae sp. nov.*, *Listeria immobilis sp. nov.*, *Listeria portnoyi sp. nov.* and *Listeria rustica sp. nov.*, isolated from agricultural water and natural environments" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004795 <https://doi.org/10.1099/ijsem.0.004795>`_
* Chen *et al.* (2021) "Integrated Phenotypic-Genotypic Analysis of *Latilactobacillus sakei* from Different Niches" *preprints* `doi:10.20944/preprints202107.0457.v1 <https://doi.org/10.20944/preprints202107.0457.v1>`_
* Chew *et al.* (2021) "First isolation of *Candida oceani* from a clinical specimen" *Antonie van Leeuwenhoek* `doi:10.1007/s10482-020-01512-4 <https://doi.org/10.1007/s10482-020-01512-4>`_
* Chew *et al.* (2021) "Molecular epidemiology and phylogenomic analysis of *Mycobacterium abscessus* clinical isolates in an Asian population" *Microb. Genom.* `doi:10.1099/mgen.0.000708 <https://doi.org/10.1099/mgen.0.000708>`_
* Chew *et al.* (2021) "Genomic characterization of *Klebsiella quasipneumoniae* from clinical specimens - a retrospective study, Singapore" *Antimicrob. Chemother.* `doi:10.1128/AAC.00412-21 <https://doi.org/10.1128/AAC.00412-21>`_
* Christensen *et al.* High natural PHA production from acetate in *Cobetia* sp. MC34 and *Cobetia marina* DSM 4741T and in silico analyses of the genus specific PhaC2 polymerase variant" *Microb Cell Fact* `doi:10.1186/s12934-021-01713-0 <https://doi.org/10.1186/s12934-021-01713-0>`_
* Clabaut *et al.* (2021) "Variability of the response of human vaginal *Lactobacillus crispatus* to 17β-estradiol" *Sci. Reports* `doi:10.1038/s41598-021-91017-5 <https://doi.org/10.1038/s41598-021-91017-5>`_
* Danneels *et al.* (2021) "Patterns of transmission and horizontal gene transfer in the *Dioscorea sansibarensis* leaf symbiosis revealed by whole-genome sequencing" *Curr. Biol.* `doi:10.1016/j.cub.2021.03.049 <https://doi.org/10.1016/j.cub.2021.03.049>`_
* Das *et al.* (2021) "Description of *Acinetobacter kanungonis* sp. nov., based on phylogenomic analysis" *Int. J. Sys. Evol. Microbiol.* `doi:10.1099/ijsem.0.004833 <https://doi.org/10.1099/ijsem.0.004833>`_
* Costatini *et al.* (2021) "Insight into phenotypic and genotypic differences between vaginal *Lactobacillus crispatus* BC5 and *Lactobacillus gasseri* BC12 to unravel nutritional and stress factors influencing their metabolic activity" *Microb. Genomics* `doi:10.1099/mgen.0.000575 <https://doi.org/10.1099/mgen.0.000575>`_
* Davison *et al.* (2021) "Large-scale comparative genomics unravels great genomic diversity across the *Rickettsia* and *Ca. Megaira* genera and identifies *Torix* group as an evolutionarily distinct clade." *bioRxiv* `doi:10.1101/2021.10.06.463315 <https://doi.org/10.1101/2021.10.06.463315>`_
* de Silva *et al.* (2021) "Revisiting the *Colletotrichum* species causing anthracnose of almond in Australia" *Aust. Plant Path.* `doi:10.1007/s13313-020-00765-x <https://doi.org/10.1007/s13313-020-00765-x>`_
* Delgado-Blas *et al.* (2021) "Population genomics and antimicrobial resistance dynamics of *Escherichia coli* in wastewater and river environments" *Commun Biol* `doi:10.1038/s42003-021-01949-x <https://doi.org/10.1038/s42003-021-01949-x>`_
* Devika *et al.* (2021) "In Silico Prediction of Novel Probiotic Species Limiting Pathogenic *Vibrio* Growth Using Constraint-Based Genome Scale Metabolic Modeling" *Front. Cell. Inf. Microbiol.* `doi:10.3389/fcimb.2021.752477 <https://doi.org/10.3389/fcimb.2021.752477>`_
* Díaz *et al.* (2021) "Comparative Genomic Analysis of Novel *Bifidobacterium longum* subsp. *longum* Strains Reveals Functional Divergence in the Human Gut Microbiota" *microorganisms* `doi:10.3390/microorganisms9091906 <https://doi.org/10.3390/microorganisms9091906>`_
* Dragoš *et al* (2021) "Phages carry interbacterial weapons encoded by biosynthetic gene clusters" *Curr. Biol.* `doi:10.1016/j.cub.2021.05.046 <https://doi.org/10.1016/j.cub.2021.05.046>`_
* Ducarmon *et al.* (2021) "Microbiota-associated risk factors for asymptomatic gut colonisation with multi-drug-resistant organisms in a Dutch nursing home" *Genome Medicine* `doi:0.1186/s13073-021-00869-z <https://doi.org/0.1186/s13073-021-00869-z>`_
* Fluit *et al.* (2021) "Characterization of clinical *Ralstonia* strains and their taxonomic position." *Antonie van Leeuwenhoek* `doi:10.1007/s10482-021-01637-0 <https://doi.org/10.1007/s10482-021-01637-0>`_
* Foucher *et al.* (2021) "Improving common bacterial blight phenotyping by using rub-inoculation and machine learning: cheaper, better, faster, stronger" *Phytopath.* `doi:10.1094/PHYTO-04-21-0129-R <https://doi.org/10.1094/PHYTO-04-21-0129-R>`_
* Friedrich *et al.* (2021) "Complete Genome Sequence of *Stenotrophomonas indicatrix* DAIF1" *Micro Res. Ann.* `doi:10.1128/MRA.01484-20 <https://doi.org/10.1128/MRA.01484-20>`_
* Friedrich *et al.* (2021) "Living in a Puddle of Mud: Isolation and Characterization of Two Novel *Caulobacteraceae* Strains *Brevundimonas pondensis sp. nov.* and *Brevundimonas goettingensis sp. nov.*" *appl. microbiol.* `doi:10.3390/applmicrobiol1010005 <https://doi.org/10.3390/applmicrobiol1010005>`_
* Firedrich *et al.* (2021) "Down in the pond: Isolation and characterization of a new *Serratia marcescens* strain (LVF3) from the surface water near frog’s lettuce (*Groenlandia densa*)" *PLoS One* `doi:10.1371/journal.pone.0259673 <https://doi.org/10.1371/journal.pone.0259673>`_
* Gai *et al.* (2021) "Chromosome-scale genome sequence of *Alternaria alternata* causing Alternaria brown spot of citrus" *Mol. Plant Microbe Int.* `doi:10.1094/MPMI-10-20-0278-SC <https://doi.org/10.1094/MPMI-10-20-0278-SC>`_
* Gauthier *et al.* (2021) "Genomic Perspectives on *Aeromonas salmonicida* subsp. *salmonicida* Strain 890054 as a Model System for Pathogenicity Studies and Mitigation of Fish Infections" *Front. Marine Sci.* `doi:10.3389/fmars.2021.744052 <https://doi.org/10.3389/fmars.2021.744052>`_
* Gallardo-Benavente *et al.* (2021) "Genomics Insights into *Pseudomonas* sp. CG01: An Antarctic Cadmium-Resistant Strain Capable of Biosynthesizing CdS Nanoparticles Using Methionine as S-Source" *genes* `doi:10.3390/genes12020187 <https://doi.org/10.3390/genes12020187>`_
* Girard *et al.* (2021) "The Ever-Expanding *Pseudomonas* Genus: Description of 43 New Species and Partition of the *Pseudomonas Putida* Group" *preprints* `doi:10.20944/preprints202107.0335.v1 <https://doi.org/10.20944/preprints202107.0335.v1>`_
* Ghosh *et al.* (2021) "Reconstructing Draft Genomes Using Genome Resolved Metagenomics Reveal Arsenic Metabolizing Genes and Secondary Metabolites in Fresh Water Lake in Eastern India" *Bioinf. Biol. Insights* `doi:10.1177/11779322211025332 https://doi.org/10.1177/11779322211025332>`_
* Granehäll *et al.* (2021) "Metagenomic analysis of ancient dental calculus reveals unexplored diversity of oral archaeal *Methanobrevibacter*." *Microbiome* `doi:https://doi.org/10.1186/s40168-021-01132-8 <https://doi.org/10.1186/s40168-021-01132-8>`_
* Guerin *et al.* (2021) "Isolation and characterisation of ΦcrAss002, a crAss-like phage from the human gut that infects *Bacteroides xylanisolvens*" *Microbiome* `doi:10.1186/s40168-021-01036-7 <https://doi.org/10.1186/s40168-021-01036-7>`_
* Halary *et al.* (2021) "Unexpected Micro-Spatial Scale Genomic Diversity of the Bloom-Forming Cyanobacterium *Aphanizomenon gracile* and its Phycosphere" *Res. Sq.* `doi:10.21203/rs.3.rs-617160/v1 <https://doi.org/10.21203/rs.3.rs-617160/v1>`_
* Hansen *et al.* (2021) "Metagenomic sequencing for rapid identification o f*Xylella fastidiosa* from leaf samples" *bioRxiv* `doi:10.1101/2021.05.12.443947 <https://doi.org/10.1101/2021.05.12.443947>`_
* Hertel *et al.* (2021) "Characterization of glyphosate-resistant *Burkholderia anthina* and *Burkholderia cenocepacia* isolates from a commercial Roundup® solution" *Env. Micro. Rep.* `doi:10.1111/1758-2229.13022 <https://doi.org/10.1111/1758-2229.13022>`_
* Hoetzinger *et al.* (2021) "Dynamics of Baltic Sea phages driven by environmental changes" *Env. Microbiol.* `doi:10.1111/1462-2920.15651 <https://doi.org/10.1111/1462-2920.15651>`_
* Holzer *et al.* (2021) "Tracking the Distribution of *Brucella abortus* in Egypt Based on Core Genome SNP Analysis and In Silico MLVA-16" *microorganisms* `doi:10.3390/microorganisms9091942 <https://doi.org/10.3390/microorganisms9091942>`_
* von Hoyningen-Huene *et al.* (2021) "*Pontibacillus* sp. ALD_SL1 and *Psychroflexus* sp. ALD_RP9, two novel moderately halophilic bacteria isolated from sediment and water from the Aldabra Atoll, Seychelles" *PLoS ONE* `doi:10.1371/journal.pone.0256639 <https://doi.org/10.1371/journal.pone.0256639>`_
* Huang *et al.* (2021) "Phenotypic properties and genotyping analysis of *Bacillus cereus* group isolates from dairy and potato products" *LWT* `doi:10.1016/j.lwt.2021.110853 <https://doi.org/10.1016/j.lwt.2021.110853>`_
* Huang *et al.* (2021) "Genome-resolved metagenomics using environmental and clinical samples" *Brief. Bioinf.* `doi:10.1093/bib/bbab030 <https://doi.org/10.1093/bib/bbab030>`_
* Huang *et al.* (2021) "Comparative Genomics and Specific Functional Characteristics Analysis of *Lactobacillus acidophilus*" *microorganisms* `doi:10.3390/microorganisms9091992 <https://doi.org/10.3390/microorganisms9091992>`_
* Hugouvieux-Cotte-Pattat & Van Gijsegem (2021) "Diversity within the *Dickeya zeae* complex, identification of *Dickeya zeae* and *Dickeya oryzae* members, proposal of the novel species *Dickeya parazeae* sp. nov." *Int. J. Syst. Envol. Microbiol.* `doi:10.1099/ijsem.0.005059 <https://doi.org/10.1099/ijsem.0.005059>`_
* Huihui *et al.* (2021) "Partial biological characteristics and genomic analysis of *Vibrio cholerae* typing phage VP2" *Disease Surv.* `doi:10.3784/jbjc.202105190282 <https://doi.org/10.3784/jbjc.202105190282>`_
* Hünnefeld *et al.* (2021) "Genome Sequence of the Bacteriophage CL31 and Interaction with the Host Strain *Corynebacterium glutamicum* ATCC 13032" *viruses* `doi:10.3390/v13030495 <https://doi.org/10.3390/v13030495>`_
* Ivanova *et al.* (2021) "Draft Genome Assemblies of Two *Campylobacter novaezeelandiae* and Four Unclassified Thermophilic *Campylobacter* Isolates from Canadian Agricultural Surface Water" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00249-21 <https://doi.org/10.1128/MRA.00249-21>`_
* Jian *et al.* (2021) "Diversity and distribution of viruses inhabiting the deepest ocean on Earth" *ISME J.* `doi:10.1038/s41396-021-00994-y <https://doi.org/10.1038/s41396-021-00994-y>`_
* Jungblut *et al.* (2021) "Genomic diversity and CRISPR‐Cas systems in the cyanobacterium *Nostoc* in the High Arctic" *Env. Microbiol.* `doi:10.1111/1462-2920.15481 <https://doi.org/10.1111/1462-2920.15481>`_
* Karaseva *et al.* (2021) "*Fervidicoccus fontis* Strain 3639Fd, the First Crenarchaeon Capable of Growth on Lipids" *Microbiol.* `doi:10.1134/S002626172104007X <https://doi.org/10.1134/S002626172104007X>`_
* Keen *et al.* (2021) "Comparative Genomics of *Mycobacterium avium* Complex Reveals Signatures of Environment-Specific Adaptation and Community Acquisition" *mSystems* `doi:10.1128/mSystems.01194-21 <https://doi.org/10.1128/mSystems.01194-21>`_
* Kim *et al.* (2021) "Real-Time PCR Method for the Rapid Detection and Quantification of Pathogenic *Staphylococcus* Species Based on Novel Molecular Target Genes" *foods* `doi:10.3390/foods10112839 <https://doi.org/10.3390/foods10112839>`_
* Kim *et al.* (2021) "*Altererythrobacter lutimaris* sp. nov., a marine bacterium isolated from a tidal flat and reclassification of *Altererythrobacter deserti*, *Altererythrobacter estronivorus* and *Altererythrobacter muriae* as *Tsuneonella deserti* comb. nov., *Croceicoccus estronivorus* comb. nov. and *Alteripontixanthobacter muriae* comb. nov." *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.005134 <https://doi.org/10.1099/ijsem.0.005134>`_
* Koirala *et al.* (2021) "Identification of two novel pathovars of *Pantoea stewartii* subsp. *indologenes* affecting Allium sp. and millets" *Phytopathology* `doi:10.1094/PHYTO-11-20-0508-R <https://doi.org/10.1094/PHYTO-11-20-0508-R>`_
* Kuźmińska-Bajor *et al.* (2021) "Genomic and functional characterization of five novel *Salmonella*-targeting bacteriophages." *Virol J* `doi:10.1186/s12985-021-01655-4 <https://doi.org/10.1186/s12985-021-01655-4>`_
* Lakra *et al.* (2021) "Genome based reclassification of *Deinococcus swuensis* as a heterotypic synonym of *Deinococcus radiopugnans*" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004879 <https://doi.org/10.1099/ijsem.0.004879>`_
* Lee *et al.* (2021) "*Bifidobacterium bifidum* strains synergize with immune checkpoint inhibitors to reduce tumour burden in mice" *Nat. Microbiol.* `doi:10.1038/s41564-020-00831-6 <https://doi.org/10.1038/s41564-020-00831-6>`_
* Lee *et al.* (2021) "Identification and Characterization of a Novel Genomic Island Harboring Cadmium and Arsenic Resistance Genes in *Listeria welshimeri*" *biomolecules* `doi:10.3390/biom11040560 <https://doi.org/10.3390/biom11040560>`_
* Lee *et al.* (2021) "Lemierre’s syndrome associated with hypervirulent *Klebsiella pneumoniae*: A case report and genomic characterization of the isolate" *IDCases* `doi:10.1016/j.idcr.2021.e01173 <https://doi.org/10.1016/j.idcr.2021.e01173>`_
* Lee *et al.* (2021) "Methane-derived carbon flows into host–virus networks at different trophic levels in soil" *Proc. Natl. Acad. Sci. USA* `doi:10.1073/pnas.2105124118 <https://doi.org/10.1073/pnas.2105124118>`_
* Lee *et al.* (2021) "Re-classification of *Streptomyces venezuelae* strains and mining secondary metabolite biosynthetic gene clusters" *iScience* `doi:10.1016/j.isci.2021.103410 <https://doi.org/10.1016/j.isci.2021.103410>`_
* Li *et al* (2021) "Novel *Paenibacillus sp.* Strains From the Perennial Ryegrass Seed Microbiome Reveal Bioprotectant and Biofertiliser Activity - Differentiating Similar Strains via Genomics and Transcriptomics" *Research Sq.* `doi:10.21203/rs.3.rs-445288/v1 <https://doi.org/10.21203/rs.3.rs-445288/v1>`_
* Li *et al.* (2021) "Transcriptomics differentiate two novel bioactive strains of *Paenibacillus* sp. isolated  from the perennial ryegrass seed  microbiomeTon" *Sci. Rep.* `doi:10.1038/s41598-021-94820-2 <https://doi.org/0.1038/s41598-021-94820-2>`_
* Li *et al.* (2021) "Comparative Genomics Analyses Reveal the Differences between *B. longum* subsp. *infantis* and *B. longum* subsp. *longum* in Carbohydrate Utilisation, CRISPR-Cas Systems and Bacteriocin Operons" *microorganisms* `doi:10.3390/microorganisms9081713 <https://doi.org/10.3390/microorganisms9081713>`_
* Liao *et al.* (2021) "Nationwide genomic atlas of soil-dwelling *Listeria* reveals effects of selection and population ecology on pangenome evolution" *Nat. Microbiol.* `doi:10.1038/s41564-021-00935-7 <https://doi.org/10.1038/s41564-021-00935-7>`_
* Liu *et al.* (2021) "*Corynebacterium anserum* sp. nov., isolated from the faeces of greater white-fronted geese (*Anser albifrons*) at Poyang Lake, PR China" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004637 <https://doi.org/10.1099/ijsem.0.004637>`_
* Liu *et al.* (2021) "Isolation of the Novel Phage PHB09 and Its Potential Use against the Plant Pathogen *Pseudomonas syringae* pv. *actinidiae*" *Viruses* `doi:10.3390/v13112275 <https://doi.org/10.3390/v13112275>`_
* Lood *et al.* (2021) "Genomics of an endemic cystic fibrosis *Burkholderia multivorans* strain reveals low within-patient evolution but high between-patient diversity" *PLoS Pathog.* `doi:0.1371/journal.ppat.1009418 <https://doi.org/0.1371/journal.ppat.1009418>`_
* López-Pérez *et al.* (2021) "Ecological diversification reveals routes of pathogen emergence in endemic *Vibrio vulnificus* populations" *Proc. Natl. Acad. Sci. USA* `doi:10.1073/pnas.2103470118 <https://doi.org/10.1073/pnas.2103470118>`_
* López-Pérez *et al.* (2021) "Genomic Characterization of Imipenem- and Imipenem- Relebactam-Resistant Clinical Isolates of *Pseudomonas aeruginosa*" *mSphere* `doi:10.1128/mSphere.00836-21 <https://doi.org/10.1128/mSphere.00836-21>`_
* Lu *et al.* (2021) "Asgard archaea in the haima cold seep: Spatial distribution and genomic insights" *Deep Sea Res. I* `doi:10.1016/j.dsr.2021.103489 <https://doi.org/10.1016/j.dsr.2021.103489>`_
* Lu *et al.* (2021) "Comparative Genomic Analysis of *Bifidobacterium bifidum* Strains Isolated from Different Niches" *genes* `doi:10.3390/genes12101504 <https://doi.org/10.3390/genes12101504>`_
* Luo *et al.* (2021) "Isolation and characterization of new phage vB_CtuP_A24 and application to control *Cronobacter* spp. in infant milk formula and lettuce" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110109 <https://doi.org/10.1016/j.foodres.2021.110109>`_
* Ma *et al.* (2021) "Identification of *Pectobacterium versatile* causing blackleg of potato in New York State" *Plant Disease* `doi:10.1094/PDIS-09-20-2089-RE <https://doi.oprg/10.1094/PDIS-09-20-2089-RE>`_
* Majer *et al.* (2021) "Whole genome sequencing of *Streptomyces actuosus* ISP-5337, *Streptomyces sioyaensis* B-5408, and *Actinospica acidiphila* B-2296 reveals secondary metabolomes with antibiotic potential" *Biotech. Rep.* `doi:10.1016/j.btre.2021.e00596 <https://doi.org/10.1016/j.btre.2021.e00596>`_
* Matarrita-Carranza *et al.* (2021) "*Streptomyces* sp. M54: an actinobacteria associated with a neotropical social wasp with high potential for antibiotic production." *Antonie van Leeuwenhoek* `doi:10.1007/s10482-021-01520-y <https://doi.org/10.1007/s10482-021-01520-y>`_
* Matsumoto *et al.* (2021) "Complete Genome Sequence of *Acinetobacter pittii* OCU_Ac17, Isolated from Human Venous Blood" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00696-21 <https://doi.org/10.1128/MRA.00696-21>`_
* Mao *et al.* (2021) "Comparative Genomic Analysis of *Lactiplantibacillus plantarum* Isolated from Different Niches" *genes* `doi:10.3390/genes12020241 <https://doi.org/10.3390/genes12020241>`_
* Marks *et al.* "*Staphylococcus aureus* injection drug use-associated bloodstream infections are propagated by community outbreaks of diverse lineages" *Commun Med* `doi:10.1038/s43856-021-00053-9 <https://doi.org/10.1038/s43856-021-00053-9>`_
* McKay *et al.* (2021) "Sulfur cycling and host-virus interactions in *Aquificales*-dominated biofilms from Yellowstone’s hottest ecosystems." *ISME J* `doi:10.1038/s41396-021-01132-4 <https://doi.org/10.1038/s41396-021-01132-4>`_
* Misztak *et al.* (2021) "Comparative Genomics and Physiological Investigation of a New *Arthrospira/Limnospira* Strain O9.13F Isolated from an Alkaline, Winter Freezing, Siberian Lake" *cells* `doi:10.3390/cells10123411 <https://doi.org/10.3390/cells10123411>`_
* Moon *et al* (2021) "Mobile Colistin Resistance Gene mcr-1 Detected on an IncI2 Plasmid in *Salmonella Typhimurium* Sequence Type 19 from a Healthy Pig in South Korea" *microorganisms* `doi:10.3390/microorganisms9020398 <https://doi.org/10.3390/microorganisms9020398>`_
* Moya-Beltrán *et al.* (2021) "Genomic evolution of the class *Acidithiobacillia*: deep-branching *Proteobacteria* living in extreme acidic conditions" *ISME J.* `doi:0.1038/s41396-021-00995-x <https://doi.org/0.1038/s41396-021-00995-x>`_
* Mullins *et al.* (2021) "Discovery of the Pseudomonas Polyyne Protegencin by a Phylogeny-Guided Study of Polyyne Biosynthetic Gene Cluster Diversity" *mBio* `doi:10.1128/mBio.00715-21 <https://doi.org/10.1128/mBio.00715-21>`_
* Nascimento *et al.* (2021) "Genomic Analysis of the 1-Aminocyclopropane-1-Carboxylate Deaminase-Producing *Pseudomonas thivervalensis* SC5 Reveals Its Multifaceted Roles in Soil and in Beneficial Interactions With Plants" *Front. Microbiol.* `doi:10.3389/fmicb.2021.752288 <https://doi.org/10.3389/fmicb.2021.752288>`_
* Nemec *et al.* (2021) "Delineation of a novel environmental phylogroup of the genus *Acinetobacter* encompassing *Acinetobacter terrae sp. nov.*, *Acinetobacter terrestris sp. nov.* and three other tentative species" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2021.126217 <https://doi.org/10.1016/j.syapm.2021.126217>`_
* Nikolaisen *et al.* (2021) "First finding of *Streptococcus phocae* infections in mink (*Neovison vison*)" *Res. Vet. Sci.* `doi:10.1016/j.rvsc.2021.07.015 <https://doi.org/10.1016/j.rvsc.2021.07.015>`_
* Nooij *et al.* (2021) "Faecal microbiota transplantation influences procarcinogenic *Escherichia coli* in recipient recurrent *Clostridioides difficile* patients" *Gastroenterology* `doi:10.1053/j.gastro.2021.06.009 <https://doi.org/10.1053/j.gastro.2021.06.009>`_
* Ogg *et al.* (2021) "Pangenome analyses of LuxS-coding genes and enzymatic repertoires in cocoa-related lactic acid bacteria" *Genomics* `doi:10.1016/j.ygeno.2021.04.010 <https://doi.org/10.1016/j.ygeno.2021.04.010>`_
* Oliveira *et al.* (2021) "High Genomic Identity between Clinical and Environmental Strains of *Herbaspirillum frisingense* Suggests Pre-Adaptation to Different Hosts and Intrinsic Resistance to Multiple Drugs" *antibiotics* `doi:10.3390/antibiotics10111409 <https://doi.org/10.3390/antibiotics10111409>`_
* Öhrman *et al.* (2021) "Reorganized Genomic Taxonomy of *Francisellaceae* Enables Design of Robust Environmental PCR Assays for Detection of *Francisella tularensis*" *Microorganisms* `doi:10.3390/microorganisms9010146 <https://doi.org/10.3390/microorganisms9010146>`_
* Öhrman *et al.* (2021) "Complete Genome Sequence of *Francisella* sp. Strain LA11-2445 (FDC406), a Novel *Francisella* Species Isolated from a Human Skin Lesion" *Micro. Res. Ann.* `doi:10.1128/MRA.01233-20 <https://doi.org/10.1128/MRA.01233-20>`_
* Pais *et al.* (2021) "Genomic sequencing of different sequevars of *Ralstonia solanacearum* belonging to the Moko ecotype" *Genet. Mol. Bol.* `doi:10.1590/1678-4685-gmb-2020-0172 <https://doi.org/10.1590/1678-4685-gmb-2020-0172>`_
* Panwar *et al.* (2021) "Remarkably coherent population structure for a dominant Antarctic *Chlorobium* species" *Microbiome* `doi:10.1186/s40168-021-01173-z <https://doi.org/10.1186/s40168-021-01173-z>`_
* Pardo-Esté *et al.* (2021) "Genetic Characterization of *Salmonella infantis* with Multiple Drug Resistance Profiles Isolated from a Poultry-Farm in Chile" *microorganisms* `doi:10.3390/microorganisms9112370 <https://doi.org/10.3390/microorganisms9112370>`_
* Pédron *et al.* (2021) "Early Emergence of *Dickeya solani* Revealed by Analysis of *Dickeya* Diversity of Potato Blackleg and Soft Rot Causing Pathogens in Switzerland" *microorganisms* `doi:10.3390/microorganisms9061187  <https://doi.org/10.3390/microorganisms9061187>`_
* Pedron *et al.* (2021) "*Mesorhizobium comanense* sp. nov., isolated from groundwater" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.005131 <https://doi.org/10.1099/ijsem.0.005131>`_
* Pérez-Carrascal *et al.* (2021) "Single-colony sequencing reveals microbe-by-microbiome phylosymbiosis between the cyanobacterium *Microcystis* and its associated bacteria." *Microbiome* `doi:10.1186/s40168-021-01140-8 <https://doi.org/10.1186/s40168-021-01140-8>`_
* Petriglieri *et al.* (2021) "Candidatus *Dechloromonas phosphoritropha* and Ca. *D. phosphorivorans*, novel polyphosphate accumulating organisms abundant in wastewater treatment systems" *ISME J.* `doi:10.1038/s41396-021-01029-2 <https://doi.org/10.1038/s41396-021-01029-2>`_
* Pidcock *et al.* (2021) "Phylogenetic systematics of *Butyrivibrio* and *Pseudobutyrivibrio* genomes illustrate vast taxonomic diversity, open genomes and an abundance of carbohydrate-active enzyme family isoforms" *Microbial Genomics* `doi:10.1099/mgen.0.000638 <https://doi.org/10.1099/mgen.0.000638>`_
* Puri *et al.* "Phylogenomic Framework for Taxonomic Delineation of *Paracoccus* spp. and Exploration of Core-Pan Genome" *Ind. J. Microbiol.* `doi:10.1007/s12088-021-00929-3 <https://doi.org/10.1007/s12088-021-00929-3>`_
* Román-Reyna *et al.* (2021) "Metagenomic Sequencing for Identification of *Xylella fastidiosa* from Leaf Samples" *mSystems* `doi:10.1128/mSystems.00591-21 <https://doi.org/10.1128/mSystems.00591-21>`_
* Reichler *et al.* (2021) "Identification, subtyping, and tracking of dairy spoilage-associated *Pseudomonas* by sequencing the *ileS* gene" *J. Dairy Sci.* `doi:10.3168/jds.2020-19283 <https://doi.org/10.3168/jds.2020-19283>`_
* Ryngajłło *et al.* (2021) "Complete genome sequence of lovastatin producer *Aspergillus terreus* ATCC 20542 and evaluation of genomic diversity among *A. terreus* strains" *Appl. Microbiol. Biotechnol.* `doi:10.1007/s00253-021-11133-0 <https://doi.org/10.1007/s00253-021-11133-0>`_
* Saati-Santamaría *et al.* (2021) "Phylogenomic Analyses of the Genus _Pseudomonas_ Lead to the Rearrangement of Several Species and the Definition of New Genera" *Biology* `doi:10.3390/biology10080782 <https://doi.org/10.3390/biology10080782>`_
* Sakiyama *et al.* (2021) "Complete Genome Sequence of a Clinical Isolate of *Acinetobacter baumannii* Harboring 11 Plasmids" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00695-21 <https://doi.org/10.1128/MRA.00695-21>`_
* Schlez *et al.* (2021) "*Corynebacterium rouxii*, a recently described member of the *C. diphtheriae* group isolated from three dogs with ulcerative skin lesions" *Ant. van Leeuw.* `doi:10.1007/s10482-021-01605-8 <https://doi.org/10.1007/s10482-021-01605-8>`_
* Santos *et al.* (2021) "*Phaffia brasiliana* sp. nov., a yeast species isolated from soil in a Cerrado–Atlantic Rain Forest ecotone site in Brazil" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.005080 <https://doi.org/10.1099/ijsem.0.005080>`_
* Saw *et al.* (2021) "Complete Genome Sequencing of a Novel *Gloeobacter* Species from a Waterfall Cave in Mexico" *Genome Biol. Evol.* `doi:10.1093/gbe/evab264 <https://doi.org/10.1093/gbe/evab264>`_
* Schörner *et al.* (2021) "Genomic analysis of *Neisseria elongata* isolate from a patient with infective endocarditis" *FEBS Open Bio* `doi:10.1002/2211-5463.13201 <https://doi.org/10.1002/2211-5463.13201>`_
* von Schwartzenberg *et al.* (2021) "Caloric restriction disrupts the microbiota and colonization resistance" *Nature* `doi:10.1038/s41586-021-03663-4 <https://doi.org/10.1038/s41586-021-03663-4>`_
* Sedaghatjoo *et al.* (2021) "Development of a loop-mediated isothermal amplification assay for the detection of *Tilletia controversa* based on genome comparison" *Sci. Reports.* `doi:10.1038/s41598-021-91098-2 <https://doi.org/10.1038/s41598-021-91098-2>`_
* Seibert *et al.* (2021) "*Chlamydia buteonis* in birds of prey presented to California wildlife rehabilitation facilities" *PLoS One* `doi:10.1371/journal.pone.0258500 <https://doi.org/10.1371/journal.pone.0258500>`_
* Singh *et al.* (2021) "Enrichment and description of novel bacteria performing syntrophic propionate oxidation at high ammonia level" *Env. Micro.* `doi:10.1111/1462-2920.15388 <https://doi.org/10.1111/1462-2920.15388>`_
* Singh *et al.* (2021) "Genome-based reclassification of *Amycolatopsis eurytherma* as a later heterotypic synonym of *Amycolatopsis thermoflava*" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004642 <https://doi.org/10.1099/ijsem.0.004642>`_
* Son *et al.* (2021) "*Serratia rhizosphaerae sp. nov.*, a novel plant resistance inducer against soft rot disease in tobacco" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004788 <https://doi.org/10.1099/ijsem.0.004788>`_
* Sorokin *et al.* (2021) "*Natronoglycomyces albus gen. nov., sp. nov*, a haloalkaliphilic actinobacterium from a soda solonchak soil" *Int. J. Syst. Evol. Microbiol.* `doi:10.1099/ijsem.0.004804 <https://doi.org/10.1099/ijsem.0.004804>`_
* Strube (2021) "RibDif: can individual species be differentiated by 16S sequencing?" *Bioinf. Adv.* `doi:10.1093/bioadv/vbab020 <https://doi.org/10.1093/bioadv/vbab020>`_
* Suarez *et al.* (2021) "Whole-Genome sequencing and comparative genomics of *Mycobacterium spp.* from farmed Atlantic and coho salmon in Chile" *Antonie van Leeuw.* `doi:10.1007/s10482-021-01592-w <https://doi.org/10.1007/s10482-021-01592-w>`_
* Tegopoulos *et al.* (2021) "Genomic and Phylogenetic Analysis of *Lactiplantibacillus plantarum* L125, and Evaluation of Its Anti-Proliferative and Cytotoxic Activity in Cancer Cells" *biomedicines* `doi:10.3390/biomedicines9111718 <https://doi.org/10.3390/biomedicines9111718>`_
* Tian *et al.* (2021) "LINflow: a computational pipeline that combines an alignment-free with an alignment-based method to accelerate generation of similarity matrices for prokaryotic genomes" *PeerJ* `doi:10.7717/peerj.10906 <https://doi.org/10.7717/peerj.10906>`_
* Tian *et al.* (2021) "Antifungal mechanism of *Bacillus amyloliquefaciens* strain GKT04 against *Fusarium* wilt revealed using genomic and transcriptomic analyses" *Microbiol. Open* `doi:10.1002/mbo3.1192 <https://doi.org/10.1002/mbo3.1192>`_
* Turco *et al.* (2021) "Draft Genome Sequence of a New *Fusarium* Isolate Belonging to *Fusarium tricinctum* Species Complex Collected From Hazelnut in Central Italy" *Front. Plant Sci.* `doi:10.3389/fpls.2021.788584 <https://doi.org/10.3389/fpls.2021.788584>`_
* Undabarrena *et al.* (2021) "*Rhodococcus* comparative genomics reveals a phylogenomic-dependent non-ribosomal peptide synthetase distribution: insights into biosynthetic gene cluster connection to an orphan metabolite" *Microb. Genom.* `doi:10.1099/mgen.0.000621 <https://doi.org/10.1099/mgen.0.000621>`_
* van der Lelie *et al.* (2021) "Rationally designed bacterial consortia to treat chronic immune-mediated colitis and restore intestinal homeostasis" *Nat. Comms.* `doi:10.1038/s41467-021-23460-x <https://doi.org/10.1038/s41467-021-23460-x>`_
* Vargas-Peralta *et al.* (2021) "Identification of *Pectobacterium* species isolated from the soft rot of tetecho (*Neobuxbaumia tetetzo*), a columnar cactus, and associated metagenomics" *bioRxiv* `doi:10.1101/2021.02.01.429127 <https://doi.org/10.1101/2021.02.01.429127>`_
* Verma *et al.* (2021) "Genome analyses of 174 strains of *Mycobacterium tuberculosis* provide insight into the evolution of drug resistance and reveal potential drug targets" *Microb. Genom.* `doi:10.1099/mgen.0.000542 <https://doi.org/10.1099/mgen.0.000542>`_
* Viera *et al.* (2021) "A highly specific *Serratia*-infecting T7-like phage inhibits biofilm formation in two different genera of the Enterobacteriaceae family" *Res. Microbiol.* `doi:10.1016/j.resmic.2021.103869 <https://doi.org/10.1016/j.resmic.2021.103869>`_
* Vincent *et al.* (2021) "AsaGEI2d: a new variant of a genomic island identified in a group of *Aeromonas salmonicida* subsp. *salmonicida* isolated from France, which bears the pAsa7 plasmid" *FEMS Micro. Lett.* `doi:10.1093/femsle/fnab021 <https://doi.org/10.1093/femsle/fnab021>`_
* Volpiano *et al.* (2021) "Genomic Metrics Applied to *Rhizobiales (Hyphomicrobiales)*: Species Reclassification, Identification of Unauthentic Genomes and False Type Strains" *Front. Microbiol.* `doi:10.3389/fmicb.2021.614957 <https://doi.org/10.3389/fmicb.2021.614957>`_
* Wang *et al.* (2021). "Spontaneous Bacterial Peritonitis Caused by *Bordetella hinzii*." *Emerging Infectious Diseases* `doi:10.3201/eid2711.211428 <https://doi.org/10.3201/eid2711.211428>`_
* Wang *et al.* (2021) "Dynamic impact of virome on colitis and colorectal cancer: Immunity, inflammation, prevention and treatment" *Sem. Cancer Biol.* `doi:10.1016/j.semcancer.2021.10.004 <https://doi.org/10.1016/j.semcancer.2021.10.004>`_
* Watson *et al.* (2021) "Adaptive ecological processes and metabolic independence drive microbial colonization and resilience in the human gut" *bioRxiv* `doi:10.1101/2021.03.02.433653 <https://doi.org/10.1101/2021.03.02.433653>`_
* Wu *et al.* (2021) "Metagenomic insights into nitrogen and phosphorus cycling at the soil aggregate scale driven by organic material amendments" *Sci. Tot. Env.* `doi:10.1016/j.scitotenv.2021.147329 <https://doi.org/10.1016/j.scitotenv.2021.147329>`_
* Wu *et al.* (2021) "Moisture modulates soil reservoirs of active DNA and RNA viruses." *Commun Biol* `doi:10.1038/s42003-021-02514-2 <https://doi.org/10.1038/s42003-021-02514-2>`_
* Wu *et al.* (2021) "An Effective Preprocessing Method for High-Quality Pan-Genome Analysis of *Bacillus subtilis* and *Escherichia coli*" *Essential Genes and Genomes* `doi:10.1007/978-1-0716-1720-5_21 <https:doi.org/10.1007/978-1-0716-1720-5_21>`_
* Wu *et al.* (2021) "DNA Viral Diversity, Abundance, and Functional Potential Vary across Grassland Soils with a Range of Historical Moisture Regimes" *mBio* `doi:doi.org/10.1128/mBio.02595-21 <https://doi.org/10.1128/mBio.02595-21>`_
* Xiao *et al.* (2021) "Carbapenem-resistant *Acinetobacter Baumannii* Ventilator-Associated Pneumonia in Critically Ill Patients: Potential Inference with Respiratory Tract Microbiota Dysbiosis" *Res. Sq.* `doi:10.21203/rs.3.rs-736916/v1 <https://doi.org/10.21203/rs.3.rs-736916/v1>`_
* Young *et al.* (2021) "Defining the *Rhizobium leguminosarum* Species Complex" *genes* `doi:10.3390/genes12010111 <https://doi.org/10.3390/genes12010111>`_
* Zeng *et al.* (2021) "Novel phage vB_CtuP_B1 for controlling *Cronobacter malonaticus* and *Cronobacter turicensis* in ready-to-eat lettuce and powered infant formula" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110255 <https://doi.org/10.1016/j.foodres.2021.110255>`_
* Zhou *et al.* (2021) "Comparative genomic analysis of *Mycoplasma anatis* strains" *Genes and Genomics* `doi:0.1007/s13258-021-01129-5 <https://doi.org/0.1007/s13258-021-01129-5>`_
* Zhou *et al.* (2021) "Development of a high resolution melting method based on a novel molecular target for discrimination between *Bacillus cereus* and *Bacillus thuringiensis*" *Food Res. Int.* `doi:10.1016/j.foodres.2021.110845 <https://doi.org/10.1016/j.foodres.2021.110845>`_
* Zvi-Kedem *et al.* (2021) "The worm affair: Genetic diversity in two species of symbionts that co-occur in tubeworms from the Mediterranean Sea" *Env. Microbiol.* `doi:10.1111/1758-2229.12994 <https://doi.org/10.1111/1758-2229.12994>`_

^^^^
2020
^^^^

* Akob *et al.* (2020) "Mixotrophic Iron-Oxidizing *Thiomonas* Isolates from an Acid Mine Drainage-Affected Creek" *App. Env. Microbiol.* `doi:10.1128/AEM.01424-20 <https://doi.org/10.1128/AEM.01424-20>`_
* Albert *et al.* (2020) "Comparative Pangenomics of the Mammalian Gut Commensal *Bifidobacterium longum*" *Microorganisms* `doi:10.3390/microorganisms8010007 <https://doi.org/10.3390/microorganisms8010007>`_
* Bech *et al.* (2020) "Marine Sediments Hold an Untapped Potential for Novel Taxonomic and Bioactive Bacterial Diversity" *mSystems* `doi:/10.1128/mSystems.00782-20 <https://doi.org//10.1128/mSystems.00782-20>`_
* Biggel *et al.* (2020) "Horizontally acquired papGII-containing pathogenicity islands underlie the emergence of invasive uropathogenic *Escherichia coli* lineages" *Nat, Comm.* `doi:10.1038/s41467-020-19714-9 <https://doi.org/10.1038/s41467-020-19714-9>`_
* Bisanz *et al.* (2020) "A Genomic Toolkit for the Mechanistic Dissection of Intractable Human Gut Bacteria" *Cell Host & Microbe* `doi:10.1016/j.chom.2020.04.006 <https://doi.org/10.1016/j.chom.2020.04.006>`_
* Bridel *et al.* (2020) "Genetic diversity and population structure of *Tenacibaculum maritimum*, a serious bacterial pathogen of marine fish: from genome comparisons to high throughput MALDI-TOF typing" *Vet. Res.* `doi:10.1186/s13567-020-00782-0 <https://doi.org/10.1186/s13567-020-00782-0>`_
* Brock *et al.* (2020) "Endosymbiotic adaptations in three new bacterial species associated with *Dictyostelium discoideum*: *Paraburkholderia agricolaris* sp. nov., *Paraburkholderia hayleyella* sp. nov., and *Paraburkholderia bonniea* sp. nov" *PeerJ* `doi:10.7717/peerj.9151 <https://doi.org/10.7717/peerj.9151>`_
* Busch *et al.* (2020) "Using affinity propagation clustering for identifying bacterial clades and subclades with whole-genome sequences of *Francisella tularensis*" *PLoS Neg. Trop. Dis.* `doi:10.1371/journal.pntd.0008018 <https://doi.org/10.1371/journal.pntd.0008018>`_
* Cai *et al.* (2020) "Comparative genomics of *Klebsiella michiganensis* BD177 and related members of *Klebsiella* sp. reveal the symbiotic relationship with *Bactrocera dorsalis*" *BMC Genetics* `doi:10.1186/s12863-020-00945-0 <https://doi.org/10.1186/s12863-020-00945-0>`_
* Cassaniti *et al.* (2020) "Authors' response: COVID-19: how accurate are seroprevalence studies?" *Eurosurveillance* `doi:10.2807/1560-7917.ES.2020.25.30.2001437 <https://doi.org/10.2807/1560-7917.ES.2020.25.30.2001437>`_
* Chibani *et al.* (2020) "Genomic variation among closely related *Vibrio alginolyticus* strains is located on mobile genetic elements" *BMC Genomics* `doi:10.1186/s12864-020-6735-5 <https://doi.org/10.1186/s12864-020-6735-5>`_
* Christman *et al.* (2020) "Novel clostridial lineages recovered from metagenomes of a hot oil reservoir" *Sci. Rep.* `doi:10.1038/s41598-020-64904-6 <https://doi.org/10.1038/s41598-020-64904-6>`_
* Christman *et al.* (2020) "Methanogens Within a High Salinity Oil Reservoir From the Gulf of Mexico" *Front. Microbiol.* `doi:10.3389/fmicb.2020.570714 <https://doi.org/10.3389/fmicb.2020.570714>`_
* Cunningham-Oakes *et al.* (2020) "Genome Sequence of *Pluralibacter gergoviae* ECO77, a Multireplicon Isolate of Industrial Origin" *Microbiol. Res. Ann.* `doi:10.1128/MRA.01561-19 <https://doi.org/0.1128/MRA.01561-19>`_
* Dahihausen *et al.* (2020) "Isolation and sequence-based characterization of a koala symbiont: *Lonepinella koalarum*" *PeerJ* `doi:10.7717/peerj.10177 <https://doi.org/10.7717/peerj.10177>`_
* Dam *et al.* (2020) "Targeted Cell Sorting Combined With Single Cell Genomics Captures Low Abundant Microbial Dark Matter With Higher Sensitivity Than Metagenomics" *Front. Microbiol.* `doi:10.3389/fmicb.2020.01377 <https://doi.org/10.3389/fmicb.2020.01377>`_
* Damnjanovich *et al.* (2020) "Bacteriophage genotyping using BOXA repetitive-PCR" *BMC Microbiol.* `doi:10.1186/s12866-020-01770-2 <https://doi.org/10.1186/s12866-020-01770-2>`_
* Dangel *et al.* (2020) "*Corynebacterium silvaticum* sp. nov., a unique group of NTTB corynebacteria in wild boar and roe deer" *Int. J. Syst. Evol. Microb.* `doi:10.1099/ijsem.0.004195 <https://doi.org/10.1099/ijsem.0.004195>`_
* de Andrade Alves *et al.* "First isolation and whole-genome sequencing of a *Shewanella algae* strain from a swine farm in Brazil" *BMC Microbiol.* `doi:10.1186/s12866-020-02040-x <https://doi.org/10.1186/s12866-020-02040-x>`_
* Déraspe *et al.* (2020) "Genome Sequence of a *Klebsiella pneumoniae* NDM-1 Producer Isolated in Quebec City" *Microbiol. Resour. Announc.* `doi:10.1128/MRA.00829-19 <https://doi.org/10.1128/MRA.00829-19>`_
* Donner *et al.* (2020) "Septic shock caused by *Capnocytophaga canis* after a cat scratch" *Eur. J. Clin. Microbiol. Inf. Dis.* `doi:10.1007/s10096-020-03922-8 <https://doi.org/10.1007/s10096-020-03922-8>`_
* Duar *et al.* (2020) "Comparative Genome Analysis of *Bifidobacterium longum* subsp. *infantis* Strains Reveals Variation in Human Milk Oligosaccharide Utilization Genes among Commercial Probiotics" *Nutrients* `doi:10.3390/nu12113247 <https://doi.org/10.3390/nu12113247>`_
* Elcheninov *et al.* (2020) "*Thermogemmata fonticola* gen. nov., sp. nov., the first thermophilic planctomycete of the order *Gemmatales* from a Kamchatka hot spring" *Syst. App. Micro.* `doi:10.1016/j.syapm.2020.126157 <https://doi.org/10.1016/j.syapm.2020.126157>`_
* Feng *et al.* (2020) "Phylogenetic and genomic analysis reveals high genomic openness and genetic diversity of *Clostridium perfringens*" *Microb. Gen.* `doi:10.1099/mgen.0.000441 <https://doi.org/10.1099/mgen.0.000441>`_
* Ferrerira *et al.* "Genome-based reclassification of *Azospirillum brasilense* Sp245 as the type strain of *Azospirillum baldaniorum* sp. nov" *Int. J. Syst. Evol. Micro.* `doi:10.1099/ijsem.0.004517 <https://doi.org/10.1099/ijsem.0.004517>`_
* Fishbein *et al.* (2020) "Randomized Controlled Trial of Oral Vancomycin Treatment in *Clostridioides difficile*-Colonized Patients" *mSphere* `doi:10.1128/mSphere.01296-20 <https://doi.org/10.1128/mSphere.01296-20>`_
* France *et al.* (2020) "Complete Genome Sequences of Six *Lactobacillus iners* Strains Isolated from the Human Vagina" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00234-20 <https://doi.org/10.1128/MRA.00234-20>`_
* Francoeur *et al.* (2020) "Bacteria Contribute to Plant Secondary Compound Degradation in a Generalist Herbivore System" *mBio* `doi:doi.org/10.1128/mBio.02146-20 <https://doi.org/doi:doi.org/10.1128/mBio.02146-20>`_
* Freitas *et al.* (2020) "Yeast communities associated with cacti in Brazil and the description of *Kluyveromyces starmeri* sp. nov. based on phylogenomic analyses" *Yeast* `doi:10.1002/yea.3528 <https://doi.org/10.1002/yea.3528>`_
* Friedrich *et al.* (2020) "First Complete Genome Sequences of *Janthinobacterium lividum* EIF1 and EIF2 and their Comparative Genome Analysis" *Genome Biol. Evol.* `doi:10.1093/gbe/evaa148 <https://doi.org/10.1093/gbe/evaa148>`_
* Furrer *et al.* (2020) "Phage vB_BveM-Goe7 represents a new genus in the subfamily *Bastillevirinae*" *Arch. Virol.* `doi:10.1007/s00705-020-04546-1 <https://doi.org/10.1007/s00705-020-04546-1>`_
* Gabor *et al.* (2020) "A New Species of Genus *Pseudomonas*" United States Patent Application 20200216503 `20200216503 <http://www.freepatentsonline.com/y2020/0216503.html>`_
* Gai *et al.* (2020) "The Genome Sequence of the Citrus Melanose Pathogen *Diaporthe citri* and Two Citrus related *Diaporthe* species" *Phytopathology* `doi:10.1094/PHYTO-08-20-0376-SC <https://doi.org/10.1094/PHYTO-08-20-0376-SC>`_
* Gardon *et al.* (2020) "A drift‐barrier model drives the genomic landscape of a structured bacterial population" *Molecular Ecol.* `doi:10.1111/mec.15628 <https://doi.org/10.1111/mec.15628>`_
* Girard *et al.* (2020) "Reliable Identification of Environmental *Pseudomonas* Isolates Using the *rpoD* Gene" *Microorganisms* `doi:10.3390/microorganisms8081166 <https://doi.org/10.3390/microorganisms8081166>`_
* González-Dominici *et al.* (2020) "Genome Analysis and Genomic Comparison of the Novel Species *Arthrobacter ipsi* Reveal Its Potential Protective Role in Its Bark Beetle Host" *Microbial Ecol.* `doi:10.1007/s00248-020-01593-8 <https://doi.org/10.1007/s00248-020-01593-8>`_
* González-Gómez *et al.* (2020) "Phylogenomic Analysis Supports Two Possible Origins for Latin American Strains of *Vibrio parahaemolyticus* Associated with Acute Hepatopancreatic Necrosis Disease (AHPND)" *Curr. Microbiol.* `doi:10.1007/s00284-020-02214-w <https://doi.org/10.1007/s00284-020-02214-w>`_
* Gramaje *et al.* (2020) "Comparative Genomic Analysis of *Dactylonectria torresensis* Strains from Grapevine, Soil and Weed Highlights Potential Mechanisms in Pathogenicity and Endophytic Lifestyle" *J. Fungi* `doi:10.3390/jof6040255 <https://doi.org/10.3390/jof6040255>`_
* Graña-Miraglia *et al.* (2020) "Spirochetes isolated from arthropods constitute a novel genus *Entomospira* genus novum within the order Spirochaetales" *Sci. Rep.* `doi:10.1038/s41598-020-74033-9 <https://doi.org/10.1038/s41598-020-74033-9>`_
* Hempel *et al.* (2020) "Complete Genome Sequence of *Bacillus velezensis* Strain S4, Isolated from Biochar-Treated Soil" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00352-20 <https://doi.org/10.1128/MRA.00352-20>`_
* Hinger *et al.* (2020) "Phylogenomic Analyses of Members of the Widespread Marine Heterotrophic Genus *Pseudovibrio* Suggest Distinct Evolutionary Trajectories and a Novel Genus, *Polycladidibacter* gen. nov." *Appl. Env. Microbiol.* `doi:10.1128/AEM.02395-19 <https://doi.org/10.1128/AEM.02395-19>`_
* Hollensteiner *et al.* (2020) "Genome Sequence of *Komagataeibacter saccharivorans* Strain JH1, Isolated from Fruit Flies" *Microbiol. Res. Announc.* `doi:10.1128/MRA.00098-20 <https://doi.org/10.1128/MRA.00098-20>`_
* Hulin *et al.* (2020) "Cherry picking by pseudomonads: after a century of research on canker, genomics provides insights into the evolution of pathogenicity towards stone fruits" *Plant Pathology* `doi:10.1111/ppa.13189 <https://doi.org/10.1111/ppa.13189>`_
* Ibarra Caballero *et al.* (2020) "Genome comparison and transcriptome analysis of the invasive brown root rot pathogen, *Phellinus noxius*, from different geographic regions reveals potential enzymes associated with degradation of different wood substrates" *Fungal Biology* `doi:10.1016/j.funbio.2019.12.007 <https://doi.org/10.1016/j.funbio.2019.12.007>`_
* Inderbitzin *et al.* (2020) "Species identification in plant-associated prokaryotes and fungi using DNA" *Phytobiomes J.* `doi:10.1094/PBIOMES-12-19-0067-RVW <https://doi.org/10.1094/PBIOMES-12-19-0067-RVW">`_
* Jin *et al* (2020) "Complete genome sequence of fish‑pathogenic *Aeromonas hydrophila* HX‑3 and a comparative analysis: insights into virulence factors and quorum sensing" *Sci. Rep.* `doi:10.1038/s41598-020-72484-8 <https://doi.org/10.1038/s41598-020-72484-8>`_
* Joglekar *et al.* (2020) "Polyphasic analysis reveals correlation between phenotypic and genotypic analysis in soybean bradyrhizobia (*Bradyrhizobium* spp.)" *Syst. Appl. Microb.* `doi:10.1016/j.syapm.2020.126073 <https://doi.org/10.1016/j.syapm.2020.126073>`_
* Joutsen *et al.* (2020) "Two copies of the *ail* gene found in *Yersinia enterocolitica* and *Yersinia kristensenii*" *Vet. Micro.* `doi:10.1016/j.vetmic.2020.108798 <https://doi.org/10.1016/j.vetmic.2020.108798>`_
* Jung *et al.* (2020) "Genome Analysis of *Enterococcus mundtii* Pe103, a Human Gut-Originated Pectinolytic Bacterium" *Curr. Microbiol.* `doi:10.1007/s00284-020-01932-5 <https://doi.org/10.1007/s00284-020-01932-5>`_
* Kim *et al.* (2020) "Genome analysis of *Lactobacillus plantarum* subsp. *plantarum* KCCP11226 reveals a well-conserved C30 carotenoid biosynthetic pathway" *3 Biotech.* `doi:10.1007/s13205-020-2149-y <https://doi.org/10.1007/s13205-020-2149-y>`_
* Kim *et al.* (2020) "Comparative Genomics Determines Strain-Dependent Secondary Metabolite Production in *Streptomyces venezuelae* Strains" *Biomolecules* `doi:10.3390/biom10060864 <https://doi.org/10.3390/biom10060864>`_
* Kornienko *et al.* (2020) "Contribution of *Podoviridae* and *Myoviridae* bacteriophages to the effectiveness of anti-staphylococcal therapeutic cocktails" *Sci. Rep.* `doi:10.1038/s41598-020-75637-x <https://doi.org/10.1038/s41598-020-75637-x>`_
* Kroll *et al.* (2020) "Microbiota supplementation with *Bifidobacterium* and *Lactobacillus* modifies the preterm infant gut microbiota and metabolome: an observational study" *Cell Reports Medicine* `doi:10.1016/j.xcrm.2020.100077 <https://doi.org/10.1016/j.xcrm.2020.100077>`_
* Kuleshov *et al.* (2020) "Whole genome sequencing of *Borrelia miyamotoi* isolate Izh-4: reference for a complex bacterial genome" *BMC Genomics* `doi:10.1186/s12864-019-6388-4 <https://doi.org/10.1186/s12864-019-6388-4>`_
* Kumar *et al.* (2020) "Phylogenetic Relationship Among Brackishwater *Vibrio* Species" *Evol. Bioinf.* `doi:10.1177/1176934320903288 <https://doi.org/10.1177/1176934320903288>`_
* La China *et al.* (2020) "Genome sequencing and phylogenetic analysis of K1G4: a new *Komagataeibacter* strain producing bacterial cellulose from different carbon sources" *Biotech. Lett.* `doi:10.1007/s10529-020-02811-6 <https://doi.org/10.1007/s10529-020-02811-6>`_
* Lacault *et al.* (2020) "Zucchini vein clearing disease is caused by several lineages within *Pseudomonas syringae* species complex." *Phytopathology* `doi:10.1094/PHYTO-07-19-0266-R <https://doi.org/10.1094/PHYTO-07-19-0266-R>`_
* Leyer *et al.* (2020) "*Avrilella dinanensis* gen. nov., sp. nov., a novel bacterium of the family *Flavobacteriaceae* isolated from human blood" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2020.126124 <https://doi.org/10.1016/j.syapm.2020.126124>`_
* Li *et al.* (2020) "Metabolic diversification of anaerobic methanotrophic archaea in a deep-sea cold seep" *Marine Life Sci. Tech.* `doi:10.1007/s42995-020-00057-9 <https://doi.org/10.1007/s42995-020-00057-9>`_
* Li *et al.* (2020) "Comparative Genomics Reveals Broad Genetic Diversity, Extensive Recombination and Nascent Ecological Adaptation in *Micrococcus luteus*" *Research Square* `doi:10.21203/rs.3.rs-62334/v1 <https://doi.org/10.21203/rs.3.rs-62334/v1>`_
* Li *et al.* (2020) "Isolation and Characterization of *Bacillus cereus* Phage vB_BceP-DLc1 Reveals the Largest Member of the Phi29-Like Phages" *Microorganisms* `doi:10.3390/microorganisms8111750 <https://doi.org/:10.3390/microorganisms8111750>`_
* Liu *et al.* (2020) "Whole genome sequence and comparative genome analyses of multi-resistant *Staphylococcus warneri* GD01 isolated from a diseased pig in China" *PLoS One* `doi:10.1371/journal.pone.0233363 <https://doi.org/10.1371/journal.pone.0233363>`_
* Liu *et al.* (2020) "Pathogenicity of a *Vibrio owensii* strain isolated from *Fenneropenaeus chinensis* carrying pirAB genes and causing AHPND" *Aquaculture* `doi:10.1016/j.aquaculture.2020.735747 <https://doi.org/10.1016/j.aquaculture.2020.735747>`_
* Long *et al.* (2020) "Polyclonality, Shared Strains, and Convergent Evolution in Chronic CF *S. aureus* Airway Infection" *Am. J. Resp. Crit. Care Med.* `doi:10.1164/rccm.202003-0735O <https://doi.org/10.1164/rccm.202003-0735OC>`_
* Machado *et al.* (2020) "Molecular relationships of *Campomanesia xanthocarpa* within Myrtaceae based on the complete plastome sequence and on the plastid ycf2 gene" *Genet. Mol. Biol.* `doi:10.1590/1678-4685-gmb-2018-0377  <https://doi.org/10.1590/1678-4685-gmb-2018-0377>`_
* Méndez *et al.* (2020) "Comparative Genomics of Pathogenic *Clavibacter michiganensis* subsp. *michiganensis* Strains from Chile Reveals Potential Virulence Features for Tomato Plants" *Microorganisms* `doi:10.3390/microorganisms8111679 <https://doi.org/0.3390/microorganisms8111679>`_
* Min *et al.* (2020) "Complete Genomic Analysis of *Enterococcus faecium* Heat-Resistant Strain Developed by Two-Step Adaptation Laboratory Evolution Method" *Front. Bioeng. Biotechnol.* `doi:10.3389/fbioe.2020.00828 <https://doi.org/10.3389/fbioe.2020.00828>`_
* Mino *et al.* (2020) "*Hydrogenimonas urashimensis* sp. nov., a hydrogen-oxidizing chemolithoautotroph isolated from a deep-sea hydrothermal vent in the Southern Mariana Trough" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2020.126170 <https://doi.org/10.1016/j.syapm.2020.126170>`_
* Miyoshi *et al.* (2020) "Early-life microbial intervention reduces colitis risk promoted by antibiotic-induced gut dysbiosis" *bioRxiv* `doi:10.1101/2020.03.11.987412 <https://doi.org/10.1101/2020.03.11.987412>`_
* Modesto *et al.* (2020) "Bifidobacteria in two-toed sloths (*Choloepus didactylus*): phylogenetic characterization of the novel taxon *Bifidobacterium choloepi* sp. nov." *Int. J. Syst. Evol. Micro.* `doi:10.1099/ijsem.0.004506 <https://doi.org/10.1099/ijsem.0.004506>`_
* Moon *et al.* (2020) "First Report of an *Escherichia coli* Strain Carrying the Colistin Resistance Determinant *mcr-1* from a Dog in South Korea" *Antibiotics* `doi:10.3390/antibiotics9110768 <https://doi.org/10.3390/antibiotics9110768>`_
* Moore *et al.* (2020) "Draft Genome Sequence of *Lactobacillus rhamnosus* NCB 441, Isolated from Egyptian White Domiati Cheese" *Micro. Res. Ann.* `doi:10.1128/MRA.01191-20 <https://doi.org/10.1128/MRA.01191-20>`_
* Mu *et al.* (2020) "*Bradymonabacteria*, a novel bacterial predator with versatile survival strategies in saline environments" *Microbiome* `doi:10.21203/rs.2.20535/v1 <https://doi.org/10.21203/rs.2.20535/v1>`_
* Mu *et al.* (2020) "*Tichowtungia aerotolerans* gen. nov., sp. nov., a novel representative of the phylum *Kiritimatiellaeota* and proposal of *Tichowtungiaceae* fam. nov., *Tichowtungiales* ord. nov. and *Tichowtungiia* class. nov." *Int. J. Syst. Evol. Micro.* `doi:10.1099/ijsem.0.004370 <https://doi.org/10.1099/ijsem.0.004370>`_
* Müller *et al.* (2020) "*Aliarcobacter butzleri* from Water Poultry: Insights into Antimicrobial Resistance, Virulence and Heavy Metal Resistance" *Genes* `doi:10.3390/genes11091104 <https://doi.org/10.3390/genes11091104>`_
* Mullins *et al.* (2020) "Genomic Assemblies of Members of *Burkholderia* and Related Genera as a Resource for Natural Product Discovery" *Micro. Res. Ann.* `doi:10.1128/MRA.00485-20 <https://doi.org/10.1128/MRA.00485-20>`_
* Mullins *et al.* (2020) "Reclassification of the biocontrol agents *Bacillus subtilis* BY-2 and Tu-100 as *Bacillus velezensis* and insights into the genomic and specialized metabolite diversity of the species" *Microbiol.* `doi:10.1099/mic.0.000986 <https://doi.org/10.1099/mic.0.000986>`_
* Nilsson *et al.* (2020) "Diversity and Host Interactions Among Virulent and Temperate Baltic Sea *Flavobacterium* Phages" *Viruses* `doi:10.3390/v12020158 <https://doi.org/10.3390/v12020158>`_
* Norris *et al.* (2020) "*Acidithiobacillus ferrianus* sp. nov.: an ancestral extremely acidophilic and facultatively anaerobic chemolithoautotroph" *Extremophiles* `doi:0.1007/s00792-020-01157-1 <https://doi.org/0.1007/s00792-020-01157-1>`_
* Oshkin *et al.* (2020) "Pan-Genome-Based Analysis as a Framework for Demarcating Two Closely Related Methanotroph Genera Methylocystis and Methylosinus" *Microorganisms* `doi:10.3390/microorganisms8050768 <https://doi.org/10.3390/microorganisms8050768>`_
* Pandey *et al.* (2020) "Evidence of homologous recombination as a driver of diversity in *Brachyspira pilosicoli*" *Micro. Genom.* `doi:10.1099/mgen.0.000470 <https://doi.org/10.1099/mgen.0.000470>`_
* Paulsen *et al.* (2020) "Production of the antimicrobial compound tetrabromopyrrol and the *Pseudomonas* quinolone system precursor, 2‑heptyl‑4‑quinolone, by a novel marine species *Pseudoalteromonas galatheae* sp. nov." *Sci. Rep.* `doi:10.1038/s41598-020-78439-3 <https://doi.org/10.1038/s41598-020-78439-3>`_
* Pang *et al.* (2020) "The Genomic Context for the Evolution and Transmission of Community-Associated *Staphylococcus aureus* ST59 Through the Food Chain" *Front. Microbiol.* `doi:10.3389/fmicb.2020.00422 <https://doi.org/10.3389/fmicb.2020.00422>`_
* Panwar *et al.* (2020) "Influence of the polar light cycle on seasonal dynamics of an Antarctic lake microbial community" *Microbiome* `doi:10.1186/s40168-020-00889-8 <https://doi.org/10.1186/s40168-020-00889-8>`_
* Parlikar *et al.* (2020) "Understanding genomic diversity, pan-genome, and evolution of SARS-CoV-2" *PeerJ* `doi:10.7717/peerj.9576 <https://doi.org/10.7717/peerj.9576>`_
* Pasanen *et al.* (2020) "*Pectobacterium parvum* sp. nov., having a Salmonella SPI-1-like Type III secretion system and low virulence" *Int. J. Syst. Evol. Microb.* `doi:10.1099/ijsem.0.004057 <https://doi.org/10.1099/ijsem.0.004057>`_
* Peral-Aranega *et al.* (2020) "Bacteria Belonging to *Pseudomonas typographi* sp. nov. from the Bark Beetle *Ips typographus* Have Genomic Potential to Aid in the Host Ecology" *Insect* `doi::10.3390/insects11090593 <https://doi.org/:10.3390/insects11090593>`_
* Pierry *et al.* (2020) "High-quality draft genome sequence resources of eight *Xylella fastidiosa* strains isolated from citrus, coffee, plum and hibiscus in South America" *Phytopathology* `doi:10.1094/PHYTO-05-20-0162-A <https://doi.org/10.1094/PHYTO-05-20-0162-A>`_
* Pierry *et al.* (2020) "Genetic Diversity of *Xylella fastidiosa* Plasmids Assessed by Comparative Genomics" *Trop. Plant Path.* `doi:doi.org/10.1007/s40858-020-00359-4 <https://doi.org/doi.org/10.1007/s40858-020-00359-4>`_
* Portier *et al.* (2020) "Updated taxonomy of *Pectobacterium* genus in the CIRM-CFBP bacterial collection: when newly described species reveal “old” endemic population" *Preprints* `doi:10.20944/preprints202008.0608.v1 <https://doi.org/10.20944/preprints202008.0608.v1>`_
* Rackaityte (2020) "Viable bacterial colonization is highly limited in the human intestine in utero" *Nature Medicine* `doi:10.1038/s41591-020-0761-3 <https://doi.org/10.1038/s41591-020-0761-3>`_
* Roach *et al.* (2020) "Whole genome sequencing of Peruvian *Klebsiella pneumoniae* identifies novel plasmid vectors bearing carbapenem resistance gene NDM-1" *Open Forum Inf. Dis.* `doi:10.1093/ofid/ofaa266/5866602 <https://doi.org/10.1093/ofid/ofaa266/5866602>`_
* Rothen *et al.* (2020) "A simple, rapid typing method for *Streptococcus agalactiae* based on ribosomal subunit proteins by MALDI-TOF MS" *Sci. Reports* `doi:10.1038/s41598-020-65707-5 <https://doi.org/10.1038/s41598-020-65707-5>`_
* Ryngajłło *et al.* (2020) "Towards control of cellulose biosynthesis by *Komagataeibacter* using systems-level and strain engineering strategies: current progress and perspectives" *Appl. Microbil. Biotech.* `doi:10.1007/s00253-020-10671-3 <https://doi.org/10.1007/s00253-020-10671-3>`_
* Salgar-Chaparro *et al.* (2020) "Complete Genome Sequence of *Pseudomonas balearica* Strain EC28, an Iron-Oxidizing Bacterium Isolated from Corroded Steel" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00275-20 <https://doi.org/10.1128/MRA.00275-20>`_
* Salgar-Chaparro *et al.* (2020) " Draft Genome Sequence of *Enterobacter roggenkampii* Strain OS53, Isolated from Corroded Pipework at an Offshore Oil Production Facility" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00583-20 <https://doi.org/10.1128/MRA.00583-20>`_
* Salgar-Chaparro *et al.* (2020) "Complete Genome Sequence of *Shewanella chilikensis* Strain DC57, Isolated from Corroded Seal Rings at a Floating Oil Production System in Australia" *Microbiol. Res. Announc.* `doi:0.1128/MRA.00584-20 <https://doi.org/0.1128/MRA.00584-20>`_
* Shen *et al.* (2020) "*Helicobacter monodelphidis* sp. nov. and *Helicobacter didelphidarum* sp. nov., isolated from grey short-tailed opossums (*Monodelphis domestica*) with endemic cloacal prolapses" *Int. J. Syst. Evol. Micro.* `doi:10.1099/ijsem.0.004424 <https://doi.org/10.1099/ijsem.0.004424>`_
* Strang (2020) "Genomic Insights and Ecological Adaptations of Deep-Subsurface and Near Subsurface *Thermococcus* Isolates and Near Subsurface *Thermococcus* Isolates" *WWU Graduate School Collection* `https://cedar.wwu.edu/wwuet/926 <https://cedar.wwu.edu/wwuet/926>`_
* Taparia *et al.* (2020) "Molecular characterization of *Pseudomonas* from *Agaricus bisporus* caps reveal novel blotch pathogens in Western Europe" *BMC Genomics* `doi:10.1186/s12864-020-06905-3 <https://doi.org/10.1186/s12864-020-06905-3>`_
* Tardy *et al.* (2020) "*Mycoplasma bovis* in Nordic European Countries: Emergence and Dominance of a New Clone" *Pathogens* `doi:10.3390/pathogens9110875 <https://doi.org/10.3390/pathogens9110875>`_
* Thapa *et al.* (2020) "Genome‐wide analyses of Liberibacter species provides insights into evolution, phylogenetic relationships, and virulence factors" *Mol. Plant Path.* `doi:10.1111/mpp.12925  <https://doi.org/10.1111/mpp.12925>`_
* Tian *et al.* (2020) "LINbase: a web server for genome-based identification of prokaryotes as members of crowdsourced taxa" *Nuc. Acids Res.* `doi:10.1093/nar/gkaa190 <https://doi.org/10.1093/nar/gkaa190>`_
* Tsukimi *et al.* (2020) "Draft Genome Sequences of *Bifidobacterium animalis* Consecutively Isolated from Healthy Japanese Individuals" *J. Genomics* `doi:10.7150/jgen.38516 <https://doi.org/10.7150/jgen.38516>`_
* Vijayan *et al.* (2020) "Bacteria known to induce settlement of larvae of *Hydroides elegans* are rare in natural inductive biofilm" *Aquatic Microb. Ecol.* `doi:10.3354/ame01925 <https://doi.org/10.3354/ame01925>`_
* Waleron *et al.* (2020) "*Arthrospiribacter ruber* gen. nov., sp. nov., a novel bacterium isolated from *Arthrospira* cultures" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2020.126072 <https://doi.org/10.1016/j.syapm.2020.126072>`_
* Wang *et al.* (2020) "Comparative Genomics Analysis of *Lactobacillus ruminis* from Different Niches" *Genes* `doi:10.3390/genes11010070 <https://doi.org/10.3390/genes11010070>`_
* Wang *et al.* (2020) "Complete genomic data of Burkholderia glumae strain GX associated with bacterial panicle blight of rice in China" *Plant Dis.* `doi:10.1094/PDIS-10-19-2265-A <https://doi.org/10.1094/PDIS-10-19-2265-A>`_
* Weiser *et al.* (2020) "A Novel Inducible Prophage from *Burkholderia Vietnamiensis* G4 is Widely Distributed across the Species and Has Lytic Activity against Pathogenic Burkholderia" *Viruses* `doi:10.3390/v12060601 <https://doi.org/10.3390/v12060601>`_
* Webster *et al.* (2020) "Culturable diversity of bacterial endophytes associated with medicinal plants of the Western Ghats, India" *FEMS Microbiol. Ecol.* `doi:10.1093/femsec/fiaa147/5876344 <https://doi.org/10.1093/femsec/fiaa147/5876344>`_
* Wist *et al.* (2020) "Phenotypic and Genotypic Traits of Vancomycin-Resistant *Enterococci* from Healthy Food- Producing Animals"  *Microorganisms* `doi:10.3390/microorganisms8020261 <https://doi.org/10.3390/microorganisms8020261>`_
* Wu *et al.* (2020) "Toward a high-quality pan-genome landscape of *Bacillus subtilis* by removal of confounding strains" *Brief. Bioinf.* `doi:10.1093/bib/bbaa013 <https://doi.org/10.1093/bib/bbaa013>`_
* Yang *et al.* (2020) "Isolation and Characterization of the Novel Phages vB_VpS_BA3 and vB_VpS_CA8 for Lysing *Vibrio parahaemolyticus*" *Front. Microbiol.* `doi:10.3389/fmicb.2020.00259 <https://doi.org/10.3389/fmicb.2020.00259>`_
* Zayulina *et al.* "Complete Genome Sequence of a Hyperthermophilic Archaeon, *Thermosphaera* sp. Strain 3507, Isolated from a Chilean Hot Spring" *Micro. Res. Ann.* `doi:10.1128/MRA.01262-20 <https://doi.org/10.1128/MRA.01262-20>`_
* Zhang *et al.* (2020) "A novel bacterial thiosulfate oxidation pathway provides a new clue about the formation of zero-valent sulfur in deep sea." *ISME J.* `doi:10.1038/s41396-020-0684-5 <https://doi.org/10.1038/s41396-020-0684-5>`_
* Zhang *et al.* (2020) "*Deinococcus detaillensis* sp. nov., isolated from humus soil in Antarctica" *Arch. Microbiol.* `doi:10.1007/s00203-020-01920-0 <https://doi.org/10.1007/s00203-020-01920-0>`_
* Zhang *et al.* (2020) "Chloramphenicol biodegradation by enriched bacterial consortia and isolated strain *Sphingomonas* sp. CL5.1: The reconstruction of a novel biodegradation pathway" *Water Res.* `doi:10.1016/j.watres.2020.116397 <https://doi.org/10.1016/j.watres.2020.116397>`_
* Zheng *et al.* (2020) "Metagenomic Insight into Environmentally Challenged Methane-Fed Microbial Communities" *Microorganisms* `doi:10.3390/microorganisms8101614 <https://doi.org/10.3390/microorganisms8101614>`_
* Zhou *et al.* (2020) "Comparative analysis of *Lactobacillus gasseri* from Chinese subjects reveals a new species-level taxa" *BMC Genomics* `doi:10.1186/s12864-020-6527-y <https://doi.org/10.1186/s12864-020-6527-y>`_

^^^^
2019
^^^^

* Accetto & Avgustin (2019) "The diverse and extensive plant polysaccharide degradative apparatuses of the rumen and hindgut *Prevotella* species: A factor in their ubiquity?" *Syst. Appl. Microbiol.* `doi:j.syapm.2018.10.001 <https://doi.org/j.syapm.2018.10.001>`_
* Acevedo *et al.* (2019) "*Bacillus clarus* sp. nov. is a new *Bacillus cereus* group species isolated from soil" *BioRxiv* `doi:10.1101/508077 <https://doi.org/10.1101/508077>`_
* Alberoni *et al.* (2019) "*Bifidobacterium xylocopae* sp. nov. and *Bifidobacterium aemilianum *sp. nov., from the carpenter bee (*Xylocopa violacea*) digestive tract" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2018.11.005 <https://doi.org/10.1016/j.syapm.2018.11.005>`_
* Alex & Antunes (2019) "Whole-Genome Comparisons Among the Genus *Shewanella* Reveal the Enrichment of Genes Encoding Ankyrin-Repeats Containing Proteins in Sponge-Associated Bacteria" *Front. Microbiol.* `doi:10.3389/fmicb.2019.00005 <https://doi.org/10.3389/fmicb.2019.00005>`_
* Alex & Antunes (2019) "Comparative Genomics Reveals Metabolic Specificity of *Endozoicomonas* Isolated from a Marine Sponge and the Genomic Repertoire for Host-Bacteria Symbioses" *Microorganisms* `doi:10.3390/microorganisms7120635 <https://doi.org/10.3390/microorganisms7120635>`_
* Barnier *et al.* (2019) "Description of *Palleronia rufa* sp. nov., a biofilm-forming and AHL-producing *Rhodobacteraceae*, reclassification of *Hwanghaeicola aestuarii* as *Palleronia aestuarii* comb. nov., *Maribius pontilimi* as *Palleronia pontilimi* comb. nov., *Maribius salinus* as *Palleronia salina* comb. nov., *Maribius pelagius* as *Palleronia pelagia* comb. nov. and emended description of the genus *Palleronia*" *Syst. Appl. Microbiol.* `doi:10.1016/j.syapm.2019.126018 <https://doi.org/10.1016/j.syapm.2019.126018>`_
* Bayjanov *et al.* (2019) "Whole genome analysis of *Pandoraea* species strains from cystic fibrosis patients" *Future Microbiology* `doi:10.2217/fmb-2019-0038 <https://doi.org/10.2217/fmb-2019-0038>`_
* Botelho *et al.* (2019) "Combining sequencing approaches to fully resolve a carbapenemase-encoding megaplasmid in a Pseudomonas shirazica clinical strain" *Emerg. Microb. Inf.* `doi:10.1080/22221751.2019.1648182 <https://doi.org/10.1080/22221751.2019.1648182>`_
* Boukerb *et al.* (2019) "*Campylobacter armoricus* *sp. nov.*, a novel member of the *Campylobacter lari* group isolated from surface water and stools from humans with enteric infection" *Int. J. Syst. Evol. Micro.* `doi:10.1099/ijsem.0.003836 <https://doi.org/10.1099/ijsem.0.003836>`_
* Briand *et al.* (2019) "A rapid and simple method for assessing and representing genome sequence relatedness" *BioRxiv* `doi:10.1101/569640 <https://doi.org/10.1101/569640>`_
* Cho & Kwak (2019) "Evolution of Antibiotic Synthesis Gene Clusters in the *Streptomyces globisporus* TFH56, Isolated from Tomato Flower" *G3: Genes, Genomes, Genetics* `doi:10.1534/g3.119.400037  <https://dx.doi.org/10.1534/g3.119.400037>`_
* Ciok & Dziewit (2019) "Exploring the genome of Arctic *Psychrobacter* sp. DAB_AL32B and construction of novel *Psychrobacter*-specific cloning vectors of an increased carrying capacity" *Arch. Microbiol.* `doi:10.1007/s00203-018-1595-y <https://doi.org/10.1007/s00203-018-1595-y>`_
* D'Souza *et al.* (2019) "Spatiotemporal dynamics of multidrug resistant bacteria on intensive care unit surfaces" *Nat. Comm.* `doi:10.1038/s41467-019-12563-1 <https://doi.org/10.1038/s41467-019-12563-1>`_
* do Vale *et al.* (2019) "Draft Genome Sequences of Three Novel *Acinetobacter* Isolates from an Irish Commercial Pig Farm" *Microbiol. Res. Ann.* `doi:10.1128/MRA.00919-19 <https://dx.doi.org/10.1128/MRA.00919-19>`_
* Doud *et al.* (2019) "Function-driven single-cell genomics uncovers cellulose-degrading bacteria from the rare biosphere" *ISME J.* `doi:10.1038/s41396-019-0557-y <https://doi.org/10.1038/s41396-019-0557-y>`_
* Du *et al.* (2019) "Characterization of a Linezolid- and Vancomycin-Resistant *Streptococcus suis* Isolate That Harbors optrA and vanG Operons" *Front. Microbiol.* `doi:10.3389/fmicb.2019.02026 <https://doi.org/10.3389/fmicb.2019.02026>`_
* Esposito *et al.* (2019) "Insights into the genome structure of four acetogenic bacteria with specific reference to the Wood–Ljungdahl pathway" *Microbiol. Open* `doi:10.1002/mbo3.938 <https://doi.org/10.1002/mbo3.938>`_
* Falagan *et al.* (2019) "Acidithiobacillus sulfuriphilus sp. nov.: an extremely acidophilic su
Download .txt
gitextract_pupze2fw/

├── .all-contributorsrc
├── .codecov.yml
├── .flake8
├── .github/
│   ├── ISSUE_TEMPLATE.txt
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── requirements-rtd.txt
│   └── workflows/
│       ├── build-linux.yml
│       └── build-macos.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CHANGES.md
├── CITATIONS
├── CODEOWNERS
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── README_v_0_2_x.md
├── _config.yml
├── bandit.yml
├── docs/
│   ├── Makefile
│   ├── about.rst
│   ├── basic_use.rst
│   ├── citations.rst
│   ├── conf.py
│   ├── contributing.rst
│   ├── createdb.rst
│   ├── download.rst
│   ├── examples.rst
│   ├── index.rst
│   ├── indexing.rst
│   ├── installation.rst
│   ├── interpreting_plots.rst
│   ├── licensing.rst
│   ├── quickstart.rst
│   ├── requirements.rst
│   ├── run_anib.rst
│   ├── run_anim.rst
│   ├── run_fastani.rst
│   ├── scheduler.rst
│   ├── subcmd_anib.rst
│   ├── subcmd_anim.rst
│   ├── subcmd_classify.rst
│   ├── subcmd_createdb.rst
│   ├── subcmd_download.rst
│   ├── subcmd_fastani.rst
│   ├── subcmd_index.rst
│   ├── subcmd_listdeps.rst
│   ├── subcmd_plot.rst
│   ├── subcmd_report.rst
│   ├── subcommands.rst
│   ├── testing.rst
│   └── using_a_scheduler.rst
├── pyani/
│   ├── __init__.py
│   ├── anib.py
│   ├── aniblastall.py
│   ├── anim.py
│   ├── blast.py
│   ├── dependencies.py
│   ├── download.py
│   ├── fastani.py
│   ├── logger.py
│   ├── nucmer.py
│   ├── pyani_classify.py
│   ├── pyani_config.py
│   ├── pyani_files.py
│   ├── pyani_graphics/
│   │   ├── __init__.py
│   │   ├── mpl/
│   │   │   └── __init__.py
│   │   └── sns/
│   │       └── __init__.py
│   ├── pyani_jobs.py
│   ├── pyani_orm.py
│   ├── pyani_report.py
│   ├── pyani_tools.py
│   ├── run_multiprocessing.py
│   ├── run_sge.py
│   ├── scripts/
│   │   ├── __init__.py
│   │   ├── average_nucleotide_identity.py
│   │   ├── delta_filter_wrapper.py
│   │   ├── genbank_get_genomes_by_taxon.py
│   │   ├── parsers/
│   │   │   ├── __init__.py
│   │   │   ├── anib_parser.py
│   │   │   ├── aniblastall_parser.py
│   │   │   ├── anim_parser.py
│   │   │   ├── classify_parser.py
│   │   │   ├── common_parser.py
│   │   │   ├── createdb_parser.py
│   │   │   ├── download_parser.py
│   │   │   ├── fastani_parser.py
│   │   │   ├── index_parser.py
│   │   │   ├── listdeps_parser.py
│   │   │   ├── plot_parser.py
│   │   │   ├── report_parser.py
│   │   │   ├── run_common_parser.py
│   │   │   └── scheduling_parser.py
│   │   ├── pyani_script.py
│   │   └── subcommands/
│   │       ├── __init__.py
│   │       ├── subcmd_anib.py
│   │       ├── subcmd_aniblastall.py
│   │       ├── subcmd_anim.py
│   │       ├── subcmd_classify.py
│   │       ├── subcmd_createdb.py
│   │       ├── subcmd_download.py
│   │       ├── subcmd_fastani.py
│   │       ├── subcmd_index.py
│   │       ├── subcmd_listdeps.py
│   │       ├── subcmd_plot.py
│   │       └── subcmd_report.py
│   └── tetra.py
├── pytest.ini
├── requirements-dev.txt
├── requirements-fastani-linux.txt
├── requirements-fastani-macos.txt
├── requirements-pip.txt
├── requirements-pyqt-conda.txt
├── requirements-pyqt-pip.txt
├── requirements-thirdparty-linux.txt
├── requirements-thirdparty-macos.txt
├── requirements.txt
├── setup.py
└── tests/
    ├── README.md
    ├── conftest.py
    ├── fixtures/
    │   ├── anib/
    │   │   ├── NC_002696-fragments.fna
    │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   ├── blastall/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── blastn/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── dataframes/
    │   │   │   ├── blastall_result.csv
    │   │   │   └── blastn_result.csv
    │   │   ├── fragfiles/
    │   │   │   ├── NC_002696-fragments.fna
    │   │   │   ├── NC_010338-fragments.fna
    │   │   │   ├── NC_011916-fragments.fna
    │   │   │   └── NC_014100-fragments.fna
    │   │   └── sequences/
    │   │       ├── NC_002696.fna
    │   │       ├── NC_010338.fna
    │   │       ├── NC_011916.fna
    │   │       └── NC_014100.fna
    │   ├── anim/
    │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   ├── dataframes/
    │   │   │   └── deltadir_result.csv
    │   │   ├── deltadir/
    │   │   │   ├── NC_002696/
    │   │   │   │   ├── NC_002696_vs_NC_010338.delta
    │   │   │   │   ├── NC_002696_vs_NC_010338.filter
    │   │   │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   │   │   ├── NC_002696_vs_NC_011916.filter
    │   │   │   │   ├── NC_002696_vs_NC_014100.delta
    │   │   │   │   └── NC_002696_vs_NC_014100.filter
    │   │   │   ├── NC_010338/
    │   │   │   │   ├── NC_010338_vs_NC_002696.delta
    │   │   │   │   ├── NC_010338_vs_NC_002696.filter
    │   │   │   │   ├── NC_010338_vs_NC_011916.delta
    │   │   │   │   ├── NC_010338_vs_NC_011916.filter
    │   │   │   │   ├── NC_010338_vs_NC_014100.delta
    │   │   │   │   └── NC_010338_vs_NC_014100.filter
    │   │   │   ├── NC_011916/
    │   │   │   │   ├── NC_011916_vs_NC_002696.delta
    │   │   │   │   ├── NC_011916_vs_NC_002696.filter
    │   │   │   │   ├── NC_011916_vs_NC_010338.delta
    │   │   │   │   ├── NC_011916_vs_NC_010338.filter
    │   │   │   │   ├── NC_011916_vs_NC_014100.delta
    │   │   │   │   ├── NC_011916_vs_NC_014100.filter
    │   │   │   │   ├── out.1coords
    │   │   │   │   ├── out.1delta
    │   │   │   │   ├── out.mcoords
    │   │   │   │   ├── out.mdelta
    │   │   │   │   ├── out.qdiff
    │   │   │   │   ├── out.rdiff
    │   │   │   │   ├── out.report
    │   │   │   │   ├── out.snps
    │   │   │   │   └── test.filter1
    │   │   │   └── NC_014100/
    │   │   │       ├── NC_014100_vs_NC_002696.delta
    │   │   │       ├── NC_014100_vs_NC_002696.filter
    │   │   │       ├── NC_014100_vs_NC_010338.delta
    │   │   │       ├── NC_014100_vs_NC_010338.filter
    │   │   │       ├── NC_014100_vs_NC_011916.delta
    │   │   │       └── NC_014100_vs_NC_011916.filter
    │   │   ├── sequences/
    │   │   │   ├── NC_002696.fna
    │   │   │   ├── NC_002696.fna.md5
    │   │   │   ├── NC_010338.fna
    │   │   │   ├── NC_010338.fna.md5
    │   │   │   ├── NC_011916.fna
    │   │   │   ├── NC_011916.fna.md5
    │   │   │   ├── NC_014100.fna
    │   │   │   ├── NC_014100.fna.md5
    │   │   │   ├── classes.txt
    │   │   │   └── labels.txt
    │   │   └── test.delta
    │   ├── concordance/
    │   │   ├── GCF_000011325.1_ASM1132v1_genomic.fna
    │   │   ├── GCF_000227605.2_ASM22760v2_genomic.fna
    │   │   ├── GCF_002243555.1_ASM224355v1_genomic.fna
    │   │   └── jspecies_output.tab
    │   ├── fastani/
    │   │   └── ecoli_vs_shiga.fastani
    │   ├── graphics/
    │   │   ├── ANIm_percentage_identity.tab
    │   │   ├── classes.tab
    │   │   └── labels.tab
    │   ├── legacy/
    │   │   └── ANI_input/
    │   │       ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │       ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │       ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │       ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │       ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │       ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │       ├── GCF_009827135.1_ASM982713v1_genomic.fna
    │   │       ├── classes.txt
    │   │       └── labels.txt
    │   ├── sequences/
    │   │   ├── NC_002696.fna
    │   │   ├── NC_010338.fna
    │   │   ├── NC_011916.fna
    │   │   └── NC_014100.fna
    │   ├── single_genome_download/
    │   │   ├── GCF_000011605.1_ASM1160v1_genomic.fna
    │   │   ├── GCF_000011605.1_ASM1160v1_genomic.md5
    │   │   ├── GCF_000011605.1_ASM1160v1_hashes.txt
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   └── targets/
    │       ├── fragments/
    │       │   ├── NC_002696-fragments.fna
    │       │   ├── NC_010338-fragments.fna
    │       │   ├── NC_011916-fragments.fna
    │       │   └── NC_014100-fragments.fna
    │       └── tetra/
    │           ├── correlation.tab
    │           └── zscore.json
    ├── target_ANIb_output/
    │   ├── ANIb_alignment_coverage.tab
    │   ├── ANIb_alignment_lengths.tab
    │   ├── ANIb_hadamard.tab
    │   ├── ANIb_percentage_identity.tab
    │   └── ANIb_similarity_errors.tab
    ├── target_ANIblastall_output/
    │   ├── ANIblastall_alignment_coverage.tab
    │   ├── ANIblastall_alignment_lengths.tab
    │   ├── ANIblastall_hadamard.tab
    │   ├── ANIblastall_percentage_identity.tab
    │   └── ANIblastall_similarity_errors.tab
    ├── target_ANIm_output/
    │   ├── ANIm_alignment_coverage.tab
    │   ├── ANIm_alignment_lengths.tab
    │   ├── ANIm_hadamard.tab
    │   ├── ANIm_percentage_identity.tab
    │   └── ANIm_similarity_errors.tab
    ├── target_TETRA_output/
    │   └── TETRA_correlations.tab
    ├── test_JSpecies/
    │   ├── Group_1/
    │   │   ├── TS32_31.fna
    │   │   ├── TS32_31.fna.tetra
    │   │   ├── TS32_31.fna_1020
    │   │   ├── TS43_20.fna
    │   │   ├── TS43_20.fna.tetra
    │   │   └── TS43_20.fna_1020
    │   ├── Group_2/
    │   │   ├── TS32_31.fna
    │   │   ├── TS32_31.fna_vs_TS43_20.fna.delta
    │   │   ├── TS43_20.fna
    │   │   └── TS43_20.fna_vs_TS32_31.fna.delta
    │   ├── NC_002696_1020_vs_NC_010338_JSpecies.tab
    │   ├── README.md
    │   ├── jspecies_results.tab
    │   ├── jspecies_results_3.tab
    │   └── pyani_tests/
    │       ├── NC_002696.fna
    │       ├── NC_002696.fna.nhr
    │       ├── NC_002696.fna.nin
    │       ├── NC_002696.fna.nnd
    │       ├── NC_002696.fna.nni
    │       ├── NC_002696.fna.nsd
    │       ├── NC_002696.fna.nsi
    │       ├── NC_002696.fna.nsq
    │       ├── NC_002696.fna.tetra
    │       ├── NC_002696.fna_1020
    │       ├── NC_002696.fna_vs_NC_010338.fna.delta
    │       ├── NC_002696.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_002696.fna_vs_NC_011916.fna.delta
    │       ├── NC_002696.fna_vs_NC_011916.fna_1020.blast
    │       ├── NC_002696.fna_vs_NC_014100.fna.delta
    │       ├── NC_002696.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_010338.fna
    │       ├── NC_010338.fna.nhr
    │       ├── NC_010338.fna.nin
    │       ├── NC_010338.fna.nnd
    │       ├── NC_010338.fna.nni
    │       ├── NC_010338.fna.nsd
    │       ├── NC_010338.fna.nsi
    │       ├── NC_010338.fna.nsq
    │       ├── NC_010338.fna.tetra
    │       ├── NC_010338.fna_1020
    │       ├── NC_010338.fna_vs_NC_002696.fna.delta
    │       ├── NC_010338.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_010338.fna_vs_NC_011916.fna.delta
    │       ├── NC_010338.fna_vs_NC_011916.fna_1020.blast
    │       ├── NC_010338.fna_vs_NC_014100.fna.delta
    │       ├── NC_010338.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_011916.fna
    │       ├── NC_011916.fna.nhr
    │       ├── NC_011916.fna.nin
    │       ├── NC_011916.fna.nnd
    │       ├── NC_011916.fna.nni
    │       ├── NC_011916.fna.nsd
    │       ├── NC_011916.fna.nsi
    │       ├── NC_011916.fna.nsq
    │       ├── NC_011916.fna.tetra
    │       ├── NC_011916.fna_1020
    │       ├── NC_011916.fna_vs_NC_002696.fna.delta
    │       ├── NC_011916.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_011916.fna_vs_NC_010338.fna.delta
    │       ├── NC_011916.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_011916.fna_vs_NC_014100.fna.delta
    │       ├── NC_011916.fna_vs_NC_014100.fna_1020.blast
    │       ├── NC_014100.fna
    │       ├── NC_014100.fna.nhr
    │       ├── NC_014100.fna.nin
    │       ├── NC_014100.fna.nnd
    │       ├── NC_014100.fna.nni
    │       ├── NC_014100.fna.nsd
    │       ├── NC_014100.fna.nsi
    │       ├── NC_014100.fna.nsq
    │       ├── NC_014100.fna.tetra
    │       ├── NC_014100.fna_1020
    │       ├── NC_014100.fna_vs_NC_002696.fna.delta
    │       ├── NC_014100.fna_vs_NC_002696.fna_1020.blast
    │       ├── NC_014100.fna_vs_NC_010338.fna.delta
    │       ├── NC_014100.fna_vs_NC_010338.fna_1020.blast
    │       ├── NC_014100.fna_vs_NC_011916.fna.delta
    │       └── NC_014100.fna_vs_NC_011916.fna_1020.blast
    ├── test_ani_data/
    │   ├── NC_002696/
    │   │   └── NC_002696_vs_NC_011916.delta
    │   ├── NC_002696.fna
    │   ├── NC_010338.fna
    │   ├── NC_011916.fna
    │   ├── class_labels.tab
    │   ├── classes.tab
    │   └── labels.tab
    ├── test_anib.py
    ├── test_aniblastall.py
    ├── test_anim.py
    ├── test_cli_parsing.py
    ├── test_concordance.py
    ├── test_dependencies.py
    ├── test_failing_data/
    │   ├── NC_000918.fna
    │   ├── NC_010473.fna
    │   ├── NC_013353.fna
    │   ├── NC_015216.fna
    │   ├── NC_023044.fna
    │   └── README.md
    ├── test_fastani.py
    ├── test_graphics.py
    ├── test_input/
    │   ├── anib/
    │   │   ├── NC_002696-fragments.fna
    │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   ├── blastall/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   ├── blastn/
    │   │   │   ├── NC_002696_vs_NC_010338.blast_tab
    │   │   │   ├── NC_002696_vs_NC_011916.blast_tab
    │   │   │   ├── NC_002696_vs_NC_014100.blast_tab
    │   │   │   ├── NC_010338_vs_NC_002696.blast_tab
    │   │   │   ├── NC_010338_vs_NC_011916.blast_tab
    │   │   │   ├── NC_010338_vs_NC_014100.blast_tab
    │   │   │   ├── NC_011916_vs_NC_002696.blast_tab
    │   │   │   ├── NC_011916_vs_NC_010338.blast_tab
    │   │   │   ├── NC_011916_vs_NC_014100.blast_tab
    │   │   │   ├── NC_014100_vs_NC_002696.blast_tab
    │   │   │   ├── NC_014100_vs_NC_010338.blast_tab
    │   │   │   └── NC_014100_vs_NC_011916.blast_tab
    │   │   └── fragfiles/
    │   │       ├── NC_002696-fragments.fna
    │   │       ├── NC_010338-fragments.fna
    │   │       ├── NC_011916-fragments.fna
    │   │       └── NC_014100-fragments.fna
    │   ├── anim/
    │   │   ├── deltadir/
    │   │   │   ├── NC_002696_vs_NC_010338.delta
    │   │   │   ├── NC_002696_vs_NC_010338.filter
    │   │   │   ├── NC_002696_vs_NC_011916.delta
    │   │   │   ├── NC_002696_vs_NC_011916.filter
    │   │   │   ├── NC_002696_vs_NC_014100.delta
    │   │   │   ├── NC_002696_vs_NC_014100.filter
    │   │   │   ├── NC_010338_vs_NC_011916.delta
    │   │   │   ├── NC_010338_vs_NC_011916.filter
    │   │   │   ├── NC_010338_vs_NC_014100.delta
    │   │   │   ├── NC_010338_vs_NC_014100.filter
    │   │   │   ├── NC_011916_vs_NC_014100.delta
    │   │   │   └── NC_011916_vs_NC_014100.filter
    │   │   └── test.delta
    │   ├── concordance/
    │   │   ├── GCF_000011325.1_ASM1132v1_genomic.fna
    │   │   ├── GCF_000227605.2_ASM22760v2_genomic.fna
    │   │   └── GCF_002243555.1_ASM224355v1_genomic.fna
    │   ├── sequences/
    │   │   ├── NC_002696.fna
    │   │   ├── NC_010338.fna
    │   │   ├── NC_011916.fna
    │   │   └── NC_014100.fna
    │   ├── subcmd_anib/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   ├── subcmd_anim/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   ├── subcmd_fastani/
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │   │   ├── GCF_000011745.1_ASM1174v1_genomic.md5
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │   │   ├── GCF_000043285.1_ASM4328v1_genomic.md5
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │   │   ├── GCF_000185985.2_ASM18598v2_genomic.md5
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │   │   ├── GCF_000331065.1_ASM33106v1_genomic.md5
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │   │   ├── GCF_000973505.1_ASM97350v1_genomic.md5
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │   │   ├── GCF_000973545.1_ASM97354v1_genomic.md5
    │   │   ├── classes.txt
    │   │   └── labels.txt
    │   └── subcmd_index/
    │       ├── GCF_000011745.1_ASM1174v1_genomic.fna
    │       ├── GCF_000043285.1_ASM4328v1_genomic.fna
    │       ├── GCF_000185985.2_ASM18598v2_genomic.fna
    │       ├── GCF_000331065.1_ASM33106v1_genomic.fna
    │       ├── GCF_000973505.1_ASM97350v1_genomic.fna
    │       ├── GCF_000973545.1_ASM97354v1_genomic.fna
    │       └── nonexistent_hash.txt
    ├── test_jobs.py
    ├── test_legacy_scripts.py
    ├── test_multiprocessing.py
    ├── test_parsing.py
    ├── test_subcmd_01_download.py
    ├── test_subcmd_02_index.py
    ├── test_subcmd_03_createdb.py
    ├── test_subcmd_04_anim.py
    ├── test_subcmd_05_report.py
    ├── test_subcmd_06_plot.py
    ├── test_subcmd_07_classify.py
    ├── test_subcmd_08_anib.py
    ├── test_subcmd_09_fastani.py
    ├── test_targets/
    │   ├── concordance/
    │   │   └── jspecies_output.tab
    │   ├── legacy_scripts/
    │   │   ├── ANIb_mpl/
    │   │   │   ├── ANIb_alignment_coverage.tab
    │   │   │   ├── ANIb_alignment_lengths.tab
    │   │   │   ├── ANIb_hadamard.tab
    │   │   │   ├── ANIb_percentage_identity.tab
    │   │   │   └── ANIb_similarity_errors.tab
    │   │   ├── ANIb_seaborn/
    │   │   │   ├── ANIb_alignment_coverage.tab
    │   │   │   ├── ANIb_alignment_lengths.tab
    │   │   │   ├── ANIb_hadamard.tab
    │   │   │   ├── ANIb_percentage_identity.tab
    │   │   │   └── ANIb_similarity_errors.tab
    │   │   ├── ANIm_mpl_Darwin_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_mpl_Linux_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_seaborn_Darwin_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── ANIm_seaborn_Linux_3.1/
    │   │   │   ├── ANIm_alignment_coverage.tab
    │   │   │   ├── ANIm_alignment_lengths.tab
    │   │   │   ├── ANIm_hadamard.tab
    │   │   │   ├── ANIm_percentage_identity.tab
    │   │   │   └── ANIm_similarity_errors.tab
    │   │   ├── TETRA_mpl/
    │   │   │   └── TETRA_correlations.tab
    │   │   └── TETRA_seaborn/
    │   │       └── TETRA_correlations.tab
    │   └── subcmd_index/
    │       ├── GCF_000011745.1_ASM1174v1_genomic.fna.md5
    │       ├── GCF_000043285.1_ASM4328v1_genomic.fna.md5
    │       ├── GCF_000185985.2_ASM18598v2_genomic.fna.md5
    │       ├── GCF_000331065.1_ASM33106v1_genomic.fna.md5
    │       ├── GCF_000973505.1_ASM97350v1_genomic.fna.md5
    │       ├── GCF_000973545.1_ASM97354v1_genomic.fna.md5
    │       ├── classes.txt
    │       └── labels.txt
    ├── test_tetra.py
    └── tools.py
Download .txt
SYMBOL INDEX (370 symbols across 56 files)

FILE: docs/conf.py
  function run_apidoc (line 185) | def run_apidoc(_):
  function setup (line 193) | def setup(app):

FILE: pyani/__init__.py
  class PyaniException (line 46) | class PyaniException(Exception):

FILE: pyani/anib.py
  class PyaniANIbException (line 105) | class PyaniANIbException(PyaniException):
  function get_version (line 109) | def get_version(blast_exe: Path = pyani_config.BLASTN_DEFAULT) -> str:
  function fragment_fasta_files (line 164) | def fragment_fasta_files(
  function get_fraglength_dict (line 207) | def get_fraglength_dict(fastafiles: List[Path]) -> Dict:
  function get_fragment_lengths (line 224) | def get_fragment_lengths(fastafile: Path) -> Dict:
  function build_db_jobs (line 241) | def build_db_jobs(infiles: List[Path], blastcmds: BLASTcmds) -> Dict:
  function make_blastcmd_builder (line 257) | def make_blastcmd_builder(
  function make_job_graph (line 296) | def make_job_graph(
  function generate_blastdb_commands (line 351) | def generate_blastdb_commands(
  function construct_makeblastdb_cmd (line 378) | def construct_makeblastdb_cmd(
  function construct_formatdb_cmd (line 395) | def construct_formatdb_cmd(
  function generate_blastn_commands (line 410) | def generate_blastn_commands(
  function construct_blastn_cmdline (line 451) | def construct_blastn_cmdline(
  function construct_blastall_cmdline (line 475) | def construct_blastall_cmdline(
  function process_blast (line 496) | def process_blast(
  function parse_blast_tab (line 569) | def parse_blast_tab(

FILE: pyani/aniblastall.py
  class PyaniblastallException (line 51) | class PyaniblastallException(PyaniException):
  function get_version (line 56) | def get_version(blast_exe: Path = pyani_config.BLASTALL_DEFAULT) -> str:

FILE: pyani/anim.py
  class PyaniANImException (line 77) | class PyaniANImException(PyaniException):
  function get_fasta_files (line 82) | def get_fasta_files(dirname: Path = Path(".")) -> Iterable:
  function get_version (line 94) | def get_version(nucmer_exe: Path = pyani_config.NUCMER_DEFAULT) -> str:
  function generate_nucmer_jobs (line 155) | def generate_nucmer_jobs(
  function generate_nucmer_commands (line 192) | def generate_nucmer_commands(
  function construct_nucmer_cmdline (line 240) | def construct_nucmer_cmdline(
  function parse_delta (line 292) | def parse_delta(filename: Path) -> Tuple[int, int, float, int]:
  function process_deltadir (line 415) | def process_deltadir(

FILE: pyani/blast.py
  function parse_blasttab (line 44) | def parse_blasttab(fhandle: TextIO) -> List[List[str]]:

FILE: pyani/dependencies.py
  function get_versions (line 82) | def get_versions(deplist: str) -> Generator:
  function get_requirements (line 96) | def get_requirements() -> Generator:
  function get_dev_requirements (line 101) | def get_dev_requirements() -> Generator:
  function get_pip_requirements (line 106) | def get_pip_requirements() -> Generator:
  function get_tool_versions (line 111) | def get_tool_versions() -> Generator:

FILE: pyani/download.py
  class NCBIDownloadException (line 68) | class NCBIDownloadException(Exception):
    method __init__ (line 71) | def __init__(self, msg: str = "Error downloading file from NCBI"):
  class FileExistsException (line 76) | class FileExistsException(Exception):
    method __init__ (line 79) | def __init__(self, msg: str = "Specified file exists"):
  class PyaniIndexException (line 84) | class PyaniIndexException(Exception):
  class ASMIDs (line 88) | class ASMIDs(NamedTuple):
  class Classification (line 96) | class Classification(NamedTuple):
  class DLFileData (line 105) | class DLFileData(NamedTuple):
  class Hashstatus (line 113) | class Hashstatus(NamedTuple):
  class DLStatus (line 121) | class DLStatus:
    method __init__ (line 124) | def __init__(
  function last_exception (line 141) | def last_exception() -> str:
  function make_asm_dict (line 147) | def make_asm_dict(taxon_ids: List[str], retries: int) -> Dict:
  function set_ncbi_email (line 165) | def set_ncbi_email(email: str) -> None:
  function download_genome_and_hash (line 174) | def download_genome_and_hash(
  function entrez_retry (line 216) | def entrez_retry(func):
  function entrez_batch (line 234) | def entrez_batch(func):
  function entrez_batched_webhistory (line 255) | def entrez_batched_webhistory(*args, **kwargs):
  function entrez_esearch (line 260) | def entrez_esearch(*args, **kwargs):
  function entrez_esummary (line 265) | def entrez_esummary(*args, **kwargs):
  function split_taxa (line 270) | def split_taxa(taxa: str) -> List[str]:
  function get_asm_uids (line 286) | def get_asm_uids(taxon_uid: str, retries: int) -> ASMIDs:
  function extract_filestem (line 321) | def extract_filestem(esummary) -> str:
  function get_ncbi_esummary (line 339) | def get_ncbi_esummary(asm_uid, retries, api_key=None) -> Tuple:
  function get_ncbi_classification (line 375) | def get_ncbi_classification(esummary) -> Classification:
  function compile_url (line 393) | def compile_url(filestem: str, suffix: str, ftpstem: str) -> Tuple[str, ...
  function download_url (line 431) | def download_url(
  function construct_output_paths (line 466) | def construct_output_paths(
  function retrieve_genome_and_hash (line 481) | def retrieve_genome_and_hash(
  function check_hash (line 518) | def check_hash(fname: Path, hashfile: Path) -> Hashstatus:
  function extract_contigs (line 541) | def extract_contigs(fname: Path, ename: Path) -> CompletedProcess:
  function create_labels (line 555) | def create_labels(
  function create_hash (line 585) | def create_hash(fname: Path) -> str:
  function extract_hash (line 609) | def extract_hash(hashfile: Path, name: str) -> str:

FILE: pyani/fastani.py
  class PyaniFastANIException (line 55) | class PyaniFastANIException(PyaniException):
  class ComparisonResult (line 59) | class ComparisonResult(NamedTuple):
  function get_version (line 69) | def get_version(fastani_exe: Path = pyani_config.FASTANI_DEFAULT) -> str:
  function generate_fastani_jobs (line 126) | def generate_fastani_jobs(
  function generate_fastani_commands (line 158) | def generate_fastani_commands(
  function construct_fastani_cmdline (line 193) | def construct_fastani_cmdline(
  function parse_fastani_file (line 231) | def parse_fastani_file(filename: Path) -> ComparisonResult:
  function process_files (line 272) | def process_files(outdir: Path, org_lengths: Dict) -> ANIResults:

FILE: pyani/logger.py
  class NoColorFormatter (line 52) | class NoColorFormatter(logging.Formatter):
    method format (line 57) | def format(self, record):
  function config_logger (line 70) | def config_logger(args: Optional[Namespace] = None) -> None:

FILE: pyani/nucmer.py
  class DeltaData (line 47) | class DeltaData:
    method __init__ (line 68) | def __init__(self, name: str, handle: TextIO = None) -> None:
    method from_delta (line 80) | def from_delta(self, handle: TextIO) -> None:
    method comparisons (line 90) | def comparisons(self):
    method metadata (line 95) | def metadata(self):
    method reference (line 100) | def reference(self):
    method program (line 105) | def program(self):
    method query (line 110) | def query(self):
    method __eq__ (line 114) | def __eq__(self, other):
    method __len__ (line 124) | def __len__(self):
    method __str__ (line 127) | def __str__(self):
  class DeltaHeader (line 135) | class DeltaHeader:
    method __init__ (line 139) | def __init__(
    method __eq__ (line 154) | def __eq__(self, other):
    method __str__ (line 164) | def __str__(self):
  class DeltaAlignment (line 170) | class DeltaAlignment:
    method __init__ (line 174) | def __init__(
    method __lt__ (line 203) | def __lt__(self, other):
    method __eq__ (line 211) | def __eq__(self, other):
    method __str__ (line 219) | def __str__(self):
  class DeltaMetadata (line 234) | class DeltaMetadata:
    method __init__ (line 238) | def __init__(self) -> None:
    method __eq__ (line 244) | def __eq__(self, other):
    method __str__ (line 253) | def __str__(self):
  class DeltaComparison (line 257) | class DeltaComparison:
    method __init__ (line 261) | def __init__(self, header: DeltaHeader, alignments: List[DeltaAlignmen...
    method add_alignment (line 270) | def add_alignment(self, aln: DeltaAlignment) -> None:
    method __eq__ (line 277) | def __eq__(self, other):
    method __len__ (line 284) | def __len__(self):
    method __str__ (line 287) | def __str__(self):
  class DeltaIterator (line 292) | class DeltaIterator:
    method __init__ (line 303) | def __init__(self, handle: TextIO) -> None:
    method __iter__ (line 313) | def __iter__(self):
    method __next__ (line 317) | def __next__(self):

FILE: pyani/pyani_classify.py
  class Cliquesinfo (line 51) | class Cliquesinfo(NamedTuple):
  function build_graph_from_results (line 61) | def build_graph_from_results(
  function analyse_cliques (line 115) | def analyse_cliques(graph: nx.Graph) -> Cliquesinfo:
  function all_components_k_complete (line 124) | def all_components_k_complete(graph: nx.Graph) -> bool:
  function k_complete_component_status (line 132) | def k_complete_component_status(graph: nx.Graph) -> List[bool]:
  function remove_low_weight_edges (line 151) | def remove_low_weight_edges(

FILE: pyani/pyani_config.py
  function params_mpl (line 156) | def params_mpl(dfm: pd.DataFrame) -> Dict[str, Tuple[str, Any, Any]]:
  function get_colormap (line 183) | def get_colormap(dataframe: pd.DataFrame, matname: str) -> Tuple[str, An...

FILE: pyani/pyani_files.py
  class PyaniFilesException (line 53) | class PyaniFilesException(PyaniException):
  function get_fasta_files (line 59) | def get_fasta_files(dirname: Path = Path(".")) -> List[Path]:
  function get_fasta_paths (line 69) | def get_fasta_paths(
  function get_fasta_and_hash_paths (line 89) | def get_fasta_and_hash_paths(dirname: Path = Path(".")) -> List[Tuple[Pa...
  function get_input_files (line 118) | def get_input_files(dirname: Path, *ext) -> List[Path]:
  function get_sequence_lengths (line 128) | def get_sequence_lengths(fastafilenames: Iterable[Path]) -> Dict[str, int]:
  function read_hash_string (line 146) | def read_hash_string(filename: Path) -> Tuple[str, str]:
  function read_fasta_description (line 163) | def read_fasta_description(filename: Path) -> str:
  function load_classes_labels (line 175) | def load_classes_labels(path: Path) -> Dict[str, str]:
  function collect_existing_output (line 196) | def collect_existing_output(dirpath: Path, program: str, args: Namespace...

FILE: pyani/pyani_graphics/__init__.py
  class Params (line 64) | class Params:  # pylint: disable=too-few-public-methods
    method __init__ (line 68) | def __init__(
    method vdiff (line 87) | def vdiff(self):

FILE: pyani/pyani_graphics/mpl/__init__.py
  function clean_axis (line 72) | def clean_axis(axis):
  function add_dendrogram (line 84) | def add_dendrogram(dfr, fig, params, heatmap_gs, orientation="col"):
  function distribution (line 139) | def distribution(dfr, outfilename, matname, title=None):
  function get_heatmap_axes (line 179) | def get_heatmap_axes(dfr, fig, heatmap_gs):
  function add_colorbar (line 196) | def add_colorbar(dfr, fig, dend, params, orientation="row"):
  function add_labels (line 243) | def add_labels(heatmap_axes, rowlabels, collabels, params):
  function add_colorscale (line 265) | def add_colorscale(fig, heatmap_gs, ax_map, params, title=None):
  function heatmap (line 295) | def heatmap(dfr, outfilename=None, title=None, params=None):
  function scatter (line 363) | def scatter(

FILE: pyani/pyani_graphics/sns/__init__.py
  function get_colorbar (line 51) | def get_colorbar(dfr, classes):
  function add_labels (line 84) | def add_labels(fig, params):
  function get_clustermap (line 102) | def get_clustermap(dfr, params, title=None, annot=True):
  function heatmap (line 154) | def heatmap(dfr, outfilename=None, title=None, params=None):
  function distribution (line 192) | def distribution(dfr, outfilename, matname, title=None):
  function scatter (line 236) | def scatter(

FILE: pyani/pyani_jobs.py
  class Job (line 76) | class Job(object):
    method __init__ (line 80) | def __init__(self, name: str, command: str, queue: Optional[str] = Non...
    method add_dependency (line 96) | def add_dependency(self, job) -> None:
    method remove_dependency (line 105) | def remove_dependency(self, job) -> None:
    method wait (line 112) | def wait(self, interval: float = SGE_WAIT) -> None:
  class JobGroup (line 123) | class JobGroup(object):
    method __init__ (line 127) | def __init__(
    method generate_script (line 163) | def generate_script(self) -> None:
    method add_dependency (line 200) | def add_dependency(self, job) -> None:
    method remove_dependency (line 210) | def remove_dependency(self, job) -> None:
    method wait (line 217) | def wait(self, interval: float = SGE_WAIT) -> None:

FILE: pyani/pyani_orm.py
  class PyaniORMException (line 71) | class PyaniORMException(PyaniException):
  class LabelTuple (line 99) | class LabelTuple(NamedTuple):
  class Label (line 106) | class Label(Base):
    method __str__ (line 123) | def __str__(self) -> str:
    method __repr__ (line 131) | def __repr__(self) -> str:
  class BlastDB (line 138) | class BlastDB(Base):
    method __str__ (line 163) | def __str__(self) -> str:
    method __repr__ (line 171) | def __repr__(self) -> str:
  class Genome (line 178) | class Genome(Base):
    method __str__ (line 218) | def __str__(self) -> str:
    method __repr__ (line 222) | def __repr__(self) -> str:
  class Run (line 227) | class Run(Base):
    method __str__ (line 253) | def __str__(self) -> str:
    method __repr__ (line 257) | def __repr__(self) -> str:
  class Comparison (line 262) | class Comparison(Base):
    method __str__ (line 304) | def __str__(self) -> str:
    method __repr__ (line 320) | def __repr__(self) -> str:
  function create_db (line 325) | def create_db(dbpath: Path) -> None:
  function get_session (line 334) | def get_session(dbpath: Path) -> Any:
  function get_comparison_dict (line 344) | def get_comparison_dict(session: Any) -> Dict[Tuple, Any]:
  function get_matrix_labels_for_run (line 368) | def get_matrix_labels_for_run(session: Any, run_id: int) -> Dict:
  function get_matrix_classes_for_run (line 392) | def get_matrix_classes_for_run(session: Any, run_id: int) -> Dict[str, L...
  function filter_existing_comparisons (line 416) | def filter_existing_comparisons(
  function add_run (line 494) | def add_run(session, method, cmdline, date, status, name):
  function add_run_genomes (line 520) | def add_run_genomes(
  function update_comparison_matrices (line 618) | def update_comparison_matrices(session, run) -> None:

FILE: pyani/pyani_report.py
  function colour_rows (line 50) | def colour_rows(
  function table_padding (line 70) | def table_padding() -> Dict[str, Any]:
  function hover_highlight (line 75) | def hover_highlight(hover_colour: str = "#FFFF99") -> Dict[str, Any]:
  function header_font (line 83) | def header_font() -> Dict[str, Any]:
  function colour_identity (line 95) | def colour_identity(
  function colour_coverage (line 110) | def colour_coverage(
  function colour_numeric (line 125) | def colour_numeric(val: float, threshold: float = 0.95, colour: str = "#...
  function write_styled_html (line 138) | def write_styled_html(
  function write_to_stdout (line 176) | def write_to_stdout(
  function write_dbtable (line 191) | def write_dbtable(

FILE: pyani/pyani_tools.py
  class MatrixData (line 66) | class MatrixData(NamedTuple):
  class Dependencies (line 75) | class Dependencies(NamedTuple):
  class ANIResults (line 85) | class ANIResults:
    method __init__ (line 89) | def __init__(self, labels: List[str], mode: str) -> None:
    method add_tot_length (line 108) | def add_tot_length(
    method add_sim_errors (line 126) | def add_sim_errors(
    method add_pid (line 140) | def add_pid(
    method add_coverage (line 155) | def add_coverage(
    method hadamard (line 170) | def hadamard(self) -> float:
    method data (line 175) | def data(self) -> Iterator[Tuple[Any, str]]:
  class BLASTfunctions (line 199) | class BLASTfunctions(NamedTuple):
  class BLASTexes (line 207) | class BLASTexes(NamedTuple):
  class BLASTcmds (line 216) | class BLASTcmds:
    method __init__ (line 220) | def __init__(
    method build_db_cmd (line 235) | def build_db_cmd(self, fname: Path) -> str:
    method get_db_name (line 242) | def get_db_name(self, fname: Path) -> str:
    method build_blast_cmd (line 249) | def build_blast_cmd(self, fname: Path, dbname: Path):
  function get_labels (line 263) | def get_labels(filename: Path, logger: Optional[Logger] = None) -> Dict:
  function get_genome_length (line 293) | def get_genome_length(filename: Path) -> int:
  function label_results_matrix (line 303) | def label_results_matrix(matrix: pd.DataFrame, labels: Dict) -> pd.DataF...
  function has_dependencies (line 325) | def has_dependencies() -> Dependencies:
  function termcolor (line 333) | def termcolor(

FILE: pyani/run_multiprocessing.py
  function run_dependency_graph (line 56) | def run_dependency_graph(
  function populate_cmdsets (line 87) | def populate_cmdsets(job: Job, cmdsets: List, depth: int) -> List:
  function multiprocessing_run (line 113) | def multiprocessing_run(

FILE: pyani/run_sge.py
  function split_seq (line 57) | def split_seq(iterable: Iterable, size: int) -> Generator:
  function build_joblist (line 71) | def build_joblist(jobgraph) -> List:
  function compile_jobgroups_from_joblist (line 87) | def compile_jobgroups_from_joblist(
  function run_dependency_graph (line 116) | def run_dependency_graph(
  function populate_jobset (line 188) | def populate_jobset(job: Job, jobset: Set, depth: int) -> Set:
  function build_directories (line 206) | def build_directories(root_dir: Path) -> None:
  function build_job_scripts (line 233) | def build_job_scripts(root_dir: Path, jobs: List) -> None:
  function extract_submittable_jobs (line 248) | def extract_submittable_jobs(waiting: List) -> List:
  function submit_safe_jobs (line 264) | def submit_safe_jobs(
  function submit_jobs (line 314) | def submit_jobs(root_dir: Path, jobs: Iterable, sgeargs: Optional[str] =...
  function build_and_submit_jobs (line 333) | def build_and_submit_jobs(

FILE: pyani/scripts/__init__.py
  class PyaniScriptException (line 12) | class PyaniScriptException(Exception):
    method __init__ (line 16) | def __init__(self, msg="Error in pyani.py script"):
  function make_outdir (line 21) | def make_outdir(outdir: Path, force: bool, noclobber: bool) -> None:

FILE: pyani/scripts/average_nucleotide_identity.py
  function parse_cmdline (line 160) | def parse_cmdline(argv: Optional[List] = None) -> Namespace:
  function last_exception (line 437) | def last_exception() -> str:
  function make_outdirs (line 444) | def make_outdirs(args: Namespace):
  function compress_delete_outdir (line 477) | def compress_delete_outdir(outdir: Path, logger: Logger) -> None:
  function calculate_anim (line 489) | def calculate_anim(
  function calculate_tetra (line 582) | def calculate_tetra(infiles: List[Path]) -> pd.DataFrame:
  function make_sequence_fragments (line 615) | def make_sequence_fragments(
  function run_blast (line 639) | def run_blast(
  function unified_anib (line 694) | def unified_anib(
  function write (line 768) | def write(args: Namespace, results: pd.DataFrame) -> None:
  function draw (line 798) | def draw(args: Namespace, filestems: List[str], gformat: str) -> None:
  function subsample_input (line 831) | def subsample_input(args: Namespace, logger: Logger, infiles: List[Path]...
  function process_arguments (line 865) | def process_arguments(args: Optional[Namespace]) -> Namespace:
  function test_class_label_paths (line 884) | def test_class_label_paths(args: Namespace, logger: Logger) -> None:
  function get_method (line 900) | def get_method(args: Namespace) -> Tuple:
  function test_scheduler (line 928) | def test_scheduler(args: Namespace, logger: Logger) -> None:
  function run_main (line 947) | def run_main(argsin: Optional[Namespace] = None) -> int:

FILE: pyani/scripts/delta_filter_wrapper.py
  function run_main (line 70) | def run_main() -> int:

FILE: pyani/scripts/genbank_get_genomes_by_taxon.py
  class NCBIDownloadException (line 70) | class NCBIDownloadException(Exception):
    method __init__ (line 74) | def __init__(self):
  function parse_cmdline (line 80) | def parse_cmdline(argv=None):
  function last_exception (line 186) | def last_exception():
  function set_ncbi_email (line 193) | def set_ncbi_email(args: Namespace) -> None:
  function make_outdir (line 206) | def make_outdir(args: Namespace) -> None:
  function entrez_retry (line 251) | def entrez_retry(args, func, *fnargs, **fnkwargs):
  function entrez_batch_webhistory (line 284) | def entrez_batch_webhistory(args, record, expected, batchsize, *fnargs, ...
  function get_asm_uids (line 315) | def get_asm_uids(args, taxon_uid):
  function extract_filestem (line 352) | def extract_filestem(data):
  function get_ncbi_asm (line 370) | def get_ncbi_asm(args, asm_uid, fmt="fasta"):
  function retrieve_asm_contigs (line 453) | def retrieve_asm_contigs(
  function extract_archive (line 564) | def extract_archive(archivepath):
  function write_contigs (line 594) | def write_contigs(args, asm_uid, contig_uids, batchsize=10000):
  function logreport_downloaded (line 691) | def logreport_downloaded(accn, skiplist, accndict, uidaccndict):
  function run_main (line 710) | def run_main(args=None):

FILE: pyani/scripts/parsers/__init__.py
  function parse_cmdline (line 65) | def parse_cmdline(argv: Optional[List] = None) -> Namespace:

FILE: pyani/scripts/parsers/anib_parser.py
  function build (line 51) | def build(

FILE: pyani/scripts/parsers/aniblastall_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/anim_parser.py
  function build (line 53) | def build(

FILE: pyani/scripts/parsers/classify_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/common_parser.py
  function build (line 46) | def build() -> ArgumentParser:

FILE: pyani/scripts/parsers/createdb_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/download_parser.py
  function build (line 49) | def build(

FILE: pyani/scripts/parsers/fastani_parser.py
  function build (line 47) | def build(

FILE: pyani/scripts/parsers/index_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/listdeps_parser.py
  function build (line 45) | def build(

FILE: pyani/scripts/parsers/plot_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/report_parser.py
  function build (line 48) | def build(

FILE: pyani/scripts/parsers/run_common_parser.py
  function build (line 46) | def build() -> ArgumentParser:

FILE: pyani/scripts/parsers/scheduling_parser.py
  function build (line 44) | def build() -> ArgumentParser:

FILE: pyani/scripts/pyani_script.py
  function run_main (line 79) | def run_main(argv: Optional[List[str]] = None) -> int:
  function add_log_headers (line 151) | def add_log_headers():

FILE: pyani/scripts/subcommands/subcmd_anib.py
  function subcmd_anib (line 68) | def subcmd_anib(args: Namespace) -> None:
  function generate_joblist (line 258) | def generate_joblist(
  function fragment_fasta_file (line 277) | def fragment_fasta_file(inpath: Path, outdir: Path, fragsize: int) -> Tu...

FILE: pyani/scripts/subcommands/subcmd_aniblastall.py
  function subcmd_aniblastall (line 46) | def subcmd_aniblastall(args: Namespace):

FILE: pyani/scripts/subcommands/subcmd_anim.py
  class ComparisonJob (line 75) | class ComparisonJob(NamedTuple):
  class RunData (line 87) | class RunData(NamedTuple):
  class ComparisonResult (line 96) | class ComparisonResult(NamedTuple):
  class ProgData (line 110) | class ProgData(NamedTuple):
  class ProgParams (line 117) | class ProgParams(NamedTuple):
  function subcmd_anim (line 128) | def subcmd_anim(args: Namespace) -> None:
  function generate_joblist (line 308) | def generate_joblist(
  function run_anim_jobs (line 378) | def run_anim_jobs(joblist: List[ComparisonJob], args: Namespace) -> None:
  function update_comparison_results (line 418) | def update_comparison_results(

FILE: pyani/scripts/subcommands/subcmd_classify.py
  class SubgraphData (line 56) | class SubgraphData(NamedTuple):
  function subcmd_classify (line 65) | def subcmd_classify(args: Namespace) -> int:
  function trimmed_graph_sequence (line 122) | def trimmed_graph_sequence(

FILE: pyani/scripts/subcommands/subcmd_createdb.py
  function subcmd_createdb (line 49) | def subcmd_createdb(args: Namespace) -> int:

FILE: pyani/scripts/subcommands/subcmd_download.py
  class Skipped (line 54) | class Skipped(NamedTuple):
  function configure_entrez (line 65) | def configure_entrez(args: Namespace) -> Optional[str]:
  function dl_info_to_str (line 79) | def dl_info_to_str(esummary, uid_class) -> str:
  function download_data (line 99) | def download_data(
  function extract_genomes (line 180) | def extract_genomes(args: Namespace, dlstatus: download.DLStatus, esumma...
  function hash_genomes (line 211) | def hash_genomes(
  function download_genome (line 236) | def download_genome(args: Namespace, filestem: str, tid: str, uid: str, ...
  function get_tax_asm_dict (line 322) | def get_tax_asm_dict(args: Namespace) -> Dict[str, List]:
  function parse_api_key (line 342) | def parse_api_key(args: Namespace) -> Optional[str]:
  function subcmd_download (line 363) | def subcmd_download(args: Namespace) -> int:

FILE: pyani/scripts/subcommands/subcmd_fastani.py
  class ComparisonJob (line 77) | class ComparisonJob(NamedTuple):
  class RunData (line 91) | class RunData(NamedTuple):
  class ComparisonResult (line 100) | class ComparisonResult(NamedTuple):
  function subcmd_fastani (line 114) | def subcmd_fastani(args: Namespace) -> None:
  function generate_joblist (line 298) | def generate_joblist(
  function run_fastani_jobs (line 371) | def run_fastani_jobs(joblist: List[ComparisonJob], args: Namespace) -> N...
  function update_comparison_results (line 416) | def update_comparison_results(

FILE: pyani/scripts/subcommands/subcmd_index.py
  function subcmd_index (line 53) | def subcmd_index(args: Namespace) -> int:

FILE: pyani/scripts/subcommands/subcmd_listdeps.py
  function subcmd_listdeps (line 54) | def subcmd_listdeps(args: Namespace) -> int:

FILE: pyani/scripts/subcommands/subcmd_plot.py
  function subcmd_plot (line 67) | def subcmd_plot(args: Namespace) -> int:
  function write_run_plots (line 102) | def write_run_plots(run_id: int, session, outfmts: List[str], args: Name...
  function write_distribution (line 180) | def write_distribution(
  function write_heatmap (line 206) | def write_heatmap(
  function write_scatter (line 243) | def write_scatter(

FILE: pyani/scripts/subcommands/subcmd_report.py
  class ReportParams (line 67) | class ReportParams(NamedTuple):
  function subcmd_report (line 75) | def subcmd_report(args: Namespace) -> int:
  function report (line 323) | def report(args: Namespace, session, formats: List[str], params: ReportP...
  function process_formats (line 382) | def process_formats(args: Namespace) -> List[str]:

FILE: pyani/tetra.py
  function calculate_tetra_zscores (line 66) | def calculate_tetra_zscores(infilenames: Iterable) -> Dict[str, Dict[str...
  function calculate_tetra_zscore (line 78) | def calculate_tetra_zscore(filename: Path) -> Dict[str, float]:
  function tetra_clean (line 143) | def tetra_clean(instr: str) -> bool:
  function calculate_correlations (line 158) | def calculate_correlations(tetra_z: Dict[str, Dict[str, float]]) -> pd.D...

FILE: tests/conftest.py
  class MockGenome (line 70) | class MockGenome(NamedTuple):
  class MockProcess (line 76) | class MockProcess(NamedTuple):
  class MockMatch (line 83) | class MockMatch(NamedTuple):
    method group (line 86) | def group(self):
  function blastall_available (line 91) | def blastall_available():
  function blastn_available (line 109) | def blastn_available():
  function dir_anib_in (line 122) | def dir_anib_in():
  function dir_anim_in (line 128) | def dir_anim_in():
  function dir_fastani_in (line 134) | def dir_fastani_in():
  function dir_graphics_in (line 140) | def dir_graphics_in():
  function dir_seq (line 146) | def dir_seq():
  function dir_targets (line 152) | def dir_targets():
  function dir_tgt_fragments (line 158) | def dir_tgt_fragments(dir_targets):
  function email_address (line 164) | def email_address():
  function executable_incompatible_with_os (line 170) | def executable_incompatible_with_os(monkeypatch):
  function executable_missing (line 201) | def executable_missing(monkeypatch):
  function executable_not_executable (line 218) | def executable_not_executable(monkeypatch):
  function executable_without_version (line 243) | def executable_without_version(monkeypatch):
  function fragment_length (line 278) | def fragment_length():
  function mock_get_nucmer_3_version (line 284) | def mock_get_nucmer_3_version(monkeypatch):
  function mock_get_nucmer_4_version (line 319) | def mock_get_nucmer_4_version(monkeypatch):
  function unsorted_genomes (line 351) | def unsorted_genomes(dir_anim_in):
  function mock_legacy_single_genome_dl (line 358) | def mock_legacy_single_genome_dl(monkeypatch):
  function mock_single_genome_dl (line 387) | def mock_single_genome_dl(monkeypatch):
  function mock_blochmannia_dl (line 429) | def mock_blochmannia_dl(monkeypatch):
  function mock_blochmannia_kraken_dl (line 660) | def mock_blochmannia_kraken_dl(monkeypatch):
  function nucmer_available (line 892) | def nucmer_available():
  function path_file_two (line 905) | def path_file_two():
  function path_file_four (line 911) | def path_file_four():
  function path_fixtures_base (line 917) | def path_fixtures_base():
  function path_fna (line 923) | def path_fna(dir_seq):
  function path_fna_two (line 930) | def path_fna_two(dir_seq):
  function path_fna_all (line 937) | def path_fna_all(dir_seq):
  function skip_by_unavailable_executable (line 943) | def skip_by_unavailable_executable(
Copy disabled (too large) Download .json
Condensed preview — 510 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (110,425K chars).
[
  {
    "path": ".all-contributorsrc",
    "chars": 6210,
    "preview": "{\n  \"files\": [\n    \"README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"contributors\": [\n    {\n      \"login\": \"wid"
  },
  {
    "path": ".codecov.yml",
    "chars": 442,
    "preview": "#\n# This codecov.yml is the default configuration for\n# all repositories on Codecov. You may adjust the settings\n# below"
  },
  {
    "path": ".flake8",
    "chars": 131,
    "preview": "[flake8]\nignore = E203, E231, E266, E501, W503, F403, F401, E731\nmax-line-length = 88\nmax-complexity = 18\nselect = B,C,E"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.txt",
    "chars": 1103,
    "preview": "#### Summary:\nPlease provide a short summary of your issue (in a couple of sentences).\n\n\n#### Description:\nDescribe the "
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1784,
    "preview": "Please include a summary of the change and which issue is fixed. Please also include the motivation and context, and not"
  },
  {
    "path": ".github/requirements-rtd.txt",
    "chars": 65,
    "preview": "# Imports required for readthedocs.io API generation\n.\nsqlalchemy"
  },
  {
    "path": ".github/workflows/build-linux.yml",
    "chars": 2923,
    "preview": "name: build-linux\n\non:\n  push:\n    branches: master\n  # To be able to trigger a manual build\n  workflow_dispatch: \n\njobs"
  },
  {
    "path": ".github/workflows/build-macos.yml",
    "chars": 2922,
    "preview": "name: build-macos\n\non:\n  push:\n    branches: master\n  # To be able to trigger a manual build\n  workflow_dispatch: \n\njobs"
  },
  {
    "path": ".gitignore",
    "chars": 1156,
    "preview": "# Scratch directory for local testing\nscratch/\n\n# Mac-related dreck\n.DS_Store\n\n# Emacs edit files\n*~\n*#\n.#\n\n# Configs fo"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 571,
    "preview": "repos:\n-   repo: https://github.com/psf/black\n    rev: 22.3.0\n    hooks:\n    - id: black\n      language_version: python3"
  },
  {
    "path": ".readthedocs.yml",
    "chars": 575,
    "preview": "# .readthedocs.yml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html fo"
  },
  {
    "path": "CHANGES.md",
    "chars": 5655,
    "preview": "# CHANGES.md\n\n## v0.3.0-alpha\n\n- major changes to the command-line API\n  - the new API now uses a subcommand system: `py"
  },
  {
    "path": "CITATIONS",
    "chars": 2665,
    "preview": "# CITATIONS\n\nPlease cite the following manuscript in your work, if you have found PYANI useful:\n\nPritchard et al. (2016)"
  },
  {
    "path": "CODEOWNERS",
    "chars": 187,
    "preview": "# @widdowquinn is the default CODEOWNER for all branches and files.\n# Unless later matches take precedence, they will be"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 13472,
    "preview": "# Contributing to `pyani`\n\nContributions, including bugfixes and addition of new features, are welcomed!\n\nThe `pyani` pa"
  },
  {
    "path": "CONTRIBUTORS.md",
    "chars": 629,
    "preview": "# CONTRIBUTORS.md\n\n- [Leighton Pritchard](https://github.com/widdowquinn)\n- [Bailey Harrington](https://github.com/baile"
  },
  {
    "path": "LICENSE",
    "chars": 1145,
    "preview": "The MIT License\n\nCopyright (c) 2010-2019 The James Hutton Institute\nCopyright (c) 2019-present University of Strathclyde"
  },
  {
    "path": "MANIFEST.in",
    "chars": 33,
    "preview": "include tests/test_JSpecies/*.tab"
  },
  {
    "path": "Makefile",
    "chars": 2883,
    "preview": "# Makefile\n#\n# This file is part of the pyani package distribution\n# (https://github.com/widdowquinn/pyani)\n\n# Install c"
  },
  {
    "path": "README.md",
    "chars": 58329,
    "preview": "# `pyani`\n\n## We have deprecated `pyani`. Please use [`pyani-plus`](https://github.com/pyani-plus/pyani-plus).\n\nAs part "
  },
  {
    "path": "README_v_0_2_x.md",
    "chars": 16693,
    "preview": "# README.md (pyani)\n\n[![pyani PyPi version](https://img.shields.io/pypi/v/pyani.svg \"PyPi version\")](https://pypi.python"
  },
  {
    "path": "_config.yml",
    "chars": 27,
    "preview": "theme: jekyll-theme-minimal"
  },
  {
    "path": "bandit.yml",
    "chars": 77,
    "preview": "# BANDIT configuration file\nassert_used:\n  skips: ['*_test.py', '*test_*.py']"
  },
  {
    "path": "docs/Makefile",
    "chars": 605,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHI"
  },
  {
    "path": "docs/about.rst",
    "chars": 1222,
    "preview": ".. _pyani-about:\n\n===============\nAbout ``pyani``\n===============\n\n``pyani`` is a Python package and standalone program "
  },
  {
    "path": "docs/basic_use.rst",
    "chars": 183,
    "preview": ".. _pyani-basic_use:\n\n=========\nBasic Use\n=========\n\n.. toctree::\n    :maxdepth: 2\n    :caption: Contents:\n\n    download"
  },
  {
    "path": "docs/citations.rst",
    "chars": 103907,
    "preview": ".. _pyani-citations:\n\n================\nCiting ``pyani``\n================\n\nWe would be grateful if you could please cite "
  },
  {
    "path": "docs/conf.py",
    "chars": 5946,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# This is a configuration file with no functioning code\n# pylint: skip-"
  },
  {
    "path": "docs/contributing.rst",
    "chars": 5221,
    "preview": ".. _pyani-contributing:\n\n=========================\nContributing to ``pyani``\n=========================\n\n----------------"
  },
  {
    "path": "docs/createdb.rst",
    "chars": 2540,
    "preview": ".. _pyani-createdb:\n\n===================================\nCreating a Local ``pyani`` Database\n==========================="
  },
  {
    "path": "docs/download.rst",
    "chars": 11508,
    "preview": ".. _pyani-download:\n\n=============================\nDownloading Genomes from NCBI\n=============================\n\nThis pag"
  },
  {
    "path": "docs/examples.rst",
    "chars": 1582,
    "preview": ".. _pyani-examples:\n\n========\nExamples\n========\n\n----------------------\nUsing non-NCBI genomes\n----------------------\n\nI"
  },
  {
    "path": "docs/index.rst",
    "chars": 4945,
    "preview": ".. pyani documentation master file, created by\n   sphinx-quickstart on Fri Aug 11 13:27:32 2017.\n   You can adapt this f"
  },
  {
    "path": "docs/indexing.rst",
    "chars": 5393,
    "preview": ".. _pyani-indexing:\n\n================\nIndexing Genomes\n================\n\n*Indexing* genomes is a necessary step in ``pya"
  },
  {
    "path": "docs/installation.rst",
    "chars": 13681,
    "preview": ".. _pyani-installation:\n\n==================\nInstallation Guide\n==================\n\nWe support four ways to install and r"
  },
  {
    "path": "docs/interpreting_plots.rst",
    "chars": 13712,
    "preview": "=================================\nInterpreting the Graphical Output\n=================================\n..\n    Graphical o"
  },
  {
    "path": "docs/licensing.rst",
    "chars": 1663,
    "preview": ".. _pyani-licensing:\n\n=========\nLicensing\n=========\n\nUnless otherwise indicated, all code is subject to the following ag"
  },
  {
    "path": "docs/quickstart.rst",
    "chars": 10977,
    "preview": ".. _pyani-quickstart:\n\n================\nQuickStart Guide\n================\n\n------------\nInstallation\n------------\n\nTo us"
  },
  {
    "path": "docs/requirements.rst",
    "chars": 6103,
    "preview": ".. _pyani-requirements:\n\n============\nRequirements\n============\n\nThe ``pyani`` package requires several other programs, "
  },
  {
    "path": "docs/run_anib.rst",
    "chars": 5328,
    "preview": ".. _pyani-run_anib:\n\n=====================\nRunning ANIb analysis\n=====================\n\n``pyani`` implements average nuc"
  },
  {
    "path": "docs/run_anim.rst",
    "chars": 5176,
    "preview": ".. _pyani-run_anim:\n\n=====================\nRunning ANIm analysis\n=====================\n\n``pyani`` implements average nuc"
  },
  {
    "path": "docs/run_fastani.rst",
    "chars": 4712,
    "preview": ".. _pyani-run_fastani:\n\n========================\nRunning fastANI analysis\n========================\n\n``pyani`` implements"
  },
  {
    "path": "docs/scheduler.rst",
    "chars": 2351,
    "preview": ".. _pyani-scheduler:\n\n====================\nUse With a Scheduler\n====================\n\n^^^^^^^^^^^^^^^^^^^^\nSun/Open Grid"
  },
  {
    "path": "docs/subcmd_anib.rst",
    "chars": 3346,
    "preview": ".. _pyani-subcmd-anib:\n\n==============\n``pyani anib``\n==============\n\nThe ``anib`` subcommand will carry out ANIb analys"
  },
  {
    "path": "docs/subcmd_anim.rst",
    "chars": 3496,
    "preview": ".. _pyani-subcmd-anim:\n\n==============\n``pyani anim``\n==============\n\nThe ``anim`` subcommand will carry out ANIm analys"
  },
  {
    "path": "docs/subcmd_classify.rst",
    "chars": 2260,
    "preview": ".. _pyani-subcmd-classify:\n\n==================\n``pyani classify``\n==================\n\nThe ``classify`` subcommand identi"
  },
  {
    "path": "docs/subcmd_createdb.rst",
    "chars": 924,
    "preview": ".. _pyani-subcmd-createdb:\n\n==================\n``pyani createdb``\n==================\n\nThe ``createdb`` subcommand create"
  },
  {
    "path": "docs/subcmd_download.rst",
    "chars": 3797,
    "preview": ".. _pyani-subcmd-download:\n\n==================\n``pyani download``\n==================\n\nThe ``download`` subcommand contro"
  },
  {
    "path": "docs/subcmd_fastani.rst",
    "chars": 3569,
    "preview": ".. _pyani-subcmd-fastani:\n\n==============\n``pyani fastani``\n==============\n\nThe ``fastani`` subcommand will carry out fa"
  },
  {
    "path": "docs/subcmd_index.rst",
    "chars": 1438,
    "preview": ".. _pyani-subcmd-index:\n\n===============\n``pyani index``\n===============\n\nThe ``index`` subcommand will index the genome"
  },
  {
    "path": "docs/subcmd_listdeps.rst",
    "chars": 822,
    "preview": ".. _pyani-subcmd-listdeps:\n\n==================\n``pyani listdeps``\n==================\n\nThe ``listdeps`` subcommand writes"
  },
  {
    "path": "docs/subcmd_plot.rst",
    "chars": 1558,
    "preview": ".. _pyani-subcmd-plot:\n\n==============\n``pyani plot``\n==============\n\nThe ``plot`` subcommand will plot the results of a"
  },
  {
    "path": "docs/subcmd_report.rst",
    "chars": 2037,
    "preview": ".. _pyani-subcmd-report:\n\n================\n``pyani report``\n================\n\nThe ``report`` subcommand reports the cont"
  },
  {
    "path": "docs/subcommands.rst",
    "chars": 744,
    "preview": ".. _pyani-subcommands:\n\n=====================\n``pyani`` subcommands\n=====================\n\n``pyani`` has a subcommand st"
  },
  {
    "path": "docs/testing.rst",
    "chars": 2884,
    "preview": ".. _pyani-testing:\n\n=======\nTesting\n=======\n\nWe are currently writing tests formatted for the `pytest`_ package, for tes"
  },
  {
    "path": "docs/using_a_scheduler.rst",
    "chars": 2109,
    "preview": ".. _pyani-using_a_scheduler:\n\n====================\nUse With a Scheduler\n====================\n\n^^^^^^^^^^^^^^^^\nOpen Grid"
  },
  {
    "path": "pyani/__init__.py",
    "chars": 1766,
    "preview": "# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019\n# Author: Leighton Pritchard\n#\n# Contact"
  },
  {
    "path": "pyani/anib.py",
    "chars": 25490,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pyani/aniblastall.py",
    "chars": 3921,
    "preview": "# -*- coding: utf-8 -*-\n# (c) University of Strathclyde 2021\n# Author: Leighton Pritchard\n#\n# Contact: leighton.pritchar"
  },
  {
    "path": "pyani/anim.py",
    "chars": 18787,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pyani/blast.py",
    "chars": 2541,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2019\n# (c) University of Strathclyde 2019\n# Author: Leighton Pr"
  },
  {
    "path": "pyani/dependencies.py",
    "chars": 3611,
    "preview": "# -*- coding: utf-8 -*-\n# (c) University of Strathclyde 2020-2024\n# Author: Leighton Pritchard\n#\n# Contact:\n# leighton.p"
  },
  {
    "path": "pyani/download.py",
    "chars": 19790,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pyani/fastani.py",
    "chars": 14801,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The University of Strathclyde 2021-2024\n# Authors: Bailey Harrington, Leighton Pritchard\n#"
  },
  {
    "path": "pyani/logger.py",
    "chars": 4304,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/nucmer.py",
    "chars": 11460,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pyani/pyani_classify.py",
    "chars": 6412,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/pyani_config.py",
    "chars": 6882,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) The University of Strathclude 2019-2024\n# Autho"
  },
  {
    "path": "pyani/pyani_files.py",
    "chars": 7719,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2013-2019\n# (c) University of Strathclyde 2019-2021\n# Author: L"
  },
  {
    "path": "pyani/pyani_graphics/__init__.py",
    "chars": 3206,
    "preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) The University of Strathc"
  },
  {
    "path": "pyani/pyani_graphics/mpl/__init__.py",
    "chars": 13814,
    "preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# (c) The University of Strathclyde 2019-2024\n# Author: Leighton Pritchard"
  },
  {
    "path": "pyani/pyani_graphics/sns/__init__.py",
    "chars": 9274,
    "preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# (c) The University of Strathclyde 2019\n# Author: Leighton Pritchard\n#\n# "
  },
  {
    "path": "pyani/pyani_jobs.py",
    "chars": 8574,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2013-2019\n# (c) University of Strathclyde 2019\n# Author: Leight"
  },
  {
    "path": "pyani/pyani_orm.py",
    "chars": 23903,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2018-2019\n# (c) The University of Strathclyde 2019-2024\n# Autho"
  },
  {
    "path": "pyani/pyani_report.py",
    "chars": 7432,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pyani/pyani_tools.py",
    "chars": 11053,
    "preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2013-2019\n# (c) The University of Strathc"
  },
  {
    "path": "pyani/run_multiprocessing.py",
    "chars": 5462,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2013-2019\n# (c) University of Strathclyde 2019\n# Author: Leight"
  },
  {
    "path": "pyani/run_sge.py",
    "chars": 12748,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2013-2019\n# (c) University of Strathclyde 2019\n# Author: Leight"
  },
  {
    "path": "pyani/scripts/__init__.py",
    "chars": 1559,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Modules to support use of pyani as a script.\"\"\"\n\nimport logging\nimport shutil\n\nfrom pathlib i"
  },
  {
    "path": "pyani/scripts/average_nucleotide_identity.py",
    "chars": 36095,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/delta_filter_wrapper.py",
    "chars": 3057,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/genbank_get_genomes_by_taxon.py",
    "chars": 29548,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/parsers/__init__.py",
    "chars": 4917,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/anib_parser.py",
    "chars": 3857,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/aniblastall_parser.py",
    "chars": 2726,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/anim_parser.py",
    "chars": 3806,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/classify_parser.py",
    "chars": 4465,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/common_parser.py",
    "chars": 2975,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/createdb_parser.py",
    "chars": 2657,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/download_parser.py",
    "chars": 5653,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/fastani_parser.py",
    "chars": 6642,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The University of Strathclyde 2021–Present\n# Author: Bailey Harrington\n#\n# Contact: bailey"
  },
  {
    "path": "pyani/scripts/parsers/index_parser.py",
    "chars": 3019,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/listdeps_parser.py",
    "chars": 2412,
    "preview": "# -*- coding: utf-8 -*-\n# (c) University of Strathclyde 2020\n# Author: Leighton Pritchard\n#\n# Contact:\n# leighton.pritch"
  },
  {
    "path": "pyani/scripts/parsers/plot_parser.py",
    "chars": 3894,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2022\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/report_parser.py",
    "chars": 4559,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2022\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/run_common_parser.py",
    "chars": 2894,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/parsers/scheduling_parser.py",
    "chars": 3047,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019-2020\n# Author: L"
  },
  {
    "path": "pyani/scripts/pyani_script.py",
    "chars": 6937,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/__init__.py",
    "chars": 2022,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyde 2019\n# Author: Leight"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_anib.py",
    "chars": 11681,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_aniblastall.py",
    "chars": 1825,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_anim.py",
    "chars": 17113,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_classify.py",
    "chars": 6372,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_createdb.py",
    "chars": 2636,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_download.py",
    "chars": 14504,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2016-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_fastani.py",
    "chars": 18489,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The University of Strathclyde 2021–2024\n# Authors: Leighton Pritchard, Bailey Harrington\n#"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_index.py",
    "chars": 4115,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_listdeps.py",
    "chars": 3160,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) University of Strathclyde 2020\n# Author: Leighton Pritchard\n#\n# Con"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_plot.py",
    "chars": 9948,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/scripts/subcommands/subcmd_report.py",
    "chars": 14612,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "pyani/tetra.py",
    "chars": 7846,
    "preview": "# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyde 2019-2024\n# Author: L"
  },
  {
    "path": "pytest.ini",
    "chars": 181,
    "preview": "# pytest.ini for pyani\n[pytest]\nmarkers =\n    slow: marks tests as slow (deselect with '-m \"not slow\"')\n    skip_if_exe_"
  },
  {
    "path": "requirements-dev.txt",
    "chars": 154,
    "preview": "bandit\nblack\nblacken-docs\ncodecov\ncoverage\ndoc8\nflake8\njinja2\nmypy\npandas-stubs\npre-commit\npydocstyle\npylint\npytest\npyte"
  },
  {
    "path": "requirements-fastani-linux.txt",
    "chars": 16,
    "preview": "gsl=2.7\nfastani\n"
  },
  {
    "path": "requirements-fastani-macos.txt",
    "chars": 27,
    "preview": "gsl=2.7=h93259b0_0\nfastani\n"
  },
  {
    "path": "requirements-pip.txt",
    "chars": 34,
    "preview": "pytest-ordering\nsphinx-rtd-theme\n\n"
  },
  {
    "path": "requirements-pyqt-conda.txt",
    "chars": 11,
    "preview": "ete3\npyqt\n\n"
  },
  {
    "path": "requirements-pyqt-pip.txt",
    "chars": 11,
    "preview": "ete3\nPyQt5\n"
  },
  {
    "path": "requirements-thirdparty-linux.txt",
    "chars": 31,
    "preview": "blast\nblast-legacy\nmummer=3.23\n"
  },
  {
    "path": "requirements-thirdparty-macos.txt",
    "chars": 31,
    "preview": "blast\nblast-legacy\nmummer=3.23\n"
  },
  {
    "path": "requirements.txt",
    "chars": 120,
    "preview": "biopython\nintervaltree\nmatplotlib\nnamedlist\nnetworkx\nnumpy\nopenpyxl\npandas\nPillow\npyarrow\nscipy\nseaborn\nsqlalchemy\ntqdm\n"
  },
  {
    "path": "setup.py",
    "chars": 4382,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The James Hutton Institute 2017-2019\n# (c) University of Strathclyd"
  },
  {
    "path": "tests/README.md",
    "chars": 2112,
    "preview": "# README.md - pyani/tests\n\nThis README describes the `pyani` testing suite\n\n## Testing `pyani`\n\n### Dependencies\n\nThe te"
  },
  {
    "path": "tests/conftest.py",
    "chars": 33927,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# (c) The University of Strathclude 2019-2024\n# Author: Leighton Pritchar"
  },
  {
    "path": "tests/fixtures/anib/NC_002696-fragments.fna",
    "chars": 4529117,
    "preview": ">frag00001 NC_002696_part_1 gi|16124256|ref|NC_002696.2| Caulobacter crescentus CB15 chromosome, complete genome\nGAATTCT"
  },
  {
    "path": "tests/fixtures/anib/NC_002696_vs_NC_010338.blast_tab",
    "chars": 795547,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t81.63\t920\t166\t2\t101\t1020\t5418723\t5417807\t0.0\t 903\nfrag00003\tgi|167643973|ref|NC_"
  },
  {
    "path": "tests/fixtures/anib/NC_002696_vs_NC_011916.blast_tab",
    "chars": 1666466,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t1020\t0\t100.000\t1020\t1020\t4042929\t1\t1020\t1\t1020\t1020\t100.00\t0\nfrag00003\tgi|221232"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_002696_vs_NC_010338.blast_tab",
    "chars": 795547,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t81.63\t920\t166\t2\t101\t1020\t5418723\t5417807\t0.0\t 903\nfrag00003\tgi|167643973|ref|NC_"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_002696_vs_NC_011916.blast_tab",
    "chars": 1318561,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t100.00\t1020\t0\t0\t1\t1020\t1\t1020\t0.0\t1618\nfrag00003\tgi|221232939|ref|NC_011916.1|\t1"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_002696_vs_NC_014100.blast_tab",
    "chars": 946273,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t86.12\t994\t134\t2\t30\t1020\t4615779\t4614787\t0.0\t1117\nfrag00003\tgi|295687459|ref|NC_0"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_010338_vs_NC_002696.blast_tab",
    "chars": 687823,
    "preview": "frag00001\tNC_002696_part_2\t73.74\t910\t213\t7\t126\t1020\t4328\t5226\t1e-168\t 589\nfrag00002\tNC_002696_part_2\t85.90\t830\t117\t0\t1\t8"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_010338_vs_NC_011916.blast_tab",
    "chars": 805426,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t73.74\t910\t213\t7\t126\t1020\t5378\t6276\t1e-168\t 589\nfrag00002\tgi|221232939|ref|NC_011"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_010338_vs_NC_014100.blast_tab",
    "chars": 854766,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t80.15\t650\t105\t4\t389\t1020\t20\t663\t1e-157\t 553\nfrag00001\tgi|295687459|ref|NC_014100"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_011916_vs_NC_002696.blast_tab",
    "chars": 1119766,
    "preview": "frag00001\tNC_002696_part_1\t100.00\t1020\t0\t0\t1\t1020\t1\t1020\t0.0\t1618\nfrag00002\tNC_002696_part_2\t100.00\t990\t0\t0\t31\t1020\t1\t99"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_011916_vs_NC_010338.blast_tab",
    "chars": 806968,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t81.63\t920\t166\t2\t101\t1020\t5418723\t5417807\t0.0\t 903\nfrag00002\tgi|167643973|ref|NC_"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_011916_vs_NC_014100.blast_tab",
    "chars": 950660,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t86.12\t994\t134\t2\t30\t1020\t4615779\t4614787\t0.0\t1117\nfrag00002\tgi|295687459|ref|NC_0"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_014100_vs_NC_002696.blast_tab",
    "chars": 801383,
    "preview": "frag00001\tNC_002696_part_2\t88.67\t1006\t111\t1\t7\t1012\t4573\t5575\t0.0\t1222\nfrag00002\tNC_002696_part_2\t80.22\t1021\t187\t4\t1\t1020"
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_014100_vs_NC_010338.blast_tab",
    "chars": 855263,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t83.73\t1002\t139\t4\t20\t1015\t389\t1372\t0.0\t1003\nfrag00002\tgi|167643973|ref|NC_010338."
  },
  {
    "path": "tests/fixtures/anib/blastall/NC_014100_vs_NC_011916.blast_tab",
    "chars": 938950,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t88.67\t1006\t111\t1\t7\t1012\t5623\t6625\t0.0\t1222\nfrag00002\tgi|221232939|ref|NC_011916."
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_002696_vs_NC_010338.blast_tab",
    "chars": 863927,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t845\t132\t84.024\t710\t1020\t5477872\t176\t1020\t5418648\t5417807\t710\t84.02\t3\nfrag00003\tg"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_002696_vs_NC_011916.blast_tab",
    "chars": 1666466,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t1020\t0\t100.000\t1020\t1020\t4042929\t1\t1020\t1\t1020\t1020\t100.00\t0\nfrag00003\tgi|221232"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_002696_vs_NC_014100.blast_tab",
    "chars": 1099142,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t983\t129\t86.470\t850\t1020\t4655622\t41\t1020\t4615768\t4614787\t850\t86.47\t4\nfrag00003\tgi"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_010338_vs_NC_002696.blast_tab",
    "chars": 775360,
    "preview": "frag00001\tNC_002696_part_2\t925\t165\t76.108\t704\t1020\t4015897\t126\t1020\t4328\t5226\t704\t76.11\t56\nfrag00002\tNC_002696_part_2\t83"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_010338_vs_NC_011916.blast_tab",
    "chars": 884398,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t925\t165\t76.108\t704\t1020\t4042929\t126\t1020\t5378\t6276\t704\t76.11\t56\nfrag00002\tgi|221"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_010338_vs_NC_014100.blast_tab",
    "chars": 844812,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t666\t101\t80.931\t539\t1020\t4655622\t375\t1020\t4\t663\t539\t80.93\t26\nfrag00001\tgi|2956874"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_011916_vs_NC_002696.blast_tab",
    "chars": 1456571,
    "preview": "frag00001\tNC_002696_part_1\t1020\t0\t100.000\t1020\t1020\t1050\t1\t1020\t1\t1020\t1020\t100.00\t0\nfrag00002\tNC_002696_part_2\t990\t0\t10"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_011916_vs_NC_010338.blast_tab",
    "chars": 891528,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t845\t132\t84.024\t710\t1020\t5477872\t176\t1020\t5418648\t5417807\t710\t84.02\t3\nfrag00002\tg"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_011916_vs_NC_014100.blast_tab",
    "chars": 1114257,
    "preview": "frag00001\tgi|295687459|ref|NC_014100.1|\t983\t129\t86.470\t850\t1020\t4655622\t41\t1020\t4615768\t4614787\t850\t86.47\t4\nfrag00002\tgi"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_014100_vs_NC_002696.blast_tab",
    "chars": 969253,
    "preview": "frag00001\tNC_002696_part_2\t1006\t111\t88.668\t892\t1020\t4015897\t7\t1012\t4573\t5575\t892\t88.67\t3\nfrag00002\tNC_002696_part_2\t1022"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_014100_vs_NC_010338.blast_tab",
    "chars": 843079,
    "preview": "frag00001\tgi|167643973|ref|NC_010338.1|\t1018\t135\t84.185\t857\t1020\t5477872\t4\t1015\t375\t1372\t857\t84.18\t26\nfrag00002\tgi|16764"
  },
  {
    "path": "tests/fixtures/anib/blastn/NC_014100_vs_NC_011916.blast_tab",
    "chars": 1105640,
    "preview": "frag00001\tgi|221232939|ref|NC_011916.1|\t1006\t111\t88.668\t892\t1020\t4042929\t7\t1012\t5623\t6625\t892\t88.67\t3\nfrag00002\tgi|22123"
  },
  {
    "path": "tests/fixtures/anib/dataframes/blastall_result.csv",
    "chars": 204,
    "preview": ",NC_002696,NC_010338,NC_011916,NC_014100\nNC_002696,1.0,0.78579,0.999977,0.830641\nNC_010338,0.781319,1.0,0.781281,0.78272"
  },
  {
    "path": "tests/fixtures/anib/dataframes/blastn_result.csv",
    "chars": 203,
    "preview": ",NC_002696,NC_010338,NC_011916,NC_014100\nNC_002696,1.0,0.796974,0.999977,0.837285\nNC_010338,0.795958,1.0,0.795917,0.7982"
  },
  {
    "path": "tests/fixtures/anib/fragfiles/NC_002696-fragments.fna",
    "chars": 4529117,
    "preview": ">frag00001 NC_002696_part_1 gi|16124256|ref|NC_002696.2| Caulobacter crescentus CB15 chromosome, complete genome\nGAATTCT"
  },
  {
    "path": "tests/fixtures/anib/fragfiles/NC_010338-fragments.fna",
    "chars": 6047189,
    "preview": ">frag00001 gi|167643973|ref|NC_010338.1| Caulobacter sp. K31 chromosome, complete genome\nTAGCGAAATCAAAGACTTAGAAGAGCCGGCC"
  },
  {
    "path": "tests/fixtures/anib/fragfiles/NC_011916-fragments.fna",
    "chars": 4459144,
    "preview": ">frag00001 gi|221232939|ref|NC_011916.1| Caulobacter crescentus NA1000, complete genome\nGAATTCTTAACGTCCTGAGACACGACAGCGAC"
  },
  {
    "path": "tests/fixtures/anib/fragfiles/NC_014100-fragments.fna",
    "chars": 5185151,
    "preview": ">frag00001 gi|295687459|ref|NC_014100.1| Caulobacter segnis ATCC 21756 chromosome, complete genome\nTTTACGAGGCGGTGGACGAAT"
  },
  {
    "path": "tests/fixtures/anib/sequences/NC_002696.fna",
    "chars": 4074538,
    "preview": ">NC_002696_part_1 gi|16124256|ref|NC_002696.2| Caulobacter crescentus CB15 chromosome, complete genome\nGAATTCTTAACGTCCTG"
  },
  {
    "path": "tests/fixtures/anib/sequences/NC_010338.fna",
    "chars": 5556207,
    "preview": ">gi|167643973|ref|NC_010338.1| Caulobacter sp. K31 chromosome, complete genome\nTAGCGAAATCAAAGACTTAGAAGAGCCGGCCGAGGAAACTC"
  },
  {
    "path": "tests/fixtures/anib/sequences/NC_011916.fna",
    "chars": 4100764,
    "preview": ">gi|221232939|ref|NC_011916.1| Caulobacter crescentus NA1000, complete genome\nGAATTCTTAACGTCCTGAGACACGACAGCGACCTCTGACCGG"
  },
  {
    "path": "tests/fixtures/anib/sequences/NC_014100.fna",
    "chars": 4722220,
    "preview": ">gi|295687459|ref|NC_014100.1| Caulobacter segnis ATCC 21756 chromosome, complete genome\nTTTACGAGGCGGTGGACGAATGACGATGAAG"
  },
  {
    "path": "tests/fixtures/anim/NC_002696_vs_NC_011916.delta",
    "chars": 4601,
    "preview": "/Users/lpritc/Development/GitHub/scripts/bioinformatics/test_ani_data/NC_002696.fna /Users/lpritc/Development/GitHub/scr"
  },
  {
    "path": "tests/fixtures/anim/dataframes/deltadir_result.csv",
    "chars": 225,
    "preview": ",NC_002696,NC_010338,NC_011916,NC_014100\nNC_002696,1.000000,0.851182,0.999974,0.868019\nNC_010338,0.851140,1.000000,0.851"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.delta",
    "chars": 102213,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_010338.filter",
    "chars": 100899,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.delta",
    "chars": 4693,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_011916.filter",
    "chars": 756,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.delta",
    "chars": 126433,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_002696/NC_002696_vs_NC_014100.filter",
    "chars": 125216,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_002696.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_002696.delta",
    "chars": 101118,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_002696.filter",
    "chars": 99821,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.delta",
    "chars": 101187,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_011916.filter",
    "chars": 99837,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.delta",
    "chars": 111707,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_010338/NC_010338_vs_NC_014100.filter",
    "chars": 110027,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_010338.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_002696.delta",
    "chars": 4691,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_002696.filter",
    "chars": 759,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_010338.delta",
    "chars": 102282,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_010338.filter",
    "chars": 100916,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.delta",
    "chars": 126403,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/NC_011916_vs_NC_014100.filter",
    "chars": 125137,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.1coords",
    "chars": 157382,
    "preview": "69\t3896\t4615741\t4611885\t3828\t3857\t84.52\t4042929\t4655622\t0.09\t0.08\tgi|221232939|ref|NC_011916.1|\tgi|295687459|ref|NC_0141"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.1delta",
    "chars": 125137,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.mcoords",
    "chars": 157382,
    "preview": "69\t3896\t4615741\t4611885\t3828\t3857\t84.52\t4042929\t4655622\t0.09\t0.08\tgi|221232939|ref|NC_011916.1|\tgi|295687459|ref|NC_0141"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.mdelta",
    "chars": 125137,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.qdiff",
    "chars": 72408,
    "preview": "gi|295687459|ref|NC_014100.1|\tBRK\t1\t6\t6\ngi|295687459|ref|NC_014100.1|\tGAP\t1494\t5022\t3529\t775\t2754\ngi|295687459|ref|NC_01"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.rdiff",
    "chars": 72361,
    "preview": "gi|221232939|ref|NC_011916.1|\tBRK\t1\t68\t68\ngi|221232939|ref|NC_011916.1|\tINV\t3897\t4021\t125\ngi|221232939|ref|NC_011916.1|\t"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/out.report",
    "chars": 4266,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_011916/test.filter1",
    "chars": 125137,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_011916.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_014100/NC_014100_vs_NC_002696.delta",
    "chars": 125922,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_014100.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_014100/NC_014100_vs_NC_002696.filter",
    "chars": 124695,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_014100.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_014100/NC_014100_vs_NC_010338.delta",
    "chars": 113483,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_014100.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_014100/NC_014100_vs_NC_010338.filter",
    "chars": 111796,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_014100.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/deltadir/NC_014100/NC_014100_vs_NC_011916.delta",
    "chars": 125883,
    "preview": "/Users/lpritc/Documents/Development/GitHub/pyani/tests/fixtures/anim/sequences/NC_014100.fna /Users/lpritc/Documents/Dev"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_002696.fna",
    "chars": 4074538,
    "preview": ">NC_002696_part_1 gi|16124256|ref|NC_002696.2| Caulobacter crescentus CB15 chromosome, complete genome\nGAATTCTTAACGTCCTG"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_002696.fna.md5",
    "chars": 77,
    "preview": "f19cb07198a41a4406a22b2f57a6b5e7\ttests/fixtures/anim/sequences/NC_002696.fna\n"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_010338.fna",
    "chars": 5556207,
    "preview": ">gi|167643973|ref|NC_010338.1| Caulobacter sp. K31 chromosome, complete genome\nTAGCGAAATCAAAGACTTAGAAGAGCCGGCCGAGGAAACTC"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_010338.fna.md5",
    "chars": 77,
    "preview": "073194224aa8c13bebc1d14a3e74a3e7\ttests/fixtures/anim/sequences/NC_010338.fna\n"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_011916.fna",
    "chars": 4100764,
    "preview": ">gi|221232939|ref|NC_011916.1| Caulobacter crescentus NA1000, complete genome\nGAATTCTTAACGTCCTGAGACACGACAGCGACCTCTGACCGG"
  },
  {
    "path": "tests/fixtures/anim/sequences/NC_011916.fna.md5",
    "chars": 77,
    "preview": "9d72a8fb513cf9cc8cc6605a0ad4e837\ttests/fixtures/anim/sequences/NC_011916.fna\n"
  }
]

// ... and 310 more files (download for full content)

About this extraction

This page contains the full source code of the widdowquinn/pyani GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 510 files (346.1 MB), approximately 26.3M tokens, and a symbol index with 370 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!