11# ModelingToolkit v10 Release Notes  
22
3- ###  Callbacks  
3+ ## Callbacks  
44
55Callback semantics have changed.
66
@@ -17,6 +17,118 @@ event = SymbolicDiscreteCallback(
1717    [t ==  1 ] =>  [p ~  Pre (p) +  1 ], discrete_parameters =  [p])
1818``` 
1919
20+ ## New ` mtkcompile `  and ` @mtkcompile `   
21+ 
22+ ` structural_simplify `  is now renamed to ` mtkcompile ` . ` @mtkbuild `  is renamed to
23+ ` @mtkcompile ` . Their functionality remains the same. However, instead of a second
24+ positional argument ` structural_simplify(sys, (inputs, outputs)) `  the inputs and outputs
25+ should be specified via keyword arguments as ` mtkcompile(sys; inputs, outputs, disturbance_inputs) ` .
26+ 
27+ ## Reduce reliance on metadata in ` mtkcompile `   
28+ 
29+ Previously, ` mtkcompile `  (formerly ` structural_simplify ` ) used to rely on the metadata of
30+ symbolic variables to identify variables/parameters/brownians. This was regardless of
31+ what the system expected the variable to be. Now, it respects the information in the system.
32+ 
33+ ## Unified ` System `  type  
34+ 
35+ There is now a single common ` System `  type for all types of models except PDEs, for which
36+ ` PDESystem `  still exists. It follows the same syntax as ` ODESystem `  and ` NonlinearSystem ` 
37+ did. ` System(equations, t[, vars, pars]) `  will construct a time-dependent system.
38+ ` System(equations[, vars, pars]) `  will construct a time-independent system. Refer to the
39+ docstring for ` System `  for further information.
40+ 
41+ Utility constructors are defined for:
42+ 
43+   -  ` NonlinearSystem(sys) `  to convert a time-dependent system to a time-independent one for
44+     its steady state.
45+   -  ` SDESystem(sys, noise_eqs) `  to add noise to a system
46+   -  ` JumpSystem(jumps, ...) `  to define a system with jumps. Note that normal equations can
47+     also be passed to ` jumps ` .
48+   -  ` OptimizationSystem(cost, ...) `  to define a system for optimization.
49+ 
50+ All problem constructors validate that the system matches the expected structure for
51+ that problem.
52+ 
53+ ## No more ` parameter_dependencies `   
54+ 
55+ The ` parameter_dependencies `  keyword is deprecated. All equations previously passed here
56+ should now be provided as part of the standard equations of the system. If passing parameters
57+ explicitly to the ` System `  constructor, the dependent parameters (on the left hand side of
58+ parameter dependencies) should also be provided. These will be separated out when calling
59+ ` complete `  or ` mtkcompile ` . Calling ` parameter_dependencies `  or ` dependent_parameters `  now
60+ requires that the system is completed. The new ` SDESystem `  constructor still retains the
61+ ` parameter_dependencies `  keyword argument since the number of equations has to match the
62+ number of columns in ` noise_eqs ` .
63+ 
64+ ModelingToolkit now has discretion of what parameters are eliminated using the parameter
65+ equations during ` complete `  or ` mtkcompile ` .
66+ 
67+ ## New problem and constructors  
68+ 
69+ Instead of ` XProblem(sys, u0map, tspan, pmap) `  for time-dependent problems and
70+ ` XProblem(sys, u0map, pmap) `  for time-independent problems, the syntax has changed to
71+ ` XProblem(sys, op, tspan) `  and ` XProblem(sys, op) `  respectively. ` op `  refers to the
72+ operating point, and is a variable-value mapping containing both unknowns and parameters.
73+ 
74+ ` XFunction `  constructors also no longer accept the list of unknowns and parameters as
75+ positional arguments.
76+ 
77+ ## Removed ` DelayParentScope `   
78+ 
79+ The outdated ` DelayParentScope `  has been removed.
80+ 
81+ ## Removed ` XProblemExpr `  and ` XFunctionExpr `   
82+ 
83+ The old ` XProblemExpr `  and ` XFunctionExpr `  constructors used to build an ` Expr `  that
84+ constructs ` XProblem `  and ` XFunction `  respectively are now removed. This functionality
85+ is now available by passing ` expression = Val{true} `  to any problem or function constructor.
86+ 
87+ ## Renaming of ` generate_* `  and ` calculate_* `  methods  
88+ 
89+ Several ` generate_* `  methods have been renamed, along with some ` calculate_* `  methods.
90+ The ` generate_* `  methods also no longer accept a list of unknowns and/or parameters. Refer
91+ to the documentation for more information.
92+ 
93+ ## New behavior of ` getproperty `  and ` setproperty! `   
94+ 
95+ Using ` getproperty `  to access fields of a system has been deprecated for a long time, and
96+ this functionality is now removed. ` setproperty! `  previously used to update the default
97+ of the accessed symbolic variable. This is not supported anymore. Defaults can be updated by
98+ mutating ` ModelingToolkit.get_defaults(sys) ` .
99+ 
100+ ## New behavior of ` @constants `   
101+ 
102+ ` @constants `  now creates parameters with the ` tunable = false `  metadata by default.
103+ 
104+ ## Removed ` FunctionalAffect `   
105+ 
106+ ` FunctionalAffect `  is now removed in favor of the new ` ImperativeAffect ` . Refer to the
107+ documentation for more information.
108+ 
109+ ## Improved system metadata  
110+ 
111+ Instead of an empty field that can contain arbitrary data, the ` System `  type stores metadata
112+ identically to ` SymbolicUtils.BasicSymbolic ` . Metadata is stored in an immutable dictionary
113+ keyed by a user-provided ` DataType `  and containing arbitrary values. ` System `  supports the
114+ same ` SymbolicUtils.getmetadata `  and ` SymbolicUtils.setmetadata `  API as symbolic variables.
115+ Refer to the documentation of ` System `  and the aforementioned functions for more information.
116+ 
117+ ## Moved ` connect `  and ` Connector `  to ModelingToolkit  
118+ 
119+ Previously ModelingToolkit used the ` connect `  function and ` Connector `  type defined in
120+ Symbolics.jl. These have now been moved to ModelingToolkit along with the experimental
121+ state machine API. If you imported them from Symbolics.jl, it is recommended to import from
122+ ModelingToolkit instead.
123+ 
124+ ## Always wrap with ` ParentScope `  in ` @named `   
125+ 
126+ When creating a system using ` @named ` , any symbolic quantities passed as keyword arguments
127+ to the subsystem are wrapped in ` ParentScope ` . Previously, this would only happen if the
128+ variable wasn't already wrapped in a ` ParentScope ` . However, the old behavior had issues
129+ when passing symbolic quantities down multiple levels of the hierarchy. The ` @named `  macro
130+ now always performs this wrapping.
131+ 
20132# ModelingToolkit v9 Release Notes  
21133
22134### Upgrade guide  
0 commit comments