Skip to content

Commit 5ede0a7

Browse files
Merge pull request #3317 from vyudu/isequal_handle_events
Handle events in `isequal`
2 parents d3120e7 + cc3ca1c commit 5ede0a7

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

src/systems/diffeqs/odesystem.jl

+2
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,8 @@ function Base.:(==)(sys1::ODESystem, sys2::ODESystem)
373373
_eq_unordered(get_eqs(sys1), get_eqs(sys2)) &&
374374
_eq_unordered(get_unknowns(sys1), get_unknowns(sys2)) &&
375375
_eq_unordered(get_ps(sys1), get_ps(sys2)) &&
376+
_eq_unordered(continuous_events(sys1), continuous_events(sys2)) &&
377+
_eq_unordered(discrete_events(sys1), discrete_events(sys2)) &&
376378
all(s1 == s2 for (s1, s2) in zip(get_systems(sys1), get_systems(sys2)))
377379
end
378380

src/systems/diffeqs/sdesystem.jl

+4-2
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,13 @@ function Base.:(==)(sys1::SDESystem, sys2::SDESystem)
279279
iv2 = get_iv(sys2)
280280
isequal(iv1, iv2) &&
281281
isequal(nameof(sys1), nameof(sys2)) &&
282-
isequal(get_eqs(sys1), get_eqs(sys2)) &&
283-
isequal(get_noiseeqs(sys1), get_noiseeqs(sys2)) &&
282+
_eq_unordered(get_eqs(sys1), get_eqs(sys2)) &&
283+
_eq_unordered(get_noiseeqs(sys1), get_noiseeqs(sys2)) &&
284284
isequal(get_is_scalar_noise(sys1), get_is_scalar_noise(sys2)) &&
285285
_eq_unordered(get_unknowns(sys1), get_unknowns(sys2)) &&
286286
_eq_unordered(get_ps(sys1), get_ps(sys2)) &&
287+
_eq_unordered(continuous_events(sys1), continuous_events(sys2)) &&
288+
_eq_unordered(discrete_events(sys1), discrete_events(sys2)) &&
287289
all(s1 == s2 for (s1, s2) in zip(get_systems(sys1), get_systems(sys2)))
288290
end
289291

test/odesystem.jl

+27-1
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,32 @@ end
15441544
@test all(x -> any(isapprox(x, atol = 1e-6), sol2.t), expected_tstops)
15451545
end
15461546

1547+
# Test `isequal`
1548+
@testset "`isequal`" begin
1549+
@variables X(t)
1550+
@parameters p d
1551+
eq = D(X) ~ p - d*X
1552+
1553+
osys1 = complete(ODESystem([eq], t; name = :osys))
1554+
osys2 = complete(ODESystem([eq], t; name = :osys))
1555+
@test osys1 == osys2 # true
1556+
1557+
continuous_events = [[X ~ 1.0] => [X ~ X + 5.0]]
1558+
discrete_events = [5.0 => [d ~ d / 2.0]]
1559+
1560+
osys1 = complete(ODESystem([eq], t; name = :osys, continuous_events))
1561+
osys2 = complete(ODESystem([eq], t; name = :osys))
1562+
@test osys1 !== osys2
1563+
1564+
osys1 = complete(ODESystem([eq], t; name = :osys, discrete_events))
1565+
osys2 = complete(ODESystem([eq], t; name = :osys))
1566+
@test osys1 !== osys2
1567+
1568+
osys1 = complete(ODESystem([eq], t; name = :osys, continuous_events))
1569+
osys2 = complete(ODESystem([eq], t; name = :osys, discrete_events))
1570+
@test osys1 !== osys2
1571+
end
1572+
15471573
@testset "dae_order_lowering basic test" begin
15481574
@parameters a
15491575
@variables x(t) y(t) z(t)
@@ -1599,4 +1625,4 @@ end
15991625

16001626
prob = ODEProblem{false}(lowered_dae_sys; u0_constructor = x -> SVector(x...))
16011627
@test prob.u0 isa SVector
1602-
end
1628+
end

test/sdesystem.jl

+25
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,31 @@ end
869869
@test length(observed(sys)) == 1
870870
end
871871

872+
@testset "SDESystem Equality with events" begin
873+
@variables X(t)
874+
@parameters p d
875+
@brownian a
876+
seq = D(X) ~ p - d*X + a
877+
@mtkbuild ssys1 = System([seq], t; name = :ssys)
878+
@mtkbuild ssys2 = System([seq], t; name = :ssys)
879+
@test ssys1 == ssys2 # true
880+
881+
continuous_events = [[X ~ 1.0] => [X ~ X + 5.0]]
882+
discrete_events = [5.0 => [d ~ d / 2.0]]
883+
884+
@mtkbuild ssys1 = System([seq], t; name = :ssys, continuous_events)
885+
@mtkbuild ssys2 = System([seq], t; name = :ssys)
886+
@test ssys1 !== ssys2
887+
888+
@mtkbuild ssys1 = System([seq], t; name = :ssys, discrete_events)
889+
@mtkbuild ssys2 = System([seq], t; name = :ssys)
890+
@test ssys1 !== ssys2
891+
892+
@mtkbuild ssys1 = System([seq], t; name = :ssys, continuous_events)
893+
@mtkbuild ssys2 = System([seq], t; name = :ssys, discrete_events)
894+
@test ssys1 !== ssys2
895+
end
896+
872897
@testset "Error when constructing SDESystem without `structural_simplify`" begin
873898
@parameters σ ρ β
874899
@variables x(tt) y(tt) z(tt)

0 commit comments

Comments
 (0)