@@ -17,7 +17,7 @@ struct BraidingTensor{T, S, A} <: AbstractTensorMap{T, S, 2, 2}
1717 V1:: S
1818 V2:: S
1919 adjoint:: Bool
20- function BraidingTensor {T, S, A} (V1:: S , V2:: S , :: Type{A} , adjoint:: Bool = false ) where {T, S <: IndexSpace , A <: DenseVector{T} }
20+ function BraidingTensor {T, S, A} (V1:: S , V2:: S , adjoint:: Bool = false ) where {T, S <: IndexSpace , A <: DenseVector{T} }
2121 for a in sectors (V1), b in sectors (V2), c in (a ⊗ b)
2222 Nsymbol (a, b, c) == Nsymbol (b, a, c) ||
2323 throw (ArgumentError (" Cannot define a braiding between $a and $b " ))
@@ -26,45 +26,27 @@ struct BraidingTensor{T, S, A} <: AbstractTensorMap{T, S, 2, 2}
2626 # partial construction: only construct rowr and colr when needed
2727 end
2828end
29- function BraidingTensor {T, S} (V1:: S , V2:: S , :: Type{A} , adjoint:: Bool = false ) where {T, S <: IndexSpace , A}
30- return BraidingTensor {T, S, A} (V1, V2, A, adjoint)
31- end
32- function BraidingTensor {T} (V1:: S , V2:: S , A, adjoint:: Bool = false ) where {T, S <: IndexSpace }
33- return BraidingTensor {T, S} (V1, V2, A, adjoint)
34- end
3529function BraidingTensor {T} (V1:: S , V2:: S , adjoint:: Bool = false ) where {T, S <: IndexSpace }
36- return BraidingTensor {T, S} (V1, V2, Vector{T}, adjoint)
37- end
38- function BraidingTensor {T} (V1:: IndexSpace , V2:: IndexSpace , A, adjoint:: Bool = false ) where {T}
39- return BraidingTensor {T} (promote (V1, V2)... , A, adjoint)
30+ return BraidingTensor {T, S, Vector{T}} (V1, V2, adjoint)
4031end
41- function BraidingTensor {T} (V1:: IndexSpace , V2:: IndexSpace , adjoint:: Bool = false ) where {T}
42- return BraidingTensor {T} (V1, V2, Vector{T}, adjoint)
43- end
44- function BraidingTensor (V1:: IndexSpace , V2:: IndexSpace , :: Type{A} , adjoint:: Bool = false ) where {T, A <: DenseVector{T} }
45- return BraidingTensor {T} (promote (V1, V2)... , A, adjoint)
32+ function BraidingTensor (V1:: S , V2:: S , adjoint:: Bool = false ) where {S <: IndexSpace }
33+ T = BraidingStyle (sectortype (S)) isa SymmetricBraiding ? Float64 : ComplexF64
34+ return BraidingTensor {T, S, Vector{T}} (V1, V2, Vector{T}, adjoint)
4635end
47- function BraidingTensor (V1:: IndexSpace , V2:: IndexSpace , :: Type{T} , adjoint:: Bool = false ) where {T}
48- return BraidingTensor {T} (promote (V1, V2)... , Vector{T}, adjoint)
36+ # necessary due to HomSpace ctor below
37+ function BraidingTensor (V1:: S , V2:: S , A, adjoint:: Bool = false ) where {S <: IndexSpace }
38+ T = eltype (A)
39+ return BraidingTensor {T, S, A} (V1, V2, adjoint)
4940end
5041function BraidingTensor (V1:: IndexSpace , V2:: IndexSpace , adjoint:: Bool = false )
5142 return BraidingTensor (promote (V1, V2)... , adjoint)
5243end
53- function BraidingTensor (V1:: S , V2:: S , adjoint:: Bool = false ) where {S <: IndexSpace }
54- T = BraidingStyle (sectortype (S)) isa SymmetricBraiding ? Float64 : ComplexF64
55- return BraidingTensor {T, S} (V1, V2, Vector{T}, adjoint)
56- end
57- function BraidingTensor (V1:: S , V2:: S , :: Type{A} , adjoint:: Bool = false ) where {S <: IndexSpace , A <: AbstractArray }
58- T = BraidingStyle (sectortype (S)) isa SymmetricBraiding ? Float64 : ComplexF64
59- A′ = similarstoragetype (A, T)
60- return BraidingTensor {T, S} (V1, V2, A′, adjoint)
61- end
6244function BraidingTensor (V:: HomSpace , adjoint:: Bool = false )
6345 domain (V) == reverse (codomain (V)) ||
6446 throw (SpaceMismatch (" Cannot define a braiding on $V " ))
6547 return BraidingTensor (V[2 ], V[1 ], adjoint)
6648end
67- function BraidingTensor (V:: HomSpace , :: Type{A} , adjoint:: Bool = false ) where {A}
49+ function BraidingTensor (V:: HomSpace , A , adjoint:: Bool = false )
6850 domain (V) == reverse (codomain (V)) ||
6951 throw (SpaceMismatch (" Cannot define a braiding on $V " ))
7052 return BraidingTensor (V[2 ], V[1 ], A, adjoint)
@@ -75,7 +57,7 @@ function BraidingTensor{T}(V::HomSpace, adjoint::Bool = false) where {T}
7557 return BraidingTensor {T} (V[2 ], V[1 ], adjoint)
7658end
7759function Base. adjoint (b:: BraidingTensor{T, S, A} ) where {T, S, A}
78- return BraidingTensor {T, S, A} (b. V1, b. V2, A, ! b. adjoint)
60+ return BraidingTensor {T, S, A} (b. V1, b. V2, ! b. adjoint)
7961end
8062
8163storagetype (:: Type{BraidingTensor{T, S, A}} ) where {T, S, A} = A
11395
11496function _set_subblock! (data, val)
11597 f (I) = ((I[1 ] == I[4 ]) & (I[2 ] == I[3 ])) * val
116- data . = f . (CartesianIndices (data))
98+ @. data = f (CartesianIndices (data))
11799end
118100
119101
0 commit comments