@@ -323,18 +323,34 @@ function _broadcastbasis(::typeof(+), _, _, a, b)
323323end
324324
325325_broadcastbasis (:: typeof (+ ), :: MappedBasisLayouts , :: MappedBasisLayouts , a, b) = broadcastbasis (+ , demap (a), demap (b))[basismap (a), :]
326+ function _broadcastbasis (:: typeof (+ ), :: SubBasisLayout , :: SubBasisLayout , a, b)
327+ kr_a,jr_a = parentindices (a)
328+ kr_b,jr_b = parentindices (b)
329+ @assert kr_a == kr_b # frist axes must match
330+ view (broadcastbasis (+ , parent (a), parent (b)), kr_a, union (jr_a,jr_b))
331+ end
332+ _broadcastbasis (:: typeof (+ ), :: SubBasisLayout , _, a, b) = broadcastbasis (+ , parent (a), b)
333+ _broadcastbasis (:: typeof (+ ), _, :: SubBasisLayout , a, b) = broadcastbasis (+ , a, parent (b))
326334
327335broadcastbasis (:: typeof (+ ), a, b) = _broadcastbasis (+ , MemoryLayout (a), MemoryLayout (b), a, b)
336+ broadcastbasis (:: typeof (+ ), a, b, c... ) = broadcastbasis (+ , broadcastbasis (+ , a, b), c... )
328337
329338broadcastbasis (:: typeof (- ), a, b) = broadcastbasis (+ , a, b)
330339
331- for op in (:+ , :- )
332- @eval function broadcasted (:: LazyQuasiArrayStyle{1} , :: typeof ($ op), f:: Expansion , g:: Expansion )
333- S,c = arguments (f)
334- T,d = arguments (g)
335- ST = broadcastbasis ($ op, S, T)
336- ST * $ op ((ST \ S) * c , (ST \ T) * d)
337- end
340+ @eval function broadcasted (:: LazyQuasiArrayStyle{1} , :: typeof (- ), f:: Expansion , g:: Expansion )
341+ S,c = arguments (f)
342+ T,d = arguments (g)
343+ ST = broadcastbasis (- , S, T)
344+ ST * ((ST \ S) * c - (ST \ T) * d)
345+ end
346+
347+ _plus_P_ldiv_Ps_cs (P, :: Tuple{} , :: Tuple{} ) = ()
348+ _plus_P_ldiv_Ps_cs (P, Q:: Tuple , cs:: Tuple ) = tuple ((P \ first (Q)) * first (cs), _plus_P_ldiv_Ps_cs (P, tail (Q), tail (cs))... )
349+ @eval function broadcasted (:: LazyQuasiArrayStyle{1} , :: typeof (+ ), fs:: Expansion... )
350+ Ps = first .(arguments .(fs))
351+ cs = last .(arguments .(fs))
352+ P = broadcastbasis (+ , Ps... )
353+ P * + (_plus_P_ldiv_Ps_cs (P, Ps, cs)... ) # +((Ref(P) .\ Ps .* cs)...)
338354end
339355
340356function broadcasted (:: LazyQuasiArrayStyle{1} , :: typeof (* ), a:: Expansion , f:: Expansion )
0 commit comments