| 205 } |
205 } |
| 206 |
206 |
| 207 impl<SM, SV, N, M, K, E> Mapping<Matrix<E, M, K, SV>> for Matrix<E, N, M, SM> |
207 impl<SM, SV, N, M, K, E> Mapping<Matrix<E, M, K, SV>> for Matrix<E, N, M, SM> |
| 208 where |
208 where |
| 209 SM: Storage<E, N, M>, |
209 SM: Storage<E, N, M>, |
| 210 SV: Storage<E, M, K> + Clone, |
210 SV: Storage<E, M, K>, |
| 211 N: Dim, |
211 N: Dim, |
| 212 M: Dim, |
212 M: Dim, |
| 213 K: Dim, |
213 K: Dim, |
| 214 E: Scalar + Zero + One + Copy + ClosedMulAssign + ClosedAddAssign, |
214 E: Scalar + Zero + One + Copy + ClosedMulAssign + ClosedAddAssign, |
| 215 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M> + Allocator<M, N>, |
215 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M>, |
| 216 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV> + StridesOk<E, N, K>, |
216 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV> + StridesOk<E, N, K>, |
| 217 { |
217 { |
| 218 type Codomain = OMatrix<E, N, K>; |
218 type Codomain = OMatrix<E, N, K>; |
| 219 |
219 |
| 220 #[inline] |
220 #[inline] |
| 224 } |
224 } |
| 225 |
225 |
| 226 impl<'a, SM, SV, N, M, K, E> Linear<Matrix<E, M, K, SV>> for Matrix<E, N, M, SM> |
226 impl<'a, SM, SV, N, M, K, E> Linear<Matrix<E, M, K, SV>> for Matrix<E, N, M, SM> |
| 227 where |
227 where |
| 228 SM: Storage<E, N, M>, |
228 SM: Storage<E, N, M>, |
| 229 SV: Storage<E, M, K> + Clone, |
229 SV: Storage<E, M, K>, |
| 230 N: Dim, |
230 N: Dim, |
| 231 M: Dim, |
231 M: Dim, |
| 232 K: Dim, |
232 K: Dim, |
| 233 E: Scalar + Zero + One + Copy + ClosedMulAssign + ClosedAddAssign, |
233 E: Scalar + Zero + One + Copy + ClosedMulAssign + ClosedAddAssign, |
| 234 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M> + Allocator<M, N>, |
234 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M>, |
| 235 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV> + StridesOk<E, N, K>, |
235 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV> + StridesOk<E, N, K>, |
| 236 { |
236 { |
| 237 } |
237 } |
| 238 |
238 |
| 239 impl<SM, SV1, SV2, N, M, K, E> GEMV<E, Matrix<E, M, K, SV1>, Matrix<E, N, K, SV2>> |
239 impl<SM, SV1, SV2, N, M, K, E> GEMV<E, Matrix<E, M, K, SV1>, Matrix<E, N, K, SV2>> |
| 240 for Matrix<E, N, M, SM> |
240 for Matrix<E, N, M, SM> |
| 241 where |
241 where |
| 242 SM: Storage<E, N, M>, |
242 SM: Storage<E, N, M>, |
| 243 SV1: Storage<E, M, K> + Clone, |
243 SV1: Storage<E, M, K>, |
| 244 SV2: StorageMut<E, N, K>, |
244 SV2: StorageMut<E, N, K>, |
| 245 N: Dim, |
245 N: Dim, |
| 246 M: Dim, |
246 M: Dim, |
| 247 K: Dim, |
247 K: Dim, |
| 248 E: Scalar + Zero + One + Float, |
248 E: Scalar + Zero + One + Float, |
| 249 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M> + Allocator<M, N>, |
249 DefaultAllocator: Allocator<N, K> + Allocator<M, K> + Allocator<N, M>, |
| 250 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV1> + StridesOk<E, N, K, SV2>, |
250 ShapeConstraint: StridesOk<E, N, M, SM> + StridesOk<E, M, K, SV1> + StridesOk<E, N, K, SV2>, |
| 251 { |
251 { |
| 252 #[inline] |
252 #[inline] |
| 253 fn gemv<I: Instance<Matrix<E, M, K, SV1>>>( |
253 fn gemv<I: Instance<Matrix<E, M, K, SV1>>>( |
| 254 &self, |
254 &self, |