Skip to content

Commit 5255e09

Browse files
Gord Stephentimholy
authored andcommitted
Fix #64 cat bug and support merging non-vector axes
1 parent 8f8272d commit 5255e09

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/combine.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ end #equalvalued
1111

1212
sizes{T<:AxisArray}(As::T...) = tuple(zip(map(a -> map(length, indices(a)), As)...)...)
1313
matchingdims{N,T<:AxisArray}(As::NTuple{N,T}) = all(equalvalued, sizes(As...))
14-
matchingdimsexcept{N,T<:AxisArray}(As::NTuple{N,T}, n::Int) = all(equalvalued, sizes(As[[1:n-1; n+1:end]]...))
14+
matchingdimsexcept{N,T<:AxisArray}(As::NTuple{N,T}, n::Int) = all(equalvalued, sizes(As...)[[1:n-1; n+1:end]])
1515

1616
function Base.cat{T}(n::Integer, As::AxisArray{T}...)
1717
if n <= ndims(As[1])
@@ -53,7 +53,7 @@ function combineaxes{T,N,D,Ax}(method::Symbol, As::AxisArray{T,N,D,Ax}...)
5353
return resultaxes, resultaxeslengths, axismaps
5454
end #combineaxes
5555

56-
function mergevalues{T}(values::Tuple{Vararg{Vector{T}}}, method::Symbol)
56+
function mergevalues{T}(values::Tuple{Vararg{AbstractVector{T}}}, method::Symbol)
5757
if method == :inner
5858
intersect(values...)
5959
elseif method == :left

test/combine.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# cat
12
A1data, A2data = [1 3; 2 4], [5 7; 6 8]
23

34
A1 = AxisArray(A1data, Axis{:Row}([:First, :Second]), Axis{:Col}([:A, :B]))
@@ -17,7 +18,13 @@ A2 = AxisArray(A2data, Axis{:Row}([:First, :Second]), Axis{:Col}([:A, :B]))
1718
Axis{:Row}([:First, :Second]), Axis{:Col}([:A, :B]),
1819
Axis{:page}(1:2))
1920

20-
Adata, Bdata = randn(4,4,2), randn(4,4,2)
21+
A1 = AxisArray(A1data, :Row, :Col)
22+
A2 = AxisArray(A2data, :Row, :Col)
23+
@test_throws ArgumentError cat(2, A1, A2)
24+
@test cat(3, A1, A2) == AxisArray(cat(3, A1data, A2data), :Row, :Col)
25+
26+
# merge
27+
Adata, Bdata, Cdata = randn(4,4,2), randn(4,4,2), randn(4,4,2)
2128
A = AxisArray(Adata, Axis{:X}([1,2,3,4]), Axis{:Y}([10.,20,30,40]), Axis{:Z}([:First, :Second]))
2229
B = AxisArray(Bdata, Axis{:X}([3,4,5,6]), Axis{:Y}([30.,40,50,60]), Axis{:Z}([:First, :Second]))
2330

@@ -26,6 +33,11 @@ ABdata[1:4,1:4,:] = Adata
2633
ABdata[3:6,3:6,:] = Bdata
2734
@test merge(A,B) == AxisArray(ABdata, Axis{:X}([1,2,3,4,5,6]), Axis{:Y}([10.,20,30,40,50,60]), Axis{:Z}([:First, :Second]))
2835

36+
AC = AxisArray(cat(3, Adata, Cdata), :X, :Y, :Z)
37+
B2 = AxisArray(Bdata, :X, :Y, :Z)
38+
@test merge(AC,B2) == AxisArray(cat(3, Bdata, Cdata), :X, :Y, :Z)
39+
40+
# join
2941
ABdata = zeros(6,6,2,2)
3042
ABdata[1:4,1:4,:,1] = Adata
3143
ABdata[3:6,3:6,:,2] = Bdata

0 commit comments

Comments
 (0)