Skip to content

Avoid coordinate cache allocation in VectorDifferentialFunction get_jacobian!#622

Merged
kellertuer merged 2 commits into
JuliaManifolds:masterfrom
sChoiKr:fix-vdf-jacobian-cache
Jul 3, 2026
Merged

Avoid coordinate cache allocation in VectorDifferentialFunction get_jacobian!#622
kellertuer merged 2 commits into
JuliaManifolds:masterfrom
sChoiKr:fix-vdf-jacobian-cache

Conversation

@sChoiKr

@sChoiKr sChoiKr commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

This PR fixes the FunctionVectorialType Jacobian-action path for VectorDifferentialFunction.
The affected get_jacobian! method does not use c_cache.

This can fail for manifolds/containers that do not support coordinate allocation, even though the Jacobian action itself is coordinate-free. The default is changed to nothing.

@sChoiKr sChoiKr changed the title Avoid unused coordinate cache allocation in VectorDifferentialFunction get_jacobian! Avoid coordinate cache allocation in VectorDifferentialFunction get_jacobian! Jul 3, 2026
@codecov

codecov Bot commented Jul 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (a86a1ea) to head (0dda1bd).

Additional details and impacted files
@@            Coverage Diff            @@
##            master      #622   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           96        96           
  Lines        12574     12574           
=========================================
  Hits         12574     12574           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread Changelog.md Outdated
@kellertuer

Copy link
Copy Markdown
Member

If you need this urgent – or want to not work on the dev version, we can also bump (increase) the lowest version number in the Project.toml and I could trigger registering a new version once this is merged.
Otherwise, it is not too long until we register a new version, I am just waiting for one feedback on the Gradient Sampling Algorithm (#618) – so it could also be a new version together with that.

Thanks again for noticing and fixing this as well. 👍

Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
@sChoiKr

sChoiKr commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

Thank you very much for the prompt review. Originally, we were planning to publish the newest version today once this is fixed. But, while I tried working our pipeline on the dev version of yours, BTD still was a bottleneck. The current issue on the cache is fixed for sure, but something else is not working.

As much as I want to find out where and why rn, I have to pack since I am flying to Korea tomorrow. :)

Here is the full stacktrace if it helps:

julia --project=. -e 'using Random, LinearAlgebra, Manifolds, ManifoldsBase, RecursiveArrayTools, TensorKitchen; try Random.seed!(42); A = randn(7,6,5); ranks = (2,2,2); manifolds = TensorKitchen._as_join_manifold_tuple(TuckerJoin(size(A), ranks, 2)); backend = TensorKitchen._sum_backend_instance(TensorKitchen.BTDBackend, manifolds, A); model = TensorKitchen.JoinModel{Float64,typeof(backend)}(backend); p0 = TensorKitchen.initial_point(model, :random; verbose=false); println("before solve"); flush(stdout); low = solve(LMSolver(), model; p0, maxiter=2, tol=1e-6, verbose=false, return_stats=true); println("after solve"); println(low.rel_error); catch err; showerror(stdout, err, catch_backtrace()); println(); flush(stdout); end

before solve
^CInterruptException:
Stacktrace:
  [1] iterate
    @ ./iterators.jl:415 [inlined]
  [2] copyto!(dest::Vector{NTuple{210, Float64}}, src::Base.Iterators.Zip{NTuple{210, Tuple{Float64, Float64, Float64}}})
    @ Base ./abstractarray.jl:938
  [3] _collect(cont::UnitRange{Int64}, itr::Base.Iterators.Zip{NTuple{210, Tuple{Float64, Float64, Float64}}}, ::Base.HasEltype, isz::Base.HasLength)
    @ Base ./array.jl:734
  [4] collect(itr::Base.Iterators.Zip{NTuple{210, Tuple{Float64, Float64, Float64}}})
    @ Base ./array.jl:728
  [5] get_robustifier_values(crf::Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, x::Vector{Float64})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/plans/robustifiers.jl:159
  [6] _get_cost(M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, vgf::Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, cr::Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, p::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}; value_cache::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/plans/nonlinear_least_squares/nls_objective.jl:161
  [7] _get_cost
    @ ~/Desktop/Github/Manopt.jl/src/plans/nonlinear_least_squares/nls_objective.jl:155 [inlined]
  [8] get_cost(M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, nlso::Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, p::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/plans/nonlinear_least_squares/nls_objective.jl:139
  [9] get_cost
    @ ~/Desktop/Github/Manopt.jl/src/plans/problem.jl:99 [inlined]
 [10] (::TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64})(problem::Manopt.DefaultManoptProblem{ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}}, state::Manopt.LevenbergMarquardtState{ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}, ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.DefaultManoptProblem{Fiber{ℝ, TangentSpaceType, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}}, Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}}, Manopt.ConjugateResidualState{ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}}}}, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}, Manopt.StopWhenStepsizeLess{Float64}, TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64}}}, ProductRetraction{Tuple{PolarRetraction, PolarRetraction}}, Vector{Float64}, Vector{Nothing}}, i::Int64)
    @ TensorKitchen /src/solvers/manopt_helpers.jl:56
 [11] #344
    @ ~/Desktop/Github/Manopt.jl/src/plans/stopping_criterion.jl:1336 [inlined]
 [12] _fast_any
    @ ~/Desktop/Github/Manopt.jl/src/plans/stopping_criterion.jl:1324 [inlined]
 [13] _fast_any (repeats 3 times)
    @ ~/Desktop/Github/Manopt.jl/src/plans/stopping_criterion.jl:1330 [inlined]
 [14] StopWhenAny
    @ ~/Desktop/Github/Manopt.jl/src/plans/stopping_criterion.jl:1336 [inlined]
 [15] stop_solver!
    @ ~/Desktop/Github/Manopt.jl/src/solvers/solver.jl:187 [inlined]
 [16] stop_solver!(amp::Manopt.DefaultManoptProblem{ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}}, dss::Manopt.DebugSolverState{Manopt.LevenbergMarquardtState{ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}, ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.DefaultManoptProblem{Fiber{ℝ, TangentSpaceType, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}}, Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}}, Manopt.ConjugateResidualState{ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}}}}, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}, Manopt.StopWhenStepsizeLess{Float64}, TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64}}}, ProductRetraction{Tuple{PolarRetraction, PolarRetraction}}, Vector{Float64}, Vector{Nothing}}}, k::Int64)
    @ Manopt ~/Desktop/Github/Manopt.jl/src/solvers/debug_solver.jl:42
 [17] stop_solver!
    @ ~/Desktop/Github/Manopt.jl/src/solvers/solver.jl:190 [inlined]
 [18] solve!(p::Manopt.DefaultManoptProblem{ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}}, s::Manopt.ReturnSolverState{Manopt.DebugSolverState{Manopt.LevenbergMarquardtState{ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}, ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.DefaultManoptProblem{Fiber{ℝ, TangentSpaceType, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}}, Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}}, Manopt.ConjugateResidualState{ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}}}}, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}, Manopt.StopWhenStepsizeLess{Float64}, TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64}}}, ProductRetraction{Tuple{PolarRetraction, PolarRetraction}}, Vector{Float64}, Vector{Nothing}}}})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/solvers/solver.jl:160
 [19] LevenbergMarquardt!(M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, nlso::Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, p::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}; retraction_method::ProductRetraction{Tuple{PolarRetraction, PolarRetraction}}, stopping_criterion::Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}, Manopt.StopWhenStepsizeLess{Float64}, TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64}}}, candidate_acceptance_threshold::Float64, damping_increase_factor::Float64, damping_increase_threshold::Float64, damping_reduction_threshold::Float64, damping_reduction_factor::Float64, damping_term_min::Float64, damping_term_max::Float64, initial_damping_term::Float64, debug::Vector{Any}, initial_residual_values::Vector{Float64}, use_unified_basis::Bool, initial_jacobian_matrices::Vector{Nothing}, scaling_threshold::Float64, scaling_mode::Symbol, minimum_acceptable_model_improvement::Float64, sub_objective::Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}, sub_problem::Manopt.DefaultManoptProblem{Fiber{ℝ, TangentSpaceType, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}}, Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}}, sub_state::Manopt.ConjugateResidualState{ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}}}}, kwargs::@Kwargs{return_state::Bool})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/solvers/LevenbergMarquardt.jl:271
 [20] LevenbergMarquardt(M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, nlso::Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, p::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}; kwargs::@Kwargs{retraction_method::ProductRetraction{Tuple{PolarRetraction, PolarRetraction}}, stopping_criterion::Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}, Manopt.StopWhenStepsizeLess{Float64}, TensorKitchen.StopWhenCostRelChangeAndGradientLess{Float64}}}, initial_residual_values::Vector{Float64}, candidate_acceptance_threshold::Float64, damping_increase_factor::Float64, damping_increase_threshold::Float64, damping_reduction_threshold::Float64, damping_reduction_factor::Float64, damping_term_min::Float64, initial_damping_term::Float64, use_unified_basis::Bool, sub_objective::Manopt.NormalEquationsObjective{Manopt.AllocatingEvaluation, Manopt.LevenbergMarquardtLinearSurrogateObjective{Manopt.AllocatingEvaluation, Float64, Manopt.ManifoldNonlinearLeastSquaresObjective{Manopt.AllocatingEvaluation, Manopt.VectorDifferentialFunction{Manopt.AllocatingEvaluation, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, Manopt.FunctionVectorialType{NestedPowerRepresentation}, TensorKitchen.var"#_lm_residual_function##0#_lm_residual_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_differential_action_function##0#_lm_differential_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, TensorKitchen.var"#_lm_adjoint_action_function##0#_lm_adjoint_action_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, Float64}, Int64}, Manopt.ComponentwiseRobustifierFunction{Manopt.IdentityRobustifier}, Vector{Float64}}, Vector{Float64}}}, sub_state::Manopt.ConjugateResidualState{ArrayPartition{Float64, Tuple{TuckerTangentVector{Float64, 3}, TuckerTangentVector{Float64, 3}}}, Float64, Manopt.StopWhenAny{Tuple{Manopt.StopAfterIteration, Manopt.StopWhenGradientNormLess{typeof(norm), Float64, Missing}}}}, debug::Vector{Any}, return_state::Bool})
    @ Manopt ~/Desktop/Github/Manopt.jl/src/solvers/LevenbergMarquardt.jl:153
 [21] solve_lm(model::JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, model_cost::TensorKitchen.var"#model_cost_function##0#model_cost_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}}, model_egrad::TensorKitchen.var"#model_egrad_function##0#model_egrad_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}}, M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, p0::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}; maxiter::Int64, tol::Float64, verbose::Bool, return_stats::Bool, normA2::Float64, model_grad::Function, vector_transport_method::Nothing, post_step_callback::Nothing, diagnostics_recorder::Nothing, iteration_callbacks::Tuple{}, η::Float64, damping_term_min::Float64, β::Float64, expect_zero_residual::Bool, linear_subsolver::typeof(Manopt.default_lm_lin_solve!), grad_tol::Nothing, normalized_objective::Bool)
    @ TensorKitchen /src/solvers/lm.jl:203
 [22] run_second_order_solver(solver::LMSolver, setup::@NamedTuple{model::JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}, M::ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, p0::ArrayPartition{Float64, Tuple{TuckerPoint{Float64, 3}, TuckerPoint{Float64, 3}}}, model_cost::TensorKitchen.var"#model_cost_function##0#model_cost_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}}, model_egrad::TensorKitchen.var"#model_egrad_function##0#model_egrad_function##1"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}}, model_grad::TensorKitchen.var"#103#104"{JoinModel{Float64, BTDBackend{Float64, 3, Tuple{JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}, JoinComponent{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, TensorKitchen.DefaultJoinEmbedding}}, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}, Array{Float64, 3}, Vector{Float64}, ProductManifold{ℝ, Tuple{Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}, Tucker{ℝ, ManifoldsBase.TypeParameter{Tuple{(7, 6, 5), (2, 2, 2)}}, 3}}}, Nothing, Vector{Vector{Float64}}}}}, normA2::Float64}; maxiter::Int64, tol::Float64, verbose::Bool, return_stats::Bool, vector_transport_method::Nothing, post_step_callback::Nothing, diagnostics_recorder::Nothing, iteration_callbacks::Tuple{}, grad_tol::Nothing, normalized_objective::Bool)

Sorry for dumping this without any clues here. If you don't have time to check it out today, I can try to track down on the train tmrw.
No worries for the version update. I think we could temporally reroute the path, constructing the Jacobian matrix for BTD-RLM until this resolves.

@kellertuer

Copy link
Copy Markdown
Member

Then maybe take this over to the issue. I will merge this and it is included in the next release then.

For the error – best copy it over to the issue then, since this is merged soon. Without more details I can not do much than a well-educated guess. At first glance, I am surprised about step [5] is at least suspicious, its

function get_robustifier_values(crf::ComponentwiseRobustifierFunction, x::AbstractArray)
# turn form a vector of tuples into a tuple of vectors
return collect(zip([get_robustifier_values(crf, xi) for xi in x]...))
end

which would expect the xi to be real values (to apply the robustifier to) that should never be an NTuple of length 210 but a vector? Maybe the zip is too much there as well, not sure – that is where we are in “guess world”.

But no worries; then I will first merge this and release it together with the other open PR – and for you first of all – Gute Reise!

@kellertuer
kellertuer merged commit 02e38dc into JuliaManifolds:master Jul 3, 2026
15 checks passed
@sChoiKr
sChoiKr deleted the fix-vdf-jacobian-cache branch July 3, 2026 13:45
kellertuer referenced this pull request Jul 4, 2026
* Fix a few typos in the random walk solver example.
* Initial setup of Gradient Sampling.
* Setup the boiler plate code for the high-level interface and create the documentation page.
* Sketch the algorithm further.
* add a bit of documentation.
* Documentation and show/print for the gradient sampling state
* Setup a first example and fix the firrst few bugs.
* Add Changelog entry.
* add Ole Gunnar to the about.md
* Update Hajgs link on the about page.
* Start testing.
* bump version.
* Apply suggestions from code review

---------

Co-authored-by: Ole Gunnar Røsholt Hovland <73483154+elorannug@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants