concision_core/params/
iter.rs1use ndarray::Dimension;
6use ndarray::iter::AxisIter;
7use ndarray::iter::Iter as NdIter;
8
9pub type ItemMut<'a, A, D> = (
10 <AxisIter<'a, A, <D as Dimension>::Smaller> as Iterator>::Item,
11 &'a mut A,
12);
13
14pub struct Iter<'a, A, D>
15where
16 D: Dimension,
17{
18 pub(crate) weights: AxisIter<'a, A, D::Smaller>,
19 pub(crate) bias: NdIter<'a, A, D::Smaller>,
20}
21
22impl<'a, A, D> Iter<'a, A, D>
23where
24 D: Dimension,
25{
26 pub fn new(weights: AxisIter<'a, A, D::Smaller>, bias: NdIter<'a, A, D::Smaller>) -> Self {
27 Self { weights, bias }
28 }
29}
30
31impl<'a, A, D> Iterator for Iter<'a, A, D>
32where
33 D: Dimension,
34{
35 type Item = (
36 <AxisIter<'a, A, <D as Dimension>::Smaller> as Iterator>::Item,
37 &'a A,
38 );
39
40 fn next(&mut self) -> Option<Self::Item> {
41 match (self.weights.next(), self.bias.next()) {
42 (Some(w), Some(b)) => Some((w, b)),
43 _ => None,
44 }
45 }
46}
47
48impl<'a, A, D> ExactSizeIterator for Iter<'a, A, D>
49where
50 D: Dimension,
51{
52 fn len(&self) -> usize {
53 self.weights.len()
54 }
55}