From e8110d043e3b0e92a0422ebb673184e1c7959d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hans=20W=C3=BCrfel?= Date: Fri, 21 Mar 2025 15:33:35 +0100 Subject: [PATCH] pass ODESystem kwargs via `@mtkmodel` constructor --- src/systems/model_parsing.jl | 7 ++++--- test/model_parsing.jl | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/systems/model_parsing.jl b/src/systems/model_parsing.jl index 4632c1b889..d895e64807 100644 --- a/src/systems/model_parsing.jl +++ b/src/systems/model_parsing.jl @@ -115,7 +115,8 @@ function _model_macro(mod, name, expr, isconnector) Ref(dict), [:constants, :defaults, :kwargs, :structural_parameters]) sys = :($ODESystem($(flatten_equations)(equations), $iv, variables, parameters; - name, description = $description, systems, gui_metadata = $gui_metadata, defaults)) + name, description = $description, systems, + gui_metadata = $gui_metadata, defaults, syskwargs...)) if length(ext) == 0 push!(exprs.args, :(var"#___sys___" = $sys)) @@ -137,11 +138,11 @@ function _model_macro(mod, name, expr, isconnector) ])))) f = if length(where_types) == 0 - :($(Symbol(:__, name, :__))(; name, $(kwargs...)) = $exprs) + :($(Symbol(:__, name, :__))(; name, $(kwargs...), syskwargs...) = $exprs) else f_with_where = Expr(:where) push!(f_with_where.args, - :($(Symbol(:__, name, :__))(; name, $(kwargs...))), where_types...) + :($(Symbol(:__, name, :__))(; name, $(kwargs...), syskwargs...)), where_types...) :($f_with_where = $exprs) end diff --git a/test/model_parsing.jl b/test/model_parsing.jl index 62c19d2055..af48773444 100644 --- a/test/model_parsing.jl +++ b/test/model_parsing.jl @@ -1011,3 +1011,17 @@ end @test any(isequal(u), vars) end end + +@testset "Pass kwargs to ODESystem" begin + @mtkmodel UnitFailure begin + @variables begin + x(t), [unit = u"V"] + y(t), [unit = u"A"] + end + @equations begin + x ~ y + end + end + @test_throws ModelingToolkit.ValidationError UnitFailure(name = :uf) + UnitFailure(name = :uf, checks = false) # no error with passed kwarg +end