I think we want all people to be putting it on the symbols, but defaults was exposed from earlier versions. We need to figure out whether it should stay public API exposed.
I think these go hand-in-hand. If you specify a subset, then at construction time you need to specify the values or you will get an error. For example, if your components are missing a parameter r, then at construction time you’ll be told component1.r and component2.r are not defined etc. (that’s not the exact error message, but it’ll point it out like that). And then you need to do:
ODEProblem(unitstep_fol_factory(name=:fol),[],(0.0,5.0),[component1.r => 2.0, component2.r => 3.0])
to fill in the missing values. So basically, you only need to know values at numerical problem construction time, but at numerical problem construction time you do need to make sure that a whole consistent set of u0 and p are given, otherwise it will error and tell you which values are missing.
I think the docs are a little confusing here because it’s still a little in flux. I think that in general a u0 and p map are not both needed, so this should probably just be:
@named fol = unitstep_fol_factory()
ODEProblem(fol,[component1.r => 2.0, component2.r => 3.0],(0.0,5.0))
What’s a state vs parameter vs observed variable is is kind of an internal solver detail since structural_simplify can change the designation on variables as is required for performance. It’s probably about time to clean that up.