All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
v0.6.0 - 2023-08-31
- Validating constructor
::pwm::FrequencyMatrix::new
testing for frequencies on each ranks. - Getter to the raw data matrix of a
::pwm::FrequencyMatrix
.
New crate with JASPAR, TRANSFAC and UNIPROBE format parsers.
- Make
max_score
andmin_score
columns of::pwm::ScoringMatrix
ignore the wildcard symbol column.
- Invert decay in
TfmPvalue
to reduce rounding errors when computing granularity. - Use a fast integer hashing algorithm for
i64
keys in maps used for recording Q-values. - Compute the optimal column permutation to accelerate the computation of score distributions.
Deprecate crate in favour of lightmotif-io
.
v0.5.1 - 2023-08-31
- Compilation for Arm NEON platforms.
v0.5.0 - 2023-08-31
- Arm NEON implementation of
Threshold
andEncode
. Alphabet::as_str
method to get the symbols of an alphabet as a string.DenseMatrix::fill
method to fill a dense matrix with a constant value.- Convenience getters and conversion traits to
StripedSequence
. Stripe
trait to implement striping of an encoded sequence with SIMD.- Dynamic dispatched pipeline selecting the best implementation as runtime.
PartialEq
implementation forEncodedSequence
.
- Buffer and copy protocols for
StripedSequence
andEncodedSequence
. - Indexing support to
EncodedSequence
.
- Convenience methods to access the wrapped
ScoringMatrix
reference inTfmPvalue
.
Encode::encode
now returns anEncodedSequence
instead of a rawVec
.- Performance improvements for
Encode
for AVX2 and NEON by removing non-const function calls in loop. - Performance improvements for
Threshold
by skipping the index buffer initialization. - Avoid buffer initialization when allocating a new buffer in
EncodedSequence::encode
. - Require
Symbol
implementors to implementEq
.
- Use the dynamic dispatch pipeline to run vectorized operations.
- Make
TfmPvalue
generic over the type of reference to the wrappedScoringMatrix
.
Debug
implementation ofDenseMatrix
crashing when attempting to render the padding bytes.
v0.4.0 - 2023-08-10
- Improve
DenseMatrix::resize
performance when downsizing. - Explicitly panic when sequence is too long to be processed with
u32
indices in AVX2 and SSE2. - Reorganize
DenseMatrix
column alignment and index storage. - Improve
Score
performance by using pointers instead of slices in SIMD loops. - Rename
DenseMatrix::columns_effective
toDenseMatrix::stride
. - Use streaming intrinsics to store data in AVX2 and SSE2 implementations.
- Rename
BestPosition
trait toMaximum
.
- Avoid error on missing symbols in
CountMatrix.__init__
Threshold
trait to find all position above a certain score in aStripedScores
matrix.Encode
trait to encode an ASCII sequence into aVec<Symbol>
.- AVX2 implementation of
Score
usinggather
instead ofpermute
for protein alphabets. From<Vec<_>>
andDefault
trait implementations toEncodedSequence
.Alphabet
methods to operate on ASCII strings.StripedScores.is_empty
method to check if aStripedScores
contains any score.
StripedScores.threshold
method wrapping theThreshold
pipeline operation.StripedScores.max
andStripedScores.argmax
methods to get the best score and best position.
Score
causing an overflow when given a sequence shorter than the PSSM.Maximum
trait returns the smallest position on equal maxima.
v0.3.0 - 2023-06-25
- Rewrite the SSE2 maximum search implementation using a generic number of columns.
- Refactor
lightmotif::pwm
to avoid infinite odds-ratio for columns with zero background frequencies.
lightmotif-tfmpvalue
crate implementing the TFMPvalue for computing p-values for aScoringMatrix
.DenseMatrix::from_rows
method to create a dense matrix from an iterable of rows.PartialEq
implementation for matrices inlightmotif
.- Methods to compute the minimum and maximum scores of a
ScoringMatrix
.
v0.2.0 - 2023-05-15
- Crate structure to avoid cluttering the main
lightmotif
module namespace. - Swizzling used in the SSSE3 implementation to make it require SSE2 only.
- TRANSFAC parser to support parsing sections in arbitrary order and accept additional metadata.
- Use
memchr
to parse lines faster in TRANSFAC parser. - Use
typenum
andgeneric-array
to handle constant matrix dimensions. - Make
Score
trait generic over the number of columns in the striped sequence.
- Accessors for some of the attributes of
lightmotif_transfac::Matrix
. - Pipeline method to extract the best position from a
StripedScore
matrix. - Child trait for alphabet complementation.
- Methods for reverse-complementing all matrices from
lightmotif::pwm
. Alphabet::symbols
method to get all the symbols of an alphabet.StripedSequence::encode
constructor to encode and stripe a text sequence without allocating an extraEncodedSequence
.- Iterator methods and helper struct for
StripedScores
. Protein
alphabet tolightmotif::abc
.DenseMatrix::uninitialized
constructor to allocate a dense matrix without filling its contents.lightmotif::num
module withtypenum
re-exports and additionalStrictlyPositive
marker trait.- Arm NEON implementation of the position scoring algorithm.
Display
implementation forEncodedSequence
instead of an arbitraryToString
implementation.
v0.1.1 - 2023-05-04
- Helper crate to detect CPU features support at runtime.
- AVX2 code being imported on x86-64 platforms without checking for OS support.
- AVX2-enabled extension always being compiled even on platforms with no AVX2 support.
built
andpyo3-built
build dependencies (causing issues with workspaces).
v0.1.0 - 2023-05-04
Initial release.