1- # This file defines the abstract type AbstractCategory
2- # all fusion categories (Z{2}, SU2, Ising...) are subtypes of AbstractCategory
1+ # This file defines the abstract type AbstractSector
2+ # all fusion categories (Z{2}, SU2, Ising...) are subtypes of AbstractSector
33
44using BlockArrays: blocklengths
55using .. LabelledNumbers: LabelledInteger, label, label_type, labelled, unlabel, unlabel_type
66using .. GradedAxes: GradedAxes, blocklabels, fuse_blocklengths, gradedrange, tensor_product
77
8- abstract type AbstractCategory end
8+ abstract type AbstractSector end
99
1010# =================================== Base interface =====================================
11- function Base. isless (c1:: C , c2:: C ) where {C<: AbstractCategory }
12- return isless (category_label (c1), category_label (c2))
11+ function Base. isless (c1:: C , c2:: C ) where {C<: AbstractSector }
12+ return isless (sector_label (c1), sector_label (c2))
1313end
1414
1515# ================================= Sectors interface ====================================
@@ -24,10 +24,10 @@ function trivial(type::Type)
2424 return error (" `trivial` not defined for type $(type) ." )
2525end
2626
27- istrivial (c:: AbstractCategory ) = (c == trivial (c))
27+ istrivial (c:: AbstractSector ) = (c == trivial (c))
2828
29- function category_label (c:: AbstractCategory )
30- return error (" method `category_label ` not defined for type $(typeof (c)) " )
29+ function sector_label (c:: AbstractSector )
30+ return error (" method `sector_label ` not defined for type $(typeof (c)) " )
3131end
3232
3333block_dimensions (g:: AbstractUnitRange ) = block_dimensions (SymmetryStyle (g), g)
3838
3939quantum_dimension (x) = quantum_dimension (SymmetryStyle (x), x)
4040
41- function quantum_dimension (:: NotAbelianStyle , c:: AbstractCategory )
41+ function quantum_dimension (:: NotAbelianStyle , c:: AbstractSector )
4242 return error (" method `quantum_dimension` not defined for type $(typeof (c)) " )
4343end
4444
45- quantum_dimension (:: AbelianStyle , :: AbstractCategory ) = 1
45+ quantum_dimension (:: AbelianStyle , :: AbstractSector ) = 1
4646quantum_dimension (:: AbelianStyle , g:: AbstractUnitRange ) = length (g)
4747quantum_dimension (:: NotAbelianStyle , g:: AbstractUnitRange ) = sum (block_dimensions (g))
4848
4949# =============================== Fusion rule interface ==================================
50- ⊗ (c1:: AbstractCategory , c2:: AbstractCategory ) = fusion_rule (c1, c2)
50+ ⊗ (c1:: AbstractSector , c2:: AbstractSector ) = fusion_rule (c1, c2)
5151
52- function fusion_rule (c1:: AbstractCategory , c2:: AbstractCategory )
52+ function fusion_rule (c1:: AbstractSector , c2:: AbstractSector )
5353 return fusion_rule (combine_styles (SymmetryStyle (c1), SymmetryStyle (c2)), c1, c2)
5454end
5555
56- function fusion_rule (:: NotAbelianStyle , c1:: C , c2:: C ) where {C<: AbstractCategory }
57- degen, sectors = label_fusion_rule (C, category_label (c1), category_label (c2))
56+ function fusion_rule (:: NotAbelianStyle , c1:: C , c2:: C ) where {C<: AbstractSector }
57+ degen, sectors = label_fusion_rule (C, sector_label (c1), sector_label (c2))
5858 return gradedrange (labelled .(degen, sectors))
5959end
6060
61- # abelian case: return Category
62- function fusion_rule (:: AbelianStyle , c1:: C , c2:: C ) where {C<: AbstractCategory }
63- _, sectors = label_fusion_rule (C, category_label (c1), category_label (c2))
61+ # abelian case: return Sector
62+ function fusion_rule (:: AbelianStyle , c1:: C , c2:: C ) where {C<: AbstractSector }
63+ _, sectors = label_fusion_rule (C, sector_label (c1), sector_label (c2))
6464 return only (sectors)
6565end
6666
67- function label_fusion_rule (category_type :: Type{<:AbstractCategory } , :: Any , :: Any )
68- return error (" `label_fusion_rule` not defined for type $(category_type ) ." )
67+ function label_fusion_rule (sector_type :: Type{<:AbstractSector } , :: Any , :: Any )
68+ return error (" `label_fusion_rule` not defined for type $(sector_type ) ." )
6969end
7070
7171# ================================ GradedAxes interface ==================================
7272# tensor_product interface
7373function GradedAxes. fuse_blocklengths (
74- l1:: LabelledInteger{<:Integer,<:AbstractCategory } ,
75- l2:: LabelledInteger{<:Integer,<:AbstractCategory } ,
74+ l1:: LabelledInteger{<:Integer,<:AbstractSector } ,
75+ l2:: LabelledInteger{<:Integer,<:AbstractSector } ,
7676)
7777 return fuse_blocklengths (combine_styles (SymmetryStyle (l1), SymmetryStyle (l2)), l1, l2)
7878end
@@ -93,23 +93,23 @@ function GradedAxes.fuse_blocklengths(
9393end
9494
9595# cast to range
96- to_gradedrange (c:: AbstractCategory ) = to_gradedrange (labelled (1 , c))
96+ to_gradedrange (c:: AbstractSector ) = to_gradedrange (labelled (1 , c))
9797to_gradedrange (l:: LabelledInteger ) = gradedrange ([l])
9898to_gradedrange (g:: AbstractUnitRange ) = g
9999
100- # allow to fuse a category with a GradedUnitRange
101- function GradedAxes. tensor_product (c:: AbstractCategory , g:: AbstractUnitRange )
100+ # allow to fuse a Sector with a GradedUnitRange
101+ function GradedAxes. tensor_product (c:: AbstractSector , g:: AbstractUnitRange )
102102 return tensor_product (to_gradedrange (c), g)
103103end
104104
105- function GradedAxes. tensor_product (g:: AbstractUnitRange , c:: AbstractCategory )
105+ function GradedAxes. tensor_product (g:: AbstractUnitRange , c:: AbstractSector )
106106 return tensor_product (g, to_gradedrange (c))
107107end
108108
109- function GradedAxes. tensor_product (c1:: AbstractCategory , c2:: AbstractCategory )
109+ function GradedAxes. tensor_product (c1:: AbstractSector , c2:: AbstractSector )
110110 return to_gradedrange (fusion_rule (c1, c2))
111111end
112112
113- function GradedAxes. fusion_product (c:: AbstractCategory )
113+ function GradedAxes. fusion_product (c:: AbstractSector )
114114 return to_gradedrange (c)
115115end
0 commit comments