gapit 0.5.2__tar.gz → 0.5.4__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.2 → gapit-0.5.4}/AGENTS.md +1 -0
- {gapit-0.5.2 → gapit-0.5.4}/CHANGELOG.md +54 -0
- {gapit-0.5.2 → gapit-0.5.4}/PKG-INFO +16 -8
- {gapit-0.5.2 → gapit-0.5.4}/README.md +15 -7
- {gapit-0.5.2 → gapit-0.5.4}/docs/agents.md +5 -4
- {gapit-0.5.2 → gapit-0.5.4}/docs/agents.zh.md +5 -4
- {gapit-0.5.2 → gapit-0.5.4}/docs/custom-db.md +5 -2
- {gapit-0.5.2 → gapit-0.5.4}/docs/custom-db.zh.md +5 -2
- {gapit-0.5.2 → gapit-0.5.4}/docs/databases.md +15 -7
- {gapit-0.5.2 → gapit-0.5.4}/docs/databases.zh.md +15 -7
- {gapit-0.5.2 → gapit-0.5.4}/docs/faq.md +53 -17
- {gapit-0.5.2 → gapit-0.5.4}/docs/faq.zh.md +42 -12
- {gapit-0.5.2 → gapit-0.5.4}/docs/index.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/docs/index.zh.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/docs/installation.md +14 -8
- {gapit-0.5.2 → gapit-0.5.4}/docs/installation.zh.md +11 -8
- {gapit-0.5.2 → gapit-0.5.4}/docs/mcp.md +5 -5
- {gapit-0.5.2 → gapit-0.5.4}/docs/mcp.zh.md +5 -5
- {gapit-0.5.2 → gapit-0.5.4}/docs/outputs.md +14 -13
- {gapit-0.5.2 → gapit-0.5.4}/docs/outputs.zh.md +15 -14
- {gapit-0.5.2 → gapit-0.5.4}/docs/quickstart.md +87 -17
- {gapit-0.5.2 → gapit-0.5.4}/docs/quickstart.zh.md +79 -15
- {gapit-0.5.2 → gapit-0.5.4}/docs/reads.md +14 -6
- {gapit-0.5.2 → gapit-0.5.4}/docs/reads.zh.md +13 -6
- {gapit-0.5.2 → gapit-0.5.4}/docs/screen.md +19 -10
- {gapit-0.5.2 → gapit-0.5.4}/docs/screen.zh.md +19 -7
- {gapit-0.5.2 → gapit-0.5.4}/docs/summary.md +21 -19
- {gapit-0.5.2 → gapit-0.5.4}/docs/summary.zh.md +21 -19
- {gapit-0.5.2 → gapit-0.5.4}/docs/typing.md +8 -8
- {gapit-0.5.2 → gapit-0.5.4}/docs/typing.zh.md +9 -8
- {gapit-0.5.2 → gapit-0.5.4}/pixi.lock +2 -2
- {gapit-0.5.2 → gapit-0.5.4}/pixi.toml +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/pyproject.toml +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/recipe/meta.yaml +3 -3
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/__init__.py +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_db_build.py +1 -1
- gapit-0.5.4/src/gapit/data/dbs/ecoli_dec/records.jsonl +16 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/sequences +16 -21
- gapit-0.5.4/src/gapit/db_build_meta.py +98 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/db_build_ops.py +23 -87
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/db_ops.py +12 -3
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/dbbuild.py +23 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/mcp_tools.py +1 -1
- gapit-0.5.4/src/gapit/progress.py +119 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/screening.py +37 -27
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/screening_reads_positional.py +46 -36
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_exact.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_exact.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_fragmented.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_fragmented.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_exact.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_exact.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/fragments_merge.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/fragments_merge.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_dec_pic_astA.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_dec_pic_astA.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_doumith_4b.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_doumith_4b.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_l4b.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_l4b.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_mixed.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_mixed.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_vp_typed.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_serotyping_vp_typed.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_shigella_mixed.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_shigella_mixed.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_typing_exact.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/gene_typing_exact.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/reads_tinyamr.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/reads_tinyamr.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/screen_multi.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/screen_multi.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/summary_multi.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/summary_multi.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/typing_markers.json +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/typing_markers.md +1 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_bundled.py +6 -6
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_db_build.py +86 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_setupdb.py +3 -3
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_dbbuild.py +39 -1
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gene_floors_e2e.py +4 -1
- gapit-0.5.4/tests/test_progress.py +271 -0
- {gapit-0.5.2 → gapit-0.5.4}/.gitattributes +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/.github/workflows/ci.yml +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/.github/workflows/docs.yml +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/.github/workflows/release.yml +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/.gitignore +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/LICENSE +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/PLAN.md +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/SPEC.md +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/mkdocs.yml +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/scripts/cluster_calibration.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/blast.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/bundled.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cli.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cluster.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cluster_math.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/clusterbuild.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_db.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_db_install.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_db_outdated.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_db_search.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_screen.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_screen_positionals.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_screen_reads_args.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_summary.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/cmd_typing.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/config.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoh/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoh/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/floors.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/typing.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/typing.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ncbi/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/ncbi/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/resfinder/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/resfinder/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/upec_expec_vf/bundled.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/data/dbs/upec_expec_vf/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/db.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/db_query_ops.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/dbcodec.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/dispatch.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/engines.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/errors.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/fasta.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/__init__.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/cluster.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/cluster_md.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/json.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/md.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/reads_json.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/reads_tsv.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/schemas.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/summary.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/tsv.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/formats/typing_result.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/fragments.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/gbfeatures.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/gene_floors.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/gffparse.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/hits.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/mcp.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/mcp_schemas.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/minimap.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/minimap2_run.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/paf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/proctools.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/__init__.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ab_k.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ab_o.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/argannot.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/bacmet2.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/card.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/cluster_common.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/common.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ecoh.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ecoli_kps.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ecoli_vf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/kosc_k.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/kosc_o.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/kpsc_k.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/kpsc_o.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/megares.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/ncbi.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/plasmidfinder.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/resfinder.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/upec_expec_vf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/vfdb.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/providers/victors.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/py.typed +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/readpairs.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/reads.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/records.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/report.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/screening_cluster.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/screening_reads.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/seqconvert.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/summary.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_decide.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_engine.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_gene.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_input.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_models.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_ops.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_results.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/src/gapit/typing_rules.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/bundled_differential/resfinder/HEAD.zip +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/bundled_differential/resfinder/README.md +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/bakta_style.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/clusters.gff3 +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/clusters_gz.gff3.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/clusters_sidecar.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/clusters_sidecar.gff3 +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/compound.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/gz_input.gbk.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/kaptive_style.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/nofasta.gff3 +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/screening.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/typing_invalid.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/typing_screen.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/typing_screen_cm.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/typing_screen_v2.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/typing_valid.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/cluster/unnamed_cds.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/contigs/full.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/contigs/gap.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/contigs/none.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/contigs/partial.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/contigs/sort.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.embl +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.embl.bz2 +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.fa.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/convert/sample.gbk.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/db/tinyamr/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/fragments/fragdb/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/fragments/split3040.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/fragments/split4060.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/fragments/split5050.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/argannot/ARG-ANNOT_NT_V6_July2019.txt +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/bacmet2/BacMet2_EXP_database.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/card/card.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/ecoh/EcOH.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/ecoli_vf/repaired_ecoli_vfs_shortnames.ffn +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/megares/megares_drugs_demo.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/ncbi/AMR_CDS.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/ncbi/ReferenceGeneCatalog.txt +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/plasmidfinder/plasmids_a.fsa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/plasmidfinder/plasmids_b.fsa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/resfinder/aminoglycoside.fsa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/resfinder/beta-lactam.fsa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/resfinder/phenotypes.txt +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/upec_expec_vf/UPEC_ExPEC_VF.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/vfdb/VFDB_setA_nt.fas +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/victors/gen_downloads.php +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/providers/victors/gen_downloads_protein.php +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/bla_partial.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/junk.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/s1_1.fq.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/s1_2.fq.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/s2_R1.fq.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/s2_R2.fq.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/suly_partial.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_R1.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_R2.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_full.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_full.fq.gz +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_lane1.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_lane2.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_pe1_R1.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_pe1_R2.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_pe2_R1.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads/tetx_pe2_R2.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads2/ont_homologs.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads2/sr_homologs.fq +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads2_db/homologs/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/reads_db/tinyreads/sequences +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/empty.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/multi_sample.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/sample_a.csv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/sample_a.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/sample_b.csv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/summary/sample_b.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/dec_s1_aggR_pic_uidA.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/dec_s2_pic_astA_uidA.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/dec_s3_stx2a_escV_aggR_uidA.fasta +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/exact.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/listeria_1c.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/listeria_4b.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/listeria_nogate.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/markers.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/mutated.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/negative.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/partial.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/cholerae.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/cholerae.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/dec.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/dec.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/doumith.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/doumith.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/lm_doumith.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/lm_doumith.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/meningotype.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/meningotype.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/shigella.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/shigella.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/vp_ok.gbk +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/schemes/vp_ok.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/serotyping.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/typing_markers_v1.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/typing_markers_v2.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/typing_serotyping_v2.json +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/vp_mixed.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/data/typing/vp_typed.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_exact.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_fragmented.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_typing_exact.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/ecoli_dec_typed.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/ecoli_dec_typing.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/fragments_merge.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/lm_doumith_typing.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/summary_dutch.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/summary_multi.csv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/summary_multi.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/tinyamr_multi_nopath.csv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/tinyamr_multi_nopath.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/typing_markers.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/golden/typing_serotyping.tsv +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/corpus/01_exact_and_junk.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/corpus/02_mutated.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/corpus/03_truncated.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/corpus/04_reverse.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/corpus/05_threshold.fa +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/make_corpus.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/run_parity.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/parity/run_summary_parity.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_blast_parse.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_blast_pipeline.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_aligner.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_bare_help.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_completion.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_db_build_cluster.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_db_fetch.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_db_query.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_fragments.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_reads.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_reads2.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_reads_glob.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_reads_glob_jobs.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_schema.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_screen.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_screen_jobs.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_short_options.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cli_summary.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cluster_calibration.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cluster_db.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cluster_math.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cluster_screen.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_cluster_typing.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_config.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_db.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_db_fetch.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_db_headers.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_db_list_extras.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_dbcodec.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_error_envelope.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_fasta.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_fragments.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gapit_db_e2e.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gbfeatures.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gene_floors.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gene_typing.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gene_typing2.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_gffparse.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_hits.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_json_format.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_lm_doumith.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_mcp.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_mcp_db_tools.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_mcp_protocol.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_mcp_reads.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_md_format.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_minimap.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_mol_type.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_oversubscription.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_paf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_paf_identity.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_argannot.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_bacmet2.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_card.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_ecoh.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_ecoli_vf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_kaptive.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_megares.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_ncbi.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_plasmidfinder.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_resfinder.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_upec_expec_vf.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_vfdb.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_provider_victors.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_providers_common.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_readpairs.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads2_homologs.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads2_model.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads_aggregate.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads_integration.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads_interval_union.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_reads_streaming.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_records.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_report.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_screen_integration.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_screening_reads_unit.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_seqconvert.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_seqconvert_differential.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_streaming_chunks.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_summary.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_summary_formats.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_tsv.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_command.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_engine.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_models.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_schemes.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_schemes_cluster.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_typing_stage2.py +0 -0
- {gapit-0.5.2 → gapit-0.5.4}/tests/test_version.py +0 -0
|
@@ -79,6 +79,7 @@ gapit/
|
|
|
79
79
|
│ ├── db_ops.py # db use-cases: fetch + list (shared CLI + MCP; no typer)
|
|
80
80
|
│ ├── db_query_ops.py # db use-cases: search + outdated over installed DBs (shared CLI + MCP)
|
|
81
81
|
│ ├── db_build_ops.py # db use-case: custom FASTA+TSV → gene db, GBK/GFF → cluster db (shared CLI + MCP)
|
|
82
|
+
│ ├── db_build_meta.py # `db build --tsv` metadata sidecar: parse + merge (shared by the build use-case)
|
|
82
83
|
│ ├── gbfeatures.py # GenBank FEATURES/ORIGIN parser → LocusFeatures/GeneFeature + gapit.features/1
|
|
83
84
|
│ ├── gene_floors.py # gapit.floors/1 per-gene identity floors: model, loader, build validation, reads gate
|
|
84
85
|
│ ├── gffparse.py # GFF3 parser (embedded ##FASTA or sidecar) → the same locus/gene models
|
|
@@ -5,6 +5,60 @@ 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.5.4] - 2026-10-03
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Rich progress bar on long batch runs** (stderr only; modeled on the gmlst UX).
|
|
13
|
+
Multi-file contig screening, the positional-FASTQ wildcard batch, and
|
|
14
|
+
`gapit db fetch all` now show a spinner + bar + M/N + percent + elapsed bar on an
|
|
15
|
+
interactive stderr, with the description tracking the current file/sample/database and
|
|
16
|
+
replacing the per-file stderr notes while it runs. Under `--quiet` or a non-TTY stderr
|
|
17
|
+
(pipes, CI) the bar is disabled and today's plain notes print byte-identically; stdout
|
|
18
|
+
data streams are untouched in every case (the bar never captures stdout — rich's Live
|
|
19
|
+
redirection is pinned off), so output bytes are identical with the bar on or off.
|
|
20
|
+
|
|
21
|
+
## [0.5.3] - 2026-10-03
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **Build-time exact-duplicate dedup for gene databases.** `gapit db build` (CLI and MCP)
|
|
26
|
+
and bundled materialization now drop records whose `(gene, sequence)` pair repeats an
|
|
27
|
+
earlier one — the FIRST copy is kept, a stderr note counts the drops when not
|
|
28
|
+
`--quiet`, and the build receipt gains an additive `duplicates_dropped` field (omitted
|
|
29
|
+
when 0, so no-duplicate receipts stay byte-identical). Records with identical sequences
|
|
30
|
+
under DIFFERENT gene names are kept (possible aliases); the provider fetch pipeline is
|
|
31
|
+
untouched (it already deduplicates upstream).
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **Bundled `ecoli_dec` regenerated 17 → 16 records (the 26ECO0094 `sth` divergence).**
|
|
36
|
+
The panel carried `estA3` (M18346.1) and `estA4` (J03311.1) as byte-identical 219 bp
|
|
37
|
+
`sth` sequences, so reads mode — which aggregates per record — reported two `sth` rows
|
|
38
|
+
while the blastn contig path's `-culling_limit 1` kept one. Build-time dedup drops the
|
|
39
|
+
`estA4` copy; both surfaces now agree on the single `estA3` `sth` row (verified on
|
|
40
|
+
26ECO0094 reads and assembly; `astA`/`uidA` unchanged).
|
|
41
|
+
|
|
42
|
+
### Docs
|
|
43
|
+
|
|
44
|
+
- Audited docs refresh (no behavior change): README and FAQ now state the shipped
|
|
45
|
+
stance — the abricate-compatible contig surface is a frozen baseline and the parity
|
|
46
|
+
harness is a regression reference, not a release gate; the false "nothing is bundled"
|
|
47
|
+
claims in FAQ/installation are replaced with the six in-wheel audited bundles
|
|
48
|
+
(materialized on first use). The `gapit typing` TSV column order in every example is
|
|
49
|
+
corrected to `FILE SCHEME PHENOTYPE GENES CONFIDENCE SCORE RUNNER_UP NOTES`; summary
|
|
50
|
+
examples now paste the real default `+`/`-` cells; schema rosters add `floors`
|
|
51
|
+
(eleven documents) and the `gapit.dblist/1` field table gains `kind`; the database
|
|
52
|
+
catalog is described as its real 21-row self (12 gene + 7 kaptive cluster + the
|
|
53
|
+
`ecoli_dec`/`lm_doumith` bundles); the quickstart gains a "Type your samples"
|
|
54
|
+
tutorial (two-stage designation, the screen|typing pipe, wildcard-FASTQ auto-pairing)
|
|
55
|
+
and uses `gapit setupdb` as the bootstrap path; `gapit screen` docs list
|
|
56
|
+
`--min-identity`/`-I` and `--min-mapq`/`-M`; the `gapit db build` reference lists
|
|
57
|
+
`--kind`/`-k`, `--typing`/`-T`, and `--floors`/`-F`. New FAQ entries: two-stage
|
|
58
|
+
typing designation, per-gene identity floors (the `pic` case), wildcard-FASTQ
|
|
59
|
+
auto-pairing. All fixes applied to the English pages and their `.zh.md` mirrors; all
|
|
60
|
+
replacement examples re-run against the real CLI.
|
|
61
|
+
|
|
8
62
|
## [0.5.2] - 2026-10-03
|
|
9
63
|
|
|
10
64
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gapit
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: Mass screening of contigs and reads for known genes — agent-first Python reimplementation of abricate
|
|
5
5
|
Project-URL: Homepage, https://github.com/indexofire/gapit
|
|
6
6
|
Project-URL: Documentation, https://indexofire.github.io/gapit/
|
|
@@ -37,9 +37,11 @@ JSON and Markdown.
|
|
|
37
37
|
|
|
38
38
|
## Why gapit
|
|
39
39
|
|
|
40
|
-
- **
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
- **Frozen abricate-compatible baseline.** Contig screening keeps the same BLAST
|
|
41
|
+
pipeline, hit rules, and abricate-format TSV as a frozen baseline surface for existing
|
|
42
|
+
pipelines. From v0.5.0 gapit pursues its own contract; abricate parity is no longer a
|
|
43
|
+
release gate — the parity harness (`pixi run -e parity parity`) remains a regression
|
|
44
|
+
reference for that frozen surface.
|
|
43
45
|
- **Machine-readable by design.** Versioned output schemas (`gapit.report/1`,
|
|
44
46
|
`gapit.reads/1`, `gapit.summary/1`), self-describing via `gapit schema`, typed JSON error
|
|
45
47
|
envelopes on stderr, documented exit codes. An agent can discover the whole contract
|
|
@@ -109,12 +111,16 @@ presence defaults to 90% alignment breadth (`--min-breadth 90`).
|
|
|
109
111
|
## Databases
|
|
110
112
|
|
|
111
113
|
A database is a directory under the datadir, resolved from `$GAPIT_DATADIR`, then
|
|
112
|
-
`~/.local/share/gapit/db` (override per call with `--datadir`).
|
|
113
|
-
into the catalog
|
|
114
|
-
|
|
114
|
+
`~/.local/share/gapit/db` (override per call with `--datadir`). Twenty-one databases are
|
|
115
|
+
built into the catalog — twelve gene providers, seven kaptive cluster providers, and the
|
|
116
|
+
two typed bundles `ecoli_dec` and `lm_doumith`. All of them build on `gapit db fetch`,
|
|
117
|
+
which downloads from upstream — and six content-provenance-audited ones also ship inside
|
|
118
|
+
the package (`ecoli_dec` and
|
|
115
119
|
`lm_doumith` plus the `ncbi`, `resfinder`, `ecoh`, `upec_expec_vf` snapshots: public
|
|
116
120
|
domain / Apache-2.0 /
|
|
117
|
-
BSD-3-Clause / MIT), materialized into the datadir on first use with zero network
|
|
121
|
+
BSD-3-Clause / MIT), materialized into the datadir on first use with zero network; the
|
|
122
|
+
bundled `ecoli_dec` additionally carries per-gene identity floors (`floors.json`, `pic`
|
|
123
|
+
at 90%) that reads mode applies before presence calls. Several
|
|
118
124
|
upstream licenses (CARD's McMaster terms, VFDB's CC BY-NC, Kaptive's GPL-3.0) forbid
|
|
119
125
|
redistribution inside an MIT-licensed distribution, so everything else is fetch-on-demand
|
|
120
126
|
— and `db fetch <name>` always refreshes a bundled name from the latest upstream.
|
|
@@ -128,8 +134,10 @@ redistribution inside an MIT-licensed distribution, so everything else is fetch-
|
|
|
128
134
|
| `plasmidfinder` | CGE PlasmidFinder replicons | nucl |
|
|
129
135
|
| `megares` | MEGARes antimicrobial resistance genes | nucl |
|
|
130
136
|
| `ecoh` | E. coli O and H antigens (srst2 EcOH) | nucl |
|
|
137
|
+
| `ecoli_dec` | Diarrheagenic E. coli marker panel (GB 4789.6 + risk-monitoring designation) | nucl |
|
|
131
138
|
| `vfdb` | VFDB virulence factors (set A, nucleotide) | nucl |
|
|
132
139
|
| `ecoli_vf` | E. coli virulence factors | nucl |
|
|
140
|
+
| `lm_doumith` | Listeria monocytogenes serogrouping (Doumith 2004) | nucl |
|
|
133
141
|
| `bacmet2` | BacMet2 biocide/resistance genes (protein) | prot |
|
|
134
142
|
| `victors` | Victors virulence factors | nucl |
|
|
135
143
|
| `upec_expec_vf` | UPEC/ExPEC virulence genes | nucl |
|
|
@@ -7,9 +7,11 @@ JSON and Markdown.
|
|
|
7
7
|
|
|
8
8
|
## Why gapit
|
|
9
9
|
|
|
10
|
-
- **
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
- **Frozen abricate-compatible baseline.** Contig screening keeps the same BLAST
|
|
11
|
+
pipeline, hit rules, and abricate-format TSV as a frozen baseline surface for existing
|
|
12
|
+
pipelines. From v0.5.0 gapit pursues its own contract; abricate parity is no longer a
|
|
13
|
+
release gate — the parity harness (`pixi run -e parity parity`) remains a regression
|
|
14
|
+
reference for that frozen surface.
|
|
13
15
|
- **Machine-readable by design.** Versioned output schemas (`gapit.report/1`,
|
|
14
16
|
`gapit.reads/1`, `gapit.summary/1`), self-describing via `gapit schema`, typed JSON error
|
|
15
17
|
envelopes on stderr, documented exit codes. An agent can discover the whole contract
|
|
@@ -79,12 +81,16 @@ presence defaults to 90% alignment breadth (`--min-breadth 90`).
|
|
|
79
81
|
## Databases
|
|
80
82
|
|
|
81
83
|
A database is a directory under the datadir, resolved from `$GAPIT_DATADIR`, then
|
|
82
|
-
`~/.local/share/gapit/db` (override per call with `--datadir`).
|
|
83
|
-
into the catalog
|
|
84
|
-
|
|
84
|
+
`~/.local/share/gapit/db` (override per call with `--datadir`). Twenty-one databases are
|
|
85
|
+
built into the catalog — twelve gene providers, seven kaptive cluster providers, and the
|
|
86
|
+
two typed bundles `ecoli_dec` and `lm_doumith`. All of them build on `gapit db fetch`,
|
|
87
|
+
which downloads from upstream — and six content-provenance-audited ones also ship inside
|
|
88
|
+
the package (`ecoli_dec` and
|
|
85
89
|
`lm_doumith` plus the `ncbi`, `resfinder`, `ecoh`, `upec_expec_vf` snapshots: public
|
|
86
90
|
domain / Apache-2.0 /
|
|
87
|
-
BSD-3-Clause / MIT), materialized into the datadir on first use with zero network
|
|
91
|
+
BSD-3-Clause / MIT), materialized into the datadir on first use with zero network; the
|
|
92
|
+
bundled `ecoli_dec` additionally carries per-gene identity floors (`floors.json`, `pic`
|
|
93
|
+
at 90%) that reads mode applies before presence calls. Several
|
|
88
94
|
upstream licenses (CARD's McMaster terms, VFDB's CC BY-NC, Kaptive's GPL-3.0) forbid
|
|
89
95
|
redistribution inside an MIT-licensed distribution, so everything else is fetch-on-demand
|
|
90
96
|
— and `db fetch <name>` always refreshes a bundled name from the latest upstream.
|
|
@@ -98,8 +104,10 @@ redistribution inside an MIT-licensed distribution, so everything else is fetch-
|
|
|
98
104
|
| `plasmidfinder` | CGE PlasmidFinder replicons | nucl |
|
|
99
105
|
| `megares` | MEGARes antimicrobial resistance genes | nucl |
|
|
100
106
|
| `ecoh` | E. coli O and H antigens (srst2 EcOH) | nucl |
|
|
107
|
+
| `ecoli_dec` | Diarrheagenic E. coli marker panel (GB 4789.6 + risk-monitoring designation) | nucl |
|
|
101
108
|
| `vfdb` | VFDB virulence factors (set A, nucleotide) | nucl |
|
|
102
109
|
| `ecoli_vf` | E. coli virulence factors | nucl |
|
|
110
|
+
| `lm_doumith` | Listeria monocytogenes serogrouping (Doumith 2004) | nucl |
|
|
103
111
|
| `bacmet2` | BacMet2 biocide/resistance genes (protein) | prot |
|
|
104
112
|
| `victors` | Victors virulence factors | nucl |
|
|
105
113
|
| `upec_expec_vf` | UPEC/ExPEC virulence genes | nucl |
|
|
@@ -13,12 +13,12 @@ Version, as one JSON line:
|
|
|
13
13
|
|
|
14
14
|
```console
|
|
15
15
|
$ gapit --version --json
|
|
16
|
-
{"schema":"gapit.version/1","name":"gapit","version":"0.5.
|
|
16
|
+
{"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Output schemas.
|
|
19
|
+
Output schemas. Eleven documents are introspectable: `report`, `typing_result`, `reads`,
|
|
20
20
|
`reads2`, `cluster`, `summary`, `error`, `version`, plus the database-side
|
|
21
|
-
documents `features` and `
|
|
21
|
+
documents `features`, `typing`, and `floors`. Each prints its full JSON Schema:
|
|
22
22
|
|
|
23
23
|
```console
|
|
24
24
|
$ gapit schema report # gapit.report/1 (contig screening)
|
|
@@ -31,6 +31,7 @@ $ gapit schema error # gapit.error/1
|
|
|
31
31
|
$ gapit schema version # gapit.version/1
|
|
32
32
|
$ gapit schema features # gapit.features/1 (cluster db feature table)
|
|
33
33
|
$ gapit schema typing # gapit.typing/2 (db scoring spec; /1 still reads)
|
|
34
|
+
$ gapit schema floors # gapit.floors/1 (per-gene identity floors, reads mode)
|
|
34
35
|
```
|
|
35
36
|
|
|
36
37
|
For example, `gapit schema version` (real output):
|
|
@@ -62,7 +63,7 @@ For example, `gapit schema version` (real output):
|
|
|
62
63
|
```
|
|
63
64
|
|
|
64
65
|
Databases: the database catalog and install state (`gapit db list --json`; real output,
|
|
65
|
-
first two of
|
|
66
|
+
first two of twenty-one shown, trimmed):
|
|
66
67
|
|
|
67
68
|
```console
|
|
68
69
|
$ gapit db list --json
|
|
@@ -12,11 +12,11 @@ gapit 生来就是被程序驱动的。每个输出都以机器可读为设计
|
|
|
12
12
|
|
|
13
13
|
```console
|
|
14
14
|
$ gapit --version --json
|
|
15
|
-
{"schema":"gapit.version/1","name":"gapit","version":"0.5.
|
|
15
|
+
{"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
输出 schema
|
|
19
|
-
`summary`、`error`、`version`,外加数据库侧文档 `features` 和 `
|
|
18
|
+
输出 schema。十一个文档可自省:`report`、`typing_result`、`reads`、`reads2`、`cluster`、
|
|
19
|
+
`summary`、`error`、`version`,外加数据库侧文档 `features`、`typing` 和 `floors`。每个都打印完整的
|
|
20
20
|
JSON Schema:
|
|
21
21
|
|
|
22
22
|
```console
|
|
@@ -30,6 +30,7 @@ $ gapit schema error # gapit.error/1
|
|
|
30
30
|
$ gapit schema version # gapit.version/1
|
|
31
31
|
$ gapit schema features # gapit.features/1 (cluster db feature table)
|
|
32
32
|
$ gapit schema typing # gapit.typing/2 (db scoring spec; /1 still reads)
|
|
33
|
+
$ gapit schema floors # gapit.floors/1 (per-gene identity floors, reads mode)
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
例如 `gapit schema version`(真实输出):
|
|
@@ -60,7 +61,7 @@ $ gapit schema typing # gapit.typing/2 (db scoring spec; /1 still reads
|
|
|
60
61
|
}
|
|
61
62
|
```
|
|
62
63
|
|
|
63
|
-
数据库:数据库目录与安装状态(`gapit db list --json
|
|
64
|
+
数据库:数据库目录与安装状态(`gapit db list --json`;真实输出,二十一个中的前两
|
|
64
65
|
个,有删节):
|
|
65
66
|
|
|
66
67
|
```console
|
|
@@ -20,6 +20,9 @@ gapit db build NAME FASTA [OPTIONS]
|
|
|
20
20
|
| `FASTA` (argument) | path | Input FASTA: plain, abricate `~~~`, or `gapit\|` headers, detected per record (`.gz`/`.bz2` accepted). |
|
|
21
21
|
| `--tsv` | path | Metadata TSV: header row with `gene`/`accession`/`function` columns. |
|
|
22
22
|
| `--dbtype` | `nucl` or `prot` | Force the molecule type (default: auto-detect from the sequences). |
|
|
23
|
+
| `--kind` / `-k` | `gene` or `cluster` | Force the database kind (default: auto-detect from the input suffix; a disagreement is a usage error). |
|
|
24
|
+
| `--typing` / `-T` | path | `gapit.typing/1` or `/2` scoring spec: validated, copied into the db as `typing.json`, recorded in its manifest. |
|
|
25
|
+
| `--floors` / `-F` | path | `gapit.floors/1` per-gene identity floors for reads-mode presence: validated, copied into the db as `floors.json` (gene builds only). |
|
|
23
26
|
| `--datadir` | path | Database directory (default: `$GAPIT_DATADIR`, then `~/.local/share/gapit/db`). |
|
|
24
27
|
| `--description` | text | Default product for records whose FASTA header has no description text. |
|
|
25
28
|
| `--force` | flag | Overwrite the database if it already exists. |
|
|
@@ -293,8 +296,8 @@ $ cat sample2.tsv
|
|
|
293
296
|
sample2.fa SAM002 16 255 + labcur2 1-240/240 =============== 0/0 100.00 100.00 labmeta LAB-0002 synthetic macrolide esterase macrolide
|
|
294
297
|
$ gapit summary sample1.tsv sample2.tsv
|
|
295
298
|
#FILE NUM_FOUND labcur1 labcur2
|
|
296
|
-
sample1.tsv 1
|
|
297
|
-
sample2.tsv 1
|
|
299
|
+
sample1.tsv 1 + -
|
|
300
|
+
sample2.tsv 1 - +
|
|
298
301
|
```
|
|
299
302
|
|
|
300
303
|
## Rules and edge behavior
|
|
@@ -22,6 +22,9 @@ gapit db build NAME FASTA [OPTIONS]
|
|
|
22
22
|
| `FASTA`(位置参数) | path | 输入 FASTA:plain、abricate `~~~` 或 `gapit\|` 表头,逐记录检测(接受 `.gz`/`.bz2`)。 |
|
|
23
23
|
| `--tsv` | path | 元数据 TSV:带 `gene`/`accession`/`function` 列的表头行。 |
|
|
24
24
|
| `--dbtype` | `nucl` 或 `prot` | 强制分子类型(默认:从序列自动检测)。 |
|
|
25
|
+
| `--kind` / `-k` | `gene` 或 `cluster` | 强制数据库类型(默认:从输入后缀自动检测;与后缀不一致是用法错误)。 |
|
|
26
|
+
| `--typing` / `-T` | path | `gapit.typing/1` 或 `/2` 评分规范:先校验,再复制进数据库成为 `typing.json`,并记入其 manifest。 |
|
|
27
|
+
| `--floors` / `-F` | path | `gapit.floors/1` 逐基因一致性下限,用于 reads 模式的存在判定:先校验,再复制进数据库成为 `floors.json`(仅限基因库构建)。 |
|
|
25
28
|
| `--datadir` | path | 数据库目录(默认:`$GAPIT_DATADIR`,然后 `~/.local/share/gapit/db`)。 |
|
|
26
29
|
| `--description` | 文本 | FASTA 表头没有描述文本的记录的默认产物。 |
|
|
27
30
|
| `--force` | 开关 | 数据库已存在时覆盖。 |
|
|
@@ -320,8 +323,8 @@ $ cat sample2.tsv
|
|
|
320
323
|
sample2.fa SAM002 16 255 + labcur2 1-240/240 =============== 0/0 100.00 100.00 labmeta LAB-0002 synthetic macrolide esterase macrolide
|
|
321
324
|
$ gapit summary sample1.tsv sample2.tsv
|
|
322
325
|
#FILE NUM_FOUND labcur1 labcur2
|
|
323
|
-
sample1.tsv 1
|
|
324
|
-
sample2.tsv 1
|
|
326
|
+
sample1.tsv 1 + -
|
|
327
|
+
sample2.tsv 1 - +
|
|
325
328
|
```
|
|
326
329
|
|
|
327
330
|
## 规则与边缘行为
|
|
@@ -78,6 +78,7 @@ $ gapit db list --json
|
|
|
78
78
|
"description": "ARG-ANNOT acquired resistance genes",
|
|
79
79
|
"dbtype": "nucl",
|
|
80
80
|
"installed": true,
|
|
81
|
+
"kind": "gene",
|
|
81
82
|
"records": 2224
|
|
82
83
|
},
|
|
83
84
|
{
|
|
@@ -86,6 +87,7 @@ $ gapit db list --json
|
|
|
86
87
|
"description": "BacMet2 experimentally confirmed biocide/resistance genes (protein)",
|
|
87
88
|
"dbtype": "prot",
|
|
88
89
|
"installed": true,
|
|
90
|
+
"kind": "gene",
|
|
89
91
|
"records": 746
|
|
90
92
|
},
|
|
91
93
|
{
|
|
@@ -94,6 +96,7 @@ $ gapit db list --json
|
|
|
94
96
|
"description": "CARD protein homolog resistance models",
|
|
95
97
|
"dbtype": "nucl",
|
|
96
98
|
"installed": true,
|
|
99
|
+
"kind": "gene",
|
|
97
100
|
"records": 6059
|
|
98
101
|
}
|
|
99
102
|
]
|
|
@@ -108,6 +111,7 @@ $ gapit db list --json
|
|
|
108
111
|
| `providers[].vendor` | string | Upstream maintainer organisation (NCBI, DTU CGE, Kaptive (klebgenomics), ...) |
|
|
109
112
|
| `providers[].description` | string | Short content summary |
|
|
110
113
|
| `providers[].dbtype` | string | `nucl` (screened with blastn) or `prot` (screened with blastx) |
|
|
114
|
+
| `providers[].kind` | string | `gene` (per-gene BLAST screening) or `cluster` (minimap2 locus screening, [screen.md](./screen.md#cluster-databases-kind-cluster)) |
|
|
111
115
|
| `providers[].installed` | boolean | True when a manifest exists in the datadir |
|
|
112
116
|
| `providers[].records` | integer | Record count, omitted when the database isn't installed |
|
|
113
117
|
| `providers[].license` | string | Upstream content license, omitted unless the provider pins one (card, vfdb, ecoli_vf, kaptive) |
|
|
@@ -130,7 +134,7 @@ accept: a bundled database works out of the box.
|
|
|
130
134
|
| Name | Content | Snapshot | Typed |
|
|
131
135
|
|---|---|---|---|
|
|
132
136
|
| `ecoh` | E. coli O and H antigens (597 records, srst2 EcOH) | 2026-10-02 | — |
|
|
133
|
-
| `ecoli_dec` | Diarrheagenic E. coli marker panel (
|
|
137
|
+
| `ecoli_dec` | Diarrheagenic E. coli marker panel (16 records, GB 4789.6 + risk-monitoring designation) | 2026-10-02 | `gapit.typing/2` (schemes `gb4789_6`, `risk_monitoring`) |
|
|
134
138
|
| `lm_doumith` | Listeria monocytogenes serogrouping (5 records, Doumith 2004 markers) | 2026-10-03 | `gapit.typing/2` (scheme `doumith_serogroup`) |
|
|
135
139
|
| `ncbi` | NCBI AMRFinderPlus curated AMR (8373 records) | 2026-10-02 | — |
|
|
136
140
|
| `resfinder` | CGE ResFinder acquired resistance genes (3206 records) | 2026-10-02 | — |
|
|
@@ -139,7 +143,9 @@ accept: a bundled database works out of the box.
|
|
|
139
143
|
**License provenance.** Every `ecoli_dec` record was re-sourced from primary
|
|
140
144
|
public-domain submissions (NCBI RefSeq/GenBank/DDBJ accessions, same alleles as the
|
|
141
145
|
rightsholder panel); two VFDB-derived records found in the original panel were removed
|
|
142
|
-
and replaced during the 2026-10 audit
|
|
146
|
+
and replaced during the 2026-10 audit, and the byte-identical `estA4` (J03311.1) copy of
|
|
147
|
+
`estA3` (M18346.1) — one `sth` gene, one sequence — was dropped by the build pipeline's
|
|
148
|
+
exact-duplicate dedup in the 2026-10 rebuild, leaving 16 records. The `lm_doumith` panel was extracted the same
|
|
143
149
|
way from public-domain INSDC records (accessions in each header; reverse-complement
|
|
144
150
|
markers strand-corrected, `lmo0737` verified 100% against EGD-e). The four provider
|
|
145
151
|
snapshots (`ecoh`, `ncbi`, `resfinder`, `upec_expec_vf`) passed the 2026-10
|
|
@@ -161,14 +167,16 @@ drift — comparing the wheel snapshots against latest upstream is future work.)
|
|
|
161
167
|
|
|
162
168
|
**How materialization works.** The first `gapit screen ... --db <bundled-name>` against
|
|
163
169
|
a datadir that does not hold the database builds it there automatically — one stderr note
|
|
164
|
-
(`gapit: materializing bundled database ecoli_dec (
|
|
170
|
+
(`gapit: materializing bundled database ecoli_dec (16 records) into <datadir>`,
|
|
165
171
|
silenced by `--quiet`), then the standard gene-build pipeline: `records.jsonl`, the
|
|
166
172
|
`sequences` FASTA with gapit/v1 headers, the BLAST index, the `typing.json` copy when the
|
|
167
|
-
bundle ships one, and a manifest stamped `source: "bundled"`.
|
|
173
|
+
bundle ships one, and a manifest stamped `source: "bundled"`. That pipeline — shared with
|
|
174
|
+
`gapit db build` — drops exact `(gene, sequence)` duplicate records at build time (first
|
|
175
|
+
kept; a stderr note and the receipt's `duplicates_dropped` count the drops). Deterministic, zero
|
|
168
176
|
network. A missing datadir is created on this path only; `gapit setupdb` materializes
|
|
169
177
|
every bundled database alongside indexing; re-running either is a no-op once the
|
|
170
178
|
manifest exists. `db list` shows the database as `bundled` before that and
|
|
171
|
-
`installed (
|
|
179
|
+
`installed (16)` after — on all four listing surfaces (TSV, rich table, `--json`, MCP
|
|
172
180
|
`db_list`).
|
|
173
181
|
|
|
174
182
|
### Listeria serogrouping (`lm_doumith`)
|
|
@@ -204,7 +212,7 @@ honest answer for everything the five markers cannot resolve.
|
|
|
204
212
|
## Checking database freshness
|
|
205
213
|
|
|
206
214
|
`gapit db outdated` reports every installed database's age against the staleness
|
|
207
|
-
threshold. Against a fully installed datadir (output trimmed to three of
|
|
215
|
+
threshold. Against a fully installed datadir (output trimmed to three of twenty-one rows):
|
|
208
216
|
|
|
209
217
|
```console
|
|
210
218
|
$ gapit db outdated --days 30
|
|
@@ -488,7 +496,7 @@ versions. A real one, from the plasmidfinder database:
|
|
|
488
496
|
"upstream_version": "",
|
|
489
497
|
"tool": {
|
|
490
498
|
"name": "gapit",
|
|
491
|
-
"version": "0.5.
|
|
499
|
+
"version": "0.5.4"
|
|
492
500
|
},
|
|
493
501
|
"makeblastdb_version": "blastn: 2.17.0+",
|
|
494
502
|
"minimap2_version": "2.31-r1302"
|
|
@@ -76,6 +76,7 @@ $ gapit db list --json
|
|
|
76
76
|
"description": "ARG-ANNOT acquired resistance genes",
|
|
77
77
|
"dbtype": "nucl",
|
|
78
78
|
"installed": true,
|
|
79
|
+
"kind": "gene",
|
|
79
80
|
"records": 2224
|
|
80
81
|
},
|
|
81
82
|
{
|
|
@@ -84,6 +85,7 @@ $ gapit db list --json
|
|
|
84
85
|
"description": "BacMet2 experimentally confirmed biocide/resistance genes (protein)",
|
|
85
86
|
"dbtype": "prot",
|
|
86
87
|
"installed": true,
|
|
88
|
+
"kind": "gene",
|
|
87
89
|
"records": 746
|
|
88
90
|
},
|
|
89
91
|
{
|
|
@@ -92,6 +94,7 @@ $ gapit db list --json
|
|
|
92
94
|
"description": "CARD protein homolog resistance models",
|
|
93
95
|
"dbtype": "nucl",
|
|
94
96
|
"installed": true,
|
|
97
|
+
"kind": "gene",
|
|
95
98
|
"records": 6059
|
|
96
99
|
}
|
|
97
100
|
]
|
|
@@ -106,6 +109,7 @@ $ gapit db list --json
|
|
|
106
109
|
| `providers[].vendor` | string | 上游维护机构(NCBI、DTU CGE、Kaptive (klebgenomics) 等) |
|
|
107
110
|
| `providers[].description` | string | 内容简述 |
|
|
108
111
|
| `providers[].dbtype` | string | `nucl`(用 blastn 筛查)或 `prot`(用 blastx 筛查) |
|
|
112
|
+
| `providers[].kind` | string | `gene`(逐基因 BLAST 筛查)或 `cluster`(minimap2 位点筛查,见 [screen.md](./screen.md)) |
|
|
109
113
|
| `providers[].installed` | boolean | 数据目录里存在 manifest 时为 true |
|
|
110
114
|
| `providers[].records` | integer | 记录数,数据库未安装时省略 |
|
|
111
115
|
| `providers[].license` | string | 上游内容许可证,仅提供商声明时出现(card、vfdb、ecoli_vf、kaptive) |
|
|
@@ -125,7 +129,7 @@ abricate `--list` 的逐字节一致性。)见 [outputs.md](./outputs.md)。
|
|
|
125
129
|
| 名称 | 内容 | 快照日期 | 分型 |
|
|
126
130
|
|---|---|---|---|
|
|
127
131
|
| `ecoh` | 大肠杆菌 O/H 抗原基因(597 条记录,srst2 EcOH) | 2026-10-02 | — |
|
|
128
|
-
| `ecoli_dec` | 致腹泻大肠杆菌标志基因面板(
|
|
132
|
+
| `ecoli_dec` | 致腹泻大肠杆菌标志基因面板(16 条记录,GB 4789.6 + 风险监测判定) | 2026-10-02 | `gapit.typing/2`(`gb4789_6`、`risk_monitoring` 双方案) |
|
|
129
133
|
| `lm_doumith` | 单核细胞增生李斯特菌血清群分型(5 条记录,Doumith 2004 标记) | 2026-10-03 | `gapit.typing/2`(方案 `doumith_serogroup`) |
|
|
130
134
|
| `ncbi` | NCBI AMRFinderPlus 精选 AMR(8373 条记录) | 2026-10-02 | — |
|
|
131
135
|
| `resfinder` | CGE ResFinder 获得性耐药基因(3206 条记录) | 2026-10-02 | — |
|
|
@@ -133,7 +137,9 @@ abricate `--list` 的逐字节一致性。)见 [outputs.md](./outputs.md)。
|
|
|
133
137
|
|
|
134
138
|
**许可证来源声明。** `ecoli_dec` 的每条记录都取自公共领域的一级提交(NCBI
|
|
135
139
|
RefSeq/GenBank/DDBJ 收录号,与权利方面板等位相同);2026-10 审计中发现原面板里
|
|
136
|
-
混入的两条 VFDB
|
|
140
|
+
混入的两条 VFDB 来源记录已被移除并替换;2026-10 重建时,构建管线的精确去重又丢弃了
|
|
141
|
+
与 `estA3`(M18346.1)逐字节相同的 `estA4`(J03311.1)副本 —— 同一个 `sth` 基因、
|
|
142
|
+
同一序列 —— 面板因此为 16 条记录。`lm_doumith` 面板以同样方式取自公共领域
|
|
137
143
|
的 INSDC 记录(收录号见每条头部;反向互补标记已做链向校正,`lmo0737` 经与 EGD-e
|
|
138
144
|
比对验证 100% 一致)。四个提供商快照(`ecoh`、`ncbi`、`resfinder`、
|
|
139
145
|
`upec_expec_vf`)通过了 2026-10 对**全部**记录的内容级审计:
|
|
@@ -152,12 +158,14 @@ MIT —— 四者均允许随 MIT 许可的 wheel 再分发。回归测试锁定
|
|
|
152
158
|
|
|
153
159
|
**物化机制。** 第一次 `gapit screen ... --db <内置库名>` 发现数据目录里没有该库
|
|
154
160
|
时,会自动构建它 —— stderr 一行提示(`gapit: materializing bundled database
|
|
155
|
-
ecoli_dec (
|
|
161
|
+
ecoli_dec (16 records) into <datadir>`,`--quiet` 可静默),随后走标准基因库
|
|
156
162
|
构建管线:`records.jsonl`、gapit/v1 头部的 `sequences`、BLAST 索引、(库自带时)
|
|
157
|
-
`typing.json` 副本,以及盖上 `source: "bundled"` 的 manifest
|
|
163
|
+
`typing.json` 副本,以及盖上 `source: "bundled"` 的 manifest。该管线与
|
|
164
|
+
`gapit db build` 共享,会在构建时丢弃精确重复的(基因, 序列)记录(保留首条;
|
|
165
|
+
stderr 提示与回执中的 `duplicates_dropped` 计数)。全程确定性、零
|
|
158
166
|
网络。仅这条路径会在数据目录缺失时自动创建它;`gapit setupdb` 在建索引的同时
|
|
159
167
|
物化全部内置库;manifest 一旦存在,两者重跑都是无操作。`db list` 在物化前显示
|
|
160
|
-
`bundled`、物化后显示 `installed (
|
|
168
|
+
`bundled`、物化后显示 `installed (16)` —— 四个列表入口(TSV、rich 表格、
|
|
161
169
|
`--json`、MCP `db_list`)一致。
|
|
162
170
|
|
|
163
171
|
### 李斯特菌血清群分型(`lm_doumith`)
|
|
@@ -192,7 +200,7 @@ table.tsv`。
|
|
|
192
200
|
## 检查数据库新鲜度
|
|
193
201
|
|
|
194
202
|
`gapit db outdated` 报告每个已安装数据库相对于过期阈值的年龄。对装满的数据
|
|
195
|
-
|
|
203
|
+
目录(输出裁剪到二十一行中的三行):
|
|
196
204
|
|
|
197
205
|
```console
|
|
198
206
|
$ gapit db outdated --days 30
|
|
@@ -466,7 +474,7 @@ manifest,来自 plasmidfinder 数据库:
|
|
|
466
474
|
"upstream_version": "",
|
|
467
475
|
"tool": {
|
|
468
476
|
"name": "gapit",
|
|
469
|
-
"version": "0.5.
|
|
477
|
+
"version": "0.5.4"
|
|
470
478
|
},
|
|
471
479
|
"makeblastdb_version": "blastn: 2.17.0+",
|
|
472
480
|
"minimap2_version": "2.31-r1302"
|
|
@@ -5,11 +5,14 @@ the source or a live run.
|
|
|
5
5
|
|
|
6
6
|
## Is gapit a drop-in abricate replacement?
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
TSV on stdout, byte-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Contig screening keeps the abricate surface on purpose: same BLAST pipeline, same hit
|
|
9
|
+
rules, abricate-format TSV on stdout, byte-checked against real abricate on a corpus.
|
|
10
|
+
From v0.5.0 that baseline is frozen rather than a release gate — gapit pursues its own
|
|
11
|
+
contract (native JSON/Markdown, reads and cluster engines, typing), and the parity
|
|
12
|
+
harness (`pixi run -e parity parity`) serves as a regression reference for the frozen
|
|
13
|
+
surface. gapit reads abricate-format databases (legacy `~~~` headers) as-is. The
|
|
14
|
+
reverse does not hold: gapit-native databases (`gapit/v1` tagged headers) cannot be
|
|
15
|
+
read by abricate. Details: `./databases.md`.
|
|
13
16
|
|
|
14
17
|
## Why does a hit showing 80.00% coverage get filtered?
|
|
15
18
|
|
|
@@ -75,6 +78,15 @@ minimap2 cluster engine and reports one best-locus call per file, with
|
|
|
75
78
|
per-gene verdicts and, on typed databases, a phenotype. Details:
|
|
76
79
|
`./screen.md` and `./databases.md`.
|
|
77
80
|
|
|
81
|
+
## How do I designate a pathotype or serogroup?
|
|
82
|
+
|
|
83
|
+
Designation is two-stage on gene databases: screen with a typed database, then read
|
|
84
|
+
the table back. The bundled `ecoli_dec` panel carries the dual-scheme DEC designation:
|
|
85
|
+
`gapit screen -d ecoli_dec sample.fna -o result.tsv`, then `gapit typing result.tsv`
|
|
86
|
+
— or pipe one straight into the other. Cluster databases are the exception: their
|
|
87
|
+
designation is integrated into the screen itself (the `PHENOTYPE` column). Details:
|
|
88
|
+
`./typing.md`.
|
|
89
|
+
|
|
78
90
|
## What is the difference between `--threads` and `--jobs`?
|
|
79
91
|
|
|
80
92
|
`--threads` is BLAST worker threads inside one screening run (passed to
|
|
@@ -90,15 +102,35 @@ puts the sample key in the first `#SAMPLE` column; `--format json` (or `md`) giv
|
|
|
90
102
|
versioned `gapit.reads/1` document instead:
|
|
91
103
|
|
|
92
104
|
```console
|
|
93
|
-
$ gapit screen --r1 reads.fq --read-type sr --db
|
|
94
|
-
#SAMPLE GENE BREADTH% DEPTH READS PRESENT DATABASE ACCESSION PRODUCT
|
|
95
|
-
reads.fq tetX
|
|
96
|
-
$ gapit screen --r1 reads.fq --read-type sr --db
|
|
105
|
+
$ gapit screen --r1 tests/data/reads/tetx_full.fq --read-type sr --db tinyreads
|
|
106
|
+
#SAMPLE GENE BREADTH% DEPTH READS PRESENT DATABASE ACCESSION PRODUCT
|
|
107
|
+
tests/data/reads/tetx_full.fq tetX 100.00 2.30 12 yes tinyreads SYN-001 extended resistance determinant tetX
|
|
108
|
+
$ gapit screen --r1 tests/data/reads/tetx_full.fq --read-type sr --db tinyreads --format json
|
|
97
109
|
{"schema": "gapit.reads/1", ...}
|
|
98
110
|
```
|
|
99
111
|
|
|
100
112
|
Reads mode: `./reads.md`.
|
|
101
113
|
|
|
114
|
+
## Can I screen a wildcard of FASTQ files?
|
|
115
|
+
|
|
116
|
+
Yes: when every positional file is FASTQ, `gapit screen` enters reads mode and
|
|
117
|
+
auto-pairs samples from the filenames (`_R1`/`_R2`, `_1`/`_2` conventions), so
|
|
118
|
+
`gapit screen -d ecoli_dec *.fq.gz -j 4` screens all samples concurrently with one
|
|
119
|
+
command. Mixing FASTA and FASTQ positionals is a usage error; the pairing conventions
|
|
120
|
+
and the per-sample output are documented in `./reads.md`.
|
|
121
|
+
|
|
122
|
+
## What are per-gene identity floors?
|
|
123
|
+
|
|
124
|
+
A database-side `floors.json` (`gapit.floors/1`) declares a minimum alignment identity
|
|
125
|
+
per gene for reads-mode presence: alignments below the floor are dropped before
|
|
126
|
+
breadth and depth are aggregated, so a close-but-not-exact homolog no longer over-calls
|
|
127
|
+
the gene. The real case that motivated it: the SPATE-homolog `pic` in the bundled
|
|
128
|
+
`ecoli_dec` panel read about 86.6% identity at 97.6% breadth and crossed the 90%
|
|
129
|
+
presence threshold, while the blastn contig path correctly rejected it; the shipped
|
|
130
|
+
floor (`pic` at 90) makes reads mode agree. Install one with `gapit db build --floors
|
|
131
|
+
FILE` or by dropping the file into the db directory; a database without one screens
|
|
132
|
+
byte-identically to before. Details: `./reads.md` and `./databases.md`.
|
|
133
|
+
|
|
102
134
|
## What is this "MISSING_DEPENDENCY" error?
|
|
103
135
|
|
|
104
136
|
An external binary (blastn, makeblastdb, blastdbcmd, minimap2) is
|
|
@@ -113,16 +145,20 @@ PATH.
|
|
|
113
145
|
|
|
114
146
|
## What licenses apply to the databases?
|
|
115
147
|
|
|
116
|
-
gapit itself is MIT-licensed.
|
|
117
|
-
|
|
118
|
-
|
|
148
|
+
gapit itself is MIT-licensed. Six audited, permissively licensed bundles ship inside
|
|
149
|
+
the wheel (the public-domain `ecoli_dec` and `lm_doumith` panels plus the `ncbi`,
|
|
150
|
+
`resfinder`, `ecoh`, `upec_expec_vf` snapshots: Apache-2.0 / BSD-3-Clause / MIT) and
|
|
151
|
+
materialize into the datadir on first use; every other provider downloads from upstream
|
|
152
|
+
at fetch time, and the content keeps its original
|
|
153
|
+
licenses (CARD's McMaster non-commercial terms, VFDB's CC BY-NC,
|
|
119
154
|
CGE, Kaptive's GPL-3.0, and so on); gapit does not relicense it. Providers that pin a
|
|
120
|
-
license expose it in `gapit db list --json`. Details in SPEC.md §9
|
|
155
|
+
license expose it in `gapit db list --json`. Details in SPEC.md §9 and the
|
|
156
|
+
[bundled section](./databases.md#bundled-databases-install-time-ready).
|
|
121
157
|
|
|
122
158
|
## How do I add a new database to the default set?
|
|
123
159
|
|
|
124
160
|
Write a provider module and fetch it by name: every provider downloads from its
|
|
125
|
-
upstream source at fetch time, transforms the records, and builds locally
|
|
126
|
-
|
|
127
|
-
MIT-licensed distribution). The header format,
|
|
128
|
-
specified in SPEC.md §11.
|
|
161
|
+
upstream source at fetch time, transforms the records, and builds locally. Nothing
|
|
162
|
+
beyond the six audited bundles ships in the wheel (upstream licenses such as CARD's or
|
|
163
|
+
VFDB's forbid redistribution inside an MIT-licensed distribution). The header format,
|
|
164
|
+
transforms, and build pipeline are specified in SPEC.md §11.
|