Skip to content

Commit a0ee325

Browse files
committed
address review comments
1 parent c83eca1 commit a0ee325

11 files changed

Lines changed: 104 additions & 97 deletions

File tree

docs/src/appendix/categories.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ justified.
668668
Before continuing, let us use some examples to sketch the relevance of the concept of fusion
669669
categories. As mentioned, the categories ``\mathbf{Vect}_𝕜`` and ``\mathbf{SVect}_𝕜`` have
670670
``I ≂ 𝕜`` as simple object. For ``\mathbf{Vect}``, this is the only simple object, i.e. any
671-
other vector space ``V`` over ``𝕜``, can be thought of as a direct sum over
671+
other vector space ``V`` over ``𝕜`` can be thought of as a direct sum over
672672
``N^V_I = \mathrm{dim}(V)`` multiple copies of ``𝕜``. In ``\mathbf{SVect}``, the object
673673
``J = 0 ⊕ 𝕜`` with ``J_0=0`` the zero dimensional space and ``J_1 ≂ 𝕜`` is another simple
674674
object. Clearly, there are no non-zero grading preserving morphisms between ``I`` and ``J``,
@@ -884,14 +884,15 @@ allows to conclude that
884884
``∑_ν [B^{ab}_c]^{ν}_{μ} \overline{[B^{ab}_c]^{ν}_{μ′}} = \delta_{μ,μ′}``, i.e. ``B^{ab}_c``
885885
is a unitary matrix. The same result follows for ``A^{ab}_c`` in analogue fashion.
886886

887-
!!! note In the context of fusion categories, one often resorts to the so-called *isotopic*
888-
normalization convention, where splitting tensors are normalized as
889-
``(X^{ab}_{c,μ})^† ∘ X^{ab}_{c′,\mu′} = \sqrt{\frac{d_a d_b}{d_c}} δ_{c,c′} δ_{μ,μ′} \mathrm{id}_c``.
890-
This kills some of the quantum dimensions in formulas like the ones above and essentially
891-
allows to rotate the graphical notation of splitting and fusion tensors (up to a unitary
892-
transformation). Nonetheless, for our implementation of tensors and manipulations thereof
893-
(in particular orthonormal factorizations such as the singular value decomposition), we find
894-
it more convenient to work with the original normalization convention.
887+
!!! note
888+
In the context of fusion categories, one often resorts to the so-called *isotopic*
889+
normalization convention, where splitting tensors are normalized as
890+
``(X^{ab}_{c,μ})^† ∘ X^{ab}_{c′,\mu′} = \sqrt{\frac{d_a d_b}{d_c}} δ_{c,c′} δ_{μ,μ′} \mathrm{id}_c``.
891+
This kills some of the quantum dimensions in formulas like the ones above and essentially
892+
allows to rotate the graphical notation of splitting and fusion tensors (up to a unitary
893+
transformation). Nonetheless, for our implementation of tensors and manipulations thereof
894+
(in particular orthonormal factorizations such as the singular value decomposition), we find
895+
it more convenient to work with the original normalization convention.
895896

896897
Let us again study in more detail the example ``\mathbf{Rep}_{\mathsf{G}}``. The quantum
897898
dimension ``d_a`` of an irrep ``a`` is just the normal vector space dimension (over ``𝕜``)

docs/src/lib/sectors.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ TensorKitSectors.Dihedral
5454
TensorKitSectors.ProductGroup
5555
```
5656

57-
The following types are used to characterise different properties of the different types of
57+
The following types are used to characterize different properties of the different types of
5858
sectors:
5959

6060
```@docs

docs/src/lib/spaces.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ removeunit(::ProductSpace, ::Val{i}) where {i}
119119
```
120120

121121
There are also specific methods for `HomSpace` instances, that are used in determining the
122-
resuling `HomSpace` after applying certain tensor operations.
122+
resulting `HomSpace` after applying certain tensor operations.
123123

124124
```@docs
125125
flip(W::HomSpace{S}, I) where {S}

docs/src/lib/tensors.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ Base.getindex(::AbstractTensorMap, ::FusionTree, ::FusionTree)
130130
Base.setindex!(::AbstractTensorMap, ::Any, ::FusionTree, ::FusionTree)
131131
```
132132

133-
For a tensor `t` with `FusionType(sectortype(t)) isa UniqueFusion`, fusion trees are
133+
For a tensor `t` with `FusionStyle(sectortype(t)) isa UniqueFusion`, fusion trees are
134134
completely determined by the outcoming sectors, and the data can be accessed in a more
135135
straightforward way:
136136
```@docs
@@ -157,24 +157,24 @@ Random.randexp!
157157
The operations that can be performed on an `AbstractTensorMap` can be organized into the
158158
following categories:
159159

160-
* *vector operations*: these do not change the `space` or index strucure of a tensor and can
160+
* *vector operations*: these do not change the `space` or index structure of a tensor and can
161161
be straightforwardly implemented on on the full data. All the methods described in
162162
[VectorInterface.jl](https://github.com/Jutho/VectorInterface.jl) are supported. For
163163
compatibility reasons, we also provide implementations for equivalent methods from
164164
LinearAlgebra.jl, such as `axpy!`, `axpby!`.
165165

166166
* *index manipulations*: these change (permute) the index structure of a tensor, which
167167
affects the data in a way that is fully determined by the categorical data of the
168-
`sectortype` of the tensor.
169-
168+
`sectortype` of the tensor .
169+
170170
* *(planar) contractions* and *(planar) traces* (i.e., contractions with identity tensors).
171171
Tensor contractions correspond to a combination of some index manipulations followed by a
172172
composition or multiplication of the tensors in their role as linear maps. Tensor
173-
contractions are however of such important and frequency that they require a dedicated
173+
contractions are however of such importance and frequency that they require a dedicated
174174
implementation.
175175

176-
* *tensor factorisations*, which relies on their identification of tensors with linear maps
177-
between tensor spaces. The factorisations are applied as ordinary matrix factorisations to
176+
* *tensor factorizations*, which relies on their identification of tensors with linear maps
177+
between tensor spaces. The factorizations are applied as ordinary matrix factorizations to
178178
the matrix blocks associated with the coupled charges.
179179

180180
### Index manipulations
@@ -222,7 +222,7 @@ contract!
222222

223223
## `TensorMap` factorizations
224224

225-
The factorisation methods are powered by
225+
The factorization methods are powered by
226226
[MatrixAlgebraKit.jl](https://github.com/QuantumKitHub/MatrixAlgebraKit.jl) and all follow
227227
the same strategy. The idea is that the `TensorMap` is interpreted as a linear map based on
228228
the current partition of indices between `domain` and `codomain`, and then the entire range

docs/src/man/fusiontrees.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,24 +398,25 @@ abelian groups, all irreps are one-dimensional.
398398

399399
Some examples:
400400
```@repl fusiontrees
401+
using LinearAlgebra # hide
401402
s = Irrep[SU₂](1/2)
402403
iter = fusiontrees((s, s, s, s), SU2Irrep(1))
403404
f = first(iter)
404405
convert(Array, f)
405406
406407
LinearAlgebra.I ≈ convert(Array, FusionTree((SU2Irrep(1/2),), SU2Irrep(1/2), (false,), ()))
407408
Z = adjoint(convert(Array, FusionTree((SU2Irrep(1/2),), SU2Irrep(1/2), (true,), ())))
408-
transpose(Z) ≈ frobeniusschur(SU2Irrep(1/2)) * Z
409+
transpose(Z) ≈ frobenius_schur_phase(SU2Irrep(1/2)) * Z
409410
410411
LinearAlgebra.I ≈ convert(Array, FusionTree((Irrep[SU₂](1),), Irrep[SU₂](1), (false,), ()))
411412
Z = adjoint(convert(Array, FusionTree((Irrep[SU₂](1),), Irrep[SU₂](1), (true,), ())))
412-
transpose(Z) ≈ frobeniusschur(Irrep[SU₂](1)) * Z
413+
transpose(Z) ≈ frobenius_schur_phase(Irrep[SU₂](1)) * Z
413414
414415
#check orthogonality
415416
for f1 in iter
416417
for f2 in iter
417418
dotproduct = dot(convert(Array, f1), convert(Array, f2))
418-
println("< $f1, $f2> = $dotproduct")
419+
println("<$f1, $f2> = $dotproduct")
419420
end
420421
end
421422
```

docs/src/man/gradedspaces.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ struct GradedSpace{I<:Sector, D} <: ElementarySpace
1414
end
1515
```
1616
Here, `D` is a type parameter to denote the data structure used to store the degeneracy or
17-
multiplicity dimensions ``n_a`` of the different sectors. For conviency, `Vect[I]` will
17+
multiplicity dimensions ``n_a`` of the different sectors. For convenience, `Vect[I]` will
1818
return the fully concrete type with `D` specified.
1919

2020
Note that, conventionally, a graded vector space is a space that has a natural direct sum

docs/src/man/intro.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ map ``W → V`` is often denoted as a rank 2 tensor in ``V ⊗ W^*``, where ``W^
5555
to the dual space of ``W``. This simple example introduces two new concepts.
5656

5757
1. Typical vector spaces can appear in the domain and codomain in different related forms,
58-
e.g. as normal space or dual space. In fact, the most generic case is that every vector
59-
space ``V`` has associated with it a
58+
e.g. as normal spaces or dual spaces. In fact, the most generic case is that every
59+
vector space ``V`` has associated with it a
6060
[dual space](https://en.wikipedia.org/wiki/Dual_space) ``V^*``, a
6161
[conjugate space](https://en.wikipedia.org/wiki/Complex_conjugate_vector_space)
6262
``\overline{V}`` and a conjugate dual space ``\overline{V}^*``. The four different

docs/src/man/sectors.md

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ particular, the quantum dimensions ``d_a`` and Frobenius-Schur phase ``χ_a`` an
173173
(only if ``a == \overline{a}``) are encoded in the F-symbol. They are obtained as
174174
[`dim(a)`](@ref), [`frobenius_schur_phase(a)`](@ref) and
175175
[`frobenius_schur_indicator(a)`](@ref). These functions have default definitions which
176-
compute the requested data from `Fsymbol(a, conj(a), a, a, one(a), one(a))`, but they can be
177-
overloaded in case the value can be computed more efficiently. The same holds for related
176+
compute the requested data from `Fsymbol(a, conj(a), a, a, unit(a), unit(a))`, but they can
177+
be overloaded in case the value can be computed more efficiently. The same holds for related
178178
fusion manipulations such as the B-symbol, which is obtained as [`Bsymbol(a, b, c)`](@ref).
179179
Finally, the twist associated with a sector `a` is obtained as [`twist(a)`](@ref), which
180-
also has a default implementation in terms of the R-symbol. In addition, tThe function
180+
also has a default implementation in terms of the R-symbol. In addition, the function
181181
`isunit` is provided to facilitate checking whether a sector is a unit sector, in particular
182182
for the non-trivial case of the multi-fusion category case, which we do not discuss here.
183183

@@ -374,7 +374,7 @@ Irrep[U₁](0.5)
374374
U1Irrep(0.4)
375375
U1Irrep(1) ⊗ Irrep[U₁](1//2)
376376
u = first(U1Irrep(1) ⊗ Irrep[U₁](1//2))
377-
Nsymbol(u, conj(u), one(u))
377+
Nsymbol(u, dual(u), unit(u))
378378
```
379379

380380
We similarly implement the irreps of the finite cyclic groups ``\mathbb{Z}_N``, where we
@@ -505,7 +505,7 @@ explicitly restricted the scalar type of `SU2Irrep` to `Float64` for efficiency.
505505
The following example illustrates the usage of `SU2Irrep`
506506
```@repl sectors
507507
s = SU2Irrep(3//2)
508-
conj(s)
508+
dual(s)
509509
dim(s)
510510
collect(s ⊗ s)
511511
for s2 in s ⊗ s
@@ -516,17 +516,19 @@ end
516516
```
517517

518518
Other non-abelian groups for which the irreps are implemented are the dihedral groups
519-
``\mathsf{D}_N``, and the semidirect product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of
520-
quantum systems, the latter occurs in the case of systems with particle hole symmetry and
521-
the non-trivial element of ``ℤ_2`` acts as charge conjugation ``C``. It has the effect of
522-
interchaning ``\mathsf{U}_1`` irreps ``n`` and ``-n``, and turns them together in a joint
523-
2-dimensional index, except for the case ``n=0``. Irreps are therefore labeled by integers
524-
``n ≧ 0``, however for ``n=0`` the ``ℤ₂`` symmetry can be realized trivially or
525-
non-trivially, resulting in an even and odd one-dimensional irrep with ``\mathsf{U})_1``
526-
charge ``0``. Given ``\mathsf{U}_1 ≂ \mathsf{SO}_2``, this group is also simply known as
527-
``\mathsf{O}_2``, and the two representations with `` n = 0`` are the scalar and
528-
pseudo-scalar, respectively. However, because we also allow for half integer
529-
representations, we refer to it as `Irrep[CU₁]` or `CU1Irrep` in full.
519+
``\mathsf{D}_N``, the alternating group of order four ``mathsf{A}_4`` and the semidirect
520+
product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of quantum systems, the latter occurs in the
521+
case of systems with particle hole symmetry and the non-trivial element of ``ℤ_2`` acts as
522+
charge conjugation ``C``. It has the effect of interchanging ``\mathsf{U}_1`` irreps ``n``
523+
and ``-n``, and turns them together in a joint two-dimensional index, except for the case
524+
``n=0``. Irreps are therefore labeled by integers ``n ≧ 0``, however for ``n=0`` the ``ℤ₂``
525+
symmetry can be realized trivially or non-trivially, resulting in an even and odd
526+
one-dimensional irrep with ``\mathsf{U}_1`` charge ``0``. Given
527+
``\mathsf{U}_1 ≂ \mathsf{SO}_2``, this group is also simply known as ``\mathsf{O}_2``, and
528+
the two representations with `` n = 0`` are the scalar and pseudo-scalar, respectively.
529+
However, because we also allow for half integer representations, we refer to it as
530+
`Irrep[CU₁]` or `CU1Irrep` in full.
531+
530532
```julia
531533
struct CU1Irrep <: AbstractIrrep{CU₁}
532534
j::HalfInt # value of the U1 charge
@@ -556,8 +558,8 @@ the different cases for the arguments of `Fsymbol`. For the dihedrial groups
556558
the representation theory is obtained quite similarly, and is implmented as the type
557559
[`DNIrrep{N}`](@ref).
558560

559-
By default, none of the groups mentioned above have a reprenenstation theory for which
560-
`FusionStyle(I) == GenericFusion()`, i.e. where fusion mulitplicities are required. An
561+
Of the aforementioned groups, only ``mathsf{A}_4`` has a representation theory for which
562+
`FusionStyle(I) == GenericFusion()`, i.e. where fusion mulitplicities are required. Another
561563
example where this does appear is for the irreps of `SU{N}` for `N>2`. Such sectors are
562564
supported through
563565
[SUNRepresentations.jl](https://github.com/QuantumKitHub/SUNRepresentations.jl), which
@@ -575,22 +577,22 @@ examples
575577
```@repl sectors
576578
a = Z3Irrep(1) ⊠ Irrep[U₁](1)
577579
typeof(a)
578-
conj(a)
579-
one(a)
580+
dual(a)
581+
unit(a)
580582
dim(a)
581583
collect(a ⊗ a)
582584
FusionStyle(a)
583585
b = Irrep[ℤ₃](1) ⊠ Irrep[SU₂](3//2)
584586
typeof(b)
585-
conj(b)
586-
one(b)
587+
dual(b)
588+
unit(b)
587589
dim(b)
588590
collect(b ⊗ b)
589591
FusionStyle(b)
590592
c = Irrep[SU₂](1) ⊠ SU2Irrep(3//2)
591593
typeof(c)
592-
conj(c)
593-
one(c)
594+
dual(c)
595+
unit(c)
594596
dim(c)
595597
collect(c ⊗ c)
596598
FusionStyle(c)
@@ -608,7 +610,7 @@ used to create `ProductSector{Tuple{Irrep[ℤ₃], Irrep[CU₁]}}`. Instances of
608610
constructed by giving a number of arguments, where the first argument is used to construct
609611
the first sector, and so forth. Furthermore, for representations of groups, we also enabled
610612
the notation `Irrep[ℤ₃ × CU₁]`, with `×` obtained using `\times+TAB`. However, this is
611-
merely for convience, as `Irrep[ℤ₃] ⊠ Irrep[CU₁]` is not a subtype of the abstract type
613+
merely for convenience, as `Irrep[ℤ₃] ⊠ Irrep[CU₁]` is not a subtype of the abstract type
612614
`AbstractIrrep{ℤ₃ × CU₁}`. As is often the case with the Julia type system, the purpose of
613615
subtyping `AbstractIrrep` was to share common functionality and thereby simplify the
614616
implementation of irreps of the different groups discussed above, but not to express a
@@ -831,13 +833,13 @@ Finally, as mentioned above, a recent extension prepares TensorKitSectors.jl to
831833
multi-fusion categories, where the sectors (simple objects) are organized in a matrix-like
832834
structure and thus have an additional row and column index. Fusion between sectors is only
833835
possible when the row and column indices match appropriately; otherwise the fusion product
834-
is empty. In this structure, the different groups of "diagonal" sectors define separate
835-
fusion categories, whereas the off-diagonal sectors define bimodule categories between these
836-
fusion categories. Every diagonal group has its own unit sector, which also acts as the left
837-
/ right unit for other sectors in the same column / row. The global unit object is not
838-
simple, but rather given by the direct sum of all diagonal unit sectors. We do not document
839-
or illustrate this structure here, but refer to the relevant functions [`leftunit`](@ref),
840-
[`rightunit`](@ref), [`allunits`](@ref) and [`UnitStyle`](@ref) for more information.
841-
Furthermore, we refer to
836+
is empty. In this structure, the different *diagonal* sectors define separate fusion
837+
categories, whereas the *off-diagonal* sectors define bimodule categories between these
838+
fusion categories. Every diagonal set of sectors has its own unit sector, which also acts as
839+
the left / right unit for other sectors in the same column / row. The global unit object is
840+
not simple, but rather given by the direct sum of all diagonal unit sectors. We do not
841+
document or illustrate this structure here, but refer to the relevant functions
842+
[`leftunit`](@ref), [`rightunit`](@ref), [`allunits`](@ref) and [`UnitStyle`](@ref) for more
843+
information. Furthermore, we refer to
842844
[MultiTensorKit.jl](https://github.com/QuantumKitHub/MultiTensorKit.jl) for examples and
843-
ongoing development work on using multi-fusion categories.
845+
ongoing development work on using multi-fusion categories.

docs/src/man/spaces.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ abstract type VectorSpace end
1515
Technically speaking, this name does not capture the full generality that TensorKit.jl
1616
supports, as instances of subtypes of `VectorSpace` can encode general objects in linear
1717
monoidal categories, which are not necessarily vector spaces. However, in order not to make
18-
the remaining discussion to abstract or complicated, we will simply use the nomenclature of
18+
the remaining discussion too abstract or complicated, we will simply use the nomenclature of
1919
vector spaces. In particular, we define two abstract subtypes
2020
```julia
2121
abstract type ElementarySpace <: VectorSpace end

docs/src/man/tensormanipulations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ note that we have a conjugation syntax within the context of [tensor contraction
220220
ss_tensor_contraction).
221221

222222
To show the effect of `twist`, we now consider a type of sector `I` for which
223-
`BraidingStyle{I} != Bosonic()`. In particular, we use `FibonacciAnyon`. We cannot convert
223+
`BraidingStyle(I) != Bosonic()`. In particular, we use `FibonacciAnyon`. We cannot convert
224224
the resulting `TensorMap` to an `Array`, so we have to rely on indirect tests to verify our
225225
results.
226226

0 commit comments

Comments
 (0)