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.
Files changed (119) hide show
  1. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/exit_status.hpp +6 -5
  3. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/interior_point.hpp +5 -3
  4. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/newton.hpp +4 -3
  5. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/sqp.hpp +5 -3
  6. sleipnirgroup_jormungandr-0.4.1.dev12/include/sleipnir/optimization/solver/util/all_finite.hpp +26 -0
  7. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/docstrings.hpp +3 -3
  8. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/solver/bind_exit_status.cpp +2 -3
  9. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/__init__.py +1 -1
  10. {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
  11. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/CMakeLists.txt +0 -0
  12. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/LICENSE.txt +0 -0
  13. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/README.md +0 -0
  14. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/SleipnirConfig.cmake.in +0 -0
  15. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/BuildTypes.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/CompilerFlags.cmake +0 -0
  17. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/Pybind11Mkdoc.cmake +0 -0
  18. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/SubdirList.cmake +0 -0
  19. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/cmake/arm-none-eabi.cmake +0 -0
  20. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/gradient.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/gradient_expression_graph.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/hessian.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/slice.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/multistart.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/ocp.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/problem.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/options.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/error_estimate.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  47. {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
  48. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/assert.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/concepts.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/empty.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/function_ref.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/pool.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/print.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/profiler.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/scope_exit.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/spy.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/include/sleipnir/util/symbol_exports.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/pyproject.toml +0 -0
  65. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  66. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/binders.hpp +0 -0
  73. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/for_each_type.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/main.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_ocp.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/bind_problem.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/cpp/try_cast.hpp +0 -0
  84. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/autodiff/__init__.py +0 -0
  85. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/src/sleipnir/optimization/__init__.py +0 -0
  86. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/gradient_test.py +0 -0
  87. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/hessian_test.py +0 -0
  88. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/jacobian_test.py +0 -0
  89. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/variable_matrix_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/autodiff/variable_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_problem_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/cart_pole_util.py +0 -0
  95. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/constraints_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/decision_variable_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_problem_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/differential_drive_util.py +0 -0
  100. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/double_integrator_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/flywheel_ocp_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/flywheel_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/linear_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/multistart_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/nonlinear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/problem_spy_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/quadratic_problem_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/rk4.py +0 -0
  109. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/python/test/optimization/trivial_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/gradient.cpp +0 -0
  111. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/hessian.cpp +0 -0
  112. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/jacobian.cpp +0 -0
  113. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/autodiff/variable_matrix.cpp +0 -0
  114. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/ocp.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/problem.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/interior_point.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/newton.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/optimization/solver/sqp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.4.1.dev10 → sleipnirgroup_jormungandr-0.4.1.dev12}/src/util/pool.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.4.1.dev10
3
+ Version: 0.4.1.dev12
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -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 or constraints and gave up.
31
- NONFINITE_INITIAL_COST_OR_CONSTRAINTS = -6,
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 NONFINITE_INITIAL_COST_OR_CONSTRAINTS:
81
- return m_underlying.format("nonfinite initial cost or constraints",
82
- ctx);
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 f(xₖ), cₑ(xₖ), and cᵢ(xₖ)
262
- if (!isfinite(f) || !c_e.allFinite() || !c_i.allFinite()) {
263
- return ExitStatus::NONFINITE_INITIAL_COST_OR_CONSTRAINTS;
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 f(xₖ)
126
- if (!isfinite(f)) {
127
- return ExitStatus::NONFINITE_INITIAL_COST_OR_CONSTRAINTS;
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 f(xₖ) and cₑ(xₖ)
204
- if (!isfinite(f) || !c_e.allFinite()) {
205
- return ExitStatus::NONFINITE_INITIAL_COST_OR_CONSTRAINTS;
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;
@@ -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 *__doc_slp_ExitStatus_NONFINITE_INITIAL_COST_OR_CONSTRAINTS =
164
- R"doc(The solver encountered nonfinite initial cost or constraints and gave
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("NONFINITE_INITIAL_COST_OR_CONSTRAINTS",
28
- ExitStatus::NONFINITE_INITIAL_COST_OR_CONSTRAINTS,
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,
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.4.1.dev10"
5
+ __version__ = "0.4.1.dev12"
@@ -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 test_nonfinite_initial_cost_or_constraints():
74
+ def test_nonfinite_cost():
75
75
  problem = Problem()
76
-
77
76
  x = problem.decision_variable()
78
- x.set_value(-1)
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.cost_function_type() == ExpressionType.NONLINEAR
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
- assert (
87
- problem.solve(diagnostics=True)
88
- == ExitStatus.NONFINITE_INITIAL_COST_OR_CONSTRAINTS
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():