BallisticLA / RandBLAS

A header-only C++ library for sketching in randomized linear algebra
https://randblas.readthedocs.io/en/latest/
Other
64 stars 4 forks source link

refactored tests, templated indexing (C++20), and bugfixes #80

Closed rileyjmurray closed 6 months ago

rileyjmurray commented 6 months ago

The main change in this PR (at the moment) is to redesign the testing framework for sketching. The new framework is able to test correctness of abstract linear operators that can be applied in the same way that a sketching operator might be applied in sketch_general. I've updated test_sketch_gef[X][Y] (where [X] is the side, left or right, and [Y] is the type of operator, dense or sparse) so that they're basically tiny wrappers around calls to the functions in the new testing framework. It remains to write tests for sparse data matrices that utilize this framework.

A minor (but still very consequential) change in this PR is to change our required standard to C++20. This lets us use template concepts.

This PR also changes the signature for sketch_vector so that it more closely follows GEMV. While making that change I noticed that documentation in the overload of sketch_general which set (i_off, j_off) = (0, 0) wasn't quite correct. It said that it applied op(S), when it still allowed op(submat(S)) provided submat(S) is a leading principal submatrix. I've changed this overload to raise an error if the declared dimensions ((d,n,m) or (m, d, n)) suggest that we'd work with submat(S) and not all of S.