macro_rules! transpose {
($from:ident: $($dim:literal)x+ => $to:ident) => { ... };
(~ $from:ident, $to:ident; $d:literal $(,$dims:literal)*; $($fd:literal),*; $($td:literal),*) => { ... };
(~ $from:ident, $to:ident;; $($fd:literal),*; $($td:literal),*) => { ... };
($from:ident: $($from_dim:literal)x+ => $to:ident: $($to_dim:literal)x+) => { ... };
}
Expand description
Creates a tensor transpose type and function. Transposing doesn’t cost anything
§Example
#![feature(try_from)]
#[macro_use]
use tensor_macros::*;
use tensor_macros::traits::*;
tensor!(M23: 2 x 3);
tensor!(M33: 3 x 3);
transpose!(M23: 2 x 3 => M32);
dot!(M32: 3 x 2 * M23: 2 x 3 => M33: 3 x 3);
let t = M23([0, 1, 2, 3, 4, 5]);
let u = t.transpose();
let v = M33([9, 12, 15, 12, 17, 22, 15, 22, 29]);
assert_eq!(u * t, v);