sleipnirgroup-jormungandr 0.6.7.dev33__tar.gz → 0.6.7.dev35__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.

Potentially problematic release.


This version of sleipnirgroup-jormungandr might be problematic. Click here for more details.

Files changed (123) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/ipm.hpp +12 -0
  3. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/newton.hpp +3 -2
  4. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/sqp.hpp +12 -0
  5. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/filter.hpp +43 -0
  6. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/__init__.py +1 -1
  7. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/CMakeLists.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/LICENSE.txt +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/README.md +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/SleipnirConfig.cmake.in +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/BuildTypes.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/CompilerFlags.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/Pybind11Mkdoc.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/SubdirList.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/arm-none-eabi.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/gradient.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/hessian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/slice.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/multistart.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/problem.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/assert.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/concepts.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/empty.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/function_ref.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/pool.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/print.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/profiler.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/scope_exit.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/spy.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/symbol_exports.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/pyproject.toml +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/binders.hpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/docstrings.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/for_each_type.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/main.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_ocp.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_problem.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/try_cast.hpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/autodiff/__init__.py +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/optimization/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/gradient_test.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/hessian_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/jacobian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/variable_matrix_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/variable_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_problem_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_util.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/constraints_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/decision_variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_util.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/double_integrator_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/flywheel_ocp_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/flywheel_problem_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/linear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/multistart_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/near.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/ipm.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev33 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/util/pool.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.6.7.dev33
3
+ Version: 0.6.7.dev35
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -353,6 +353,8 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
353
353
 
354
354
  int full_step_rejected_counter = 0;
355
355
 
356
+ StallDetector<Scalar> stall_detector;
357
+
356
358
  // Error
357
359
  Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
358
360
  matrices.scaling, g, A_e, c_e, A_i, c_i, s, y, z, Scalar(0));
@@ -691,6 +693,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
691
693
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
692
694
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
693
695
  // Accept step
696
+ α = α_max;
694
697
  break;
695
698
  }
696
699
 
@@ -701,6 +704,15 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
701
704
 
702
705
  line_search_profiler.stop();
703
706
 
707
+ // If solver stalled, invoke feasibility restoration
708
+ if (!call_feasibility_restoration && !in_feasibility_restoration) {
709
+ FilterEntry trial_entry{trial_f, trial_s, trial_c_e, trial_c_i, μ};
710
+ if (stall_detector.update(current_entry, trial_entry, α,
711
+ filter.min_constraint_violation)) {
712
+ call_feasibility_restoration = true;
713
+ }
714
+ }
715
+
704
716
  if (call_feasibility_restoration) {
705
717
  ScopedProfiler feasibility_restoration_profiler{
706
718
  feasibility_restoration_prof};
@@ -232,14 +232,15 @@ ExitStatus newton(
232
232
 
233
233
  trial_x = x + α_max * p_x;
234
234
 
235
+ trial_f = matrices.f(trial_x);
236
+
235
237
  Scalar next_kkt_error =
236
238
  kkt_error<Scalar, KKTErrorType::ONE_NORM>(matrices.g(trial_x));
237
239
 
238
240
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
239
241
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
240
- trial_f = matrices.f(trial_x);
241
-
242
242
  // Accept step
243
+ α = α_max;
243
244
  break;
244
245
  }
245
246
 
@@ -236,6 +236,8 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
236
236
 
237
237
  int full_step_rejected_counter = 0;
238
238
 
239
+ StallDetector<Scalar> stall_detector;
240
+
239
241
  // Error
240
242
  Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
241
243
  matrices.scaling, g, A_e, c_e, y);
@@ -488,6 +490,7 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
488
490
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
489
491
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
490
492
  // Accept step
493
+ α = α_max;
491
494
  break;
492
495
  }
493
496
 
@@ -498,6 +501,15 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
498
501
 
499
502
  line_search_profiler.stop();
500
503
 
504
+ // If solver stalled, invoke feasibility restoration
505
+ if (!call_feasibility_restoration) {
506
+ FilterEntry trial_entry{trial_f, trial_c_e};
507
+ if (stall_detector.update(current_entry, trial_entry, α,
508
+ filter.min_constraint_violation)) {
509
+ call_feasibility_restoration = true;
510
+ }
511
+ }
512
+
501
513
  if (call_feasibility_restoration) {
502
514
  ScopedProfiler feasibility_restoration_profiler{
503
515
  feasibility_restoration_prof};
@@ -211,4 +211,47 @@ class Filter {
211
211
  }
212
212
  };
213
213
 
214
+ /// Detects a solver stall.
215
+ ///
216
+ /// @tparam Scalar Scalar type.
217
+ template <typename Scalar>
218
+ class StallDetector {
219
+ public:
220
+ /// Returns true if the solver stalled.
221
+ ///
222
+ /// @param current_entry The entry corresponding to the current iterate.
223
+ /// @param trial_entry The entry corresponding to the accepted trial iterate.
224
+ /// @param α The accepted step size.
225
+ /// @param min_constraint_violation The minimum constraint violation from the
226
+ /// filter.
227
+ /// @return True if the solver stalled.
228
+ bool update(const FilterEntry<Scalar>& current_entry,
229
+ const FilterEntry<Scalar>& trial_entry, Scalar α,
230
+ Scalar min_constraint_violation) {
231
+ // If step is tiny, current iterate is infeasible, and accepted trial
232
+ // iterate made insufficient progress toward feasibility, increment stalled
233
+ // step counter
234
+ if (α < Scalar(1e-3) &&
235
+ current_entry.constraint_violation > min_constraint_violation &&
236
+ trial_entry.constraint_violation >
237
+ Scalar(0.99) * current_entry.constraint_violation) {
238
+ ++m_stalled_step_counter;
239
+
240
+ // If there were too many consecutive tiny steps, report a stall
241
+ if (++m_stalled_step_counter >= 5) {
242
+ m_stalled_step_counter = 0;
243
+ return true;
244
+ }
245
+ } else {
246
+ // A break in stalled steps resets the counter
247
+ m_stalled_step_counter = 0;
248
+ }
249
+
250
+ return false;
251
+ }
252
+
253
+ private:
254
+ int m_stalled_step_counter = 0;
255
+ };
256
+
214
257
  } // namespace slp
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev33"
5
+ __version__ = "0.6.7.dev35"