From 2b0716baf6ed881339a15550b199296bea65dc91 Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 17 Jul 2025 09:05:44 -0400 Subject: [PATCH 1/4] Generalize BraidingTensor promotion --- src/tensors/braidingtensor.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/tensors/braidingtensor.jl b/src/tensors/braidingtensor.jl index 4eb7d1e71..2993e55f6 100644 --- a/src/tensors/braidingtensor.jl +++ b/src/tensors/braidingtensor.jl @@ -31,6 +31,9 @@ end function BraidingTensor{T}(V1::S, V2::S, adjoint::Bool=false) where {T,S<:IndexSpace} return BraidingTensor{T,S}(V1, V2, adjoint) end +function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} + return BraidingTensor{T}(promote(V1, V2)..., adjoint) +end function BraidingTensor(V1::S, V2::S, adjoint::Bool=false) where {S<:IndexSpace} if BraidingStyle(sectortype(S)) isa SymmetricBraiding return BraidingTensor{Float64,S}(V1, V2, adjoint) @@ -38,6 +41,9 @@ function BraidingTensor(V1::S, V2::S, adjoint::Bool=false) where {S<:IndexSpace} return BraidingTensor{ComplexF64,S}(V1, V2, adjoint) end end +function BraidingTensor(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) + return BraidingTensor(promote(V1, V2)..., adjoint) +end function BraidingTensor(V::HomSpace, adjoint::Bool=false) domain(V) == reverse(codomain(V)) || throw(SpaceMismatch("Cannot define a braiding on $V")) From a691346a8cd6a06a8af30ad0228c367a075fb2ff Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 17 Jul 2025 09:29:14 -0400 Subject: [PATCH 2/4] Simplify implementation --- src/tensors/braidingtensor.jl | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/tensors/braidingtensor.jl b/src/tensors/braidingtensor.jl index 2993e55f6..fdc01e96b 100644 --- a/src/tensors/braidingtensor.jl +++ b/src/tensors/braidingtensor.jl @@ -28,21 +28,15 @@ struct BraidingTensor{T,S} <: AbstractTensorMap{T,S,2,2} # partial construction: only construct rowr and colr when needed end end -function BraidingTensor{T}(V1::S, V2::S, adjoint::Bool=false) where {T,S<:IndexSpace} - return BraidingTensor{T,S}(V1, V2, adjoint) +function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} + return BraidingTensor{T,S}(promote(V1, V2)..., adjoint) end function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} return BraidingTensor{T}(promote(V1, V2)..., adjoint) end -function BraidingTensor(V1::S, V2::S, adjoint::Bool=false) where {S<:IndexSpace} - if BraidingStyle(sectortype(S)) isa SymmetricBraiding - return BraidingTensor{Float64,S}(V1, V2, adjoint) - else - return BraidingTensor{ComplexF64,S}(V1, V2, adjoint) - end -end function BraidingTensor(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) - return BraidingTensor(promote(V1, V2)..., adjoint) + T = BraidingStyle(sectortype(S)) isa SymmetricBraiding ? Float64 : ComplexF64 + return BraidingTensor{T}(V1, V2, adjoint) end function BraidingTensor(V::HomSpace, adjoint::Bool=false) domain(V) == reverse(codomain(V)) || From 45e12d4f90a0cec4e8800075ce6fa6af871664f9 Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 17 Jul 2025 10:33:21 -0400 Subject: [PATCH 3/4] Fix --- src/tensors/braidingtensor.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tensors/braidingtensor.jl b/src/tensors/braidingtensor.jl index fdc01e96b..c5bc5a609 100644 --- a/src/tensors/braidingtensor.jl +++ b/src/tensors/braidingtensor.jl @@ -28,8 +28,8 @@ struct BraidingTensor{T,S} <: AbstractTensorMap{T,S,2,2} # partial construction: only construct rowr and colr when needed end end -function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} - return BraidingTensor{T,S}(promote(V1, V2)..., adjoint) +function BraidingTensor{T}(V1::S, V2::S, adjoint::Bool=false) where {T,S} + return BraidingTensor{T,S}(V1, V2, adjoint) end function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} return BraidingTensor{T}(promote(V1, V2)..., adjoint) From bb546997ac824a36e55d998e06ce58e6e4511d02 Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 17 Jul 2025 11:56:39 -0400 Subject: [PATCH 4/4] Fix fix --- src/tensors/braidingtensor.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tensors/braidingtensor.jl b/src/tensors/braidingtensor.jl index c5bc5a609..a4a184e5f 100644 --- a/src/tensors/braidingtensor.jl +++ b/src/tensors/braidingtensor.jl @@ -28,15 +28,18 @@ struct BraidingTensor{T,S} <: AbstractTensorMap{T,S,2,2} # partial construction: only construct rowr and colr when needed end end -function BraidingTensor{T}(V1::S, V2::S, adjoint::Bool=false) where {T,S} +function BraidingTensor{T}(V1::S, V2::S, adjoint::Bool=false) where {T,S<:IndexSpace} return BraidingTensor{T,S}(V1, V2, adjoint) end function BraidingTensor{T}(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) where {T} return BraidingTensor{T}(promote(V1, V2)..., adjoint) end function BraidingTensor(V1::IndexSpace, V2::IndexSpace, adjoint::Bool=false) + return BraidingTensor(promote(V1, V2)..., adjoint) +end +function BraidingTensor(V1::S, V2::S, adjoint::Bool=false) where {S<:IndexSpace} T = BraidingStyle(sectortype(S)) isa SymmetricBraiding ? Float64 : ComplexF64 - return BraidingTensor{T}(V1, V2, adjoint) + return BraidingTensor{T,S}(V1, V2, adjoint) end function BraidingTensor(V::HomSpace, adjoint::Bool=false) domain(V) == reverse(codomain(V)) ||