sleipnirgroup-jormungandr 0.4.1.dev10__tar.gz → 0.4.1.dev12__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/exit_status.hpp +6 -5
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/interior_point.hpp +5 -3
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/newton.hpp +4 -3
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/sqp.hpp +5 -3
- sleipnirgroup_jormungandr-0.4.1.dev12/include/sleipnir/optimization/solver/util/all_finite.hpp +26 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/docstrings.hpp +3 -3
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/solver/bind_exit_status.cpp +2 -3
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.4.1.dev10/python/test/optimization → sleipnirgroup_jormungandr-0.4.1.dev12/python/test/optimization/solver}/exit_status_test.py +40 -10
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/gradient_expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/error_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/interior_point.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/util/pool.cpp +0 -0
|
@@ -27,8 +27,9 @@ enum class ExitStatus : int8_t {
|
|
|
27
27
|
/// The backtracking line search failed, and the problem isn't locally
|
|
28
28
|
/// infeasible.
|
|
29
29
|
LINE_SEARCH_FAILED = -5,
|
|
30
|
-
/// The solver encountered nonfinite initial cost
|
|
31
|
-
|
|
30
|
+
/// The solver encountered nonfinite initial cost, constraints, or derivatives
|
|
31
|
+
/// and gave up.
|
|
32
|
+
NONFINITE_INITIAL_GUESS = -6,
|
|
32
33
|
/// The solver encountered diverging primal iterates xₖ and/or sₖ and gave up.
|
|
33
34
|
DIVERGING_ITERATES = -7,
|
|
34
35
|
/// The solver returned its solution so far after exceeding the maximum number
|
|
@@ -77,9 +78,9 @@ struct std::formatter<slp::ExitStatus> {
|
|
|
77
78
|
return m_underlying.format("factorization failed", ctx);
|
|
78
79
|
case LINE_SEARCH_FAILED:
|
|
79
80
|
return m_underlying.format("line search failed", ctx);
|
|
80
|
-
case
|
|
81
|
-
return m_underlying.format(
|
|
82
|
-
|
|
81
|
+
case NONFINITE_INITIAL_GUESS:
|
|
82
|
+
return m_underlying.format(
|
|
83
|
+
"nonfinite initial cost, constraints, or derivatives", ctx);
|
|
83
84
|
case DIVERGING_ITERATES:
|
|
84
85
|
return m_underlying.format("diverging iterates", ctx);
|
|
85
86
|
case MAX_ITERATIONS_EXCEEDED:
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#include "sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp"
|
|
18
18
|
#include "sleipnir/optimization/solver/iteration_info.hpp"
|
|
19
19
|
#include "sleipnir/optimization/solver/options.hpp"
|
|
20
|
+
#include "sleipnir/optimization/solver/util/all_finite.hpp"
|
|
20
21
|
#include "sleipnir/optimization/solver/util/append_as_triplets.hpp"
|
|
21
22
|
#include "sleipnir/optimization/solver/util/error_estimate.hpp"
|
|
22
23
|
#include "sleipnir/optimization/solver/util/filter.hpp"
|
|
@@ -258,9 +259,10 @@ ExitStatus interior_point(
|
|
|
258
259
|
return ExitStatus::TOO_FEW_DOFS;
|
|
259
260
|
}
|
|
260
261
|
|
|
261
|
-
// Check whether initial guess has finite
|
|
262
|
-
if (!isfinite(f) || !
|
|
263
|
-
|
|
262
|
+
// Check whether initial guess has finite cost, constraints, and derivatives
|
|
263
|
+
if (!isfinite(f) || !all_finite(g) || !all_finite(H) || !c_e.allFinite() ||
|
|
264
|
+
!all_finite(A_e) || !c_i.allFinite() || !all_finite(A_i)) {
|
|
265
|
+
return ExitStatus::NONFINITE_INITIAL_GUESS;
|
|
264
266
|
}
|
|
265
267
|
|
|
266
268
|
#ifdef SLEIPNIR_ENABLE_BOUND_PROJECTION
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#include "sleipnir/optimization/solver/iteration_info.hpp"
|
|
17
17
|
#include "sleipnir/optimization/solver/newton_matrix_callbacks.hpp"
|
|
18
18
|
#include "sleipnir/optimization/solver/options.hpp"
|
|
19
|
+
#include "sleipnir/optimization/solver/util/all_finite.hpp"
|
|
19
20
|
#include "sleipnir/optimization/solver/util/error_estimate.hpp"
|
|
20
21
|
#include "sleipnir/optimization/solver/util/filter.hpp"
|
|
21
22
|
#include "sleipnir/optimization/solver/util/kkt_error.hpp"
|
|
@@ -122,9 +123,9 @@ ExitStatus newton(
|
|
|
122
123
|
slp_assert(H.rows() == matrices.num_decision_variables);
|
|
123
124
|
slp_assert(H.cols() == matrices.num_decision_variables);
|
|
124
125
|
|
|
125
|
-
// Check whether initial guess has finite
|
|
126
|
-
if (!isfinite(f)) {
|
|
127
|
-
return ExitStatus::
|
|
126
|
+
// Check whether initial guess has finite cost and derivatives
|
|
127
|
+
if (!isfinite(f) || !all_finite(g) || !all_finite(H)) {
|
|
128
|
+
return ExitStatus::NONFINITE_INITIAL_GUESS;
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
int iterations = 0;
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#include "sleipnir/optimization/solver/iteration_info.hpp"
|
|
17
17
|
#include "sleipnir/optimization/solver/options.hpp"
|
|
18
18
|
#include "sleipnir/optimization/solver/sqp_matrix_callbacks.hpp"
|
|
19
|
+
#include "sleipnir/optimization/solver/util/all_finite.hpp"
|
|
19
20
|
#include "sleipnir/optimization/solver/util/append_as_triplets.hpp"
|
|
20
21
|
#include "sleipnir/optimization/solver/util/error_estimate.hpp"
|
|
21
22
|
#include "sleipnir/optimization/solver/util/filter.hpp"
|
|
@@ -200,9 +201,10 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
200
201
|
return ExitStatus::TOO_FEW_DOFS;
|
|
201
202
|
}
|
|
202
203
|
|
|
203
|
-
// Check whether initial guess has finite
|
|
204
|
-
if (!isfinite(f) || !c_e.allFinite()
|
|
205
|
-
|
|
204
|
+
// Check whether initial guess has finite cost, constraints, and derivatives
|
|
205
|
+
if (!isfinite(f) || !all_finite(g) || !all_finite(H) || !c_e.allFinite() ||
|
|
206
|
+
!all_finite(A_e)) {
|
|
207
|
+
return ExitStatus::NONFINITE_INITIAL_GUESS;
|
|
206
208
|
}
|
|
207
209
|
|
|
208
210
|
int iterations = 0;
|
sleipnirgroup_jormungandr-0.4.1.dev12/include/sleipnir/optimization/solver/util/all_finite.hpp
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright (c) Sleipnir contributors
|
|
2
|
+
|
|
3
|
+
#pragma once
|
|
4
|
+
|
|
5
|
+
#include <cmath>
|
|
6
|
+
|
|
7
|
+
#include <Eigen/SparseCore>
|
|
8
|
+
|
|
9
|
+
/// Returns true if elements of sparse matrix are all finite.
|
|
10
|
+
///
|
|
11
|
+
/// @param mat Sparse matrix.
|
|
12
|
+
/// @return True if elements of sparse matrix are all finite.
|
|
13
|
+
template <typename Derived>
|
|
14
|
+
bool all_finite(const Eigen::SparseCompressedBase<Derived>& mat) {
|
|
15
|
+
using std::isfinite;
|
|
16
|
+
|
|
17
|
+
for (int k = 0; k < mat.outerSize(); ++k) {
|
|
18
|
+
for (typename Derived::InnerIterator it{mat, k}; it; ++it) {
|
|
19
|
+
if (!isfinite(it.value())) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
@@ -160,9 +160,9 @@ static const char *__doc_slp_ExitStatus_MAX_ITERATIONS_EXCEEDED =
|
|
|
160
160
|
R"doc(The solver returned its solution so far after exceeding the maximum
|
|
161
161
|
number of iterations.)doc";
|
|
162
162
|
|
|
163
|
-
static const char *
|
|
164
|
-
R"doc(The solver encountered nonfinite initial cost
|
|
165
|
-
up.)doc";
|
|
163
|
+
static const char *__doc_slp_ExitStatus_NONFINITE_INITIAL_GUESS =
|
|
164
|
+
R"doc(The solver encountered nonfinite initial cost, constraints, or
|
|
165
|
+
derivatives and gave up.)doc";
|
|
166
166
|
|
|
167
167
|
static const char *__doc_slp_ExitStatus_SUCCESS = R"doc(Solved the problem to the desired tolerance.)doc";
|
|
168
168
|
|
|
@@ -24,9 +24,8 @@ void bind_exit_status(nb::enum_<ExitStatus>& e) {
|
|
|
24
24
|
DOC(slp, ExitStatus, FACTORIZATION_FAILED));
|
|
25
25
|
e.value("LINE_SEARCH_FAILED", ExitStatus::LINE_SEARCH_FAILED,
|
|
26
26
|
DOC(slp, ExitStatus, LINE_SEARCH_FAILED));
|
|
27
|
-
e.value("
|
|
28
|
-
ExitStatus
|
|
29
|
-
DOC(slp, ExitStatus, NONFINITE_INITIAL_COST_OR_CONSTRAINTS));
|
|
27
|
+
e.value("NONFINITE_INITIAL_GUESS", ExitStatus::NONFINITE_INITIAL_GUESS,
|
|
28
|
+
DOC(slp, ExitStatus, NONFINITE_INITIAL_GUESS));
|
|
30
29
|
e.value("DIVERGING_ITERATES", ExitStatus::DIVERGING_ITERATES,
|
|
31
30
|
DOC(slp, ExitStatus, DIVERGING_ITERATES));
|
|
32
31
|
e.value("MAX_ITERATIONS_EXCEEDED", ExitStatus::MAX_ITERATIONS_EXCEEDED,
|
|
@@ -71,22 +71,52 @@ def test_locally_infeasible_inequality_constraints():
|
|
|
71
71
|
assert problem.solve(diagnostics=True) == ExitStatus.LOCALLY_INFEASIBLE
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
def
|
|
74
|
+
def test_nonfinite_cost():
|
|
75
75
|
problem = Problem()
|
|
76
|
-
|
|
77
76
|
x = problem.decision_variable()
|
|
78
|
-
|
|
77
|
+
problem.minimize(1 / x)
|
|
78
|
+
|
|
79
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
79
80
|
|
|
81
|
+
|
|
82
|
+
def test_nonfinite_gradient():
|
|
83
|
+
problem = Problem()
|
|
84
|
+
x = problem.decision_variable()
|
|
80
85
|
problem.minimize(sqrt(x))
|
|
81
86
|
|
|
82
|
-
assert problem.
|
|
83
|
-
assert problem.equality_constraint_type() == ExpressionType.NONE
|
|
84
|
-
assert problem.inequality_constraint_type() == ExpressionType.NONE
|
|
87
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
)
|
|
89
|
+
|
|
90
|
+
def test_nonfinite_equality_constraint():
|
|
91
|
+
problem = Problem()
|
|
92
|
+
x = problem.decision_variable()
|
|
93
|
+
problem.subject_to(1 / x == 1)
|
|
94
|
+
|
|
95
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_nonfinite_equality_constraint_jacobian():
|
|
99
|
+
problem = Problem()
|
|
100
|
+
x = problem.decision_variable()
|
|
101
|
+
problem.subject_to(sqrt(x) == 1)
|
|
102
|
+
|
|
103
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_nonfinite_inequality_constraint():
|
|
107
|
+
problem = Problem()
|
|
108
|
+
x = problem.decision_variable()
|
|
109
|
+
problem.subject_to(1 / x > 1)
|
|
110
|
+
|
|
111
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def test_nonfinite_inequality_constraint_jacobian():
|
|
115
|
+
problem = Problem()
|
|
116
|
+
x = problem.decision_variable()
|
|
117
|
+
problem.subject_to(sqrt(x) > 1)
|
|
118
|
+
|
|
119
|
+
assert problem.solve() == ExitStatus.NONFINITE_INITIAL_GUESS
|
|
90
120
|
|
|
91
121
|
|
|
92
122
|
def test_diverging_iterates():
|
{sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/CMakeLists.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/main.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/util/pool.cpp
RENAMED
|
File without changes
|