easy_ml/tensors/views/
traits.rs1use crate::tensors::Dimension;
14#[allow(unused_imports)] use crate::tensors::Tensor;
16use crate::tensors::views::{DataLayout, TensorMut, TensorRef};
17
18unsafe impl<'source, T, S, const D: usize> TensorRef<T, D> for &'source S
27where
28 S: TensorRef<T, D>,
29{
30 fn get_reference(&self, indexes: [usize; D]) -> Option<&T> {
31 TensorRef::get_reference(*self, indexes)
32 }
33
34 fn view_shape(&self) -> [(Dimension, usize); D] {
35 TensorRef::view_shape(*self)
36 }
37
38 unsafe fn get_reference_unchecked(&self, indexes: [usize; D]) -> &T {
39 unsafe { TensorRef::get_reference_unchecked(*self, indexes) }
40 }
41
42 fn data_layout(&self) -> DataLayout<D> {
43 TensorRef::data_layout(*self)
44 }
45}
46
47unsafe impl<'source, T, S, const D: usize> TensorRef<T, D> for &'source mut S
57where
58 S: TensorRef<T, D>,
59{
60 fn get_reference(&self, indexes: [usize; D]) -> Option<&T> {
61 TensorRef::get_reference(*self, indexes)
62 }
63
64 fn view_shape(&self) -> [(Dimension, usize); D] {
65 TensorRef::view_shape(*self)
66 }
67
68 unsafe fn get_reference_unchecked(&self, indexes: [usize; D]) -> &T {
69 unsafe { TensorRef::get_reference_unchecked(*self, indexes) }
70 }
71
72 fn data_layout(&self) -> DataLayout<D> {
73 TensorRef::data_layout(*self)
74 }
75}
76
77unsafe impl<'source, T, S, const D: usize> TensorMut<T, D> for &'source mut S
87where
88 S: TensorMut<T, D>,
89{
90 fn get_reference_mut(&mut self, indexes: [usize; D]) -> Option<&mut T> {
91 TensorMut::get_reference_mut(*self, indexes)
92 }
93
94 unsafe fn get_reference_unchecked_mut(&mut self, indexes: [usize; D]) -> &mut T {
95 unsafe { TensorMut::get_reference_unchecked_mut(*self, indexes) }
96 }
97}
98
99unsafe impl<T, S, const D: usize> TensorRef<T, D> for Box<S>
108where
109 S: TensorRef<T, D>,
110{
111 fn get_reference(&self, indexes: [usize; D]) -> Option<&T> {
112 self.as_ref().get_reference(indexes)
113 }
114
115 fn view_shape(&self) -> [(Dimension, usize); D] {
116 self.as_ref().view_shape()
117 }
118
119 unsafe fn get_reference_unchecked(&self, indexes: [usize; D]) -> &T {
120 unsafe { self.as_ref().get_reference_unchecked(indexes) }
121 }
122
123 fn data_layout(&self) -> DataLayout<D> {
124 self.as_ref().data_layout()
125 }
126}
127
128unsafe impl<T, S, const D: usize> TensorMut<T, D> for Box<S>
137where
138 S: TensorMut<T, D>,
139{
140 fn get_reference_mut(&mut self, indexes: [usize; D]) -> Option<&mut T> {
141 self.as_mut().get_reference_mut(indexes)
142 }
143
144 unsafe fn get_reference_unchecked_mut(&mut self, indexes: [usize; D]) -> &mut T {
145 unsafe { self.as_mut().get_reference_unchecked_mut(indexes) }
146 }
147}
148
149unsafe impl<T, const D: usize> TensorRef<T, D> for Box<dyn TensorRef<T, D>> {
158 fn get_reference(&self, indexes: [usize; D]) -> Option<&T> {
159 self.as_ref().get_reference(indexes)
160 }
161
162 fn view_shape(&self) -> [(Dimension, usize); D] {
163 self.as_ref().view_shape()
164 }
165
166 unsafe fn get_reference_unchecked(&self, indexes: [usize; D]) -> &T {
167 unsafe { self.as_ref().get_reference_unchecked(indexes) }
168 }
169
170 fn data_layout(&self) -> DataLayout<D> {
171 self.as_ref().data_layout()
172 }
173}
174
175unsafe impl<T, const D: usize> TensorRef<T, D> for Box<dyn TensorMut<T, D>> {
184 fn get_reference(&self, indexes: [usize; D]) -> Option<&T> {
185 self.as_ref().get_reference(indexes)
186 }
187
188 fn view_shape(&self) -> [(Dimension, usize); D] {
189 self.as_ref().view_shape()
190 }
191
192 unsafe fn get_reference_unchecked(&self, indexes: [usize; D]) -> &T {
193 unsafe { self.as_ref().get_reference_unchecked(indexes) }
194 }
195
196 fn data_layout(&self) -> DataLayout<D> {
197 self.as_ref().data_layout()
198 }
199}
200
201unsafe impl<T, const D: usize> TensorMut<T, D> for Box<dyn TensorMut<T, D>> {
210 fn get_reference_mut(&mut self, indexes: [usize; D]) -> Option<&mut T> {
211 self.as_mut().get_reference_mut(indexes)
212 }
213
214 unsafe fn get_reference_unchecked_mut(&mut self, indexes: [usize; D]) -> &mut T {
215 unsafe { self.as_mut().get_reference_unchecked_mut(indexes) }
216 }
217}