442442 $(TYPEDSIGNATURES)
443443
444444Remove 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
448459end
449460
450461struct 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
543558end
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