Commit Graph

1352 Commits

Author SHA1 Message Date
Avi Weinstock 7d99015473 Move `Copy` constraint from the definition of `Scalar` to all its use-sites.
This should semantically be a no-op, but enables refactorings to use non-Copy scalars on a case-by-case basis.
Also, the only instance of a `One + Zero` trait bound was changed into a `Zero + One` bound to match the others.

The following sed scripts were used in the refactoring (with each clause added to reduce the error count of `cargo check`):

```bash
export RELEVANT_SOURCEFILES="$(find src -name '*.rs') $(find examples -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar,/N: Scalar+Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Field/N: Scalar + Copy + Field/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Zero/N: Scalar + Copy + Zero/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Closed/N: Scalar + Copy + Closed/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Eq/N: Scalar + Copy + Eq/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + PartialOrd/N: Scalar + Copy + PartialOrd/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + Zero/N: Scalar + Copy + Zero/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + PartialEq/N: Scalar + Copy + PartialEq/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar>/N: Scalar+Copy>/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + $bound/N: Scalar + Copy + $bound/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + $bound/N: Scalar + Copy + $bound/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar,/N\1: Scalar+Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + $trait/N: Scalar + Copy + $trait/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar + Superset/N\1: Scalar + Copy + Superset/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar + \([a-zA-Z]*Eq\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \([a-zA-Z]*Eq\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(hash::\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar {/N\1: Scalar + Copy {/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Zero\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Bounded\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Lattice\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Meet\|Join\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(fmt::\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Ring\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Hash\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Send\|Sync\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/One + Zero/Zero + One/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Zero\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \($marker\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar>/N\1: Scalar + Copy>/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/Scalar+Copy/Scalar + Copy/' $f; done
```
2020-03-02 12:45:37 +01:00
Sébastien Crozet 5a0ee23e3b Fix Vector::axpy for noncommutative cases (#648)
Fix Vector::axpy for noncommutative cases
2020-03-02 12:45:37 +01:00
Sébastien Crozet ef3406cc8f Cholupdate (#673)
Cholupdate
2020-03-02 12:45:37 +01:00
Jakub Konka fe65b1c129 Add Vector::axcpy method
The added method `Vector::axcpy` generalises `Vector::gemv` to
noncommutative cases since it allows us to write for `gemv`
`self.axcpy(alpha, &col2, val, beta)`, instead the usual
`self.axpy(alpha * val, &col2, beta)`. Hence, `axcpy` preserves the
order of scalar multiplication which is important for applications where
commutativity is not guaranteed (e.g., matrices of quaternions, etc.).

This commmit also removes helpers `array_axpy` and `array_ax`, and
replaces them with `array_axcpy` and `array_axc` respectively, which
like above preserve the order of scalar multiplication.

Finally, `Vector::axpy` is preserved, however, now expressed in terms of
`Vector::axcpy` like so:

```
self.axcpy(alpha * val, &col2, beta)
```
2020-03-02 12:45:37 +01:00
Jakub Konka e1c8e1bccf Fix Vector::axpy for noncommutative cases
One example would be performing simple matrix multiplication
over a division algebra such as quaternions.
2020-03-02 12:45:37 +01:00
Sébastien Crozet 8c4bb6f1cb Import IsaacRng from rand_isaac instead of rand. (#678)
Import IsaacRng from rand_isaac instead of rand.
2020-03-02 12:45:36 +01:00
Nestor Demeure 50ad84e4b1 Update cholesky.rs
corrected typo ni doc for `xx_rank_one_update`
2020-03-02 12:45:36 +01:00
Sébastien Crozet d78309b1fd Merge pull request #669 from daingun/patch-2
Use same algorithm to solve 2x2 eigenvalue problem
2020-03-02 12:45:36 +01:00
Avi Weinstock 8404839233 Import IsaacRng from rand_isaac instead of rand.
The rand crate removed IsaacRng in the 0.5 -> 0.6 transition, so the benchmarks that use it haven't compiled since 9c37c51203.
2020-03-02 12:45:36 +01:00
sebcrozet cd8fc9285f Add some missing spaces. 2020-03-02 12:45:36 +01:00
daingun a5b2a4ceb7 Merge pull request #1 from daingun/patch-1
Correct Schur decomposition for 2x2 matrices
2020-03-02 12:45:36 +01:00
sebcrozet b96159aab3 Fix Cholesky for no-std platforms. 2020-03-02 12:45:36 +01:00
daingun 50417494ec Use same algorithm to solve 2x2 eigenvalue problem
The eigenvalue problem is solved in two different method that use different methods
to calculate the discriminant of the solution to the quadratic equation.
Use the method whose computation is considered more stable.
2020-03-02 12:45:36 +01:00
daingun 667c49d0e1 Correct Schur decomposition for 2x2 matrices
Due to rounding and possible loss of precision the lower left element of the 2x2 matrix
may be different from zero.
2020-03-02 12:45:36 +01:00
Nestor Demeure 59c6a98615 finished cleaning 2020-03-02 12:45:36 +01:00
Nestor Demeure 3d08a80d8d needs faster matrix initialization 2020-03-02 12:45:36 +01:00
Nestor Demeure f54faedc32 tests pass, needs cleanup 2020-03-02 12:45:36 +01:00
Nestor Demeure 27a2045389 insert does compile 2020-03-02 12:45:36 +01:00
Nestor Demeure c613360a5c insert does not compile yet 2020-03-02 12:45:36 +01:00
Nestor Demeure b29231cf7b found uneeded storagemut 2020-03-02 12:45:36 +01:00
Nestor Demeure cfa7bbdc7c remove column is now working 2020-03-02 12:45:36 +01:00
Nestor Demeure 498c6ef60b added template for remove_column 2020-03-02 12:45:36 +01:00
Nestor Demeure e583e37d1c finally got the correct type for insert column 2020-03-02 12:45:36 +01:00
Nestor Demeure 2f18aee212 added assertion 2020-03-02 12:45:36 +01:00
Nestor Demeure 3d170e1684 removed useless if 2020-03-02 12:45:36 +01:00
Nestor Demeure b2a50404b6 code cleaned 2020-03-02 12:45:36 +01:00
Nestor Demeure 516155025a code cleaned 2020-03-02 12:45:36 +01:00
Nestor Demeure 7347d467ae rank update passed tests 2020-03-02 12:45:36 +01:00
Nestor Demeure 96c16af66f updated comment 2020-03-02 12:45:36 +01:00
Nestor Demeure 16154f163a added real constraint on sigma 2020-03-02 12:45:36 +01:00
Nestor Demeure 45e6ac7c2a test is now correct 2020-03-02 12:45:36 +01:00
Nestor Demeure 5942a2a125 got test to compile 2020-03-02 12:45:36 +01:00
Nestor Demeure cc478c6c6d added test for update 2020-03-02 12:45:36 +01:00
Nestor Demeure 0c9451165d first version of rank one update 2020-03-02 12:45:36 +01:00
Andreas Longva 2f77d73226 Generalize From<_> for MatrixSlice(Mut) to allow different strides 2020-03-02 12:45:35 +01:00
daingun 1103d49b80 Correct Schur decomposition for 2x2 matrices
Due to rounding and possible loss of precision the lower left element of the 2x2 matrix
may be different from zero.
2020-03-02 12:45:35 +01:00
Andreas Longva a05aa313da Implement From<&Matrix> for MatrixSlice 2020-03-02 12:45:35 +01:00
Nestor Demeure 6f1e924e40 used Storage trait for solve
see issue 667
2020-03-02 12:45:35 +01:00
Nestor Demeure ffb69d5a6f used Storage trait for solve method
as per issue 667 https://github.com/rustsim/nalgebra/issues/667
2020-03-02 12:45:35 +01:00
Nestor Demeure 456a5a84e7 Used Storage trait for solve method
See issue 667 : https://github.com/rustsim/nalgebra/issues/667
2020-03-02 12:45:35 +01:00
sebcrozet 549d0dd2dd Release nalgebra 0.19.0. 2019-10-28 14:15:03 +01:00
sebcrozet 0cc1bac816 Bump dependencies. 2019-10-28 14:15:03 +01:00
Sébastien Crozet 1b4c47fa0a Create FUNDING.yml 2019-10-28 14:15:03 +01:00
Edoardo Morandi 37640838b1 Updated rand and quickcheck for nalgebra-lapack 2019-10-28 14:15:03 +01:00
Edoardo Morandi d0d1172d4b Rand 0.6 -> 0.7
* Bumped rand version to 0.7
 * Added dependency to rand_distr
 * Bumped quickcheck version to 0.9 (because of rand)
 * Bumped rand_xorshift version to 0.2
2019-10-28 14:15:03 +01:00
thibault 67f3379b34 Corrected typo. 2019-10-28 14:15:03 +01:00
thibault 7773f13016 Changed name. Changed argument. Added documentation line. 2019-10-28 14:15:03 +01:00
thibault dacd15e927 Added function to compute the mean quaternion from a vector of unit quaternions. 2019-10-28 14:15:03 +01:00
Pierre Avital b5f43c6efc Switched fmt implementation to a macro, applied that macro to all formats in std 2019-10-28 14:15:03 +01:00
Pierre Avital 6ee0e02612 implemented LowerExp 2019-10-28 14:15:03 +01:00