|
115 | 115 | A \ ab |
116 | 116 | end |
117 | 117 |
|
| 118 | +function _broadcast_mul_ldiv(::Tuple{ScalarLayout,Any}, A, B) |
| 119 | + a,b = arguments(B) |
| 120 | + a * (A \ b) |
| 121 | +end |
| 122 | + |
| 123 | +_broadcast_mul_ldiv(::Tuple{ScalarLayout,AbstractBasisLayout}, A, B) = |
| 124 | + _broadcast_mul_ldiv((ScalarLayout(),UnknownLayout()), A, B) |
118 | 125 | _broadcast_mul_ldiv(_, A, B) = copy(Ldiv{typeof(MemoryLayout(A)),UnknownLayout}(A,B)) |
119 | 126 |
|
120 | 127 | copy(L::Ldiv{<:AbstractBasisLayout,BroadcastLayout{typeof(*)}}) = _broadcast_mul_ldiv(map(MemoryLayout,arguments(L.B)), L.A, L.B) |
@@ -200,14 +207,15 @@ function _factorize(::MappedBasisLayout, L) |
200 | 207 | MappedFactorization(factorize(view(P,:,jr)), invmap(parentindices(L)[1])) |
201 | 208 | end |
202 | 209 |
|
203 | | -transform_ldiv(A, B, _) = factorize(A) \ B |
| 210 | +transform_ldiv(A::AbstractQuasiArray{T}, B::AbstractQuasiArray{V}, _) where {T,V} = factorize(convert(AbstractQuasiArray{promote_type(T,V)}, A)) \ B |
204 | 211 | transform_ldiv(A, B) = transform_ldiv(A, B, size(A)) |
205 | 212 |
|
206 | 213 | copy(L::Ldiv{<:AbstractBasisLayout}) = transform_ldiv(L.A, L.B) |
207 | 214 | # TODO: redesign to use simplifiable(\, A, B) |
208 | 215 | copy(L::Ldiv{<:AbstractBasisLayout,ApplyLayout{typeof(*)},<:Any,<:AbstractQuasiVector}) = transform_ldiv(L.A, L.B) |
209 | 216 | copy(L::Ldiv{<:AbstractBasisLayout,ApplyLayout{typeof(*)}}) = copy(Ldiv{UnknownLayout,ApplyLayout{typeof(*)}}(L.A, L.B)) |
210 | 217 | copy(L::Ldiv{<:AbstractBasisLayout,<:AbstractLazyLayout}) = transform_ldiv(L.A, L.B) |
| 218 | +copy(L::Ldiv{<:AbstractBasisLayout,ZerosLayout}) = Zeros{eltype(L)}(axes(L)...) |
211 | 219 |
|
212 | 220 | struct WeightedFactorization{T, WW, FAC<:Factorization{T}} <: Factorization{T} |
213 | 221 | w::WW |
|
0 commit comments