Skip to content

Commit 322b5db

Browse files
feat: add output type support to build_function_wrapper
1 parent 29ef316 commit 322b5db

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/systems/codegen_utils.jl

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function array_variable_assignments(args...)
4545
return assignments
4646
end
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...)
120134
end

0 commit comments

Comments
 (0)