Skip to content

Commit 37c6ca8

Browse files
committed
Merge branch 'master' into myb/strong_alias
2 parents 2f8ecd8 + 03d8b04 commit 37c6ca8

File tree

14 files changed

+111
-47
lines changed

14 files changed

+111
-47
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ModelingToolkit"
22
uuid = "961ee093-0014-501f-94e3-6117800e7a78"
33
authors = ["Yingbo Ma <[email protected]>", "Chris Rackauckas <[email protected]> and contributors"]
4-
version = "8.21.0"
4+
version = "8.23.0"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
@@ -70,7 +70,7 @@ NonlinearSolve = "0.3.8"
7070
RecursiveArrayTools = "2.3"
7171
Reexport = "0.2, 1"
7272
RuntimeGeneratedFunctions = "0.4.3, 0.5"
73-
SciMLBase = "1.54"
73+
SciMLBase = "1.58.0"
7474
Setfield = "0.7, 0.8, 1"
7575
SpecialFunctions = "0.7, 0.8, 0.9, 0.10, 1.0, 2"
7676
StaticArrays = "0.10, 0.11, 0.12, 1.0"

src/ModelingToolkit.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module ModelingToolkit
55
using DocStringExtensions
66
using AbstractTrees
77
using DiffEqBase, SciMLBase, ForwardDiff, Reexport
8+
using SciMLBase: StandardODEProblem, StandardNonlinearProblem
89
using Distributed
910
using StaticArrays, LinearAlgebra, SparseArrays, LabelledArrays
1011
using InteractiveUtils

src/systems/abstractsystem.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,9 @@ function getvar(sys::AbstractSystem, name::Symbol; namespace = false)
304304

305305
sts = get_states(sys)
306306
i = findfirst(x -> getname(x) == name, sts)
307+
if i !== nothing
308+
return namespace ? renamespace(sys, sts[i]) : sts[i]
309+
end
307310

308311
if has_observed(sys)
309312
obs = get_observed(sys)

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem, dvs = s
364364
jac_prototype = jac_prototype,
365365
syms = Symbol.(states(sys)),
366366
indepsym = Symbol(get_iv(sys)),
367+
paramsyms = Symbol.(ps),
367368
observed = observedfun,
368369
sparsity = sparsity ? jacobian_sparsity(sys) : nothing)
369370
end
@@ -449,9 +450,9 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = states(sys),
449450
sys = sys,
450451
jac = _jac === nothing ? nothing : _jac,
451452
syms = Symbol.(dvs),
453+
indepsym = Symbol(get_iv(sys)),
454+
paramsyms = Symbol.(ps),
452455
jac_prototype = jac_prototype,
453-
# missing fields in `DAEFunction`
454-
#indepsym = Symbol(get_iv(sys)),
455456
observed = observedfun)
456457
end
457458

@@ -534,7 +535,8 @@ function ODEFunctionExpr{iip}(sys::AbstractODESystem, dvs = states(sys),
534535
mass_matrix = M,
535536
jac_prototype = $jp_expr,
536537
syms = $(Symbol.(states(sys))),
537-
indepsym = $(QuoteNode(Symbol(get_iv(sys)))))
538+
indepsym = $(QuoteNode(Symbol(get_iv(sys)))),
539+
paramsyms = $(QuoteNode(Symbol.(parameters(sys)))))
538540
end
539541
!linenumbers ? striplines(ex) : ex
540542
end
@@ -669,10 +671,12 @@ function DiffEqBase.ODEProblem{iip, specialize}(sys::AbstractODESystem, u0map, t
669671
check_length, kwargs...)
670672
cbs = process_events(sys; callback, has_difference, kwargs...)
671673
kwargs = filter_kwargs(kwargs)
674+
pt = something(get_metadata(sys), StandardODEProblem())
675+
672676
if cbs === nothing
673-
ODEProblem{iip}(f, u0, tspan, p; kwargs...)
677+
ODEProblem{iip}(f, u0, tspan, p, pt; kwargs...)
674678
else
675-
ODEProblem{iip}(f, u0, tspan, p; callback = cbs, kwargs...)
679+
ODEProblem{iip}(f, u0, tspan, p, pt; callback = cbs, kwargs...)
676680
end
677681
end
678682
get_callback(prob::ODEProblem) = prob.kwargs[:callback]

src/systems/diffeqs/odesystem.jl

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ struct ODESystem <: AbstractODESystem
8989
"""
9090
connector_type::Any
9191
"""
92-
connections: connections in a system
93-
"""
94-
connections::Any
95-
"""
9692
preface: inject assignment statements before the evaluation of the RHS function.
9793
"""
9894
preface::Any
@@ -108,23 +104,23 @@ struct ODESystem <: AbstractODESystem
108104
"""
109105
discrete_events::Vector{SymbolicDiscreteCallback}
110106
"""
107+
metadata: metadata for the system, to be used by downstream packages.
108+
"""
109+
metadata::Any
110+
"""
111111
tearing_state: cache for intermediate tearing state
112112
"""
113113
tearing_state::Any
114114
"""
115115
substitutions: substitutions generated by tearing.
116116
"""
117117
substitutions::Any
118-
"""
119-
metadata: metadata for the system, to be used by downstream packages.
120-
"""
121-
metadata::Any
122118

123119
function ODESystem(deqs, iv, dvs, ps, var_to_name, ctrls, observed, tgrad,
124120
jac, ctrl_jac, Wfact, Wfact_t, name, systems, defaults,
125-
torn_matching, connector_type, connections, preface, cevents,
126-
devents, tearing_state = nothing, substitutions = nothing,
127-
metadata = nothing;
121+
torn_matching, connector_type, preface, cevents,
122+
devents, metadata = nothing, tearing_state = nothing,
123+
substitutions = nothing;
128124
checks::Union{Bool, Int} = true)
129125
if checks == true || (checks & CheckComponents) > 0
130126
check_variables(dvs, iv)
@@ -137,8 +133,8 @@ struct ODESystem <: AbstractODESystem
137133
end
138134
new(deqs, iv, dvs, ps, var_to_name, ctrls, observed, tgrad, jac,
139135
ctrl_jac, Wfact, Wfact_t, name, systems, defaults, torn_matching,
140-
connector_type, connections, preface, cevents, devents, tearing_state,
141-
substitutions, metadata)
136+
connector_type, preface, cevents, devents, metadata, tearing_state,
137+
substitutions)
142138
end
143139
end
144140

@@ -191,7 +187,7 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
191187
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events)
192188
ODESystem(deqs, iv′, dvs′, ps′, var_to_name, ctrl′, observed, tgrad, jac,
193189
ctrl_jac, Wfact, Wfact_t, name, systems, defaults, nothing,
194-
connector_type, nothing, preface, cont_callbacks, disc_callbacks,
190+
connector_type, preface, cont_callbacks, disc_callbacks,
195191
metadata, checks = checks)
196192
end
197193

src/systems/diffeqs/sdesystem.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,8 @@ function DiffEqBase.SDEFunction{iip}(sys::SDESystem, dvs = states(sys),
421421
Wfact_t = _Wfact_t === nothing ? nothing : _Wfact_t,
422422
mass_matrix = _M,
423423
syms = Symbol.(states(sys)),
424+
indepsym = Symbol(get_iv(sys)),
425+
paramsyms = Symbol.(ps),
424426
observed = observedfun)
425427
end
426428

@@ -505,7 +507,9 @@ function SDEFunctionExpr{iip}(sys::SDESystem, dvs = states(sys),
505507
Wfact = Wfact,
506508
Wfact_t = Wfact_t,
507509
mass_matrix = M,
508-
syms = $(Symbol.(states(sys))))
510+
syms = $(Symbol.(states(sys))),
511+
indepsym = $(Symbol(get_iv(sys))),
512+
paramsyms = $(Symbol.(parameters(sys))))
509513
end
510514
!linenumbers ? striplines(ex) : ex
511515
end

src/systems/discrete_system/discrete_system.jl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,22 @@ struct DiscreteSystem <: AbstractTimeDependentSystem
6060
"""
6161
connector_type::Any
6262
"""
63+
metadata: metadata for the system, to be used by downstream packages.
64+
"""
65+
metadata::Any
66+
"""
6367
tearing_state: cache for intermediate tearing state
6468
"""
6569
tearing_state::Any
6670
"""
6771
substitutions: substitutions generated by tearing.
6872
"""
6973
substitutions::Any
70-
"""
71-
metadata: metadata for the system, to be used by downstream packages.
72-
"""
73-
metadata::Any
7474

7575
function DiscreteSystem(discreteEqs, iv, dvs, ps, var_to_name, ctrls, observed, name,
7676
systems, defaults, preface, connector_type,
77-
tearing_state = nothing, substitutions = nothing,
78-
metadata = nothing;
77+
metadata = nothing,
78+
tearing_state = nothing, substitutions = nothing;
7979
checks::Union{Bool, Int} = true)
8080
if checks == true || (checks & CheckComponents) > 0
8181
check_variables(dvs, iv)
@@ -85,7 +85,7 @@ struct DiscreteSystem <: AbstractTimeDependentSystem
8585
all_dimensionless([dvs; ps; iv; ctrls]) || check_units(discreteEqs)
8686
end
8787
new(discreteEqs, iv, dvs, ps, var_to_name, ctrls, observed, name, systems, defaults,
88-
preface, connector_type, tearing_state, substitutions, metadata)
88+
preface, connector_type, metadata, tearing_state, substitutions)
8989
end
9090
end
9191

@@ -206,7 +206,8 @@ function SciMLBase.DiscreteProblem(sys::DiscreteSystem, u0map, tspan,
206206
expression_module = eval_module)
207207
f_oop, _ = (@RuntimeGeneratedFunction(eval_module, ex) for ex in f_gen)
208208
f(u, p, iv) = f_oop(u, p, iv)
209-
fd = DiscreteFunction(f; syms = Symbol.(dvs), sys = sys)
209+
fd = DiscreteFunction(f; syms = Symbol.(dvs), indepsym = Symbol(iv),
210+
paramsyms = Symbol.(ps), sys = sys)
210211
DiscreteProblem(fd, u0, tspan, p; kwargs...)
211212
end
212213

src/systems/jumps/jumpsystem.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,9 @@ function DiffEqBase.DiscreteProblem(sys::JumpSystem, u0map, tspan::Union{Tuple,
291291
end
292292
end
293293

294-
df = DiscreteFunction{true, true}(f; syms = Symbol.(states(sys)), sys = sys,
294+
df = DiscreteFunction{true, true}(f; syms = Symbol.(states(sys)),
295+
indepsym = Symbol(get_iv(sys)),
296+
paramsyms = Symbol.(ps), sys = sys,
295297
observed = observedfun)
296298
DiscreteProblem(df, u0, tspan, p; kwargs...)
297299
end
@@ -331,7 +333,9 @@ function DiscreteProblemExpr(sys::JumpSystem, u0map, tspan::Union{Tuple, Nothing
331333
u0 = $u0
332334
p = $p
333335
tspan = $tspan
334-
df = DiscreteFunction{true, true}(f, syms = $(Symbol.(states(sys))))
336+
df = DiscreteFunction{true, true}(f, syms = $(Symbol.(states(sys))),
337+
indepsym = $(Symbol(get_iv(sys))),
338+
paramsyms = $(Symbol.(parameters(sys))))
335339
DiscreteProblem(df, u0, tspan, p)
336340
end
337341
end

src/systems/nonlinear/nonlinearsystem.jl

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ struct NonlinearSystem <: AbstractTimeIndependentSystem
5151
"""
5252
connector_type::Any
5353
"""
54-
connections: connections in a system
54+
metadata: metadata for the system, to be used by downstream packages.
5555
"""
56-
connections::Any
56+
metadata::Any
5757
"""
5858
tearing_state: cache for intermediate tearing state
5959
"""
@@ -62,20 +62,16 @@ struct NonlinearSystem <: AbstractTimeIndependentSystem
6262
substitutions: substitutions generated by tearing.
6363
"""
6464
substitutions::Any
65-
"""
66-
metadata: metadata for the system, to be used by downstream packages.
67-
"""
68-
metadata::Any
6965

7066
function NonlinearSystem(eqs, states, ps, var_to_name, observed, jac, name, systems,
71-
defaults, connector_type, connections, tearing_state = nothing,
72-
substitutions = nothing, metadata = nothing;
67+
defaults, connector_type, metadata = nothing,
68+
tearing_state = nothing, substitutions = nothing;
7369
checks::Union{Bool, Int} = true)
7470
if checks == true || (checks & CheckUnits) > 0
7571
all_dimensionless([states; ps]) || check_units(eqs)
7672
end
7773
new(eqs, states, ps, var_to_name, observed, jac, name, systems, defaults,
78-
connector_type, connections, tearing_state, substitutions, metadata)
74+
connector_type, metadata, tearing_state, substitutions)
7975
end
8076
end
8177

@@ -125,7 +121,7 @@ function NonlinearSystem(eqs, states, ps;
125121
isempty(observed) || collect_var_to_name!(var_to_name, (eq.lhs for eq in observed))
126122

127123
NonlinearSystem(eqs, states, ps, var_to_name, observed, jac, name, systems, defaults,
128-
connector_type, nothing, metadata, checks = checks)
124+
connector_type, metadata, checks = checks)
129125
end
130126

131127
function calculate_jacobian(sys::NonlinearSystem; sparse = false, simplify = false)
@@ -244,7 +240,9 @@ function SciMLBase.NonlinearFunction{iip}(sys::NonlinearSystem, dvs = states(sys
244240
jac_prototype = sparse ?
245241
similar(calculate_jacobian(sys, sparse = sparse),
246242
Float64) : nothing,
247-
syms = Symbol.(states(sys)), observed = observedfun)
243+
syms = Symbol.(states(sys)),
244+
paramsyms = Symbol.(parameters(sys)),
245+
observed = observedfun)
248246
end
249247

250248
"""
@@ -289,7 +287,8 @@ function NonlinearFunctionExpr{iip}(sys::NonlinearSystem, dvs = states(sys),
289287
NonlinearFunction{$iip}(f,
290288
jac = jac,
291289
jac_prototype = $jp_expr,
292-
syms = $(Symbol.(states(sys))))
290+
syms = $(Symbol.(states(sys))),
291+
paramsyms = $(Symbol.(parameters(sys))))
293292
end
294293
!linenumbers ? striplines(ex) : ex
295294
end
@@ -318,6 +317,7 @@ function process_NonlinearProblem(constructor, sys::NonlinearSystem, u0map, para
318317

319318
f = constructor(sys, dvs, ps, u0; jac = jac, checkbounds = checkbounds,
320319
linenumbers = linenumbers, parallel = parallel, simplify = simplify,
320+
syms = Symbol.(dvs), paramsyms = Symbol.(ps),
321321
sparse = sparse, eval_expression = eval_expression, kwargs...)
322322
return f, u0, p
323323
end
@@ -344,7 +344,8 @@ function DiffEqBase.NonlinearProblem{iip}(sys::NonlinearSystem, u0map,
344344
check_length = true, kwargs...) where {iip}
345345
f, u0, p = process_NonlinearProblem(NonlinearFunction{iip}, sys, u0map, parammap;
346346
check_length, kwargs...)
347-
NonlinearProblem{iip}(f, u0, p; kwargs...)
347+
pt = something(get_metadata(sys), StandardNonlinearProblem())
348+
NonlinearProblem{iip}(f, u0, p, pt; kwargs...)
348349
end
349350

350351
"""

src/systems/optimization/optimizationsystem.jl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,12 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
268268

269269
_f = DiffEqBase.OptimizationFunction{iip}(f,
270270
sys = sys,
271-
syms = Symbol.(states(sys)),
272271
SciMLBase.NoAD();
273272
grad = _grad,
274273
hess = _hess,
275274
hess_prototype = hess_prototype,
275+
syms = Symbol.(states(sys)),
276+
paramsyms = Symbol.(parameters(sys)),
276277
cons = cons,
277278
cons_j = cons_j,
278279
cons_h = cons_h,
@@ -283,10 +284,11 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
283284
else
284285
_f = DiffEqBase.OptimizationFunction{iip}(f,
285286
sys = sys,
286-
syms = Symbol.(states(sys)),
287287
SciMLBase.NoAD();
288288
grad = _grad,
289289
hess = _hess,
290+
syms = Symbol.(states(sys)),
291+
paramsyms = Symbol.(parameters(sys)),
290292
hess_prototype = hess_prototype,
291293
expr = obj_expr)
292294
end
@@ -399,9 +401,13 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem, u0,
399401
cons = $cons
400402
cons_j = $cons_j
401403
cons_h = $cons_h
404+
syms = $(Symbol.(states(sys)))
405+
paramsyms = $(Symbol.(parameters(sys)))
402406
_f = OptimizationFunction{iip}(f, SciMLBase.NoAD();
403407
grad = grad,
404408
hess = hess,
409+
syms = syms,
410+
paramsyms = paramsyms,
405411
hess_prototype = hess_prototype,
406412
cons = cons,
407413
cons_j = cons_j,
@@ -421,9 +427,13 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem, u0,
421427
hess = $_hess
422428
lb = $lb
423429
ub = $ub
430+
syms = $(Symbol.(states(sys)))
431+
paramsyms = $(Symbol.(parameters(sys)))
424432
_f = OptimizationFunction{iip}(f, SciMLBase.NoAD();
425433
grad = grad,
426434
hess = hess,
435+
syms = syms,
436+
paramsyms = paramsyms,
427437
hess_prototype = hess_prototype,
428438
expr = obj_expr)
429439
OptimizationProblem{$iip}(_f, u0, p; lb = lb, ub = ub, kwargs...)

0 commit comments

Comments
 (0)