@@ -58,14 +58,21 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
58
58
59
59
if rhss isa Matrix
60
60
arr_sys_expr = build_expr (:vcat , [build_expr (:row ,[conv (rhs) for rhs ∈ rhss[i,:]]) for i in 1 : size (rhss,1 )])
61
+ # : x because ??? what to do in the general case?
62
+ _constructor = constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. SMatrix{$ (size (rhss)... )} : x-> x) : constructor
61
63
elseif typeof (rhss) <: Array && ! (typeof (rhss) <: Vector )
62
64
vector_form = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
63
65
arr_sys_expr = :(reshape ($ vector_form,$ (size (rhss)... )))
66
+ _constructor = constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. SArray{$ (size (rhss)... )} : x-> x) : constructor
64
67
elseif rhss isa SparseMatrixCSC
65
68
vector_form = build_expr (:vect , [conv (rhs) for rhs ∈ nonzeros (rhss)])
66
69
arr_sys_expr = :(SparseMatrixCSC {eltype(u),Int} ($ (size (rhss)... ), $ (rhss. colptr), $ (rhss. rowval), $ vector_form))
70
+ # Static and sparse? Probably not a combo that will actually be hit, but give a default anyways
71
+ _constructor = constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. SMatrix{$ (size (rhss)... )} : x-> x) : constructor
67
72
else # Vector
68
73
arr_sys_expr = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
74
+ # Handle vector constructor separately using `typeof(u)` to support things like LabelledArrays
75
+ _constructor = constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. similar_type (typeof (u), eltype (X)) : x-> convert (typeof (u),x)) : constructor
69
76
end
70
77
71
78
let_expr = Expr (:let , var_eqs, tuple_sys_expr)
@@ -85,7 +92,7 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
85
92
end
86
93
T = promote_type (map (typeof,X)... )
87
94
map (T,X)
88
- construct = $ (constructor === nothing ? :(u isa ModelingToolkit . StaticArrays . StaticArray ? ModelingToolkit . StaticArrays . similar_type ( typeof (u), eltype (X)) : x -> convert ( typeof (u),x)) : constructor)
95
+ construct = $ _constructor
89
96
construct (X)
90
97
end
91
98
)
0 commit comments