Skip to content

Commit f27547e

Browse files
committed
Slight refactor of artin_braid
1 parent d672fd0 commit f27547e

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

src/fusiontrees/fusiontreeblocks.jl

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)