@@ -1028,6 +1028,46 @@ function varname_and_value_leaves(vn::VarName, x)
1028
1028
return Iterators. map (value, Iterators. flatten (varname_and_value_leaves_inner (vn, x)))
1029
1029
end
1030
1030
1031
+ """
1032
+ varname_and_value_leaves(container)
1033
+
1034
+ Return an iterator over all varname-value pairs that are represented by `container`.
1035
+
1036
+ This is the same as [`varname_and_value_leaves(vn::VarName, x)`](@ref) but over a container
1037
+ containing multiple varnames.
1038
+
1039
+ See also: [`varname_and_value_leaves(vn::VarName, x)`](@ref).
1040
+
1041
+ # Examples
1042
+ ```jldoctest varname-and-value-leaves-container
1043
+ julia> using DynamicPPL: varname_and_value_leaves
1044
+
1045
+ julia> # With an `OrderedDict`
1046
+ dict = OrderedDict(@varname(y) => 1, @varname(z) => [[2.0], [3.0]]);
1047
+
1048
+ julia> foreach(println, varname_and_value_leaves(dict))
1049
+ (y, 1)
1050
+ (z[1][1], 2.0)
1051
+ (z[2][1], 3.0)
1052
+
1053
+ julia> # With a `NamedTuple`
1054
+ nt = (y = 1, z = [[2.0], [3.0]]);
1055
+
1056
+ julia> foreach(println, varname_and_value_leaves(nt))
1057
+ (y, 1)
1058
+ (z[1][1], 2.0)
1059
+ (z[2][1], 3.0)
1060
+ ```
1061
+ """
1062
+ function varname_and_value_leaves (container:: OrderedDict )
1063
+ return Iterators. flatten (varname_and_value_leaves (k, v) for (k, v) in container)
1064
+ end
1065
+ function varname_and_value_leaves (container:: NamedTuple )
1066
+ return Iterators. flatten (
1067
+ varname_and_value_leaves (VarName {k} (), v) for (k, v) in pairs (container)
1068
+ )
1069
+ end
1070
+
1031
1071
"""
1032
1072
Leaf{T}
1033
1073
0 commit comments