#[macro_export]
macro_rules! array {
($([$([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::Array::<_, (_, _, _, _, _, _)>::from([$([$([$([$([$([$($x),*]),+]),+]),+]),+]),+])
);
($([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::Array::<_, (_, _, _, _, _)>::from([$([$([$([$([$($x),*]),+]),+]),+]),+])
);
($([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::Array::<_, (_, _, _, _)>::from([$([$([$([$($x),*]),+]),+]),+])
);
($([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::Array::<_, (_, _, _)>::from([$([$([$($x),*]),+]),+])
);
($([$($x:expr),* $(,)?]),+ $(,)?) => (
$crate::Array::<_, (_, _)>::from([$([$($x),*]),+])
);
($($x:expr),* $(,)?) => (
$crate::Array::<_, (_,)>::from([$($x),*])
);
([[[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr]; $n:expr) => (
$crate::Array::<_, (_, _, _, _, _, _)>::from([[[[[[$elem; $i]; $j]; $k]; $l]; $m]; $n])
);
([[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr) => (
$crate::Array::<_, (_, _, _, _, _)>::from([[[[[$elem; $i]; $j]; $k]; $l]; $m])
);
([[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr) => (
$crate::Array::<_, (_, _, _, _)>::from([[[[$elem; $i]; $j]; $k]; $l])
);
([[$elem:expr; $i:expr]; $j:expr]; $k:expr) => (
$crate::Array::<_, (_, _, _)>::from([[[$elem; $i]; $j]; $k])
);
([$elem:expr; $i:expr]; $j:expr) => (
$crate::Array::<_, (_, _)>::from([[$elem; $i]; $j])
);
($elem:expr; $i:expr) => (
$crate::Array::<_, (_,)>::from([$elem; $i])
);
}
#[macro_export]
macro_rules! tensor {
($([$([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::DTensor::<_, 6>::from([$([$([$([$([$([$($x),*]),+]),+]),+]),+]),+])
);
($([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::DTensor::<_, 5>::from([$([$([$([$([$($x),*]),+]),+]),+]),+])
);
($([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::DTensor::<_, 4>::from([$([$([$([$($x),*]),+]),+]),+])
);
($([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::DTensor::<_, 3>::from([$([$([$($x),*]),+]),+])
);
($([$($x:expr),* $(,)?]),+ $(,)?) => (
$crate::DTensor::<_, 2>::from([$([$($x),*]),+])
);
($($x:expr),* $(,)?) => (
$crate::DTensor::<_, 1>::from([$($x),*])
);
([[[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr]; $n:expr) => (
$crate::DTensor::<_, 6>::from_elem([$n, $m, $l, $k, $j, $i], $elem)
);
([[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr) => (
$crate::DTensor::<_, 5>::from_elem([$m, $l, $k, $j, $i], $elem)
);
([[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr) => (
$crate::DTensor::<_, 4>::from_elem([$l, $k, $j, $i], $elem)
);
([[$elem:expr; $i:expr]; $j:expr]; $k:expr) => (
$crate::DTensor::<_, 3>::from_elem([$k, $j, $i], $elem)
);
([$elem:expr; $i:expr]; $j:expr) => (
$crate::DTensor::<_, 2>::from_elem([$j, $i], $elem)
);
($elem:expr; $i:expr) => (
$crate::DTensor::<_, 1>::from_elem([$i], $elem)
);
}
#[macro_export]
macro_rules! view {
($([$([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::View::<_, $crate::Rank<6>>::from(&[$([$([$([$([$([$($x),*]),+]),+]),+]),+]),+])
);
($([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::View::<_, $crate::Rank<5>>::from(&[$([$([$([$([$($x),*]),+]),+]),+]),+])
);
($([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::View::<_, $crate::Rank<4>>::from(&[$([$([$([$($x),*]),+]),+]),+])
);
($([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?) => (
$crate::View::<_, $crate::Rank<3>>::from(&[$([$([$($x),*]),+]),+])
);
($([$($x:expr),* $(,)?]),+ $(,)?) => (
$crate::View::<_, $crate::Rank<2>>::from(&[$([$($x),*]),+])
);
($($x:expr),* $(,)?) => (
$crate::View::<_, $crate::Rank<1>>::from(&[$($x),*])
);
([[[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr]; $n:expr) => (
$crate::View::<_, $crate::Rank<6>>::from(&[[[[[[$elem; $i]; $j]; $k]; $l]; $m]; $n])
);
([[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr) => (
$crate::View::<_, $crate::Rank<5>>::from(&[[[[[$elem; $i]; $j]; $k]; $l]; $m])
);
([[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr) => (
$crate::View::<_, $crate::Rank<4>>::from(&[[[[$elem; $i]; $j]; $k]; $l])
);
([[$elem:expr; $i:expr]; $j:expr]; $k:expr) => (
$crate::View::<_, $crate::Rank<3>>::from(&[[[$elem; $i]; $j]; $k])
);
([$elem:expr; $i:expr]; $j:expr) => (
$crate::View::<_, $crate::Rank<2>>::from(&[[$elem; $i]; $j])
);
($elem:expr; $i:expr) => (
$crate::View::<_, $crate::Rank<1>>::from(&[$elem; $i])
);
}