@@ -20,75 +20,63 @@ type MArray{Size, T, N, L} <: StaticArray{T, N}
20
20
data:: NTuple{L,T}
21
21
22
22
function (:: Type{MArray{Size,T,N,L}} ){Size,T,N,L}(x:: NTuple{L,T} )
23
- check_marray_parameters (Val{ Size} , T, Val{N}, Val{L})
23
+ check_array_parameters ( Size, T, Val{N}, Val{L})
24
24
new {Size,T,N,L} (x)
25
25
end
26
26
27
27
function (:: Type{MArray{Size,T,N,L}} ){Size,T,N,L}(x:: NTuple{L,Any} )
28
- check_marray_parameters (Val{ Size} , T, Val{N}, Val{L})
28
+ check_array_parameters ( Size, T, Val{N}, Val{L})
29
29
new {Size,T,N,L} (convert_ntuple (T, x))
30
30
end
31
31
32
32
function (:: Type{MArray{Size,T,N,L}} ){Size,T,N,L}()
33
- check_marray_parameters (Val{ Size} , T, Val{N}, Val{L})
33
+ check_array_parameters ( Size, T, Val{N}, Val{L})
34
34
new {Size,T,N,L} ()
35
35
end
36
36
end
37
37
38
- @generated function check_marray_parameters {Size,T,N,L} (:: Type{Val{Size}} , :: Type{T} , :: Type{Val{N}} , :: Type{Val{L}} )
39
- if ! (isa (Size, Tuple{Vararg{Int}}))
40
- error (" MArray parameter Size must be a tuple of Ints (e.g. `MArray{(3,3)}`)" )
41
- end
42
-
43
- if L != prod (Size) || L < 0 || minimum (Size) < 0 || length (Size) != N
44
- error (" Size mismatch in MArray parameters. Got size $Size , dimension $N and length $L ." )
45
- end
46
-
47
- return nothing
48
- end
49
-
50
38
@generated function (:: Type{MArray{Size,T,N}} ){Size,T,N}(x:: Tuple )
51
39
return quote
52
40
$ (Expr (:meta , :inline ))
53
- MArray {Size,T,N,$(prod (Size))} (x)
41
+ MArray {Size,T,N,$(tuple_prod (Size))} (x)
54
42
end
55
43
end
56
44
57
45
@generated function (:: Type{MArray{Size,T}} ){Size,T}(x:: Tuple )
58
46
return quote
59
47
$ (Expr (:meta , :inline ))
60
- MArray {Size,T,$(length (Size)),$(prod (Size))} (x)
48
+ MArray {Size,T,$(tuple_length (Size)),$(tuple_prod (Size))} (x)
61
49
end
62
50
end
63
51
64
52
@generated function (:: Type{MArray{Size}} ){Size, T <: Tuple }(x:: T )
65
53
return quote
66
54
$ (Expr (:meta , :inline ))
67
- MArray {Size,$(promote_tuple_eltype(T)),$(length (Size)),$(prod (Size))} (x)
55
+ MArray {Size,$(promote_tuple_eltype(T)),$(tuple_length (Size)),$(tuple_prod (Size))} (x)
68
56
end
69
57
end
70
58
71
59
@generated function (:: Type{MArray{Size,T,N}} ){Size,T,N}()
72
60
return quote
73
61
$ (Expr (:meta , :inline ))
74
- MArray {Size, T, N, $(prod (Size))} ()
62
+ MArray {Size, T, N, $(tuple_prod (Size))} ()
75
63
end
76
64
end
77
65
78
66
@generated function (:: Type{MArray{Size,T}} ){Size,T}()
79
67
return quote
80
68
$ (Expr (:meta , :inline ))
81
- MArray {Size, T, $(length (Size)), $(prod (Size))} ()
69
+ MArray {Size, T, $(tuple_length (Size)), $(tuple_prod (Size))} ()
82
70
end
83
71
end
84
72
85
- @inline MArray (a:: StaticArray ) = MArray {size (typeof(a))} (Tuple (a))
73
+ @inline MArray (a:: StaticArray ) = MArray {size_tuple (typeof(a))} (Tuple (a))
86
74
87
75
# Some more advanced constructor-like functions
88
- @inline one (:: Type{MArray{S}} ) where {S} = one (MArray{S,Float64,length (S)})
89
- @inline eye (:: Type{MArray{S}} ) where {S} = eye (MArray{S,Float64,length (S)})
90
- @inline one (:: Type{MArray{S,T}} ) where {S,T} = one (MArray{S,T,length (S)})
91
- @inline eye (:: Type{MArray{S,T}} ) where {S,T} = eye (MArray{S,T,length (S)})
76
+ @inline one (:: Type{MArray{S}} ) where {S} = one (MArray{S,Float64,tuple_length (S)})
77
+ @inline eye (:: Type{MArray{S}} ) where {S} = eye (MArray{S,Float64,tuple_length (S)})
78
+ @inline one (:: Type{MArray{S,T}} ) where {S,T} = one (MArray{S,T,tuple_length (S)})
79
+ @inline eye (:: Type{MArray{S,T}} ) where {S,T} = eye (MArray{S,T,tuple_length (S)})
92
80
93
81
# ###################
94
82
# # MArray methods ##
@@ -133,17 +121,17 @@ macro MArray(ex)
133
121
end
134
122
135
123
if ex. head == :vect # vector
136
- return esc (Expr (:call , MArray{( length (ex. args),) }, Expr (:tuple , ex. args... )))
124
+ return esc (Expr (:call , MArray{Tuple{ length (ex. args)} }, Expr (:tuple , ex. args... )))
137
125
elseif ex. head == :ref # typed, vector
138
- return esc (Expr (:call , Expr (:curly , :MArray , (( length (ex. args)- 1 ),) , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
126
+ return esc (Expr (:call , Expr (:curly , :MArray , Tuple{ length (ex. args)- 1 } , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
139
127
elseif ex. head == :hcat # 1 x n
140
128
s1 = 1
141
129
s2 = length (ex. args)
142
- return esc (Expr (:call , MArray{( s1, s2) }, Expr (:tuple , ex. args... )))
130
+ return esc (Expr (:call , MArray{Tuple{ s1, s2} }, Expr (:tuple , ex. args... )))
143
131
elseif ex. head == :typed_hcat # typed, 1 x n
144
132
s1 = 1
145
133
s2 = length (ex. args) - 1
146
- return esc (Expr (:call , Expr (:curly , :MArray , ( s1, s2) , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
134
+ return esc (Expr (:call , Expr (:curly , :MArray , Tuple{ s1, s2} , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
147
135
elseif ex. head == :vcat
148
136
if isa (ex. args[1 ], Expr) && ex. args[1 ]. head == :row # n x m
149
137
# Validate
@@ -155,9 +143,9 @@ macro MArray(ex)
155
143
end
156
144
157
145
exprs = [ex. args[i]. args[j] for i = 1 : s1, j = 1 : s2]
158
- return esc (Expr (:call , MArray{( s1, s2) }, Expr (:tuple , exprs... )))
146
+ return esc (Expr (:call , MArray{Tuple{ s1, s2} }, Expr (:tuple , exprs... )))
159
147
else # n x 1
160
- return esc (Expr (:call , MArray{( length (ex. args), 1 ) }, Expr (:tuple , ex. args... )))
148
+ return esc (Expr (:call , MArray{Tuple{ length (ex. args), 1 } }, Expr (:tuple , ex. args... )))
161
149
end
162
150
elseif ex. head == :typed_vcat
163
151
if isa (ex. args[2 ], Expr) && ex. args[2 ]. head == :row # typed, n x m
@@ -170,9 +158,9 @@ macro MArray(ex)
170
158
end
171
159
172
160
exprs = [ex. args[i+ 1 ]. args[j] for i = 1 : s1, j = 1 : s2]
173
- return esc (Expr (:call , Expr (:curly , :MArray , ( s1, s2) , ex. args[1 ]), Expr (:tuple , exprs... )))
161
+ return esc (Expr (:call , Expr (:curly , :MArray , Tuple{ s1, s2} , ex. args[1 ]), Expr (:tuple , exprs... )))
174
162
else # typed, n x 1
175
- return esc (Expr (:call , Expr (:curly , :MArray , ( length (ex. args)- 1 , 1 ) , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
163
+ return esc (Expr (:call , Expr (:curly , :MArray , Tuple{ length (ex. args)- 1 , 1 } , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
176
164
end
177
165
elseif isa (ex, Expr) && ex. head == :comprehension
178
166
if length (ex. args) != 1 || ! isa (ex. args[1 ], Expr) || ex. args[1 ]. head != :generator
@@ -210,7 +198,7 @@ macro MArray(ex)
210
198
211
199
return quote
212
200
$ (esc (f_expr))
213
- $ (esc (Expr (:call , Expr (:curly , :MArray , ( rng_lengths... ) ), Expr (:tuple , exprs... ))))
201
+ $ (esc (Expr (:call , Expr (:curly , :MArray , Tuple{ rng_lengths... } ), Expr (:tuple , exprs... ))))
214
202
end
215
203
elseif isa (ex, Expr) && ex. head == :typed_comprehension
216
204
if length (ex. args) != 2 || ! isa (ex. args[2 ], Expr) || ex. args[2 ]. head != :generator
@@ -249,7 +237,7 @@ macro MArray(ex)
249
237
250
238
return quote
251
239
$ (esc (f_expr))
252
- $ (esc (Expr (:call , Expr (:curly , :MArray , ( rng_lengths... ) , T), Expr (:tuple , exprs... ))))
240
+ $ (esc (Expr (:call , Expr (:curly , :MArray , Tuple{ rng_lengths... } , T), Expr (:tuple , exprs... ))))
253
241
end
254
242
elseif isa (ex, Expr) && ex. head == :call
255
243
if ex. args[1 ] == :zeros || ex. args[1 ] == :ones || ex. args[1 ] == :rand || ex. args[1 ] == :randn
@@ -258,9 +246,9 @@ macro MArray(ex)
258
246
else
259
247
return quote
260
248
if isa ($ (esc (ex. args[2 ])), DataType)
261
- $ (ex. args[1 ])($ (esc (Expr (:curly , MArray, Expr (:tuple , ex. args[3 : end ]. .. ), ex. args[2 ]))))
249
+ $ (ex. args[1 ])($ (esc (Expr (:curly , MArray, Expr (:curly , Tuple , ex. args[3 : end ]. .. ), ex. args[2 ]))))
262
250
else
263
- $ (ex. args[1 ])($ (esc (Expr (:curly , MArray, Expr (:tuple , ex. args[2 : end ]. .. )))))
251
+ $ (ex. args[1 ])($ (esc (Expr (:curly , MArray, Expr (:curly , Tuple , ex. args[2 : end ]. .. )))))
264
252
end
265
253
end
266
254
end
@@ -271,26 +259,26 @@ macro MArray(ex)
271
259
error (" @MArray got bad expression: $(ex. args[1 ]) ($(ex. args[2 ]) )" )
272
260
else
273
261
return quote
274
- $ (esc (ex. args[1 ]))($ (esc (ex. args[2 ])), MArray{$ (esc (Expr (:tuple , ex. args[3 : end ]. .. )))})
262
+ $ (esc (ex. args[1 ]))($ (esc (ex. args[2 ])), MArray{$ (esc (Expr (:curly , Tuple , ex. args[3 : end ]. .. )))})
275
263
end
276
264
end
277
265
elseif ex. args[1 ] == :eye
278
266
if length (ex. args) == 2
279
267
return quote
280
- eye (MArray{( $ (esc (ex. args[2 ])), $ (esc (ex. args[2 ]))) })
268
+ eye (MArray{Tuple{ $ (esc (ex. args[2 ])), $ (esc (ex. args[2 ]))} })
281
269
end
282
270
elseif length (ex. args) == 3
283
271
# We need a branch, depending if the first argument is a type or a size.
284
272
return quote
285
273
if isa ($ (esc (ex. args[2 ])), DataType)
286
- eye (MArray{( $ (esc (ex. args[3 ])), $ (esc (ex. args[3 ]))) , $ (esc (ex. args[2 ]))})
274
+ eye (MArray{Tuple{ $ (esc (ex. args[3 ])), $ (esc (ex. args[3 ]))} , $ (esc (ex. args[2 ]))})
287
275
else
288
- eye (MArray{( $ (esc (ex. args[2 ])), $ (esc (ex. args[3 ]))) })
276
+ eye (MArray{Tuple{ $ (esc (ex. args[2 ])), $ (esc (ex. args[3 ]))} })
289
277
end
290
278
end
291
279
elseif length (ex. args) == 4
292
280
return quote
293
- eye (MArray{( $ (esc (ex. args[3 ])), $ (esc (ex. args[4 ]))) , $ (esc (ex. args[2 ]))})
281
+ eye (MArray{Tuple{ $ (esc (ex. args[3 ])), $ (esc (ex. args[4 ]))} , $ (esc (ex. args[2 ]))})
294
282
end
295
283
else
296
284
error (" Bad eye() expression for @MArray" )
0 commit comments