1
- for op in (:+ , :- )
2
- @eval broadcasted (:: DefaultArrayStyle{N} , :: typeof ($ op), r1:: AbstractFill{T,N} , r2:: AbstractFill{V,N} ) where {T,V,N} =
3
- $ op (r1, r2)
4
- end
5
1
6
- function broadcasted (:: DefaultArrayStyle{N} , :: typeof (* ), a:: Zeros{T,N} , b:: Zeros{V,N} ) where {T,V,N}
7
- axes (a) ≠ axes (b) && throw (DimensionMismatch (" dimensions must match." ))
8
- Zeros {promote_type(T,V)} (axes (a))
9
- end
2
+ # ## Unary broadcasting
10
3
11
- function _broadcasted_mul (a:: AbstractArray{T} , b:: Zeros{V} ) where {T,V}
12
- axes (a) ≠ axes (b) && throw (DimensionMismatch (" dimensions must match." ))
13
- Zeros {promote_type(T,V)} (axes (a))
14
- end
15
- function broadcasted (:: DefaultArrayStyle{N} , :: typeof (* ), a:: AbstractArray{T,N} , b:: Zeros{V,N} ) where {T,V,N}
16
- return _broadcasted_mul (a, b)
17
- end
18
- function broadcasted (:: DefaultArrayStyle{N} , :: typeof (* ), a:: AbstractFill{T,N} , b:: Zeros{V,N} ) where {T,V,N}
19
- return _broadcasted_mul (a, b)
4
+ function broadcasted (:: DefaultArrayStyle{N} , op, r:: AbstractFill{T,N} ) where {T,N}
5
+ return Fill (op (getindex_value (r)), size (r))
20
6
end
21
7
22
- function _broadcasted_mul (a:: Zeros{T} , b:: AbstractArray{V} ) where {T,V}
23
- axes (a) ≠ axes (b) && throw (DimensionMismatch (" dimensions must match." ))
24
- Zeros {promote_type(T,V)} (axes (a))
8
+
9
+ # ## Binary broadcasting
10
+
11
+ function broadcasted (:: DefaultArrayStyle , op, a:: AbstractFill , b:: AbstractFill )
12
+ val = op (getindex_value (a), getindex_value (b))
13
+ return Fill (val, broadcast_shape (size (a), size (b)))
25
14
end
26
- function broadcasted (:: DefaultArrayStyle{N} , :: typeof (* ), a:: Zeros{T,N} , b:: AbstractArray{V,N} ) where {T,V,N}
27
- _broadcasted_mul (a, b)
15
+
16
+ function _broadcasted_zeros (a, b)
17
+ return Zeros {promote_type(eltype(a), eltype(b))} (broadcast_shape (size (a), size (b)))
28
18
end
29
- function broadcasted ( :: DefaultArrayStyle{N} , :: typeof ( * ), a :: Zeros{T,N} , b :: AbstractFill{V,N} ) where {T,V,N}
30
- _broadcasted_mul (a, b )
19
+ function _broadcasted_ones (a, b)
20
+ return Ones {promote_type(eltype(a), eltype(b))} ( broadcast_shape ( size (a), size (b)) )
31
21
end
32
22
23
+ broadcasted (:: DefaultArrayStyle , :: typeof (+ ), a:: Zeros , b:: Zeros ) = _broadcasted_zeros (a, b)
24
+ broadcasted (:: DefaultArrayStyle , :: typeof (+ ), a:: Ones , b:: Zeros ) = _broadcasted_ones (a, b)
25
+ broadcasted (:: DefaultArrayStyle , :: typeof (+ ), a:: Zeros , b:: Ones ) = _broadcasted_ones (a, b)
26
+
27
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Zeros , b:: Zeros ) = _broadcasted_zeros (a, b)
28
+
29
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Zeros , b:: Ones ) = _broadcasted_zeros (a, b)
30
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Zeros , b:: Fill ) = _broadcasted_zeros (a, b)
33
31
function broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Zeros , b:: AbstractRange )
34
- return Zeros {promote_type(eltype(a), eltype(b))} (broadcast_shape (size (a), size (b)))
32
+ return _broadcasted_zeros (a, b)
33
+ end
34
+ function broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Zeros , b:: AbstractArray )
35
+ return _broadcasted_zeros (a, b)
35
36
end
36
37
38
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Ones , b:: Zeros ) = _broadcasted_zeros (a, b)
39
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Fill , b:: Zeros ) = _broadcasted_zeros (a, b)
37
40
function broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: AbstractRange , b:: Zeros )
38
- return Zeros {promote_type(eltype(a), eltype(b))} ( broadcast_shape ( size (a), size (b)) )
41
+ return _broadcasted_zeros (a, b )
39
42
end
43
+ function broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: AbstractArray , b:: Zeros )
44
+ return _broadcasted_zeros (a, b)
45
+ end
46
+
47
+ broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: Ones , b:: Ones ) = _broadcasted_ones (a, b)
48
+ broadcasted (:: DefaultArrayStyle , :: typeof (/ ), a:: Ones , b:: Ones ) = _broadcasted_ones (a, b)
49
+ broadcasted (:: DefaultArrayStyle , :: typeof (\ ), a:: Ones , b:: Ones ) = _broadcasted_ones (a, b)
50
+
51
+
40
52
41
53
function broadcasted (:: DefaultArrayStyle , :: typeof (* ), a:: AbstractFill , b:: AbstractRange )
42
54
broadcast_shape (size (a), size (b)) # Check sizes are compatible.
@@ -48,19 +60,7 @@ function broadcasted(::DefaultArrayStyle, ::typeof(*), a::AbstractRange, b::Abst
48
60
return broadcasted (* , a, getindex_value (b))
49
61
end
50
62
51
- broadcasted (:: DefaultArrayStyle{N} , op, r:: AbstractFill{T,N} ) where {T,N} = Fill (op (getindex_value (r)), size (r))
52
63
broadcasted (:: DefaultArrayStyle{N} , op, r:: AbstractFill{T,N} , x:: Number ) where {T,N} = Fill (op (getindex_value (r),x), size (r))
53
64
broadcasted (:: DefaultArrayStyle{N} , op, x:: Number , r:: AbstractFill{T,N} ) where {T,N} = Fill (op (x, getindex_value (r)), size (r))
54
65
broadcasted (:: DefaultArrayStyle{N} , op, r:: AbstractFill{T,N} , x:: Ref ) where {T,N} = Fill (op (getindex_value (r),x[]), size (r))
55
66
broadcasted (:: DefaultArrayStyle{N} , op, x:: Ref , r:: AbstractFill{T,N} ) where {T,N} = Fill (op (x[], getindex_value (r)), size (r))
56
- function broadcasted (:: DefaultArrayStyle{N} , op, r1:: AbstractFill{T,N} , r2:: AbstractFill{V,N} ) where {T,V,N}
57
- size (r1) ≠ size (r2) && throw (DimensionMismatch (" dimensions must match." ))
58
- Fill (op (getindex_value (r1),getindex_value (r2)), size (r1))
59
- end
60
-
61
- for op in (:* , :/ , :\ )
62
- @eval function broadcasted (:: DefaultArrayStyle{N} , :: typeof ($ op), r1:: Ones{T,N} , r2:: Ones{V,N} ) where {T,V,N}
63
- size (r1) ≠ size (r2) && throw (DimensionMismatch (" dimensions must match." ))
64
- Ones {promote_type(T,V)} (size (r1))
65
- end
66
- end
0 commit comments