Skip to content

feat(io): optional paraseq FASTQ backend - #273

Open
BenjaminDEMAILLE wants to merge 1 commit into
mainfrom
feat/paraseq-backend
Open

BenjaminDEMAILLE wants to merge 1 commit into
mainfrom
feat/paraseq-backend

Conversation

@BenjaminDEMAILLE

Copy link
Copy Markdown
Contributor

Closes #95 ("praseq" is paraseq 0.6 on crates.io).

  • paraseq feature, off by default. When built with it, RUSTAR_FASTQ_BACKEND=paraseq switches the reader at run time (same pattern as feat(io): optional pure-Rust parallel gzip input decoding (rapidgzip-core) #225's env gate).
  • Name cutting, base encoding and quality shift are shared with the noodles path, so both produce identical records.
  • Truncated final records now error, as with noodles. Only difference: paraseq rejects records where sequence and quality lengths differ (malformed input).

Reader-only throughput, 1M x 150 bp: plain 0.42 s → 0.26 s (~1.6x), gzip-1 0.52 s → 0.36 s (~1.45x). The aligner consumes far less than either, so end-to-end gain is expected to be small.

Tests: 6 equivalence tests (SE, PE, gzip, CRLF, non-default quality params, uneven PE, truncation). cargo test passes with and without the feature, clippy 0 warnings.

Note: overlaps #218 in the gzip branch of fastq.rs; after #218 lands, paraseq should read from its open_decoded.

🤖 Generated with Claude Code

Adds paraseq 0.6 behind the paraseq feature, selected at runtime with
RUSTAR_FASTQ_BACKEND=paraseq. Record encoding is shared with the noodles
path so both produce identical reads; equivalence tests cover SE, PE,
gzip, CRLF and non-default quality parameters.

Closes #95

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

add praseq as an option for input

1 participant