Skip to content

Commit 1c1cedd

Browse files
author
Lucas Morton
committed
Added validation to OptimizationSystem.
1 parent df7c3fe commit 1c1cedd

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

docs/src/basics/Validation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ eqs = eqs = [D(E) ~ P - E/τ,
6363
ModelingToolkit.validate(eqs) #Returns false while displaying a warning message
6464
```
6565

66-
## `Unitful` Literals & User-defined functions
66+
## `Unitful` Literals & User-Defined Functions
6767

6868
In order for a function to work correctly during both validation & execution, the function must be unit-agnostic. That is, no unitful literals may be used. Any unitful quantity must either be a `parameter` or `variable`. For example, these equations will not validate successfully.
6969

src/systems/optimization/optimizationsystem.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ struct OptimizationSystem <: AbstractTimeIndependentSystem
4242
"""
4343
defaults::Dict
4444
function OptimizationSystem(op, states, ps, var_to_name, observed, equality_constraints, inequality_constraints, name, systems, defaults; checks::Bool = true)
45+
if checks
46+
check_units(op)
47+
check_units(observed)
48+
check_units(equality_constraints)
49+
check_units(inequality_constraints)
50+
end
4551
new(op, states, ps, var_to_name, observed, equality_constraints, inequality_constraints, name, systems, defaults)
4652
end
4753
end

src/systems/validation.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ validate(eqs::Vector; info::String = "") = all([validate(eqs[idx], info = info*"
132132
validate(eqs::Vector, noise::Vector; info::String = "") = all([validate(eqs[idx], noise[idx], info = info*" in eq. #$idx") for idx in 1:length(eqs)])
133133
validate(eqs::Vector, noise::Matrix; info::String = "") = all([validate(eqs[idx], noise[idx, :], info = info*" in eq. #$idx") for idx in 1:length(eqs)])
134134
validate(eqs::Vector, term::Symbolic; info::String = "") = all([validate(eqs[idx], term, info = info*" in eq. #$idx") for idx in 1:length(eqs)])
135+
validate(term::Symbolics.SymbolicUtils.Symbolic) = safe_get_unit(term,"") !== nothing
135136

136137
"Throws error if units of equations are invalid."
137138
check_units(eqs...) = validate(eqs...) || throw(ValidationError("Some equations had invalid units. See warnings for details."))

0 commit comments

Comments
 (0)