Commit Graph

223 Commits

Author SHA1 Message Date
Adam Nemecek
6a1c4f84af cargo fmt 2020-07-02 10:31:30 -07:00
Adam Nemecek
4653f772bd added new_nonuniform_scaling_wrt_point to Matrix3 & Matrix4 2020-07-02 10:16:18 -07:00
Jenan Wise
85a64fb517 More verbose DMatrix dim asserts where possible.
Previously, most dimension mismatch asserts used raw `assert!` and did
not include the mismatching dimensions in the panic message. When using
dynamic matrices, this led to somewhat-opaque panics such as:

```rust
let m1 = DMatrix::<f32>::zeros(2, 3);
let m2 = DMatrix::<f32>::zeros(5, 10);
m1 + m2 // panic: Matrix addition/subtraction dimensions mismatch.
```

This patch adds dimension information in the panic messages wherever
doing so did not add additional bounds checks, mostly by simply changing
`assert!(a == b, ...)` cases to `assert_eq!`. After:

```rust
// panic: assertion failed: `(left == right)`
//   left: `(2, 3)`,
//  right: `(5, 10)`: Matrix addition/subtraction dimensions mismatch.
```

Note that the `gemv` and `ger` were not updated, as they are called from
within other functions on subset matricies -- e.g., `gemv` is called
from `gemm` which is called from `mul_to` . Including dimension
information in the `gemv` panic messages would be confusing to
`mul` / `mul_to` users, because it would include dimensions of the column
vectors that `gemm` passes to `gemv` rather than of the original `mul`
arguments. A fix would be to add bounds checks to `mul_to`, but that may
have performance and redundancy implications, so is left to another
patch.
2020-06-22 17:18:53 -07:00
sebcrozet
2c2d1e4f07 Run cargo fmt. 2020-06-07 09:07:25 +02:00
Sébastien Crozet
423b4b27b0
Merge pull request #585 from fusion-engineering-forks/pr-default 2020-06-07 08:58:47 +02:00
sebcrozet
677f355143 Run rustfmt. 2020-04-05 23:19:10 +02:00
Sébastien Crozet
b81aed767f
Merge pull request #713 from rustsim/soa_simd
Switch to Simba and make the base and geometry modules mostly SIMD AoSoA friendly.
2020-04-05 21:16:48 +02:00
sebcrozet
bbb3be512e Run cargo fmt. 2020-04-05 18:49:48 +02:00
sebcrozet
691f58b622 Fix compilation of tests. 2020-04-05 18:33:03 +02:00
sebcrozet
2c03353b30 Add missing docs. 2020-04-05 18:02:03 +02:00
sebcrozet
c5dad7f960 Re-add all the alga trait impls behind a feature. 2020-04-05 17:53:27 +02:00
Chia-Sheng Chen
65bc037b5d Supplement the document of fn as_ptr 2020-04-03 17:56:08 +08:00
Chia-Sheng Chen
b996a6f0ce Supplement the document of fn vector_to_matrix_index 2020-04-03 17:39:49 +08:00
Fan Jiang
0e69df2999 Update format 2020-04-01 01:14:32 -04:00
Fan Jiang
451c61e293 Add TODO notice and reference to issue 2020-03-31 17:04:10 -04:00
Fan Jiang
526dac1914 Be more specific on what is happening here 2020-03-31 17:03:07 -04:00
Fan Jiang
74bfd9cad6 Change to the recommended style of using MaybeUninit 2020-03-31 16:50:26 -04:00
Sébastien Crozet
81bb9e94f8 Re-add orthogonalization and subspace basis computation. 2020-03-24 19:06:05 +01:00
Sébastien Crozet
8ef46d62cb Re-add inf/sup. 2020-03-24 19:05:47 +01:00
sebcrozet
b3f347e45e Add From<[...; .]> impls for all SIMD geometric sructures up to the isometry (excluded). 2020-03-23 09:16:01 +01:00
sebcrozet
f8cd26cfa9 Replace alga by simba. 2020-03-21 12:16:46 +01:00
Sébastien Crozet
002e735c76 Make blas, matrix, norm, and ops.rs compatible with SoA Simd. 2020-03-17 17:58:36 +01:00
Fan Jiang
fe75c60325 Fix warnings on latest rustc 2020-03-10 18:20:52 -04:00
Sébastien Crozet
155ba3a50a Merge pull request #698 from rustsim/try_set_magnitude
Add a method to set the magnitude of a vector.
2020-03-02 12:45:39 +01:00
Sébastien Crozet
1d64de3822 Merge pull request #609 from aplund/dev
Refactor row_sum() and column_sum() to cover more cases.
2020-03-02 12:45:39 +01:00
sebcrozet
b09d9770f7 Add a method to set the magnitude of a vector. 2020-03-02 12:45:39 +01:00
Sébastien Crozet
a67c451ae5 Merge pull request #607 from cauthmann/dev
Add #[must_use] to all functions with a _mut variant (#598)
2020-03-02 12:45:39 +01:00
S.Brandeis
6d608cb99f Revert "Broader PartialEq implementation for types implementing Dim trait"
This reverts commit 6f5c9c0f
2020-03-02 12:45:38 +01:00
S.Brandeis
08d990f276 Make shape check a one-liner in impl PartialEq for Matrix 2020-03-02 12:45:38 +01:00
S.Brandeis
d35ef06f44 Remove unnecessary PartialEq trait use in PartialEq impl for Matrix 2020-03-02 12:45:38 +01:00
S.Brandeis
403e63dc5e Remove trailing whitespace 2020-03-02 12:45:38 +01:00
S.Brandeis
8a3f6a12cd Refactor and move named_dimension! macro 2020-03-02 12:45:38 +01:00
S.Brandeis
50ea55e877 Modify PartialEq for Matrix to allow comparison with all types of Matrix 2020-03-02 12:45:38 +01:00
S.Brandeis
2b8410e08b Fix bug - PartialEq for Matrix no longer panics when shapes do not match 2020-03-02 12:45:38 +01:00
S.Brandeis
39a433c0e7 Broader PartialEq implementation for types implementing Dim trait 2020-03-02 12:45:38 +01:00
Sébastien Crozet
12fa938516 Merge pull request #686 from rustsim/fix_vector_slerp
Fix slerp for regular vectors.
2020-03-02 12:45:38 +01:00
sebcrozet
e911bfc7db Fix doc-test for vector slerp. 2020-03-02 12:45:38 +01:00
sebcrozet
5f4a0c7b13 Fix slerp for regular vectors. 2020-03-02 12:45:38 +01:00
Sébastien Crozet
9ec8d4dbd8 Merge pull request #688 from rustsim/matrix_to_slice
Add matrix/slice conversions.
2020-03-02 12:45:37 +01:00
Mara Bos
43747b4f59 Implement Extend<&N> for VecStorage.
Extend<N> was already implemented, but nalgebra vectors/matrices give
iterators that give &N, not N, so implementing Extend<&N> as well makes
it easier to use.

It seems common practice to do so: The standard library's Vec also
implments Extend for both T and &T.
2020-03-02 12:45:37 +01:00
Sébastien Crozet
2728827a45 Merge pull request #684 from aweinstock314/scalar-inlined-clone
Add inlined_clone to Scalar, and relax bounds from `Scalar + Copy` to…
2020-03-02 12:45:37 +01:00
sebcrozet
8bf94f7afb Add matrix/slice conversions.
Fix #687.
2020-03-02 12:45:37 +01:00
Sébastien Crozet
999c48e6ed Merge pull request #680 from aweinstock314/copy-scalar-separation
Move `Copy` constraint from the definition of `Scalar` to all its use…
2020-03-02 12:45:37 +01:00
Avi Weinstock
774f4da3e2 Add Clone to Scalar, providing a default implementation of inlined_clone. Change Scalar + Clone bounds to just Scalar. 2020-03-02 12:45:37 +01:00
Avi Weinstock
52aac8b975 Add inlined_clone to Scalar, and relax bounds from Scalar + Copy to Scalar + Clone nearly everywhere.
The various nalgebra-lapack FooScalars are still Copy because they make use of uninitialized memory.
nalgebgra-glm Number still uses Copy because upstream `approx` requires it.
2020-03-02 12:45:37 +01:00
Aaron Hill
6bb355f4d0 Fix some out-of-bounds offset calls
After we yield the final element from the iterator, we don't offset
`ptr` agian, to avoid having it go out-of-bounds.

However, `inner_end` may be several elements out-of-bounds, depending on
the value of `size`. Therefore, we use `wrapping_offset` to avoid
undefined behavior.
2020-03-02 12:45:37 +01:00
Avi Weinstock
6c236af696 Add Scalar + Copy bounds to code that's under feature flags.
`./ci/test.sh` now passes locally.

Refactoring done via the following sed commands:
```bash
export RELEVANT_SOURCEFILES="$(find src -name '*.rs') $(find examples -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Arbitrary\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Serialize\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Deserialize\)/N\1: Scalar + Copy + \2/' $f; do
export RELEVANT_SOURCEFILES="$(find nalgebra-glm -name '*.rs')"
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>/N\1: Scalar + Copy>/' $f; done
for f in algebra-glm/src/traits.rs; do sed -i 's/Scalar + Ring/Scalar + Copy + Ring>/' $f; done # Number trait definition
```
2020-03-02 12:45:37 +01:00
Sébastien Crozet
e0db624031 Merge pull request #662 from Aaron1011/fix/final-offset
Don't call 'offset' on a dangling pointer
2020-03-02 12:45:37 +01:00
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