permute tests
julia> A = Tensor(Dense(Sparse(Element(0.0))), ones(1, 1))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (1, 2))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (2, 1))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> A = Tensor(Dense(Dense(Element(0.0))), ones(1, 1))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: Dense [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (1, 2))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: Dense [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (2, 1))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: Dense [1:1]
      └─ [1]: 1.0

julia> A = Tensor(Sparse(Dense(Element(0.0))), ones(1, 1))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: Dense [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (1, 2))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: Dense [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (2, 1))
1×1-Tensor
└─ Dense [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> A = Tensor(Sparse(Sparse(Element(0.0))), ones(1, 1))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (1, 2))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> permutedims(A, (2, 1))
1×1-Tensor
└─ SparseDict (0.0) [:,1:1]
   └─ [:, 1]: SparseDict (0.0) [1:1]
      └─ [1]: 1.0

julia> A = Tensor(Dense(Dense(Sparse(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: SparseDict (0.0) [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (2, 1, 3))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: SparseDict (0.0) [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Dense(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (2, 1, 3))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Dense(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (2, 1, 3))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: SparseDict (0.0) [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Dense(Sparse(Sparse(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: SparseDict (0.0) [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (2, 1, 3))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: SparseDict (0.0) [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Dense(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (1, 3, 2))
1×1×1-Tensor
└─ SparseDict (0.0) [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Dense(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (1, 3, 2))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Sparse(Dense(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ SparseDict (0.0) [:,:,1:1]
   └─ [:, :, 1]: Dense [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (1, 3, 2))
1×1×1-Tensor
└─ Dense [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> A = Tensor(Sparse(Sparse(Dense(Element(0.0)))), ones(1, 1, 1))
1×1×1-Tensor
└─ SparseDict (0.0) [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0

julia> permutedims(A, (1, 3, 2))
1×1×1-Tensor
└─ SparseDict (0.0) [:,:,1:1]
   └─ [:, :, 1]: SparseDict (0.0) [:,1:1]
      └─ [:, 1]: Dense [1:1]
         └─ [1]: 1.0


