Skip to content

Commit 3847ec6

Browse files
Merge pull request #2629 from SebastianM-C/extend
fix: propagate parameter dependencies in `extend`
2 parents d54f877 + 9c9ecd9 commit 3847ec6

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

src/systems/abstractsystem.jl

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,6 +2225,10 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
22252225
eqs = union(get_eqs(basesys), get_eqs(sys))
22262226
sts = union(get_unknowns(basesys), get_unknowns(sys))
22272227
ps = union(get_ps(basesys), get_ps(sys))
2228+
base_deps = get_parameter_dependencies(basesys)
2229+
deps = get_parameter_dependencies(sys)
2230+
dep_ps = isnothing(base_deps) ? deps :
2231+
isnothing(deps) ? base_deps : union(base_deps, deps)
22282232
obs = union(get_observed(basesys), get_observed(sys))
22292233
cevs = union(get_continuous_events(basesys), get_continuous_events(sys))
22302234
devs = union(get_discrete_events(basesys), get_discrete_events(sys))
@@ -2233,11 +2237,12 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
22332237

22342238
if length(ivs) == 0
22352239
T(eqs, sts, ps, observed = obs, defaults = defs, name = name, systems = syss,
2236-
continuous_events = cevs, discrete_events = devs, gui_metadata = gui_metadata)
2240+
continuous_events = cevs, discrete_events = devs, gui_metadata = gui_metadata,
2241+
parameter_dependencies = dep_ps)
22372242
elseif length(ivs) == 1
22382243
T(eqs, ivs[1], sts, ps, observed = obs, defaults = defs, name = name,
22392244
systems = syss, continuous_events = cevs, discrete_events = devs,
2240-
gui_metadata = gui_metadata)
2245+
gui_metadata = gui_metadata, parameter_dependencies = dep_ps)
22412246
end
22422247
end
22432248

@@ -2395,8 +2400,8 @@ end
23952400
"""
23962401
is_diff_equation(eq)
23972402
2398-
Returns `true` if the input is a differential equation, i.e. is an equatation that contain some
2399-
form of differential.
2403+
Return `true` if the input is a differential equation, i.e. an equation that contains a
2404+
differential term.
24002405
24012406
Example:
24022407
```julia
@@ -2421,7 +2426,7 @@ end
24212426
"""
24222427
is_alg_equation(eq)
24232428
2424-
Returns `true` if the input is an algebraic equation, i.e. is an equatation that does not contain
2429+
Return `true` if the input is an algebraic equation, i.e. an equation that does not contain
24252430
any differentials.
24262431
24272432
Example:
@@ -2603,8 +2608,9 @@ has_alg_eqs(sys::AbstractSystem) = any(is_alg_equation, get_eqs(sys))
26032608
"""
26042609
has_diff_eqs(sys::AbstractSystem)
26052610
2606-
For a system, returns true if it contain at least one differential equation (i.e. that contain a
2607-
differential) in its *top-level system*.
2611+
Return `true` if a system contains at least one differential equation (i.e. an equation with a
2612+
differential term). Note that this does not consider subsystems, and only takes into account
2613+
equations in the top-level system.
26082614
26092615
Example:
26102616
```julia

test/parameter_dependencies.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,24 @@ using NonlinearSolve
4949
@test integ.ps[p2] == 10.0
5050
end
5151

52+
@testset "extend" begin
53+
@parameters p1=1.0 p2=1.0
54+
@variables x(t)
55+
56+
@mtkbuild sys1 = ODESystem(
57+
[D(x) ~ p1 * t + p2],
58+
t
59+
)
60+
@named sys2 = ODESystem(
61+
[],
62+
t;
63+
parameter_dependencies = [p2 => 2p1]
64+
)
65+
sys = extend(sys2, sys1)
66+
@test isequal(only(parameters(sys)), p1)
67+
@test Set(full_parameters(sys)) == Set([p1, p2])
68+
end
69+
5270
@testset "Clock system" begin
5371
dt = 0.1
5472
@variables x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)

0 commit comments

Comments
 (0)