@@ -115,45 +115,30 @@ Base.:(==)(x::IntervalBox, y::IntervalBox) = x.v == y.v
115
115
116
116
117
117
"""
118
- mince(x::IntervalBox, n)
118
+ mince(x::IntervalBox, n::Int )
119
119
120
120
Splits `x` in `n` intervals in each dimension of the same diameter. These
121
121
intervals are combined in all possible `IntervalBox`-es, which are returned
122
122
as a vector.
123
123
"""
124
- @generated function mince (x:: IntervalBox{N,T} , n) where {N,T}
125
- quote
126
- nodes_matrix = Array {Interval{T},2} (undef, n, N)
127
- for i in 1 : N
128
- nodes_matrix[1 : n,i] .= mince (x[i], n)
129
- end
130
-
131
- nodes = IntervalBox{$ N,T}[]
132
- Base. Cartesian. @nloops $ N i _-> (1 : n) begin
133
- Base. Cartesian. @nextract $ N ival d-> nodes_matrix[i_d, d]
134
- ibox = Base. Cartesian. @ncall $ N IntervalBox ival
135
- push! (nodes, ibox)
136
- end
137
- nodes
138
- end
139
- end
124
+ @inline mince (x:: IntervalBox{N,T} , n:: Int ) where {N,T} =
125
+ mince (x, ntuple (_ -> n, N))
126
+
127
+ """
128
+ mince(x::IntervalBox, ncuts::::NTuple{N,Int})
129
+
130
+ Splits `x[i]` in `ncuts[i]` intervals . These intervals are
131
+ combined in all possible `IntervalBox`-es, which are returned
132
+ as a vector.
133
+ """
134
+ @inline function mince (x:: IntervalBox{N,T} , ncuts:: NTuple{N,Int} ) where {N,T}
135
+ minced_intervals = [mince (x[i], ncuts[i]) for i in 1 : N]
136
+ minced_boxes = Vector {IntervalBox{N,T}} (undef, prod (ncuts))
140
137
141
- @generated function mince (x:: IntervalBox{N,T} , tup:: NTuple{N,Int} ) where {N,T}
142
- quote
143
- n = maximum (tup)
144
- nodes_matrix = fill (emptyinterval (T), n, N)
145
- for i in 1 : N
146
- nodes_matrix[1 : tup[i],i] .= mince (x[i], tup[i])
147
- end
148
-
149
- nodes = IntervalBox{$ N,T}[]
150
- Base. Cartesian. @nloops $ N i _-> (1 : n) begin
151
- Base. Cartesian. @nextract $ N ival d-> nodes_matrix[i_d, d]
152
- ibox = Base. Cartesian. @ncall $ N IntervalBox ival
153
- isempty (ibox) || push! (nodes, ibox)
154
- end
155
- nodes
138
+ for (k, cut_indices) in enumerate (CartesianIndices (ncuts))
139
+ minced_boxes[k] = IntervalBox ([minced_intervals[i][cut_indices[i]] for i in 1 : N])
156
140
end
141
+ return minced_boxes
157
142
end
158
143
159
144
0 commit comments