Skip to content

Commit e198fbb

Browse files
committed
Change keys on VNT to return an array
1 parent cfc6041 commit e198fbb

File tree

2 files changed

+18
-25
lines changed

2 files changed

+18
-25
lines changed

src/varnamedtuple.jl

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -792,25 +792,18 @@ function apply!!(func, vnt::VarNamedTuple, name::VarName)
792792
return _setindex!!(vnt, new_subdata, name)
793793
end
794794

795-
# TODO(mhauru) Should this return tuples, like it does now? That makes sense for
796-
# VarNamedTuple itself, but if there is a nested PartialArray the tuple might get very big.
797-
# Also, this is not very type stable, it fails even in basic cases. A generated function
798-
# would help, but I failed to make one. Might be something to do with a recursive
799-
# generated function.
800795
function Base.keys(vnt::VarNamedTuple)
801-
result = ()
796+
result = VarName[]
802797
for sym in keys(vnt.data)
803798
subdata = vnt.data[sym]
804799
if subdata isa VarNamedTuple
805800
subkeys = keys(subdata)
806-
result = (
807-
result..., (AbstractPPL.prefix(sk, VarName{sym}()) for sk in subkeys)...
808-
)
801+
append!(result, [AbstractPPL.prefix(sk, VarName{sym}()) for sk in subkeys])
809802
elseif subdata isa PartialArray
810803
subkeys = keys(subdata)
811-
result = (result..., (VarName{sym}(lens) for lens in subkeys)...)
804+
append!(result, [VarName{sym}(lens) for lens in subkeys])
812805
else
813-
result = (result..., VarName{sym}())
806+
push!(result, VarName{sym}())
814807
end
815808
end
816809
return result

test/varnamedtuple.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -343,36 +343,36 @@ end
343343

344344
@testset "keys" begin
345345
vnt = VarNamedTuple()
346-
@test @inferred(keys(vnt)) == ()
346+
@test @inferred(keys(vnt)) == VarName[]
347347

348348
vnt = setindex!!(vnt, 1.0, @varname(a))
349349
# TODO(mhauru) that the below passes @inferred, but any of the later ones don't.
350350
# We should improve type stability of keys().
351-
@test @inferred(keys(vnt)) == (@varname(a),)
351+
@test @inferred(keys(vnt)) == [@varname(a)]
352352

353353
vnt = setindex!!(vnt, [1, 2, 3], @varname(b))
354-
@test keys(vnt) == (@varname(a), @varname(b))
354+
@test keys(vnt) == [@varname(a), @varname(b)]
355355

356356
vnt = setindex!!(vnt, 15, @varname(b[2]))
357-
@test keys(vnt) == (@varname(a), @varname(b))
357+
@test keys(vnt) == [@varname(a), @varname(b)]
358358

359359
vnt = setindex!!(vnt, [10], @varname(c.x.y))
360-
@test keys(vnt) == (@varname(a), @varname(b), @varname(c.x.y))
360+
@test keys(vnt) == [@varname(a), @varname(b), @varname(c.x.y)]
361361

362362
vnt = setindex!!(vnt, -1.0, @varname(d[4]))
363-
@test keys(vnt) == (@varname(a), @varname(b), @varname(c.x.y), @varname(d[4]))
363+
@test keys(vnt) == [@varname(a), @varname(b), @varname(c.x.y), @varname(d[4])]
364364

365365
vnt = setindex!!(vnt, 2.0, @varname(e.f[3, 3].g.h[2, 4, 1].i))
366-
@test keys(vnt) == (
366+
@test keys(vnt) == [
367367
@varname(a),
368368
@varname(b),
369369
@varname(c.x.y),
370370
@varname(d[4]),
371371
@varname(e.f[3, 3].g.h[2, 4, 1].i),
372-
)
372+
]
373373

374374
vnt = setindex!!(vnt, fill(1.0, 4), @varname(j[1:4]))
375-
@test keys(vnt) == (
375+
@test keys(vnt) == [
376376
@varname(a),
377377
@varname(b),
378378
@varname(c.x.y),
@@ -382,10 +382,10 @@ end
382382
@varname(j[2]),
383383
@varname(j[3]),
384384
@varname(j[4]),
385-
)
385+
]
386386

387387
vnt = setindex!!(vnt, 1.0, @varname(j[6]))
388-
@test keys(vnt) == (
388+
@test keys(vnt) == [
389389
@varname(a),
390390
@varname(b),
391391
@varname(c.x.y),
@@ -396,10 +396,10 @@ end
396396
@varname(j[3]),
397397
@varname(j[4]),
398398
@varname(j[6]),
399-
)
399+
]
400400

401401
vnt = setindex!!(vnt, 1.0, @varname(n[2].a))
402-
@test keys(vnt) == (
402+
@test keys(vnt) == [
403403
@varname(a),
404404
@varname(b),
405405
@varname(c.x.y),
@@ -411,7 +411,7 @@ end
411411
@varname(j[4]),
412412
@varname(j[6]),
413413
@varname(n[2].a),
414-
)
414+
]
415415
end
416416

417417
@testset "printing" begin

0 commit comments

Comments
 (0)