Skip to content

Commit f0f7618

Browse files
overload permutedims for OneElement matrices (#368)
* overload for OneElement matrices * add unit test * more general implementations and unit tests * make adjustments * add unit test and style
1 parent f659d9f commit f0f7618

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

src/FillArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Base: size, getindex, setindex!, IndexStyle, checkbounds, convert,
77
any, all, axes, isone, iszero, iterate, unique, allunique, permutedims, inv,
88
copy, vec, setindex!, count, ==, reshape, map, zero,
99
show, view, in, mapreduce, one, reverse, promote_op, promote_rule, repeat,
10-
parent, similar, issorted, add_sum, accumulate, OneTo
10+
parent, similar, issorted, add_sum, accumulate, OneTo, permutedims
1111

1212
import LinearAlgebra: rank, svdvals!, tril, triu, tril!, triu!, diag, transpose, adjoint, fill!,
1313
dot, norm2, norm1, normInf, normMinusInf, normp, lmul!, rmul!, diagzero, AdjointAbsVec, TransposeAbsVec,

src/oneelement.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,12 @@ function Base.reshape(A::OneElement, shape::Tuple{Vararg{Int}})
426426
OneElement(A.val, Tuple(newcartind), shape)
427427
end
428428

429+
#permute
430+
_permute(x, p) = ntuple(i -> x[p[i]], length(x))
431+
permutedims(o::OneElementMatrix) = OneElement(o.val, reverse(o.ind), reverse(o.axes))
432+
permutedims(o::OneElementVector) = reshape(o, (1, length(o)))
433+
permutedims(o::OneElement, dims) = OneElement(o.val, _permute(o.ind, dims), _permute(o.axes, dims))
434+
429435
# show
430436
_maybesize(t::Tuple{Base.OneTo{Int}, Vararg{Base.OneTo{Int}}}) = size.(t,1)
431437
_maybesize(t) = t

test/runtests.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2667,6 +2667,17 @@ end
26672667
end
26682668
end
26692669

2670+
@testset "permutedims" begin
2671+
v = OneElement(1, (2, 3), (2, 5))
2672+
@test permutedims(v) === OneElement(1, (3, 2), (5, 2))
2673+
w = OneElement(1, 3, 5)
2674+
@test permutedims(w) === OneElement(1, (1, 3), (1, 5))
2675+
x = OneElement(1, (1, 2, 3), (4, 5, 6))
2676+
@test permutedims(x, (1, 2, 3)) === x
2677+
@test permutedims(x, (3, 2, 1)) === OneElement(1, (3, 2, 1), (6, 5, 4))
2678+
@test permutedims(x, [2, 3, 1]) === OneElement(1, (2, 3, 1), (5, 6, 4))
2679+
@test_throws BoundsError permutedims(x, (2, 1))
2680+
end
26702681
@testset "show" begin
26712682
B = OneElement(2, (1, 2), (3, 4))
26722683
@test repr(B) == "OneElement(2, (1, 2), (3, 4))"

0 commit comments

Comments
 (0)