Skip to content

Commit e6a84d9

Browse files
committed
More convenient varmap_to_vars
1 parent ea846ab commit e6a84d9

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/variables.jl

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,33 @@ Symbolics.option_to_metadata_type(::Val{:connect}) = VariableConnectType
55

66
"""
77
$(SIGNATURES)
8+
89
Takes a list of pairs of `variables=>values` and an ordered list of variables
910
and creates the array of values in the correct order with default values when
1011
applicable.
1112
"""
12-
function varmap_to_vars(varmap::Dict, varlist; defaults=Dict())
13+
function varmap_to_vars(varmap, varlist; defaults=Dict())
14+
if varmap isa DiffEqBase.NullParameters || isempty(varmap)
15+
varmap = Dict()
16+
end
17+
T = typeof(varmap)
18+
container_type = T <: Dict ? Array : T
19+
20+
if eltype(varmap) <: Pair
21+
varmap isa Dict || (varmap = Dict(varmap))
22+
rules = Dict(varmap)
23+
vals = _varmap_to_vars(varmap, varlist; defaults=defaults)
24+
end
25+
if isempty(vals)
26+
return nothing
27+
elseif container_type <: Tuple
28+
(vals...,)
29+
else
30+
SymbolicUtils.Code.create_array(container_type, eltype(vals), Val(length(vals)), vals...)
31+
end
32+
end
33+
34+
function _varmap_to_vars(varmap::Dict, varlist; defaults=Dict())
1335
varmap = merge(defaults, varmap) # prefers the `varmap`
1436
varmap = Dict(Symbolics.diff2term(value(k))=>value(varmap[k]) for k in keys(varmap))
1537
# resolve symbolic parameter expressions
@@ -27,22 +49,3 @@ function varmap_to_vars(varmap::Dict, varlist; defaults=Dict())
2749
end
2850
out
2951
end
30-
31-
function varmap_to_vars(varmap::Union{AbstractArray,Tuple},varlist; kw...)
32-
if eltype(varmap) <: Pair
33-
out = varmap_to_vars(Dict(varmap), varlist; kw...)
34-
if varmap isa Tuple
35-
(out..., )
36-
else
37-
# Note that `varmap` might be longer than `varlist`
38-
construct_state(varmap, out)
39-
end
40-
else
41-
varmap
42-
end
43-
end
44-
varmap_to_vars(varmap::DiffEqBase.NullParameters,varlist; kw...) = varmap
45-
varmap_to_vars(varmap::Nothing,varlist; kw...) = varmap
46-
47-
construct_state(x::StaticArray, y) = StaticArrays.similar_type(x, eltype(y), StaticArrays.Size(size(y)...))(y)
48-
construct_state(x::Array, y) = y

0 commit comments

Comments
 (0)