Skip to content

Commit dd02e30

Browse files
committed
Add dual flag to SumSpace
1 parent 523abc8 commit dd02e30

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

src/vectorspaces/sumspace.jl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,20 @@ A (lazy) direct sum of elementary vector spaces of type `S`.
55
"""
66
struct SumSpace{S <: ElementarySpace} <: ElementarySpace
77
spaces::Vector{S}
8+
dual::Bool
9+
function SumSpace{S}(spaces::Vector{S}, dual::Bool) where {S}
10+
allequal(==(dual) isdual, spaces) || throw(ArgumentError("Invalid mix of dual flags"))
11+
return new{S}(spaces, dual)
12+
end
813
end
914

10-
SumSpace(V::S, spaces::S...) where {S <: ElementarySpace} = SumSpace(collect((V, spaces...)))
11-
SumSpace{S}() where {S} = SumSpace(S[])
15+
function SumSpace(V::S, spaces::S...; dual::Bool = isdual(V)) where {S <: ElementarySpace}
16+
return SumSpace(collect((V, spaces...)); dual)
17+
end
18+
function SumSpace(spaces::Vector{S}; dual::Bool = isempty(spaces) ? false : isdual(first(spaces))) where {S}
19+
return SumSpace{S}(spaces, dual)
20+
end
21+
SumSpace{S}(; dual::Bool = false) where {S} = SumSpace{S}(S[], dual)
1222

1323
# Convenience aliases
1424
const ProductSumSpace{S, N} = ProductSpace{SumSpace{S}, N}
@@ -68,10 +78,10 @@ TensorKit.dims(S::SumSpace) = map(dim, S.spaces)
6878
TensorKit.dim(S::SumSpace, n::Int) = dim(S.spaces[n])
6979
TensorKit.dim(S::SumSpace) = sum(dims(S))
7080

71-
TensorKit.isdual(S::SumSpace) = isdual(first(S.spaces))
72-
TensorKit.dual(S::SumSpace) = SumSpace(map(dual, S.spaces))
81+
TensorKit.isdual(S::SumSpace) = S.dual
82+
TensorKit.dual(S::SumSpace) = SumSpace(map(dual, S.spaces); dual = !isdual(S))
7383
Base.conj(S::SumSpace) = dual(S)
74-
TensorKit.flip(S::SumSpace) = SumSpace(map(flip, S.spaces))
84+
TensorKit.flip(S::SumSpace) = SumSpace(map(flip, S.spaces); dual = isdual(S))
7585

7686
function TensorKit.hassector(S::SumSpace, s::Sector)
7787
return mapreduce(v -> hassector(v, s), |, S.spaces; init = false)

0 commit comments

Comments
 (0)