@@ -231,124 +231,82 @@ function ode_def_opts(name::Symbol,opts::Dict{Symbol,Bool},ex::Expr,params...;_M
231231 end
232232 end
233233
234- # Build the type
235- exprs = Vector {Expr} (undef, 0 )
236-
237- typeex,constructorex = maketype (name,params,origex,funcs,syms,fex,pex= pex,
238- vector_ex = vector_ex,vector_ex_return = vector_ex_return,
239- tgradex= tgradex,expJex= expJex,Jex= Jex,
240- invWex= invWex,invWex_t= invWex_t,
241- invJex= invJex,Hex= Hex,
242- invHex= invHex,params= params,
243- pfuncs= pfuncs,d_pfuncs= d_pfuncs,
244- param_Jex= param_Jex)
245-
246- push! (exprs,typeex)
247- push! (exprs,constructorex)
248-
249-
250-
251- #=
252- # Value Dispatches for the Parameters
253- for i in 1:length(params)
254- param = Symbol(params[i])
255- param_func = pfuncs[i]
256- param_valtype = Val{param}
257- overloadex = :(((f::$name))(::Type{$param_valtype},t,internal_var___u,$param,internal_var___du) = $param_func) |> esc
258- push!(exprs,overloadex)
259- end
260- =#
261-
262234 # Build the Function
263- overloadex = :(((f:: $name ))(internal_var___du,internal_var___u,internal_var___p,t:: Number ) = $ pex) |> esc
264- push! (exprs,overloadex)
235+ f_expr = :((internal_var___du,internal_var___u,internal_var___p,t:: Number ) -> $ pex)
265236
237+ #=
266238 # Add a method which allocates the `du` and returns it instead of being inplace
267239 overloadex = :(((f::$name))(u,p,t::Number) = (du=similar(u); f(du,u,p,t); du)) |> esc
268240 push!(exprs,overloadex)
269-
270- #=
271- # Build the Vectorized functions
272- overloadex = :(((internal_var___p::$name))(::Type{Val{:vec}},t::Number,internal_var___u,internal_var___du) = $vector_ex) |> esc
273- push!(exprs,overloadex)
274-
275- # Build the Vectorized functions
276- overloadex = :(((internal_var___p::$name))(::Type{Val{:vec}},t::Number,internal_var___u) = $vector_ex_return) |> esc
277- push!(exprs,overloadex)
278-
279- overloadex = :(((internal_var___p::$name))(::Type{Val{:vec}},t::Number,u) = (du=similar(u); p(t,internal_var___u,du); du)) |> esc
280- push!(exprs,overloadex)
281- =#
282-
283- # Value Dispatches for the Parameter Derivatives
284- #=
285- if pderiv_exists
286- for i in 1:length(params)
287- param = Symbol(params[i])
288- param_func = d_pfuncs[i]
289- param_valtype = Val{param}
290- overloadex = :(((internal_var___p::$name))(::Type{Val{:deriv}},::Type{$param_valtype},t,internal_var___u,$param,internal_var___du) = $param_func) |> esc
291- push!(exprs,overloadex)
292- end
293- end
294241 =#
295242
296243 # Add the t gradient
297244 if tgrad_exists
298- overloadex = :(((f:: $name ))(:: Type{Val{:tgrad}} ,internal_var___grad,internal_var___u,internal_var___p,t) = $ tgradex) |> esc
299- push! (exprs,overloadex)
245+ tgrad_expr = :((internal_var___grad,internal_var___u,internal_var___p,t) -> $ tgradex)
246+ else
247+ tgrad_expr = :(nothing )
300248 end
301249
302250 # Add the Jacobian
303251 if jac_exists
304- overloadex = :(((f:: $name ))(:: Type{Val{:jac}} ,internal_var___J,internal_var___u,internal_var___p,t) = $ Jex) |> esc
305- push! (exprs,overloadex)
306- overloadex = :(((f:: $name ))(:: Type{Val{:jac}} ,u,p,t:: Number ) = (J= similar (u, (length (u), length (u))); f (Val{:jac },J,u,p,t); J)) |> esc
307- push! (exprs,overloadex)
308- end
309-
310- #=
311- # Add the Exponential Jacobian
312- if expjac_exists
313- overloadex = :(((internal_var___p::$name))(::Type{Val{:expjac}},t,internal_var___u,internal_γ,internal_var___J) = $expJex) |> esc
314- push!(exprs,overloadex)
252+ jac_expr = :((internal_var___J,internal_var___u,internal_var___p,t) -> $ Jex)
253+ else
254+ jac_expr = :(nothing )
315255 end
316- =#
317256
318257 # Add the Inverse Jacobian
319258 if invjac_exists
320- overloadex = :(((f:: $name ))(:: Type{Val{:invjac}} ,internal_var___J,internal_var___u,internal_var___p,t) = $ invJex) |> esc
321- push! (exprs,overloadex)
259+ invjac_expr = :((internal_var___J,internal_var___u,internal_var___p,t) -> $ invJex)
260+ else
261+ invjac_expr = :(nothing )
322262 end
263+
323264 # Add the Inverse Rosenbrock-W
324265 if invW_exists
325- overloadex = :(((f:: $name ))(:: Type{Val{:invW}} ,internal_var___J,internal_var___u,internal_var___p,internal_γ,t) = $ invWex) |> esc
326- push! (exprs,overloadex)
266+ invW_expr = :((internal_var___J,internal_var___u,internal_var___p,internal_γ,t) -> $ invWex)
267+ else
268+ invW_expr = :(nothing )
327269 end
270+
328271 # Add the Inverse Rosenbrock-W Transformed
329272 if invW_exists
330- overloadex = :(((f:: $name ))(:: Type{Val{:invW_t}} ,internal_var___J,internal_var___u,internal_var___p,internal_γ,t) = $ invWex_t) |> esc
331- push! (exprs,overloadex)
332- end
333- #=
334- # Add the Hessian
335- if hes_exists
336- overloadex = :(((internal_var___p::$name))(::Type{Val{:hes}},t,internal_var___u,internal_var___J) = $Hex) |> esc
337- push!(exprs,overloadex)
338- end
339- # Add the Inverse Hessian
340- if invhes_exists
341- overloadex = :(((internal_var___p::$name))(::Type{Val{:invhes}},t,internal_var___u,internal_var___J) = $invHex) |> esc
342- push!(exprs,overloadex)
273+ invW_t_expr = :((internal_var___J,internal_var___u,internal_var___p,internal_γ,t) -> $ invWex_t)
274+ else
275+ invW_t_expr = :(nothing )
343276 end
344- =#
345277
346278 # Add Parameter Jacobian
347279 if param_jac_exists
348- overloadex = :(((f:: $name ))(:: Type{Val{:paramjac}} ,internal_var___J,internal_var___u,internal_var___p,t) = $ param_Jex) |> esc
349- push! (exprs,overloadex)
280+ param_jac_expr = :((internal_var___J,internal_var___u,internal_var___p,t) -> $ param_Jex)
281+ else
282+ param_jac_expr = :(nothing )
350283 end
351284
285+ # Build the type
286+ exprs = Vector {Expr} (undef, 0 )
287+
288+ typeex,constructorex,callex,callex2 = maketype (name,params,origex,
289+ funcs,syms,fex,
290+ pex= pex,
291+ vector_ex = vector_ex,vector_ex_return = vector_ex_return,
292+ tgradex= tgradex,expJex= expJex,Jex= Jex,
293+ invWex= invWex,invWex_t= invWex_t,
294+ invJex= invJex,Hex= Hex,
295+ invHex= invHex,params= params,
296+ pfuncs= pfuncs,d_pfuncs= d_pfuncs,
297+ param_Jex= param_Jex,
298+ f_expr= f_expr,tgrad_expr= tgrad_expr,
299+ jac_expr= jac_expr,
300+ invjac_expr= invjac_expr,
301+ invW_expr= invW_expr,
302+ invW_t_expr= invW_t_expr,
303+ param_jac_expr= param_jac_expr)
304+
305+ push! (exprs,typeex)
306+ push! (exprs,constructorex)
307+ push! (exprs,callex)
308+ push! (exprs,callex2)
309+
352310 # Return the type from the default consturctor
353311 def_const_ex = :(($ name)()) |> esc
354312 push! (exprs,def_const_ex)
0 commit comments