Skip to content

Commit f4dfa50

Browse files
committed
API: Rename Zip::apply to Zip::for_each and same for par_apply
Rename apply to for_each, par_apply to par_for_each.
1 parent f220572 commit f4dfa50

File tree

14 files changed

+83
-61
lines changed

14 files changed

+83
-61
lines changed

examples/sort-axis.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ where
112112
let perm_i = perm.indices[i];
113113
Zip::from(result.index_axis_mut(axis, perm_i))
114114
.and(self.index_axis(axis, i))
115-
.apply(|to, from| {
115+
.for_each(|to, from| {
116116
copy_nonoverlapping(from, to.as_mut_ptr(), 1);
117117
moved_elements += 1;
118118
});

examples/zip_many.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ fn main() {
4141
// Let's imagine we split to parallelize
4242
{
4343
let (x, y) = Zip::indexed(&mut a).split();
44-
x.apply(|(_, j), elt| {
44+
x.for_each(|(_, j), elt| {
4545
*elt = elt.powi(j as i32);
4646
});
4747

48-
y.apply(|(_, j), elt| {
48+
y.for_each(|(_, j), elt| {
4949
*elt = elt.powi(j as i32);
5050
});
5151
}

src/impl_methods.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,7 +1985,7 @@ where
19851985
let dim = self.raw_dim();
19861986
Zip::from(LanesMut::new(self.view_mut(), Axis(n - 1)))
19871987
.and(Lanes::new(rhs.broadcast_assume(dim), Axis(n - 1)))
1988-
.apply(move |s_row, r_row| Zip::from(s_row).and(r_row).apply(|a, b| f(a, b)));
1988+
.for_each(move |s_row, r_row| Zip::from(s_row).and(r_row).for_each(|a, b| f(a, b)));
19891989
}
19901990

19911991
fn zip_mut_with_elem<B, F>(&mut self, rhs_elem: &B, mut f: F)
@@ -2343,7 +2343,7 @@ where
23432343
prev.slice_axis_inplace(axis, Slice::from(..-1));
23442344
curr.slice_axis_inplace(axis, Slice::from(1..));
23452345
// This implementation relies on `Zip` iterating along `axis` in order.
2346-
Zip::from(prev).and(curr).apply(|prev, curr| unsafe {
2346+
Zip::from(prev).and(curr).for_each(|prev, curr| unsafe {
23472347
// These pointer dereferences and borrows are safe because:
23482348
//
23492349
// 1. They're pointers to elements in the array.

src/linalg/impl_linalg.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,11 +679,11 @@ unsafe fn general_mat_vec_mul_impl<A, S1, S2>(
679679

680680
if beta.is_zero() {
681681
// when beta is zero, c may be uninitialized
682-
Zip::from(a.outer_iter()).and(y).apply(|row, elt| {
682+
Zip::from(a.outer_iter()).and(y).for_each(|row, elt| {
683683
elt.write(row.dot(x) * alpha);
684684
});
685685
} else {
686-
Zip::from(a.outer_iter()).and(y).apply(|row, elt| {
686+
Zip::from(a.outer_iter()).and(y).for_each(|row, elt| {
687687
*elt = *elt * beta + row.dot(x) * alpha;
688688
});
689689
}

src/parallel/impl_par_methods.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,25 @@ macro_rules! zip_impl {
5959
D: Dimension,
6060
$($p: NdProducer<Dim=D> ,)*
6161
{
62+
/// The `par_for_each` method for `Zip`.
63+
///
64+
/// This is a shorthand for using `.into_par_iter().for_each()` on
65+
/// `Zip`.
66+
///
67+
/// Requires crate feature `rayon`.
68+
pub fn par_for_each<F>(self, function: F)
69+
where F: Fn($($p::Item),*) + Sync + Send
70+
{
71+
self.into_par_iter().for_each(move |($($p,)*)| function($($p),*))
72+
}
73+
6274
/// The `par_apply` method for `Zip`.
6375
///
6476
/// This is a shorthand for using `.into_par_iter().for_each()` on
6577
/// `Zip`.
6678
///
6779
/// Requires crate feature `rayon`.
80+
#[deprecated(note="Renamed to .par_for_each()", since="0.15.0")]
6881
pub fn par_apply<F>(self, function: F)
6982
where F: Fn($($p::Item),*) + Sync + Send
7083
{
@@ -133,7 +146,7 @@ macro_rules! zip_impl {
133146
Q::Output: Send,
134147
{
135148
self.and(into)
136-
.par_apply(move |$($p, )* output_| {
149+
.par_for_each(move |$($p, )* output_| {
137150
output_.assign_elem(f($($p ),*));
138151
});
139152
}

src/parallel/zipmacro.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
/// Is equivalent to:
2525
///
2626
/// ```rust,ignore
27-
/// Zip::from(&mut a).and(&b).and(&c).par_apply(|a, &b, &c| {
27+
/// Zip::from(&mut a).and(&b).and(&c).par_for_each(|a, &b, &c| {
2828
/// *a = b + c;
2929
/// });
3030
/// ```
@@ -54,6 +54,6 @@
5454
/// ```
5555
macro_rules! par_azip {
5656
($($t:tt)*) => {
57-
$crate::azip!(@build par_apply $($t)*)
57+
$crate::azip!(@build par_for_each $($t)*)
5858
};
5959
}

src/zip/mod.rs

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ impl<A, D: Dimension> NdProducer for RawArrayViewMut<A, D> {
518518
/// The order elements are visited is not specified. The producers don’t have to
519519
/// have the same item type.
520520
///
521-
/// The `Zip` has two methods for function application: `apply` and
521+
/// The `Zip` has two methods for function application: `for_each` and
522522
/// `fold_while`. The zip object can be split, which allows parallelization.
523523
/// A read-only zip object (no mutable producers) can be cloned.
524524
///
@@ -546,7 +546,7 @@ impl<A, D: Dimension> NdProducer for RawArrayViewMut<A, D> {
546546
/// .and(&b)
547547
/// .and(&c)
548548
/// .and(&d)
549-
/// .apply(|w, &x, &y, &z| {
549+
/// .for_each(|w, &x, &y, &z| {
550550
/// *w += x + y * z;
551551
/// });
552552
///
@@ -563,7 +563,7 @@ impl<A, D: Dimension> NdProducer for RawArrayViewMut<A, D> {
563563
///
564564
/// Zip::from(&mut totals)
565565
/// .and(a.rows())
566-
/// .apply(|totals, row| *totals = row.sum());
566+
/// .for_each(|totals, row| *totals = row.sum());
567567
///
568568
/// // Check the result against the built in `.sum_axis()` along axis 1.
569569
/// assert_eq!(totals, a.sum_axis(Axis(1)));
@@ -692,21 +692,21 @@ impl<P, D> Zip<P, D>
692692
where
693693
D: Dimension,
694694
{
695-
fn apply_core<F, Acc>(&mut self, acc: Acc, mut function: F) -> FoldWhile<Acc>
695+
fn for_each_core<F, Acc>(&mut self, acc: Acc, mut function: F) -> FoldWhile<Acc>
696696
where
697697
F: FnMut(Acc, P::Item) -> FoldWhile<Acc>,
698698
P: ZippableTuple<Dim = D>,
699699
{
700700
if self.dimension.ndim() == 0 {
701701
function(acc, unsafe { self.parts.as_ref(self.parts.as_ptr()) })
702702
} else if self.layout.is(CORDER | FORDER) {
703-
self.apply_core_contiguous(acc, function)
703+
self.for_each_core_contiguous(acc, function)
704704
} else {
705-
self.apply_core_strided(acc, function)
705+
self.for_each_core_strided(acc, function)
706706
}
707707
}
708708

709-
fn apply_core_contiguous<F, Acc>(&mut self, acc: Acc, mut function: F) -> FoldWhile<Acc>
709+
fn for_each_core_contiguous<F, Acc>(&mut self, acc: Acc, mut function: F) -> FoldWhile<Acc>
710710
where
711711
F: FnMut(Acc, P::Item) -> FoldWhile<Acc>,
712712
P: ZippableTuple<Dim = D>,
@@ -744,7 +744,7 @@ where
744744
}
745745

746746

747-
fn apply_core_strided<F, Acc>(&mut self, acc: Acc, function: F) -> FoldWhile<Acc>
747+
fn for_each_core_strided<F, Acc>(&mut self, acc: Acc, function: F) -> FoldWhile<Acc>
748748
where
749749
F: FnMut(Acc, P::Item) -> FoldWhile<Acc>,
750750
P: ZippableTuple<Dim = D>,
@@ -754,14 +754,14 @@ where
754754
panic!("Unreachable: ndim == 0 is contiguous")
755755
}
756756
if n == 1 || self.layout_tendency >= 0 {
757-
self.apply_core_strided_c(acc, function)
757+
self.for_each_core_strided_c(acc, function)
758758
} else {
759-
self.apply_core_strided_f(acc, function)
759+
self.for_each_core_strided_f(acc, function)
760760
}
761761
}
762762

763763
// Non-contiguous but preference for C - unroll over Axis(ndim - 1)
764-
fn apply_core_strided_c<F, Acc>(&mut self, mut acc: Acc, mut function: F) -> FoldWhile<Acc>
764+
fn for_each_core_strided_c<F, Acc>(&mut self, mut acc: Acc, mut function: F) -> FoldWhile<Acc>
765765
where
766766
F: FnMut(Acc, P::Item) -> FoldWhile<Acc>,
767767
P: ZippableTuple<Dim = D>,
@@ -785,7 +785,7 @@ where
785785
}
786786

787787
// Non-contiguous but preference for F - unroll over Axis(0)
788-
fn apply_core_strided_f<F, Acc>(&mut self, mut acc: Acc, mut function: F) -> FoldWhile<Acc>
788+
fn for_each_core_strided_f<F, Acc>(&mut self, mut acc: Acc, mut function: F) -> FoldWhile<Acc>
789789
where
790790
F: FnMut(Acc, P::Item) -> FoldWhile<Acc>,
791791
P: ZippableTuple<Dim = D>,
@@ -939,15 +939,24 @@ macro_rules! map_impl {
939939
{
940940
/// Apply a function to all elements of the input arrays,
941941
/// visiting elements in lock step.
942-
pub fn apply<F>(mut self, mut function: F)
942+
pub fn for_each<F>(mut self, mut function: F)
943943
where F: FnMut($($p::Item),*)
944944
{
945-
self.apply_core((), move |(), args| {
945+
self.for_each_core((), move |(), args| {
946946
let ($($p,)*) = args;
947947
FoldWhile::Continue(function($($p),*))
948948
});
949949
}
950950

951+
/// Apply a function to all elements of the input arrays,
952+
/// visiting elements in lock step.
953+
#[deprecated(note="Renamed to .for_each()", since="0.15.0")]
954+
pub fn apply<F>(self, function: F)
955+
where F: FnMut($($p::Item),*)
956+
{
957+
self.for_each(function)
958+
}
959+
951960
/// Apply a fold function to all elements of the input arrays,
952961
/// visiting elements in lock step.
953962
///
@@ -980,7 +989,7 @@ macro_rules! map_impl {
980989
where
981990
F: FnMut(Acc, $($p::Item),*) -> Acc,
982991
{
983-
self.apply_core(acc, move |acc, args| {
992+
self.for_each_core(acc, move |acc, args| {
984993
let ($($p,)*) = args;
985994
FoldWhile::Continue(function(acc, $($p),*))
986995
}).into_inner()
@@ -993,7 +1002,7 @@ macro_rules! map_impl {
9931002
-> FoldWhile<Acc>
9941003
where F: FnMut(Acc, $($p::Item),*) -> FoldWhile<Acc>
9951004
{
996-
self.apply_core(acc, move |acc, args| {
1005+
self.for_each_core(acc, move |acc, args| {
9971006
let ($($p,)*) = args;
9981007
function(acc, $($p),*)
9991008
})
@@ -1015,7 +1024,7 @@ macro_rules! map_impl {
10151024
pub fn all<F>(mut self, mut predicate: F) -> bool
10161025
where F: FnMut($($p::Item),*) -> bool
10171026
{
1018-
!self.apply_core((), move |_, args| {
1027+
!self.for_each_core((), move |_, args| {
10191028
let ($($p,)*) = args;
10201029
if predicate($($p),*) {
10211030
FoldWhile::Continue(())
@@ -1096,7 +1105,7 @@ macro_rules! map_impl {
10961105
Q::Item: AssignElem<R>
10971106
{
10981107
self.and(into)
1099-
.apply(move |$($p, )* output_| {
1108+
.for_each(move |$($p, )* output_| {
11001109
output_.assign_elem(f($($p ),*));
11011110
});
11021111
}
@@ -1150,7 +1159,7 @@ macro_rules! map_impl {
11501159
// Apply the mapping function on this zip
11511160
// if we panic with unwinding; Partial will drop the written elements.
11521161
let partial_len = &mut partial.len;
1153-
self.apply(move |$($p,)* output_elem: *mut R| {
1162+
self.for_each(move |$($p,)* output_elem: *mut R| {
11541163
output_elem.write(f($($p),*));
11551164
if std::mem::needs_drop::<R>() {
11561165
*partial_len += 1;

src/zip/zipmacro.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/// Is equivalent to:
1313
///
1414
/// ```rust,ignore
15-
/// Zip::from(&mut a).and(&b).and(&c).apply(|a, &b, &c| {
15+
/// Zip::from(&mut a).and(&b).and(&c).for_each(|a, &b, &c| {
1616
/// *a = b + c
1717
/// });
1818
/// ```
@@ -27,8 +27,8 @@
2727
///
2828
/// The *expr* are expressions whose types must implement `IntoNdProducer`, the
2929
/// *pat* are the patterns of the parameters to the closure called by
30-
/// `Zip::apply`, and *body_expr* is the body of the closure called by
31-
/// `Zip::apply`. You can think of each *pat* `in` *expr* as being analogous to
30+
/// `Zip::for_each`, and *body_expr* is the body of the closure called by
31+
/// `Zip::for_each`. You can think of each *pat* `in` *expr* as being analogous to
3232
/// the `pat in expr` of a normal loop `for pat in expr { statements }`: a
3333
/// pattern, followed by `in`, followed by an expression that implements
3434
/// `IntoNdProducer` (analogous to `IntoIterator` for a `for` loop).
@@ -129,6 +129,6 @@ macro_rules! azip {
129129
// catch-all rule
130130
(@build $($t:tt)*) => { compile_error!("Invalid syntax in azip!()") };
131131
($($t:tt)*) => {
132-
$crate::azip!(@build apply $($t)*)
132+
$crate::azip!(@build for_each $($t)*)
133133
};
134134
}

tests/array-construct.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,12 @@ fn maybe_uninit_1() {
231231
let mut a = Mat::maybe_uninit((10, 10));
232232
let v = a.raw_view_mut();
233233
Zip::from(v)
234-
.apply(|ptr| *(*ptr).as_mut_ptr() = 1.);
234+
.for_each(|ptr| *(*ptr).as_mut_ptr() = 1.);
235235

236236
let u = a.raw_view_mut().assume_init();
237237

238238
Zip::from(u)
239-
.apply(|ptr| assert_eq!(*ptr, 1.));
239+
.for_each(|ptr| assert_eq!(*ptr, 1.));
240240

241241
}
242242
}

0 commit comments

Comments
 (0)