@@ -11,7 +11,7 @@ struct BraidingTensor{S<:IndexSpace, A} <: AbstractTensorMap{S, 2, 2}
1111 V1:: S
1212 V2:: S
1313 adjoint:: Bool
14- function BraidingTensor (V1:: S , V2:: S , adjoint:: Bool = false , :: Type{A} = Matrix{ComplexF64} ) where
14+ function BraidingTensor {S,A} (V1:: S , V2:: S , adjoint:: Bool = false ) where
1515 {S<: IndexSpace , A<: DenseMatrix }
1616 for a in sectors (V1)
1717 for b in sectors (V2)
@@ -25,6 +25,13 @@ struct BraidingTensor{S<:IndexSpace, A} <: AbstractTensorMap{S, 2, 2}
2525 # partial construction: only construct rowr and colr when needed
2626 end
2727end
28+ function BraidingTensor (V1:: S , V2:: S , adjoint:: Bool = false ) where {S<: IndexSpace }
29+ if BraidingStyle (sectortype (S)) isa SymmetricBraiding
30+ return BraidingTensor {S, Matrix{Float64}} (V1, V2, adjoint)
31+ else
32+ return BraidingTensor {S, Matrix{ComplexF64}} (V1, V2, adjoint)
33+ end
34+ end
2835
2936Base. adjoint (b:: BraidingTensor{S,A} ) where {S<: IndexSpace , A<: DenseMatrix } =
3037 BraidingTensor (b. V1, b. V2, ! b. adjoint, A)
@@ -168,12 +175,14 @@ end
168175
169176blocks (b:: BraidingTensor ) = blocks (TensorMap (b))
170177
171- function planar_contract! (α, A:: BraidingTensor{S} , B:: AbstractTensorMap{S} ,
172- β, C:: AbstractTensorMap{S} ,
173- oindA:: IndexTuple{2} , cindA:: IndexTuple{2} ,
174- oindB:: IndexTuple , cindB:: IndexTuple{2} ,
175- p1:: IndexTuple , p2:: IndexTuple ,
176- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
178+ function planar_contract! (C:: AbstractTensorMap{S} ,
179+ A:: BraidingTensor{S} ,
180+ (oindA, cindA):: Index2Tuple{2,2} ,
181+ B:: AbstractTensorMap{S} ,
182+ (cindB, oindB):: Index2Tuple{2,<:Any} ,
183+ (p1, p2):: Index2Tuple ,
184+ α:: Number , β:: Number ,
185+ backends... ) where {S}
177186
178187 codA, domA = codomainind (A), domainind (A)
179188 codB, domB = codomainind (B), domainind (B)
@@ -214,12 +223,15 @@ function planar_contract!(α, A::BraidingTensor{S}, B::AbstractTensorMap{S},
214223 end
215224 return C
216225end
217- function planar_contract! (α, A:: AbstractTensorMap{S} , B:: BraidingTensor{S} ,
218- β, C:: AbstractTensorMap{S} ,
219- oindA:: IndexTuple , cindA:: IndexTuple{2} ,
220- oindB:: IndexTuple{2} , cindB:: IndexTuple{2} ,
221- p1:: IndexTuple , p2:: IndexTuple ,
222- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
226+ function planar_contract! (C:: AbstractTensorMap{S} ,
227+ A:: AbstractTensorMap{S} ,
228+ (oindA, cindA):: Index2Tuple{<:Any,2} ,
229+ B:: BraidingTensor{S} ,
230+ (cindB, oindB):: Index2Tuple{2,2} ,
231+ (p1, p2):: Index2Tuple ,
232+ α:: Number , β:: Number ,
233+ backends... ) where {S}
234+
223235 codA, domA = codomainind (A), domainind (A)
224236 codB, domB = codomainind (B), domainind (B)
225237 oindA, cindA, oindB, cindB =
@@ -259,13 +271,15 @@ function planar_contract!(α, A::AbstractTensorMap{S}, B::BraidingTensor{S},
259271 C
260272end
261273
262- function planar_contract! (α, A:: BraidingTensor{S} , B:: AbstractTensorMap{S} ,
263- β, C:: AbstractTensorMap{S} ,
264- oindA:: IndexTuple{0} , cindA:: IndexTuple{4} ,
265- oindB:: IndexTuple , cindB:: IndexTuple{4} ,
266- p1:: IndexTuple , p2:: IndexTuple ,
267- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
268-
274+ function planar_contract! (C:: AbstractTensorMap{S} ,
275+ A:: BraidingTensor{S} ,
276+ (oindA, cindA):: Index2Tuple{0,4} ,
277+ B:: AbstractTensorMap{S} ,
278+ (cindB, oindB):: Index2Tuple{4,<:Any} ,
279+ (p1, p2):: Index2Tuple ,
280+ α:: Number , β:: Number ,
281+ backends... ) where {S}
282+
269283 codA, domA = codomainind (A), domainind (A)
270284 codB, domB = codomainind (B), domainind (B)
271285 oindA, cindA, oindB, cindB =
@@ -327,13 +341,15 @@ function planar_contract!(α, A::BraidingTensor{S}, B::AbstractTensorMap{S},
327341 return C
328342end
329343
330- function planar_contract! (α, A:: AbstractTensorMap{S} , B:: BraidingTensor{S} ,
331- β, C:: AbstractTensorMap{S} ,
332- oindA:: IndexTuple , cindA:: IndexTuple{4} ,
333- oindB:: IndexTuple{0} , cindB:: IndexTuple{4} ,
334- p1:: IndexTuple , p2:: IndexTuple ,
335- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
336-
344+ function planar_contract! (C:: AbstractTensorMap{S} ,
345+ A:: AbstractTensorMap{S} ,
346+ (oindA, cindA):: Index2Tuple{0,4} ,
347+ B:: BraidingTensor{S} ,
348+ (cindB, oindB):: Index2Tuple{4,<:Any} ,
349+ (p1, p2):: Index2Tuple ,
350+ α:: Number , β:: Number ,
351+ backends... ) where {S}
352+
337353 codA, domA = codomainind (A), domainind (A)
338354 codB, domB = codomainind (B), domainind (B)
339355 oindA, cindA, oindB, cindB =
@@ -395,13 +411,14 @@ function planar_contract!(α, A::AbstractTensorMap{S}, B::BraidingTensor{S},
395411 return C
396412end
397413
398- function planar_contract! (α, A:: BraidingTensor{S} , B:: AbstractTensorMap{S} ,
399- β, C:: AbstractTensorMap{S} ,
400- oindA:: IndexTuple{1} , cindA:: IndexTuple{3} ,
401- oindB:: IndexTuple , cindB:: IndexTuple{3} ,
402- p1:: IndexTuple , p2:: IndexTuple ,
403- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
404-
414+ function planar_contract! (C:: AbstractTensorMap{S} ,
415+ A:: BraidingTensor{S} ,
416+ (oindA, cindA):: Index2Tuple{1,3} ,
417+ B:: AbstractTensorMap{S} ,
418+ (cindB, oindB):: Index2Tuple{1,<:Any} ,
419+ (p1, p2):: Index2Tuple ,
420+ α:: Number , β:: Number ,
421+ backends... ) where {S}
405422 codA, domA = codomainind (A), domainind (A)
406423 codB, domB = codomainind (B), domainind (B)
407424 oindA, cindA, oindB, cindB =
@@ -457,13 +474,15 @@ function planar_contract!(α, A::BraidingTensor{S}, B::AbstractTensorMap{S},
457474 return C
458475end
459476
460- function planar_contract! (α, A:: AbstractTensorMap{S} , B:: BraidingTensor{S} ,
461- β, C:: AbstractTensorMap{S} ,
462- oindA:: IndexTuple , cindA:: IndexTuple{3} ,
463- oindB:: IndexTuple{1} , cindB:: IndexTuple{3} ,
464- p1:: IndexTuple , p2:: IndexTuple ,
465- syms:: Union{Nothing, NTuple{3, Symbol}} ) where {S}
466-
477+ function planar_contract! (C:: AbstractTensorMap{S} ,
478+ A:: AbstractTensorMap{S} ,
479+ (oindA, cindA):: Index2Tuple{<:Any,3} ,
480+ B:: BraidingTensor{S} ,
481+ (cindB, oindB):: Index2Tuple{3,1} ,
482+ (p1, p2):: Index2Tuple ,
483+ α:: Number , β:: Number ,
484+ backends... ) where {S}
485+
467486 codA, domA = codomainind (A), domainind (A)
468487 codB, domB = codomainind (B), domainind (B)
469488 oindA, cindA, oindB, cindB =
@@ -520,7 +539,3 @@ function planar_contract!(α, A::AbstractTensorMap{S}, B::BraidingTensor{S},
520539end
521540
522541has_shared_permute (t:: BraidingTensor , args... ) = false
523- function cached_permute (sym:: Symbol , t:: BraidingTensor , p1, p2; copy= false )
524- tp = TO. cached_similar_from_indices (sym, scalartype (t), p1, p2, t, :N )
525- return add! (true , t, false , tp, p1, p2)
526- end
0 commit comments