diff --git a/src/systems/abstractsystem.jl b/src/systems/abstractsystem.jl index 533206883f..e1ae83bd9f 100644 --- a/src/systems/abstractsystem.jl +++ b/src/systems/abstractsystem.jl @@ -2808,18 +2808,16 @@ function process_parameter_equations(sys::AbstractSystem) vars!(varsbuf, eq; op = Union{Differential, Initial, Pre}) # singular equations isempty(varsbuf) && continue + + # only consider explicit parameter dependencies + isparameter(eq.lhs) || continue + if all(varsbuf) do sym is_parameter(sys, sym) || symbolic_type(sym) == ArraySymbolic() && - is_sized_array_symbolic(sym) && - all(Base.Fix1(is_parameter, sys), collect(sym)) - end - if !isparameter(eq.lhs) - throw(ArgumentError(""" - LHS of parameter dependency equation must be a single parameter. Found \ - $(eq.lhs). - """)) - end + is_sized_array_symbolic(sym) && + all(Base.Fix1(is_parameter, sys), collect(sym)) + end push!(pareq_idxs, i) end end diff --git a/test/input_output_handling.jl b/test/input_output_handling.jl index c295546248..8a22f5f997 100644 --- a/test/input_output_handling.jl +++ b/test/input_output_handling.jl @@ -465,3 +465,17 @@ end x = [1.0] @test_nowarn f[1](x, u, p, 0.0) end + +@testset "implicit focing of inputs" begin + @mtkmodel ImplicitForcing begin + @variables begin + u(t), [description = "Input Variable", input=true] + y(t), [description = "fully implicit output", output=true] + end + @equations begin + 0 ~ sqrt(u) # implicitly forces output y because u=f(y) in closed loop + end + end + @named implicit = ImplicitForcing() + mtkcompile(implicit; inputs = unbound_inputs(implicit)) # test for no error +end