@@ -456,30 +456,26 @@ function artin_braid(src::FusionTreeBlock{I,N,0}, i; inv::Bool=false) where {I,N
456456 throw (ArgumentError (" Cannot swap outputs i=$i and i+1 out of only $N outputs" ))
457457
458458 uncoupled = src. uncoupled[1 ]
459- uncoupled′ = TupleTools. setindex (uncoupled, uncoupled[i + 1 ], i)
460- uncoupled′ = TupleTools. setindex (uncoupled′, uncoupled[i], i + 1 )
459+ a, b = uncoupled[i], uncoupled[i + 1 ]
460+ uncoupled′ = TupleTools. setindex (uncoupled, b, i)
461+ uncoupled′ = TupleTools. setindex (uncoupled′, a, i + 1 )
462+ coupled′ = rightone (src. uncoupled[1 ][N])
463+
461464 isdual = src. isdual[1 ]
462465 isdual′ = TupleTools. setindex (isdual, isdual[i], i + 1 )
463466 isdual′ = TupleTools. setindex (isdual′, isdual[i + 1 ], i)
464467 dst = FusionTreeBlock {I} ((uncoupled′, ()), (isdual′, ()))
465468
469+ oneT = one (sectorscalartype (I))
470+
466471 indexmap = treeindex_map (dst)
467472 U = zeros (sectorscalartype (I), length (dst), length (src))
468473
469- for (col, (f, f₂)) in enumerate (fusiontrees (src))
470- a, b = uncoupled[i], uncoupled[i + 1 ]
471- uncoupled′ = TupleTools. setindex (uncoupled, b, i)
472- uncoupled′ = TupleTools. setindex (uncoupled′, a, i + 1 )
473- coupled′ = f. coupled
474- isdual′ = TupleTools. setindex (f. isdual, f. isdual[i], i + 1 )
475- isdual′ = TupleTools. setindex (isdual′, f. isdual[i + 1 ], i)
476- inner = f. innerlines
477- inner_extended = (uncoupled[1 ], inner... , coupled′)
478- vertices = f. vertices
479- oneT = one (sectorscalartype (I))
480-
481- if isone (uncoupled[i]) || isone (uncoupled[i + 1 ])
482- # braiding with trivial sector: simple and always possible
474+ if isone (a) || isone (b) # braiding with trivial sector: simple and always possible
475+ for (col, (f, f₂)) in enumerate (fusiontrees (src))
476+ inner = f. innerlines
477+ inner_extended = (uncoupled[1 ], inner... , coupled′)
478+ vertices = f. vertices
483479 inner′ = inner
484480 vertices′ = vertices
485481 if i > 1 # we also need to alter innerlines and vertices
@@ -492,11 +488,17 @@ function artin_braid(src::FusionTreeBlock{I,N,0}, i; inv::Bool=false) where {I,N
492488 f′ = FusionTree {I} (uncoupled′, coupled′, isdual′, inner′, vertices′)
493489 row = indexmap[treeindex_data ((f′, f₂))]
494490 @inbounds U[row, col] = oneT
495- continue
496491 end
492+ return dst, U
493+ end
497494
498- BraidingStyle (I) isa NoBraiding &&
499- throw (SectorMismatch (" Cannot braid sectors $(uncoupled[i]) and $(uncoupled[i + 1 ]) " ))
495+ BraidingStyle (I) isa NoBraiding &&
496+ throw (SectorMismatch (lazy " Cannot braid sectors $a and $b" ))
497+
498+ for (col, (f, f₂)) in enumerate (fusiontrees (src))
499+ inner = f. innerlines
500+ inner_extended = (uncoupled[1 ], inner... , coupled′)
501+ vertices = f. vertices
500502
501503 if i == 1
502504 c = N > 2 ? inner[1 ] : coupled′
0 commit comments