Skip to content

Commit ede71b5

Browse files
committed
label_fusion_rule to return pair
1 parent ed52101 commit ede71b5

File tree

6 files changed

+17
-12
lines changed

6 files changed

+17
-12
lines changed

NDTensors/src/lib/SymmetrySectors/src/abstractsector.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ function fusion_rule(c1::AbstractSector, c2::AbstractSector)
5454
end
5555

5656
function fusion_rule(::NotAbelianStyle, c1::C, c2::C) where {C<:AbstractSector}
57-
degen, sectors = label_fusion_rule(C, sector_label(c1), sector_label(c2))
58-
return gradedrange(labelled.(degen, sectors))
57+
sector_degen_pairs = label_fusion_rule(C, sector_label(c1), sector_label(c2))
58+
return gradedrange(sector_degen_pairs)
5959
end
6060

6161
# abelian case: return Sector
@@ -64,7 +64,7 @@ function fusion_rule(::AbelianStyle, c1::C, c2::C) where {C<:AbstractSector}
6464
end
6565

6666
function label_fusion_rule(sector_type::Type{<:AbstractSector}, l1, l2)
67-
return [1], [abelian_label_fusion_rule(sector_type, l1, l2)]
67+
return [abelian_label_fusion_rule(sector_type, l1, l2) => 1]
6868
end
6969

7070
# ================================ GradedAxes interface ==================================

NDTensors/src/lib/SymmetrySectors/src/sector_definitions/fib.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ quantum_dimension(::NotAbelianStyle, f::Fib) = istrivial(f) ? 1.0 : ((1 + √5)
3131

3232
# Fusion rules identical to su2₃
3333
function label_fusion_rule(::Type{Fib}, l1, l2)
34-
degen, suk_sectors = label_fusion_rule(su2{3}, l1, l2)
34+
suk_sectors_degen = label_fusion_rule(su2{3}, l1, l2)
35+
suk_sectors = first.(suk_sectors_degen)
36+
degen = last.(suk_sectors_degen)
3537
sectors = Fib.(sector_label.(suk_sectors))
36-
return degen, sectors
38+
return sectors .=> degen
3739
end
3840

3941
label_to_str(f::Fib) = istrivial(f) ? "1" : "τ"

NDTensors/src/lib/SymmetrySectors/src/sector_definitions/ising.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ quantum_dimension(::NotAbelianStyle, i::Ising) = (sector_label(i) == 1//2) ? √
3131

3232
# Fusion rules identical to su2₂
3333
function label_fusion_rule(::Type{Ising}, l1, l2)
34-
degen, suk_sectors = label_fusion_rule(su2{2}, l1, l2)
34+
suk_sectors_degen = label_fusion_rule(su2{2}, l1, l2)
35+
suk_sectors = first.(suk_sectors_degen)
36+
degen = last.(suk_sectors_degen)
3537
sectors = Ising.(sector_label.(suk_sectors))
36-
return degen, sectors
38+
return sectors .=> degen
3739
end
3840

3941
# TODO: Use `Val` dispatch here?

NDTensors/src/lib/SymmetrySectors/src/sector_definitions/o2.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,5 @@ function label_fusion_rule(::Type{O2}, l1, l2)
7171
end
7272
end
7373
end
74-
return degens, O2.(labels)
74+
return O2.(labels) .=> degens
7575
end

NDTensors/src/lib/SymmetrySectors/src/sector_definitions/su.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ GradedAxes.dual(s::SU{2}) = s
9494
function label_fusion_rule(::Type{<:SU{2}}, s1, s2)
9595
irreps = [SU{2}((i,)) for i in (abs(s1[1] - s2[1])):2:(s1[1] + s2[1])]
9696
degen = ones(Int, length(irreps))
97-
return degen, irreps
97+
return irreps .=> degen
9898
end
9999

100100
# define angular momentum-like interface using half-integers
@@ -123,7 +123,7 @@ function label_fusion_rule(::Type{<:SU{3}}, left, right)
123123
end
124124

125125
if right[1] == 0 # avoid issues with singlet
126-
return [1], [SU{3}(left)]
126+
return [SU{3}(left) => 1]
127127
end
128128

129129
left_row1 = left[1]
@@ -173,5 +173,6 @@ function label_fusion_rule(::Type{<:SU{3}}, left, right)
173173
unique_labels = sort(unique(irreps))
174174
degen = [count(==(irr), irreps) for irr in unique_labels]
175175
sectors = SU{3}.(unique_labels)
176-
return degen, sectors
176+
@show sectors, degen
177+
return sectors .=> degen
177178
end

NDTensors/src/lib/SymmetrySectors/src/sector_definitions/su2k.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ function label_fusion_rule(::Type{su2{k}}, j1, j2) where {k}
2323
labels = collect(abs(j1 - j2):min(k - j1 - j2, j1 + j2))
2424
degen = ones(Int, length(labels))
2525
sectors = su2{k}.(labels)
26-
return degen, sectors
26+
return sectors .=> degen
2727
end

0 commit comments

Comments
 (0)