Releases: CDCgov/zoe
Releases · CDCgov/zoe
Zoe v0.0.28
Release Notes for v0.0.28 - 2026-04-29
Added
- Similar to the
OrFailtrait forResult, aFailtrait has been introduced to handle errors directly - Added
*_mappedversions for many string/byte search functions, which search a lazily-mapped haystack - Added
as_mapaccessor to convertByteIndexMaptoByteMap NucleotidesandAminoAcids(and view types) can now be converted intoVec, slices, andCowusingFromNucleotidesView,AminoAcidsView, andQualityScoresViewnow have inherentslicemethods offering a longer lifetime of the returned view
Changed
LocalProfilesandSharedProfilesnow can hold either a borrowed or an owned sequence, enabling sequences and profiles to be stored in the same struct without becoming self-referentialCigletIteratornow yields empty ciglets when a CIGAR string contains an explicit increment that is 0. A missing increment field ends the iterator earlyfind_mapped_match_simdbetter handles needles with a single repeating byte, but now only supports lane counts greater than 2
Fixed
- Fixed incorrect ranges returned by
Alignment::to_reverseandAlignment::make_reverse - Methods in
StatesSequenceandStatesSequenceMutnow properly skip emptyCiglets (with an increment of 0) - Pre-alignment filter
sneaky_snakenow properly handles inputs with length differences greater than provided threshold. - Subsequent calls to
next_backinCigletIteratornow properly returnNoneafter invalid state is reached - Equality comparisons between
CigarandAlignmentStatesnow properly return false for an overflowing increment - Fixes the potential of overflow in
hamming
Zoe v0.0.27
Release Notes for v0.0.27 - 2026-04-15
Added
- Added
ByteMapfor defining and representing maps fromu8values to otheru8values (e.g., for sanitization/recoding), as well as many pre-defined maps - Added
ByteValidatorfor defining alphabets or subsets of valid bytes - Added
SanitizeBaseextension trait foru8to perform DNA validation, recoding, and refinement on a single byte - Added
find_start_codonas well as a modified string search routine supporting lazy transformations of the haystack (find_mapped_match_simd) - Added
to_aa_iter_exactandto_aa_iter_exact_withfor amino acid translation that does not include a partial codon for codons with less than 3 bases at the end of a sequence - Added
find_next_aaandfind_next_aa_in_frametoRangeSearch - Added
find_bytetoByteSubstring(for searching strings and for use withRangeSearch) - Added
as_mut_vectoAlignmentStates,Nucleotides, andAminoAcidsto enable custom editing - Added
push,starts_with, andends_withtoNucleotidesandAminoAcids - Implemented
ExtendforNucleotidesandAminoAcids - Added
AcgtNoGapsUcstrategy for retaining/recoding DNA
Changed
- Renamed
from_filenametofrom_pathfor Zoe's readers, deprecating the old functions - Renamed
with_file_contexttowith_path_contextfor errors, deprecating the old functions - Renamed
is_valid_codontois_resolvable_codoninCodonExtension is_amino_acidnow behaves the same asis_known_amino_acid, andis_known_amino_acidis removedRangeSearchnow contains a generic with the original type to allow search methods to restrict the types of data they are used onStdGeneticCodenow translates codons with mixed-and.bytes to.OrFailis now only implemented on errors with a'staticlifetimeretain_by_recodingnow usesByteMap, andretain_by_validationnow usesByteValidator- Implemented
Copyfor several immutable views
Removed
- Removes
open_nonempty_file, which produces incorrect results for piped inputs itoais no longer a dependency of Zoe.
Fixes
- Fixes a bug where pipes are interpreted as empty files with
FastQReader::from_filename(and similarly forFastaReaderandSAMReader) - Fixes a bug in
p_distance_acgtwhere longer sequences could be normalized incorrectly. - Fixes a bug in
physiochemicaldistance to ensure invalid sequences are not comparable
Zoe v0.0.26
Release Notes for v0.0.26 - 2026-03-06
Added
- Adds the
sneaky_snakepre-alignment filter for imposing an edit distance threshold - Added convenience methods for checking the variant of
SeqSrc - Implemented
to_reverseandmake_reverseforMaybeAligned<Alignment<_>> - Implemented
SequenceReadablefor profile sets - Implemented
PartialOrdforAlignmentandMaybeAligned
Changed
- Development features now only use internal documentation on GitHub
- Generalized sampling methods to accept any random generator (behind
randfeature gate) - Updated to use
randv0.10.0, which includes breaking changes (behindrandfeature gate)
Fixed
- Fixed the constructors for
SharedProfilesto match those ofLocalProfiles
Zoe v0.0.25
Release Notes for v0.0.25 - 2026-02-04
Added
- Adds methods to pad and extend
NucleotidesandAminoAcids
Changed
- Zoe's MSRV is now 1.95 (nightly).
Fixes
- Fixes Zoe to use the latest sync'd portable SIMD in Rust nightly 1.95. For earlier versions, try Rust nightly 1.94.
Zoe v0.0.24
Release Notes for v0.0.24 - 2026-01-26
Added
- Stabilized the
dev-3passfeature for performing a memory-efficient three-pass local alignment routine, as well as other helper algorithms - Added
WithErrorContextandResultWithErrorContexttraits using the newErrorWithContextstruct for updated error-handling - Added
prepend_state,prepend_ciglet, andprepend_inc_optoAlignmentStates - Added
get_first_codon,get_last_codon, andget_tail_codontoGetCodonstrait, with mutable equivalents inGetCodonsMut - Added
CodonExtensiontrait for[u8; 3]with convenience codon characterization methods - Added
StatesSequenceMuttrait andAlignmentStates::as_mut_sliceto provide mutable access to ciglets while iterating/processing - Added
ToCigletIteratortrait, implemented on structs which can be converted to an iterator of ciglets - Added
LenInAlignmenttrait, replacing the previousmatch_lenand offering a more flexible API - Added methods and implementations to iterate over CIGAR views
- Added
to_alignmentto convertSamDatatoAlignment - Added ability to push tags to
SamTags - Added
InspectCigarfor checking for indels in CIGAR strings orAlignmentStates - Added
VARIANTSconstants and index comparison methods for pHMMs (behinddev-phmmfeature gate) - Added row and column accessors to
TransitionParams(behinddev-phmmandalignment-diagnosticsfeature gates)
Changed
- Modified alignment methods on profiles to take a
SeqSrcenum as an argument, allowing the returned alignment to properly reflect which sequence is the query and which is the reference - Renamed alignment methods/functions to use the terminology
swinstead ofsmith_watermanandaligninstead ofalignment - Alignment methods returning indices or ranges now return specialized structs
- The
arbitrarymodule now uses specification structs to allow various restrictions to be enforced when generating Zoe data types. See the module level documentation for more details - Updated error handling logic and style for
OrFailtrait - Standalone function
zoe::data::err::open_nonempty_fileis now public SharedProfilesno longer holds the sequence asBox<u8>, instead using&'a [u8]- Condensed the
PhmmParamKindvariants in thevisit_paramsAPI (behinddev-phmmfeature gate)
Fixes
- Fixed spelling of
filter_to_dna_uanlignedtofilter_to_dna_unalignedin traitToDNA - Fixed bug for parsing -128 in a weight matrix using
MatParser
Removed
- Removed the
match_lenmethod from CIGAR strings in favor ofLenInAlignment - Removed
CheckedCigarin favor ofLenInAlignment(checked methods are behind thefuzzingfeature gate)
Zoe v0.0.23
Release Notes for v0.0.23 - 2025-11-24
Added
- Added
nw_scalar_scoreandnw_scalar_alignmentfor performing global sequence alignment - Added random downsampling for iterators of known and unknown lengths in
iter_utils::sampling - Added the method
process_resultsto more robustly work with iterators of results - Added
get_aligned_query, similar toget_aligned_seqsbut returning only the query sequence - Added additional getters and convenience methods on
SamTagsandSamTagValue - Added
to_eq_xtoAlignmentandAlignmentStates, which convertsMto either=orXin the alignment - Added
SequenceReadablegetter trait to record types and sequence types - Added
from_ciglets_uncheckedandfrom_cigar_uncheckedtoAlignmentStates - Added
decode_itertoKmerEncoder - Added
nw_score_from_pathfor rescoring a global alignment (behindalignment-diagnosticsfeature gate) - Introduced the
AlignmentAndSeqsandAminoAcidsIupacXarbitrary wrappers (behindfuzzingfeature gate) - Added
visit_paramsmethods to pHMMs as a diagnostic tool for inspecting the parameters that are visited along a given path (behinddev-phmmandalignment-diagnosticsfeature gates) - Added the ability to remove layers from a pHMM (behind
dev-phmmandalignment-diagnosticsfeature gates)
Changed
TryFromforAlignmentStatesnow merges adjacent ciglets with the same operation- An iterator of ciglets now collects into a
Result<AlignmentStates, CigarError>instead ofAlignmentStates, and performs merging as above - The view traits have been refactored so that all associated types are defined in the
ViewAssocTypestrait reborrow_viewhas been added to allow invariant lifetimes to be shortened in viewsVec<u8>,&[u8], and&mut [u8]now implement the various view traits- Pairs of methods accepting encoded and decoded k-mers have been merged
KmerCounterhas had its methods renamed frominserttotally- Iterators over encoded k-mers from
KmerSetnow return owned values KmerCollectionContainsis renamed toFindKmersInSeq- The
kmermodule has been restructured to simplify the docs - Implemented
std::fmt::BinaryforThreeBitEncodedKmer, and added it as a trait bound toAnyInt sw_score_from_pathandsw_scalar_alignment_overrideare now behind thealignment-diagnosticsfeature gate- Modified the behavior of
AlignmentArbitraryandAlignmentStatesArbitrary(behindfuzzingfeature gate) - Refactored the organization/visibility of pHMM code; modified
SamHmmParserconstructors; applied compact bit representation for Viterbi traceback; switched to eager evaluation fornext_indexandprev_index(behinddev-phmmfeature gate) - The inner fields of
SAMReaderandFastQReaderare now properly private, andSliceRangeis properly public
Fixed
- The
fuzzingfeature now successfully compiles even whendev-phmmis not enabled - Fixed another NaN error that would occur when certain transitions in a pHMM were zero probability (behind
dev-phmmfeature gate)
Removed
- Removed checked methods from
KmerEncoder(they only provided partial checking and proved not useful)
Zoe v0.0.22
Release Notes for v0.0.22 - 2025-09-25
Added
- Added banded Smith Waterman implementation as a more memory-efficient alternative for long sequence alignment
- Added
HeaderReadablegetter trait for record types - Added
slice_to_ref_rangemethod forAlignment, in order to slice/clip an alignment to a desired portion of the reference - Added
CheckedCigartrait for summing the lengths for operations consuming the query/reference (behindfuzzingfeature fate) - Implemented
ArbitraryforAlignmentStatesandAlignmentalong with additional wrapper types (behindfuzzingfeature gate) - Added Viterbi algorithm for
DomainPhmm(behinddev-phmmfeature gate) - Implemented
ArbitraryforSemiLocalPhmmandDomainPhmm(behindfuzzinganddev-phmmfeature gates) - Added
sw_scalar_alignment_overridefor more flexible testing of dynamic programming alignment algorithms (behindfuzzingfeature gate)
Changed
- The wrapper types for generating arbitrary CIGAR strings have been modified (behind
fuzzingfeature gate) - pHMM types and algorithms now rely on the more general
PhmmNumbertrait instead ofFloat(behinddev-phmmfeature gate)
Fixes
ProfileSetsis re-exported in the prelude- Fixed the initialization of the first match score for the semilocal Viterbi algorithm (behind
dev-phmmfeature gate) - Fixed the calculation of the end score for semilocal Viterbi algorithm to allow passing through the END state (behind
dev-phmmfeature gate) - Avoid error with NaN that may appear when using the
score_from_pathfunction on local or domain pHMMs (behinddev-phmmfeature gate)
Zoe v0.0.21
Release Notes for v0.0.21 - 2025-09-05
Added
- Added
sw_simd_score_endsfor getting the score and end coordinates of the alignment - Added byte index map for amino acids, BLOSUM scoring matrices, and PAM scoring matrices
- Added display implementation for
WeightMatrix - Added
get_subsettoWeightMatrixfor subsetting a weight matrix with a different alphabet - Added
parse_matrixfor parsing aWeightMatrixfrom a file at compile time - Added accessor
byte_keys()forByteIndexMap - Added unchecked constructors for
ScalarProfileandStripedProfile - Added
SamDataViewandSamDataViewMut - Added
mapattribute syntax todefine_whicheverandimpl_traits, so that a map can be applied when implementing iterator - Added
dev-3passfeature gate for additional alignment functions that return coordinates, as well as a three-pass alignment function with reduced memory usage - Added
score_from_pathandviterbiforLocalPhmm(behinddev-phmmfeature gate) - Added
DomainPhmm, along withscore_from_pathfor it (behinddev-phmmfeature gate) - Added
SemiLocalPhmm, along withscore_from_pathandviterbifor it (behinddev-phmmfeature gate)
Changed
MaybeAlignednow can hold other types besidesAlignment, and score-only functions now returnMaybeAligned<u32>into_biased_matrixhas been renamed toto_biased_matrixand takes&selfWeightMatrixis now imported underdata::matricesin addition todataWeightMatrixnow has an additional lifetime generic for theByteIndexMapWeightMatrixno longer implementsCopy- The
@symbol is no longer included at the beginning of a header in aFastQrecord (the reader strips it, and the display implementation re-adds it) - Added
tagsfield toSamData, as well as the ability to opt out of storing the tags inSamReader - Changed
Debugimpl ofCigarViewMutand derived more traits - Various Smith-Waterman profile set methods have been moved to trait methods
forProfileSets. - Updated traceback in
viterbito not use nested vecs (behinddev-phmmfeature gate) - Removed
as_u32fromAlignment, since the integer type for scores has been standardized
Fixes
- Fixes a bug in
AlignmentStates::add_ciglet()forinc> 1