@@ -31,7 +31,8 @@ function flatten_expr!(x)
31
31
x
32
32
end
33
33
34
- function build_function (rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true }; constructor= nothing )
34
+ function build_function (rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true };
35
+ checkbounds = false , constructor= nothing )
35
36
_vs = map (x-> x isa Operation ? x. op : x, vs)
36
37
_ps = map (x-> x isa Operation ? x. op : x, ps)
37
38
var_pairs = [(u. name, :(u[$ i])) for (i, u) ∈ enumerate (_vs)]
@@ -48,12 +49,16 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
48
49
49
50
sys_expr = build_expr (:tuple , [conv (rhs) for rhs ∈ rhss])
50
51
let_expr = Expr (:let , var_eqs, sys_expr)
51
-
52
+ bounds_block = checkbounds ? let_expr : :(@inbounds begin $ let_expr end )
53
+ ip_bounds_block = checkbounds ? ip_let_expr : :(@inbounds begin $ ip_let_expr end )
54
+
52
55
fargs = ps == () ? :(u,$ (args... )) : :(u,p,$ (args... ))
53
56
54
57
oop_ex = :(
55
58
($ (fargs. args... ),) -> begin
56
- X = $ let_expr
59
+ @inbounds begin
60
+ X = $ bounds_block
61
+ end
57
62
T = promote_type (map (typeof,X)... )
58
63
convert .(T,X)
59
64
construct = $ (constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. similar_type (typeof (u), eltype (X)) : x-> (du= similar (u, T, $ (size (rhss)... )); vec (du) .= x; du)) : constructor)
@@ -63,7 +68,9 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
63
68
64
69
iip_ex = :(
65
70
($ X,$ (fargs. args... )) -> begin
66
- $ ip_let_expr
71
+ @inbounds begin
72
+ $ ip_bounds_block
73
+ end
67
74
nothing
68
75
end
69
76
)
0 commit comments