Gtars
Use Gtars for local genomic interval models and set algebra, overlaps and counts, consensus and coverage, tokenization, fragment processing, and refget/BEDbase planning across Python, Rust, and the CLI.
- Skill ID
- k-dense-ai/scientific-agent-skills/gtars
- Publisher
- k-dense-ai
- Repository
- scientific-agent-skills
- Installs
- 0
- Files
- 15
- License
- MIT
- Requires
- Python bindings require Python 3.10+ and gtars 0.9.2. The Rust meta-crate and gtars-cli are 0.9.0 and require a Rust toolchain supporting Edition 2024; upstream declares no rust-version. Bundled audit CLIs use only Python 3.10+ standard library and are local/network-free. Remote constructors, pretrained tokenizers, refget, and BEDbase caching require explicit network and storage approval.
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
k-dense-ai/scientific-agent-skills/gtarsInstalls these files- SKILL.md
- references/cli.md
- references/coverage.md
- references/overlap.md
- references/python-api.md
- references/refget.md
- references/tokenizers.md
- scripts/__init__.py
- scripts/_common.py
- scripts/artifact_inspector.py
- scripts/bed_validator.py
- scripts/coverage_preflight.py
- scripts/execution_plan.py
- scripts/refget_digest_plan.py
- scripts/tokenizer_manifest.py
What this skill tells the agent
Gtars
Gtars provides native Rust implementations, Python bindings, and a feature-gated gtars binary for genomic interval and reference-sequence work. Start with the bundled local inspectors; call upstream code only after the data contract, provenance, resource bounds, and side effects are explicit.
Verified snapshot (2026-07-23)
- Python: `gtars==0.9.2`, released 2026-06-17,
Requires-Python >=3.10. - Rust meta-crate: `gtars=0.9.0`, released 2026-06-15. Its default feature set is empty.
- CLI crate/binary: `gtars-cli=0.9.0`; the installed binary is named
gtars. - Direct refget crate: `gtars-refget=0.9.1`, released 2026-06-17.
gtars=0.9.0itself pins its component release set, which includes refget 0.9.0. - Upstream intentionally versions workspace crates, Python bindings, and CLI independently. Do not assume matching numbers mean matching artifacts.
- The published docs changelog stops at 0.5.1. API examples here were checked against the 0.9.2 Python stubs/runtime and the
v0.9.0CLI/Rust source.
The license: MIT field covers this skill. Published gtars crates declare MIT, while the GitHub repository currently displays BSD-2-Clause at the root; verify the exact artifact's license before redistribution.
Native-code trust gate and exact pins
The Python wheel contains a PyO3 native extension. Cargo installation compiles a native binary and can run dependency build scripts. Treat either path as code execution:
- Confirm the official PyPI/crates.io/GitHub owner and immutable version.
- Review filenames, platform tags, release provenance, license, and SHA-256. GitHub's v0.9.0 binary release includes per-archive
.sha256sidecars. - Never run an untrusted prebuilt binary, wheel, source tree, Cargo build script, or archive installer. Use isolation and CPU/RAM/disk/time limits.
- Keep a lockfile and artifact hashes with the analysis manifest.
After that review, create an isolated Python environment:
uv venv --python 3.11 .venv-gtars
uv pip install --dry-run --python .venv-gtars/bin/python "gtars==0.9.2"
uv pip install --python .venv-gtars/bin/python "gtars==0.9.2"
.venv-gtars/bin/python -c \
"import gtars; assert gtars.__version__ == '0.9.2'; print(gtars.__version__)"For the reviewed CLI source release:
cargo install gtars-cli --version 0.9.0 --locked
gtars --version
gtars --helpFor a Rust project, pin the wrapper exactly and enable only required features:
[dependencies]
gtars = { version = "=0.9.0", default-features = false, features = [
"core", "overlaprs", "uniwig", "tokenizers", "refget"
] }Use gtars-refget = "=0.9.1" directly only when the newer direct component API is required and compatibility has been tested. Do not replace these pins with a Git branch or an unreviewed release.
Genomic data contract
Apply this contract before every operation:
- Coordinates: BED intervals are 0-based and half-open:
[start, end). Require0 <= start < end <= contig_length. Gtars coordinates areu32, so reject values above4,294,967,295. - Assembly: record an assembly accession/version and the SHA-256 of the exact chromosome-sizes or refget sequence-collection metadata. Never infer assembly from filenames or
chrprefixes. - Contigs: compare names exactly.
1andchr1, alternate loci, decoys, and mitochondrial aliases are not interchangeable. Rename or liftover only as a separately reviewed transformation. - Sorting: preserve the original file, then sort a copy by chromosome-sizes order and numeric start/end when the operation requires it. Python
RegionSet(path)currently sorts lexicographically by contig and start while loading; do not rely on original row order afterward. - Strand: BED6 uses
+,-, or..Region.restretains trailing BED fields, but a file-backed PythonRegionSetcurrently initializes its separatestrandsvector to*. Several set operations drop strand. Preserve and validate strand externally when it is scientifically meaningful. - Duplicates/adjacency: choose policies explicitly.
reduce()and consensus merge overlapping and adjacent intervals; ordinary half-open overlap does not treat[0,10)and[10,20)as overlapping.
Run the local validator first:
python3 -B scripts/bed_validator.py \
--input data.bed.gz \
--assembly GRCh38.p14 \
--chrom-sizes GRCh38.p14.chrom.sizes \
--require-sortedSafe local workflow
- Inventory local files, checksums, assembly, contig dictionary, coordinate system, strand policy, patient/replicate groups, and intended outputs.
- Validate BED/fragments and estimate work. Pilot a small synthetic file.
- Choose Python, CLI, or Rust from the documented surface; do not translate API names by guesswork.
- Set hard limits for input bytes/records/files, threads/jobs, memory, temporary disk, output size, and wall time.
- Run in a dedicated output directory. Refuse collisions unless overwrite was explicitly approved.
- Revalidate output sorting, bounds, row counts, checksums, and provenance.
Current Python core
Imports are from submodules, not the gtars top level:
from gtars.models import Region, RegionSet
query = RegionSet.from_regions(
[
Region(chr="chr1", start=100, end=200, rest=None),
Region(chr="chr1", start=300, end=400, rest=None),
],
strands=["+", "-"],
)
universe = RegionSet.from_vectors(
["chr1", "chr1"],
[150, 500],
[350, 600],
)
counts = query.count_overlaps(universe) # one count per query region
flags = query.any_overlaps(universe) # one bool per query region
indices = query.find_overlaps(universe) # indices into universe
pieces = query.intersect_all(universe) # all intersection fragments
fraction = query.coverage(universe) # fraction of query bp coveredRegionSet.sort() mutates and returns None. Set algebra includes reduce, setdiff, pintersect (pairs by index), concat, union, jaccard, coverage, overlap_coefficient, intersect_all, closest, cluster, and gaps. Read references/python-api.md before relying on ordering or strand.
Consensus is a Python binding in a different module:
from gtars.genomic_distributions import consensus
rows = consensus([query, universe])
# rows: [{"chr": ..., "start": ..., "end": ..., "count": ...}, ...]Signal-track generation is not exposed as gtars.uniwig in Python 0.9.2; use the reviewed CLI or Rust API. RegionSet.coverage() is a base-pair set metric, not a WIG/bigWig generator.
Tokenizers, fragments, and reference stores
Use only local constructors by default:
from gtars.models import RegionSet
from gtars.tokenizers import Tokenizer
tokenizer = Tokenizer.from_bed("reviewed-universe.bed")
regions = RegionSet("local-query.bed")
tokens = tokenizer.tokenize(regions)
encoding = tokenizer(regions)
ids = encoding["input_ids"]Tokenizer.from_pretrained(name) contacts Hugging Face and writes its cache when the argument is not an existing local directory; it exposes no revision or cache argument. Obtain explicit approval, fetch an immutable revision through a reviewed mechanism, verify checksums, then pass the local snapshot directory. See references/tokenizers.md.
For refget, prefer RefgetStore.in_memory() or RefgetStore.open_local(path). open_remote(cache_path, remote_url) contacts a remote service, creates/uses a local cache, and performs on-demand range reads. See references/refget.md.
Network and cache gate
No download or cache write is implicit in this skill. Before any network-capable upstream call:
- obtain explicit user approval for the exact host, endpoint, data, and cache;
More from k-dense-ai
Use this skill in a project
Open any RiverX project, search the Skills panel for k-dense-ai/scientific-agent-skills/gtars, and install it in one click.
