@@ -2,8 +2,9 @@ struct FusionTreeBlock{I,N₁,N₂,F<:FusionTreePair{I,N₁,N₂}}
22 trees:: Vector{F}
33end
44
5- function FusionTreeBlock (uncoupled:: Tuple{NTuple{N₁,I},NTuple{N₂,I}} ,
6- isdual:: Tuple{NTuple{N₁,Bool},NTuple{N₂,Bool}} ) where {I<: Sector ,N₁,N₂}
5+ function FusionTreeBlock {I} (uncoupled:: Tuple{NTuple{N₁,I},NTuple{N₂,I}} ,
6+ isdual:: Tuple{NTuple{N₁,Bool},NTuple{N₂,Bool}} ) where {I<: Sector ,
7+ N₁,N₂}
78 F₁ = fusiontreetype (I, N₁)
89 F₂ = fusiontreetype (I, N₂)
910 trees = Vector {Tuple{F₁,F₂}} (undef, 0 )
@@ -66,7 +67,7 @@ function bendright(src::FusionTreeBlock)
6667 (src. uncoupled[2 ]. .. , dual (src. uncoupled[1 ][end ])))
6768 isdual_dst = (TupleTools. front (src. isdual[1 ]),
6869 (src. isdual[2 ]. .. , ! (src. isdual[1 ][end ])))
69- dst = FusionTreeBlock (uncoupled_dst, isdual_dst)
70+ dst = FusionTreeBlock {sectortype(src)} (uncoupled_dst, isdual_dst)
7071
7172 U = transformation_matrix (bendright, dst, src)
7273 return dst, U
@@ -78,7 +79,7 @@ function bendleft(src::FusionTreeBlock)
7879 TupleTools. front (src. uncoupled[2 ]))
7980 isdual_dst = ((src. isdual[1 ]. .. , ! (src. isdual[2 ][end ])),
8081 TupleTools. front (src. isdual[2 ]))
81- dst = FusionTreeBlock (uncoupled_dst, isdual_dst)
82+ dst = FusionTreeBlock {sectortype(src)} (uncoupled_dst, isdual_dst)
8283
8384 U = transformation_matrix (bendleft, dst, src)
8485 return dst, U
@@ -89,7 +90,7 @@ function foldright(src::FusionTreeBlock)
8990 (dual (first (src. uncoupled[1 ])), src. uncoupled[2 ]. .. ))
9091 isdual_dst = (Base. tail (src. isdual[1 ]),
9192 (! first (src. isdual[1 ]), src. isdual[2 ]. .. ))
92- dst = FusionTreeBlock (uncoupled_dst, isdual_dst)
93+ dst = FusionTreeBlock {sectortype(src)} (uncoupled_dst, isdual_dst)
9394
9495 U = transformation_matrix (foldright, dst, src)
9596 return dst, U
@@ -101,7 +102,7 @@ function foldleft(src::FusionTreeBlock)
101102 Base. tail (src. uncoupled[2 ]))
102103 isdual_dst = ((! first (src. isdual[2 ]), src. isdual[1 ]. .. ),
103104 Base. tail (src. isdual[2 ]))
104- dst = FusionTreeBlock (uncoupled_dst, isdual_dst)
105+ dst = FusionTreeBlock {sectortype(src)} (uncoupled_dst, isdual_dst)
105106
106107 U = transformation_matrix (foldleft, dst, src)
107108 return dst, U
@@ -212,7 +213,7 @@ function artin_braid(src::FusionTreeBlock{I,N,0}, i; inv::Bool=false) where {I,N
212213 isdual = src. isdual[1 ]
213214 isdual′ = TupleTools. setindex (isdual, isdual[i], i + 1 )
214215 isdual′ = TupleTools. setindex (isdual′, isdual[i + 1 ], i)
215- dst = FusionTreeBlock ((uncoupled′, ()), (isdual′, ()))
216+ dst = FusionTreeBlock {I} ((uncoupled′, ()), (isdual′, ()))
216217
217218 # TODO : do we want to rewrite `artin_braid` to take double trees instead?
218219 U = transformation_matrix (dst, src) do (f₁, f₂)
@@ -228,7 +229,7 @@ function braid(src::FusionTreeBlock{I,N,0}, p::NTuple{N,Int},
228229 if FusionStyle (I) isa UniqueFusion && BraidingStyle (I) isa SymmetricBraiding
229230 uncoupled′ = TupleTools. _permute (src. uncoupled[1 ], p)
230231 isdual′ = TupleTools. _permute (src. isdual[1 ], p)
231- dst = FusionTreeBlock (uncoupled′, isdual′)
232+ dst = FusionTreeBlock {I} (uncoupled′, isdual′)
232233 U = transformation_matrix (dst, src) do (f₁, f₂)
233234 return ((f₁′, f₂) => c for (f₁, c) in braid (f₁, p, levels))
234235 end
@@ -268,7 +269,7 @@ const _FSBraidKey{I,N₁,N₂} = Tuple{<:FusionTreeBlock{I},Index2Tuple{N₁,N
268269 uncoupled′ = TupleTools. _permute (dst. uncoupled[1 ], p)
269270 isdual′ = TupleTools. _permute (dst. isdual[1 ], p)
270271
271- dst′ = FusionTreeBlock (uncoupled′, isdual′)
272+ dst′ = FusionTreeBlock {I} (uncoupled′, isdual′)
272273 U_tmp = transformation_matrix (dst′, dst) do (f₁, f₂)
273274 return ((f₁′, f₂) => c for (f₁, c) in braid (f₁, p, levels))
274275 end
0 commit comments