TensorKit.jl and TensorKitSectors.jl extension for low rank unitary fusion categories, using smallRankUnitaryFusionData and the AnyonWiki.
This package currently provides TensorKit.jl's sectortypes for all objects of multiplicity-free (braided) fusion categories up to rank 7. The full list can be found here, along with the naming convention here.
Additionally, some specific categories with multiplicities have also been added.
The fusion categories adhere to a hierarchical structure of exported abstract types:
BraidedCategory <: FusionCategory <: FusionRingwhich indicate implementations of fusion rules (Nsymbol), associators (Fsymbol) and
braidings (Rsymbol).
Objects in these categories are identified with integers ranging from 1 to R, where 1. These can then be used as any other Sector for constructing TensorMaps.
using TensorKit, CategoryData
𝒞 = CategoryData.Fib # Fibonacci category
𝒪 = Object{𝒞}
@show collect(values(𝒪)) # 1 -> I, 2 -> τ
t = rand(ComplexF64, Vect[𝒪](1 => 2, 2 => 2) ← Vect[𝒪](1 =>2, 2 => 2))The majority of the categories follow the conventions of the AnyonWiki. In particular, both fusion and braided categories have the same first five indices, which are the rank R, multiplicity M, self-duality N, ring index I and category index D₁. The braided categories have an additional sixth index, which is the hexagon index D₂. The pivotal index is not needed, as there is only one for a fixed category index (and hexagon index for braided categories) for which the category is unitary.
When selecting a unitary fusion category 𝒞 or unitary braided fusion category 𝒟, the following syntax can be used:
using CategoryData
𝒞 = UFC{R, M, N, I, D₁}
𝒟 = PMFC{R, M, N, I, D₁, D₂}Some fusion categories are not found in the AnyonWiki, and thus have their own naming convention. These are most easily found by looking at the src/artifacts.jl file or the data branch.
As shown above, the actual Sectors which represent the simple objects of the category are gotten through Object{𝒞} or Object{𝒟} values.
Should a more clear identification of the objects of a particular category be wanted, the macro @objectnames allows one to identify the integers 1 to R with custom Symbols. An already done example is:
using TensorKit, CategoryData
julia> ob = Object{Fib}
Object{Fib}
julia> ob(2)
:τ ∈ Object{Fib}
julia> ob(:τ)
:τ ∈ Object{Fib}
julia> Vect[ob](:I=>1,:τ=>2)
Vect[Object{Fib}](:I=>1, :τ=>2)
julia> rand(ComplexF64, Vect[ob](:I => 1, :τ => 2) ← Vect[ob](:I => 1, :τ => 2))
TensorMap(Vect[Object{Fib}](:I=>1, :τ=>2) ← Vect[Object{Fib}](:I=>1, :τ=>2)):
* Data for fusiontree FusionTree{Object{Fib}}((:I,), :I, (false,), ()) ← FusionTree{Object{Fib}}((:I,), :I, (false,), ()):
0.15222115844866924 + 0.32002944990015136im
* Data for fusiontree FusionTree{Object{Fib}}((:τ,), :τ, (false,), ()) ← FusionTree{Object{Fib}}((:τ,), :τ, (false,), ()):
0.5942898246567924 + 0.2243352505734888im 0.7827101902031756 + 0.18344041627586682im
0.5689163631066297 + 0.5437301086482254im 0.2782368171818388 + 0.6829030974055519imUsing the macro would look like:
@objectnames custom_name = category symbols
@objectnames category symbolsNote: the symbols given here are not of Type{Symbol}.
The data for the fusion categories is stored in the data github branch, and retrieved using the Artifacts package. In particular, in order to add to, or change the data, the following steps should be taken:
- Update the
datagithub branch with the new data. - Release/tag a new version of the data
data-vX.Y.Z, which can then be registered as an artifact. - Check the url of the release, which should be of the following form
"https://github.com/QuantumKitHub/CategoryData.jl/archive/refs/tags/data-vX.Y.Z.tar.gz" - Switch to the
mainbranch, and update theArtifact.tomlfile. This can be done either manually, or by usingArtifactUtils.jl:
julia> using ArtifactUtils
julia> add_artifact!("Artifacts.toml", "fusiondata", "https://github.com/QuantumKitHub/CategoryData.jl/archive/refs/tags/data-vX.Y.Z.tar.gz"; force=true);- Update the
artifact_pathconstant in the source codesrc/artifacts.jl. - Push the changes to the
mainbranch.