Releases: althonos/lightmotif
Releases · althonos/lightmotif
v0.9.1
v0.9.0
Added
lightmotif
DenseMatrix::ravel
to get the array of aDenseMatrix
as a single continuous slice.
lightmotif-py
- Support for protein alphabets (#5).
protein
property toCountMatrix
,WeightMatrix
,ScoringMatrix
,EncodedSequence
andStripedSequence
.Scanner
class to use the new DNA scanning algorithm.- Buffer protocol implmementation for
ScoringMatrix
objects. lightmotif.load
function to load one or moreMotif
from a file-like object (#6).Motif.name
property to store the optional name of aMotif
.- Several
Motif
subclasses to store motif and metadata loaded from a file. - Type annotations for the
lightmotif.lib
package.
Fixed
lightmotif-io
- Parsing of floating-point numbers in JASPAR parser.
- Panic on error unwrapping in
lightmotif-io
.
Changed
lightmotif
- Rewrite
DenseMatrix
with constant platform-specific alignment to reduce amount ofunsafe
code.
Removed
lightmotif-py
alphabet
parameter ofScoringMatrix
andEncodedSequence
.
v0.8.0
Added
lightmotif
lightmotif::pwm::DiscreteMatrix
to store a discretizedScoringMatrix
.MatrixElement
marker trait forDefault + Copy
types that can be used as aDenseMatrix
element.lightmotif::scores::Scores
wrapper ofVec<T>
with shortcutmax
,threshold
andargmax
methods.- AVX2 and NEON implementations of
Score<u8, Dna>
pipeline operation.
Fixed
lightmotif
- Remove requirement for
T: Debug
inClone
implementation ofDenseMatrix<T>
. - SSE2 and AVX2 implementations of
Argmax
not returning the last index in case of ties.
lightmotif-tfmpvalue
- Cache internal buffer for Q-values to avoid reallocation between iterations.
Changed
lightmotif
- Cache the
Pipeline
used inlightmotif::scan::Scanner
. - Make
lightmotif::scores::StripedScores
generic over the score type. - Make
Maximum
andThreshold
generic over the score type. - Use a discrete matrix in
Scanner
to quickly eliminate blocks without candidate position above given threshold. - Compile crate without the
rand
andrand-distr
features by default.
lightmotif-py
- Update
pyo3
dependency tov0.22.0
.
v0.7.3
Added
lightmotif-io
lightmotif_io::jaspar
to read matrices in raw JASPAR format.- Implementation of
Clone
andError
for thelightmotif_io::error::Error
type.
Changed
lightmotif
- Use logarithmic subtraction in
FrequencyMatrix::to_scoring
. - Use
_mm256_permutevara8x32_ps
instead of_mm256_permutevar_ps
in AVX2 implementation to avoid special handling of unknown matric characterN
.
Fixed
lightmotif
- Striping of empty sequences panicking on AVX2 implementation.
- Scoring of empty range of rows panicking.
- Invalid alignment of data in AVX2 code.
Clone
implementation ofDenseMatrix
not preserving memory alignment.
v0.7.2
Added
lightmotif-py
- Add
__len__
implementation for all matrix clases. - Allow changing the logarithm base in
WeightMatrix.log_odds
method. - Implement
__getitem__
for row access for all matrix classes.
v0.7.0
Added
lightmotif
- Implement indexing of
StripedSequence
by sequence index. matrix
accessor to all matrix types inlightmotif::pwm
andlightmotif::seq
.entropy
andinformation_content
methods toCountMatrix
.SymbolCount
trait for counting the number of occurrences of a symbol in an iterable.- Several
Background
constructors for counting occurences in one or more sequences. FromIterator<A::Symbol>
constructor forEncodedSequence<A>
.MultipleOf<N>
trait to simplify typenums in platform code signatures.- Sampling of random sequences using the
rand
dependency under a feature flag. ScoringMatrix.score_into
method to re-use aStripedScores
buffer.ScoringMatrix.score_position
method to score a single sequence position.- Indexing by
MatrixCoordinates
inDenseMatrix
. - Support for chanding logarithm base when building a
ScoringMatrix
from aWeightMatrix
. - Scanning algorithm for finding hits in a sequence with an iterator without allocating
StripedScores
for each sequence position.
lightmotif-py
- Support for optional TFMPvalue interface in Python bindings under GPLv3+ code.
- Constructor for
ScoringMatrix
class. ScoringMatrix.reverse_complement
to compute the reverse-complement of a scoring matrix.
Changed
lightmotif
- Make
EncodedSequence.stripe
use a dispatchingPipeline
internally. - Require power-of-two alignment in
DenseMatrix
implementations. - Update
generic-array
dependency tov1.0
. - Change order of parameters in
ScoringMatrix.score
. - Reorganize scoring trait and implement row-slice scoring for AVX2 and SSE2.
- Rewrite
Pipeline::threshold
to return matrix coordinates instead of a sequence index. - Rewrite
Pipeline::argmax
to return matrix coordinates instead of a sequence index.
lightmotif-py
- Streamline the use of pipelined functions in Python bindings.
Fixed
lightmotif
- Handling of unknown residues in
permute
implementation ofScore
on AVX2. PartialEq
forDenseMatrix
to ignore alignment padding in each row.
Removed
lightmotif
- Platform-specific code for thresholding a
StripedScores
matrix. - Direct attribute access in
StripedSequence
.
lightmotif-transfac
- Remove crate from repository, superseded by the
lightmotif-io
crate.
v0.6.0
Added
lightmotif
- Validating constructor
::pwm::FrequencyMatrix::new
testing for frequencies on each ranks. - Getter to the raw data matrix of a
::pwm::FrequencyMatrix
.
lightmotif-io
New crate with JASPAR, TRANSFAC and UNIPROBE format parsers.
Changed
lightmotif
- Make
max_score
andmin_score
columns of::pwm::ScoringMatrix
ignore the wildcard symbol column.
lightmotif-tfmpvalue
- 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.
Removed
lightmotif-transfac
Deprecate crate in favour of lightmotif-io
.
v0.5.1
Fixed
lightmotif
- Compilation for Arm NEON platforms.
v0.5.0
Added
lightmotif
- 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
.
lightmotif-py
- Buffer and copy protocols for
StripedSequence
andEncodedSequence
. - Indexing support to
EncodedSequence
.
lightmotif-tfmpvalue
- Convenience methods to access the wrapped
ScoringMatrix
reference inTfmPvalue
.
Changed
lightmotif
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
.
lightmotif-py
- Use the dynamic dispatch pipeline to run vectorized operations.
lightmotif-tfmpvalue
- Make
TfmPvalue
generic over the type of reference to the wrappedScoringMatrix
.
Fixed
lightmotif
Debug
implementation ofDenseMatrix
crashing when attempting to render the padding bytes.
v0.4.0
Changed
lightmotif
- 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
.
lightmotif-py
- Avoid error on missing symbols in
CountMatrix.__init__
Added
lightmotif
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.
lightmotif-py
StripedScores.threshold
method wrapping theThreshold
pipeline operation.StripedScores.max
andStripedScores.argmax
methods to get the best score and best position.
Fixed
lightmotif
Score
causing an overflow when given a sequence shorter than the PSSM.Maximum
trait returns the smallest position on equal maxima.