Skip to content

Commit 6311360

Browse files
Merge pull request SciML#2887 from AayushSabharwal/as/default-nothing
feat: allow specifying `nothing` as default value to skip it
2 parents f594030 + 54ccca4 commit 6311360

File tree

9 files changed

+34
-8
lines changed

9 files changed

+34
-8
lines changed

src/systems/diffeqs/odesystem.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
238238
:ODESystem, force = true)
239239
end
240240
defaults = todict(defaults)
241-
defaults = Dict{Any, Any}(value(k) => value(v) for (k, v) in pairs(defaults))
241+
defaults = Dict{Any, Any}(value(k) => value(v)
242+
for (k, v) in pairs(defaults) if value(v) !== nothing)
242243
var_to_name = Dict()
243244
process_variables!(var_to_name, defaults, dvs′)
244245
process_variables!(var_to_name, defaults, ps′)

src/systems/diffeqs/sdesystem.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ function SDESystem(deqs::AbstractVector{<:Equation}, neqs::AbstractArray, iv, dv
203203
:SDESystem, force = true)
204204
end
205205
defaults = todict(defaults)
206-
defaults = Dict(value(k) => value(v) for (k, v) in pairs(defaults))
206+
defaults = Dict(value(k) => value(v)
207+
for (k, v) in pairs(defaults) if value(v) !== nothing)
207208

208209
var_to_name = Dict()
209210
process_variables!(var_to_name, defaults, dvs′)

src/systems/discrete_system/discrete_system.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ function DiscreteSystem(eqs::AbstractVector{<:Equation}, iv, dvs, ps;
149149
:DiscreteSystem, force = true)
150150
end
151151
defaults = todict(defaults)
152-
defaults = Dict(value(k) => value(v) for (k, v) in pairs(defaults))
152+
defaults = Dict(value(k) => value(v)
153+
for (k, v) in pairs(defaults) if value(v) !== nothing)
153154

154155
var_to_name = Dict()
155156
process_variables!(var_to_name, defaults, dvs′)

src/systems/jumps/jumpsystem.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ function JumpSystem(eqs, iv, unknowns, ps;
176176
:JumpSystem, force = true)
177177
end
178178
defaults = todict(defaults)
179-
defaults = Dict(value(k) => value(v) for (k, v) in pairs(defaults))
179+
defaults = Dict(value(k) => value(v)
180+
for (k, v) in pairs(defaults) if value(v) !== nothing)
180181

181182
unknowns, ps = value.(unknowns), value.(ps)
182183
var_to_name = Dict()

src/systems/nonlinear/nonlinearsystem.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ function NonlinearSystem(eqs, unknowns, ps;
146146
end
147147
jac = RefValue{Any}(EMPTY_JAC)
148148
defaults = todict(defaults)
149-
defaults = Dict{Any, Any}(value(k) => value(v) for (k, v) in pairs(defaults))
149+
defaults = Dict{Any, Any}(value(k) => value(v)
150+
for (k, v) in pairs(defaults) if value(v) !== nothing)
150151

151152
unknowns, ps = value.(unknowns), value.(ps)
152153
var_to_name = Dict()

src/systems/optimization/constraints_system.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ function ConstraintsSystem(constraints, unknowns, ps;
133133

134134
jac = RefValue{Any}(EMPTY_JAC)
135135
defaults = todict(defaults)
136-
defaults = Dict(value(k) => value(v) for (k, v) in pairs(defaults))
136+
defaults = Dict(value(k) => value(v)
137+
for (k, v) in pairs(defaults) if value(v) !== nothing)
137138

138139
var_to_name = Dict()
139140
process_variables!(var_to_name, defaults, unknowns′)

src/systems/optimization/optimizationsystem.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ function OptimizationSystem(op, unknowns, ps;
111111
throw(ArgumentError("System names must be unique."))
112112
end
113113
defaults = todict(defaults)
114-
defaults = Dict(value(k) => value(v) for (k, v) in pairs(defaults))
114+
defaults = Dict(value(k) => value(v)
115+
for (k, v) in pairs(defaults) if value(v) !== nothing)
115116

116117
var_to_name = Dict()
117118
process_variables!(var_to_name, defaults, unknowns′)

src/utils.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,9 @@ end
252252

253253
function collect_defaults!(defs, vars)
254254
for v in vars
255-
(haskey(defs, v) || !hasdefault(unwrap(v))) && continue
255+
if haskey(defs, v) || !hasdefault(unwrap(v)) || (def = getdefault(v)) === nothing
256+
continue
257+
end
256258
defs[v] = getdefault(v)
257259
end
258260
return defs

test/initial_values.jl

+17
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,20 @@ eqs = [D(D(z)) ~ ones(2, 2)]
9191
prob = ODEProblem(sys, [], (0.0, 1.0), [A1 => 0.3])
9292
@test prob.ps[B1] == 0.3
9393
@test prob.ps[B2] == 0.7
94+
95+
@testset "default=nothing is skipped" begin
96+
@parameters p = nothing
97+
@variables x(t)=nothing y(t)
98+
for sys in [
99+
ODESystem(Equation[], t, [x, y], [p]; defaults = [y => nothing], name = :osys),
100+
SDESystem(Equation[], [], t, [x, y], [p]; defaults = [y => nothing], name = :ssys),
101+
JumpSystem(Equation[], t, [x, y], [p]; defaults = [y => nothing], name = :jsys),
102+
NonlinearSystem(Equation[], [x, y], [p]; defaults = [y => nothing], name = :nsys),
103+
OptimizationSystem(
104+
Equation[], [x, y], [p]; defaults = [y => nothing], name = :optsys),
105+
ConstraintsSystem(
106+
Equation[], [x, y], [p]; defaults = [y => nothing], name = :conssys)
107+
]
108+
@test isempty(ModelingToolkit.defaults(sys))
109+
end
110+
end

0 commit comments

Comments
 (0)