gapit 0.5.6__tar.gz → 0.6.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gapit-0.5.6 → gapit-0.6.2}/.github/workflows/ci.yml +20 -2
- gapit-0.6.2/.github/workflows/release.yml +54 -0
- {gapit-0.5.6 → gapit-0.6.2}/AGENTS.md +34 -16
- {gapit-0.5.6 → gapit-0.6.2}/CHANGELOG.md +120 -0
- gapit-0.6.2/CITATION.cff +18 -0
- gapit-0.6.2/CODE_QUALITY_REPORT.md +771 -0
- gapit-0.6.2/CONTRIBUTING.md +52 -0
- {gapit-0.5.6 → gapit-0.6.2}/PKG-INFO +36 -19
- {gapit-0.5.6 → gapit-0.6.2}/PLAN.md +6 -1
- {gapit-0.5.6 → gapit-0.6.2}/README.md +32 -14
- gapit-0.6.2/SECURITY.md +42 -0
- {gapit-0.5.6 → gapit-0.6.2}/SPEC.md +5 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/agents.md +9 -6
- {gapit-0.5.6 → gapit-0.6.2}/docs/agents.zh.md +7 -4
- {gapit-0.5.6 → gapit-0.6.2}/docs/custom-db.md +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/custom-db.zh.md +3 -3
- {gapit-0.5.6 → gapit-0.6.2}/docs/databases.md +38 -17
- {gapit-0.5.6 → gapit-0.6.2}/docs/databases.zh.md +39 -22
- gapit-0.6.2/docs/datadir.md +226 -0
- gapit-0.6.2/docs/datadir.zh.md +209 -0
- {gapit-0.5.6 → gapit-0.6.2}/docs/faq.md +7 -3
- {gapit-0.5.6 → gapit-0.6.2}/docs/faq.zh.md +8 -4
- gapit-0.6.2/docs/gseek-engine.md +74 -0
- gapit-0.6.2/docs/gseek-engine.zh.md +63 -0
- {gapit-0.5.6 → gapit-0.6.2}/docs/index.md +2 -0
- {gapit-0.5.6 → gapit-0.6.2}/docs/index.zh.md +2 -0
- {gapit-0.5.6 → gapit-0.6.2}/docs/installation.md +22 -9
- {gapit-0.5.6 → gapit-0.6.2}/docs/installation.zh.md +24 -11
- {gapit-0.5.6 → gapit-0.6.2}/docs/mcp.md +20 -16
- {gapit-0.5.6 → gapit-0.6.2}/docs/mcp.zh.md +20 -14
- {gapit-0.5.6 → gapit-0.6.2}/docs/outputs.md +11 -7
- {gapit-0.5.6 → gapit-0.6.2}/docs/outputs.zh.md +13 -9
- {gapit-0.5.6 → gapit-0.6.2}/docs/quickstart.md +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/quickstart.zh.md +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/reads.md +9 -9
- {gapit-0.5.6 → gapit-0.6.2}/docs/reads.zh.md +13 -13
- {gapit-0.5.6 → gapit-0.6.2}/docs/screen.md +6 -6
- {gapit-0.5.6 → gapit-0.6.2}/docs/screen.zh.md +10 -10
- {gapit-0.5.6 → gapit-0.6.2}/docs/summary.md +5 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/summary.zh.md +5 -2
- {gapit-0.5.6 → gapit-0.6.2}/docs/typing.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/docs/typing.zh.md +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/mkdocs.yml +5 -0
- {gapit-0.5.6 → gapit-0.6.2}/pixi.lock +113 -427
- {gapit-0.5.6 → gapit-0.6.2}/pixi.toml +12 -17
- {gapit-0.5.6 → gapit-0.6.2}/pyproject.toml +11 -6
- {gapit-0.5.6 → gapit-0.6.2}/scripts/generate_vp_typing.py +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/__init__.py +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/blast.py +37 -20
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/bundled.py +10 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/bundled_cluster.py +23 -14
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cli.py +54 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cluster.py +10 -3
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/clusterbuild.py +67 -3
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_db.py +32 -4
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_screen.py +22 -2
- gapit-0.6.2/src/gapit/config.py +84 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoh/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoli_dec/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/lm_doumith/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ncbi/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/resfinder/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vc_serogroup/bundled.json +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/db.py +57 -28
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/db_build_ops.py +39 -18
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/db_ops.py +46 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/db_query_ops.py +6 -3
- gapit-0.6.2/src/gapit/db_txn.py +125 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/dbbuild.py +47 -9
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/cluster.py +7 -6
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/cluster2.py +22 -9
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/cluster_md.py +2 -2
- gapit-0.6.2/src/gapit/formats/csvutil.py +38 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/md.py +25 -4
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/reads_tsv.py +8 -4
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/summary.py +16 -7
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/tsv.py +11 -8
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/typing_result.py +6 -5
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/fragments.py +18 -6
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/gbfeatures.py +13 -6
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/gene_floors.py +27 -15
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/gffparse.py +7 -0
- gapit-0.6.2/src/gapit/gseek_engine.py +371 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/mcp.py +3 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/mcp_schemas.py +8 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/mcp_tools.py +19 -5
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/minimap2_run.py +96 -30
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/paf.py +50 -34
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/progress.py +4 -3
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/cluster_common.py +47 -29
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/common.py +95 -29
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/megares.py +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/plasmidfinder.py +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/resfinder.py +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/vfdb.py +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/victors.py +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/readpairs.py +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/reads.py +6 -6
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/records.py +19 -2
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/screening.py +22 -7
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/summary.py +21 -4
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_input.py +21 -6
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_models.py +30 -1
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_results.py +3 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_none.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_none.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_o3k6.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_o3k6.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_exact.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_exact.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_fragmented.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_fragmented.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_ambiguous.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_ambiguous.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_cm_exact.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_cm_exact.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_exact.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_exact.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_vc_inaba.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_vc_inaba.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/fragments_merge.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/fragments_merge.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_dec_pic_astA.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_dec_pic_astA.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_doumith_4b.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_doumith_4b.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_l4b.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_l4b.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_mixed.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_mixed.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_vp_typed.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_serotyping_vp_typed.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_shigella_mixed.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_shigella_mixed.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_typing_exact.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/gene_typing_exact.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/reads_tinyamr.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/reads_tinyamr.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/screen_multi.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/screen_multi.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/summary_multi.json +4 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/summary_multi.md +2 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/typing_markers.json +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/typing_markers.md +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_blast_parse.py +10 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_bundled.py +33 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_aligner.py +48 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_db_build.py +19 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_db_fetch.py +34 -4
- gapit-0.6.2/tests/test_cli_db_path.py +70 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_schema.py +10 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_setupdb.py +26 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster2_build.py +38 -1
- gapit-0.6.2/tests/test_cluster_build_validation.py +120 -0
- gapit-0.6.2/tests/test_config.py +109 -0
- gapit-0.6.2/tests/test_csv_contract.py +184 -0
- gapit-0.6.2/tests/test_db_field_validation.py +76 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_db_list_extras.py +63 -0
- gapit-0.6.2/tests/test_db_txn.py +210 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_dbbuild.py +8 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_error_envelope.py +22 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_fragments.py +36 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gbfeatures.py +21 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gffparse.py +33 -0
- gapit-0.6.2/tests/test_gseek_engine.py +501 -0
- gapit-0.6.2/tests/test_gseek_parity.py +133 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_mcp.py +26 -8
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_mcp_db_tools.py +62 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_mcp_reads.py +11 -3
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_md_format.py +25 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_paf.py +10 -0
- gapit-0.6.2/tests/test_parser_fuzz.py +131 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_vfdb.py +1 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_victors.py +2 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_providers_common.py +73 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_readpairs.py +14 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads_streaming.py +64 -1
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_summary_formats.py +14 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_tsv.py +3 -2
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_models.py +42 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_vp_ok.py +1 -1
- gapit-0.5.6/.github/workflows/release.yml +0 -28
- gapit-0.5.6/recipe/meta.yaml +0 -70
- gapit-0.5.6/src/gapit/config.py +0 -51
- gapit-0.5.6/src/gapit/data/typing/vp_ok.json +0 -1830
- gapit-0.5.6/stderr.txt +0 -7
- gapit-0.5.6/tests/test_config.py +0 -47
- {gapit-0.5.6 → gapit-0.6.2}/.gitattributes +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/.github/workflows/docs.yml +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/.gitignore +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/LICENSE +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/scripts/cluster_calibration.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/scripts/vp_rules_matrix.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/scripts/vp_typing_support.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cluster_math.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_db_build.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_db_install.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_db_outdated.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_db_search.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_screen_positionals.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_screen_reads_args.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_summary.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/cmd_typing.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoh/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoli_dec/floors.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoli_dec/records.jsonl +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoli_dec/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ecoli_dec/typing.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/lm_doumith/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/lm_doumith/typing.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/ncbi/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/resfinder/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vc_serogroup/floors.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vc_serogroup/records.jsonl +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vc_serogroup/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vc_serogroup/typing.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vp_ok/bundled.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vp_ok/features.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vp_ok/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/data/dbs/vp_ok/typing.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/db_build_meta.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/dbcodec.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/dispatch.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/engines.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/errors.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/fasta.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/__init__.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/json.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/reads_json.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/formats/schemas.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/hits.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/minimap.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/proctools.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/__init__.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ab_k.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ab_o.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/argannot.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/bacmet2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/card.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ecoh.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ecoli_kps.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ecoli_vf.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/kosc_k.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/kosc_o.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/kpsc_k.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/kpsc_o.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/ncbi.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/providers/upec_expec_vf.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/py.typed +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/report.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/screening_cluster.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/screening_reads.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/screening_reads_positional.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/seqconvert.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_cluster2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_decide.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_engine.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_gene.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_ops.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/src/gapit/typing_rules.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/bundled_differential/resfinder/HEAD.zip +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/bundled_differential/resfinder/README.md +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/bakta_style.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/clusters.gff3 +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/clusters_gz.gff3.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/clusters_sidecar.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/clusters_sidecar.gff3 +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/colliding_genes.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/compound.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/gz_input.gbk.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/kaptive_style.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/nofasta.gff3 +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/screening.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/typing_invalid.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/typing_screen.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/typing_screen_cm.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/typing_screen_v2.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/typing_valid.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/cluster/unnamed_cds.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/contigs/full.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/contigs/gap.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/contigs/none.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/contigs/partial.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/contigs/sort.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.embl +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.embl.bz2 +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.fa.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/convert/sample.gbk.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/db/tinyamr/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/fragments/fragdb/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/fragments/split3040.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/fragments/split4060.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/fragments/split5050.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/argannot/ARG-ANNOT_NT_V6_July2019.txt +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/bacmet2/BacMet2_EXP_database.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/card/card.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/ecoh/EcOH.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/ecoli_vf/repaired_ecoli_vfs_shortnames.ffn +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/megares/megares_drugs_demo.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/ncbi/AMR_CDS.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/ncbi/ReferenceGeneCatalog.txt +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/plasmidfinder/plasmids_a.fsa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/plasmidfinder/plasmids_b.fsa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/resfinder/aminoglycoside.fsa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/resfinder/beta-lactam.fsa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/resfinder/phenotypes.txt +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/upec_expec_vf/UPEC_ExPEC_VF.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/vfdb/VFDB_setA_nt.fas +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/victors/gen_downloads.php +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/providers/victors/gen_downloads_protein.php +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/bla_partial.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/junk.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/s1_1.fq.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/s1_2.fq.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/s2_R1.fq.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/s2_R2.fq.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/suly_partial.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_R1.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_R2.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_full.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_full.fq.gz +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_lane1.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_lane2.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_pe1_R1.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_pe1_R2.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_pe2_R1.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads/tetx_pe2_R2.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads2/ont_homologs.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads2/sr_homologs.fq +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads2_db/homologs/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/reads_db/tinyreads/sequences +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/empty.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/multi_sample.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/sample_a.csv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/sample_a.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/sample_b.csv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/summary/sample_b.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/dec_s1_aggR_pic_uidA.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/dec_s2_pic_astA_uidA.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/dec_s3_stx2a_escV_aggR_uidA.fasta +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/exact.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/listeria_1c.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/listeria_4b.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/listeria_nogate.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/markers.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/mutated.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/negative.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/partial.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/cholerae.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/cholerae.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/dec.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/dec.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/doumith.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/doumith.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/lm_doumith.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/lm_doumith.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/meningotype.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/meningotype.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/shigella.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/shigella.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/vp_ok.gbk +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/schemes/vp_ok.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/serotyping.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/typing_markers_v1.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/typing_markers_v2.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/typing_serotyping_v2.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/vp_mixed.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/data/typing/vp_typed.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_none.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster2_vp_o3k6.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_exact.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_fragmented.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_ambiguous.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_cm_exact.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_typing_exact.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/cluster_vc_inaba.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/ecoli_dec_typed.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/ecoli_dec_typing.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/features_kaptive_style.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/features_screening.json +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/fragments_merge.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/lm_doumith_typing.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/summary_dutch.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/summary_multi.csv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/summary_multi.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/tinyamr_multi_nopath.csv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/tinyamr_multi_nopath.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/typing_markers.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/golden/typing_serotyping.tsv +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/corpus/01_exact_and_junk.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/corpus/02_mutated.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/corpus/03_truncated.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/corpus/04_reverse.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/corpus/05_threshold.fa +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/make_corpus.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/run_parity.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/parity/run_summary_parity.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_blast_pipeline.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_bare_help.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_completion.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_db_build_cluster.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_db_query.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_fragments.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_reads.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_reads2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_reads_glob.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_reads_glob_jobs.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_screen.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_screen_jobs.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_short_options.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cli_summary.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster_calibration.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster_db.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster_math.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster_screen.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_cluster_typing.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_db.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_db_fetch.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_db_headers.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_dbcodec.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_fasta.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gapit_db_e2e.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gene_floors.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gene_floors_e2e.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gene_typing.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_gene_typing2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_hits.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_json_format.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_lm_doumith.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_mcp_protocol.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_minimap.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_mol_type.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_oversubscription.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_paf_identity.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_progress.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_argannot.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_bacmet2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_card.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_ecoh.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_ecoli_vf.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_kaptive.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_megares.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_ncbi.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_plasmidfinder.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_resfinder.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_provider_upec_expec_vf.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads2_homologs.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads2_model.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads_aggregate.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads_integration.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_reads_interval_union.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_records.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_report.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_screen_integration.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_screening_reads_unit.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_seqconvert.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_seqconvert_differential.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_streaming_chunks.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_summary.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_command.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_engine.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_schemes.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_schemes_cluster.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_typing_stage2.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_vc_serogroup.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_version.py +0 -0
- {gapit-0.5.6 → gapit-0.6.2}/tests/test_vp_ok_acceptance.py +0 -0
|
@@ -4,6 +4,9 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches: [main]
|
|
6
6
|
pull_request:
|
|
7
|
+
schedule:
|
|
8
|
+
# Weekly clean-environment canary: no caches, locked dependencies.
|
|
9
|
+
- cron: "0 3 * * 1"
|
|
7
10
|
|
|
8
11
|
concurrency:
|
|
9
12
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
@@ -16,17 +19,32 @@ jobs:
|
|
|
16
19
|
strategy:
|
|
17
20
|
fail-fast: false
|
|
18
21
|
matrix:
|
|
19
|
-
env: [default
|
|
22
|
+
env: [default]
|
|
20
23
|
steps:
|
|
21
24
|
- uses: actions/checkout@v4
|
|
22
25
|
- uses: prefix-dev/setup-pixi@v0.8.1
|
|
23
26
|
with:
|
|
24
27
|
cache: true
|
|
25
28
|
- run: pixi run -e ${{ matrix.env }} lint
|
|
26
|
-
- run: pixi run -e ${{ matrix.env }} fmt
|
|
29
|
+
- run: pixi run -e ${{ matrix.env }} fmt-check
|
|
27
30
|
- run: pixi run -e ${{ matrix.env }} typecheck
|
|
28
31
|
- run: pixi run -e ${{ matrix.env }} test
|
|
29
32
|
|
|
33
|
+
clean-gates:
|
|
34
|
+
name: clean gates (no cache)
|
|
35
|
+
if: github.event_name == 'schedule'
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
- uses: prefix-dev/setup-pixi@v0.8.1
|
|
40
|
+
with:
|
|
41
|
+
cache: false
|
|
42
|
+
- run: pixi install --locked
|
|
43
|
+
- run: pixi run lint
|
|
44
|
+
- run: pixi run fmt-check
|
|
45
|
+
- run: pixi run typecheck
|
|
46
|
+
- run: pixi run test
|
|
47
|
+
|
|
30
48
|
# Independent of gates: the bioconda solve is slow and orthogonal to the
|
|
31
49
|
# python matrix. Needs BOTH envs installed — the harness runs on the default
|
|
32
50
|
# env's python and invokes .pixi/envs/default/bin/gapit while parity env
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
# OIDC token for PyPI trusted publishing (pypa/gh-action-pypi-publish).
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
gates:
|
|
15
|
+
name: release gates
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: prefix-dev/setup-pixi@v0.8.1
|
|
20
|
+
with:
|
|
21
|
+
cache: false
|
|
22
|
+
- run: pixi install --locked
|
|
23
|
+
- run: pixi run lint
|
|
24
|
+
- run: pixi run fmt-check
|
|
25
|
+
- run: pixi run typecheck
|
|
26
|
+
- run: pixi run test
|
|
27
|
+
|
|
28
|
+
publish:
|
|
29
|
+
needs: gates
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.12"
|
|
37
|
+
|
|
38
|
+
- name: Build sdist and wheel
|
|
39
|
+
run: |
|
|
40
|
+
python -m pip install --upgrade pip build twine
|
|
41
|
+
python -m build
|
|
42
|
+
|
|
43
|
+
- name: Check distributions
|
|
44
|
+
run: python -m twine check dist/*
|
|
45
|
+
|
|
46
|
+
- name: Install the built wheel and smoke-test it
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install dist/*.whl
|
|
49
|
+
gapit --version
|
|
50
|
+
gapit schema report > /dev/null
|
|
51
|
+
gapit db path --json > /dev/null
|
|
52
|
+
|
|
53
|
+
- name: Publish to PyPI
|
|
54
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -23,8 +23,8 @@ are we?** A modern, typed, testable Python tool that:
|
|
|
23
23
|
- **Environment manager**: [pixi](https://pixi.sh) (conda-forge channel). Never use pip/conda
|
|
24
24
|
directly; add dependencies to `pixi.toml` (`pixi add <pkg>` for conda, `pixi add --pypi <pkg>`
|
|
25
25
|
for PyPI).
|
|
26
|
-
- **Python**: 3.
|
|
27
|
-
`requires-python = ">=3.
|
|
26
|
+
- **Python**: 3.12 in the pixi dev env; the package declares
|
|
27
|
+
`requires-python = ">=3.12,<3.13"` and CI tests Python 3.12.
|
|
28
28
|
- **External binaries**: BLAST+ (`blastn`, `blastx`, `makeblastdb`, `blastdbcmd`) and `minimap2`
|
|
29
29
|
(FASTQ read screening, SPEC.md §10), all from conda-forge/bioconda. Invoked only via `subprocess`
|
|
30
30
|
with an argument list — never `shell=True`. Input normalization (fa/fq/gbk/embl, gz/bz2) is
|
|
@@ -33,6 +33,8 @@ are we?** A modern, typed, testable Python tool that:
|
|
|
33
33
|
`parity` pixi env (prepend `.pixi/envs/parity/bin` to PATH for the differential test).
|
|
34
34
|
- **Core libraries**: `click` (CLI), `pydantic` v2 (data models / JSON schema), `rich` (terminal
|
|
35
35
|
output). No biopython — FASTA I/O is a small streaming parser we own.
|
|
36
|
+
- **Optional engine**: `gseek` (`gapit[gseek]`, Python 3.12) behind `GAPIT_ENGINE`;
|
|
37
|
+
`legacy` remains the default and needs no gseek import.
|
|
36
38
|
- **Quality gates**: `ruff` (lint + format), `basedpyright` (strict mode), `pytest`.
|
|
37
39
|
|
|
38
40
|
### Commands (pixi tasks)
|
|
@@ -40,6 +42,7 @@ are we?** A modern, typed, testable Python tool that:
|
|
|
40
42
|
```bash
|
|
41
43
|
pixi run lint # ruff check
|
|
42
44
|
pixi run fmt # ruff format
|
|
45
|
+
pixi run fmt-check # ruff format --check
|
|
43
46
|
pixi run typecheck # basedpyright --strict
|
|
44
47
|
pixi run test # pytest (unit, offline)
|
|
45
48
|
pixi run gapit # the CLI itself
|
|
@@ -54,23 +57,27 @@ Every change must leave `lint`, `typecheck`, and `test` green.
|
|
|
54
57
|
```
|
|
55
58
|
gapit/
|
|
56
59
|
├── AGENTS.md # this file
|
|
57
|
-
├──
|
|
60
|
+
├── CONTRIBUTING.md # contributor workflow and gates
|
|
61
|
+
├── SECURITY.md # trust boundaries + vulnerability reporting
|
|
62
|
+
├── CITATION.cff # citation metadata
|
|
63
|
+
├── PLAN.md # historical development roadmap
|
|
58
64
|
├── SPEC.md # frozen contract for the baseline surface (distilled from abricate)
|
|
59
65
|
├── pixi.toml
|
|
60
66
|
├── recipe/
|
|
61
67
|
│ └── meta.yaml # conda recipe (submission deferred)
|
|
62
68
|
├── .github/workflows/
|
|
63
|
-
│ └── ci.yml # gates matrix 3.
|
|
69
|
+
│ └── ci.yml # gates matrix Python 3.12 + parity job
|
|
64
70
|
├── src/gapit/
|
|
65
71
|
│ ├── __init__.py
|
|
66
|
-
│ ├── cli.py #
|
|
67
|
-
│ ├── config.py # datadir resolution, defaults, env vars
|
|
72
|
+
│ ├── cli.py # click entrypoint: screen / summary / db / setupdb / schema / mcp
|
|
73
|
+
│ ├── config.py # datadir resolution, first-run bootstrap, defaults, env vars
|
|
68
74
|
│ ├── dispatch.py # shared CLI dispatch (error envelope → exit codes) + --datadir option + --output target
|
|
69
75
|
│ ├── proctools.py # external-tool plumbing: argv subprocess runner + stderr notes
|
|
70
76
|
│ ├── fasta.py # streaming FASTA reader + shared gz/bz2 text opener
|
|
71
77
|
│ ├── seqconvert.py # native input normalization: fa/fq/gbk/embl (±gz/bz2) → FASTA
|
|
72
78
|
│ ├── db.py # database discovery, header parsing, makeblastdb wrapper
|
|
73
79
|
│ ├── dbcodec.py # gapit/v1 tagged-header codec (percent-encoded ids)
|
|
80
|
+
│ ├── db_txn.py # per-db write lock + staging build + rename publish
|
|
74
81
|
│ ├── records.py # records.jsonl truth store + gapit.manifest/1 provenance
|
|
75
82
|
│ ├── dbbuild.py # deterministic native-db build pipeline with self-check
|
|
76
83
|
│ ├── clusterbuild.py # cluster-db build pipeline: GBK/GFF → locus FASTA + features.json + typing copy
|
|
@@ -100,19 +107,23 @@ gapit/
|
|
|
100
107
|
│ ├── paf.py # PAF row parsing + interval arithmetic (minimap2 output boundary)
|
|
101
108
|
│ ├── report.py # Report model: the canonical in-memory result
|
|
102
109
|
│ ├── engines.py # shared OutputFormat / AlignerEnum (leaf module for the three engines)
|
|
110
|
+
│ ├── gseek_engine.py # optional gseek bridge (legacy/gseek/shadow) for BLAST/minimap2
|
|
111
|
+
│ ├── progress.py # stderr-bound rich batch progress bar
|
|
103
112
|
│ ├── screening.py # blastn screen use-case + the shared run_screen dispatcher
|
|
104
113
|
│ ├── screening_cluster.py # cluster screen use-case: kind guards, typing wiring, rendering
|
|
105
114
|
│ ├── screening_reads.py # minimap2 use-cases: --r1/--r2 reads + --aligner minimap2 assemblies
|
|
115
|
+
│ ├── screening_reads_positional.py # positional FASTQ wildcard: pairing + per-sample screens
|
|
106
116
|
│ ├── typing_input.py # `gapit typing` input: screen TSV/CSV → per-FILE folded GeneCalls
|
|
107
117
|
│ ├── typing_ops.py # `gapit typing` use-case: resolve db, run the engine, render
|
|
108
118
|
│ ├── reads.py # FASTQ mode: minimap2 PAF parsing, coverage breadth/depth, presence
|
|
119
|
+
│ ├── readpairs.py # positional FASTQ filename → sample/lane inference
|
|
109
120
|
│ ├── summary.py # summary core: parse report tables into a gene matrix
|
|
110
121
|
│ ├── cmd_screen.py # `gapit screen` CLI (registered from cli.py)
|
|
111
122
|
│ ├── cmd_screen_positionals.py # screen positional guard: db-name-as-file usage error
|
|
112
123
|
│ ├── cmd_screen_reads_args.py # reads-mode CLI arg rules (comma split + flag rejects)
|
|
113
124
|
│ ├── cmd_summary.py # `gapit summary` CLI (registered from cli.py)
|
|
114
125
|
│ ├── cmd_typing.py # `gapit typing` CLI (registered from cli.py)
|
|
115
|
-
│ ├── cmd_db.py # `gapit db` command group (fetch
|
|
126
|
+
│ ├── cmd_db.py # `gapit db` command group (fetch/path/list/build/install/search/outdated)
|
|
116
127
|
│ ├── cmd_db_install.py # `gapit db install`: SHA256-verified local-file install
|
|
117
128
|
│ ├── cmd_db_build.py # `gapit db build` CLI (custom FASTA → native db)
|
|
118
129
|
│ ├── cmd_db_search.py # `gapit db search` CLI (records.jsonl lookup)
|
|
@@ -123,8 +134,10 @@ gapit/
|
|
|
123
134
|
│ ├── errors.py # typed errors + JSON error envelope
|
|
124
135
|
│ ├── formats/
|
|
125
136
|
│ │ ├── tsv.py # abricate-compatible TSV/CSV (phenotype-free in every typing version)
|
|
137
|
+
│ │ ├── csvutil.py # CSV RFC 4180 + TSV cell sanitization (streaming renderers)
|
|
126
138
|
│ │ ├── json.py # versioned JSON (gapit.report/1 et al.)
|
|
127
139
|
│ │ ├── reads_json.py # versioned JSON (gapit.reads/1, gapit.reads/2)
|
|
140
|
+
│ │ ├── reads_tsv.py # streaming reads TSV/CSV table
|
|
128
141
|
│ │ ├── md.py # Markdown (human + agent readable, YAML frontmatter)
|
|
129
142
|
│ │ ├── cluster.py # gapit.cluster/1 models + JSON/TSV renderers (typed variant)
|
|
130
143
|
│ │ ├── cluster2.py # gapit.cluster/2 models + JSON/TSV renderers (multi-scheme phenotypes map)
|
|
@@ -179,15 +192,15 @@ This is what distinguishes gapit from abricate. Treat it as a public API.
|
|
|
179
192
|
byte-identically), then `gapit typing result.tsv [-D|-f|-o|-q]` designates from the screen
|
|
180
193
|
table (`gapit.typing_result/1`; cluster dbs refuse — their typing rides the screen).
|
|
181
194
|
No typing MCP tool yet (future work).
|
|
182
|
-
- **DB acquisition** `[gapit-extension]`: `gapit db fetch|list|search|outdated|build|install` —
|
|
195
|
+
- **DB acquisition** `[gapit-extension]`: `gapit db fetch|path|list|search|outdated|build|install` —
|
|
183
196
|
database fetch from the provider catalog (every provider downloads from upstream at fetch
|
|
184
197
|
time — nothing catalog-side is bundled inside the wheel beyond the sanctioned exceptions,
|
|
185
198
|
a license-compliance requirement: CARD/VFDB terms are non-commercial and Kaptive is GPL,
|
|
186
|
-
so none of those may ride an MIT distribution; the sanctioned exceptions are the
|
|
199
|
+
so none of those may ride an MIT distribution; the sanctioned exceptions are the seven
|
|
187
200
|
content-provenance-audited bundles under `src/gapit/data/dbs/` — the public-domain
|
|
188
|
-
`ecoli_dec` and `
|
|
189
|
-
(`ncbi` public domain, `resfinder` Apache-2.0, `ecoh` BSD-3-Clause),
|
|
190
|
-
`vp_ok` typed cluster snapshot — a pure built-in in the ecoli_dec/lm_doumith pattern: no
|
|
201
|
+
`ecoli_dec`, `lm_doumith`, and `vc_serogroup` panels, three permissively licensed
|
|
202
|
+
provider snapshots (`ncbi` public domain, `resfinder` Apache-2.0, `ecoh` BSD-3-Clause),
|
|
203
|
+
and the MIT `vp_ok` typed cluster snapshot — a pure built-in in the ecoli_dec/lm_doumith pattern: no
|
|
191
204
|
provider module, no `db fetch`; vpautils OAgc+CPSgc merged content, MIT
|
|
192
205
|
(GPL/NC content is never bundled) — materialized into the datadir on first use via
|
|
193
206
|
`bundled.py` (gene bundles replay the gene pipeline, the cluster bundle the cluster
|
|
@@ -202,11 +215,16 @@ This is what distinguishes gapit from abricate. Treat it as a public API.
|
|
|
202
215
|
MIT-licensed `vp_ok` typed cluster bundle (OAgc+CPSgc merged: the committed typing asset
|
|
203
216
|
installs a 3-scheme `gapit.typing/2` doc so one screen renders `gapit.cluster/2` with
|
|
204
217
|
the composed `O:K` serotype, zero network from first install), and SHA256-verified
|
|
205
|
-
local-file install.
|
|
218
|
+
local-file install. Datadir precedence is `--datadir`, `$GAPIT_DATADIR`,
|
|
219
|
+
`$XDG_DATA_HOME/gapit/db` (absolute XDG only), then `~/.local/share/gapit/db`;
|
|
220
|
+
`gapit db path [--json]` introspects it without creating, while `db list`/`setupdb`
|
|
221
|
+
bootstrap a missing root. See `docs/datadir.md` for the database anatomy, sharing and
|
|
222
|
+
Docker policy.
|
|
206
223
|
- **MCP** `[gapit-extension]`: `gapit mcp` / `gapit-mcp` stdio server exposing nine tools:
|
|
207
224
|
read-only `screen` (incl. `aligner minimap2` assembly survey), `screen_reads` (FASTQ via
|
|
208
|
-
minimap2), `summary`, `schema`, `
|
|
209
|
-
|
|
225
|
+
minimap2), `summary`, `schema`, `db_search`, `db_outdated`, plus `db_list` (may create the
|
|
226
|
+
empty datadir on first use), and the datadir-mutating `db_fetch` (installs databases from
|
|
227
|
+
the provider catalog; may download) and `db_build` (writes a custom db);
|
|
210
228
|
tool failures carry the `gapit.error/1` envelope.
|
|
211
229
|
- **stdout purity**: data on stdout, diagnostics on stderr, always. `--quiet` only affects stderr.
|
|
212
230
|
- **Self-description**: `gapit --version --json`, `gapit db list --json`, `gapit schema` — an agent
|
|
@@ -253,7 +271,7 @@ Growth tiers past the budget — split rather than inflate the ceiling:
|
|
|
253
271
|
gene, %identity, %coverage). **From v0.5.0 this is a regression reference for the frozen
|
|
254
272
|
baseline surface, not a release gate for new work** — new features need not check abricate
|
|
255
273
|
and may diverge deliberately.
|
|
256
|
-
- Full suite + CI matrix 3.
|
|
274
|
+
- Full suite + CI matrix Python 3.12; parity byte-diff is opt-in via the `parity` pixi env.
|
|
257
275
|
Offline tests stay fast.
|
|
258
276
|
|
|
259
277
|
## 8. Domain knowledge (abridged; full detail in SPEC.md)
|
|
@@ -5,8 +5,128 @@ All notable changes to gapit are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
|
|
6
6
|
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.6.2] - 2026-10-26
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Version-only release.** No functional changes since 0.6.1; this release aligns
|
|
13
|
+
the package, pixi lock, docs examples, goldens, CITATION, and conda recipe on the
|
|
14
|
+
requested 0.6.2 version and republishes the 0.6.1 hardening set.
|
|
15
|
+
|
|
16
|
+
## [0.6.1] - 2026-10-26
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Fresh-install datadir bootstrap.** `gapit db list` (CLI, `--json`, and the MCP
|
|
21
|
+
`db_list` tool) no longer fails with `DATADIR_NOT_FOUND` when the datadir has never
|
|
22
|
+
been created: it bootstraps the resolved root and lists the catalog/bundled rows, so
|
|
23
|
+
a fresh `pip install gapit` can be inspected before any database is installed.
|
|
24
|
+
`gapit setupdb` likewise creates a missing datadir before materializing bundles.
|
|
25
|
+
Commands that consume installed databases keep the strict `DATADIR_NOT_FOUND`
|
|
26
|
+
semantics (bundled-name `screen`/`typing` still bootstrap on first use).
|
|
27
|
+
- **Shared-datadir writes are serialized and published atomically.** Database builds now
|
|
28
|
+
write into a hidden staging directory and swap it into place only after success; a
|
|
29
|
+
per-database `flock` prevents concurrent `db fetch`/`db build` writers from interleaving.
|
|
30
|
+
Hidden staging/backup/lock entries are ignored by database discovery. New datadirs and
|
|
31
|
+
staging directories are private (`0700`). Readers see the old database for the whole
|
|
32
|
+
build, then the new one after the swap (a short rename window remains).
|
|
33
|
+
- **CLI flag routing.** `--all-genes` is now forwarded to the minimap2 assembly
|
|
34
|
+
path, and reads-only flags (`--read-type`, `--min-breadth`, `--all-genes`) are
|
|
35
|
+
usage errors on blastn/cluster modes instead of being silently ignored.
|
|
36
|
+
- **Fragment merging is record-aware.** The merge key now includes database,
|
|
37
|
+
accession, and subject length; zero aligned lengths no longer divide by zero.
|
|
38
|
+
- **Cluster build rejects duplicate IDs.** Duplicate locus IDs and duplicate
|
|
39
|
+
gene IDs within a locus fail `BUILD_INVALID` before any artifact is written.
|
|
40
|
+
- **Typing configuration is table-safe and compose-safe.** Compose schemes need
|
|
41
|
+
at least one placeholder; phenotype/fallback/notes reject tab/CR/LF; malformed
|
|
42
|
+
documents fail as `TYPING_MALFORMED` instead of crashing at screen time.
|
|
43
|
+
- **Table output is delimiter-safe.** TSV cells neutralize embedded tab/CR/LF
|
|
44
|
+
(screen, reads, cluster, summary, typing, db list/search/outdated); product
|
|
45
|
+
tabs and cluster DB names are rejected at build time.
|
|
46
|
+
- **Gene/cluster builds no longer require minimap2.** Its manifest version is
|
|
47
|
+
optional; `makeblastdb_version` now records the actual makeblastdb version.
|
|
48
|
+
BLAST indexes build under a temporary prefix and replace the old index only on
|
|
49
|
+
success.
|
|
50
|
+
- **gseek parity fixes.** Missing gseek binaries map back to
|
|
51
|
+
`MISSING_DEPENDENCY`/exit 3, and the minimap2 index policy cache invalidates
|
|
52
|
+
when the target content changes.
|
|
53
|
+
- **Reads suffix consistency.** `.fastq.gzip`/`.fq.gzip` now pair correctly.
|
|
54
|
+
- **cluster/2 column collisions.** Schemes such as `o_group` and `o` fall back
|
|
55
|
+
to full evidence prefixes, keeping every column unique.
|
|
56
|
+
- **Summary params completeness.** `gapit.summary/1` records `metrics`, so `-ic`
|
|
57
|
+
can be reproduced from the JSON document.
|
|
58
|
+
- **Schema accuracy.** The never-serialized `PhenotypeDetail.winner` is omitted
|
|
59
|
+
from the public cluster schema.
|
|
60
|
+
- **Read/metadata errors are typed.** OSError/UnicodeDecodeError in manifests,
|
|
61
|
+
records, floors, features, bundled metadata, fofn, summary/typing tables is
|
|
62
|
+
wrapped as the documented input/database error.
|
|
63
|
+
- **Archive safety.** ZIP extraction rejects escaping members and caps expanded
|
|
64
|
+
size; plain-HTTP provider warnings survive `--quiet`.
|
|
65
|
+
- **MCP parity.** Protocol version negotiation, CSV formats, and
|
|
66
|
+
`db_build` `kind`/`typing`/`floors` now match the CLI.
|
|
67
|
+
- **Release safety.** The release workflow now runs the full gates, `twine check`,
|
|
68
|
+
and a wheel install smoke test before publishing.
|
|
69
|
+
- **Documentation:** new `docs/datadir.md` (+zh), complete database catalog rows,
|
|
70
|
+
fixed anchors/links, historical `PLAN.md`, synced AGENTS tree, and new
|
|
71
|
+
`CONTRIBUTING.md`/`SECURITY.md`/`CITATION.cff`.
|
|
72
|
+
- **Provider transport.** VFDB and Victors moved to HTTPS after verifying their
|
|
73
|
+
endpoints; BacMet2 remains HTTP-only and keeps the always-on warning.
|
|
74
|
+
- **Shared setupdb locking.** `setupdb` index rebuilds now take the same per-database
|
|
75
|
+
writer lock as fetch/build; gseek's index-policy cache is lock-protected and drops
|
|
76
|
+
stale keys for a replaced target.
|
|
77
|
+
- **GFF coordinate validation.** `end < 1` and `start > end` now raise typed
|
|
78
|
+
`GENE_OUT_OF_BOUNDS` instead of a pydantic `ValidationError`.
|
|
79
|
+
- **`db list` index visibility.** `gapit.dblist/1` entries carry `indexed`, so an
|
|
80
|
+
installed-but-unindexed database is distinguishable from a ready one.
|
|
81
|
+
- **MCP `all_genes`.** The screen/screen_reads tools expose the reads-table flag.
|
|
82
|
+
- **Typing Markdown safety.** Source paths in YAML frontmatter are quoted.
|
|
83
|
+
- **Fuzz/CI hardening.** Added deterministic parser fuzz smoke tests and a weekly
|
|
84
|
+
cache-free CI canary in addition to the release gates.
|
|
85
|
+
|
|
86
|
+
### Added
|
|
87
|
+
|
|
88
|
+
- **`gapit db path [--json]`.** Prints the effective datadir without creating it;
|
|
89
|
+
`--json` emits `gapit.datadir/1` (`datadir`, `exists`, `source` = `cli|env|xdg|default`).
|
|
90
|
+
- **XDG Base Directory support.** Datadir precedence is now `--datadir`,
|
|
91
|
+
`$GAPIT_DATADIR`, `$XDG_DATA_HOME/gapit/db` (absolute XDG only), then
|
|
92
|
+
`~/.local/share/gapit/db`.
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
|
|
96
|
+
- **gapit now uses `gseek.compat` for `GAPIT_ENGINE`.** The shared switch
|
|
97
|
+
replaces gapit's duplicate mode parser and shadow fallback; legacy remains
|
|
98
|
+
the default and gapit still owns its result mapping.
|
|
99
|
+
|
|
100
|
+
- **Python 3.12 is now the supported version.** Drop the 3.11/3.13/3.14
|
|
101
|
+
environments from pixi/CI and align the package metadata, recipe, and docs
|
|
102
|
+
with gside/gmlst (`>=3.12,<3.13`).
|
|
103
|
+
|
|
104
|
+
## [0.6.0] - 2026-10-25
|
|
105
|
+
|
|
106
|
+
### Added
|
|
107
|
+
|
|
108
|
+
- **Optional gseek engine for BLAST and minimap2.** `GAPIT_ENGINE=legacy|gseek|shadow`
|
|
109
|
+
routes contig/protein screening, reads, and cluster minimap2 through
|
|
110
|
+
[gseek](https://github.com/indexofire/gseek). `legacy` remains the default and is
|
|
111
|
+
retained on every path; `shadow` logs coarse differences and returns the legacy
|
|
112
|
+
result. gseek requires Python >= 3.12 and is available through `gapit[gseek]` or
|
|
113
|
+
the pixi `default` environment.
|
|
114
|
+
- **FASTQ reads parity:** vfdb/card reads/1 and reads/2 are byte-identical to
|
|
115
|
+
legacy on a 3.07M-pair sample. gseek 0.8.1 allows duplicate minimap2 targets
|
|
116
|
+
(VFDB); the bridge uses `index="none"` for CARD's >255-character target names;
|
|
117
|
+
gseek 0.9.0 skips manifest-only query record counts.
|
|
118
|
+
|
|
8
119
|
## [0.5.6] - 2026-10-20
|
|
9
120
|
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- **Bundled `vc_serogroup`: V. cholerae O1/O139 serogrouping + ctxA toxigenicity.** A
|
|
124
|
+
gene-kind bundle handed over from gside: `wbeN` (O1 wbe cluster) and `wbfR` (O139 wbf
|
|
125
|
+
cluster) as an exact-set `serogroup` scheme, plus the ctxA toxigenicity marker; O1 and
|
|
126
|
+
O139 exclude each other by construction, so a double call flags a mixed sample. Ships
|
|
127
|
+
from the wheel with zero network (the seventh bundled database), with floors and a
|
|
128
|
+
`gapit.typing/2` document.
|
|
129
|
+
|
|
10
130
|
### Changed
|
|
11
131
|
|
|
12
132
|
- **`gapit.cluster/2` TSV/CSV reshaped: per-scheme winner evidence replaces the packed
|
gapit-0.6.2/CITATION.cff
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use gapit in research, please cite this software."
|
|
3
|
+
title: "gapit: mass screening of contigs and reads for known genes"
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- name: "indexofire"
|
|
7
|
+
repository-code: "https://github.com/indexofire/gapit"
|
|
8
|
+
url: "https://indexofire.github.io/gapit/"
|
|
9
|
+
license: MIT
|
|
10
|
+
version: "0.6.2"
|
|
11
|
+
date-released: "2026-10-26"
|
|
12
|
+
keywords:
|
|
13
|
+
- bioinformatics
|
|
14
|
+
- genomics
|
|
15
|
+
- antimicrobial resistance
|
|
16
|
+
- virulence factors
|
|
17
|
+
- BLAST
|
|
18
|
+
- minimap2
|