Skip to content

Commit 8bcc454

Browse files
committed
Remove ModelingToolkit from dependencies
1 parent 1f0a5a3 commit 8bcc454

File tree

7 files changed

+219
-228
lines changed

7 files changed

+219
-228
lines changed

Project.toml

-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
99
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
1010
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
1111
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
12-
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
1312
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"
1413
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
1514

@@ -18,7 +17,6 @@ CUDA = "5"
1817
DocStringExtensions = "0.8 - 0.9"
1918
Graphs = "1"
2019
IfElse = "0.1.0 - 0.1.1"
21-
ModelingToolkit = "8"
2220
SymbolicUtils = "1"
2321
Symbolics = "5"
2422
julia = "1.6"

src/SourceCodeMcCormick.jl

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11

22
module SourceCodeMcCormick
33

4-
# using ModelingToolkit
5-
import ModelingToolkit: Equation, ODESystem, @named, toparam, iv_from_nested_derivative, value, collect_vars!
64
using Symbolics
75
using SymbolicUtils.Code
86
using IfElse
97
using DocStringExtensions
108
using Graphs
119
using CUDA
1210
import Dates
13-
14-
import SymbolicUtils: BasicSymbolic, exprtype, SYM, TERM, ADD, MUL, POW, DIV
15-
1611
import SymbolicUtils: BasicSymbolic, exprtype, SYM, TERM, ADD, MUL, POW, DIV
1712

1813
"""
@@ -29,10 +24,9 @@ abstract type AbstractTransform end
2924
"""
3025
transform_rule(::AbstractTransform, ::Equation)
3126
transform_rule(::AbstractTransform, ::Vector{Equation})
32-
transform_rule(::AbstractTransform, ::ModelingToolkit.ODESystem)
3327
transform_rule(::AbstractTransform, ::Num)
3428
35-
Apply the desired transformation to a given expression, equation, set of equations, or ODESystem.
29+
Apply the desired transformation to a given expression, equation, or set of equations.
3630
If the `AbstractTransform` is an `IntervalTransform`, all symbols are split into lower and upper
3731
bounds, and the number of expressions/equations is initially doubled. `SourceCodeMcCormick` uses
3832
the auxiliary variable method, so factorable expressions may be separated into multiple expressions

src/interval/interval.jl

+20-20
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,27 @@ function var_names(::IntervalTransform, a::BasicSymbolic)
3030
end
3131
end
3232

33-
function translate_initial_conditions(::IntervalTransform, prob::ODESystem, new_eqs::Vector{Equation})
34-
vars, params = extract_terms(new_eqs)
35-
var_defaults = Dict{Any, Any}()
36-
param_defaults = Dict{Any, Any}()
33+
# function translate_initial_conditions(::IntervalTransform, prob::ODESystem, new_eqs::Vector{Equation})
34+
# vars, params = extract_terms(new_eqs)
35+
# var_defaults = Dict{Any, Any}()
36+
# param_defaults = Dict{Any, Any}()
3737

38-
for (key, val) in prob.defaults
39-
name_lo = String(get_name(key))*"_"*"lo"
40-
name_hi = String(get_name(key))*"_"*"hi"
41-
for i in vars
42-
if in(String(i.f.name), (name_lo, name_hi))
43-
var_defaults[i] = val
44-
end
45-
end
46-
for i in params
47-
if in(String(i.name), (name_lo, name_hi))
48-
param_defaults[i] = val
49-
end
50-
end
51-
end
52-
return var_defaults, param_defaults
53-
end
38+
# for (key, val) in prob.defaults
39+
# name_lo = String(get_name(key))*"_"*"lo"
40+
# name_hi = String(get_name(key))*"_"*"hi"
41+
# for i in vars
42+
# if in(String(i.f.name), (name_lo, name_hi))
43+
# var_defaults[i] = val
44+
# end
45+
# end
46+
# for i in params
47+
# if in(String(i.name), (name_lo, name_hi))
48+
# param_defaults[i] = val
49+
# end
50+
# end
51+
# end
52+
# return var_defaults, param_defaults
53+
# end
5454

5555

5656
"""

src/relaxation/relaxation.jl

+42-42
Original file line numberDiff line numberDiff line change
@@ -34,51 +34,51 @@ function var_names(::McCormickIntervalTransform, a::Any)
3434
end
3535

3636

37-
function translate_initial_conditions(::McCormickTransform, prob::ODESystem, new_eqs::Vector{Equation})
38-
vars, params = extract_terms(new_eqs)
39-
var_defaults = Dict{Any, Any}()
40-
param_defaults = Dict{Any, Any}()
37+
# function translate_initial_conditions(::McCormickTransform, prob::ODESystem, new_eqs::Vector{Equation})
38+
# vars, params = extract_terms(new_eqs)
39+
# var_defaults = Dict{Any, Any}()
40+
# param_defaults = Dict{Any, Any}()
4141

42-
for (key, val) in prob.defaults
43-
name_cv = String(get_name(key))*"_"*"cv"
44-
name_cc = String(get_name(key))*"_"*"cc"
45-
for i in vars
46-
if String(i.f.name)==name_cv || String(i.f.name)==name_cc
47-
var_defaults[i] = val
48-
end
49-
end
50-
for i in params
51-
if String(i.name)==name_cv || String(i.name)==name_cc
52-
param_defaults[i] = val
53-
end
54-
end
55-
end
56-
return var_defaults, param_defaults
57-
end
42+
# for (key, val) in prob.defaults
43+
# name_cv = String(get_name(key))*"_"*"cv"
44+
# name_cc = String(get_name(key))*"_"*"cc"
45+
# for i in vars
46+
# if String(i.f.name)==name_cv || String(i.f.name)==name_cc
47+
# var_defaults[i] = val
48+
# end
49+
# end
50+
# for i in params
51+
# if String(i.name)==name_cv || String(i.name)==name_cc
52+
# param_defaults[i] = val
53+
# end
54+
# end
55+
# end
56+
# return var_defaults, param_defaults
57+
# end
5858

59-
function translate_initial_conditions(::McCormickIntervalTransform, prob::ODESystem, new_eqs::Vector{Equation})
60-
vars, params = extract_terms(new_eqs)
61-
var_defaults = Dict{Any, Any}()
62-
param_defaults = Dict{Any, Any}()
59+
# function translate_initial_conditions(::McCormickIntervalTransform, prob::ODESystem, new_eqs::Vector{Equation})
60+
# vars, params = extract_terms(new_eqs)
61+
# var_defaults = Dict{Any, Any}()
62+
# param_defaults = Dict{Any, Any}()
6363

64-
for (key, val) in prob.defaults
65-
name_lo = String(get_name(key))*"_"*"lo"
66-
name_hi = String(get_name(key))*"_"*"hi"
67-
name_cv = String(get_name(key))*"_"*"cv"
68-
name_cc = String(get_name(key))*"_"*"cc"
69-
for i in vars
70-
if in(String(i.f.name), (name_lo, name_hi, name_cv, name_cc))
71-
var_defaults[i] = val
72-
end
73-
end
74-
for i in params
75-
if in(String(i.name), (name_lo, name_hi, name_cv, name_cc))
76-
param_defaults[i] = val
77-
end
78-
end
79-
end
80-
return var_defaults, param_defaults
81-
end
64+
# for (key, val) in prob.defaults
65+
# name_lo = String(get_name(key))*"_"*"lo"
66+
# name_hi = String(get_name(key))*"_"*"hi"
67+
# name_cv = String(get_name(key))*"_"*"cv"
68+
# name_cc = String(get_name(key))*"_"*"cc"
69+
# for i in vars
70+
# if in(String(i.f.name), (name_lo, name_hi, name_cv, name_cc))
71+
# var_defaults[i] = val
72+
# end
73+
# end
74+
# for i in params
75+
# if in(String(i.name), (name_lo, name_hi, name_cv, name_cc))
76+
# param_defaults[i] = val
77+
# end
78+
# end
79+
# end
80+
# return var_defaults, param_defaults
81+
# end
8282

8383
# A symbolic way of evaluating the line segment between (xL, zL) and (xU, zU) at x (returns IfElse block)
8484
line_expr(x, xL, xU, zL, zU) = IfElse.ifelse(zU > zL, (zL*(xU - x) + zU*(x - xL))/(xU - xL), zU)

src/relaxation/rules.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ function transform_rule(::McCormickTransform, ::typeof(*), zL, zU, zcv, zcc, xL,
132132
# # This returns mult_kernel(-x,-y). Swap x with flipped x and y with flipped
133133
# # y, and since both are flipped, no need to worry about negative signs
134134
# cv = max(yL*xcc + xL*ycc - xL*yL, yU*xcc + xU*ycc - xU*yU)
135-
# cc = min(yU*xcv + xL*ycv - xL*yU, yL*xcv + xL*ycv - xU*yL)
135+
# cc = min(yU*xcv + xL*ycv - xL*yU, yL*xcv + xU*ycv - xU*yL)
136136

137137

138138
# # [x-,ym]

src/transform/transform.jl

+52-52
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,58 @@ include(joinpath(@__DIR__, "binarize.jl"))
33
include(joinpath(@__DIR__, "factor.jl"))
44

55

6-
function apply_transform(transform::T, prob::ODESystem; constants::Vector{Num}=Num[]) where T<:AbstractTransform
7-
8-
# Factorize all model equations to generate a new set of equations
9-
10-
genparam(get_name(prob.iv.val))
11-
12-
equations = Equation[]
13-
for eqn in prob.eqs
14-
current = length(equations)
15-
factor(eqn.rhs, eqs=equations)
16-
if length(equations) > current
17-
push!(equations, Equation(eqn.lhs, equations[end].rhs))
18-
deleteat!(equations, length(equations)-1)
19-
else
20-
index = findall(x -> isequal(x.rhs, eqn.rhs), equations)
21-
push!(equations, Equation(eqn.lhs, equations[index[1]].lhs))
22-
end
23-
end
24-
25-
# Apply transform rules to the factored equations to make the final equation set
26-
new_equations = Equation[]
27-
for a in equations
28-
zn = var_names(transform, zstr(a))
29-
if string(xstr(a)) in string.(constants)
30-
xn = (xstr(a), xstr(a), xstr(a), xstr(a))
31-
else
32-
xn = var_names(transform, xstr(a))
33-
end
34-
if isone(arity(a))
35-
targs = (transform, op(a), zn..., xn...)
36-
else
37-
if string(ystr(a)) in string.(constants)
38-
yn = (ystr(a), ystr(a), ystr(a), ystr(a))
39-
else
40-
yn = var_names(transform, ystr(a))
41-
end
42-
targs = (transform, op(a), zn..., xn..., yn...)
43-
end
44-
new = transform_rule(targs...)
45-
for i in new
46-
push!(new_equations, i)
47-
end
48-
end
49-
50-
# Copy model start points to the newly transformed variables
51-
var_defaults, param_defaults = translate_initial_conditions(transform, prob, new_equations)
52-
53-
# Use the transformed equations and new start points to generate a new ODE system
54-
@named new_sys = ODESystem(new_equations, defaults=merge(var_defaults, param_defaults))
55-
56-
return new_sys
57-
end
6+
# function apply_transform(transform::T, prob::ODESystem; constants::Vector{Num}=Num[]) where T<:AbstractTransform
7+
8+
# # Factorize all model equations to generate a new set of equations
9+
10+
# genparam(get_name(prob.iv.val))
11+
12+
# equations = Equation[]
13+
# for eqn in prob.eqs
14+
# current = length(equations)
15+
# factor(eqn.rhs, eqs=equations)
16+
# if length(equations) > current
17+
# push!(equations, Equation(eqn.lhs, equations[end].rhs))
18+
# deleteat!(equations, length(equations)-1)
19+
# else
20+
# index = findall(x -> isequal(x.rhs, eqn.rhs), equations)
21+
# push!(equations, Equation(eqn.lhs, equations[index[1]].lhs))
22+
# end
23+
# end
24+
25+
# # Apply transform rules to the factored equations to make the final equation set
26+
# new_equations = Equation[]
27+
# for a in equations
28+
# zn = var_names(transform, zstr(a))
29+
# if string(xstr(a)) in string.(constants)
30+
# xn = (xstr(a), xstr(a), xstr(a), xstr(a))
31+
# else
32+
# xn = var_names(transform, xstr(a))
33+
# end
34+
# if isone(arity(a))
35+
# targs = (transform, op(a), zn..., xn...)
36+
# else
37+
# if string(ystr(a)) in string.(constants)
38+
# yn = (ystr(a), ystr(a), ystr(a), ystr(a))
39+
# else
40+
# yn = var_names(transform, ystr(a))
41+
# end
42+
# targs = (transform, op(a), zn..., xn..., yn...)
43+
# end
44+
# new = transform_rule(targs...)
45+
# for i in new
46+
# push!(new_equations, i)
47+
# end
48+
# end
49+
50+
# # Copy model start points to the newly transformed variables
51+
# var_defaults, param_defaults = translate_initial_conditions(transform, prob, new_equations)
52+
53+
# # Use the transformed equations and new start points to generate a new ODE system
54+
# @named new_sys = ODESystem(new_equations, defaults=merge(var_defaults, param_defaults))
55+
56+
# return new_sys
57+
# end
5858

5959
function apply_transform(transform::T, eqn_vector::Vector{Equation}; constants::Vector{Num}=Num[]) where T<:AbstractTransform
6060

0 commit comments

Comments
 (0)