Skip to content

Commit b6b045e

Browse files
fix: better handle => nothing entries in u0map
1 parent 598c7cf commit b6b045e

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/systems/problem_utils.jl

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,20 @@ end
442442
$(TYPEDSIGNATURES)
443443
444444
Remove keys in `varmap` whose values are `nothing`.
445+
446+
If `missing_values` is not `nothing`, it is assumed to be a collection and all removed
447+
keys will be added to it.
445448
"""
446-
function filter_missing_values!(varmap::AbstractDict)
447-
filter!(kvp -> kvp[2] !== nothing, varmap)
449+
function filter_missing_values!(varmap::AbstractDict; missing_values = nothing)
450+
filter!(varmap) do kvp
451+
if kvp[2] !== nothing
452+
return true
453+
end
454+
if missing_values !== nothing
455+
push!(missing_values, kvp[1])
456+
end
457+
return false
458+
end
448459
end
449460

450461
struct GetUpdatedMTKParameters{G, S}
@@ -523,14 +534,17 @@ function build_operating_point(
523534
haskey(op, k) && continue
524535
op[k] = v
525536
end
537+
filter_missing_values!(op; missing_values = missing_unknowns)
538+
526539
merge!(op, pmap)
527540
missing_pars = add_fallbacks!(op, ps, defs)
541+
filter_missing_values!(op; missing_values = missing_pars)
528542
for eq in cmap
529543
op[eq.lhs] = eq.rhs
530544
end
531545

532-
empty!(u0map)
533-
empty!(pmap)
546+
filter!(kvp -> kvp[2] === nothing, u0map)
547+
filter!(kvp -> kvp[2] === nothing, pmap)
534548
for (k, v) in op
535549
k = unwrap(k)
536550
if isparameter(k)
@@ -539,6 +553,7 @@ function build_operating_point(
539553
u0map[k] = v
540554
end
541555
end
556+
542557
return op, missing_unknowns, missing_pars
543558
end
544559

@@ -749,9 +764,6 @@ function process_SciMLProblem(
749764

750765
op, missing_unknowns, missing_pars = build_operating_point(
751766
u0map, pmap, defs, cmap, dvs, ps)
752-
filter_missing_values!(op)
753-
filter_missing_values!(u0map)
754-
filter_missing_values!(pmap)
755767
substitute_extra_variables!(sys, u0map)
756768
substitute_extra_variables!(sys, pmap)
757769

0 commit comments

Comments
 (0)