Skip to content

Latest commit

 

History

History
202 lines (151 loc) · 8.49 KB

CHANGELOG.md

File metadata and controls

202 lines (151 loc) · 8.49 KB

Changelog

Version 2.0

Version 2.0 will contain multiple breaking changes:

  • MatrixRef now has NoInteriorMutability as a supertrait. This will ensure consumers migrating from 1.x versions see compile errors where the new requirements will have been added. It is no longer possible to implement a MatrixRef type that does not conform to the no interior mutability contract.
  • Added blanket impls for & and &mut references to MatrixRef and MatrixMut. Any manual implementations of reference types implementing these traits need to be deleted as they are now longer required and conflict with the blanket impls.
  • Numeric now requires implementing types to implement Debug.
  • Real and RealByValue now inherit from the corresponding Numeric and NumericByValue traits. This means old code depending on a previous version of Easy ML that also specified the Numeric traits such as:
fn function_name<T: Numeric + Real>()
where for<'a> &'a T: NumericRef<T> + RealRef<T> {}

can be updated when using Easy ML 2.0 or later to the following:

fn function_name<T: Real>()
where for<'a> &'a T: RealRef<T> {}
  • The public properties mean and covariance on the MultivariateGaussian struct were made private and methods with the same names were added to return references to the vector and matrix. This allows the draw method to not have to recheck invariants every time it is called, now matching the MultivariateGaussianTensor version.

Further trait inheritance changes are planned as detailed at #1 but not yet implemented.

Version 1.10

Released new RecordContainer APIs to avoid storing the WengertList multiple times when manipulating tensors or matrices of Records. There is no such container type for Traces because they do not hold a reference to a history so there is no penalty to going Array of Structs with them. In some cases the Struct of Arrays approach with RecordContainer will have to either convert to Array of Structs or at least pretend to, which is where all the new iterator and from_existing APIs will hopefully make that less painful.

Added several more operator trait impls to fill gaps and discrepancies between Matrix and Tensor. Also added a from_fn constructor for both types mirrored after the standard library.

Introduced owned iterator variants that use std::mem::replace to yield values from their source without making copies, which do not require T: Clone. These may also be more performant for containers of non primitive types where the Default implementation is substantially cheaper than cloning.

Updated several test libraries, in particular some examples now utilise the multi-colour plotting from textplots.

Added impls for the new standard library Saturating wrapper type where Wrapping ones already existed.

Version 1.10 also includes all backported bugfixes since version 1.9.0

Versions 1.9.2, 1.8.4 and 1.7.3

Each contain a fix for an internal indexing method on Matrix that did not correctly check for inputs being within bounds. Code that was already using valid indexes was unaffected, this bug however made it possible for indexing to erroneously panic instead of returning None when using the try_ methods on Matrix that return an Option if exactly one of the two indexes provided was out of bounds.

Versions 1.9.1 and 1.8.3

Both versions contain a fix for the WithIndex matrix row/column major iterators not delegating to their base iterator exact size implementation. Calling the len() methods on earlier versions will panic as the standard library len() implementation for ExactSizeIterator checks the invariant that the affected WithIndex iterators accidentally did not uphold. The len() methods on the base iterators prior wrapping them in WithIndex was correct and can be used to get the exact length if needed on earlier versions of Easy ML.

Additionally version 1.9.1 includes TensorView implementing Clone where applicable. On earlier versions map with a no-op closure can be used as a partial workaround to return a Tensor with cloned data, which if needed could be converted back to a TensorView with from.

Version 1.9

Release of named Tensor APIs, and extended linear algebra support. Fixed serde deserialisation issue with Matrices not validating their inputs. Fixed oversight in Matrix Display impls where the default precision was truncating strings - now precision is not defaulted to any value so no unexpected truncation will happen automatically.

Versions 1.8.2 and 1.7.2

Backported a series of bugfixes for the MatrixRange and IndexRange APIs. Versions of Easy ML prior to 1.7 were not affected as the APIs did not exist yet. MatrixRange did not properly clip the IndexRanges it was constructed from to keep its view_rows and view_columns reporting the correct lengths. IndexRange conversion methods from [usize; 2] and (usize, usize) have been corrrected to match their documented behaviour. The Range<usize> conversion method will now correctly saturate to 0 lengths if the end of the range is equal to or less than the start.

Version 1.9 also includes all backported bugfixes since version 1.8.0

Versions 1.8.1, 1.7.1 and 1.6.2

Backported a bugfix for Matrix::transpose_mut that affected all prior versions of Easy ML. Matrix::transpose_mut did not do the correct thing if given non square matrices and could have caused a panic or the matrix to be invalid. The documented use on square matrices was correct, and works correctly on all prior versions. If for some reason a user is stuck on a 1.5 or older version of Easy ML, they can still check themselves that the matrix is square before calling Matrix::transpose_mut and use Matrix::transpose instead if it is not.

Version 1.9 when eventually released will also include this bugfix.

Version 1.8

Added mutable reference APIs for iterators, matrices and matrix views. Added a matrix quadrants API which allows safely splitting a matrix into multiple mutable parts. Added many numerical operations for MatrixViews to bring them to feature parity with Matrices.

Named Tensors have started development but are not public API yet and not yet available to use.

The project is now also formatted by rustfmt.

Version 1.7

Added diagonal iterators. Added MatrixView, MatrixRef and MatrixMut APIs. Made all matrix iterators generic over their source, allowing them to also be used with matrix views. Added unsafe getters to elide bounds checks for Matrices, and these are now used internally by matrix iterators.

Version 1.6.1

Fixed README versions still referring to 1.5

Version 1.6

Added QR decomposition function. Improved documentation examples using rand. Added #[track_caller] to some functions that were missed in 1.5. Added size_hint implementations to all the matrix iterators.

Version 1.5

Added opt in serde support for Matrix and Trace behind the serde feature. Improved documentation in various places, updated to use inter doc links, updated the versions of dependencies to latest version, and added #[track_caller] to many functions that could panic to provide better error messages.

Version 1.4

Flattened the internal storage of data in Matrices. This will make further library changes easier in the future, and may provide a slight performance improvement. The caveat to this change is that code which extensively adds or removes columns from Matrices may run more slowly, however code which reads or writes data in a row major format should be much more cache friendly.

Added explicit support for Web Assembly going forward, with a supporting example on the MNIST dataset.

Version 1.3.1

Fixed broken link to XOR example in documentation.

Version 1.3

Added Forward and Reverse mode Automatic Differentiation wrapper structs.
Added example for solving the XOR problem with a neural net using Automatic Differentiation.
Added RowMajor versions for matrix iterators
Added matrix and scalar operations to Matrix

Version 1.2

Added a simpler Naïve Bayes example and supporting library code for computing f1 scores.

Version 1.1

Deprecated Matrix::unit and renamed to Matrix::from_scalar Deprecated Gaussian::map and renamed to Gaussian::probability

Added fully worked Naïve Bayes example and supporting library code for Gaussians and linear algebra.

Improved the explanation in some of the runtime panic! errors

Version 1

Released with examples and library code for:

  • Linear Regression
  • k-means Clustering
  • Logistic Regression
  • using a custom numeric type such as num_bigint::BigInt