Skip to content

Commit c13e52b

Browse files
authored
Compute size of TimesOperator after promotion (#441)
* Compute size of TimesOperator after promotion * bump version to v0.8.12
1 parent 0202834 commit c13e52b

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
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.8.11"
3+
version = "0.8.12"
44

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

src/Operators/general/algebra.jl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ struct TimesOperator{T,BW,SZ,O<:Operator{T},BBW,SBBW} <: Operator{T}
238238
# check compatible
239239
for k = 1:length(ops)-1
240240
size(ops[k], 2) == size(ops[k+1], 1) || throw(ArgumentError("incompatible operator sizes"))
241-
spacescompatible(domainspace(ops[k]), rangespace(ops[k+1])) || throw(ArgumentError("imcompatible spaces at index $k"))
241+
spacescompatible(domainspace(ops[k]), rangespace(ops[k+1])) || throw(ArgumentError("incompatible spaces at index $k"))
242242
end
243243

244244
# remove TimesOperators buried inside ops
@@ -313,12 +313,12 @@ else
313313
end
314314
@inline function _promotetimes(opsin,
315315
dsp=domainspace(last(opsin)),
316-
sz=_timessize(opsin),
317316
anytimesop=true)
318317

319318
@assert length(opsin) > 1 "need at least 2 operators"
320319
ops, bw, bbw, sbbw, ibbb, irb = __promotetimes(opsin, dsp, anytimesop)
321-
TimesOperator(ops, bw, sz, bbw, sbbw, ibbb, irb)
320+
sz = _timessize(ops)
321+
TimesOperator(convert_vector(ops), bw, sz, bbw, sbbw, ibbb, irb)
322322
end
323323
function __promotetimes(opsin, dsp, anytimesop)
324324
ops = Vector{Operator{promote_eltypeof(opsin)}}(undef, 0)
@@ -341,7 +341,7 @@ function __promotetimes(opsin, dsp, anytimesop)
341341
all(israggedbelow, ops)
342342
end
343343
@inline function _op_bws(op)
344-
[op], bandwidths(op), blockbandwidths(op),
344+
(op,), bandwidths(op), blockbandwidths(op),
345345
subblockbandwidths(op), isbandedblockbanded(op),
346346
israggedbelow(op)
347347
end
@@ -364,7 +364,7 @@ end
364364
op2_dsp = op2:dsp
365365
op1_dsp = op1:rangespace(op2_dsp)
366366
ops = (op1_dsp, op2_dsp)
367-
return [ops...], bandwidthssum(ops),
367+
return ops, bandwidthssum(ops),
368368
bandwidthssum(ops, blockbandwidths),
369369
bandwidthssum(ops, subblockbandwidths),
370370
all(isbandedblockbanded, ops),
@@ -600,8 +600,7 @@ function A_mul_B(A::Operator, B::Operator; dspB=domainspace(B), rspA=rangespace(
600600
elseif isconstop(B)
601601
promotedomainspace(strictconvert(Number, B) * A, dspB)
602602
else
603-
promotetimes(collateops(*, A, B),
604-
dspB, _timessize((A, B)), false)
603+
promotetimes(collateops(*, A, B), dspB, false)
605604
end
606605
end
607606

test/runtests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ end
245245
@test a == b
246246
@test bandwidths(a) == bandwidths(b)
247247
end
248+
M = Multiplication(Fun(PointSpace(1:3)))
249+
M2 = M : PointSpace(1:3)
250+
@test size(M * M2) == (3,3)
248251
@testset "unwrap TimesOperator" begin
249252
M = Multiplication(f)
250253
for ops in (Operator{Float64}[M, M * M], Operator{Float64}[M*M, M])

0 commit comments

Comments
 (0)