pypi lifton 1.0.10
LiftOn v1.0.10

latest releases: 1.0.14, 1.0.13, 1.0.12...
3 months ago

LiftOn v1.0.10 consolidates everything that accumulated behind the v1.0.10 tag: the originally staged v1.0.10 work, a batch of GitHub-issue fixes, a full-repository correctness audit, and a CDS-attribute parity fix. v1.0.9 is the baseline for every comparison below — the intermediate versions were never published.

pip install -U lifton

Highlights

  • Whole genomes that used to abort now finish. On five of seventeen full RefSeq genomes v1.0.8 aborted mid-run; v1.0.10 completes all of them — Arabidopsis coding completeness 28.2% → 99.9% (+34,589 transcripts), rice 77.3% → 99.9% (+9,594). A single malformed locus can no longer take a 60,000-gene annotation with it: per-locus failures are published, reported as partial_success, and recorded in run_manifest.json.
  • Output validates clean. 0 gff3-validate errors on 9 of the 17 whole genomes, and fewer errors than the DNA-only Liftoff on all 17. The residuals on plant genomes are reference-inherited organellar structures, not introduced by LiftOn.
  • Up to ~24× less peak memory than v1.0.8 on the controlled comparison, and GFF3 validation alone drops from 5.64 GB to 267 MB on a full mammalian lift (21×, 1.9× faster). Step 7 is ~21% faster on Drosophila at -t 8, byte-identically.
  • Ten reported issues fixed — see below.

Changed: output-affecting defaults (results differ vs v1.0.9)

Each ships with an opt-out.

Default Opt-out
Third best-of-outcome merge candidate — miniprot's native CDS-only model, adopted only when strictly better, never for an antisense hit --no-miniprot-candidate
Divergence-adaptive miniprot-only rescue floor (0.50 → toward 0.30 as DNA-lift recall drops; inert on close pairs) --no-adaptive-rescue-floor
Every CDS carries the reference's descriptive attributes LIFTON_NO_CDS_ATTR_CARRY=1
Every CDS carries a shared ID=cds-<transcript> LIFTON_NO_CONTAINMENT_NORMALIZE=1
Coding transcripts harmonized to mRNA LIFTON_NO_MRNA_HARMONIZE=1

Note for downstream consumers: output files are 12–43% larger than v1.0.9, because CDS rows now carry the descriptive attributes the reference had. Coordinates and the encoded protein are unchanged — verified with columns 1-8 byte-identical across all 1,815,199 rows of a dog→cat lift, with protein_identity unchanged on every one of its 66,276 transcripts.

Fixed: installation

  • pip install lifton failed in any clean environment, on every prior release. LiftOn depended on cigar 0.1.3 — unmaintained since 2015, sdist-only, whose setup.py calls ez_setup.use_setuptools() to download a setuptools egg from a URL that no longer serves one. Any install without a cached wheel died with tarfile.ReadError: not a gzip file. LiftOn used exactly one call from it; that parsing now lives in-tree and the dependency is gone.

Fixed: reported issues

  • #35 — no such column: <id> from the DNA lift. Vendored Liftoff double-quoted its id IN (...) values, which SQL reads as an identifier; modern SQLite rejects it while older builds silently accepted it, which is why the same input worked on one machine and failed on another. IDs are now bound as parameters.
  • #39 — one unresolvable alignment no longer kills an entire chromosome.
  • #33 — an antisense miniprot hit can no longer be merged into a transcript on the opposite strand, which produced exon and CDS rows with conflicting strands.
  • #46 — UTR indels are no longer reported as frameshifts; detection is scoped to the coding sub-alignment.
  • #32, #8 — CDS rows carry an ID (and the reference's descriptive attributes).
  • #28 — coding transcripts are typed consistently as mRNA.
  • #43, #11 — minimap2 is preflight-checked at startup and documented as a requirement.
  • #50 — the run summary is written to stats/summary.txt, not only stderr.
  • #57 — invalid, stale, or Git-LFS-pointer minimap2 indexes are detected and rebuilt instead of yielding a header-only lift.
  • #56 — --stream no longer crashes on DuckDB 1.5.3/1.5.4 (both excluded).

Also in this release

Auditable run_manifest.json for every run, transactional output that publishes atomically only on success, always-on structural validation before publication, content-addressed annotation caches, and bounded per-stage scheduling (--step7-max-inflight and siblings).

Full details: CHANGELOG.md · documentation · technical report

Don't miss a new lifton release

NewReleases is sending notifications on new releases.