Skip to content

Commit 62e1c78

Browse files
committed
Use getsym()
1 parent 2982129 commit 62e1c78

File tree

2 files changed

+35
-38
lines changed

2 files changed

+35
-38
lines changed

src/simple_varinfo.jl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -356,15 +356,13 @@ function BangBang.setindex!!(vi::SimpleVarInfo, vals, vns::AbstractVector{<:VarN
356356
return vi
357357
end
358358

359-
function BangBang.setindex!!(
360-
vi::SimpleVarInfo{<:AbstractDict}, val, vn::VarName{sym}
361-
) where {sym}
359+
function BangBang.setindex!!(vi::SimpleVarInfo{<:AbstractDict}, val, vn::VarName)
362360
# For dictlike objects, we treat the entire `vn` as a _key_ to set.
363361
dict = values_as(vi)
364362
# Attempt to split into `parent` and `child` optic.
365363
parent, child, issuccess = splitoptic(getoptic(vn)) do optic
366364
o = optic === nothing ? identity : optic
367-
haskey(dict, VarName{sym}(o))
365+
haskey(dict, VarName{getsym(vn)}(o))
368366
end
369367
# When combined with `VarInfo`, `nothing` is equivalent to `identity`.
370368
keyoptic = parent === nothing ? identity : parent
@@ -374,7 +372,7 @@ function BangBang.setindex!!(
374372
BangBang.setindex!!(dict, val, vn)
375373
else
376374
# Split exists ⟹ trying to set an existing key.
377-
vn_key = VarName{sym}(keyoptic)
375+
vn_key = VarName{getsym(vn)}(keyoptic)
378376
BangBang.setindex!!(dict, set!!(dict[vn_key], child, val), vn_key)
379377
end
380378
return Accessors.@set vi.values = dict_new

src/utils.jl

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -595,9 +595,9 @@ julia> (parent ∘ parent ∘ parent)(@varname(x.a[1]))
595595
x
596596
```
597597
"""
598-
function parent(vn::VarName{sym}) where {sym}
598+
function parent(vn::VarName)
599599
p = parent(getoptic(vn))
600-
return p === nothing ? VarName{sym}(identity) : VarName{sym}(p)
600+
return p === nothing ? VarName{getsym(vn)}(identity) : VarName{getsym(vn)}(p)
601601
end
602602

603603
"""
@@ -898,7 +898,7 @@ end
898898

899899
# For `dictlike` we need to check wether `vn` is "immediately" present, or
900900
# if some ancestor of `vn` is present in `dictlike`.
901-
function hasvalue(vals::AbstractDict, vn::VarName{sym}) where {sym}
901+
function hasvalue(vals::AbstractDict, vn::VarName)
902902
# First we check if `vn` is present as is.
903903
haskey(vals, vn) && return true
904904

@@ -907,7 +907,7 @@ function hasvalue(vals::AbstractDict, vn::VarName{sym}) where {sym}
907907
# If `issuccess` is `true`, we found such a split, and hence `vn` is present.
908908
parent, child, issuccess = splitoptic(getoptic(vn)) do optic
909909
o = optic === nothing ? identity : optic
910-
haskey(vals, VarName{sym}(o))
910+
haskey(vals, VarName{getsym(vn)}(o))
911911
end
912912
# When combined with `VarInfo`, `nothing` is equivalent to `identity`.
913913
keyoptic = parent === nothing ? identity : parent
@@ -916,7 +916,7 @@ function hasvalue(vals::AbstractDict, vn::VarName{sym}) where {sym}
916916
issuccess || return false
917917

918918
# At this point we just need to check that we `canview` the value.
919-
value = vals[VarName{sym}(keyoptic)]
919+
value = vals[VarName{getsym(vn)}(keyoptic)]
920920

921921
return canview(child, value)
922922
end
@@ -927,7 +927,7 @@ end
927927
Return value corresponding to `vn` in `values` by also looking
928928
in the the actual values of the dict.
929929
"""
930-
function nested_getindex(values::AbstractDict, vn::VarName{sym}) where {sym}
930+
function nested_getindex(values::AbstractDict, vn::VarName)
931931
maybeval = get(values, vn, nothing)
932932
if maybeval !== nothing
933933
return maybeval
@@ -936,7 +936,7 @@ function nested_getindex(values::AbstractDict, vn::VarName{sym}) where {sym}
936936
# Split the optic into the key / `parent` and the extraction optic / `child`.
937937
parent, child, issuccess = splitoptic(getoptic(vn)) do optic
938938
o = optic === nothing ? identity : optic
939-
haskey(values, VarName{sym}(o))
939+
haskey(values, VarName{getsym(vn)}(o))
940940
end
941941
# When combined with `VarInfo`, `nothing` is equivalent to `identity`.
942942
keyoptic = parent === nothing ? identity : parent
@@ -949,7 +949,7 @@ function nested_getindex(values::AbstractDict, vn::VarName{sym}) where {sym}
949949

950950
# TODO: Should we also check that we `canview` the extracted `value`
951951
# rather than just let it fail upon `get` call?
952-
value = values[VarName{sym}(keyoptic)]
952+
value = values[VarName{getsym(vn)}(keyoptic)]
953953
return child(value)
954954
end
955955

@@ -1065,24 +1065,23 @@ x.z[2][1]
10651065
```
10661066
"""
10671067
varname_leaves(vn::VarName, ::Real) = [vn]
1068-
function varname_leaves(
1069-
vn::VarName{sym}, val::AbstractArray{<:Union{Real,Missing}}
1070-
) where {sym}
1068+
function varname_leaves(vn::VarName, val::AbstractArray{<:Union{Real,Missing}})
10711069
return (
1072-
VarName{sym}(Accessors.IndexLens(Tuple(I)) getoptic(vn)) for
1070+
VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) getoptic(vn)) for
10731071
I in CartesianIndices(val)
10741072
)
10751073
end
1076-
function varname_leaves(vn::VarName{sym}, val::AbstractArray) where {sym}
1074+
function varname_leaves(vn::VarName, val::AbstractArray)
10771075
return Iterators.flatten(
1078-
varname_leaves(VarName{sym}(Accessors.IndexLens(Tuple(I)) getoptic(vn)), val[I])
1079-
for I in CartesianIndices(val)
1076+
varname_leaves(
1077+
VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) getoptic(vn)), val[I]
1078+
) for I in CartesianIndices(val)
10801079
)
10811080
end
1082-
function varname_leaves(vn::VarName{sym}, val::NamedTuple) where {sym}
1081+
function varname_leaves(vn::VarName, val::NamedTuple)
10831082
iter = Iterators.map(keys(val)) do k
10841083
optic = Accessors.PropertyLens{k}()
1085-
varname_leaves(VarName{sym}(optic getoptic(vn)), optic(val))
1084+
varname_leaves(VarName{getsym(vn)}(optic getoptic(vn)), optic(val))
10861085
end
10871086
return Iterators.flatten(iter)
10881087
end
@@ -1112,7 +1111,7 @@ julia> foreach(println, varname_and_value_leaves(@varname(x), x))
11121111
(x.z[2][1], 3.0)
11131112
```
11141113
1115-
There are also some special handling for certain types:
1114+
There is also some special handling for certain types:
11161115
11171116
```jldoctest varname-and-value-leaves
11181117
julia> using LinearAlgebra
@@ -1227,26 +1226,30 @@ value(leaf::Leaf) = leaf.value
12271226
# Leaf-types.
12281227
varname_and_value_leaves_inner(vn::VarName, x::Real) = [Leaf(vn, x)]
12291228
function varname_and_value_leaves_inner(
1230-
vn::VarName{sym}, val::AbstractArray{<:Union{Real,Missing}}
1231-
) where {sym}
1229+
vn::VarName, val::AbstractArray{<:Union{Real,Missing}}
1230+
)
12321231
return (
12331232
Leaf(
1234-
VarName{sym}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)), val[I]
1233+
VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)),
1234+
val[I],
12351235
) for I in CartesianIndices(val)
12361236
)
12371237
end
12381238
# Containers.
1239-
function varname_and_value_leaves_inner(vn::VarName{sym}, val::AbstractArray) where {sym}
1239+
function varname_and_value_leaves_inner(vn::VarName, val::AbstractArray)
12401240
return Iterators.flatten(
12411241
varname_and_value_leaves_inner(
1242-
VarName{sym}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)), val[I]
1242+
VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)),
1243+
val[I],
12431244
) for I in CartesianIndices(val)
12441245
)
12451246
end
1246-
function varname_and_value_leaves_inner(vn::VarName{sym}, val::NamedTuple) where {sym}
1247+
function varname_and_value_leaves_inner(vn::VarName, val::NamedTuple)
12471248
iter = Iterators.map(keys(val)) do k
12481249
optic = Accessors.PropertyLens{k}()
1249-
varname_and_value_leaves_inner(VarName{sym}(optic getoptic(vn)), optic(val))
1250+
varname_and_value_leaves_inner(
1251+
VarName{getsym(vn)}(optic getoptic(vn)), optic(val)
1252+
)
12501253
end
12511254

12521255
return Iterators.flatten(iter)
@@ -1260,20 +1263,16 @@ function varname_and_value_leaves_inner(vn::VarName, x::Cholesky)
12601263
varname_and_value_leaves_inner(Accessors.PropertyLens{:U}() vn, x.U)
12611264
end
12621265
end
1263-
function varname_and_value_leaves_inner(
1264-
vn::VarName{sym}, x::LinearAlgebra.LowerTriangular
1265-
) where {sym}
1266+
function varname_and_value_leaves_inner(vn::VarName, x::LinearAlgebra.LowerTriangular)
12661267
return (
1267-
Leaf(VarName{sym}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)), x[I])
1268+
Leaf(VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) getoptic(vn)), x[I])
12681269
# Iteration over the lower-triangular indices.
12691270
for I in CartesianIndices(x) if I[1] >= I[2]
12701271
)
12711272
end
1272-
function varname_and_value_leaves_inner(
1273-
vn::VarName{sym}, x::LinearAlgebra.UpperTriangular
1274-
) where {sym}
1273+
function varname_and_value_leaves_inner(vn::VarName, x::LinearAlgebra.UpperTriangular)
12751274
return (
1276-
Leaf(VarName{sym}(Accessors.IndexLens(Tuple(I)) AbstractPPL.getoptic(vn)), x[I])
1275+
Leaf(VarName{getsym(vn)}(Accessors.IndexLens(Tuple(I)) getoptic(vn)), x[I])
12771276
# Iteration over the upper-triangular indices.
12781277
for I in CartesianIndices(x) if I[1] <= I[2]
12791278
)

0 commit comments

Comments
 (0)