Reductive has moved to the finalfusion project
Update rand, rand_xorshift, ndarray-linalg dependencies
Since rand 0.7 requires Rust 1.32.0, change CI lower bound 1.31.0 ->
This allows us to move to newer releases of rand without waiting for
ndarray-rand to catch up. We can switch back to upstream ndarray-rand
once it and the rand crate reach version 1.
CI: build on Rust 1.31.0 besides the latest stable
Add a pub constuctor for PQ and additional getters
More verbose error when too many centroids are used
Derive Debug and PartialEq for PQ
Add methods to get quantized/reconstructed length
This change extends QuantizeVector and ReconstructVector with
quantized_len and reconstructed_len methods. These allow you to get the
vector lengths without actually quantizing or reconstructing a vector.
Use PQ struct for all quantizers
Vector quantizers are structurally very similar after training:
- PQ: quantizers
- OPQ: quantizers + projection matrix
- Gaussian OPQ: quantizers + projection matrix
This change makes reductive use the PQ struct for all quantizers. In
order to do so, it now has an optional projection member.
The OPQ/GaussianOPQ structs are now unit structs that are only used to
differentiate their training procedures.
Update Cargo metadata: docs/homepage/repo
Make centroid indices generic
So far, the centroid indices were always usize. However, this is not
convenient when one wants to store in a quantized matrix with a smaller
width integer (e.g. u8). Make the index type generic, so that the user
can decide the index type.
Put OPQ training behind the "train-opq" feature gate
OPQ and Gaussian OPQ training requires LAPACK. This dependency should
not be necessary if one only wants to use a quantizer that was
previously trained. This change puts the training functions of the
OPQs behind a feature gate so that most of the functionality of this
crate can be used without a LAPACK implementation.
Add the TrainPQ trait
This trait specifies standardized training functions for all product