Skip to content

The great dimension migration to Dim<[Ix; N]> #225

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 107 commits into from
Nov 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
78aa5d3
Add iterator filter sum benchmarks, just for interest
bluss Oct 24, 2016
6b6d1fc
Initiate work on using fixed size arrays as dimensions
bluss Oct 30, 2016
06b053c
Convert users of 0/1d to use Ix0/Ix1 functions
bluss Oct 30, 2016
f58b5e2
Adjust .into_shape() to use IntoDimension
bluss Oct 30, 2016
d5cc148
.reshape() and .broadcast() use conversion traits
bluss Oct 30, 2016
23bebbe
Use Ix2 in tests/array.rs
bluss Oct 30, 2016
8a4db80
Use Array2 in oper.rs
bluss Oct 30, 2016
62caab7
Update tests/dimension.rs
bluss Oct 30, 2016
5fb5ae8
Impl RemoveAxis for Ix1
bluss Oct 30, 2016
24d2884
Update tests/stacking.rs to use Array2
bluss Oct 30, 2016
61d723f
Improve Dimension::into_tuple
bluss Oct 30, 2016
7dd5706
Make indexed iterators produce a tuple of the indices by default
bluss Oct 30, 2016
dc647b7
Update examples/convo.rs to compile
bluss Oct 30, 2016
b0c20ea
Make Indexes iterator produce a tuple of indices as well
bluss Oct 30, 2016
3b645cc
Update NdIndex with new implementations
bluss Oct 30, 2016
efcaced
Implement Ix3 as a fixed size array
bluss Oct 30, 2016
1045bc5
Expand ShapeBuilder to cover IntoDimension
bluss Oct 30, 2016
901813f
Add .into_tuple() impls and RemoveAxis for Ix3
bluss Oct 30, 2016
801c44a
Update tests/array.rs to use .dim_tuple()
bluss Oct 30, 2016
e81f057
Update examples/linalg.rs
bluss Oct 30, 2016
4158bd9
Update tests/broadcast.rs
bluss Oct 30, 2016
a7cd924
Add Dimension method to convert it to an array view
bluss Oct 30, 2016
902f3af
Implement more dimension sizes
bluss Oct 30, 2016
12de9b1
Update tests to use array-shapes and .shape()
bluss Oct 30, 2016
9c7efb3
Add back the special case methods for Ix1, Ix2
bluss Oct 30, 2016
1283f0d
Use inline(always) for a few small functions
bluss Oct 30, 2016
4d2d82f
Fix doctest for s![]
bluss Oct 30, 2016
b5758ef
Remove ToIndex and use NdIndex for .uget()
bluss Oct 30, 2016
e28303e
Update benchmarks
bluss Oct 30, 2016
c36b6f3
Move some functionality into the Dimension trait (for special casing)
bluss Oct 30, 2016
2fe2db3
Tune iterator's .fold() a small bit
bluss Oct 30, 2016
6253969
Add another bench in higher-order
bluss Oct 30, 2016
4dee643
Add crucial inlining directive to IntoDimension
bluss Oct 30, 2016
674b012
Update benches
bluss Oct 30, 2016
fba724f
Update inner iter to use last_elem() / set_last_elem()
bluss Oct 30, 2016
2c5eda3
Clean up dimension a bit
bluss Oct 30, 2016
adb9e42
Generalize NdIndex to have dimension as a type parameter, not associa…
bluss Oct 30, 2016
c07e5cb
Rename dim_tuple → dim_pattern, into_tuple → into_pattern and D::Tupl…
bluss Oct 30, 2016
91d82c8
Add dimension/index newtype
bluss Oct 30, 2016
d2add7a
Add more From impls for Dim
bluss Oct 30, 2016
31aed0f
Shape: Add .size() method
bluss Nov 2, 2016
ac45233
ndarray-rand: Update for IntoShape
bluss Nov 2, 2016
e050a87
Revert ".broadcast(): Work around miscompile"
bluss Nov 5, 2016
a1611b7
Make `Dim()` into a function that converts using IntoDimension
bluss Nov 5, 2016
140bd12
Merge IntoShape into ShapeBuilder trait
bluss Nov 5, 2016
18ab777
ndarray-rand: Migrate to ShapeBuilder
bluss Nov 5, 2016
d60f94a
Add #[inline] annotations to non-generic methods
bluss Nov 5, 2016
b939a48
Make sure both Dims are exported
bluss Nov 5, 2016
14f60da
Add non_snake_case warning to Dim
bluss Nov 5, 2016
15fac2a
Document Dimension::Pattern
bluss Nov 5, 2016
09c13ad
Implement indexing, addition, subtraction, multiplication for indices
bluss Nov 5, 2016
33e874a
Index and arithmetic operations in the Dimension trait
bluss Nov 5, 2016
66d5fd5
Improve .fold() again
bluss Nov 5, 2016
a2b97c2
Specific last-item stuff
bluss Nov 5, 2016
f3735ea
Skip Index for Dim/Dimension for now
bluss Nov 5, 2016
edd8501
Drop default impls for slice (they are unused)
bluss Nov 6, 2016
95a24b2
Implement ScalarOperand for isize, usize
bluss Nov 6, 2016
e8ab881
Rename Dimension's array vec methods to use the as_ convention
bluss Nov 6, 2016
5315b70
Update dimension tests
bluss Nov 6, 2016
5dc2fe3
Use a macro to index Dim
bluss Nov 6, 2016
c23897a
Put in place element indexing on dimensions
bluss Nov 6, 2016
d0c88d6
Remove unused imports in dimension
bluss Nov 6, 2016
0b062fd
Remove unused imports in shape_builder.rs
bluss Nov 6, 2016
695bb92
Remove unused imports in constructors
bluss Nov 6, 2016
77166f9
Remove unused lifetime parameter
bluss Nov 6, 2016
90d2a5c
Docs for Ix, Dim functions
bluss Nov 6, 2016
d33b07a
Edit dimension docs, expose size(), size_checked()
bluss Nov 6, 2016
32efd4f
Make dimensions consistent for Ix0-Ix6 with aliases and constructors
bluss Nov 6, 2016
ce3a29e
Remove unused Convert impls
bluss Nov 6, 2016
3c68b86
dimension: Only multiplication is implemented as scalar op, impl Zero
bluss Nov 6, 2016
3d24f79
dimension: Remove Deref and use explicit private accessors
bluss Nov 6, 2016
1af5f01
Add doc for Dim
bluss Nov 6, 2016
60e9c58
Simplify the Ix0-Ix6 functions
bluss Nov 6, 2016
4ac8078
Prepare to split the dimension module
bluss Nov 6, 2016
f24aa93
Split out Axis and Dim
bluss Nov 6, 2016
5fdb0af
split out ndindex
bluss Nov 6, 2016
5ed5a2c
Move dimension conversions to separate file
bluss Nov 6, 2016
fe20633
Split out RemoveAxis
bluss Nov 6, 2016
fd28268
dimension: adjust get/getm macros
bluss Nov 6, 2016
8d98ae6
Split out the Dimension trait
bluss Nov 6, 2016
a3b9ab6
Edit docs for Dim
bluss Nov 6, 2016
7bfb6b4
s![] and ops macros: ast coercion is obsolete, we can drop it!
bluss Nov 6, 2016
a271e02
Add RcArray1, RcArray2 aliases
bluss Nov 6, 2016
5305953
Change one-dimensional constructors to use `A` type parameter.
bluss Nov 6, 2016
3ba15b5
Edit doc headings
bluss Nov 6, 2016
ee623b9
Update split_at.svg
bluss Nov 6, 2016
175762b
use explicit imports in Array::from_shape_vec method
bluss Nov 6, 2016
77a4f38
Edit example for ndindex
bluss Nov 6, 2016
b17f95a
Add missing NdIndex impls
bluss Nov 6, 2016
2bb7b64
Reenable a dimension test
bluss Nov 6, 2016
8190113
Implement NdIndex consistently. Allow indexing in ArrayD using arrays
bluss Nov 7, 2016
da52cdb
Use simpler Debug impl for Dim
bluss Nov 7, 2016
3d90cc2
.travis: Test only beta for now (Requires Rust 1.13)
bluss Nov 7, 2016
45faa49
Fix serde support for Dim migration
bluss Nov 7, 2016
73f1ec8
Fix rustc-serialize support for Dim migration
bluss Nov 7, 2016
c96693b
Ensure DimPrivate is not exported
bluss Nov 7, 2016
238784b
Fix unused import warning
bluss Nov 7, 2016
d026067
Edit link to array view methods
bluss Nov 7, 2016
4f8847e
Simplify DimensionExt
bluss Nov 7, 2016
9832287
Edit dimension docs
bluss Nov 7, 2016
4dc8aa2
Edit docs
bluss Nov 7, 2016
1120b56
Improve basic docs for array, array views
bluss Nov 7, 2016
6afabb0
Improve docs for indexing / Dimension
bluss Nov 7, 2016
0929ea5
Update axis_iter image
bluss Nov 7, 2016
d8f756e
Use 3 x 4 x 5 axis_iter illustration
bluss Nov 7, 2016
db15246
Avoid using macros in type position
bluss Nov 8, 2016
e5f4986
.travis: Test stable again
bluss Nov 8, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions benches/bench1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ use ndarray::{
Array,
Axis,
Ix,
Array1,
Array2,
};
use ndarray::{arr0, arr1, arr2};

Expand Down Expand Up @@ -291,8 +293,8 @@ fn add_2d_cutout(bench: &mut test::Bencher)
#[bench]
fn add_2d_broadcast_1_to_2(bench: &mut test::Bencher)
{
let mut a = Array::<i32, _>::zeros((64, 64));
let b = Array::<i32, _>::zeros(64);
let mut a = Array2::<i32>::zeros((64, 64));
let b = Array1::<i32>::zeros(64);
let bv = b.view();
bench.iter(|| {
a += &bv;
Expand Down Expand Up @@ -717,7 +719,7 @@ fn dot_extended(bench: &mut test::Bencher) {

const MEAN_SUM_N: usize = 127;

fn range_mat(m: Ix, n: Ix) -> Array<f32, (Ix, Ix)> {
fn range_mat(m: Ix, n: Ix) -> Array2<f32> {
assert!(m * n != 0);
Array::linspace(0., (m * n - 1) as f32, m * n).into_shape((m, n)).unwrap()
}
Expand Down
31 changes: 29 additions & 2 deletions benches/higher-order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use test::Bencher;
#[macro_use(s)]
extern crate ndarray;
use ndarray::prelude::*;
use ndarray::ArrayViewMut2;

const N: usize = 1024;
const X: usize = 64;
Expand All @@ -22,12 +23,38 @@ fn map_regular(bench: &mut Bencher)
}


pub fn double_array(mut a: ArrayViewMut2<f64>) {
a *= 2.0;
}

#[bench]
fn map_stride(bench: &mut Bencher)
fn map_stride_double_f64(bench: &mut Bencher)
{
let a = Array::linspace(0., 127., N * 2).into_shape((X, Y * 2)).unwrap();
let mut a = Array::linspace(0., 127., N * 2).into_shape([X, Y * 2]).unwrap();
let mut av = a.slice_mut(s![.., ..;2]);
bench.iter(|| {
double_array(av.view_mut());

});
}

#[bench]
fn map_stride_f64(bench: &mut Bencher)
{
let a = Array::linspace(0., 127., N * 2).into_shape([X, Y * 2]).unwrap();
let av = a.slice(s![.., ..;2]);
bench.iter(|| {
av.map(|&x| 2. * x)
});
}

#[bench]
fn map_stride_u32(bench: &mut Bencher)
{
let a = Array::linspace(0., 127., N * 2).into_shape([X, Y * 2]).unwrap();
let b = a.mapv(|x| x as u32);
let av = b.slice(s![.., ..;2]);
bench.iter(|| {
av.map(|&x| 2 * x)
});
}
43 changes: 43 additions & 0 deletions benches/iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use test::Bencher;
#[macro_use(s)]
extern crate ndarray;
use ndarray::prelude::*;
use ndarray::Array2;

#[bench]
fn iter_sum_2d_regular(bench: &mut Bencher)
Expand Down Expand Up @@ -47,3 +48,45 @@ fn iter_sum_2d_transpose(bench: &mut Bencher)
a.iter().fold(0, |acc, &x| acc + x)
});
}

#[bench]
fn iter_filter_sum_2d_u32(bench: &mut Bencher)
{
let a = Array::linspace(0., 1., 256).into_shape((16, 16)).unwrap();
let b = a.mapv(|x| (x * 100.) as u32);
bench.iter(|| {
b.iter().filter(|&&x| x < 75).fold(0, |acc, &x| acc + x)
});
}

#[bench]
fn iter_filter_sum_2d_f32(bench: &mut Bencher)
{
let a = Array::linspace(0., 1., 256).into_shape((16, 16)).unwrap();
let b = a * 100.;
bench.iter(|| {
b.iter().filter(|&&x| x < 75.).fold(0., |acc, &x| acc + x)
});
}

#[bench]
fn iter_filter_sum_2d_stride_u32(bench: &mut Bencher)
{
let a = Array::linspace(0., 1., 256).into_shape((16, 16)).unwrap();
let b = a.mapv(|x| (x * 100.) as u32);
let b = b.slice(s![.., ..;2]);
bench.iter(|| {
b.iter().filter(|&&x| x < 75).fold(0, |acc, &x| acc + x)
});
}

#[bench]
fn iter_filter_sum_2d_stride_f32(bench: &mut Bencher)
{
let a = Array::linspace(0., 1., 256).into_shape((16, 16)).unwrap();
let b = a * 100.;
let b = b.slice(s![.., ..;2]);
bench.iter(|| {
b.iter().filter(|&&x| x < 75.).fold(0., |acc, &x| acc + x)
});
}
12 changes: 9 additions & 3 deletions docgen/images/axis_iter.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading