Skip to content

Commit 1aec75d

Browse files
authored
Merge pull request #2689 from SciML/fb/parse_order
preserve argument order for structural parameters
2 parents 90a6ff4 + 2e23c80 commit 1aec75d

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
3232
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
3333
MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078"
3434
NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
35+
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
3536
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
3637
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
3738
RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd"
@@ -89,6 +90,7 @@ Libdl = "1"
8990
LinearAlgebra = "1"
9091
MLStyle = "0.4.17"
9192
NaNMath = "0.3, 1"
93+
OrderedCollections = "1"
9294
OrdinaryDiffEq = "6.73.0"
9395
PrecompileTools = "1"
9496
RecursiveArrayTools = "2.3, 3"

src/ModelingToolkit.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ using PrecompileTools, Reexport
3131
import FunctionWrappersWrappers
3232
using URIs: URI
3333
using SciMLStructures
34+
import OrderedCollections
3435

3536
using RecursiveArrayTools
3637

src/systems/model_parsing.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function _model_macro(mod, name, expr, isconnector)
5050
ps, sps, vs, = [], [], []
5151
c_evts = []
5252
d_evts = []
53-
kwargs = Set()
53+
kwargs = OrderedCollections.OrderedSet()
5454
where_types = Expr[]
5555

5656
push!(exprs.args, :(variables = []))

test/model_parsing.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,3 +793,27 @@ end
793793
@test typeof(l_guess) == Num
794794
@test readable_code(l_guess) == "k(t)"
795795
end
796+
797+
@testset "Argument order" begin
798+
@mtkmodel OrderModel begin
799+
@structural_parameters begin
800+
b = 1 # reverse alphabetical order to test that the order is preserved
801+
a = b
802+
end
803+
@parameters begin
804+
c = a
805+
d = b
806+
end
807+
end
808+
@named ordermodel = OrderModel()
809+
ordermodel = complete(ordermodel)
810+
defs = ModelingToolkit.defaults(ordermodel)
811+
@test defs[ordermodel.c] == 1
812+
@test defs[ordermodel.d] == 1
813+
814+
@test_nowarn @named ordermodel = OrderModel(a = 2)
815+
ordermodel = complete(ordermodel)
816+
defs = ModelingToolkit.defaults(ordermodel)
817+
@test defs[ordermodel.c] == 2
818+
@test defs[ordermodel.d] == 1
819+
end

0 commit comments

Comments
 (0)