Skip to content

Commit 4f42a7e

Browse files
authored
Fix bug in simplifiable for maps (#109)
* Fix bug in simplifiable for maps * support for C \ (x .*2 .* A) * Update runtests.jl
1 parent 01f7bc8 commit 4f42a7e

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ContinuumArrays"
22
uuid = "7ae1f121-cc2c-504b-ac30-9b923412ae5c"
3-
version = "0.8.5"
3+
version = "0.8.6"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/bases/bases.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ end
119119
A \ ab
120120
end
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+
122130
function _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))
341349
simplifiable(::typeof(*), Ac::QuasiAdjoint{<:Any,<:SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:Inclusion,<:Any}}}, Bc::QuasiAdjoint{<:Any,<:Derivative}) = simplifiable(*, Bc', Ac')
342350
function 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
346354
end
347355
mul(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))
350358
simplifiable(::typeof(*), Ac::QuasiAdjoint{<:Any,<:SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}}}, Bc::QuasiAdjoint{<:Any,<:Derivative}) = simplifiable(*, Bc', Ac')
351359
function mul(A::Derivative, B::SubQuasiArray{<:Any,2,<:AbstractQuasiMatrix,<:Tuple{<:AbstractAffineQuasiVector,<:Any}})
352360
axes(A,2) == axes(B,1) || throw(DimensionMismatch())

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ ContinuumArrays.invmap(::InvQuadraticMap{T}) where T = QuadraticMap{T}()
598598
a = 1 .+ x .+ x.^2
599599
# The following are wrong, just testing dispatch
600600
@test T \ (a .* T) == I
601-
@test T \ (a .* (T * (T \ a))) [2.875, 3.5, 2.0, 0.5, 0.125]
601+
@test T \ (a .* (T * (T \ a))) isa Vector
602602
f = exp.(x) .* a # another broadcast layout
603603
@test T \ f == F \ f
604604

0 commit comments

Comments
 (0)