@@ -45,7 +45,7 @@ function array_variable_assignments(args...)
4545 return assignments
4646end
4747
48- function build_function_wrapper (sys:: AbstractSystem , expr, args... ; p_start = 2 , p_end = is_time_dependent (sys) ? length (args) - 1 : length (args), wrap_delays = is_dde (sys), wrap_code = identity, add_observed = true , filter_observed = Returns (true ), create_bindings = true , kwargs... )
48+ function build_function_wrapper (sys:: AbstractSystem , expr, args... ; p_start = 2 , p_end = is_time_dependent (sys) ? length (args) - 1 : length (args), wrap_delays = is_dde (sys), wrap_code = identity, add_observed = true , filter_observed = Returns (true ), create_bindings = true , output_type = nothing , mkarray = nothing , kwargs... )
4949 isscalar = ! (expr isa AbstractArray || symbolic_type (expr) == ArraySymbolic ())
5050
5151 obs = filter (filter_observed, observed (sys))
@@ -116,5 +116,19 @@ function build_function_wrapper(sys::AbstractSystem, expr, args...; p_start = 2,
116116
117117 wrap_code = wrap_code .∘ wrap_assignments (isscalar, assignments)
118118
119- return build_function (expr, args... ; wrap_code, kwargs... )
119+ similarto = nothing
120+ if output_type === Tuple
121+ expr = MakeTuple (Tuple (expr))
122+ wrap_code = wrap_code[1 ]
123+ elseif mkarray === nothing
124+ similarto = output_type
125+ else
126+ expr = mkarray (expr, output_type)
127+ wrap_code = wrap_code[2 ]
128+ end
129+
130+ if wrap_code isa Tuple && symbolic_type (expr) == ScalarSymbolic ()
131+ wrap_code = wrap_code[1 ]
132+ end
133+ return build_function (expr, args... ; wrap_code, similarto, kwargs... )
120134end
0 commit comments