Skip to content

Commit 59fb78d

Browse files
committed
simplify ComponentArrayInterpreter by using Union type
1 parent b943536 commit 59fb78d

File tree

2 files changed

+37
-63
lines changed

2 files changed

+37
-63
lines changed

src/ComponentArrayInterpreter.jl

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -154,21 +154,32 @@ function ComponentArrayInterpreter(vc::CA.AbstractComponentArray)
154154
ComponentArrayInterpreter(CA.getaxes(vc))
155155
end
156156

157+
const CAorCAI = Union{CA.AbstractComponentArray, AbstractComponentArrayInterpreter}
158+
157159
# Attach axes to matrices and arrays of ComponentArrays
158160
# with ComponentArrays in the first dimensions (e.g. rownames of a matrix or array)
159-
function ComponentArrayInterpreter(
160-
ca::CA.AbstractComponentArray, n_dims::NTuple{N,<:Integer}) where {N}
161+
function ComponentArrayInterpreter(ca::CAorCAI, n_dims::NTuple{N,<:Integer}) where {N}
161162
ComponentArrayInterpreter((), CA.getaxes(ca), n_dims)
162163
end
164+
# with ComponentArrays in the last dimensions (e.g. columnnames of a matrix)
165+
function ComponentArrayInterpreter(n_dims::NTuple{N,<:Integer}, ca::CAorCAI) where {N}
166+
ComponentArrayInterpreter(n_dims, CA.getaxes(ca), ())
167+
end
168+
# with ComponentArrays in the center dimensions (e.g. columnnames of a 3D-array)
163169
function ComponentArrayInterpreter(
164-
cai::AbstractComponentArrayInterpreter, n_dims::NTuple{N,<:Integer}) where {N}
165-
ComponentArrayInterpreter((), CA.getaxes(cai), n_dims)
170+
n_dims::NTuple{N,<:Integer}, ca::CAorCAI, m_dims::NTuple{M,<:Integer}) where {N,M}
171+
ComponentArrayInterpreter(n_dims, CA.getaxes(ca), m_dims)
172+
end
173+
174+
function ComponentArrayInterpreter(
175+
n_dims::NTuple{N,<:Integer}, axes::NTuple{A,<:CA.AbstractAxis},
176+
m_dims::NTuple{M,<:Integer}) where {N,A,M}
177+
axes_ext = (
178+
map(n_dim -> CA.Axis(i=1:n_dim), n_dims)...,
179+
axes...,
180+
map(n_dim -> CA.Axis(i=1:n_dim), m_dims)...)
181+
ComponentArrayInterpreter(axes_ext)
166182
end
167-
# function ComponentArrayInterpreter(
168-
# axes::NTuple{M,<:CA.AbstractAxis}, n_dims::NTuple{N,<:Integer}) where {M,N}
169-
# axes_ext = (axes..., map(n_dim -> CA.Axis(i=1:n_dim), n_dims)...)
170-
# ComponentArrayInterpreter(axes_ext)
171-
# end
172183

173184
# support also for other AbstractComponentArrayInterpreter types
174185
# in a type-stable way by providing the Tuple of dimensions as a value type
@@ -184,48 +195,11 @@ function stack_ca_int(
184195
IT.name.wrapper(CA.getaxes(cai), n_dims)::IT.name.wrapper
185196
end
186197
function StaticComponentArrayInterpreter(
187-
axes::NTuple{M,<:CA.AbstractAxis}, n_dims::NTuple{N,<:Integer}) where {M,N}
198+
axes::NTuple{A,<:CA.AbstractAxis}, n_dims::NTuple{N,<:Integer}) where {A,N}
188199
axes_ext = (axes..., map(n_dim -> CA.Axis(i=1:n_dim), n_dims)...)
189200
StaticComponentArrayInterpreter{axes_ext}()
190201
end
191202

192-
# with ComponentArrays in the last dimensions (e.g. columnnames of a matrix)
193-
function ComponentArrayInterpreter(
194-
n_dims::NTuple{N,<:Integer}, ca::CA.AbstractComponentArray) where {N}
195-
ComponentArrayInterpreter(n_dims, CA.getaxes(ca), ())
196-
end
197-
function ComponentArrayInterpreter(
198-
n_dims::NTuple{N,<:Integer}, cai::AbstractComponentArrayInterpreter) where {N}
199-
ComponentArrayInterpreter(n_dims, CA.getaxes(cai), ())
200-
end
201-
# function ComponentArrayInterpreter(
202-
# n_dims::NTuple{N,<:Integer}, axes::NTuple{M,<:CA.AbstractAxis}) where {N,M}
203-
# axes_ext = (map(n_dim -> CA.Axis(i=1:n_dim), n_dims)..., axes...)
204-
# ComponentArrayInterpreter(axes_ext)
205-
# end
206-
207-
# with ComponentArrays in the center dimensions (e.g. columnnames of a 3D-array)
208-
function ComponentArrayInterpreter(
209-
n_dims::NTuple{N,<:Integer}, ca::CA.AbstractComponentArray,
210-
m_dims::NTuple{M,<:Integer}) where {N,M}
211-
ComponentArrayInterpreter(n_dims, CA.getaxes(ca), m_dims)
212-
end
213-
function ComponentArrayInterpreter(
214-
n_dims::NTuple{N,<:Integer}, cai::AbstractComponentArrayInterpreter,
215-
m_dims::NTuple{M,<:Integer}) where {N,M}
216-
ComponentArrayInterpreter(n_dims, CA.getaxes(cai), m_dims)
217-
end
218-
219-
function ComponentArrayInterpreter(
220-
n_dims::NTuple{N,<:Integer}, axes::NTuple{A,<:CA.AbstractAxis},
221-
m_dims::NTuple{M,<:Integer}) where {N,A,M}
222-
axes_ext = (
223-
map(n_dim -> CA.Axis(i=1:n_dim), n_dims)...,
224-
axes...,
225-
map(n_dim -> CA.Axis(i=1:n_dim), m_dims)...)
226-
ComponentArrayInterpreter(axes_ext)
227-
end
228-
229203

230204
function stack_ca_int(
231205
::Val{n_dims}, cai::IT) where {IT<:AbstractComponentArrayInterpreter,n_dims}

test/test_ComponentArrayInterpreter.jl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ end;
8080
end;
8181

8282
@testset "ComponentArrayInterpreter matrix and array" begin
83-
mv = ComponentArrayInterpreter(; c1=2, c2=3)
84-
#mv = ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3))
85-
cv = mv(1:length(mv))
83+
mvi = ComponentArrayInterpreter(; c1=2, c2=3)
84+
#mvi = ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3))
85+
cv = mvi(1:length(mvi))
8686
n_col = 4
8787
mm = ComponentArrayInterpreter(cv, (n_col,)) # 1-tuple
8888
testm = (m) -> begin
@@ -94,7 +94,7 @@ end;
9494
testm(mm)
9595
mmc = get_concrete(mm)
9696
testm(mmc)
97-
mmi = ComponentArrayInterpreter(mv, (n_col,)) # construct on interpreter itself
97+
mmi = ComponentArrayInterpreter(mvi, (n_col,)) # construct on interpreter itself
9898
testm(mmi)
9999
#
100100
n_z = 3
@@ -106,7 +106,7 @@ end;
106106
end
107107
testm(mm)
108108
testm(get_concrete(mm))
109-
mmi = ComponentArrayInterpreter(mv, (n_col, n_z)) # construct on interpreter itself
109+
mmi = ComponentArrayInterpreter(mvi, (n_col, n_z)) # construct on interpreter itself
110110
testm(mmi)
111111
#
112112
n_row = 3
@@ -118,17 +118,17 @@ end;
118118
end
119119
testm(mm)
120120
testm(get_concrete(mm))
121-
mm = ComponentArrayInterpreter((n_row,), mv) # construct on interpreter itself
121+
mm = ComponentArrayInterpreter((n_row,), mvi) # construct on interpreter itself
122122
testm(mmi)
123123
end;
124124

125125
@testset "stack_ca_int" begin
126-
mv = get_concrete(ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3)))
127-
#mv = ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3))
128-
cv = mv(1:length(mv))
126+
mvi = get_concrete(ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3)))
127+
#mvi = ComponentArrayInterpreter(CA.ComponentVector(c1=1:2, c2=1:3))
128+
cv = mvi(1:length(mvi))
129129
n_col = 4
130130
n_dims = (n_col,)
131-
mm = @inferred CP.stack_ca_int(mv, Val((n_col,))) # 1-tuple
131+
mm = @inferred CP.stack_ca_int(mvi, Val((n_col,))) # 1-tuple
132132
@inferred get_positions(mm) # sizes are inferred here
133133
testm = (m) -> begin
134134
@test length(mm) == length(cv) * n_col
@@ -139,7 +139,7 @@ end;
139139
testm(mm)
140140
#
141141
n_z = 3
142-
mm = @inferred stack_ca_int(mv, Val((n_col, n_z)))
142+
mm = @inferred stack_ca_int(mvi, Val((n_col, n_z)))
143143
testm = (m) -> begin
144144
@test mm isa AbstractComponentArrayInterpreter
145145
@test length(mm) == length(cv) * n_col * n_z
@@ -149,23 +149,23 @@ end;
149149
testm(mm)
150150
#
151151
n_row = 3
152-
mm = @inferred stack_ca_int(Val((n_row,)), mv)
152+
mm = @inferred stack_ca_int(Val((n_row,)), mvi)
153153
testm = (m) -> begin
154154
@test mm isa AbstractComponentArrayInterpreter
155-
@test length(mm) == n_row * length(mv)
155+
@test length(mm) == n_row * length(mvi)
156156
cm = mm(1:length(mm))
157157
@test cm[2, :c1] == [2, 5]
158158
end
159159
testm(mm)
160160
#
161161
f_n_within = (n) -> begin
162-
mm = @inferred stack_ca_int(Val((n,)), mv)
162+
mm = @inferred stack_ca_int(Val((n,)), mvi)
163163
end
164164
@test_broken @inferred f_n_within(3) # inferred is only
165165
f_outer = () -> begin
166166
f_n_within_cols = (n) -> begin
167-
mm = @inferred stack_ca_int(mv, Val((n,)))
168-
mm = get_concrete(ComponentArrayInterpreter(mv, (3,))) # same effects
167+
mm = @inferred stack_ca_int(mvi, Val((n,)))
168+
mm = get_concrete(ComponentArrayInterpreter(mvi, (3,))) # same effects
169169
end
170170
# @inferred f_n_within_cols(3) # inferred is only Any
171171
res = f_n_within_cols(3) # inferred is only

0 commit comments

Comments
 (0)