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