Skip to content

Commit 5561d71

Browse files
fix: fix discover parameters from parameter dependencies
1 parent a556e80 commit 5561d71

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,15 @@ function ODESystem(eqs, iv; kwargs...)
311311
push!(algeeq, eq)
312312
end
313313
end
314+
for eq in get(kwargs, :parameter_dependencies, Equation[])
315+
if eq isa Pair
316+
collect_vars!(allunknowns, ps, eq[1], iv)
317+
collect_vars!(allunknowns, ps, eq[2], iv)
318+
else
319+
collect_vars!(allunknowns, ps, eq.lhs, iv)
320+
collect_vars!(allunknowns, ps, eq.rhs, iv)
321+
end
322+
end
314323
for v in allunknowns
315324
isdelay(v, iv) || continue
316325
collect_vars!(allunknowns, ps, arguments(v)[1], iv)

src/systems/discrete_system/discrete_system.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,15 @@ function DiscreteSystem(eqs, iv; kwargs...)
183183
push!(diffvars, eq.lhs)
184184
end
185185
end
186+
for eq in get(kwargs, :parameter_dependencies, Equation[])
187+
if eq isa Pair
188+
collect_vars!(allunknowns, ps, eq[1], iv)
189+
collect_vars!(allunknowns, ps, eq[2], iv)
190+
else
191+
collect_vars!(allunknowns, ps, eq.lhs, iv)
192+
collect_vars!(allunknowns, ps, eq.rhs, iv)
193+
end
194+
end
186195
new_ps = OrderedSet()
187196
for p in ps
188197
if iscall(p) && operation(p) === getindex

src/systems/nonlinear/nonlinearsystem.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,15 @@ function NonlinearSystem(eqs; kwargs...)
170170
collect_vars!(allunknowns, ps, eq.lhs, nothing)
171171
collect_vars!(allunknowns, ps, eq.rhs, nothing)
172172
end
173+
for eq in get(kwargs, :parameter_dependencies, Equation[])
174+
if eq isa Pair
175+
collect_vars!(allunknowns, ps, eq[1], nothing)
176+
collect_vars!(allunknowns, ps, eq[2], nothing)
177+
else
178+
collect_vars!(allunknowns, ps, eq.lhs, nothing)
179+
collect_vars!(allunknowns, ps, eq.rhs, nothing)
180+
end
181+
end
173182
new_ps = OrderedSet()
174183
for p in ps
175184
if iscall(p) && operation(p) === getindex

test/parameter_dependencies.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,16 @@ end
325325
@test getp(sys, p1)(ps2) == 2.0
326326
@test getp(sys, p2)(ps2) == 4.0
327327
end
328+
329+
@testset "Discovery of parameters from dependencies" begin
330+
@parameters p1 p2
331+
@variables x(t) y(t)
332+
@named sys = ODESystem([D(x) ~ y + p2], t; parameter_dependencies = [p2 ~ 2p1])
333+
@test is_parameter(sys, p1)
334+
@named sys = NonlinearSystem([x * y^2 ~ y + p2]; parameter_dependencies = [p2 ~ 2p1])
335+
@test is_parameter(sys, p1)
336+
k = ShiftIndex(t)
337+
@named sys = DiscreteSystem(
338+
[x(k - 1) ~ x(k) + y(k) + p2], t; parameter_dependencies = [p2 ~ 2p1])
339+
@test is_parameter(sys, p1)
340+
end

0 commit comments

Comments
 (0)