Skip to content

Commit eb05ce1

Browse files
committed
Fix diagonal container type in 1.3
1 parent 9a33516 commit eb05ce1

File tree

1 file changed

+30
-21
lines changed

1 file changed

+30
-21
lines changed

src/Operators/systems.jl

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,40 @@ end
2626

2727

2828
## Construction
29-
function diagm_container(kv::Pair{<:Integer,<:AbstractVector{O}}...) where O<:Operator
30-
T = mapreduce(x -> mapreduce(eltype,promote_type,x.second),
31-
promote_type, kv)
32-
n = mapreduce(x -> length(x.second) + abs(x.first), max, kv)
33-
zeros(Operator{T}, n, n)
29+
if VERSION < v"1.3-"
30+
function diagm_container(kv::Pair{<:Integer,<:AbstractVector{O}}...) where O<:Operator
31+
T = mapreduce(x -> mapreduce(eltype,promote_type,x.second),
32+
promote_type, kv)
33+
n = mapreduce(x -> length(x.second) + abs(x.first), max, kv)
34+
zeros(Operator{T}, n, n)
35+
end
36+
else
37+
function diagm_container(size, kv::Pair{<:Integer,<:AbstractVector{O}}...) where O<:Operator
38+
T = mapreduce(x -> mapreduce(eltype,promote_type,x.second),
39+
promote_type, kv)
40+
n = mapreduce(x -> length(x.second) + abs(x.first), max, kv)
41+
zeros(Operator{T}, n, n)
42+
end
3443
end
35-
44+
3645
##TODO: unify with other blockdiag
3746
function blockdiag(d1::AbstractVector{T},d2::AbstractVector{T}) where T<:Operator
38-
if isempty(d1)&&isempty(d2)
39-
error("Empty blockdiag")
40-
end
41-
if isempty(d1)
42-
TT=mapreduce(eltype,promote_type,d2)
43-
elseif isempty(d2)
44-
TT=mapreduce(eltype,promote_type,d1)
45-
else
46-
TT=promote_type(mapreduce(eltype,promote_type,d1),
47-
mapreduce(eltype,promote_type,d2))
48-
end
47+
if isempty(d1)&&isempty(d2)
48+
error("Empty blockdiag")
49+
end
50+
if isempty(d1)
51+
TT=mapreduce(eltype,promote_type,d2)
52+
elseif isempty(d2)
53+
TT=mapreduce(eltype,promote_type,d1)
54+
else
55+
TT=promote_type(mapreduce(eltype,promote_type,d1),
56+
mapreduce(eltype,promote_type,d2))
57+
end
4958

50-
D=zeros(Operator{TT},length(d1)+length(d2),2)
51-
D[1:length(d1),1]=d1
52-
D[length(d1)+1:end,2]=d2
53-
D
59+
D=zeros(Operator{TT},length(d1)+length(d2),2)
60+
D[1:length(d1),1]=d1
61+
D[length(d1)+1:end,2]=d2
62+
D
5463
end
5564

5665
blockdiag(a::Operator,b::Operator) = blockdiag(Operator{promote_type(eltype(a),eltype(b))}[a],

0 commit comments

Comments
 (0)