Commit Graph

30 Commits

Author SHA1 Message Date
Anton Arsenij 757b99e843
CSC: Create constructor for unsorted but otherwise valid data (#1015)
* CSC: Create constructor for unsorted but otherwise valid data

* Test creating csc matrix from unsorted but valid data

* Add function for validation and sorting

* Move validation function to cs.rs

* Restore pattern unit test

* Add unit test for 'major offset out of bounds' case

* Avoid permutation allocations on 'happy path'

* Reuse allocated permutation

* Fix comments for test-data examples

* Remove unnecessary iter variable

* Set up buffers for sorting up front

* Use common apply_permutation function

* Use common compute_sort_permutation function

* Move unsafe down to unchecked call

* Add panic cases to documentation

* Remove unnecessary Zero bound

* Move buffer set up away from loop

* Lift T::Zero from cs.rs

* Improve checking if values are provided

* Simplify copying from slices & add test for wrong values length

* Check duplicates after sorting

* Fix formatting

* Check values length at the beginning

* Check length of values if values != None
2022-03-03 10:14:16 +01:00
Fabian Loeschner 89f1e855bb Revert "Fix panic in SparsityPattern::try_from_* if major index is out of bounds"
This reverts commit 12afe2917af4c30fc4a17316e453d0830072642c to avoid conflict with #1015.
2022-01-11 10:35:07 +01:00
Fabian Loeschner 38989ed5f0 Move sparse matrix serialization to separate files 2022-01-11 10:35:07 +01:00
Fabian Löschner 583fde05fe Add comment explaining intermediate types for serialization 2022-01-11 10:35:07 +01:00
Fabian Löschner fe70a80e41 Partial revert "Use custom serde errors, make all sparse errs lowercase" 2022-01-11 10:35:07 +01:00
Fabian Loeschner 513178e03e Revert "Updated more error messages"
This reverts commit a42eae45e045c391ede37a7a4328c09cbbb87a0f.
2022-01-11 10:35:07 +01:00
Fabian Löschner 647455dadd Move serialization code to submodules 2022-01-11 10:35:07 +01:00
Fabian Löschner 837ded932e Replace usage of Cow with generic type 2022-01-11 10:35:07 +01:00
Fabian Löschner 9b87fa4ffa Add cfg attribute to Cow imports 2022-01-11 10:35:07 +01:00
Fabian Löschner a8fa7f71c0 Unify separate (de)serialization helper structs by using Cow<'a, [T]> 2022-01-11 10:35:07 +01:00
Fabian Loeschner 3be81be2e3 Updated more error messages 2022-01-11 10:35:07 +01:00
Fabian Loeschner 7e67d920a7 Use custom serde errors, make all sparse errs lowercase w/o punctuation 2022-01-11 10:35:07 +01:00
Fabian Loeschner e9b7718292 Fix panic in SparsityPattern::try_from_* if major index is out of bounds 2022-01-11 10:35:07 +01:00
Fabian Loeschner bfaf29393c Implement Serialize, Deserialize for SparsityPattern 2022-01-11 10:35:07 +01:00
Rémi Lauzier c35f792b4f
Fix some warnings 2021-07-27 19:24:55 -04:00
Malte Tammena 9fb963017f Simplify default `#[must_use]` annotation 2021-06-07 16:34:03 +02:00
Malte Tammena 42a2c74571 Finish initial must_use annotations 2021-06-06 15:28:37 +02:00
Andreas Longva 7473d54d74 rustfmt 2021-01-26 10:11:24 +01:00
Andreas Longva 5d5ed5be0b Various minor doc and comment fixes 2021-01-26 10:11:24 +01:00
Andreas Longva 7b6333e9d1 Rename some Csr/Csc/SparsityPattern methods 2021-01-26 10:11:24 +01:00
Andreas Longva f98e64aafd Improve docs for SparsityPattern 2021-01-26 10:11:24 +01:00
Andreas Longva ef3477f411 Remove Zero bound for transpose and impl SparsityPattern::transpose 2021-01-26 10:11:24 +01:00
Andreas Longva df1ef991f3 Test SparsityPattern and CSR try_* constructors 2021-01-26 10:11:24 +01:00
Andreas Longva ff435110b9 Implement CSR::disassemble and SparsityPattern::disassemble 2021-01-26 10:11:24 +01:00
Andreas Longva a15e78a6b7 Put COO, CSR, SparsityPattern and related types in their own modules
This mimics how std does it, e.g. std::vec::Vec. This avoids potential
problems down the road, where adding more types might clutter the
API interface and generated documentation.
2021-01-26 10:11:24 +01:00
Andreas Longva 7a5f8ef1ea Redesign error handling for CSR and SparsityPattern construction
SparsityPattern's constructor now returns a fine-grained error
enum that enumerates possible errors. We use this to build a more
user-friendly error when constructing CSR matrices.

We also overhauled the main SparseFormatError error type by
making it a struct containing a *Kind type and an underlying error
that contains the message.
2021-01-26 10:11:24 +01:00
Andreas Longva b1199da206 Verify data validity in try_* constructors
We can easily create the CSR and CSC constructors by using the
SparsityPattern constructors. However, one lingering problem
is giving meaningful error messages. When forwarding error messages
from the SparsityPattern constructor, the error messages must
be written in terms of "major" or "minor" dimensions, and using
general terms like "lanes", instead of "rows" and "columns".
When forwarding these messages up to CSR or CSC constructors,
they are not directly meaningful to an end user. We should find
a better solution to this problem, so that end users get
more meaningful messages.
2021-01-26 10:11:24 +01:00
Andreas Longva 7f5b702a49 CSR row access and iterators 2021-01-26 10:11:24 +01:00
Andreas Longva 41425ae52c Use inline instead of inline(always) 2021-01-26 10:11:24 +01:00
Andreas Longva b0ffd55962 Initial CSR and SparsityPattern impls (WIP) 2021-01-26 10:11:24 +01:00