Update to alga 0.8.
This commit is contained in:
parent
7be7fc8776
commit
08f31837a8
|
@ -35,13 +35,13 @@ rand = { version = "0.6", default-features = false }
|
||||||
num-traits = { version = "0.2", default-features = false }
|
num-traits = { version = "0.2", default-features = false }
|
||||||
num-complex = { version = "0.2", default-features = false }
|
num-complex = { version = "0.2", default-features = false }
|
||||||
approx = { version = "0.3", default-features = false }
|
approx = { version = "0.3", default-features = false }
|
||||||
alga = { version = "0.7", default-features = false }
|
alga = { version = "0.8", default-features = false }
|
||||||
matrixmultiply = { version = "0.2", optional = true }
|
matrixmultiply = { version = "0.2", optional = true }
|
||||||
serde = { version = "1.0", optional = true }
|
serde = { version = "1.0", optional = true }
|
||||||
serde_derive = { version = "1.0", optional = true }
|
serde_derive = { version = "1.0", optional = true }
|
||||||
abomonation = { version = "0.7", optional = true }
|
abomonation = { version = "0.7", optional = true }
|
||||||
mint = { version = "0.5", optional = true }
|
mint = { version = "0.5", optional = true }
|
||||||
quickcheck = { version = "0.7", optional = true }
|
quickcheck = { version = "0.8", optional = true }
|
||||||
pest = { version = "2.0", optional = true }
|
pest = { version = "2.0", optional = true }
|
||||||
pest_derive = { version = "2.0", optional = true }
|
pest_derive = { version = "2.0", optional = true }
|
||||||
|
|
||||||
|
|
|
@ -23,5 +23,5 @@ abomonation-serialize = [ "nalgebra/abomonation-serialize" ]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
num-traits = { version = "0.2", default-features = false }
|
num-traits = { version = "0.2", default-features = false }
|
||||||
approx = { version = "0.3", default-features = false }
|
approx = { version = "0.3", default-features = false }
|
||||||
alga = { version = "0.7", default-features = false }
|
alga = { version = "0.8", default-features = false }
|
||||||
nalgebra = { path = "..", version = "^0.16.13", default-features = false }
|
nalgebra = { path = "..", version = "^0.16.13", default-features = false }
|
||||||
|
|
|
@ -25,7 +25,7 @@ intel-mkl = ["lapack-src/intel-mkl"]
|
||||||
nalgebra = { version = "0.16", path = ".." }
|
nalgebra = { version = "0.16", path = ".." }
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
num-complex = { version = "0.2", default-features = false }
|
num-complex = { version = "0.2", default-features = false }
|
||||||
alga = { version = "0.7", default-features = false }
|
alga = { version = "0.8", default-features = false }
|
||||||
serde = { version = "1.0", optional = true }
|
serde = { version = "1.0", optional = true }
|
||||||
serde_derive = { version = "1.0", optional = true }
|
serde_derive = { version = "1.0", optional = true }
|
||||||
lapack = { version = "0.16", default-features = false }
|
lapack = { version = "0.16", default-features = false }
|
||||||
|
@ -34,6 +34,6 @@ lapack-src = { version = "0.2", default-features = false }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
nalgebra = { version = "0.16", path = "..", features = [ "arbitrary" ] }
|
nalgebra = { version = "0.16", path = "..", features = [ "arbitrary" ] }
|
||||||
quickcheck = "0.7"
|
quickcheck = "0.8"
|
||||||
approx = "0.3"
|
approx = "0.3"
|
||||||
rand = "0.6"
|
rand = "0.6"
|
||||||
|
|
|
@ -6,7 +6,7 @@ use num::{One, Zero};
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractGroupAbelian, AbstractLoop, AbstractMagma, AbstractModule,
|
AbstractGroup, AbstractGroupAbelian, AbstractLoop, AbstractMagma, AbstractModule,
|
||||||
AbstractMonoid, AbstractQuasigroup, AbstractSemigroup, Additive, ClosedAdd, ClosedMul,
|
AbstractMonoid, AbstractQuasigroup, AbstractSemigroup, Additive, ClosedAdd, ClosedMul,
|
||||||
ClosedNeg, Field, Identity, Inverse, JoinSemilattice, Lattice, MeetSemilattice, Module,
|
ClosedNeg, Field, Identity, TwoSidedInverse, JoinSemilattice, Lattice, MeetSemilattice, Module,
|
||||||
Multiplicative, Real, RingCommutative,
|
Multiplicative, Real, RingCommutative,
|
||||||
};
|
};
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
|
@ -45,18 +45,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N, R: DimName, C: DimName> Inverse<Additive> for MatrixMN<N, R, C>
|
impl<N, R: DimName, C: DimName> TwoSidedInverse<Additive> for MatrixMN<N, R, C>
|
||||||
where
|
where
|
||||||
N: Scalar + ClosedNeg,
|
N: Scalar + ClosedNeg,
|
||||||
DefaultAllocator: Allocator<N, R, C>,
|
DefaultAllocator: Allocator<N, R, C>,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> MatrixMN<N, R, C> {
|
fn two_sided_inverse(&self) -> MatrixMN<N, R, C> {
|
||||||
-self
|
-self
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
*self = -self.clone()
|
*self = -self.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn inverse_mut(&mut self) {
|
pub fn inverse_mut(&mut self) {
|
||||||
self.rotation.inverse_mut();
|
self.rotation.two_sided_inverse_mut();
|
||||||
self.translation.inverse_mut();
|
self.translation.inverse_mut();
|
||||||
self.translation.vector = self.rotation.transform_vector(&self.translation.vector);
|
self.translation.vector = self.rotation.transform_vector(&self.translation.vector);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Id, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Id, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::Isometry as AlgaIsometry;
|
use alga::linear::Isometry as AlgaIsometry;
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
|
@ -30,18 +30,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real, D: DimName, R> Inverse<Multiplicative> for Isometry<N, D, R>
|
impl<N: Real, D: DimName, R> TwoSidedInverse<Multiplicative> for Isometry<N, D, R>
|
||||||
where
|
where
|
||||||
R: Rotation<Point<N, D>>,
|
R: Rotation<Point<N, D>>,
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.inverse()
|
self.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,8 +200,8 @@ isometry_binop_assign_impl_all!(
|
||||||
DivAssign, div_assign;
|
DivAssign, div_assign;
|
||||||
self: Isometry<N, D, R>, rhs: R;
|
self: Isometry<N, D, R>, rhs: R;
|
||||||
// FIXME: don't invert explicitly?
|
// FIXME: don't invert explicitly?
|
||||||
[val] => *self *= rhs.inverse();
|
[val] => *self *= rhs.two_sided_inverse();
|
||||||
[ref] => *self *= rhs.inverse();
|
[ref] => *self *= rhs.two_sided_inverse();
|
||||||
);
|
);
|
||||||
|
|
||||||
// Isometry × R
|
// Isometry × R
|
||||||
|
|
|
@ -2,7 +2,7 @@ use num::Zero;
|
||||||
|
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractGroupAbelian, AbstractLoop, AbstractMagma, AbstractModule,
|
AbstractGroup, AbstractGroupAbelian, AbstractLoop, AbstractMagma, AbstractModule,
|
||||||
AbstractMonoid, AbstractQuasigroup, AbstractSemigroup, Additive, Id, Identity, Inverse, Module,
|
AbstractMonoid, AbstractQuasigroup, AbstractSemigroup, Additive, Id, Identity, TwoSidedInverse, Module,
|
||||||
Multiplicative, Real,
|
Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
|
@ -42,9 +42,9 @@ impl<N: Real> AbstractMagma<Additive> for Quaternion<N> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real> Inverse<Additive> for Quaternion<N> {
|
impl<N: Real> TwoSidedInverse<Additive> for Quaternion<N> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
-self
|
-self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,14 +173,14 @@ impl<N: Real> AbstractMagma<Multiplicative> for UnitQuaternion<N> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real> Inverse<Multiplicative> for UnitQuaternion<N> {
|
impl<N: Real> TwoSidedInverse<Multiplicative> for UnitQuaternion<N> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.inverse()
|
self.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Id, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Id, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
self, AffineTransformation, DirectIsometry, Isometry, OrthogonalTransformation,
|
self, AffineTransformation, DirectIsometry, Isometry, OrthogonalTransformation,
|
||||||
|
@ -27,16 +27,16 @@ where DefaultAllocator: Allocator<N, D, D>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real, D: DimName> Inverse<Multiplicative> for Rotation<N, D>
|
impl<N: Real, D: DimName> TwoSidedInverse<Multiplicative> for Rotation<N, D>
|
||||||
where DefaultAllocator: Allocator<N, D, D>
|
where DefaultAllocator: Allocator<N, D, D>
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.transpose()
|
self.transpose()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.transpose_mut()
|
self.transpose_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::Similarity as AlgaSimilarity;
|
use alga::linear::Similarity as AlgaSimilarity;
|
||||||
use alga::linear::{AffineTransformation, ProjectiveTransformation, Rotation, Transformation};
|
use alga::linear::{AffineTransformation, ProjectiveTransformation, Rotation, Transformation};
|
||||||
|
@ -27,18 +27,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real, D: DimName, R> Inverse<Multiplicative> for Similarity<N, D, R>
|
impl<N: Real, D: DimName, R> TwoSidedInverse<Multiplicative> for Similarity<N, D, R>
|
||||||
where
|
where
|
||||||
R: Rotation<Point<N, D>>,
|
R: Rotation<Point<N, D>>,
|
||||||
DefaultAllocator: Allocator<N, D>,
|
DefaultAllocator: Allocator<N, D>,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.inverse()
|
self.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,8 +222,8 @@ similarity_binop_assign_impl_all!(
|
||||||
DivAssign, div_assign;
|
DivAssign, div_assign;
|
||||||
self: Similarity<N, D, R>, rhs: R;
|
self: Similarity<N, D, R>, rhs: R;
|
||||||
// FIXME: don't invert explicitly?
|
// FIXME: don't invert explicitly?
|
||||||
[val] => *self *= rhs.inverse();
|
[val] => *self *= rhs.two_sided_inverse();
|
||||||
[ref] => *self *= rhs.inverse();
|
[ref] => *self *= rhs.two_sided_inverse();
|
||||||
);
|
);
|
||||||
|
|
||||||
// Similarity × R
|
// Similarity × R
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::{ProjectiveTransformation, Transformation};
|
use alga::linear::{ProjectiveTransformation, Transformation};
|
||||||
|
|
||||||
|
@ -26,18 +26,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real, D: DimNameAdd<U1>, C> Inverse<Multiplicative> for Transform<N, D, C>
|
impl<N: Real, D: DimNameAdd<U1>, C> TwoSidedInverse<Multiplicative> for Transform<N, D, C>
|
||||||
where
|
where
|
||||||
C: SubTCategoryOf<TProjective>,
|
C: SubTCategoryOf<TProjective>,
|
||||||
DefaultAllocator: Allocator<N, DimNameSum<D, U1>, DimNameSum<D, U1>>,
|
DefaultAllocator: Allocator<N, DimNameSum<D, U1>, DimNameSum<D, U1>>,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.clone().inverse()
|
self.clone().inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,12 +116,12 @@ where
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_transform_point(&self, pt: &Point<N, D>) -> Point<N, D> {
|
fn inverse_transform_point(&self, pt: &Point<N, D>) -> Point<N, D> {
|
||||||
self.inverse() * pt
|
self.two_sided_inverse() * pt
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_transform_vector(&self, v: &VectorN<N, D>) -> VectorN<N, D> {
|
fn inverse_transform_vector(&self, v: &VectorN<N, D>) -> VectorN<N, D> {
|
||||||
self.inverse() * v
|
self.two_sided_inverse() * v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Id, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Id, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::Translation as AlgaTranslation;
|
use alga::linear::Translation as AlgaTranslation;
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
|
@ -28,16 +28,16 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real, D: DimName> Inverse<Multiplicative> for Translation<N, D>
|
impl<N: Real, D: DimName> TwoSidedInverse<Multiplicative> for Translation<N, D>
|
||||||
where DefaultAllocator: Allocator<N, D>
|
where DefaultAllocator: Allocator<N, D>
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.inverse()
|
self.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
AbstractGroup, AbstractLoop, AbstractMagma, AbstractMonoid, AbstractQuasigroup,
|
||||||
AbstractSemigroup, Id, Identity, Inverse, Multiplicative, Real,
|
AbstractSemigroup, Id, Identity, TwoSidedInverse, Multiplicative, Real,
|
||||||
};
|
};
|
||||||
use alga::linear::{
|
use alga::linear::{
|
||||||
AffineTransformation, DirectIsometry, Isometry, OrthogonalTransformation,
|
AffineTransformation, DirectIsometry, Isometry, OrthogonalTransformation,
|
||||||
|
@ -31,14 +31,14 @@ impl<N: Real> AbstractMagma<Multiplicative> for UnitComplex<N> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<N: Real> Inverse<Multiplicative> for UnitComplex<N> {
|
impl<N: Real> TwoSidedInverse<Multiplicative> for UnitComplex<N> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse(&self) -> Self {
|
fn two_sided_inverse(&self) -> Self {
|
||||||
self.inverse()
|
self.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_mut(&mut self) {
|
fn two_sided_inverse_mut(&mut self) {
|
||||||
self.inverse_mut()
|
self.inverse_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ pub use sparse::*;
|
||||||
use std::cmp::{self, Ordering, PartialOrd};
|
use std::cmp::{self, Ordering, PartialOrd};
|
||||||
|
|
||||||
use alga::general::{
|
use alga::general::{
|
||||||
Additive, AdditiveGroup, Identity, Inverse, JoinSemilattice, Lattice, MeetSemilattice,
|
Additive, AdditiveGroup, Identity, TwoSidedInverse, JoinSemilattice, Lattice, MeetSemilattice,
|
||||||
Multiplicative, SupersetOf,
|
Multiplicative, SupersetOf,
|
||||||
};
|
};
|
||||||
use alga::linear::SquareMatrix as AlgaSquareMatrix;
|
use alga::linear::SquareMatrix as AlgaSquareMatrix;
|
||||||
|
@ -427,8 +427,8 @@ pub fn try_inverse<M: AlgaSquareMatrix>(m: &M) -> Option<M> {
|
||||||
///
|
///
|
||||||
/// * [`try_inverse`](fn.try_inverse.html)
|
/// * [`try_inverse`](fn.try_inverse.html)
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn inverse<M: Inverse<Multiplicative>>(m: &M) -> M {
|
pub fn inverse<M: TwoSidedInverse<Multiplicative>>(m: &M) -> M {
|
||||||
m.inverse()
|
m.two_sided_inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue