Skip to content
Open
Show file tree
Hide file tree
Changes from 111 commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
4fef1ea
initial code for GCP computation
mateuszbaran Nov 21, 2025
8bdd5b1
formatting
mateuszbaran Nov 21, 2025
d428807
expand a little
mateuszbaran Nov 21, 2025
69794c2
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Nov 27, 2025
435f2a6
add a few more methods
mateuszbaran Nov 27, 2025
2168761
Byrd's way of handling non-positive-definite (s, y) pairs in limited …
mateuszbaran Nov 28, 2025
44b310a
start testing GCP
mateuszbaran Nov 28, 2025
c3a8a68
A few more tests
mateuszbaran Dec 2, 2025
d3bac42
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Dec 2, 2025
75f7f15
fix "typos"
mateuszbaran Dec 2, 2025
82ac90a
box tests in a separate file
mateuszbaran Dec 3, 2025
b94b0f1
start integration of GCP into quasi_Newton
mateuszbaran Dec 3, 2025
2049c87
integrate GCPFinder into direction update (why doesn't this work right?)
mateuszbaran Dec 8, 2025
c51b0ff
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Dec 8, 2025
34c796b
return d from fill_rho_i!
mateuszbaran Dec 8, 2025
672e467
fix rho update
mateuszbaran Dec 9, 2025
7b5dfe6
first successful run
mateuszbaran Dec 9, 2025
99d193d
address review, fix bug
mateuszbaran Dec 10, 2025
da8f500
a little bit of docs
mateuszbaran Dec 10, 2025
3c8cc8e
fix extref again?
mateuszbaran Dec 10, 2025
5088950
StopWhenRelativeAPosterioriChangeCostLessOrEqual
mateuszbaran Dec 10, 2025
1183d10
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Dec 12, 2025
5365a08
improve consistency of stepsize limits
mateuszbaran Dec 12, 2025
93da29f
some fixes and tests around max_stepsize, bound_direction_tweak! and …
mateuszbaran Dec 15, 2025
8268499
fix Base.show for StopWhenRelativeAPosterioriChangeCostLessOrEqual
mateuszbaran Dec 16, 2025
fe28d25
more tests and change one name
mateuszbaran Dec 16, 2025
231989e
formatting
mateuszbaran Dec 16, 2025
5bac94f
more testing
mateuszbaran Dec 16, 2025
22c93d9
improve coverage
mateuszbaran Dec 17, 2025
a4f9fb6
improve coverage a bit more
mateuszbaran Dec 17, 2025
7bd9c3b
improve coverage; circumvent a Julia documenter bug
mateuszbaran Dec 17, 2025
f84e250
improve coverage
mateuszbaran Jan 7, 2026
ea18ab8
formatting
mateuszbaran Jan 7, 2026
8966588
fix a bug
mateuszbaran Jan 7, 2026
ab5d20e
add max_stepsize function for ProbabilitySimplex and corresponding tests
mateuszbaran Jan 7, 2026
4ac289a
improve docs
mateuszbaran Jan 8, 2026
5d4f9b8
Apply suggestions from code review
mateuszbaran Jan 8, 2026
cf287f5
address some review comments
mateuszbaran Jan 8, 2026
5f133a0
address more comments
mateuszbaran Jan 8, 2026
feda7cd
one more comment
mateuszbaran Jan 8, 2026
9ef06f3
fix docs
mateuszbaran Jan 8, 2026
e08a588
fixing extref
mateuszbaran Jan 8, 2026
d21a606
don't specify arch
mateuszbaran Jan 8, 2026
051cc58
expand docs
mateuszbaran Jan 9, 2026
77686a7
address more review comments
mateuszbaran Jan 9, 2026
c3c12b8
update Project.toml
mateuszbaran Jan 9, 2026
26acefe
add some details and fix some links
mateuszbaran Jan 9, 2026
1dd6b99
forgot an inversion
mateuszbaran Jan 12, 2026
fadb2c5
optimize segment search by not requiring d_old; fix one test to have …
mateuszbaran Jan 13, 2026
fb65141
we only need d_z/Y_tmp in the generic updater, not the limited memory…
mateuszbaran Jan 13, 2026
d208582
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Jan 13, 2026
0df091d
adapt to glossaries
mateuszbaran Jan 13, 2026
b8e176a
improve coverage
mateuszbaran Jan 13, 2026
441b98a
streamline GCP direction search a bit
mateuszbaran Jan 14, 2026
97f6e8e
rename
mateuszbaran Jan 14, 2026
fb05f46
refactor segment updater to be more minimal (common logic went to the…
mateuszbaran Jan 14, 2026
4f52e80
more cleanup in GCP
mateuszbaran Jan 15, 2026
cc74add
rearrange arguments to a more logical order
mateuszbaran Jan 15, 2026
1063eb6
CMA ES should probably use passed RNG for the initial point?
mateuszbaran Jan 15, 2026
e8afe8d
move one temporary to the segment propagator that needs it
mateuszbaran Jan 16, 2026
3f96bde
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Jan 16, 2026
e854a1e
improve coverage
mateuszbaran Jan 17, 2026
3fc6a7f
Add test for hitting multiple bounds in Generalized Cauchy Point Finder
mateuszbaran Jan 20, 2026
bb4a560
improve naming
mateuszbaran Jan 20, 2026
2545ee8
Remove IJulia from the tutorials project. Maybe that helps.
kellertuer Jan 20, 2026
4026cd3
rename t to stepsize in function names
mateuszbaran Jan 21, 2026
a925853
Merge remote-tracking branch 'origin/mbaran/gcp' into mbaran/gcp
mateuszbaran Jan 21, 2026
bc94a85
fix convergence indication for StopWhenRelativeAPosterioriCostChangeL…
mateuszbaran Jan 21, 2026
ef47ff2
rename GCP to GCD
mateuszbaran Jan 21, 2026
f5f1901
GCD in tutorial
mateuszbaran Jan 21, 2026
89f2530
set seed to try avoiding random errors
mateuszbaran Jan 21, 2026
8060ae5
add missing page
mateuszbaran Jan 21, 2026
bebc93f
fix convergence indication of StopWhenChangeLess
kellertuer Jan 21, 2026
1522b4b
Update docs/src/solvers/generalized_cauchy_direction_subsolver.md
mateuszbaran Jan 21, 2026
909c464
rename a few things, expand docs
mateuszbaran Jan 22, 2026
4a79ea6
add missing docs entry
mateuszbaran Jan 22, 2026
7f8ecc4
improve names
mateuszbaran Jan 22, 2026
1ddca2c
remove warning that isn't necessary
mateuszbaran Jan 23, 2026
7e61e53
formatting
mateuszbaran Jan 23, 2026
a21d072
improve numerical robustness
mateuszbaran Jan 24, 2026
7c9377a
also detect nondescent direction at inner product 0
mateuszbaran Jan 24, 2026
a6982b5
Wrong eps was taken there
mateuszbaran Jan 24, 2026
f0200c1
fix test
mateuszbaran Jan 24, 2026
c4f1aae
Update test/plans/test_stopping_criteria.jl
mateuszbaran Jan 24, 2026
3a30dd8
support stepsize limiting in LineSearchesStepsize
mateuszbaran Jan 25, 2026
eb9bac4
fix + test
mateuszbaran Jan 25, 2026
853f377
skip non-coverable line
mateuszbaran Jan 25, 2026
e2fc841
fix a few issues with quasi-Newton
mateuszbaran Jan 29, 2026
2a03750
improve coverage
mateuszbaran Jan 29, 2026
3d86de1
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Jan 29, 2026
fa2ad1c
allow for larger max stepsizes in post-GCD linesearch when away from …
mateuszbaran Jan 30, 2026
2245a9d
Add Hager-Zhang 2006 linesearch
mateuszbaran Feb 2, 2026
030d588
remove initial stepsize parameters; add some docs
mateuszbaran Feb 2, 2026
9c1d358
fix edge case issues of HZ line search; expand docs on GCD; use line …
mateuszbaran Feb 3, 2026
b97b851
test one more edge case
mateuszbaran Feb 3, 2026
89ee8d0
test initialize_stepsize! for HZ
mateuszbaran Feb 3, 2026
aebaadb
improve coverage
mateuszbaran Feb 3, 2026
8ba964c
optimize quasi_Newton step
mateuszbaran Feb 3, 2026
afc73b1
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Feb 5, 2026
8d9540a
more docs for HZ, a new test, removed commented out line
mateuszbaran Feb 5, 2026
4216ef8
use provided gradient for dphi_0 in HZ
mateuszbaran Feb 5, 2026
3180c30
avoid cost reevaluation for stopping criteria in certain cases
mateuszbaran Feb 5, 2026
f169224
avoid tangent allocation
mateuszbaran Feb 6, 2026
e03cb9c
optimize a few things
mateuszbaran Feb 6, 2026
a9859ec
improve coverage
mateuszbaran Feb 6, 2026
1c3d2d3
streamline set_stepsize_bound! logic
mateuszbaran Feb 7, 2026
b5214a3
generalize to Hyperrectangle at any position
mateuszbaran Feb 7, 2026
30a497b
cleanup
mateuszbaran Feb 7, 2026
31243d4
fix ambiguity, improve test
mateuszbaran Feb 7, 2026
4d792ed
address review regarding HZ stepsize
mateuszbaran Feb 9, 2026
9c2d4af
expand changelog, stepsize initialization
mateuszbaran Feb 9, 2026
56ec7a0
Update src/plans/stepsize/stepsize.jl
mateuszbaran Feb 10, 2026
5293783
Merge remote-tracking branch 'origin/master' into mbaran/gcp
mateuszbaran Feb 13, 2026
59d2468
Make GCD more type stable
mateuszbaran Feb 13, 2026
0018cd5
Add simple directional stepsize limiting for completeness
mateuszbaran Feb 13, 2026
a192dcc
fix docs
mateuszbaran Feb 13, 2026
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
1 change: 0 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ jobs:
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
arch: x64
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
- uses: julia-actions/julia-processcoverage@v1
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ jobs:
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
arch: x64
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
env:
Expand Down
17 changes: 16 additions & 1 deletion Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ The file was started with Version `0.4`.
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).

## Unreleased

### Added

* `nonpositive_curvature_behavior` for `QuasiNewtonLimitedMemoryDirectionUpdate` that determines how transported (y, s) vector pairs are treated after transport; if their inner product gets too low, it may lead to non-positive-definite Hessians which needs to be avoided. This resolves issue #549. (#554)
* `GeneralizedCauchyDirectionFinder` for handling direction selection in the presence of box (`Hyperrectangle`) constraints in quasi-Newton methods. This allows for L-BFGS-B-style box constraint handling. (#554)
* New stopping criteria: `StopWhenRelativeAPosterioriCostChangeLessOrEqual` and `StopWhenProjectedNegativeGradientNormLess`. (#554).
* `HagerZhangLinesearch` stepsize, a state-of-the-art line search for smooth objectives with cubic interpolation and adaptive Wolfe condition checking. (#554)
* Stopping criteria can now be initialized using `initialize_stepsize!`, similar to solvers. (#554)

### Fixed

* Line searches consistently respect `stop_when_stepsize_exceeds` keyword argument as a hard limit. (#554)
* `StopWhenChangeLess` falsely claimed to indicate convergence. This is now fixed. (#554)

## [0.5.32] January 15, 2026

### Fixed
Expand Down Expand Up @@ -46,7 +61,7 @@ Moved the documentation glossaries to using the new [Glossaries.jl](https://gith
* Removed `atol` from `DebugFeasibility` and instead use the one newly added `atol` from the `ConstrainedManifoldObjective`. (#546)
* Move from CompatHelper to dependabot to keep track of dependency updates in Julia packages. (#547)
* moved the `ManoptTestSuite` module to a sub module `Manopt.Test` within `Manopt.jl`,
so it can be easier reused by others as well (#550)
so it can be easier reused by others as well (#550)
* moved to using a `Project.toml` for tests and an overall `[Workspace]`.
This also allows finally to run single test files without installing all packages manually, but instead just switching to and instantiating the test environment. (#550)
* for compatibility, state also `[source]` entries consistently in the sub `Project.toml` files. (#550)
Expand Down
4 changes: 2 additions & 2 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd"
RipQP = "1e40b3f8-35eb-4cd8-8edd-3e515bb9de08"

[sources.Manopt]
path = ".."
[sources]
Manopt = {path = ".."}

[compat]
BenchmarkTools = "1.3"
Expand Down
2 changes: 2 additions & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ tutorials_menu =
"Implement a solver" => "tutorials/ImplementASolver.md",
"Optimize on your own manifold" => "tutorials/ImplementOwnManifold.md",
"Do constrained optimization" => "tutorials/ConstrainedOptimization.md",
"Do optimization with bounds" => "tutorials/BoxDomain.md",
]
# Check whether all tutorials are rendered, issue a warning if not (and quarto if not set)
all_tutorials_exist = true
Expand Down Expand Up @@ -189,6 +190,7 @@ makedocs(;
"Douglas—Rachford" => "solvers/DouglasRachford.md",
"Exact Penalty Method" => "solvers/exact_penalty_method.md",
"Frank-Wolfe" => "solvers/FrankWolfe.md",
"Generalized Cauchy direction subsolver" => "solvers/generalized_cauchy_direction_subsolver.md",
"Gradient Descent" => "solvers/gradient_descent.md",
"Interior Point Newton" => "solvers/interior_point_Newton.md",
"Levenberg–Marquardt" => "solvers/LevenbergMarquardt.md",
Expand Down
4 changes: 3 additions & 1 deletion docs/src/extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,12 @@ x_opt = quasi_Newton(
)
```

In general this defines the following new [stepsize](@ref Stepsize)
In general this defines the following new [stepsize](@ref Stepsize) with helper functions for setting and getting the maximum step size:

```@docs
Manopt.LineSearchesStepsize
Manopt.linesearches_get_max_alpha
Manopt.linesearches_set_max_alpha
```

## Manifolds.jl
Expand Down
42 changes: 41 additions & 1 deletion docs/src/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,33 @@ @book{Boumal:2023
ISBN = {978-1-00-916616-4}
}

@article{ByrdNocedalSchnabel:1994,
title = {Representations of quasi-{Newton} matrices and their use in limited memory methods},
volume = {63},
issn = {1436-4646},
doi = {10.1007/BF01582063},
number = {1},
journal = {Mathematical Programming},
author = {Byrd, Richard H. and Nocedal, Jorge and Schnabel, Robert B.},
month = jan,
year = {1994},
pages = {129--156},
}

@article{ByrdLuNocedalZhu:1995,
title = {A {Limited} {Memory} {Algorithm} for {Bound} {Constrained} {Optimization}},
volume = {16},
issn = {1064-8275},
doi = {10.1137/0916069},
number = {5},
journal = {SIAM Journal on Scientific Computing},
author = {Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge and Zhu, Ciyou},
month = sep,
year = {1995},
note = {Publisher: Society for Industrial and Applied Mathematics},
pages = {1190--1208},
}

% --- C
%
%
Expand Down Expand Up @@ -871,4 +898,17 @@ @article{ZhangSra:2018
TITLE = {Towards Riemannian accelerated gradient methods},
URL = {https://arxiv.org/abs/1806.02812},
YEAR = {2018},
}
}

@article{ZhuByrdLuNocedal:1997,
title = {Algorithm 778: {L}-{BFGS}-{B}: {Fortran} subroutines for large-scale bound-constrained optimization},
volume = {23},
issn = {0098-3500},
doi = {10.1145/279232.279236},
number = {4},
journal = {ACM Trans. Math. Softw.},
author = {Zhu, Ciyou and Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge},
month = dec,
year = {1997},
pages = {550--560},
}
63 changes: 63 additions & 0 deletions docs/src/solvers/generalized_cauchy_direction_subsolver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Generalized Cauchy Direction subsolver

The Generalized Cauchy Direction (GCD) subsolver is a component in optimization algorithms that handle problems with bound constraints. It solves the following problem

```math
\begin{align*}
\operatorname*{arg\,min}_{Y ∈ T_p D \times \mathcal{M}}&\ m_p(Y), \qquad m_p(Y) = ⟨X_g, Y⟩_p + \frac{1}{2} ⟨\mathcal{H}_p[Y], Y⟩_p\\
\text{such that}& \ \exp_p(Y) = \exp_p(\alpha X) \in D \times \mathcal{M} \text{ for some } \alpha \in [0, A]
\end{align*}
```

where $X=(X_{\mathrm{D}}, X_{\mathcal{M}})$ is a given direction, the exponential map handles projection of the tangent vector when reaching the boundary, $D$ is a box domain ([`Hyperrectangle`](@extref Manifolds.Hyperrectangle)), $\mathcal{M}$ is a Riemannian manifold, $X_g$ is the gradient of a scalar function $f$ at point $p=(p_{\mathrm{D}}, p_{\mathcal{M}})$, $A$ is the maximum allowed step size on $\mathcal{M}$ at point $p=(p_{\mathrm{D}}, p_{\mathcal{M}})$ in direction $X_{\mathcal{M}}$ (infinity is supported) and $\mathcal{H}_p$ is a linear operator that approximates the Hessian of $f$ at $p$.

Additionally, the subsolver indicates whether the selected direction $Y$ reaches the boundary of $D$ at some point, in which case the subsequent step size selection in direction $Y$ needs to be limited to the interval $[0, s_{\max}]$, where the number $1 \leq s_{\max} \leq \infty$ is also returned by the subsolver.
Note that the value $s_{\max}=1$ is obtained when the minimum lies at the boundary of $D$, while larger values indicate that we are further away from the boundary along the selected direction $X$.

The solver is currently primarily intended for internal use by optimization algorithms that require bound-constrained subproblem solutions.

## Internal types and method

### Symbols related to the GCD computation

These symbols are directly used by solvers to compute the descent direction corresponding to the Generalized Cauchy direction.

```@docs
Manopt.has_anisotropic_max_stepsize
Manopt.find_generalized_cauchy_direction!
Manopt.GeneralizedCauchyDirectionFinder
```

### Symbols related to the Hessian approximation

These symbols are used to evaluate the Hessian approximation at specific tangent vectors during the generalized Cauchy direction computation.

```@docs
Manopt.hessian_value
Manopt.hessian_value_diag
```

### Symbols related to bound handling

These are internal symbols used to manage and manipulate bound constraints during the GCP computation.

```@docs
Manopt.init_updater!
Manopt.UnitVector
Manopt.to_coordinate_index
Manopt.AbstractSegmentHessianUpdater
Manopt.GenericSegmentHessianUpdater
Manopt.get_bounds_index
Manopt.get_stepsize_bound
Manopt.get_at_bound_index
Manopt.set_stepsize_bound!
Manopt.set_zero_at_index!
```

### Symbols related to specific Hessian approximations

```@docs
Manopt.LimitedMemorySegmentHessianUpdater
Manopt.hessian_value_from_inner_products
Manopt.set_M_current_scale!
```
1 change: 1 addition & 0 deletions docs/src/solvers/quasi_Newton.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ QuasiNewtonLimitedMemoryDirectionUpdate
QuasiNewtonCautiousDirectionUpdate
Manopt.initialize_update!
QuasiNewtonPreconditioner
QuasiNewtonLimitedMemoryBoxDirectionUpdate
```

## Hessian update rules
Expand Down
46 changes: 45 additions & 1 deletion ext/ManoptLineSearchesExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,37 @@ import Manopt: LineSearchesStepsize
using ManifoldsBase
using LineSearches

Manopt.linesearches_get_max_alpha(ls::LineSearches.HagerZhang) = ls.alphamax
Manopt.linesearches_get_max_alpha(ls::LineSearches.MoreThuente) = ls.alphamax

function Manopt.linesearches_set_max_alpha(ls::LineSearches.HagerZhang{T, Tm}, max_alpha::T) where {T, Tm}
return HagerZhang{T, Tm}(
delta = ls.delta,
sigma = ls.sigma,
alphamax = max_alpha,
rho = ls.rho,
epsilon = ls.epsilon,
gamma = ls.gamma,
linesearchmax = ls.linesearchmax,
psi3 = ls.psi3,
display = ls.display,
mayterminate = ls.mayterminate,
cache = ls.cache,
check_flatness = ls.check_flatness,
)
end
function Manopt.linesearches_set_max_alpha(ls::LineSearches.MoreThuente{T}, max_alpha::T) where {T}
return MoreThuente{T}(
f_tol = ls.f_tol,
gtol = ls.gtol,
x_tol = ls.x_tol,
alphamin = ls.alphamin,
alphamax = max_alpha,
maxfev = ls.maxfev,
cache = ls.cache
)
end

function (cs::Manopt.LineSearchesStepsize)(
mp::AbstractManoptProblem,
s::AbstractManoptSolverState,
Expand All @@ -24,6 +55,19 @@ function (cs::Manopt.LineSearchesStepsize)(
# guess initial alpha
α0 = cs.initial_guess(mp, s, k, cs.last_stepsize, η; lf0 = fp, Dlf0 = dphi_0)

# handle stepsize limit
local ls # COV_EXCL_LINE
if :stop_when_stepsize_exceeds in keys(kwargs)
new_max_alpha = min(
kwargs[:stop_when_stepsize_exceeds],
Manopt.linesearches_get_max_alpha(cs.linesearch),
)
ls = Manopt.linesearches_set_max_alpha(cs.linesearch, new_max_alpha)
α0 = min(α0, new_max_alpha)
else
ls = cs.linesearch
end

# perform actual line-search

function ϕ(α)
Expand All @@ -41,7 +85,7 @@ function (cs::Manopt.LineSearchesStepsize)(
return Manopt.get_cost_and_differential(mp, p_tmp, Y_tmp; Y = X_tmp)
end

α, fp = cs.linesearch(ϕ, dϕ, ϕdϕ, α0, fp, dphi_0)
α, fp = ls(ϕ, dϕ, ϕdϕ, α0, fp, dphi_0)
cs.last_stepsize = α
return α
end
Expand Down
2 changes: 1 addition & 1 deletion ext/ManoptManifoldsExt/ManoptManifoldsExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module ManoptManifoldsExt

using ManifoldsBase: exp, log, ParallelTransport, vector_transport_to
using Manopt
using Manopt: _math, _tex, ManifoldDefaultsFactory, _produce_type
using Manopt: _math, _tex, ManifoldDefaultsFactory, _produce_type, get_stepsize_bound
import Manopt:
max_stepsize,
get_gradient,
Expand Down
Loading
Loading