Skip to content
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

Symplectic Grassmann #700

Merged
merged 70 commits into from
Jan 25, 2024
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
592e3a0
Start documentation of the symplectic Grassmann.
kellertuer Dec 23, 2023
c4f69c3
Merge branch 'master' into kellertuer/more-grassmann
kellertuer Dec 29, 2023
0ed78d5
Finish manifold doc string by adding the tangent spaces.
kellertuer Jan 3, 2024
3b3d1e3
A bit of work on the symplectic inverse.
kellertuer Jan 3, 2024
5d800f6
Adapt a few docs and default shows, implement symplectic Grassmann ch…
kellertuer Jan 5, 2024
c80df09
Undo a chick search-and-replace, that was not careful enough.
kellertuer Jan 5, 2024
60d2944
Fix docs and tests.
kellertuer Jan 5, 2024
95c9848
Further work on Symplectic Grasmann
kellertuer Jan 9, 2024
01434a8
Unify notation to use UTF8 where possible and use J for the symplecti…
kellertuer Jan 11, 2024
5f6409f
delete an accidentially moved file
kellertuer Jan 11, 2024
ab162ba
Worked a bit on math formulae.
kellertuer Jan 11, 2024
770bf76
Rearrange code to avoid redefining functions.
kellertuer Jan 12, 2024
f9769a1
Fix improvised test, fix documentation.
kellertuer Jan 13, 2024
3f5137e
implement `rand!` for Hamiltonians. Deprecate `rand_hamiltonian`.
kellertuer Jan 14, 2024
f4f6cef
Implement exp and the Caley retraction in the quivalence class repres…
kellertuer Jan 15, 2024
5b22c6c
Simplify math.
kellertuer Jan 15, 2024
8982971
Deprecate Symplectic in favour of SymplecticMatrices (cf. #701 Point 1)
kellertuer Jan 18, 2024
385f9b5
Rename SymplecticMatrix to SymplecticElement (#701, Point 2).
kellertuer Jan 18, 2024
de1cee2
this fixes a typo and I am getting a bit tired so I should stop also …
kellertuer Jan 18, 2024
9f8b719
Fix references.
kellertuer Jan 19, 2024
9173543
Unify and extend rands. Introduce Riemannian Gradients.
kellertuer Jan 19, 2024
273de80
Apply suggestions from code review
kellertuer Jan 19, 2024
72d04e1
Fix 2 typos.
kellertuer Jan 19, 2024
9b3dee3
Replace \to with → in LaTeX formulae.
kellertuer Jan 20, 2024
52db300
Start new test file, fix an old test.
kellertuer Jan 20, 2024
009622b
Fix News.md
kellertuer Jan 20, 2024
aca6452
Improve memory a bit.
kellertuer Jan 20, 2024
1e9da05
Fix doc strings.
kellertuer Jan 20, 2024
22717df
$ → `` for math, \mathbb R → ℝ
kellertuer Jan 20, 2024
4d5c62c
Missed a p.
kellertuer Jan 20, 2024
020b0b5
And another symbol.
kellertuer Jan 20, 2024
08712a2
My VS Code reportet an error on this line, removing the "" fixed it, …
kellertuer Jan 20, 2024
c193a8e
Code Coverage for Symplectic Stiefel.
kellertuer Jan 20, 2024
7af7ae3
Work on Symplectic test coverage.
kellertuer Jan 20, 2024
8021ed1
fix a typo.
kellertuer Jan 21, 2024
b94a8e4
A few more tests.
kellertuer Jan 21, 2024
e10d353
Fix embedding functions.
kellertuer Jan 21, 2024
4a149fc
add a few nicer functions to Hamiltonian and extend test coverage.
kellertuer Jan 21, 2024
ef55fa7
Mixinf Hamiltonian with other matrices introduces 120+ ambiguities, l…
kellertuer Jan 21, 2024
e4015ab
Forgot to remove the mixed tests. Brain is melting.
kellertuer Jan 21, 2024
09202d0
fix a too strict test.
kellertuer Jan 21, 2024
b1548bb
MOre tst coverage.
kellertuer Jan 21, 2024
d587821
Merge branch 'master' into kellertuer/more-grassmann
kellertuer Jan 21, 2024
1ed51cb
A bit of testcoverage
kellertuer Jan 22, 2024
bece83a
Maybe increase test cov.
kellertuer Jan 22, 2024
fc4c1e5
Merge branch 'master' into kellertuer/more-grassmann
kellertuer Jan 23, 2024
324c791
This should finish code coverage up to one final line, a valid Projec…
kellertuer Jan 23, 2024
1a21e9b
Add a line for the case that the vector is correct to return nothing.
kellertuer Jan 23, 2024
2f438e2
Checking a new formula for the conversion, still have to debug this.
kellertuer Jan 23, 2024
1958357
Fix a test,
kellertuer Jan 24, 2024
b986b8b
finish tests. 🚀
kellertuer Jan 24, 2024
db2ce47
Apply suggestions from code review
kellertuer Jan 24, 2024
c2b71bc
Fiinalise PR by fixing rand on Hamiltonian and update the docs for SpGr.
kellertuer Jan 24, 2024
bfac83e
bump version.
kellertuer Jan 24, 2024
6fb6287
More $ -> `` (trying to remove the one warning from documenter but ca…
kellertuer Jan 24, 2024
6d577ea
Apply suggestions from code review
kellertuer Jan 24, 2024
2657758
fix test tolerances.
kellertuer Jan 24, 2024
91a09eb
Update src/manifolds/SymplecticGrassmann.jl
kellertuer Jan 24, 2024
02a59f5
Edit rand doc string.
kellertuer Jan 24, 2024
68b3430
Merge branch 'kellertuer/more-grassmann' of github.com:JuliaManifolds…
kellertuer Jan 24, 2024
22b27ff
Update src/manifolds/Hamiltonian.jl
kellertuer Jan 24, 2024
7cf4731
Update src/manifolds/Hamiltonian.jl
kellertuer Jan 24, 2024
d281355
Update src/manifolds/Hamiltonian.jl
kellertuer Jan 24, 2024
e3d83da
Update src/manifolds/Hamiltonian.jl
kellertuer Jan 24, 2024
32aa72e
Update src/manifolds/SymplecticGrassmannStiefel.jl
kellertuer Jan 24, 2024
cff3387
Adress points from code review.
kellertuer Jan 24, 2024
c25e870
I am not sure which AI / auotcomplete stepped in there :/.
kellertuer Jan 24, 2024
6eb0d3e
Rephrase a docstring.
kellertuer Jan 25, 2024
1a8db36
Merge branch 'kellertuer/more-grassmann' of github.com:JuliaManifolds…
kellertuer Jan 25, 2024
9500bd5
Fix the seed, raise tolerances – again.
kellertuer Jan 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/documenter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
docs:
name: Documentation
runs-on: ubuntu-latest
if: "contains( github.event.pull_request.labels.*.name, 'preview docs') || github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/')"
if: contains( github.event.pull_request.labels.*.name, 'preview docs') || github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
- uses: quarto-dev/quarto-actions/setup@v2
Expand Down
17 changes: 16 additions & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.9.13] – 2024-01-24

### Added

* added the real symplectic Grassmann manifold `SymplecticGrassmann`
* Introduce the manifold of `HamiltonianMatrices` and a wrapper for `Hamiltonian` matrices
* introduce `rand(:HamiltonianMatrices)`
* extend `rand` to also `rand!` for `HamiltonianMatrices`, `SymplecticMatrices` and `SymplecticStiefel`
* implement `riemannian_gradient` conversion for `SymplecticMatrices` and `SymplecticGrassmann`

### Deprecated

* Rename `Symplectic` to `SimplecticMatrices` in order to have a `Symplectic` wrapper for such matrices as well in the future for the next breaking change.
* Rename `SymplecticMatrix` to `SymplecticElement` to clarify that it is the special matrix ``J_{2n}`` and not an arbitrary symplectic matrix.

## [0.9.12] – 2024-01-21

### Fixed
Expand Down Expand Up @@ -43,7 +58,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

* Improved distribution of random vector generation for rotation matrices and complex circle.

## [0.9.7] - 2023-11-14
## [0.9.7] 2023-11-14

### Fixed

Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Manifolds"
uuid = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
authors = ["Seth Axen <[email protected]>", "Mateusz Baran <[email protected]>", "Ronny Bergmann <[email protected]>", "Antoine Levitt <[email protected]>"]
version = "0.9.12"
version = "0.9.13"

[deps]
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
Expand Down
4 changes: 3 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ makedocs(;
"Generalized Stiefel" => "manifolds/generalizedstiefel.md",
"Generalized Grassmann" => "manifolds/generalizedgrassmann.md",
"Grassmann" => "manifolds/grassmann.md",
"Hamiltonian" => "manifolds/hamiltonian.md",
mateuszbaran marked this conversation as resolved.
Show resolved Hide resolved
"Hyperbolic space" => "manifolds/hyperbolic.md",
"Lorentzian manifold" => "manifolds/lorentz.md",
"Multinomial doubly stochastic matrices" => "manifolds/multinomialdoublystochastic.md",
Expand All @@ -133,7 +134,8 @@ makedocs(;
"Symmetric positive definite" => "manifolds/symmetricpositivedefinite.md",
"SPD, fixed determinant" => "manifolds/spdfixeddeterminant.md",
"Symmetric positive semidefinite fixed rank" => "manifolds/symmetricpsdfixedrank.md",
"Symplectic" => "manifolds/symplectic.md",
"Symplectic Grassmann" => "manifolds/symplecticgrassmann.md",
"Symplectic matrices" => "manifolds/symplectic.md",
"Symplectic Stiefel" => "manifolds/symplecticstiefel.md",
"Torus" => "manifolds/torus.md",
"Tucker" => "manifolds/tucker.md",
Expand Down
8 changes: 4 additions & 4 deletions docs/src/features/atlases.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# [Atlases and charts](@id atlases_and_charts)

Atlases on an ``n``-dimensional manifold $\mathcal M$ are collections of charts ``\mathcal A = \{(U_i, φ_i) \colon i \in I\}``, where ``I`` is a (finite or infinte) index family, such that ``U_i \subseteq \mathcal M`` is an open set and each chart ``φ_i: U_i \to \mathbb{R}^n`` is a homeomorphism. This means, that ``φ_i`` is bijective – sometimes also called one-to-one and onto - and continuous, and its inverse ``φ_i^{-1}`` is continuous as well.
Atlases on an ``n``-dimensional manifold ``mathcal M``are collections of charts ``\mathcal A = \{(U_i, φ_i) \colon i \in I\}``, where ``I`` is a (finite or infinte) index family, such that ``U_i \subseteq \mathcal M`` is an open set and each chart ``φ_i: U_i → ℝ^n`` is a homeomorphism. This means, that ``φ_i`` is bijective – sometimes also called one-to-one and onto - and continuous, and its inverse ``φ_i^{-1}`` is continuous as well.
The inverse ``φ_i^{-1}`` is called (local) parametrization.
The resulting _parameters_ ``a=φ(p)`` of ``p`` (with respect to the chart ``φ``) are in the literature also called “(local) coordinates”. To distinguish the parameter ``a`` from [`get_coordinates`](@ref) in a basis, we use the terminology parameter in this package.

Expand All @@ -11,9 +11,9 @@ For an atlas ``\mathcal A`` we further require that
```

We say that ``φ_i`` is a chart about ``p``, if ``p\in U_i``.
An atlas provides a connection between a manifold and the Euclidean space ``\mathbb{R}^n``, since
An atlas provides a connection between a manifold and the Euclidean space ``^n``, since
locally, a chart about ``p`` can be used to identify its neighborhood (as long as you stay in ``U_i``) with a subset of a Euclidean space.
Most manifolds we consider are smooth, i.e. any change of charts ``φ_i \circ φ_j^{-1}: \mathbb{R}^n\to\mathbb{R}^n``, where ``i,j\in I``, is a smooth function. These changes of charts are also called transition maps.
Most manifolds we consider are smooth, i.e. any change of charts ``φ_i \circ φ_j^{-1}: ℝ^n → ℝ^n``, where ``i,j\in I``, is a smooth function. These changes of charts are also called transition maps.

Most operations on manifolds in `Manifolds.jl` avoid operating in a chart through appropriate embeddings and formulas derived for particular manifolds, though atlases provide the most general way of working with manifolds.
Compared to these approaches, using an atlas is often more technical and time-consuming.
Expand All @@ -28,7 +28,7 @@ Operations using atlases and charts are available through the following function
* [`get_parameters`](@ref Main.Manifolds.get_parameters) converts a point to its parameters with respect to the chart in a chart.
* [`get_point`](@ref Main.Manifolds.get_point) converts parameters (local coordinates) in a chart to the point that corresponds to them.
* [`induced_basis`](@ref Main.Manifolds.induced_basis) returns a basis of a given vector space at a point induced by a chart ``φ``.
* [`transition_map`](@ref Main.Manifolds.transition_map) converts coordinates of a point between two charts, e.g. computes ``φ_i\circ φ_j^{-1}: \mathbb{R}^n\to\mathbb{R}^n``, ``i,j\in I``.
* [`transition_map`](@ref Main.Manifolds.transition_map) converts coordinates of a point between two charts, e.g. computes ``φ_i\circ φ_j^{-1}: ℝ^n → ℝ^n``, ``i,j\in I``.

While an atlas could store charts as explicit functions, it is favourable, that the [`get_parameters`] actually implements a chart ``φ``, [`get_point`](@ref) its inverse, the prametrization ``φ^{-1}``.

Expand Down
2 changes: 1 addition & 1 deletion docs/src/features/utilities.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Ease of notation

The following terms introduce a nicer notation for some operations, for example using the ∈ operator, $p ∈ \mathcal M$, to determine whether $p$ is a point on the [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) $\mathcal M$.
The following terms introduce a nicer notation for some operations, for example using the ∈ operator, ``p ∈ \mathcal M`` to determine whether ``p`` is a point on the [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) ``\mathcal M``.

````@docs
in
Expand Down
2 changes: 1 addition & 1 deletion docs/src/manifolds/connection.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# [Connection manifold](@id ConnectionSection)

A connection manifold always consists of a [topological manifold](https://en.wikipedia.org/wiki/Topological_manifold) together with a [connection](https://en.wikipedia.org/wiki/Connection_(mathematics)) $\Gamma$.
A connection manifold always consists of a [topological manifold](https://en.wikipedia.org/wiki/Topological_manifold) together with a [connection](https://en.wikipedia.org/wiki/Connection_(mathematics)) ``Γ``.

However, often there is an implicitly assumed (default) connection, like the [`LeviCivitaConnection`](@ref) connection on a Riemannian manifold.
It is not necessary to use this decorator if you implement just one (or the first) connection.
Expand Down
2 changes: 1 addition & 1 deletion docs/src/manifolds/essentialmanifold.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Essential Manifold
The essential manifold is modeled as an [`AbstractPowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.AbstractPowerManifold) of the $3\times3$ [`Rotations`](@ref) and uses [`NestedPowerRepresentation`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.NestedPowerRepresentation).
The essential manifold is modeled as an [`AbstractPowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.AbstractPowerManifold) of the ``3×3`` [`Rotations`](@ref) and uses [`NestedPowerRepresentation`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.NestedPowerRepresentation).

```@autodocs
Modules = [Manifolds]
Expand Down
4 changes: 2 additions & 2 deletions docs/src/manifolds/euclidean.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# [Euclidean space](@id EuclideanSection)

The Euclidean space $ℝ^n$ is a simple model space, since it has curvature constantly zero everywhere; hence, nearly all operations simplify.
The easiest way to generate an Euclidean space is to use a field, i.e. [`AbstractNumbers`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#number-system), e.g. to create the $ℝ^n$ or $ℝ^{n\times n}$ you can simply type `M = ℝ^n` or `ℝ^(n,n)`, respectively.
The Euclidean space ``ℝ^n`` is a simple model space, since it has curvature constantly zero everywhere; hence, nearly all operations simplify.
The easiest way to generate an Euclidean space is to use a field, i.e. [`AbstractNumbers`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#number-system), e.g. to create the ``ℝ^n`` or ``ℝ^{n×n}`` you can simply type `M = ℝ^n` or `ℝ^(n,n)`, respectively.

```@autodocs
Modules = [Manifolds]
Expand Down
6 changes: 3 additions & 3 deletions docs/src/manifolds/fiber_bundle.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# [Fiber bundles](@id FiberBundleSection)

Fiber bundle $E$ is a manifold that is built on top of another manifold $\mathcal M$ (base space).
It is characterized by a continuous function $Π : E → \mathcal M$. For each point $p ∈ \mathcal M$ the preimage of $p$ by $Π$, $Π^{-1}(\{p\})$ is called a fiber $F$.
Fiber bundle ``E`` is a manifold that is built on top of another manifold ``\mathcal M`` (base space).
It is characterized by a continuous function ``Π : E → \mathcal M``. For each point ``p ∈ \mathcal M`` the preimage of ``p`` by ``Π``, ``Π^{-1}(\{p\})`` is called a fiber ``F``.
Bundle projection can be performed using function [`bundle_projection`](@ref).

`Manifolds.jl` primarily deals with the case of trivial bundles, where $E$ can be identified with a product $M \times F$.
`Manifolds.jl` primarily deals with the case of trivial bundles, where ``E`` can be topologically identified with a product ``M×F``.

[Vector bundles](@ref VectorBundleSection) is a special case of a fiber bundle. Other examples include unit tangent bundle. Note that in general fiber bundles don't have a canonical Riemannian structure but can at least be equipped with an [Ehresmann connection](https://en.wikipedia.org/wiki/Ehresmann_connection), providing notions of parallel transport and curvature.

Expand Down
6 changes: 3 additions & 3 deletions docs/src/manifolds/graph.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Graph manifold

For a given graph $G(V,E)$ implemented using [`Graphs.jl`](https://juliagraphs.github.io/Graphs.jl/latest/), the [`GraphManifold`](@ref) models a [`PowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.PowerManifold) either on the nodes or edges of the graph, depending on the [`GraphManifoldType`](@ref).
i.e., it's either a $\mathcal M^{\lvert V \rvert}$ for the case of a vertex manifold or a $\mathcal M^{\lvert E \rvert}$ for the case of a edge manifold.
For a given graph ``G(V,E)`` implemented using [`Graphs.jl`](https://juliagraphs.github.io/Graphs.jl/latest/), the [`GraphManifold`](@ref) models a [`PowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.PowerManifold) either on the nodes or edges of the graph, depending on the [`GraphManifoldType`](@ref).
i.e., it's either a ``\mathcal M^{\lvert V \rvert}`` for the case of a vertex manifold or a ``\mathcal M^{\lvert E \rvert}`` for the case of a edge manifold.

## Example

To make a graph manifold over $ℝ^2$ with three vertices and two edges, one can use
To make a graph manifold over ``ℝ^2`` with three vertices and two edges, one can use

```@example
using Manifolds
Expand Down
2 changes: 1 addition & 1 deletion docs/src/manifolds/grassmann.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Order = [:type,:function]

```@autodocs
Modules = [Manifolds]
Pages = ["GrassmannStiefel.jl"]
Pages = ["manifolds/GrassmannStiefel.jl"]
Order = [:type,:function]
```

Expand Down
7 changes: 7 additions & 0 deletions docs/src/manifolds/hamiltonian.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Hamiltonian matrices

```@autodocs
Modules = [Manifolds]
Pages = ["manifolds/Hamiltonian.jl"]
Order = [:type, :function]
```
4 changes: 2 additions & 2 deletions docs/src/manifolds/metric.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Metric manifold

A Riemannian manifold always consists of a [topological manifold](https://en.wikipedia.org/wiki/Topological_manifold) together with a smoothly varying metric $g$.
A Riemannian manifold always consists of a [topological manifold](https://en.wikipedia.org/wiki/Topological_manifold) together with a smoothly varying metric ``g``.

However, often there is an implicitly assumed (default) metric, like the usual inner product on [`Euclidean`](@ref) space.
This decorator takes this into account.
Expand All @@ -17,7 +17,7 @@ Pages = ["metric.md"]
Depth = 2
```

Note that a metric manifold is has a [`IsConnectionManifold`](@ref) trait referring to the [`LeviCivitaConnection`](@ref) of the metric $g$, and thus a large part of metric manifold's functionality relies on this.
Note that a metric manifold is has a [`IsConnectionManifold`](@ref) trait referring to the [`LeviCivitaConnection`](@ref) of the metric ``g``, and thus a large part of metric manifold's functionality relies on this.

Let's first look at the provided types.

Expand Down
4 changes: 2 additions & 2 deletions docs/src/manifolds/oblique.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Oblique manifold

The oblique manifold $\mathcal{OB}(n,m)$ is modeled as an [`AbstractPowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.AbstractPowerManifold) of the (real-valued) [`Sphere`](@ref) and uses [`ArrayPowerRepresentation`](@ref).
Points on the torus are hence matrices, $x ∈ ℝ^{n,m}$.
The oblique manifold ``\mathcal{OB}(n,m)`` is modeled as an [`AbstractPowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.AbstractPowerManifold) of the (real-valued) [`Sphere`](@ref) and uses [`ArrayPowerRepresentation`](@ref).
Points on the torus are hence matrices, ``x ∈ ℝ^{n,m}``.

```@autodocs
Modules = [Manifolds]
Expand Down
8 changes: 4 additions & 4 deletions docs/src/manifolds/power.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# [Power manifold](@id PowerManifoldSection)

A power manifold is based on a [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) $\mathcal M$ to build a $\mathcal M^{n_1 \times n_2 \times \cdots \times n_m}$.
In the case where $m=1$ we can represent a manifold-valued vector of data of length $n_1$, for example a time series.
The case where $m=2$ is useful for representing manifold-valued matrices of data of size $n_1 \times n_2$, for example certain types of images.
A power manifold is based on a [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) ``\mathcal M`` to build a ``\mathcal M^{n_1×n_2 ×⋯×n_m}``.
In the case where ``m=1`` we can represent a manifold-valued vector of data of length ``n_1``, for example a time series.
The case where ``m=2`` is useful for representing manifold-valued matrices of data of size ``n_1×n_2``, for example certain types of images.

There are three available representations for points and vectors on a power manifold:

Expand All @@ -17,7 +17,7 @@ Below are some examples of usage of these representations.
There are two ways to store the data: in a multidimensional array or in a nested array.

Let's look at an example for both.
Let $\mathcal M$ be `Sphere(2)` the 2-sphere and we want to look at vectors of length 4.
Let ``\mathcal M`` be `Sphere(2)` the 2-sphere and we want to look at vectors of length 4.

### `ArrayPowerRepresentation`

Expand Down
4 changes: 2 additions & 2 deletions docs/src/manifolds/product.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# [Product manifold](@id ProductManifoldSection)

Product manifold $\mathcal M = \mathcal{M}_1 × \mathcal{M}_2 × … × \mathcal{M}_n$ of manifolds $\mathcal{M}_1, \mathcal{M}_2, …, \mathcal{M}_n$.
Points on the product manifold can be constructed using `ArrayPartition` (from `RecursiveArrayTools.jl`) with canonical projections $Π_i : \mathcal{M} → \mathcal{M}_i$ for $i ∈ 1, 2, …, n$ provided by [`submanifold_component`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/metamanifolds/#ManifoldsBase.submanifold_component-Tuple).
Product manifold ``\mathcal M = \mathcal{M}_1 × \mathcal{M}_2 × … × \mathcal{M}_n`` of manifolds ``\mathcal{M}_1, \mathcal{M}_2, …, \mathcal{M}_n``.
Points on the product manifold can be constructed using `ArrayPartition` (from `RecursiveArrayTools.jl`) with canonical projections ``Π_i : \mathcal{M} → \mathcal{M}_i`` for ``i ∈ 1, 2, …, n`` provided by [`submanifold_component`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/metamanifolds/#ManifoldsBase.submanifold_component-Tuple).

```@autodocs
Modules = [Manifolds]
Expand Down
Loading
Loading