hpt_iterator/
lib.rs

1//! This crate provides a set of iterators for tensors.
2
3#![deny(missing_docs)]
4
5use hpt_traits::tensor::{CommonBounds, TensorInfo};
6use par_strided::{par_strided_simd::ParStridedSimd, ParStrided};
7use par_strided_mut::{par_strided_map_mut_simd::ParStridedMutSimd, ParStridedMut};
8use strided::{strided_simd::StridedSimd, Strided};
9use strided_mut::{simd_imports::StridedMutSimd, StridedMut};
10
11/// A module contains all the iterator traits
12pub mod iterator_traits;
13/// A module contains simd/non-simd parallel strided iterator
14pub mod par_strided;
15/// A module contains simd/non-simd parallel strided fold iterator
16pub mod par_strided_fold;
17/// A module contains simd/non-simd parallel strided map iterator
18pub mod par_strided_map;
19/// A module contains mutable simd/non-simd parallel strided map iterator
20pub mod par_strided_map_mut;
21/// A module contains mutable simd/non-simd parallel strided iterator
22pub mod par_strided_mut;
23/// A module contains simd/non-simd prallel strided zip iterator
24pub mod par_strided_zip;
25/// A module contains shape manipulation functions
26pub mod shape_manipulate;
27/// A module contains simd/non-simd strided iterator
28pub mod strided;
29/// A module contains simd/non-simd strided map iterator
30pub mod strided_map;
31/// A module contains mutable simd/non-simd strided map iterator
32pub mod strided_map_mut;
33/// A module contains simd/non-simd strided map zip iterator
34pub mod strided_mut;
35/// A module contains simd/non-simd strided zip iterator
36pub mod strided_zip;
37
38mod with_simd;
39
40/// A trait for converting a tensor into an iterator.
41pub trait TensorIterator<'a, T: CommonBounds>
42where
43    Self: TensorInfo<T> + 'a,
44    &'a Self: TensorInfo<T>,
45    &'a mut Self: TensorInfo<T>,
46{
47    /// Convert the tensor into a strided iterator.
48    ///
49    /// strided iterator is a single-threaded iterator
50    fn iter(&'a self) -> Strided<T> {
51        Strided::new(self)
52    }
53
54    /// Convert the tensor into a mutable strided iterator.
55    ///
56    /// strided iterator is a single-threaded iterator
57    fn iter_mut(&'a mut self) -> StridedMut<'a, T> {
58        StridedMut::new(self)
59    }
60
61    /// Convert the tensor into a strided simd iterator.
62    ///
63    /// strided simd iterator is a single-threaded simd iterator
64    fn iter_simd(&'a self) -> StridedSimd<T> {
65        StridedSimd::new(self)
66    }
67
68    /// Convert the tensor into a mutable strided simd iterator.
69    ///
70    /// strided simd iterator is a single-threaded simd iterator
71    fn iter_mut_simd(&'a self) -> StridedMutSimd<'a, T> {
72        StridedMutSimd::new(self)
73    }
74
75    /// Convert the tensor into a parallel strided simd iterator.
76    ///
77    /// parallel strided simd iterator is a multi-threaded simd iterator
78    fn par_iter_simd(&'a self) -> ParStridedSimd<T> {
79        ParStridedSimd::new(self)
80    }
81
82    /// Convert the tensor into a mutable parallel strided simd iterator.
83    ///
84    /// parallel strided simd iterator is a multi-threaded simd iterator
85    fn par_iter_mut_simd(&'a mut self) -> ParStridedMutSimd<'a, T> {
86        ParStridedMutSimd::new(self)
87    }
88
89    /// Convert the tensor into a parallel strided iterator.
90    ///
91    /// parallel strided iterator is a multi-threaded iterator
92    fn par_iter(&'a self) -> ParStrided<T> {
93        ParStrided::new(self)
94    }
95
96    /// Convert the tensor into a mutable parallel strided iterator.
97    ///
98    /// parallel strided iterator is a multi-threaded iterator
99    fn par_iter_mut(&'a mut self) -> ParStridedMut<'a, T> {
100        ParStridedMut::new(self)
101    }
102}