- Bugfix on 32-bit platforms where reverse-complementing k-mers used
usize::BITSinstead ofu64::BITS.
- Improve docs
- Add
PackedSeq{Vec}Base::from_raw_partsto construct directly from aVecor slice. - Add
PackedNSeqVec::from_ascii_and_qualitythat masks out low-quality bases. - Add
PackedNSeqVec::from_{fastx,fastq_with_quality}behindfile_iofeature (forneedletaildependency). - Add experimental
PackedEfNSeqthat storesNpositions in an EF vector, behindef_seqfeature flag (forsuxdependency).
- Add
unpack_kmer_to_vec(kmer: u64, k) -> Vecand variants. - Add
pack_kmer_lossy(kmer: &[u8]) -> u64and variants. - switch to
ensure_simd
- Perf: improve NEON codegen by avoiding
u32x8::splat. - Perf: reuse thread-local allocations between invocations
- Feat:
par_iter_bp_*_with_bufversions that allow passing in buffers from the stack, which can be slightly faster than thread-locals. - Perf: all
PackedSeqslices have padding to allow faster out-of-bounds reading. - Perf: Rewrite
par_iter_kmer_ambiguityto use a delayed iterator. - Feat: Add
PackedNSeq::slice(Range<usize>)utility.
- Feat:
PackedNSeqVec::{default,clear,push_ascii}. - Feat:
BitSeqVec::par_iter_kmer_ambiguitysupportskup to96.
- Perf: Further optimizations to
BitSeq::from_asciiandPackedSeq::from_asciifor both AVX and NEON. (Fewer out-of-bounds checks, NEON optimizations to work around lack ofmovemask.) - Perf: Add small benchmarks (in
src/test.rs) for{Bit,Packed}Seq::push_asciiandPackedSeq::par_iter_bp. - Perf: More
#[inline(always)]for better performance withlto="thin". - Feature: Add
BitSeqVec::random. - Feature: Add
PackedNSeqas a wrapper around(PackedSeq, BitSeq)to hold 2+1-bit encoded data, with the first 2 bits encoding ACGT, and the last bit indicating non-ACGT IUPAC characters (such as N, R, Y, ...). - Feature: Add
PackedSeq::par_iter_bp_delayed_with_factor(mirringpar_iter_bp_delayed_2_with_factor) for use inseq-hash. - Bugfix for repeated
BitSeq::push_ascii. - Bugfix for
BitSeq::to_revcomp(which was still 'complementing' instead of only reversing).
- Feature: optimize
BitSeq::from_asciifor NEON. - Bugfix: 1-bit
reversewas also doing 'complement'.
- Feature: Add
BitSeqandBitSeqVecas 1-bit encoded 'sequences' that by default indicate the positions of ambiguous (non-ACTG) characters. - Feature: Add
BitSeq::par_iter_kmer_ambiguitythat returns for each kmer whether it contains an ambiguous base. - Breaking: Encapsulate parallel iterators in new
PaddedIt { it, padding: usize }type with.map,.advance,zip, and.collect_intofunctions. - Breaking: Make
delaypassed intopar_iter_bp_delayeda strong typeDelay(pub usize)to reduce potential for bugs. - Make
intrinsics::transposepublic for use incollect_and_dedupinsimd_minimizers.
- Add
Seq::read_{revcomp}_kmer_u128with more tests - Fix bug in
revcomp_u128
- Add
Seq::as_u128andSeq::revcomp_as_u128 revcomp_u128had a bug; fixed in 3.2.1
PackedSeqVec::{from,push}_asciinow silently convert non-ACGT characters to values in0..4, instead of inconsistently only panicking for non-ACGT near the sequence start and end.
- Speed up
PackedSeqVec::push_ascii()on ARM - Add
Seq::to_revcomp(). - Add
PackedSeqVec::clear(). PackedSeq::as_u64now supports k up to 32, instead of only up to 29. (Fixes #2.)PackedSeqVec::getnow uses checked indexing, to prevent unsafe out-of-bounds access.- Breaking:
PackedSeqVecandPackedSeqfields are now private, to uphold internal padding guarantees. - Add convenience methods
{Seq, SeqVec}::{read_kmer, read_revcomp_kmer}as shorthands for.slice(pos..pos+k).as_u64(). - Deprecate
to_wordandto_word_revcomp. Insteadas_u64andrevcomp_as_u64are added. ('word' is not very clear, andu64makes more sense for kmers thanusize.) - Support
par_iter_bpfor sequences that do not start at byte offsets. - Add
packed_seq::revcomp_u64()andSeq::revcomp_as_u64()for reverse complementing kmers. - Make
randomdependency optional but enabled by default (so it can be disabled for wasm backends).
- Change from tuples of (simd iterator, scalar tail iterator) to returning only a
simd iterator and
padding: usizethat indicates the number of padded elements at the back that should be ignored.
- Initial release.