use ariadnetor::{
BlockCoord, BlockSparseHostOps, BlockSparseSvdResult, BlockSparseTensor, DenseHostOps,
DenseTensor, U1Sector,
};
use ariadnetor_tensor::test_fixtures::square_legs;
#[test]
fn dense_methods_resolve_through_umbrella() {
let mut t = DenseTensor::<f64>::zeros(vec![2, 3]);
for (i, v) in [1.0, 2.0, 3.0, 4.0, 5.0, 6.0].into_iter().enumerate() {
t.set([i / 3, i % 3], v);
}
let (u, s, vt) = t.svd(1).expect("svd via method");
assert_eq!(u.shape(), &[2, 2]);
assert_eq!(s.shape(), &[2]);
assert_eq!(vt.shape(), &[2, 3]);
let tt = t.permute(&[1, 0]).expect("permute via method");
assert_eq!(tt.shape(), &[3, 2]);
}
#[test]
fn block_sparse_methods_resolve_through_umbrella() {
let mut t = BlockSparseTensor::<f64, U1Sector>::zeros(
square_legs(vec![(U1Sector(0), 2), (U1Sector(1), 2)]),
U1Sector(0),
);
t.block_data_mut(&BlockCoord(vec![0, 0]))
.expect("block (0,0) exists")
.copy_from_slice(&[1.0, 2.0, 3.0, 4.0]);
let out = t.permute(&[1, 0]).expect("permute via method");
assert_eq!(out.shape(), t.shape());
let (u, _s, _vt): BlockSparseSvdResult<f64, U1Sector> =
t.svd(1).expect("block-sparse svd via method");
assert_eq!(u.shape()[0], t.shape()[0]);
}