Skip to content

Commit

Permalink
Rearrange code to avoid redefining functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
kellertuer committed Jan 12, 2024
1 parent ab162ba commit 770bf76
Show file tree
Hide file tree
Showing 77 changed files with 169 additions and 179 deletions.
18 changes: 9 additions & 9 deletions src/manifolds/MultinomialSymmetric.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@doc raw"""
MultinomialSymmetric{T} <: AbstractMultinomialDoublyStochastic{N}
The multinomial symmetric matrices manifold consists of all symmetric $n×n$ matrices with
The multinomial symmetric matrices manifold consists of all symmetric ``n×n`` matrices with
positive entries such that each column sums to one, i.e.
````math
Expand All @@ -13,7 +13,7 @@ positive entries such that each column sums to one, i.e.
\end{aligned}
````
where $\mathbf{1}_n$ is the vector of length $n$ containing ones.
where ``\mathbf{1}_n`` is the vector of length ``n`` containing ones.
It is modeled as [`IsIsometricEmbeddedManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/decorator.html#ManifoldsBase.IsIsometricEmbeddedManifold).
via the [`AbstractMultinomialDoublyStochastic`](@ref) type, since it shares a few functions
Expand All @@ -29,15 +29,15 @@ X\mathbf{1}_n = \mathbf{0}_n
\bigr\},
````
where $\mathbf{0}_n$ is the vector of length $n$ containing zeros.
where ``\mathbf{0}_n`` is the vector of length ``n`` containing zeros.
More details can be found in Section IV [DouikHassibi:2019](@cite).
# Constructor
MultinomialSymmetric(n)
Generate the manifold of matrices $\mathbb R^{n×n}$ that are doubly stochastic and symmetric.
Generate the manifold of matrices ``\mathbb R^{n×n}`` that are doubly stochastic and symmetric.
"""
struct MultinomialSymmetric{T} <: AbstractMultinomialDoublyStochastic
size::T
Expand Down Expand Up @@ -110,12 +110,12 @@ The formula reads
````math
\operatorname{proj}_p(Y) = Y - (α\mathbf{1}_n^{\mathrm{T}} + \mathbf{1}_n α^{\mathrm{T}}) ⊙ p,
````
where $⊙$ denotes the Hadamard or elementwise product and $\mathbb{1}_n$ is the vector of length $n$ containing ones.
The two vector $α ∈ ℝ^{n×n}$ is given by solving
where ``⊙`` denotes the Hadamard or elementwise product and ``\mathbb{1}_n`` is the vector of length ``n`` containing ones.
The two vector ``α ∈ ℝ^{n×n}`` is given by solving
````math
(I_n+p)α = Y\mathbf{1},
````
where $I_n$ is teh $n×n$ unit matrix and $\mathbf{1}_n$ is the vector of length $n$ containing ones.
where ``I_n`` is teh ``n×n`` unit matrix and ``\mathbf{1}_n`` is the vector of length ``n`` containing ones.
"""
project(::MultinomialSymmetric, ::Any, ::Any)
Expand All @@ -133,8 +133,8 @@ end
@doc raw"""
retract(M::MultinomialSymmetric, p, X, ::ProjectionRetraction)
compute a projection based retraction by projecting $p\odot\exp(X⨸p)$ back onto the manifold,
where $⊙,⨸$ are elementwise multiplication and division, respectively. Similarly, $\exp$
compute a projection based retraction by projecting ``p⊙\exp(X⨸p)`` back onto the manifold,
where ``⊙,⨸`` are elementwise multiplication and division, respectively. Similarly, ``\exp``
refers to the elementwise exponentiation.
"""
retract(::MultinomialSymmetric, ::Any, ::Any, ::ProjectionRetraction)
Expand Down
8 changes: 4 additions & 4 deletions src/manifolds/Oblique.jl
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
@doc raw"""
Oblique{T,𝔽,S} <: AbstractPowerManifold{𝔽}
The oblique manifold $\mathcal{OB}(n,m)$ is the set of 𝔽-valued matrices with unit norm
The oblique manifold ``\mathcal{OB}(n,m)`` is the set of 𝔽-valued matrices with unit norm
column endowed with the metric from the embedding. This yields exactly the same metric as
considering the product metric of the unit norm vectors, i.e. [`PowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.PowerManifold) of the
$(n-1)$-dimensional [`Sphere`](@ref).
``(n-1)``-dimensional [`Sphere`](@ref).
The [`Sphere`](@ref) is stored internally within `M.manifold`, such that all functions of
[`AbstractPowerManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds.html#ManifoldsBase.AbstractPowerManifold) can be used directly.
Expand All @@ -13,7 +13,7 @@ The [`Sphere`](@ref) is stored internally within `M.manifold`, such that all fun
Oblique(n::Int, m::Int, field::AbstractNumbers=ℝ; parameter::Symbol=:type)
Generate the manifold of matrices $\mathbb R^{n×m}$ such that the $m$ columns are unit
Generate the manifold of matrices ``\mathbb R^{n×m}`` such that the ``m`` columns are unit
vectors, i.e. from the [`Sphere`](@ref)`(n-1)`.
"""
struct Oblique{T,𝔽,S} <: AbstractPowerManifold{𝔽,Sphere{S,𝔽},ArrayPowerRepresentation}
Expand All @@ -39,7 +39,7 @@ end
check_point(M::Oblique, p)
Checks whether `p` is a valid point on the [`Oblique`](@ref)`{m,n}` `M`, i.e. is a matrix
of `m` unit columns from $\mathbb R^{n}$, i.e. each column is a point from
of `m` unit columns from ``\mathbb R^{n}``, i.e. each column is a point from
[`Sphere`](@ref)`(n-1)`.
"""
check_point(::Oblique, ::Any)
Expand Down
10 changes: 5 additions & 5 deletions src/manifolds/SphereSymmetricMatrices.jl
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@doc raw"""
SphereSymmetricMatrices{T,𝔽} <: AbstractEmbeddedManifold{ℝ,TransparentIsometricEmbedding}
The [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) consisting of the $n×n$ symmetric matrices
The [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) consisting of the ``n×n`` symmetric matrices
of unit Frobenius norm, i.e.
````math
\mathcal{S}_{\text{sym}} :=\bigl\{p ∈ 𝔽^{n×n}\ \big|\ p^{\mathrm{H}} = p, \lVert p \rVert = 1 \bigr\},
````
where $⋅^{\mathrm{H}}$ denotes the Hermitian, i.e. complex conjugate transpose,
and the field $𝔽 ∈ \{ ℝ, ℂ\}$.
where ``⋅^{\mathrm{H}}`` denotes the Hermitian, i.e. complex conjugate transpose,
and the field ``𝔽 ∈ \{ ℝ, ℂ\}``.
# Constructor
SphereSymmetricMatrices(n[, field=ℝ])
Expand Down Expand Up @@ -119,7 +119,7 @@ Projects `p` from the embedding onto the [`SphereSymmetricMatrices`](@ref) `M`,
````math
\operatorname{proj}_{\mathcal{S}_{\text{sym}}}(p) = \frac{1}{2} \bigl( p + p^{\mathrm{H}} \bigr),
````
where $⋅^{\mathrm{H}}$ denotes the Hermitian, i.e. complex conjugate transposed.
where ``⋅^{\mathrm{H}}`` denotes the Hermitian, i.e. complex conjugate transposed.
"""
project(::SphereSymmetricMatrices, ::Any)

Expand All @@ -135,7 +135,7 @@ Project the matrix `X` onto the tangent space at `p` on the [`SphereSymmetricMat
````math
\operatorname{proj}_p(X) = \frac{X + X^{\mathrm{H}}}{2} - ⟨p, \frac{X + X^{\mathrm{H}}}{2}⟩p,
````
where $⋅^{\mathrm{H}}$ denotes the Hermitian, i.e. complex conjugate transposed.
where ``⋅^{\mathrm{H}}`` denotes the Hermitian, i.e. complex conjugate transposed.
"""
project(::SphereSymmetricMatrices, ::Any, ::Any)

Expand Down
32 changes: 16 additions & 16 deletions src/manifolds/StiefelEuclideanMetric.jl
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ emanating from `p` in tangent direction `X`.
\begin{pmatrix} \exp( -p^{\mathrm{H}}X) \\ 0_n\end{pmatrix},
````
where $\operatorname{Exp}$ denotes matrix exponential,
$⋅^{\mathrm{H}}$ denotes the complex conjugate transpose or Hermitian, and $I_k$ and
$0_k$ are the identity matrix and the zero matrix of dimension $k×k$, respectively.
where ``\operatorname{Exp}`` denotes matrix exponential,
``⋅^{\mathrm{H}}`` denotes the complex conjugate transpose or Hermitian, and ``I_k`` and
``0_k`` are the identity matrix and the zero matrix of dimension ``k×k``, respectively.
"""
exp(::Stiefel, ::Any...)

Expand All @@ -38,25 +38,25 @@ end
@doc raw"""
get_basis(M::Stiefel{<:Any,ℝ}, p, B::DefaultOrthonormalBasis)
Create the default basis using the parametrization for any $X ∈ T_p\mathcal M$.
Set $p_\bot \in ℝ^{n×(n-k)}$ the matrix such that the $n×n$ matrix of the common
columns $[p\ p_\bot]$ is an ONB.
For any skew symmetric matrix $a ∈ ℝ^{k×k}$ and any $b ∈ ℝ^{(n-k)×k}$ the matrix
Create the default basis using the parametrization for any ``X ∈ T_p\mathcal M``.
Set ``p_\bot \in ℝ^{n×(n-k)}`` the matrix such that the ``n×n`` matrix of the common
columns ``[p\ p_\bot]`` is an ONB.
For any skew symmetric matrix ``a ∈ ℝ^{k×k}`` and any ``b ∈ ℝ^{(n-k)×k}`` the matrix
````math
X = pa + p_\bot b ∈ T_p\mathcal M
````
and we can use the $\frac{1}{2}k(k-1) + (n-k)k = nk-\frac{1}{2}k(k+1)$ entries
of $a$ and $b$ to specify a basis for the tangent space.
and we can use the ``\frac{1}{2}k(k-1) + (n-k)k = nk-\frac{1}{2}k(k+1)`` entries
of ``a`` and ``b`` to specify a basis for the tangent space.
using unit vectors for constructing both
the upper matrix of $a$ to build a skew symmetric matrix and the matrix b, the default
the upper matrix of ``a`` to build a skew symmetric matrix and the matrix b, the default
basis is constructed.
Since $[p\ p_\bot]$ is an automorphism on $ℝ^{n×p}$ the elements of $a$ and $b$ are
Since ``[p\ p_⊥]`` is an automorphism on ``ℝ^{n×p}`` the elements of ``a`` and ``b`` are
orthonormal coordinates for the tangent space. To be precise exactly one element in the upper
trangular entries of $a$ is set to $1$ its symmetric entry to $-1$ and we normalize with
the factor $\frac{1}{\sqrt{2}}$ and for $b$ one can just use unit vectors reshaped to a matrix
trangular entries of ``a`` is set to ``1`` its symmetric entry to ``-1`` and we normalize with
the factor ``\frac{1}{\sqrt{2}}`` and for ``b`` one can just use unit vectors reshaped to a matrix
to obtain orthonormal set of parameters.
"""
get_basis(M::Stiefel{<:Any,ℝ}, p, B::DefaultOrthonormalBasis{ℝ,TangentSpaceType})
Expand Down Expand Up @@ -128,7 +128,7 @@ end
project(M::Stiefel,p)
Projects `p` from the embedding onto the [`Stiefel`](@ref) `M`, i.e. compute `q`
as the polar decomposition of $p$ such that ``q^{\mathrm{H}}q`` is the identity,
as the polar decomposition of ``p`` such that ``q^{\mathrm{H}}q`` is the identity,
where ``⋅^{\mathrm{H}}`` denotes the hermitian, i.e. complex conjugate transposed.
"""
project(::Stiefel, ::Any, ::Any)
Expand All @@ -149,8 +149,8 @@ The formula reads
\operatorname{proj}_{T_p\mathcal M}(X) = X - p \operatorname{Sym}(p^{\mathrm{H}}X),
````
where $\operatorname{Sym}(q)$ is the symmetrization of $q$, e.g. by
$\operatorname{Sym}(q) = \frac{q^{\mathrm{H}}+q}{2}$.
where ``\operatorname{Sym}(q)`` is the symmetrization of ``q``, e.g. by
``\operatorname{Sym}(q) = \frac{q^{\mathrm{H}}+q}{2}``.
"""
project(::Stiefel, ::Any...)

Expand Down
10 changes: 5 additions & 5 deletions src/manifolds/SymmetricPositiveDefinite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ i.e. the set of symmetric matrices,
SymmetricPositiveDefinite(n; parameter::Symbol=:type)
generates the manifold $\mathcal P(n) \subset ℝ^{n×n}$
generates the manifold ``\mathcal P(n) \subset ℝ^{n×n}``
"""
struct SymmetricPositiveDefinite{T} <: AbstractDecoratorManifold{ℝ}
size::T
Expand Down Expand Up @@ -243,7 +243,7 @@ end
Return the injectivity radius of the [`SymmetricPositiveDefinite`](@ref).
Since `M` is a Hadamard manifold with respect to the [`AffineInvariantMetric`](@ref) and the
[`LogCholeskyMetric`](@ref), the injectivity radius is globally $∞$.
[`LogCholeskyMetric`](@ref), the injectivity radius is globally ``∞``.
"""
injectivity_radius(::SymmetricPositiveDefinite) = Inf
injectivity_radius(::SymmetricPositiveDefinite, p) = Inf
Expand All @@ -265,7 +265,7 @@ is_flat(M::SymmetricPositiveDefinite) = false
manifold_dimension(M::SymmetricPositiveDefinite)
returns the dimension of
[`SymmetricPositiveDefinite`](@ref) `M`$=\mathcal P(n), n ∈ ℕ$, i.e.
[`SymmetricPositiveDefinite`](@ref) `M` ``=\mathcal P(n), n ∈ ℕ``, i.e.
````math
\dim \mathcal P(n) = \frac{n(n+1)}{2}.
````
Expand Down Expand Up @@ -466,8 +466,8 @@ end
representation_size(M::SymmetricPositiveDefinite)
Return the size of an array representing an element on the
[`SymmetricPositiveDefinite`](@ref) manifold `M`, i.e. $n×n$, the size of such a
symmetric positive definite matrix on $\mathcal M = \mathcal P(n)$.
[`SymmetricPositiveDefinite`](@ref) manifold `M`, i.e. ``n×n``, the size of such a
symmetric positive definite matrix on ``\mathcal M = \mathcal P(n)``.
"""
function representation_size(M::SymmetricPositiveDefinite)
N = get_parameter(M.size)[1]
Expand Down
42 changes: 21 additions & 21 deletions src/manifolds/SymmetricPositiveSemidefiniteFixedRank.jl
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
@doc raw"""
SymmetricPositiveSemidefiniteFixedRank{T,𝔽} <: AbstractDecoratorManifold{𝔽}
The [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) $ \operatorname{SPS}_k(n)$ consisting of the real- or complex-valued
symmetric positive semidefinite matrices of size $n×n$ and rank $k$, i.e. the set
The [`AbstractManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/types.html#ManifoldsBase.AbstractManifold) `` \operatorname{SPS}_k(n)`` consisting of the real- or complex-valued
symmetric positive semidefinite matrices of size ``n×n`` and rank ``k``, i.e. the set
````math
\operatorname{SPS}_k(n) = \bigl\{
p ∈ 𝔽^{n×n}\ \big|\ p^{\mathrm{H}} = p,
apa^{\mathrm{H}} \geq 0 \text{ for all } a ∈ 𝔽
\text{ and } \operatorname{rank}(p) = k\bigr\},
````
where $⋅^{\mathrm{H}}$ denotes the Hermitian, i.e. complex conjugate transpose,
and the field $𝔽 ∈ \{ ℝ, ℂ\}$.
We sometimes $\operatorname{SPS}_{k,𝔽}(n)$, when distinguishing the real- and complex-valued
where ``⋅^{\mathrm{H}}`` denotes the Hermitian, i.e. complex conjugate transpose,
and the field ``𝔽 ∈ \{ ℝ, ℂ\}``.
We sometimes ``\operatorname{SPS}_{k,𝔽}(n)``, when distinguishing the real- and complex-valued
manifold is important.
An element is represented by $q ∈ 𝔽^{n×k}$ from the factorization $p = qq^{\mathrm{H}}$.
Note that since for any unitary (orthogonal) $A ∈ 𝔽^{n×n}$ we have
$(Aq)(Aq)^{\mathrm{H}} = qq^{\mathrm{H}} = p$, the representation is not unique, or in
other words, the manifold is a quotient manifold of $𝔽^{n×k}$.
An element is represented by ``q ∈ 𝔽^{n×k}`` from the factorization ``p = qq^{\mathrm{H}}``.
Note that since for any unitary (orthogonal) ``A ∈ 𝔽^{n×n}`` we have
``(Aq)(Aq)^{\mathrm{H}} = qq^{\mathrm{H}} = p``, the representation is not unique, or in
other words, the manifold is a quotient manifold of ``𝔽^{n×k}``.
The tangent space at $p$, $T_p\operatorname{SPS}_k(n)$, is also represented
by matrices $Y ∈ 𝔽^{n×k}$ and reads as
The tangent space at ``p``, ``T_p\operatorname{SPS}_k(n)``, is also represented
by matrices ``Y ∈ 𝔽^{n×k}`` and reads as
````math
T_p\operatorname{SPS}_k(n) = \bigl\{
Expand All @@ -37,7 +37,7 @@ The metric was used in [JourneeBachAbsilSepulchre:2010](@cite)[MassartAbsil:2020
SymmetricPositiveSemidefiniteFixedRank(n::Int, k::Int, field::AbstractNumbers=ℝ; parameter::Symbol=:type)
Generate the manifold of $n×n$ symmetric positive semidefinite matrices of rank $k$
Generate the manifold of ``n×n`` symmetric positive semidefinite matrices of rank ``k``
over the `field` of real numbers `ℝ` or complex numbers `ℂ`.
"""
struct SymmetricPositiveSemidefiniteFixedRank{T,𝔽} <: AbstractDecoratorManifold{𝔽}
Expand Down Expand Up @@ -107,8 +107,8 @@ end
distance(M::SymmetricPositiveSemidefiniteFixedRank, p, q)
Compute the distance between two points `p`, `q` on the
[`SymmetricPositiveSemidefiniteFixedRank`](@ref), which is the Frobenius norm of $Y$ which
minimizes $\lVert p - qY\rVert$ with respect to $Y$.
[`SymmetricPositiveSemidefiniteFixedRank`](@ref), which is the Frobenius norm of ``Y`` which
minimizes ``\lVert p - qY\rVert`` with respect to ``Y``.
"""
distance(M::SymmetricPositiveSemidefiniteFixedRank, p, q) = norm(M, p, log(M, p, q))

Expand All @@ -129,8 +129,8 @@ which just reads
````math
q_2 = \exp_p(\log_pq)
````
might yield a matrix $q_2\neq q$, but they represent the same point on the quotient
manifold, i.e. $d_{\operatorname{SPS}_k(n)}(q_2,q) = 0$.
might yield a matrix ``q_2\neq q``, but they represent the same point on the quotient
manifold, i.e. ``d_{\operatorname{SPS}_k(n)}(q_2,q) = 0``.
"""
exp(::SymmetricPositiveSemidefiniteFixedRank, ::Any, ::Any)

Expand All @@ -144,7 +144,7 @@ end
test, whether two points `p`, `q` are (approximately) nearly the same.
Since this is a quotient manifold in the embedding, the test is performed by checking
their distance, if they are not the same, i.e. that $d_{\mathcal M}(p,q) \approx 0$, where
their distance, if they are not the same, i.e. that ``d_{\mathcal M}(p,q) \approx 0``, where
the comparison is performed with the classical `isapprox`.
The `kwargs...` are passed on to this accordingly.
"""
Expand All @@ -170,7 +170,7 @@ is_flat(M::SymmetricPositiveSemidefiniteFixedRank) = false
log(M::SymmetricPositiveSemidefiniteFixedRank, q, p)
Compute the logarithmic map on the [`SymmetricPositiveSemidefiniteFixedRank`](@ref) manifold
by minimizing $\lVert p - qY\rVert$ with respect to $Y$.
by minimizing ``\lVert p - qY\rVert`` with respect to ``Y``.
!!! note
Expand All @@ -180,8 +180,8 @@ by minimizing $\lVert p - qY\rVert$ with respect to $Y$.
````math
q_2 = \exp_p(\log_pq)
````
might yield a matrix $q_2\neq q$, but they represent the same point on the quotient
manifold, i.e. $d_{\operatorname{SPS}_k(n)}(q_2,q) = 0$.
might yield a matrix ``q_2≠q``, but they represent the same point on the quotient
manifold, i.e. ``d_{\operatorname{SPS}_k(n)}(q_2,q) = 0``.
"""
log(::SymmetricPositiveSemidefiniteFixedRank, q, p)

Expand All @@ -203,7 +203,7 @@ Return the dimension of the [`SymmetricPositiveSemidefiniteFixedRank`](@ref) mat
\end{aligned}
````
where the last $k^2$ is due to the zero imaginary part for Hermitian matrices diagonal
where the last ``k^2`` is due to the zero imaginary part for Hermitian matrices diagonal
"""
manifold_dimension(::SymmetricPositiveSemidefiniteFixedRank)

Expand Down
11 changes: 11 additions & 0 deletions test/ambiguities.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
"""
has_type_in_signature(sig, T)
Test whether the signature `sig` has an argument of type `T` as one of its paramaters
"""
function has_type_in_signature(sig, T::Type)
return any(map(Base.unwrap_unionall(sig.sig).parameters) do x
xw = Base.rewrap_unionall(x, sig.sig)
return (xw isa Type ? xw : xw.T) <: T
end)
end

@testset "Ambiguities" begin
if VERSION.prerelease == () && !Sys.iswindows() && VERSION < v"1.10.0"
mbs = Test.detect_ambiguities(ManifoldsBase)
Expand Down
2 changes: 1 addition & 1 deletion test/approx_inverse_retraction.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using NLsolve
using LinearAlgebra

include("utils.jl")
include("header.jl")

Random.seed!(10)

Expand Down
2 changes: 1 addition & 1 deletion test/differentiation.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# A bit of duplication of tests in ManifoldDiff.jl but it ensures that it works here too.

include("utils.jl")
include("header.jl")
using Manifolds:
default_differential_backend,
_derivative,
Expand Down
2 changes: 1 addition & 1 deletion test/groups/circle_group.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
include("../utils.jl")
include("../header.jl")
include("group_utils.jl")

using Manifolds:
Expand Down
2 changes: 1 addition & 1 deletion test/groups/connections.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
include("../utils.jl")
include("../header.jl")
include("group_utils.jl")

using Manifolds: connection
Expand Down
2 changes: 1 addition & 1 deletion test/groups/general_linear.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
include("../utils.jl")
include("../header.jl")
include("group_utils.jl")
using NLsolve

Expand Down
2 changes: 1 addition & 1 deletion test/groups/general_unitary_groups.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
include("../utils.jl")
include("../header.jl")
include("group_utils.jl")

@testset "General Unitary Groups" begin
Expand Down
Loading

0 comments on commit 770bf76

Please sign in to comment.