ModelingToolkit.jl icon indicating copy to clipboard operation
ModelingToolkit.jl copied to clipboard

`substitute` should take fully qualified substitutions

Open BenChung opened this issue 1 year ago • 1 comments

The overload for Symbolics.substitute takes a dict mapping symbols to be replaced to the values to replace them with. However, the symbols must be written in the local scope of whatever model you're substituting into:

@parameters y, w
function ExampleMod(;name) 
    @variables begin 
        x(t)=0
        u(t)
    end
    eqs = [ 
        D(x) ~ u
        u ~ y*sin(t)
    ]
    return ODESystem(eqs, t; name=name)
end
@named mdl = ExampleMod()
equations(substitute(mdl, Dict(mdl.y => w))) # still has y in it
equations(substitute(mdl, Dict(y => w))) # replaces y with w

It should be possible to substitute into a system using fully qualified names.

BenChung avatar Sep 06 '24 07:09 BenChung

You can, that's the semantics of a completed system. This is the reason for system completion.

ChrisRackauckas avatar Sep 07 '24 23:09 ChrisRackauckas