-
Notifications
You must be signed in to change notification settings - Fork 56
Some more documentation progress #345
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
|
After the build completes, the updated documentation will be available here |
| object ``V``, referred to as `dim(V)` in TensorKit.jl. | ||
|
|
||
| For further information and a more detailed treatment of rigid and pivotal categories, we | ||
| refer to [^turaev] and [^selinger]. We conclude this section by studying the example of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just an idea, but the way the citations are printed in the docs is precisely how you define it here, so e.g. [turaev] and [selinger]. Do we want to capitalise the names?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes that is perhaps a good idea.
| Before continuing, let us use some examples to sketch the relevance of the concept of fusion | ||
| categories. As mentioned, the categories ``\mathbf{Vect}_𝕜`` and ``\mathbf{SVect}_𝕜`` have | ||
| ``I ≂ 𝕜`` as simple object. For ``\mathbf{Vect}``, this is the only simple object, i.e. any | ||
| other vector space ``V`` over ``𝕜``, can be thought of as a direct sum over |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| other vector space ``V`` over ``𝕜``, can be thought of as a direct sum over | |
| other vector space ``V`` over ``𝕜`` can be thought of as a direct sum over |
| manipulations thereof (in particular orthonormal factorizations such as the singular | ||
| value decomposition), we find it more convenient to work with the original normalization | ||
| convention. | ||
| !!! note In the context of fusion categories, one often resorts to the so-called *isotopic* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This note block isn't working. The main text needs to start on a new line with four spaces (https://documenter.juliadocs.org/stable/showcase/#Admonitions)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually this might just be an artefact of the preview, since it's fine in the current stable version.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now I think the note blocks got destroyed by the automatic Markdown formatting that did happen in the final commit because of how my VSCode at the office desktop was set up.
I will have to disable that formatter and revert to manual formatting as I originally intended.
|
|
||
| The following types are used to characterise different properties of the different types | ||
| of sectors: | ||
| The following types are used to characterise different properties of the different types of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The following types are used to characterise different properties of the different types of | |
| The following types are used to characterize different properties of the different types of |
Since American English is preferred in the docs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Somehow I cannot commit this suggestion directly so I'll have to change it manually.
| Because we sometimes want to customize the string representation of our sector types, | ||
| we also have the following method: | ||
| Mapping between sectors and linear indices is only used for sectors `I` for which | ||
| `Base.IteratorSize(values(I)) == HasLength()`. In that case, we map an index `i` to a sector |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this true? I can call e.g. values(SU2Irrep)[3] and it gives SU2Irrep(1)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The original reason for that method is that in the spaces, instead of a Dict{Sector,Int} for the degeneracies we are storing a NTuple{N, Int} and using direct indexing. This requires a finite and compile-time known number of different sectors.
I would have to double check, but I don't think we are really using that function for anything else right now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But yes, it is true. There is a default getindex(::SectorValues{I}, i) that really just runs the values(I) iterator until it reaches the ith element. The same with findindex(::SectorValues{I}, c::I) that runs the iterator and counts how long it takes before the requested sector c is reached.
| There are also specific methods for `HomSpace` instances, that are used in determining | ||
| the resuling `HomSpace` after applying certain tensor operations. | ||
| There are also specific methods for `HomSpace` instances, that are used in determining the | ||
| resuling `HomSpace` after applying certain tensor operations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| resuling `HomSpace` after applying certain tensor operations. | |
| resulting `HomSpace` after applying certain tensor operations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This suggestion I can also not commit directly. Very strange.
| ``` | ||
|
|
||
| For a tensor `t` with `FusionType(sectortype(t)) isa UniqueFusion`, fusion trees are | ||
| For a tensor `t` with `FusionType(sectortype(t)) isa UniqueFusion`, fusion trees are |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| For a tensor `t` with `FusionType(sectortype(t)) isa UniqueFusion`, fusion trees are | |
| For a tensor `t` with `FusionStyle(sectortype(t)) isa UniqueFusion`, fusion trees are |
| * *vector operations*: these do not change the `space` or index strucure of a tensor and can | ||
| be straightforwardly implemented on on the full data. All the methods described in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| * *vector operations*: these do not change the `space` or index strucure of a tensor and can | |
| be straightforwardly implemented on on the full data. All the methods described in | |
| * *vector operations*: these do not change the `space` or index structure of a tensor and can | |
| be straightforwardly implemented on the full data. All the methods described in |
| dedicated implementation. | ||
| Tensor contractions correspond to a combination of some index manipulations followed by a | ||
| composition or multiplication of the tensors in their role as linear maps. Tensor | ||
| contractions are however of such important and frequency that they require a dedicated |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| contractions are however of such important and frequency that they require a dedicated | |
| contractions are however of such importance and frequency that they require a dedicated |
| between tensor spaces. The factorisations are applied as ordinary matrix factorisations to | ||
| the matrix blocks associated with the coupled charges. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| between tensor spaces. The factorisations are applied as ordinary matrix factorisations to | |
| the matrix blocks associated with the coupled charges. | |
| between tensor spaces. The factorizations are applied as ordinary matrix factorizations to | |
| the matrix blocks associated with the coupled charges. |
There's another "factorisation" in the line above
| entire range of MatrixAlgebraKit functions can be called. | ||
| Factorizing a tensor according to a different partition of the indices is possible | ||
| by prepending the factorization step with an explicit call to [`permute`](@ref) or [`transpose`](@ref). | ||
| The factorisation methods are powered by |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The factorisation methods are powered by | |
| The factorization methods are powered by |
| to the dual space of ``W``. This simple example introduces two new concepts. | ||
|
|
||
| 1. Typical vector spaces can appear in the domain and codomain in different related forms, | ||
| e.g. as normal space or dual space. In fact, the most generic case is that every vector |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| e.g. as normal space or dual space. In fact, the most generic case is that every vector | |
| e.g. as normal spaces or dual spaces. In fact, the most generic case is that every vector |
| which we can obtain by typing `⊗` (i.e. `\otimes+TAB`), although for simplicity also the | ||
| usual multiplication sign `*` does the job. Note also that `A` is printed as an instance of | ||
| a parametric type `TensorMap`, which we will discuss below and contains `Tensor`. | ||
| Note that we entered the tensor size not as plain dimensions, by specifying the vector space |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Note that we entered the tensor size not as plain dimensions, by specifying the vector space | |
| Note that we entered the tensor size not as plain dimensions, but by specifying the vector space |
| i.e. `ℝ^n` can also be created without Unicode using the longer syntax `CartesianSpace(n)`. | ||
| It is subtype of `ElementarySpace`, with a standard (Euclidean) inner product | ||
| over the real numbers. Furthermore, | ||
| It is subtype of `ElementarySpace`, with a standard (Euclidean) inner product over the real |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| It is subtype of `ElementarySpace`, with a standard (Euclidean) inner product over the real | |
| It is a subtype of `ElementarySpace` with a standard (Euclidean) inner product over the real |
| numbers. Furthermore, | ||
|
|
||
| ```@repl tutorial | ||
| W = ℝ^3 ⊗ ℝ^2 ⊗ ℝ^4 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line 60 has a typo: Given that they are behave as vectors, they also...
| TensorKit.jl reexports the `@tensor` macro | ||
|
|
||
| ```@repl tutorial | ||
| @tensor D[a,b,c,d] := A[a,b,e] * B[d,c,e] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line 105 and onwards uses the outdated tsvd function to illustrate a factorization, so the REPL tutorial is just showing errors. This continues to line 141 and 177-183.
| meaning to a direct sum of tensor product spaces. | ||
|
|
||
| Time for some more examples: | ||
| ```@repl tensors |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This REPL is failing because TensorKit isn't exported, and t and V1 aren't defined
| in a new destination tensor, but just modifies the tensor `t` in place. Twisting several | ||
| indices simultaneously can be obtained by using the defining property | ||
|
|
||
| ``θ_{V⊗W} = τ_{W,V} ∘ (θ_W ⊗ θ_V) ∘ τ_{V,W} = (θ_V ⊗ θ_W) ∘ τ_{W,V} ∘ τ_{V,W}.`` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ``θ_{V⊗W} = τ_{W,V} ∘ (θ_W ⊗ θ_V) ∘ τ_{V,W} = (θ_V ⊗ θ_W) ∘ τ_{W,V} ∘ τ_{V,W}.`` | |
| ``θ_{V⊗W} = τ_{W,V} ∘ (θ_W ⊗ θ_V) ∘ τ_{V,W} = (θ_V ⊗ θ_W) ∘ τ_{W,V} ∘ τ_{V,W},`` |
| have no effect. Let us start with some examples, in which we illustrate that, albeit | ||
| `permute` might act highly non-trivial on the fusion trees and on the corresponding data, | ||
| after conversion to a regular `Array` (when possible), it just acts like `permutedims` | ||
| ```@repl tensors |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as above
| BraidingStyle(sectortype(t)) | ||
| ``` | ||
| Note that `transpose` acts like one would expect on a `TensorMap{T,S,1,1}`. On a | ||
| `TensorMap{TS,N₁,N₂}`, because `transpose` replaces the codomain with the dual of the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| `TensorMap{TS,N₁,N₂}`, because `transpose` replaces the codomain with the dual of the | |
| `TensorMap{T,S,N₁,N₂}`, because `transpose` replaces the codomain with the dual of the |
| Note that `transpose` acts like one would expect on a `TensorMap{T,S,1,1}`. On a | ||
| `TensorMap{TS,N₁,N₂}`, because `transpose` replaces the codomain with the dual of the | ||
| domain, which has its tensor product operation reversed, this in the end amounts in a | ||
| complete reversal of all tensor indices when representing it as a plain mutli-dimensional |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| complete reversal of all tensor indices when representing it as a plain mutli-dimensional | |
| complete reversal of all tensor indices when representing it as a plain multi-dimensional |
| ss_tensor_contraction). | ||
|
|
||
| To show the effect of `twist`, we now consider a type of sector `I` for which | ||
| `BraidingStyle{I} != Bosonic()`. In particular, we use `FibonacciAnyon`. We cannot convert |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| `BraidingStyle{I} != Bosonic()`. In particular, we use `FibonacciAnyon`. We cannot convert | |
| `BraidingStyle(I) != Bosonic()`. In particular, we use `FibonacciAnyon`. We cannot convert |
| the resulting `TensorMap` to an `Array`, so we have to rely on indirect tests to verify our | ||
| results. | ||
|
|
||
| ```@repl tensors |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here
| Other factorizations that are provided by TensorKit.jl are orthogonal or unitary in nature, | ||
| and thus always require a Euclidean inner product. However, they don't require equal domain | ||
| and codomain. Let us first discuss the *singular value decomposition*, for which we define | ||
| and export the methods [`tsvd`](@ref) and `tsvd!` (where as always, the latter destroys the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tsvd mentioned. In general this section is outdated and doesn't mention MAK
| (only if ``a == \overline{a}``) are encoded in the F-symbol. They are obtained as | ||
| [`dim(a)`](@ref), [`frobenius_schur_phase(a)`](@ref) and | ||
| [`frobenius_schur_indicator(a)`](@ref). These functions have default definitions which | ||
| compute the requested data from `Fsymbol(a, conj(a), a, a, one(a), one(a))`, but they can be |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| compute the requested data from `Fsymbol(a, conj(a), a, a, one(a), one(a))`, but they can be | |
| compute the requested data from `Fsymbol(a, dual(a), a, a, unit(a), unit(a))`, but they can be |
I think it's fine to not make the discrepancy between unit and left/rightunit
| overloaded in case the value can be computed more efficiently. The same holds for related | ||
| fusion manipulations such as the B-symbol, which is obtained as [`Bsymbol(a, b, c)`](@ref). | ||
| Finally, the twist associated with a sector `a` is obtained as [`twist(a)`](@ref), which | ||
| also has a default implementation in terms of the R-symbol. In addition, tThe function |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| also has a default implementation in terms of the R-symbol. In addition, tThe function | |
| also has a default implementation in terms of the R-symbol. In addition, the function |
| Groups themselves are abstract types without any functionality (at least for now). We also | ||
| provide a number of convenient Unicode aliases. These group names are probably self- | ||
| explanatory, except for `CU₁` which is explained below. | ||
| Groups themselves are abstract types without any functionality (at least for now). However, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mention GroupElement sector here perhaps?
| automatic conversion and pretty printing are provided, as illustrated by the following | ||
| example | ||
| you should not worry about the details of `HalfInt` and additional methods for automatic | ||
| conversion and pretty printing are provided, as illustrated by the following example | ||
| ```@repl sectors | ||
| Irrep[U₁](0.5) | ||
| U1Irrep(0.4) | ||
| U1Irrep(1) ⊗ Irrep[U₁](1//2) | ||
| u = first(U1Irrep(1) ⊗ Irrep[U₁](1//2)) | ||
| Nsymbol(u, conj(u), one(u)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Nsymbol(u, conj(u), one(u)) | |
| Nsymbol(u, dual(u), unit(u)) |
| WignerSymbols.jl is able to generate the required data in arbitrary precision, we have | ||
| explicitly restricted the scalar type of `SU2Irrep` to `Float64` for efficiency. | ||
|
|
||
| The following example illustrates the usage of `SU2Irrep` | ||
| ```@repl sectors | ||
| s = SU2Irrep(3//2) | ||
| conj(s) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| conj(s) | |
| dual(s) |
| However, because we also allow for half integer representations, we refer to it as | ||
| `Irrep[CU₁]` or `CU1Irrep` in full. | ||
| Other non-abelian groups for which the irreps are implemented are the dihedral groups | ||
| ``\mathsf{D}_N``, and the semidirect product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ``\mathsf{D}_N``, and the semidirect product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of | |
| ``\mathsf{D}_N``, the alternating group of order 4 ``\mathsf{A}_4``, and the semidirect product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of |
| ``\mathsf{D}_N``, and the semidirect product ``\mathsf{U}₁ ⋉ ℤ_2``. In the context of | ||
| quantum systems, the latter occurs in the case of systems with particle hole symmetry and | ||
| the non-trivial element of ``ℤ_2`` acts as charge conjugation ``C``. It has the effect of | ||
| interchaning ``\mathsf{U}_1`` irreps ``n`` and ``-n``, and turns them together in a joint |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| interchaning ``\mathsf{U}_1`` irreps ``n`` and ``-n``, and turns them together in a joint | |
| interchanging ``\mathsf{U}_1`` irreps ``n`` and ``-n``, and turns them together in a joint |
| interchaning ``\mathsf{U}_1`` irreps ``n`` and ``-n``, and turns them together in a joint | ||
| 2-dimensional index, except for the case ``n=0``. Irreps are therefore labeled by integers | ||
| ``n ≧ 0``, however for ``n=0`` the ``ℤ₂`` symmetry can be realized trivially or | ||
| non-trivially, resulting in an even and odd one-dimensional irrep with ``\mathsf{U})_1`` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| non-trivially, resulting in an even and odd one-dimensional irrep with ``\mathsf{U})_1`` | |
| non-trivially, resulting in an even and odd one-dimensional irrep with ``\mathsf{U}_1`` |
| By default, none of the groups mentioned above have a reprenenstation theory for which | ||
| `FusionStyle(I) == GenericFusion()`, i.e. where fusion mulitplicities are required. An | ||
| example where this does appear is for the irreps of `SU{N}` for `N>2`. Such sectors are | ||
| supported through |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| By default, none of the groups mentioned above have a reprenenstation theory for which | |
| `FusionStyle(I) == GenericFusion()`, i.e. where fusion mulitplicities are required. An | |
| example where this does appear is for the irreps of `SU{N}` for `N>2`. Such sectors are | |
| supported through | |
| Of the abovementioned groups, only ``mathsf{A}_4`` has a representation theory for which | |
| `FusionStyle(I) == GenericFusion()`, i.e. where fusion multiplicities are required. Another | |
| example where this does appear is for the irreps of `SU{N}` for `N>2`. Such sectors are | |
| supported through |
| sectors are obtained using the binary operator `⊠`, which can be entered as `\boxtimes`+TAB. | ||
| The resulting type is called [`ProductSector`](@ref), which simply wraps the individual | ||
| sectors, but knows how to combine their fusion and braiding data correctly. First some | ||
| examples | ||
| ```@repl sectors | ||
| a = Z3Irrep(1) ⊠ Irrep[U₁](1) | ||
| typeof(a) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A couple of conjs and ones here below should be replaced by dual and unit, respectively.
| constructed by giving a number of arguments, where the first argument is used to construct | ||
| the first sector, and so forth. Furthermore, for representations of groups, we also enabled | ||
| the notation `Irrep[ℤ₃ × CU₁]`, with `×` obtained using `\times+TAB`. However, this is | ||
| merely for convience, as `Irrep[ℤ₃] ⊠ Irrep[CU₁]` is not a subtype of the abstract type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| merely for convience, as `Irrep[ℤ₃] ⊠ Irrep[CU₁]` is not a subtype of the abstract type | |
| merely for convenience, as `Irrep[ℤ₃] ⊠ Irrep[CU₁]` is not a subtype of the abstract type |
| multi-fusion categories, where the sectors (simple objects) are organized in a matrix-like | ||
| structure and thus have an additional row and column index. Fusion between sectors is only | ||
| possible when the row and column indices match appropriately; otherwise the fusion product | ||
| is empty. In this structure, the different groups of "diagonal" sectors define separate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a better word than "group" that can be used in this and the following sentence?
|
Thanks for the heroic effort @borisdevos , I will try to process all these comments tomorrow. |
|
Also, any general comments? What do you think of the new structure of the manual? Is it an improvement? |
|
It's a global improvement in my opinion. If I had to complain about some stylistic choice, there are certain paragraphs in the docs where a bunch of methods/properties are explained back-to-back, which can be bothersome to read through (although I don't know how often people really read paragraphs from start to finish and just ctrl+f words). In my opinion, one of the best-written parts is the fusion tree manipulations subsection, but maybe I'm just a big fan of lists. Another small remark: some paragraphs in the category theory introduction are also tough to read because there's some inconsistency with the maths written within the paragraph; some of it is not in some latex equation environment. Not a huge gripe, since this part is optional to read. But again, the pros outweigh these minor cons heavily, and the content remains rich and descriptive. I actually learnt/relearnt a lot going through the docs again 😄. |
| value of `isdual`) as [`V1 ⊕ V2`](@ref), where `⊕` is obtained by typing `\oplus`+TAB. | ||
| [`zerospace(V)`](@ref) corresponds to the identity or zero element with respect to this | ||
| direct sum operation, i.e. it corresponds to a zero-dimensional space. Furthermore, | ||
| [`unitspace(V)`] (@ref) applied to an elementary space returns a one-dimensional space, that |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| [`unitspace(V)`] (@ref) applied to an elementary space returns a one-dimensional space, that | |
| [`unitspace(V)`](@ref) applied to an elementary space returns a one-dimensional space, that |
| direct sum operation, i.e. it corresponds to a zero-dimensional space. Furthermore, | ||
| [`unitspace(V)`] (@ref) applied to an elementary space returns a one-dimensional space, that | ||
| is isomorphic to the scalar field underlying the space itself. Finally, we have also | ||
| introduced the non-standard convention `V1 ⊖ V2` (obtained by typing `\ominus`+TAB.) in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| introduced the non-standard convention `V1 ⊖ V2` (obtained by typing `\ominus`+TAB.) in | |
| introduced the non-standard convention [`V1 ⊖ V2`](@ref) (obtained by typing `\ominus`+TAB.) in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think throughout this file the header level of the sections is 3 instead of 2, which makes them not appear in the page list in the sidebar.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think throughout this file the header level of the sections is 3 instead of 2, which makes them not appear in the page list in the sidebar.
|
I tried briefly skimming through the updates to just give some global comments, since it is a bit hard to interleave these/not duplicate the things @borisdevos has already marked (Thanks for the huge amount of work @borisdevos !!!) Considering the markdown formatting, I have also been advocating to indeed use a more "LaTeX" style for line breaks as well. I definitely like the division in more subpages, large pages make it quite hard to quickly jump to the wanted sections and to lose track of what is going on! One suggestion I have is about the order of these pages in the manual section. |
Co-authored-by: Boris De Vos <143942306+borisdevos@users.noreply.github.com>
Co-authored-by: Boris De Vos <143942306+borisdevos@users.noreply.github.com>
This includes a major restructuring (breaking down long pages into separate pages) and a complete rewrite of the
Sectordocumentation. This could become the manual page for TensorKitSectors.jl in time, but for now I would still include it here.By lack of a good Markdown formatter, I switched to breaking lines at natural places (end of sentence, subsentences, …), like one might do with LaTeX documents. Maybe that strategy can lead to clean
git diffs in future (potentially smaller) doc changes, but I am open to other suggestions.This would very much benefit from some proofreading by e.g. @borisdevos , @leburgel , @lkdvos .