permute tests
julia> A = Tensor(Dense(Sparse(Element(0.0))), ones(1, 1))
1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (1, 2))
1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (2, 1))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> A = Tensor(Dense(Dense(Element(0.0))), ones(1, 1))
1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (1, 2))
1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (2, 1))
1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> A = Tensor(Sparse(Dense(Element(0.0))), ones(1, 1))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (1, 2))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (2, 1))
1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> A = Tensor(Sparse(Sparse(Element(0.0))), ones(1, 1))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (1, 2))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> permutedims(A, (2, 1))
1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}:
 1.0
julia> A = Tensor(Dense(Dense(Sparse(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (2, 1, 3))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Dense(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (2, 1, 3))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Dense(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (2, 1, 3))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Dense(Sparse(Sparse(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (2, 1, 3))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Dense(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (1, 3, 2))
1×1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Dense(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (1, 3, 2))
1×1×1 Tensor{DenseLevel{Int32, DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Sparse(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (1, 3, 2))
1×1×1 Tensor{DenseLevel{Int32, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> A = Tensor(Sparse(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0
julia> permutedims(A, (1, 3, 2))
1×1×1 Tensor{SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, SparseDictLevel{Int32, Vector{Int32}, Vector{Int32}, Vector{Int32}, Dict{Tuple{Int32, Int32}, Int32}, Vector{Int32}, DenseLevel{Int32, ElementLevel{0.0, Float64, Int32, Vector{Float64}}}}}}:
[:, :, 1] =
 1.0

