119119 A \ ab
120120end
121121
122+ @inline function _broadcast_mul_ldiv (:: Tuple{Any,ApplyLayout{typeof(*)}} , A, B)
123+ a,b = arguments (B)
124+ @assert a isa AbstractQuasiVector # Only works for vec .* mat
125+ args = arguments (ApplyLayout {typeof(*)} (), b)
126+ * (A \ (a .* first (args)), tail (args)... )
127+ end
128+
129+
122130function _broadcast_mul_ldiv (:: Tuple{ScalarLayout,Any} , A, B)
123131 a,b = arguments (B)
124132 a * (A \ b)
@@ -337,7 +345,7 @@ _der_sub(DP, inds...) = DP[inds...]
337345_der_sub (DP:: ApplyQuasiMatrix{T,typeof(*),<:Tuple{Derivative,Any}} , kr, jr) where T = ApplyQuasiMatrix {T} (* , DP. args[1 ], view (DP. args[2 ], kr, jr))
338346
339347# need to customise simplifiable so can't use @simplify
340- simplifiable (:: typeof (* ), A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}} )= simplifiable (* , A , parent (B))
348+ simplifiable (:: typeof (* ), A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}} )= simplifiable (* , Derivative ( axes ( parent (B), 1 )) , parent (B))
341349simplifiable (:: typeof (* ), Ac:: QuasiAdjoint{<:Any,<:SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}}} , Bc:: QuasiAdjoint{<:Any,<:Derivative} ) = simplifiable (* , Bc' , Ac' )
342350function mul (A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}} )
343351 axes (A,2 ) == axes (B,1 ) || throw (DimensionMismatch ())
@@ -346,7 +354,7 @@ function mul(A::Derivative, B::SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tup
346354end
347355mul (Ac:: QuasiAdjoint{<:Any,<:SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}}} , Bc:: QuasiAdjoint{<:Any,<:Derivative} ) = mul (Bc' , Ac' )'
348356
349- simplifiable (:: typeof (* ), A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}} ) = simplifiable (* , A , parent (B))
357+ simplifiable (:: typeof (* ), A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}} ) = simplifiable (* , Derivative ( axes ( parent (B), 1 )) , parent (B))
350358simplifiable (:: typeof (* ), Ac:: QuasiAdjoint{<:Any,<:SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}}} , Bc:: QuasiAdjoint{<:Any,<:Derivative} ) = simplifiable (* , Bc' , Ac' )
351359function mul (A:: Derivative , B:: SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}} )
352360 axes (A,2 ) == axes (B,1 ) || throw (DimensionMismatch ())
0 commit comments