- Support
max_n_fracdirectly in theSearcherAPI, rather than only in the CLI. A small breaking change removes themax_n_fracargument fromSearcher::search_all_alignents. (#66, #67)
- Fix that
Searcher::without_tracewas ignored. Specifically this madesearch_allandsearch_all_alignmentsunnecessarily slow. (#65)
- Add
Searcher::search_all_alignmentsthat returns a list of all possible alignments of cost up tokfor each matching end position. of cost up tok(#46, #55, #56, #57, #63). Thanks to @theJasonFan and @TimD1! - Bump
cargo-multiversto 0.12.0 to fix running x86 emulation on macbooks (#64). - Fix name of binary in
cargo help(#64). - Improved layout of statistics on number of matches.
- Improved rendering in ASCII mode.
- Add grep-like
sassy agrepfor searching plain-text files. search_manyandsearch_textsnow accept any slice where the elements implementRcSearchable, not just a slice of references to a type implementingRcSearchable. This means that in some cases there is no need to create a temporary Vec just to hold texts references (#60).- Fix
SearchModenot being public, makingsearch_manyuseless outside the Python bindings.
- Build GitHub x86-64 binaries for both AVX2 and AVX-512 using
cargo multivers.
- Breaking: Tracebacks now prefer substitutions over indels, as this is more practically useful: #46 (Previous behaviour was to prefer matches, and otherwise deletion over substitution over insertion.)
- docs: Add Rust and CLI examples for v2 to the readme
- docs: Clarify the tsv output of
sassy searchin the readme. - docs: Clarify overhang #37
- feat: Add
sassy grep --v2for searching based on the algorithm of the v2 paper. - feat: Add
sassy search --samflag to report negative-strand matches and CIGARs in the text direction, rather than the default of reverse-complementing them to match the pattern direction. #49 - feat: Add
sassy crispr --pam-length <len>to allow changing the default of 3. - python: Add python typing #43
- misc: Introduce default-enabled
clianddiagnosticsfeatures to allow pruning dependencies and building for WASM. #50 #51 redundant dependencies. - misc: Refactors to share traceback code between v1 and v2.
- evals: Updates to v1 and v2 evals.
The main new feature of this v2 release is search_encoded_patterns, written by @RickBeeloo,
for searching many short and equal length patterns (say 23 bp; should be at most
32 or else 64) in parallel. This is 2x or more faster than eg search_patterns,
because it packs deltas in the pattern (rather than text) direction, which
removes a lot of overhead in the 'early break check' and makes the 'profile'
much faster.
v2 also adds new variants of the existing Searcher::search method:
search_patterns: search multiple similar-length patterns in a single text. Useful for searching in short texts where chunking them in pieces via the normalsearchhas large overhead. This uses one SIMD lane per pattern.search_texts: search a single pattern in multiple similar-length texts. This uses one SIMD lane per text.search_many: a more high-level wrapper that takes a list of patterns and texts and does an all-vs-all search on multiple threads, using a user-specified underlying algorithm.
Further changes:
- Breaking: Cigar output now follows the SAM spec and reversed
IandDcompared to before.Inow means the pattern contains a character that is not in the text. - feat: Support AVX512 for pattern tiling.
- feat: moved pretty printing from
bin/grep.rsto publicly availableMatch::pretty_print. - feat:
Matchnow containstext_idxandpattern_idxfor multi-search variants. - feat: Add
Searcher::only_best_matchandSearcher::without_trace. - perf: Collect matches into an internal Vec before returning that.
- fix:
sassy grepwould crash on printing reverse complement matches with overhang. - fix: fix issues with duplicate reported matches in overhang
- misc: debug-printing a
Matchnow uses stringified cigar. - misc: Add python bindings for
search_many
- bugfix:
sassy grephad a bug in the batching logic, making it skip a record after every 1MB of input. So for human genomes it would only search every other record. - docs: Recommend to use
Profile::Iupacinstead ofProfile::Dnain docs and examples. (#38) - misc: set up
cargo release
- Implement
RcSearchablefor?Sizedtypes such as[u8], so thatseach(_, text, _)now works fortext: &[u8], instead of onlytext: &&[u8]. - Migrate back from
cargo-distto a small manualrelease.yaml. - Abort on panic.
- Sassy is now available on bioconda!
- ci: add aarch64-linux target for github releases, drop windows targets
- ci: by default
target-cpu=native, butconfig-portable.yamlfor CI builds - doc: readme updates for
target-cpu - update to
ensure_simdfor compile-time AVX2 check and add a run-time check as well.
- Improved compile error message when not using
-target-cpu=native. (#37) - Added installation section to README, explaining the use of
RUSTFLAGSand minimal required rust version. (#37) - Assert whether the selected profile supports overhang.
- Add
cargo-distfor binary release artefacts. - Move some internal features from feature-gated to
#[doc(hidden)] mod private {}.
- feat: Use
wideinstead ofportable-simdso thatsassynow works on stable Rust (#26). It's slightly (<5%) slower and has slightly ugly code, but good enough for now.
- feat: Add
sassy search,sassy filter, andsassy grep(#35, see updated readme). - perf: Improvements when searching short (len ~16) patterns, by avoiding
redundant expensive
find_mininimacall. - perf: Improvements when searching short texts without overhang, by avoiding redundant floating point operations.
- misc: Bump
pa-typesto1.2.0forCigar::to_char_pairsto conveniently iterate over corresponding characters. - misc:
derive(Clone)forSearcher(#36) - misc: Bugfix for mixed-case IUPAC input.
- docs: Minor documentation & readme fixes.
- Improve docs for
sassy crispr(#34 by @tfenne). - Require value for
--max-n-frac(#33 by @tfenne). - Check that AVX2 or NEON instructions are enabled; otherwise
-F scalaris required. - Non-x86 support: Use
swizzle_dyninstead of hardcoding_mm256_shuffle_epi8. - Add fallback for non-BMI2 instruction sets; 5-20% slower.
- Update
pa-typesto1.1.0for CIGAR output that always includes1(eg1=). - Fix/invert
sassy crispr --no-rcflag. - Ensure output columns of
sassy crisprmatch content (#31 by @tfenne).
- Include source code in pypi distribution.
- First public release on crates.io and pypi.