sleipnirgroup-jormungandr 0.6.7.dev34__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.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/ipm.hpp +11 -0
  3. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/sqp.hpp +11 -0
  4. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/filter.hpp +43 -0
  5. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/__init__.py +1 -1
  6. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/cmake/arm-none-eabi.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/gradient.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/hessian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/slice.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/multistart.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/ocp.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/problem.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev34 → 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.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/assert.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/concepts.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/empty.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/function_ref.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/pool.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/print.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/profiler.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/scope_exit.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/spy.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/include/sleipnir/util/symbol_exports.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/pyproject.toml +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/binders.hpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/docstrings.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/for_each_type.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/main.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_ocp.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/bind_problem.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/cpp/try_cast.hpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/autodiff/__init__.py +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/src/sleipnir/optimization/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/gradient_test.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/hessian_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/jacobian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/variable_matrix_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/autodiff/variable_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_problem_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/cart_pole_util.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/constraints_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/decision_variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/differential_drive_util.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/double_integrator_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/flywheel_ocp_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/flywheel_problem_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/linear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/multistart_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/near.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/ipm.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev34 → sleipnirgroup_jormungandr-0.6.7.dev35}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev34 → 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.dev34
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));
@@ -702,6 +704,15 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
702
704
 
703
705
  line_search_profiler.stop();
704
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
+
705
716
  if (call_feasibility_restoration) {
706
717
  ScopedProfiler feasibility_restoration_profiler{
707
718
  feasibility_restoration_prof};
@@ -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);
@@ -499,6 +501,15 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
499
501
 
500
502
  line_search_profiler.stop();
501
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
+
502
513
  if (call_feasibility_restoration) {
503
514
  ScopedProfiler feasibility_restoration_profiler{
504
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.dev34"
5
+ __version__ = "0.6.7.dev35"