@@ -77,33 +77,35 @@ Places the values of a `NamedTuple` into the relevant places of a `VarInfo`.
7777function set_namedtuple! (vi:: VarInfo , nt:: NamedTuple )
7878 for (n, vals) in pairs (nt)
7979 vns = vi. metadata[n]. vns
80-
81- n_vns = length (vns)
82- n_vals = length (vals)
83- v_isarr = vals isa AbstractArray
84-
85- if v_isarr && n_vals == 1 && n_vns > 1
86- for (vn, val) in zip (vns, vals[1 ])
87- vi[vn] = val isa AbstractArray ? val : [val]
80+ nvns = length (vns)
81+
82+ # if there is a single variable only
83+ if nvns == 1
84+ # assign the unpacked values
85+ if length (vals) == 1
86+ vi[vns[1 ]] = [vals[1 ];]
87+ # otherwise just assign the values
88+ else
89+ vi[vns[1 ]] = [vals;]
8890 end
89- elseif v_isarr && n_vals > 1 && n_vns == 1
90- vi[vns[1 ]] = vals
91- elseif v_isarr && n_vals == n_vns > 1
92- for (vn, val) in zip (vns, vals)
93- if val isa AbstractArray
94- vi[vn] = val
95- else
96- vi[vn] = [val]
91+ # if there are multiple variables
92+ elseif vals isa AbstractArray
93+ nvals = length (vals)
94+ # if values are provided as an array with a single element
95+ if nvals == 1
96+ # iterate over variables and unpacked values
97+ for (vn, val) in zip (vns, vals[1 ])
98+ vi[vn] = [val;]
99+ end
100+ # otherwise number of variables and number of values have to be equal
101+ elseif nvals == nvns
102+ # iterate over variables and values
103+ for (vn, val) in zip (vns, vals)
104+ vi[vn] = [val;]
97105 end
98- end
99- elseif v_isarr && n_vals == 1 && n_vns == 1
100- if vals[1 ] isa AbstractArray
101- vi[vns[1 ]] = vals[1 ]
102106 else
103- vi[vns[ 1 ]] = [vals[ 1 ]]
107+ error ( " Cannot assign `NamedTuple` to `VarInfo` " )
104108 end
105- elseif ! (v_isarr)
106- vi[vns[1 ]] = [vals]
107109 else
108110 error (" Cannot assign `NamedTuple` to `VarInfo`" )
109111 end
0 commit comments