Commit Graph

1205 Commits

Author SHA1 Message Date
Crozet Sébastien 9d930eb21a Add a method to cap the magnitude of a vector. 2021-02-22 14:26:40 +01:00
Crozet Sébastien 6139372c38 Add from_basis_unchecked to rotation types. 2021-02-22 14:26:25 +01:00
iMplode nZ 1c0891bbbb Added bytemuck for Unit and Quaternion. 2021-02-12 15:30:12 -08:00
iMplode nZ c667b1f9c8 Added bytemuck implementations for static storages. 2021-02-10 20:12:24 -08:00
Crozet Sébastien fb26d4d0fb Update the htaml_root_url. 2021-01-29 13:56:40 +01:00
Terence c408e09e28 update header comment for operators 2021-01-28 19:41:55 -05:00
Terence ac92e68486 add new operators 2021-01-28 19:27:40 -05:00
Terence ecda74f6b2 clippify 2021-01-28 18:50:34 -05:00
Terence 388b77108e rustfmt 2021-01-28 18:46:14 -05:00
Terence 6be0365203 add integration test 2021-01-28 18:45:34 -05:00
Terence 12c259f0b4 Implement additional `DualQuaternion` ops and `UnitDualQuaternion`
This implements `UnitDualQuaternion` as an alternative to `Isometry3`
for representing 3D isometries, which also provides the `sclerp`
operation which can be used to perform screw-linear interpolation
between two unit dual quaternions.
2021-01-28 17:25:32 -05:00
Andreas Longva 646f62a293 rustfmt (nalgebra) 2021-01-26 09:49:01 +01:00
Andreas Longva 5dfe06897f Rename nalgebra/proptest to /proptest-support
This gives us some freedom in the future, in case we need
additional dependencies for the proptest integration.
2021-01-26 09:49:01 +01:00
Andreas Longva b2dbcf3168 Add D=Dynamic default and ::to_range_inclusive for DimRange (nalgebra) 2021-01-26 08:57:47 +01:00
Andreas Longva f9ea2b4471 Initial proptest implementation for nalgebra
This introduces functionality for creating strategies for matrices and
vectors, as well as an implementation of Arbitrary.

Strategies for the geometric types (Point3, Quaternion etc.) are not
currently part of this contribution.

The current strategy implementation for matrices has some limitations
that lead to suboptimal shrinking behavior. This is documented in the
module-level docs, with some additional comments in the code.
2021-01-26 08:57:47 +01:00
Chinedu Francis Nwafili b9513257b8
Serialize DQ to [N;8]
Closes #816
2020-12-18 12:19:38 -05:00
Chinedu Francis Nwafili 7ec5d00c3d
Clean up DualQuat bounds 2020-12-18 10:38:19 -05:00
Chinedu Francis Nwafili 89134efc3b
Store DQ as real and dual Quat 2020-12-18 10:09:56 -05:00
Chinedu Francis Nwafili 8036c56fda
Introduce DualQuaternion type
This commit introduces the `DualQuaternion` type, in line with the plan
laid out in [#487].

[#487]: https://github.com/dimforge/nalgebra/issues/487
2020-12-18 09:13:24 -05:00
Sébastien Crozet 88145b7f8c
Merge pull request #814 from dimforge/quaternion_partial_eq_fix
Fix the PartialEq impl for quaternions.
2020-12-18 12:29:38 +01:00
Sébastien Crozet 3899d92f5d
Merge pull request #815 from dimforge/isometry_inv_mul
Add a dedicated method for computing isometry1.inverse() * isometry2.
2020-12-18 12:08:34 +01:00
Sébastien Crozet 8c615289dc
Merge pull request #813 from dimforge/deserialize_uninit
Add workaround for the deserialization of a matrix containing an enum.
2020-12-18 12:06:39 +01:00
Crozet Sébastien ed74ff7c99 Simplify trait bounds for quaternion indexing. 2020-12-18 12:06:27 +01:00
Crozet Sébastien 60708640d3 Add a dedicated method for computing isometry1.inverse() * isometry2.
It is more efficient that way.
2020-12-18 11:55:46 +01:00
Crozet Sébastien b15a274a14 Add workaround for the deserialization of a matrix containing an enum. 2020-12-18 11:54:56 +01:00
Crozet Sébastien 67603be6ed Fix the PartialEq impl for quaternions.
The double-covering property should only be taken into account for `UnitQuaternion` instead of `Quaternion` itself.
2020-12-18 11:38:33 +01:00
Südi Tamás b01d01d486
update the version number in the documentation
from 0.21 to 0.23
2020-12-16 18:35:13 +01:00
Crozet Sébastien 651d318c26 Add sections to the Unit wrapper documentation 2020-11-21 12:19:04 +01:00
Crozet Sébastien c1372c3041 Add sections to the UnitComplex documentation 2020-11-21 11:56:32 +01:00
Crozet Sébastien 99ac7a8e08 Add sections to the Rotation documentation 2020-11-21 11:56:32 +01:00
Crozet Sébastien 2a3d98bff8 Matrix, vector, isometry, and point aliases documentation: warn that the reader should take a look at the documentation of the aliased type too. 2020-11-20 17:46:03 +01:00
Crozet Sébastien cf769522f8 Add sections to the documentations of Isometry and Point. 2020-11-20 17:45:11 +01:00
Crozet Sébastien 857ce13b63 Add DVector::from(Vec). 2020-11-19 16:28:06 +01:00
Philippe Renon 87ee014bd3 clippy: fix clone_on_copy warnings 2020-11-19 12:55:15 +01:00
Philippe Renon bbc6a28f7d clippy: fix len_without_is_empty warnings 2020-11-19 12:24:26 +01:00
Philippe Renon 6a5b418fbc clippy: fix ptr_offset_with_cast warnings 2020-11-19 11:56:58 +01:00
Philippe Renon f515cffad9 clippy: fix redundant_closure warnings 2020-11-19 11:43:08 +01:00
Philippe Renon 726b8eeecf clippy: fix or_fun_call warnings 2020-11-19 11:43:08 +01:00
Philippe Renon 74a09c8a5e clippy: fix ptr_offset_with_cast warnings
i.e. use of `offset` with a `usize` casted to an `isize`
2020-11-16 14:59:53 +01:00
Philippe Renon f1211b0d99 clippy: remove unused imports 2020-11-16 14:46:04 +01:00
Philippe Renon 008c24204e clippy: fix unreadable_literal warnings 2020-11-16 14:43:36 +01:00
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
Philippe Renon 04ce8b3f6a clippy: fix suspicious_op_assign_impl errors (false positives) 2020-10-26 13:09:03 +01:00
Philippe Renon d990aff44e clippy: fix clippy::eq_op error (false positive) 2020-10-26 08:56:49 +01:00
Philippe Renon 74f01d2538 clippy: fix suspicious_arithmetic_impl errors (false positives) 2020-10-26 08:49:06 +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 c410a32c82 Fix doc-tests. 2020-10-25 14:15:26 +01:00
Crozet Sébastien 93f361cba8 Add missing slerp implementations. 2020-10-25 14:00:47 +01:00
Crozet Sébastien 097ae44efa Add `lerp_slerp` to isometries for interpolation. 2020-10-25 11:39:27 +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 55689c238a Add the conversion of a translation to an isometry. 2020-10-25 11:25:20 +01:00
Crozet Sébastien 503040b8bc Add Point.map(f) and Point.apply(f). 2020-10-25 11:25:20 +01:00
Crozet Sébastien a623e63d08 Add the conversion of an array of four elements to a quaternion. 2020-10-25 11:25:20 +01:00
Crozet Sébastien 3d82c4335e Add inverse_transform_unit_vector to rotations and isometries. 2020-10-25 11:25:20 +01:00
Sébastien Crozet eb94084760
Merge pull request #756 from dayrover/cholesky
Remove unnecessary Trait bound DimSub<Dynamic> in fn cholesky(self)
2020-10-24 18:23:03 +02:00
Sébastien Crozet c240923abb
Merge pull request #754 from TheZoq2/patch-1
Update version in docs header
2020-10-24 18:22:36 +02:00
Crozet Sébastien 4da2bfcb71 Add missing dot-product dimension check.
Fix #776
2020-10-13 17:29:00 +02:00
Crozet Sébastien 343fb2f24f Ensure Isometry implements Copy when targeting no-std.
Fix #774.
2020-10-13 10:12:14 +02:00
Philippe Renon 822f114254 perspective: fix copy/paste error 2020-10-11 11:57:49 +02:00
Philippe Renon 0b0f248267 clippy: fix #identity_op 2020-10-11 11:42:22 +02:00
Philippe Renon 1624a87efa clippy: fix #needless_return 2020-10-11 11:42:22 +02:00
Philippe Renon 6293d3375b clippy: fix #redundant_field_names 2020-10-11 11:42:22 +02:00
Philippe Renon fb15658cc9 fix typo: apsect should be aspect 2020-10-11 11:42:22 +02:00
Michael Morgan c6d5d8a1a6 Remove unsafe statement in Point::deref by forwarding to Vector.
Since both impls are #[inline], this should have no performance impact.
2020-10-09 15:27:02 -04:00
Sébastien Crozet a8f73cb7b2 Run cargo fmt. 2020-08-25 20:47:07 +02:00
Sébastien Crozet 46d1cf2231 Add a libm and libm-force feature to transitively enable the corresponding simba feature. 2020-08-25 20:46:35 +02:00
sebcrozet 7c69cbf326 Don't depend on serde_derive explicitly. 2020-08-25 20:46:04 +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
Michael Stevens 0a0799f76a Remove unnecessary Trait bound DimSub<Dynamic> in fn cholesky(self) 2020-08-03 18:20:26 +02:00
Frans Skarman 0f6c0e5233
Update version in docs header 2020-07-31 14:14:39 +02:00
Sébastien Crozet 2ab82befe4
Merge pull request #631 from Andlon/matrixcompare
Basic matrixcompare functionality
2020-07-17 01:10:04 -07:00
danielschlaugies f9f7169558
Add matrix exponential for complex matrices (#744)
Added matrix exponential for complex matrices.
2020-07-16 10:29:52 +02:00
CGMossa bc70258e5c
Why Option<_> (#746)
Add a comment about why `UnitQuaternion::rotation_between` returns an Option.
2020-07-16 09:27:06 +02: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 3359e25435 Cholesky: add unchecked construction compatible with AoSoA SIMD. 2020-06-07 09:05:10 +02:00
Sébastien Crozet 423b4b27b0
Merge pull request #585 from fusion-engineering-forks/pr-default 2020-06-07 08:58:47 +02:00
Chris Hodapp 7363caba17 Fix doc typo (v is right-singular vectors, not left) 2020-04-21 10:23:00 -04:00
sebcrozet 6dc739b70b Remove unused allocator bound. 2020-04-21 10:37:14 +02:00
sebcrozet f4c0897764 Fix compilation of matrix exponential when targetting no-std. 2020-04-21 10:35:20 +02:00
Fredrik Jansson 583a8fb110 Removed unsafe immutable hack 2020-04-12 13:27:11 +02:00
Fredrik Jansson e914afe2af Added support for dynamic matrices 2020-04-12 11:59:06 +02:00
Fredrik Jansson 0a3ee99cdb Changed dimension name R to D
Changed N::from_x to crate::convert
2020-04-12 11:46:00 +02:00
Fredrik Jansson 4ec94408b5 Pub use of exp in the linalg module 2020-04-07 09:41:32 +02:00
Fredrik Jansson b3ef66fd14 Fixed bug in onenorm_matrix_power_norm 2020-04-07 09:41:32 +02:00
Fredrik Jansson e156561677 one_norm is not a public function 2020-04-07 09:41:32 +02:00
Fredrik Jansson 2696ffd7a1 Fixed bug by introducing one norm 2020-04-07 09:41:32 +02:00
Fredrik Jansson c0a6df55b1 Addition of matrix exponent for static size matrices. 2020-04-07 09:41:32 +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
sebcrozet 191ccbf551 Fix warnings and compilation with the `arbitrary` feature. 2020-04-05 17:18:50 +02:00
sebcrozet d48a644d5c Add missing implementatino of SimdValue for UnitQuaternion. 2020-04-05 16:35:26 +02:00
sebcrozet 8f662a1a61 Rename translation simba impl file. 2020-04-05 16:35:16 +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 a095a7dfcd Re-add some missing transform multiplications. 2020-03-24 19:06:28 +01: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
Sébastien Crozet cdbc9da46c Add From<[...; .]> impls for AoSoA Isometry and Similarity. 2020-03-24 10:16:31 +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 b1857e6a36 Fix compilation of tests. 2020-03-21 23:44:24 +01:00
sebcrozet cbcf4d7c27 Make Isometry, Unit/Quaternion, Rotation, Similarity, and UnitComplex partially compatible with AoSoA. 2020-03-21 23:35:41 +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
nnmm 54f1c71742 Small docs improvements 2020-03-02 12:45:39 +01:00
Ilya Epifanov a62d9d1ad1 GivensRotation::new() should default to (I, 0) 2020-03-02 12:45:38 +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
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
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
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
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 5942a2a125 got test to compile 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 0cc1bac816 Bump dependencies. 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