@@ -595,9 +595,9 @@ julia> (parent ∘ parent ∘ parent)(@varname(x.a[1]))
595
595
x
596
596
```
597
597
"""
598
- function parent (vn:: VarName{sym} ) where {sym}
598
+ function parent (vn:: VarName )
599
599
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)
601
601
end
602
602
603
603
"""
898
898
899
899
# For `dictlike` we need to check wether `vn` is "immediately" present, or
900
900
# 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 )
902
902
# First we check if `vn` is present as is.
903
903
haskey (vals, vn) && return true
904
904
@@ -907,7 +907,7 @@ function hasvalue(vals::AbstractDict, vn::VarName{sym}) where {sym}
907
907
# If `issuccess` is `true`, we found such a split, and hence `vn` is present.
908
908
parent, child, issuccess = splitoptic (getoptic (vn)) do optic
909
909
o = optic === nothing ? identity : optic
910
- haskey (vals, VarName {sym } (o))
910
+ haskey (vals, VarName {getsym(vn) } (o))
911
911
end
912
912
# When combined with `VarInfo`, `nothing` is equivalent to `identity`.
913
913
keyoptic = parent === nothing ? identity : parent
@@ -916,7 +916,7 @@ function hasvalue(vals::AbstractDict, vn::VarName{sym}) where {sym}
916
916
issuccess || return false
917
917
918
918
# 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)]
920
920
921
921
return canview (child, value)
922
922
end
927
927
Return value corresponding to `vn` in `values` by also looking
928
928
in the the actual values of the dict.
929
929
"""
930
- function nested_getindex (values:: AbstractDict , vn:: VarName{sym} ) where {sym}
930
+ function nested_getindex (values:: AbstractDict , vn:: VarName )
931
931
maybeval = get (values, vn, nothing )
932
932
if maybeval != = nothing
933
933
return maybeval
@@ -936,7 +936,7 @@ function nested_getindex(values::AbstractDict, vn::VarName{sym}) where {sym}
936
936
# Split the optic into the key / `parent` and the extraction optic / `child`.
937
937
parent, child, issuccess = splitoptic (getoptic (vn)) do optic
938
938
o = optic === nothing ? identity : optic
939
- haskey (values, VarName {sym } (o))
939
+ haskey (values, VarName {getsym(vn) } (o))
940
940
end
941
941
# When combined with `VarInfo`, `nothing` is equivalent to `identity`.
942
942
keyoptic = parent === nothing ? identity : parent
@@ -949,7 +949,7 @@ function nested_getindex(values::AbstractDict, vn::VarName{sym}) where {sym}
949
949
950
950
# TODO : Should we also check that we `canview` the extracted `value`
951
951
# rather than just let it fail upon `get` call?
952
- value = values[VarName {sym } (keyoptic)]
952
+ value = values[VarName {getsym(vn) } (keyoptic)]
953
953
return child (value)
954
954
end
955
955
@@ -1065,24 +1065,23 @@ x.z[2][1]
1065
1065
```
1066
1066
"""
1067
1067
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}} )
1071
1069
return (
1072
- VarName {sym } (Accessors. IndexLens (Tuple (I)) ∘ getoptic (vn)) for
1070
+ VarName {getsym(vn) } (Accessors. IndexLens (Tuple (I)) ∘ getoptic (vn)) for
1073
1071
I in CartesianIndices (val)
1074
1072
)
1075
1073
end
1076
- function varname_leaves (vn:: VarName{sym} , val:: AbstractArray ) where {sym}
1074
+ function varname_leaves (vn:: VarName , val:: AbstractArray )
1077
1075
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)
1080
1079
)
1081
1080
end
1082
- function varname_leaves (vn:: VarName{sym} , val:: NamedTuple ) where {sym}
1081
+ function varname_leaves (vn:: VarName , val:: NamedTuple )
1083
1082
iter = Iterators. map (keys (val)) do k
1084
1083
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))
1086
1085
end
1087
1086
return Iterators. flatten (iter)
1088
1087
end
@@ -1112,7 +1111,7 @@ julia> foreach(println, varname_and_value_leaves(@varname(x), x))
1112
1111
(x.z[2][1], 3.0)
1113
1112
```
1114
1113
1115
- There are also some special handling for certain types:
1114
+ There is also some special handling for certain types:
1116
1115
1117
1116
```jldoctest varname-and-value-leaves
1118
1117
julia> using LinearAlgebra
@@ -1227,26 +1226,30 @@ value(leaf::Leaf) = leaf.value
1227
1226
# Leaf-types.
1228
1227
varname_and_value_leaves_inner (vn:: VarName , x:: Real ) = [Leaf (vn, x)]
1229
1228
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
+ )
1232
1231
return (
1233
1232
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],
1235
1235
) for I in CartesianIndices (val)
1236
1236
)
1237
1237
end
1238
1238
# 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 )
1240
1240
return Iterators. flatten (
1241
1241
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],
1243
1244
) for I in CartesianIndices (val)
1244
1245
)
1245
1246
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 )
1247
1248
iter = Iterators. map (keys (val)) do k
1248
1249
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
+ )
1250
1253
end
1251
1254
1252
1255
return Iterators. flatten (iter)
@@ -1260,20 +1263,16 @@ function varname_and_value_leaves_inner(vn::VarName, x::Cholesky)
1260
1263
varname_and_value_leaves_inner (Accessors. PropertyLens {:U} () ∘ vn, x. U)
1261
1264
end
1262
1265
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 )
1266
1267
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])
1268
1269
# Iteration over the lower-triangular indices.
1269
1270
for I in CartesianIndices (x) if I[1 ] >= I[2 ]
1270
1271
)
1271
1272
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 )
1275
1274
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])
1277
1276
# Iteration over the upper-triangular indices.
1278
1277
for I in CartesianIndices (x) if I[1 ] <= I[2 ]
1279
1278
)
0 commit comments