Skip to content

Commit 83bb4a4

Browse files
authored
don't use A_mul_B in kron multiplication (#310)
* don't use A_mul_B in kron multiplication * Add test for convert
1 parent e9a1601 commit 83bb4a4

File tree

5 files changed

+12
-11
lines changed

5 files changed

+12
-11
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ApproxFunBase"
22
uuid = "fbd15aa5-315a-5a7d-a8a4-24992e37be05"
3-
version = "0.7.48"
3+
version = "0.7.49"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"

src/Operators/banded/Conversion.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ function convert(::Type{Operator{T}},D::ConversionWrapper) where T
9999
end
100100
end
101101

102+
convert(::Type{T}, C::ConversionWrapper) where {T<:Number} = strictconvert(T, C.op)
102103

103104

104105
#promotedomainspace(P::Conversion,sp::Space)=ConversionWrapper(Operator(I, sp))

src/Operators/general/algebra.jl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -566,14 +566,10 @@ end
566566

567567
# Conversions we always assume are intentional: no need to promote
568568

569-
*(A::ConversionWrapper{TO1},B::ConversionWrapper{TO}) where {TO1<:TimesOperator,TO<:TimesOperator} =
570-
ConversionWrapper(TimesOperator(A.op,B.op))
571-
*(A::ConversionWrapper{TO},B::Conversion) where {TO<:TimesOperator} =
572-
ConversionWrapper(TimesOperator(A.op,B))
573-
*(A::Conversion,B::ConversionWrapper{TO}) where {TO<:TimesOperator} =
574-
ConversionWrapper(TimesOperator(A,B.op))
575-
576-
*(A::Conversion,B::Conversion) = ConversionWrapper(TimesOperator(A,B))
569+
_unwrap_conversion(c) = c
570+
_unwrap_conversion(c::ConversionWrapper{<:TimesOperator}) = c.op
571+
572+
*(A::Conversion,B::Conversion) = ConversionWrapper(TimesOperator(_unwrap_conversion(A), _unwrap_conversion(B)))
577573
*(A::Conversion,B::TimesOperator) = TimesOperator(A,B)
578574
*(A::TimesOperator,B::Conversion) = TimesOperator(A,B)
579575
*(A::Operator,B::Conversion) =

src/PDE/KroneckerOperator.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ function *(A::KroneckerOperator, B::KroneckerOperator)
213213
rspA = rangespace(A)
214214
A1, A2 = A.ops
215215
B1, B2 = B.ops
216-
AB1 = A_mul_B(A1, B1; dspB = factor(dspB,1), rspA = factor(rspA,1))
217-
AB2 = A_mul_B(A2, B2; dspB = factor(dspB,2), rspA = factor(rspA,2))
216+
AB1 = A1 * B1
217+
AB2 = A2 * B2
218218
KroneckerOperator(AB1, AB2, dspB, rspA)
219219
end
220220

test/runtests.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,10 @@ end
326326
B = ApproxFunBase.promotespaces((M, M))
327327
@test all(((x,y),) -> x == y, zip(A, B))
328328
end
329+
@testset "conversion and constantoperator" begin
330+
A = Conversion(PointSpace(1:4), PointSpace(1:4))
331+
@test convert(Number, A) == 1
332+
end
329333
end
330334

331335
@testset "RowVector" begin

0 commit comments

Comments
 (0)