Merge pull request #842 from dimforge/dev

Release v0.25.1
This commit is contained in:
Sébastien Crozet 2021-03-02 14:34:28 +01:00 committed by GitHub
commit e8fb1ab215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 137 additions and 71 deletions

3
.github/Xargo.toml vendored
View File

@ -1,2 +1,5 @@
[target.x86_64-unknown-linux-gnu.dependencies]
alloc = {}
[target.thumbv7em-none-eabihf.dependencies]
alloc = {}

View File

@ -49,13 +49,13 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: test
run: cargo test --features arbitrary --features serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
run: cargo test --features arbitrary,rand,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
test-nalgebra-glm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: test nalgebra-glm
run: cargo test -p nalgebra-glm --features arbitrary,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
run: cargo test -p nalgebra-glm --features arbitrary,rand,serde-serialize,abomonation-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests;
test-nalgebra-sparse:
runs-on: ubuntu-latest
steps:
@ -90,7 +90,11 @@ jobs:
components: rustfmt
- name: install xargo
run: cp .github/Xargo.toml .; rustup component add rust-src; cargo install -f xargo;
- name: build
- name: build x86_64-unknown-linux-gnu
run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
- name: build --feature alloc
- name: build x86_64-unknown-linux-gnu --features rand-no-std
run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
- name: build x86_64-unknown-linux-gnu --features alloc
run: xargo build --verbose --no-default-features --features alloc --target=x86_64-unknown-linux-gnu;
- name: build thumbv7em-none-eabihf
run: xargo build --verbose --no-default-features --target=thumbv7em-none-eabihf;

View File

@ -4,13 +4,22 @@ documented here.
This project adheres to [Semantic Versioning](https://semver.org/).
## [0.25.0]
## [0.25.1]
This release replaces the version 0.25.0 which has been yanked. The 0.25.0 version
added significant complication to build `nalgebra` targeting a `#[no-std]` platform
not supported by `rand`.
The `rand` dependency is now optional (and disabled by default). You may enable it with:
- The `rand-no-std` cargo feature when targeting a `#[no-std]` environment.
- The `rand` cargo feature when targeting a `std` environment.
## [0.25.0] - Yanked
This updates all the dependencies of nalgebra to their latest version, including:
- rand 0.8
- proptest 1.0
- simba 0.4
### New crate!
### New crate: nalgebra-sparse
Alongside this release of `nalgebra`, we are releasing `nalgebra-sparse`: a crate dedicated to sparse matrix
computation with `nalgebra`. The `sparse` module of `nalgebra`itself still exists for backward compatibility
but it will be deprecated soon in favor of the `nalgebra-sparse` crate.

View File

@ -1,6 +1,6 @@
[package]
name = "nalgebra"
version = "0.25.0"
version = "0.25.1"
authors = [ "Sébastien Crozet <developer@crozet.re>" ]
description = "General-purpose linear algebra library with transformations and statically-sized or dynamically-sized matrices."
@ -23,12 +23,14 @@ path = "src/lib.rs"
[features]
default = [ "std" ]
std = [ "matrixmultiply", "rand/std", "rand/std_rng", "rand_distr", "simba/std" ]
std = [ "matrixmultiply", "simba/std" ]
rand-no-std = [ "rand-package" ]
rand = [ "rand-no-std", "rand-package/std", "rand-package/std_rng", "rand_distr" ]
arbitrary = [ "quickcheck" ]
serde-serialize = [ "serde", "num-complex/serde" ]
abomonation-serialize = [ "abomonation" ]
sparse = [ ]
debug = [ "approx/num-complex", "rand/std" ]
debug = [ "approx/num-complex", "rand" ]
alloc = [ ]
io = [ "pest", "pest_derive" ]
compare = [ "matrixcompare-core" ]
@ -43,8 +45,7 @@ slow-tests = []
[dependencies]
typenum = "1.12"
generic-array = "0.14"
rand = { version = "0.8", default-features = false }
getrandom = { version = "0.2", default-features = false, features = [ "js" ] } # For wasm
rand-package = { package = "rand", version = "0.8", optional = true, default-features = false }
num-traits = { version = "0.2", default-features = false }
num-complex = { version = "0.3", default-features = false }
num-rational = { version = "0.3", default-features = false }

View File

@ -9,7 +9,7 @@ homepage = "https://nalgebra.org"
repository = "https://github.com/dimforge/nalgebra"
readme = "../README.md"
categories = [ "science", "mathematics" ]
keywords = [ "linear", "algebra", "matrix", "vector", "math", "lapack" ]
keywords = [ "linear", "algebra", "matrix", "vector", "lapack" ]
license = "BSD-3-Clause"
edition = "2018"

View File

@ -3,6 +3,14 @@ name = "nalgebra-sparse"
version = "0.1.0"
authors = [ "Andreas Longva", "Sébastien Crozet <developer@crozet.re>" ]
edition = "2018"
description = "Sparse matrix computation based on nalgebra."
documentation = "https://www.nalgebra.org/docs"
homepage = "https://nalgebra.org"
repository = "https://github.com/dimforge/nalgebra"
readme = "../README.md"
categories = [ "science", "mathematics", "wasm", "no-std" ]
keywords = [ "linear", "algebra", "matrix", "vector", "math" ]
license = "Apache-2.0"
[features]
proptest-support = ["proptest", "nalgebra/proptest-support"]

View File

@ -7,18 +7,16 @@ use crate::base::storage::Owned;
use quickcheck::{Arbitrary, Gen};
use num::{Bounded, One, Zero};
#[cfg(feature = "std")]
use rand;
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "std")]
use rand_distr::StandardNormal;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
use std::iter;
use std::mem;
use typenum::{self, Cmp, Greater};
#[cfg(feature = "std")]
use simba::scalar::RealField;
use simba::scalar::{ClosedAdd, ClosedMul};
use crate::base::allocator::Allocator;
@ -281,7 +279,7 @@ where
/// Creates a matrix filled with random values.
#[inline]
#[cfg(feature = "std")]
#[cfg(feature = "rand")]
pub fn new_random_generic(nrows: R, ncols: C) -> Self
where
Standard: Distribution<N>,
@ -291,6 +289,7 @@ where
/// Creates a matrix filled with random values from the given distribution.
#[inline]
#[cfg(feature = "rand-no-std")]
pub fn from_distribution_generic<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
nrows: R,
ncols: C,
@ -589,6 +588,7 @@ macro_rules! impl_constructors(
/// Creates a matrix or vector filled with random values from the given distribution.
#[inline]
#[cfg(feature = "rand-no-std")]
pub fn from_distribution<Distr: Distribution<N> + ?Sized, G: Rng + ?Sized>(
$($args: usize,)*
distribution: &Distr,
@ -599,7 +599,7 @@ macro_rules! impl_constructors(
/// Creates a matrix filled with random values.
#[inline]
#[cfg(feature = "std")]
#[cfg(feature = "rand")]
pub fn new_random($($args: usize),*) -> Self
where Standard: Distribution<N> {
Self::new_random_generic($($gargs),*)
@ -817,6 +817,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: Scalar, R: Dim, C: Dim> Distribution<MatrixMN<N, R, C>> for Standard
where
DefaultAllocator: Allocator<N, R, C>,
@ -851,11 +852,11 @@ where
}
}
#[cfg(feature = "std")]
impl<N: RealField, D: DimName> Distribution<Unit<VectorN<N, D>>> for Standard
#[cfg(feature = "rand")]
impl<N: crate::RealField, D: DimName> Distribution<Unit<VectorN<N, D>>> for Standard
where
DefaultAllocator: Allocator<N, D>,
StandardNormal: Distribution<N>,
rand_distr::StandardNormal: Distribution<N>,
{
/// Generate a uniformly distributed random unit vector.
#[inline]
@ -863,7 +864,7 @@ where
Unit::new_normalize(VectorN::from_distribution_generic(
D::name(),
U1,
&StandardNormal,
&rand_distr::StandardNormal,
rng,
))
}

View File

@ -1,7 +1,11 @@
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
/// Simple helper function for rejection sampling
#[cfg(feature = "arbitrary")]
@ -17,6 +21,7 @@ pub fn reject<F: FnMut(&T) -> bool, T: Arbitrary>(g: &mut Gen, f: F) -> T {
#[doc(hidden)]
#[inline]
#[cfg(feature = "rand-no-std")]
pub fn reject_rand<G: Rng + ?Sized, F: FnMut(&T) -> bool, T>(g: &mut G, f: F) -> T
where
Standard: Distribution<T>,

View File

@ -4,10 +4,12 @@ use crate::base::storage::Owned;
use quickcheck::{Arbitrary, Gen};
use num::One;
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
use simba::scalar::RealField;
use simba::simd::SimdRealField;
use crate::base::allocator::Allocator;
@ -80,7 +82,8 @@ where
}
}
impl<N: RealField, D: DimName, R> Distribution<Isometry<N, D, R>> for Standard
#[cfg(feature = "rand-no-std")]
impl<N: crate::RealField, D: DimName, R> Distribution<Isometry<N, D, R>> for Standard
where
R: AbstractRotation<N, D>,
Standard: Distribution<N> + Distribution<R>,

View File

@ -1,7 +1,10 @@
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
#[cfg(feature = "serde-serialize")]
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use std::fmt;
@ -10,7 +13,6 @@ use std::mem;
use simba::scalar::RealField;
use crate::base::dimension::U3;
use crate::base::helper;
use crate::base::storage::Storage;
use crate::base::{Matrix4, Vector, Vector3};
@ -684,11 +686,13 @@ impl<N: RealField> Orthographic3<N> {
}
}
#[cfg(feature = "rand-no-std")]
impl<N: RealField> Distribution<Orthographic3<N>> for Standard
where
Standard: Distribution<N>,
{
fn sample<R: Rng + ?Sized>(&self, r: &mut R) -> Orthographic3<N> {
use crate::base::helper;
let left = r.gen();
let right = helper::reject_rand(r, |x: &N| *x > left);
let bottom = r.gen();
@ -706,6 +710,7 @@ where
Matrix4<N>: Send,
{
fn arbitrary(g: &mut Gen) -> Self {
use crate::base::helper;
let left = Arbitrary::arbitrary(g);
let right = helper::reject(g, |x: &N| *x > left);
let bottom = Arbitrary::arbitrary(g);

View File

@ -1,7 +1,10 @@
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
#[cfg(feature = "serde-serialize")]
use serde::{Deserialize, Deserializer, Serialize, Serializer};
@ -11,7 +14,6 @@ use std::mem;
use simba::scalar::RealField;
use crate::base::dimension::U3;
use crate::base::helper;
use crate::base::storage::Storage;
use crate::base::{Matrix4, Scalar, Vector, Vector3};
@ -268,11 +270,13 @@ impl<N: RealField> Perspective3<N> {
}
}
#[cfg(feature = "rand-no-std")]
impl<N: RealField> Distribution<Perspective3<N>> for Standard
where
Standard: Distribution<N>,
{
fn sample<'a, R: Rng + ?Sized>(&self, r: &'a mut R) -> Perspective3<N> {
use crate::base::helper;
let znear = r.gen();
let zfar = helper::reject_rand(r, |&x: &N| !(x - znear).is_zero());
let aspect = helper::reject_rand(r, |&x: &N| !x.is_zero());
@ -284,6 +288,7 @@ where
#[cfg(feature = "arbitrary")]
impl<N: RealField + Arbitrary> Arbitrary for Perspective3<N> {
fn arbitrary(g: &mut Gen) -> Self {
use crate::base::helper;
let znear = Arbitrary::arbitrary(g);
let zfar = helper::reject(g, |&x: &N| !(x - znear).is_zero());
let aspect = helper::reject(g, |&x: &N| !x.is_zero());

View File

@ -2,8 +2,11 @@
use quickcheck::{Arbitrary, Gen};
use num::{Bounded, One, Zero};
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
use crate::base::allocator::Allocator;
use crate::base::dimension::{DimName, DimNameAdd, DimNameSum, U1};
@ -138,6 +141,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: Scalar, D: DimName> Distribution<Point<N, D>> for Standard
where
DefaultAllocator: Allocator<N, D>,

View File

@ -5,9 +5,13 @@ use crate::base::storage::Owned;
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, OpenClosed01, Standard},
Rng,
};
use num::{One, Zero};
use rand::distributions::{Distribution, OpenClosed01, Standard};
use rand::Rng;
use simba::scalar::RealField;
use simba::simd::SimdBool;
@ -144,6 +148,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: SimdRealField> Distribution<Quaternion<N>> for Standard
where
Standard: Distribution<N>,
@ -812,6 +817,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: SimdRealField> Distribution<UnitQuaternion<N>> for Standard
where
N::Element: SimdRealField,

View File

@ -4,8 +4,13 @@ use crate::base::storage::Owned;
use quickcheck::{Arbitrary, Gen};
use num::Zero;
use rand::distributions::{Distribution, OpenClosed01, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, OpenClosed01, Standard},
Rng,
};
use simba::scalar::RealField;
use simba::simd::{SimdBool, SimdRealField};
use std::ops::Neg;
@ -256,6 +261,7 @@ impl<N: SimdRealField> Rotation2<N> {
}
}
#[cfg(feature = "rand-no-std")]
impl<N: SimdRealField> Distribution<Rotation2<N>> for Standard
where
N::Element: SimdRealField,
@ -912,6 +918,7 @@ impl<N: SimdRealField> Rotation3<N> {
}
}
#[cfg(feature = "rand-no-std")]
impl<N: SimdRealField> Distribution<Rotation3<N>> for Standard
where
N::Element: SimdRealField,

View File

@ -4,10 +4,12 @@ use crate::base::storage::Owned;
use quickcheck::{Arbitrary, Gen};
use num::One;
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
use simba::scalar::RealField;
use simba::simd::SimdRealField;
use crate::base::allocator::Allocator;
@ -59,7 +61,8 @@ where
}
}
impl<N: RealField, D: DimName, R> Distribution<Similarity<N, D, R>> for Standard
#[cfg(feature = "rand-no-std")]
impl<N: crate::RealField, D: DimName, R> Distribution<Similarity<N, D, R>> for Standard
where
R: AbstractRotation<N, D>,
DefaultAllocator: Allocator<N, D>,
@ -107,8 +110,8 @@ where
#[cfg(feature = "arbitrary")]
impl<N, D: DimName, R> Arbitrary for Similarity<N, D, R>
where
N: RealField + Arbitrary + Send,
N::Element: RealField,
N: crate::RealField + Arbitrary + Send,
N::Element: crate::RealField,
R: AbstractRotation<N, D> + Arbitrary + Send,
DefaultAllocator: Allocator<N, D>,
Owned<N, D>: Send,

View File

@ -4,8 +4,11 @@ use crate::base::storage::Owned;
use quickcheck::{Arbitrary, Gen};
use num::{One, Zero};
use rand::distributions::{Distribution, Standard};
use rand::Rng;
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
use simba::scalar::ClosedAdd;
@ -49,6 +52,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: Scalar, D: DimName> Distribution<Translation<N, D>> for Standard
where
DefaultAllocator: Allocator<N, D>,

View File

@ -1,10 +1,14 @@
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, OpenClosed01, Standard},
Rng,
};
use num::One;
use num_complex::Complex;
use rand::distributions::{Distribution, OpenClosed01, Standard};
use rand::Rng;
use crate::base::dimension::{U1, U2};
use crate::base::storage::Storage;
@ -377,6 +381,7 @@ where
}
}
#[cfg(feature = "rand-no-std")]
impl<N: SimdRealField> Distribution<UnitComplex<N>> for Standard
where
N::Element: SimdRealField,

View File

@ -89,26 +89,16 @@ an optimized set of tools for computer graphics and physics. Those features incl
#![cfg_attr(all(feature = "alloc", not(feature = "std")), feature(alloc))]
#![cfg_attr(feature = "no_unsound_assume_init", allow(unreachable_code))]
#[cfg(feature = "arbitrary")]
extern crate quickcheck;
#[cfg(feature = "serde-serialize")]
#[macro_use]
extern crate serde;
#[cfg(feature = "abomonation-serialize")]
extern crate abomonation;
#[cfg(feature = "mint")]
extern crate mint;
#[cfg(feature = "rand-no-std")]
extern crate rand_package as rand;
#[macro_use]
extern crate approx;
#[cfg(feature = "std")]
extern crate matrixmultiply;
extern crate num_traits as num;
#[cfg(feature = "std")]
extern crate rand_distr;
#[cfg(all(feature = "alloc", not(feature = "std")))]
extern crate alloc;

View File

@ -1,17 +1,20 @@
#[cfg(any(not(feature = "debug"), not(feature = "compare")))]
#[cfg(any(
not(feature = "debug"),
not(feature = "compare"),
not(feature = "rand")
))]
compile_error!(
"Please enable the `debug` and `compare` features in order to compile and run the tests.
Example: `cargo test --features debug --features compare`"
"Please enable the `debug`, `compare`, and `rand` features in order to compile and run the tests.
Example: `cargo test --features debug,compare,rand`"
);
#[cfg(feature = "abomonation-serialize")]
extern crate abomonation;
#[macro_use]
extern crate approx;
#[cfg(feature = "mint")]
extern crate mint;
extern crate nalgebra as na;
extern crate num_traits as num;
extern crate rand_package as rand;
mod core;
mod geometry;