@@ -10,6 +10,19 @@ function check_dependencies(ex, deps::Array{Bool}, i::Int, x::Symbol)
1010 end
1111end
1212
13+ function number_parameters (ex, n:: Int , p:: Symbol )
14+ if ex isa Expr
15+ if ex. head == :ref && ex. args[1 ] == p
16+ n = max (n, ex. args[2 ])
17+ else
18+ for arg in ex. args
19+ n = max (n, number_parameters (arg, n, p))
20+ end
21+ end
22+ end
23+ n
24+ end
25+
1326macro model (expr:: Expr )
1427 expr. head != :function && error (" Expression is not a function definition!" )
1528 args = getArguments (expr)
@@ -25,36 +38,53 @@ macro model(expr::Expr)
2538 for ex in expr. args[2 ]. args
2639 if ex isa Expr
2740 if ex. head == Symbol (" =" )
28- if ex. args[1 ] isa Expr && ex. args[1 ]. head == :ref && ex. args[1 ]. args[1 ] == dx
41+ if ex. args[1 ] isa Expr && ex. args[1 ]. head == :ref && ex. args[1 ]. args[1 ] == expr . args[ 1 ] . args[ 5 ]
2942 push! (f_vec, ex)
43+ p = max (p, number_parameters (ex. args[2 ], p, expr. args[1 ]. args[4 ]))
3044 elseif ex. args[1 ] isa Symbol
3145 ex. args[2 ] isa Expr ? push! (a_vec, ex) : push! (c_vec, ex)
3246 end
3347 elseif ex isa Expr && ex. head == :if && ex. args[1 ]. head == :call && ex. args[1 ]. args[1 ] == :<
3448 push! (zc_vec, ex. args[1 ]. args[2 ])
3549 push! (neg_vec, ex. args[2 ])
36- length (ex . args) == 3 ? push! (pos_vec, ex. args[3 ]) : Expr ( )
50+ push! (pos_vec, ex. args[3 ])
3751 end
3852 end
3953 end
4054 println (zc_vec)
4155 println (neg_vec)
4256 println (pos_vec)
4357 n = length (f_vec)
58+ m = length (zc_vec)
4459 deps = zeros (Bool, n, n)
4560 param_deps = zeros (Bool, n, p)
46- zc_deps = zeros (Bool, p, n)
47- for ex in expr. args[2 ]. args
48- ex isa Expr && ex. head == Symbol (" =" ) && ex. args[1 ] isa Expr && ex. args[1 ]. head == :ref && ex. args[1 ]. args[1 ] == dx && check_dependencies (ex. args[2 ], deps, ex. args[1 ]. args[2 ], expr. args[1 ]. args[3 ])
61+ zc_deps = zeros (Bool, m, n)
62+ rev_zc_deps = zeros (Bool, n, m)
63+ for ex in f_vec
64+ check_dependencies (ex. args[2 ], deps, ex. args[1 ]. args[2 ], expr. args[1 ]. args[3 ])
65+ check_dependencies (ex. args[2 ], param_deps, ex. args[1 ]. args[2 ], expr. args[1 ]. args[4 ])
66+ end
67+ for (i, ex) in enumerate (zc_vec)
68+ check_dependencies (ex, zc_deps, i, expr. args[1 ]. args[3 ])
4969 end
70+ println (deps)
71+ println (param_deps)
72+ println (zc_deps)
5073 esc (:(function $func_name ()
5174 f = Array {Function} ($ n)
5275 $ ((:(f[$ (f_vec[i]. args[1 ]. args[2 ])] = ($ (expr. args[1 ]. args[2 ]):: TaylorSeries.Taylor1 , $ (expr. args[1 ]. args[3 ]):: Vector{TaylorSeries.Taylor1} , $ (expr. args[1 ]. args[4 ]):: Vector{Float64} )-> begin
5376 $ ((:($ (c)) for c in :($ c_vec)). .. )
5477 $ ((:($ (a)) for a in :($ a_vec)). .. )
5578 $ (f_vec[i]. args[2 ])
5679 end ) for i in 1 : length (:($ f_vec))). .. )
57- Model (f, $ deps)
80+ zc = Vector {Function} ()
81+ $ ((:(push! (zc, ($ (expr. args[1 ]. args[2 ]):: TaylorSeries.Taylor1 , $ (expr. args[1 ]. args[3 ]):: Vector{TaylorSeries.Taylor1} , $ (expr. args[1 ]. args[4 ]):: Vector{Float64} )-> begin
82+ $ ((:($ (c)) for c in :($ c_vec)). .. )
83+ $ ((:($ (a)) for a in :($ a_vec)). .. )
84+ $ (f_vec[i]. args[2 ])
85+ end )) for i in 1 : length (:($ zc_vec))). .. )
86+ min_handler = Vector {Function} ()
87+ Model (f, zc, $ deps, $ param_deps)
5888 end ))
5989end
6090
0 commit comments