Commit Graph

398 Commits

Author SHA1 Message Date
Philippe Renon de4a067d27 clippy: fix len_zero warnings 2020-11-16 12:11:24 +01:00
Philippe Renon d577a18a45 clippy: fix or_fun_call warnings 2020-11-16 11:11:58 +01:00
Philippe Renon 5dff493515 clippy: fix just_underscores_and_digits warnings 2020-11-16 11:04:57 +01:00
Philippe Renon cf54580fac clippy: fix redundant_field_names warnings 2020-11-16 11:04:56 +01:00
Crozet Sébastien 0521051665 Fix wrong import of Signed an Zero. 2020-11-15 17:44:58 +01:00
Crozet Sébastien 17eb626018 Fix typo. 2020-11-15 17:25:29 +01:00
Crozet Sébastien f2da993c8b Reduce matrix and slice aliases depth to 1. 2020-11-15 17:23:46 +01:00
Crozet Sébastien e852df6124 Add sections for most Matrix methods. 2020-11-15 16:57:49 +01:00
Crozet Sébastien b8d1ae3a1f Add aliases for matrices with only one dynamic dimension. 2020-11-13 18:35:23 +01:00
Crozet Sébastien 9a4cf0b69f Reorganize matrix construction macros. 2020-11-13 18:34:47 +01:00
Crozet Sébastien 4c2192d9e0 Reorganize matrix slice macros. 2020-11-13 18:34:33 +01:00
Crozet Sébastien 45f2fc4f92 Move all matrix decomposition methods under a single impl. 2020-11-13 17:26:47 +01:00
Crozet Sébastien 8e483a5434 Fix reshaping test. 2020-10-25 16:31:10 +01:00
Crozet Sébastien e89a26cbd0 Add doc-tests for reshape_generic. 2020-10-25 16:03:18 +01:00
Crozet Sébastien 5b3da9e2eb Fix typo in comment. 2020-10-25 16:02:31 +01:00
Nathan Kent 4a6022d9bf Add methods for in-place reshaping of matrices
There are two major additions in this commit. The first is a new storage
trait, `ReshapableStorage`, that can be implemented for storage types
that can be reshaped in-place. I have implemented this for both the
`ArrayStorage` and `VecStorage` types, as they are the most common and
they are just interpretations of a flat list.

The second is a `Matrix::reshape_generic` method that allows matrices to
be in-place reshaped provided that the underlying storage can handle it.
In practice, this means that the standard matrix types (`MatrixMN` and
`DMatrix`) can be resized to any size that has the same element count.
Resizing between array and vector storage is not implemented due to
`Storage` only being implemented for `VecStorage` variants where at
least one dimension is `Dynamic`.

Additionally, only the generic reshape function is added as it can be a
basis for other reshaping functions (see the resizing functions) and I
am not particularly in the mood to implement a variety of reshaping
methods.
2020-10-25 15:37:18 +01:00
Crozet Sébastien 9c93a58b5d Add Vector::ith_axis to build an unit vector with its i-th component set to 1. 2020-10-25 11:25:38 +01:00
Crozet Sébastien 4da2bfcb71 Add missing dot-product dimension check.
Fix #776
2020-10-13 17:29:00 +02:00
Philippe Renon 0b0f248267 clippy: fix #identity_op 2020-10-11 11:42:22 +02:00
Philippe Renon 6293d3375b clippy: fix #redundant_field_names 2020-10-11 11:42:22 +02:00
Sébastien Crozet 6300d34356 Add the ::ith constructor for vectors.
This initializes a vectors to zero except the i-th element set to a given value.
2020-08-25 20:46:04 +02:00
Sébastien Crozet 2ab82befe4
Merge pull request #631 from Andlon/matrixcompare
Basic matrixcompare functionality
2020-07-17 01:10:04 -07:00
Adam Nemecek 1cf7d12695 unrolled new_nonuniform_scaling_wrt_point 2020-07-05 13:29:08 -07:00
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
Andreas Longva 9196759bc2 Improve matrixcompare example 2020-06-29 19:03:20 +02:00
Andreas Longva f6730dac1f Basic matrixcompare functionality 2020-06-29 18:50:19 +02: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
Aaron Hill e981283500 Switch to `wrapping_offset` instead of unsafe `offset` 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
Aaron Hill 4e25bd87fb Don't call 'offset' on a dangling pointer
When creating a matrix with only one zero dimension, we end up with a
matrix with a total size of zero, but a non-zero stride for elements.
While such a matrix can never actually have any elements, we need to be
careful with how we use the pointer associated with it.

Since such a pointer will always be dangling, it can never be used with `ptr.offset`,
which requires that the pointer be in-bounds or one passed the end of an
allocation. Violating this results in undefined behavior.

This commit adds in checks before the uses of `ptr.offset`. If we ever
need to offset from a pointer when our actual allocation size is zero,
we skip offsetting, and return the original pointer. This is fine
because any actual use of the original or offsetted pointer would
already be undefined behavior - we shoul never be trying to dereference
the pointer associated with a zero-size matrix.

This issue was caught be running `cargo miri test` on the project.
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
Andreas Longva 2f77d73226 Generalize From<_> for MatrixSlice(Mut) to allow different strides 2020-03-02 12:45:35 +01:00
Andreas Longva a05aa313da Implement From<&Matrix> for MatrixSlice 2020-03-02 12:45:35 +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
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
sebcrozet be41cb96e8 GEMM on empty matrices: properly take the beta parameter into account. 2019-10-28 14:15:03 +01:00
sebcrozet 8e759ade83 Fix multiplication between matrices of dimension 0.
Fix #644
2019-10-28 14:15:03 +01:00
Koen Deschacht fba61923ae .min() and .max(): updated examples to be more concise 2019-10-28 14:15:03 +01:00
Koen Deschacht 8f0ee9fa90 Allow getting .min() and .max() of matrices of unsigned integers 2019-10-28 14:15:03 +01:00
sebcrozet cfb654240c Matrix::transform_point: correctly take the normalization term into account.
Fix #640
2019-08-27 22:05:28 +02:00
Fabian Löschner e170729f67 Simplified ordering check 2019-08-27 22:05:28 +02:00
Fabian Löschner a06b833343 More elegant initial value for xcmp 2019-08-27 22:05:28 +02:00
Fabian Löschner c625a37525 Undo breaking changes 2019-08-27 22:05:28 +02:00
Fabian Löschner a4a5750ccd Clarified documentation of min/max behaviour 2019-08-27 22:05:28 +02:00
Fabian Löschner d21c65f755 Fix for [a,ca]min/max methods.
Panic on empty matrices, propagate NaN, fix of wrong results, added doc tests
2019-08-27 22:05:28 +02:00
Jake Shadle 4fa4a6b854 HTTPS All The Things (#608)
* Use https for all links where it is valid

* Fix random links to external sites
2019-08-27 22:05:28 +02:00
Jack Wrenn c8ae3839c1 simplify anti-aliasing assertion 2019-08-27 22:05:28 +02:00
Jack Wrenn 2e273ad6c5 prevent constructing `MatrixSliceMutMN` for which disjoint indices may alias the same linear index
Fixes #486.
2019-08-27 22:05:28 +02:00
Stefan Mesken e86ab5db3d removed depedency on Vec 2019-08-27 22:05:28 +02:00
Stefan Mesken 4add995c1b addressed Trevis CI error 2019-08-27 22:05:28 +02:00
Stefan Mesken 3baefb1319 Allow the removal of multiple rows/columns given an array of indices. #530 2019-08-27 22:05:28 +02:00
Austin Lund f9921a6774 Refactor row_sum() and column_sum() to cover more cases.
Currently the methods for row_sum and column_sum require Field and
Supersetof<f64>.  This means that to perform a row_sum or
column_sum requires the scalar type to have more properties than just
addition.  Consequently, row_sum() won't work on integer matricies.

This patch makes the only requirement that the scalar type be an
additive monoid. Doc tests using integers are also added.
2019-06-20 09:18:42 +10:00
Jake Shadle 0384268bd4 HTTPS All The Things (#608)
* Use https for all links where it is valid

* Fix random links to external sites
2019-06-11 20:56:50 +02:00
Christian Authmann 589aebbf85 Add #[must_use] to all functions with a _mut variant (#598) 2019-06-05 23:04:04 +02:00
Mara Bos e6265da980 Implement Default for MatrixMN. 2019-04-16 10:11:27 +02:00
Jack Wrenn 05eb9ac2ba simplify anti-aliasing assertion 2019-04-16 09:14:46 +02:00
Jack Wrenn 306f096c64 prevent constructing `MatrixSliceMutMN` for which disjoint indices may alias the same linear index
Fixes #486.
2019-04-16 09:14:46 +02:00
Stefan Mesken ff9027f473 removed depedency on Vec 2019-04-08 23:44:49 +02:00
Stefan Mesken cb459d4493 addressed Trevis CI error 2019-04-08 23:44:49 +02:00
Stefan Mesken 5392b936d1 Allow the removal of multiple rows/columns given an array of indices. #530 2019-04-08 23:44:49 +02:00
sebcrozet ae4afa3d2c Merge branch 'master-public' into dev
# Conflicts:
#	Cargo.toml
#	src/base/matrix.rs
#	src/geometry/quaternion.rs
2019-03-31 16:33:25 +02:00
sebcrozet 18b9f82042 Fix warnings. 2019-03-31 13:32:26 +02:00
sebcrozet 38ef0cbf7b Merge branch 'dev' into complex
# Conflicts:
#	src/base/ops.rs
#	src/geometry/isometry.rs
#	src/geometry/quaternion.rs
#	src/geometry/quaternion_construction.rs
#	src/geometry/rotation.rs
#	src/geometry/similarity.rs
#	src/geometry/transform.rs
#	src/geometry/translation.rs
#	src/geometry/unit_complex.rs
2019-03-31 10:48:59 +02:00
sebcrozet 3b6cd04a80 Adapt BLAS tests to complex numbers. 2019-03-26 18:02:03 +01:00
sebcrozet 4ef4001836 Rename Real to RealField. 2019-03-25 11:21:41 +01:00
sebcrozet 5b28c39fa7 Rename Complex to ComplexField. 2019-03-25 11:19:36 +01:00
Samuel Hurel b4d800f3e2 Fix matrix slerp function (#568)
* Fix matrix slerp function

* Adding slerp doc test
2019-03-24 21:44:49 +01:00
sebcrozet 3cbe60523a 2018 edition. 2019-03-23 14:33:47 +01:00
sebcrozet ce24ea972e Remove all spurious allocation introduced by complex number support on decompositions. 2019-03-23 14:13:00 +01:00
sebcrozet 921a05d523 Implement some BLAS opertaions involving adjoint. 2019-03-23 11:48:12 +01:00
sebcrozet 1001e8ee0f Cleanup warnings and rename Schur -> RealSchur 2019-03-23 11:46:56 +01:00
sebcrozet fd65738738 Fix icamax_full doc-test. 2019-03-19 22:56:32 +01:00
sebcrozet cb367a645d Fix mint tests. 2019-03-19 22:53:21 +01:00
sebcrozet 3edef2f006 Decomposition results: return a real vector whenever applicable.
This includes singular values, eigenvalues of hermitian matrices, tridiagonalization and bidiagonalization diagonal and off-diagonal elements.
2019-03-19 14:22:59 +01:00
sebcrozet 2f0d95bdbb Fix most tests. 2019-03-19 12:00:10 +01:00
adamnemecek 1e614db227 Quaternionic division + refactoring (#563) 2019-03-18 09:08:42 +01:00
Greizgh 0f09f2a58c Fix typo in axpy documentation 2019-03-15 15:59:39 +01:00
sebcrozet 010c009cff Fix Schur decomposition. 2019-03-12 13:15:02 +01:00
est31 db3d08f81a Fix two compiler warnings
Fixes #561
2019-03-12 09:00:23 +01:00
sebcrozet 77f048b6b9 WIP use Complex instead of Real whenever possible on the linalg module. 2019-03-02 19:33:49 +01:00
Jack Wrenn 20e9c6f480 Implement `iter::Sum` for `DMatrix` (#552)
Fixes #514.
2019-02-23 15:02:27 +01:00
sebcrozet 7c91f2eeb5 Use Complex instead of Real whenever possible on the base/ module. 2019-02-23 11:24:07 +01:00
Sébastien Crozet c97dfaf381
Add renormalization and rotation extraction from general 2D and 3D matrices. (#549)
* Add From impls to convert between UnitQuaterion/UnitComplex and Rotation2/3

* Add rotation extraction from a Matrix2 or Matrix3.

* Add fast Taylor renormalization for Unit.

Fix 376.

* Add renormalization for Rotation3.

Renormalization for Rotation2 requires Complex to implement VectorSpace which will be fixed only on alga v0.9

* Update Changelog.
2019-02-18 22:41:46 +01:00
adamnemecek 975d72f070 Replace explicit types with Self where possible. 2019-02-16 22:29:41 +01:00
Sébastien Crozet cc7bab9755
Merge branch 'master' into as_ptr 2019-02-03 16:55:54 +01:00
sebcrozet 08f31837a8 Update to alga 0.8. 2019-02-03 15:52:15 +01:00
sebcrozet 7be7fc8776 Fix compilation with no-std. 2019-02-03 15:16:50 +01:00
sebcrozet fc24db8ff3 Merge branch 'master-public' into sparse
# Conflicts:
#	Cargo.toml
#	examples/matrix_construction.rs
#	nalgebra-glm/src/constructors.rs
#	nalgebra-glm/src/ext/matrix_clip_space.rs
#	nalgebra-glm/src/ext/matrix_transform.rs
#	nalgebra-glm/src/ext/mod.rs
#	nalgebra-glm/src/ext/quaternion_common.rs
#	nalgebra-glm/src/gtx/quaternion.rs
#	nalgebra-glm/src/gtx/rotate_vector.rs
#	nalgebra-glm/src/lib.rs
#	nalgebra-glm/src/traits.rs
#	nalgebra-lapack/src/cholesky.rs
#	nalgebra-lapack/src/eigen.rs
#	nalgebra-lapack/src/hessenberg.rs
#	nalgebra-lapack/src/lu.rs
#	nalgebra-lapack/src/qr.rs
#	nalgebra-lapack/src/schur.rs
#	nalgebra-lapack/src/svd.rs
#	nalgebra-lapack/src/symmetric_eigen.rs
#	rustfmt.toml
#	src/base/array_storage.rs
#	src/base/blas.rs
#	src/base/cg.rs
#	src/base/default_allocator.rs
#	src/base/edition.rs
#	src/base/iter.rs
#	src/base/matrix.rs
#	src/base/swizzle.rs
#	src/base/vec_storage.rs
#	src/geometry/mod.rs
#	src/geometry/point_construction.rs
#	src/geometry/quaternion.rs
#	src/geometry/similarity.rs
#	src/geometry/translation.rs
#	src/geometry/unit_complex_construction.rs
#	src/linalg/bidiagonal.rs
#	src/linalg/cholesky.rs
#	src/linalg/full_piv_lu.rs
#	src/linalg/hessenberg.rs
#	src/linalg/lu.rs
#	src/linalg/permutation_sequence.rs
#	src/linalg/qr.rs
#	src/linalg/schur.rs
#	src/linalg/svd.rs
#	src/linalg/symmetric_eigen.rs
#	src/linalg/symmetric_tridiagonal.rs
#	tests/geometry/point.rs
#	tests/geometry/quaternion.rs
#	tests/lib.rs
#	tests/linalg/eigen.rs
#	tests/linalg/svd.rs
2019-02-03 12:53:41 +01:00
sebcrozet f52bd4be3d Rename VecStorage::data/data_mut to ::as_vec/as_vec_mut 2019-02-03 11:48:42 +01:00
sebcrozet 664658760a Remove the Deref implementation for MatrixRef.
Fix #380.
2019-02-03 11:41:14 +01:00
sebcrozet e225297147 Add doc-tests for apply_norm and apply_metric_distance. 2019-02-03 11:29:10 +01:00
sebcrozet 48e9bbc065 Add tests for row and column iterators. 2019-02-03 11:17:23 +01:00
sebcrozet bafd74da70 Fix doc-tests for variance. 2019-02-03 11:06:06 +01:00
sebcrozet 381fdb642c Remove useless extern crate in doc-tests. 2019-02-03 11:01:11 +01:00
sebcrozet dcae274d2e Fix rebase fallback + add missing docs. 2019-02-03 08:33:07 +01:00
sebcrozet 414fe8afda Pass references to zip_apply and zip_zip_apply. 2019-02-03 08:08:03 +01:00
sebcrozet da8dc6c4bd Use IntoIterator for select_rows and select_columns argument. 2019-02-03 08:08:03 +01:00
sebcrozet d1391592a0 Add zip_apply and zip_zip_apply. 2019-02-03 08:08:03 +01:00
sebcrozet 904000ce27 Add argmin and argmax. 2019-02-03 08:08:03 +01:00
sebcrozet 0d2c1be8da Add row and column iterators. 2019-02-03 08:08:03 +01:00
sebcrozet bba1f48e81 Add select_rows and select_columns. 2019-02-03 08:06:24 +01:00
sebcrozet 01d1f9d24b Simplify the construction of DVector.
Fix #377.
2019-02-03 08:06:24 +01:00
sebcrozet 660b868603 Add more general norms and metrics.
Fix #258.
2019-02-03 08:06:24 +01:00
sebcrozet cc2a70664d Add statistics functions: sum, variance, mean. 2019-02-03 08:06:24 +01:00
Sébastien Crozet 570611a59b
Merge pull request #524 from shivshank/master
Add `push` method to Vector
2019-02-03 07:52:03 +01:00
Sébastien Crozet 9167965252
Merge pull request #525 from jswrenn/fix-serde-deserialization-panic
Fix out-of-bounds panic during deserialization; produce error instead
2019-02-03 07:31:03 +01:00
Sébastien Crozet 77a317234c
Merge pull request #533 from ybyygu/master
fix doc strings for `map_with_location` and `lower_triangle`
2019-02-03 07:29:49 +01:00
Wenping Guo b42339ec94 fix doc string of `lower_triangle` method 2019-01-30 15:42:28 +08:00
Wenping Guo bb3f3ac2ee fix doc for `map_with_location` method 2019-01-30 09:33:45 +08:00
sebcrozet a7ab61f974 Add horizontal and vertical resizing for dynamic matrices and vectors. 2019-01-29 12:03:48 +01:00
sebcrozet 9fbdedb942 Implement ContiguousStorage for some matrix slices. 2019-01-29 12:02:05 +01:00
Gedl 59b0709fcf Retain new_observer_frame as a deprecated wrapper function 2019-01-17 10:17:00 +01:00
Gedl 3fdcf5329d Rename ::new_observer_frame to ::face_towards 2019-01-16 22:41:25 +01:00
Jack Wrenn 6426a7cb6f Fix out-of-bounds panic during deserialization; produce error instead.
Fixes #522
2019-01-16 11:23:20 -05:00
shivshank 85a943b7ef Rewrite to_homogenous for vectors to use push 2019-01-09 21:48:03 -05:00
shivshank 3055c289c0 Add `push` method to Vector 2019-01-09 21:38:58 -05:00
sebcrozet c9351cb818 Fix merge fallout. 2018-12-29 14:57:26 +01:00
Jack Wrenn 5a9a1eb645 typofix: indicies -> indices 2018-12-29 13:41:56 +01:00
Jack Wrenn 4ab8a290c7 groundwork for indexing with typenums 2018-12-29 13:41:56 +01:00
Jack Wrenn 939915131d MutMatrixIndex -> MatrixIndexMut 2018-12-29 13:41:56 +01:00
Jack Wrenn 57123ed6aa Overloaded Indexing 2018-12-29 13:41:56 +01:00
Jack Wrenn d3510b8ff6 typofix: `DimNameNimimum` -> `DimNameMinimum` 2018-12-29 13:41:23 +01:00
Jack Wrenn 53632cd1b4 Implement `Hash` for all `Matrix<N, R, C>` where `N: Hash`.
Implements #508.
2018-12-29 11:29:13 +01:00
sebcrozet cae2be5cad Add .min and .max. 2018-12-22 18:03:32 +01:00
Jack Wrenn 0d47a8e16b Rename `Perspective3::unwrap` to `Perspective3::into_inner` and deprecate `Perspective3::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 9600c45dd4 Rename `Orthographic3::unwrap` to `Orthographic3::into_inner` and deprecate `Orthographic3::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 0ab137bfcf Rename `Unit::unwrap` to `Unit::into_inner` and deprecate `Unit::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 0f66403cbb Rename `MatrixVec` to `VecStorage`.
See #470.
2018-12-06 20:51:29 +01:00
Jack Wrenn b83c3b857b Rename `MatrixArray` to `ArrayStorage`.
See #470.
2018-12-06 20:51:29 +01:00
Jack Wrenn 72d89c75ae Group swizzle methods by dimensional requirement.
This is semantically equivalent, but improves the rendered documentation.
2018-11-24 08:03:54 +01:00
sebcrozet f972d1dd7e Small dimension check fix for swizzling. 2018-11-23 07:01:35 +01:00
Jack Wrenn accdd51faf Implement `Into<Vec<N>>` for `MatrixVec<N, R, C>` 2018-11-23 07:01:15 +01:00
Sébastien Crozet bc9c74cbb6 RFC: Remove redundant `Dim` trait
Co-Authored-By: grtlr <grtlr@users.noreply.github.com>
2018-11-20 17:47:29 +01:00
Jochen Görtler 72f61918f4 RFC: Fix type annotations 2018-11-20 17:47:29 +01:00
Jochen Görtler 3ac5efeac1 WIP: to_homogeneous for MatrixN 2018-11-20 17:47:29 +01:00
Jim Turner 267d9760bd Add as_ptr and as_mut_ptr methods
This is useful for moving around a matrix/slice in unsafe code and for
converting slices to other types (e.g. `ndarray::ArrayView`).
2018-11-19 16:53:46 -05:00
Jack Wrenn c36416b9c0 Add `ShapeConstraint` for `Extend<Vector<_,_,_>>` implementations. 2018-11-18 06:36:04 +01:00
Jack Wrenn 0ed67d0470 Implement `Extend<Vector<_,_,_>>` for `Matrix`.
Extend a `Matrix` with columns drawn from an iterator of `Vector`s.
2018-11-18 06:36:04 +01:00
Jack Wrenn 0f29a3ae0a Simplify documentation examples for `Extend` implementations. 2018-11-18 06:36:04 +01:00
Jack Wrenn f711c107ca Implements `Extend` for `Matrix<N, Dynamic, U1>`.
Extends a `Vector` with new rows populated from an iterator.

Inspired by https://github.com/rustsim/nalgebra/issues/446#issuecomment-437931790
2018-11-18 06:36:04 +01:00
Jack Wrenn c3dd709c0a Implements `Extend` for `Matrix<N, Dim, Dynamic>`.
Extends a matrix with new columns populated from an iterator.
2018-11-18 06:36:04 +01:00
Jack Wrenn 9e763bbcff doc tests for `from_vec_generic` and `from_vec` 2018-11-08 06:42:55 +01:00
Jack Wrenn d6fb07dad2 Introduce `from_vec`, to complement `from_vec_generic` 2018-11-08 06:42:55 +01:00
Jack Wrenn 68bdb427cf Rename: `from_vec` -> `from_vec_generic` 2018-11-08 06:42:55 +01:00
Jack Wrenn ff4e44a8ed Introduces a `from_vec` constructor for `MatrixMN`.
Addresses #378.

The implementation of `from_vec` simply wraps a call to
`from_iterator_generic`. Because the standard library's implementation
of `into_iter` is specialized for the `.into_iter().collect<Vec<_>>()`
case (see https://github.com/rust-lang/rust/issues/46084#issuecomment-345524508),
this is equivalent to re-using the original Vec as storage.
2018-11-08 06:42:55 +01:00
Antony Lesage c370564dba Fix MatrixMN::from_distribution (#463) 2018-11-06 19:24:20 +01:00
sebcrozet 8341ec2f10 Run rustfmt. 2018-11-06 18:32:20 +01:00
sebcrozet 0ba23da475 Make transform_vector and transform_point public. 2018-10-30 07:55:08 +01:00
sebcrozet 19d2bc0b7c Fix typo. 2018-10-30 07:55:08 +01:00
sebcrozet fc782f3644 Make MatrixN::{transform_vector, transform_point} inherent methods.
Addresses https://github.com/rustsim/nalgebra/issues/372
2018-10-30 07:55:08 +01:00
sebcrozet bfab204a24 Add lerp for vectors.
Fix #453
2018-10-27 16:06:45 +02:00