1- struct LazyArrayStyle{N} <: AbstractArrayStyle{N} end
1+ abstract type AbstractLazyArrayStyle{N} <: AbstractArrayStyle{N} end
2+
3+ struct LazyArrayStyle{N} <: AbstractLazyArrayStyle{N} end
24LazyArrayStyle (:: Val{N} ) where N = LazyArrayStyle {N} ()
35LazyArrayStyle {M} (:: Val{N} ) where {N,M} = LazyArrayStyle {N} ()
46
@@ -7,8 +9,8 @@ LazyArrayStyle{M}(::Val{N}) where {N,M} = LazyArrayStyle{N}()
79layout_broadcasted (_, _, op, A, B) = Base. Broadcast. Broadcasted (Base. Broadcast. combine_styles (A,B), op, (A, B))
810layout_broadcasted (op, A, B) = layout_broadcasted (MemoryLayout (A), MemoryLayout (B), op, A, B)
911
10- DefaultArrayStyle (:: LazyArrayStyle {N} ) where N = DefaultArrayStyle {N} ()
11- broadcasted (:: LazyArrayStyle , op, A, B) = layout_broadcasted (op, A, B)
12+ DefaultArrayStyle (:: AbstractLazyArrayStyle {N} ) where N = DefaultArrayStyle {N} ()
13+ broadcasted (:: AbstractLazyArrayStyle , op, A, B) = layout_broadcasted (op, A, B)
1214
1315for op in (:* , :/ , :+ , :- )
1416 @eval layout_broadcasted (:: ZerosLayout , _, :: typeof ($ op), a, b) = broadcasted (DefaultArrayStyle (Base. Broadcast. combine_styles (a,b)), $ op, a, b)
@@ -74,10 +76,10 @@ _BroadcastArray(bc::Broadcasted) = BroadcastArray{combine_eltypes(bc.f, bc.args)
7476BroadcastArray (bc:: Broadcasted{S} ) where S =
7577 _BroadcastArray (instantiate (Broadcasted {S} (bc. f, _broadcast2broadcastarray (bc. args... ))))
7678
77- BroadcastArray (f, A, As... ) = BroadcastArray ( broadcasted ( f, A, As... ) )
79+ BroadcastArray (f, A, As... ) = BroadcastArray {combine_eltypes(f, (A,As...))} ( f, A, As... )
7880BroadcastArray {T} (f, A, As... ) where T = BroadcastArray {T} (instantiate (broadcasted (f, A, As... )))
79- BroadcastMatrix (f, A... ) = BroadcastMatrix ( broadcasted (f, A... ) )
80- BroadcastVector (f, A... ) = BroadcastVector ( broadcasted (f, A... ) )
81+ BroadcastMatrix (f, A... ) = BroadcastMatrix {combine_eltypes(f, A)} (f, A... )
82+ BroadcastVector (f, A... ) = BroadcastVector {combine_eltypes(f, A)} (f, A... )
8183
8284BroadcastArray {T,N} (f, A... ) where {T,N} = BroadcastArray {T,N,typeof(f),typeof(A)} (f, A)
8385
@@ -116,7 +118,7 @@ converteltype(::Type{T}, A::AbstractArray) where T = convert(AbstractArray{T}, A
116118converteltype (:: Type{T} , A) where T = convert (T, A)
117119sub_materialize (:: BroadcastLayout , A) = converteltype (eltype (A), sub_materialize (_broadcasted (A)))
118120
119- copy (bc:: Broadcasted{<:LazyArrayStyle } ) = BroadcastArray (bc)
121+ copy (bc:: Broadcasted{<:AbstractLazyArrayStyle } ) = BroadcastArray (bc)
120122
121123# BroadcastArray are immutable
122124copy (bc:: BroadcastArray ) = bc
@@ -159,37 +161,37 @@ BroadcastStyle(::Type{<:UpperOrLowerTriangular{<:Any,<:LazyMatrix}}) = LazyArray
159161BroadcastStyle (:: Type{<:LinearAlgebra.HermOrSym{<:Any,<:LazyMatrix}} ) = LazyArrayStyle {2} ()
160162
161163
162- BroadcastStyle (L:: LazyArrayStyle {N} , :: StructuredMatrixStyle ) where N = L
164+ BroadcastStyle (L:: AbstractLazyArrayStyle {N} , :: StructuredMatrixStyle ) where N = L
163165
164166
165167
166168# # scalar-range broadcast operations ##
167169# Ranges already support smart broadcasting
168170for op in (+ , - , big)
169171 @eval begin
170- broadcasted (:: LazyArrayStyle {1} , :: typeof ($ op), r:: AbstractRange ) =
172+ broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof ($ op), r:: AbstractRange ) =
171173 broadcast (DefaultArrayStyle {1} (), $ op, r)
172174 end
173175end
174176
175177for op in (- , + , * , / )
176- @eval broadcasted (:: LazyArrayStyle {1} , :: typeof ($ op), r:: AbstractRange , x:: Real ) = broadcast (DefaultArrayStyle {1} (), $ op, r, x)
178+ @eval broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof ($ op), r:: AbstractRange , x:: Real ) = broadcast (DefaultArrayStyle {1} (), $ op, r, x)
177179end
178180
179181for op in (- , + , * , \ )
180- @eval broadcasted (:: LazyArrayStyle {1} , :: typeof ($ op), x:: Real , r:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), $ op, x, r)
182+ @eval broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof ($ op), x:: Real , r:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), $ op, x, r)
181183end
182184
183- broadcasted (:: LazyArrayStyle {N} , op, r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r)
184- broadcasted (:: LazyArrayStyle {N} , op, r:: AbstractFill{T,N} , x:: Number ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r, x)
185- broadcasted (:: LazyArrayStyle {N} , op, x:: Number , r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, x, r)
186- broadcasted (:: LazyArrayStyle {N} , op, r:: AbstractFill{T,N} , x:: Ref ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r, x)
187- broadcasted (:: LazyArrayStyle {N} , op, x:: Ref , r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, x, r)
188- broadcasted (:: LazyArrayStyle {N} , op, r1:: AbstractFill{T,N} , r2:: AbstractFill{V,N} ) where {T,V,N} = broadcast (DefaultArrayStyle {N} (), op, r1, r2)
189- broadcasted (:: LazyArrayStyle {1} , :: typeof (* ), a:: AbstractFill , b:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
190- broadcasted (:: LazyArrayStyle {1} , :: typeof (* ), a:: AbstractRange , b:: AbstractFill ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
191- broadcasted (:: LazyArrayStyle {1} , :: typeof (* ), a:: Zeros{<:Any,1} , b:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
192- broadcasted (:: LazyArrayStyle {1} , :: typeof (* ), a:: AbstractRange , b:: Zeros{<:Any,1} ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
185+ broadcasted (:: AbstractLazyArrayStyle {N} , op, r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r)
186+ broadcasted (:: AbstractLazyArrayStyle {N} , op, r:: AbstractFill{T,N} , x:: Number ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r, x)
187+ broadcasted (:: AbstractLazyArrayStyle {N} , op, x:: Number , r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, x, r)
188+ broadcasted (:: AbstractLazyArrayStyle {N} , op, r:: AbstractFill{T,N} , x:: Ref ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, r, x)
189+ broadcasted (:: AbstractLazyArrayStyle {N} , op, x:: Ref , r:: AbstractFill{T,N} ) where {T,N} = broadcast (DefaultArrayStyle {N} (), op, x, r)
190+ broadcasted (:: AbstractLazyArrayStyle {N} , op, r1:: AbstractFill{T,N} , r2:: AbstractFill{V,N} ) where {T,V,N} = broadcast (DefaultArrayStyle {N} (), op, r1, r2)
191+ broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof (* ), a:: AbstractFill , b:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
192+ broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof (* ), a:: AbstractRange , b:: AbstractFill ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
193+ broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof (* ), a:: Zeros{<:Any,1} , b:: AbstractRange ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
194+ broadcasted (:: AbstractLazyArrayStyle {1} , :: typeof (* ), a:: AbstractRange , b:: Zeros{<:Any,1} ) = broadcast (DefaultArrayStyle {1} (), * , a, b)
193195
194196
195197# ##
@@ -308,8 +310,8 @@ arguments(b::BroadcastLayout, A::Transpose) = map(_transpose, arguments(b, paren
308310
309311# broadcasting a transpose is the same as broadcasting it to the array and transposing
310312# this allows us to collapse to one broadcast.
311- broadcasted (:: LazyArrayStyle , op, A:: Transpose{<:Any,<:BroadcastArray} ) = transpose (broadcast (op, parent (A)))
312- broadcasted (:: LazyArrayStyle , op, A:: Adjoint{<:Real,<:BroadcastArray} ) = adjoint (broadcast (op, parent (A)))
313+ broadcasted (:: AbstractLazyArrayStyle , op, A:: Transpose{<:Any,<:BroadcastArray} ) = transpose (broadcast (op, parent (A)))
314+ broadcasted (:: AbstractLazyArrayStyle , op, A:: Adjoint{<:Real,<:BroadcastArray} ) = adjoint (broadcast (op, parent (A)))
313315
314316# ensure we benefit from fast linear indexing
315317getindex (A:: Transpose{<:Any,<:BroadcastVector} , k:: AbstractVector ) = parent (A)[k]
0 commit comments