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}