You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This only relates to array valued parameter. At the moment, when a Vector is unflattened, a new Vector is created for each argument in the tuple:
functionflatten(::Type{T}, x::Tuple) where {T<:Real}
x_vecs_and_backs =map(val ->flatten(T, val), x)
x_vecs, x_backs =first.(x_vecs_and_backs), last.(x_vecs_and_backs)
lengths =map(length, x_vecs)
sz =_cumsum(lengths)
functionunflatten_to_Tuple(v::AbstractVector{<:Real})
map(x_backs, lengths, sz) do x_back, l, s
returnx_back(v[(s - l +1):s]) #HEREendendreturnreduce(vcat, x_vecs), unflatten_to_Tuple
end
This is necessary, as otherwise the unflattened NamedTuple would contain a bunch of Subarrays, as we cannot deduce the original array from
functionflatten(::Type{T}, x::NamedTuple{names}) where {T<:Real,names}
x_vec, unflatten =flatten(T, values(x))
functionunflatten_to_NamedTuple(v::AbstractVector{<:Real})
v_vec_vec =unflatten(v)
returnNamedTuple{names}(v_vec_vec) #HEREendreturn x_vec, unflatten_to_NamedTuple
end
Changing return NamedTuple{names}(v_vec_vec) to typeof(x)(v_vec_vec) would allow us to use views in the first code block, but this change would make many AD backends unusable.
The text was updated successfully, but these errors were encountered:
From: #39
This only relates to array valued parameter. At the moment, when a Vector is unflattened, a new Vector is created for each argument in the tuple:
This is necessary, as otherwise the unflattened NamedTuple would contain a bunch of
Subarrays
, as we cannot deduce the original array fromChanging
return NamedTuple{names}(v_vec_vec)
totypeof(x)(v_vec_vec)
would allow us to use views in the first code block, but this change would make many AD backends unusable.The text was updated successfully, but these errors were encountered: