@@ -25,6 +25,12 @@ function SymbolicAffect(affect::SymbolicAffect; kwargs...)
2525end 
2626SymbolicAffect (affect; kwargs... ) =  make_affect (affect; kwargs... )
2727
28+ function  Symbolics. fast_substitute (aff:: SymbolicAffect , rules)
29+     substituter =  Base. Fix2 (fast_substitute, rules)
30+     SymbolicAffect (map (substituter, aff. affect), map (substituter, aff. alg_eqs),
31+         map (substituter, aff. discrete_parameters))
32+ end 
33+ 
2834struct  AffectSystem
2935    """ The internal implicit discrete system whose equations are solved to obtain values after the affect.""" 
3036    system:: AbstractSystem 
@@ -36,6 +42,19 @@ struct AffectSystem
3642    discretes:: Vector 
3743end 
3844
45+ function  Symbolics. fast_substitute (aff:: AffectSystem , rules)
46+     substituter =  Base. Fix2 (fast_substitute, rules)
47+     sys =  aff. system
48+     @set!  sys. eqs =  map (substituter, get_eqs (sys))
49+     @set!  sys. parameter_dependencies =  map (substituter, get_parameter_dependencies (sys))
50+     @set!  sys. defaults =  Dict ([k =>  substituter (v) for  (k, v) in  defaults (sys)])
51+     @set!  sys. guesses =  Dict ([k =>  substituter (v) for  (k, v) in  guesses (sys)])
52+     @set!  sys. unknowns =  map (substituter, get_unknowns (sys))
53+     @set!  sys. ps =  map (substituter, get_ps (sys))
54+     AffectSystem (sys, map (substituter, aff. unknowns),
55+         map (substituter, aff. parameters), map (substituter, aff. discretes))
56+ end 
57+ 
3958function  AffectSystem (spec:: SymbolicAffect ; iv =  nothing , alg_eqs =  Equation[], kwargs... )
4059    AffectSystem (spec. affect; alg_eqs =  vcat (spec. alg_eqs, alg_eqs), iv,
4160        discrete_parameters =  spec. discrete_parameters, kwargs... )
0 commit comments