sleipnirgroup-jormungandr 0.6.7.dev21__tar.gz → 0.6.7.dev23__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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +11 -4
  3. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/__init__.py +1 -1
  4. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_ocp_test.py +39 -28
  5. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_ocp_test.py +18 -23
  6. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/arm-none-eabi.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/gradient.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/hessian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/slice.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/multistart.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/problem.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/options.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/assert.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/concepts.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/empty.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/function_ref.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/pool.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/print.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/profiler.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/scope_exit.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/spy.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/symbol_exports.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/pyproject.toml +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/binders.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/docstrings.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/for_each_type.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/main.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_ocp.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_problem.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/try_cast.hpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/autodiff/__init__.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/optimization/__init__.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/gradient_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/hessian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/jacobian_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/variable_matrix_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/variable_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_util.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/double_integrator_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/flywheel_ocp_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/flywheel_problem_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/linear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/multistart_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/near.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/ipm.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/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.dev21
3
+ Version: 0.6.7.dev23
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -167,11 +167,13 @@ ExitStatus feasibility_restoration(
167
167
  DenseVector fr_x{num_vars + 2 * num_eq};
168
168
  fr_x << x, p_e_0, n_e_0;
169
169
 
170
- DenseVector fr_s = DenseVector::Ones(2 * num_eq);
170
+ // Start the constraints pₑ, nₑ ≥ 0 with zero violation
171
+ DenseVector fr_s{2 * num_eq};
172
+ fr_s << p_e_0, n_e_0;
171
173
 
172
174
  DenseVector fr_y = DenseVector::Zero(num_eq);
173
175
 
174
- // Force the duals to start with perfect complementarity with the slacks
176
+ // Start the duals with perfect complementarity with respect to the slacks
175
177
  DenseVector fr_z{2 * num_eq};
176
178
  fr_z << fr_μ * p_e_0.cwiseInverse(), fr_μ * n_e_0.cwiseInverse();
177
179
 
@@ -428,13 +430,18 @@ ExitStatus feasibility_restoration(
428
430
  DenseVector fr_x{num_vars + 2 * num_eq + 2 * num_ineq};
429
431
  fr_x << x, p_e_0, n_e_0, p_i_0, n_i_0;
430
432
 
433
+ // Use the original problem's slacks for cᵢ(x) − pᵢ + nᵢ ≥ 0 since
434
+ // cᵢ(x) − pᵢ + nᵢ = s by construction.
435
+ //
436
+ // Start the constraints pₑ, nₑ, pᵢ, nᵢ ≥ 0 with zero violation.
431
437
  DenseVector fr_s{s.rows() + 2 * num_eq + 2 * num_ineq};
432
438
  fr_s.segment(0, s.rows()) = s;
433
- fr_s.segment(s.rows(), 2 * num_eq + 2 * num_ineq).setOnes();
439
+ fr_s.segment(s.rows(), 2 * num_eq + 2 * num_ineq) << p_e_0, n_e_0, p_i_0,
440
+ n_i_0;
434
441
 
435
442
  DenseVector fr_y = DenseVector::Zero(c_e.rows());
436
443
 
437
- // Force the duals to start with perfect complementarity with the slacks
444
+ // Start the duals with perfect complementarity with respect to the slacks
438
445
  DenseVector fr_z{c_i.rows() + 2 * num_eq + 2 * num_ineq};
439
446
  fr_z << fr_μ * s.cwiseInverse(), fr_μ * p_e_0.cwiseInverse(),
440
447
  fr_μ * n_e_0.cwiseInverse(), fr_μ * p_i_0.cwiseInverse(),
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev21"
5
+ __version__ = "0.6.7.dev23"
@@ -6,7 +6,6 @@ from cart_pole_util import (
6
6
  cart_pole_dynamics_double,
7
7
  cart_pole_dynamics_variable,
8
8
  )
9
- from rk4 import rk4
10
9
  from sleipnir.autodiff import ExpressionType, VariableMatrix
11
10
  from sleipnir.optimization import (
12
11
  OCP,
@@ -86,28 +85,37 @@ def test_cart_pole_ocp():
86
85
  assert X.value(2, 0) == pytest.approx(x_initial[2, 0], abs=1e-8)
87
86
  assert X.value(3, 0) == pytest.approx(x_initial[3, 0], abs=1e-8)
88
87
 
89
- # FIXME: Replay diverges
90
- if 0:
91
- # Verify solution
92
- x = np.zeros((4, 1))
93
- u = np.zeros((1, 1))
94
- for k in range(N):
95
- # Cart position constraints
96
- assert X[0, k] >= 0.0
97
- assert X[0, k] <= d_max
98
-
99
- # Input constraints
100
- assert U[0, k] >= -u_max
101
- assert U[0, k] <= u_max
102
-
103
- # Verify state
104
- assert X.value(0, k) == pytest.approx(x[0, 0], abs=1e-2)
105
- assert X.value(1, k) == pytest.approx(x[1, 0], abs=1e-2)
106
- assert X.value(2, k) == pytest.approx(x[2, 0], abs=1e-2)
107
- assert X.value(3, k) == pytest.approx(x[3, 0], abs=1e-2)
108
-
109
- # Project state forward
110
- x = rk4(cart_pole_dynamics_double, x, u, dt)
88
+ # Verify solution
89
+ for k in range(N):
90
+ # Cart position constraints
91
+ assert X.value(0, k) >= 0.0
92
+ assert X.value(0, k) <= d_max
93
+
94
+ # Input constraints
95
+ assert U.value(0, k) >= -u_max
96
+ assert U.value(0, k) <= u_max
97
+
98
+ # Dynamics constraints
99
+ #
100
+ # Direct collocation constrains the system dynamics at the midpoint of a
101
+ # cubic Hermite spline through each pair of adjacent states.
102
+ f = cart_pole_dynamics_double
103
+ h = problem.dt().value(0, k)
104
+ x_begin = X[:, k : k + 1].value()
105
+ x_end = X[:, k + 1 : k + 2].value()
106
+ u_begin = U[:, k : k + 1].value()
107
+ u_end = U[:, k + 1 : k + 2].value()
108
+
109
+ xdot_begin = f(x_begin, u_begin)
110
+ xdot_end = f(x_end, u_end)
111
+ xdot_c = -3.0 / (2.0 * h) * (x_begin - x_end) - 0.25 * (xdot_begin + xdot_end)
112
+
113
+ x_c = 0.5 * (x_begin + x_end) + h / 8.0 * (xdot_begin - xdot_end)
114
+ u_c = 0.5 * (u_begin + u_end)
115
+
116
+ expected_xdot_c = f(x_c, u_c)
117
+ for row in range(xdot_c.shape[0]):
118
+ assert xdot_c[row, 0] == pytest.approx(expected_xdot_c[row, 0], abs=1e-8)
111
119
 
112
120
  # Verify final state
113
121
  assert X.value(0, N) == pytest.approx(x_final[0, 0], abs=1e-8)
@@ -121,17 +129,20 @@ def test_cart_pole_ocp():
121
129
  "Time (s),Cart position (m),Pole angle (rad),Cart velocity (m/s),Pole angular velocity (rad/s)\n"
122
130
  )
123
131
 
132
+ time = 0.0
124
133
  for k in range(N + 1):
125
134
  f.write(
126
- f"{k * dt},{X.value(0, k)},{X.value(1, k)},{X.value(2, k)},{X.value(3, k)}\n"
135
+ f"{time},{X.value(0, k)},{X.value(1, k)},{X.value(2, k)},{X.value(3, k)}\n"
127
136
  )
128
137
 
138
+ time += problem.dt().value(0, k)
139
+
129
140
  # Log inputs for offline viewing
130
141
  with open("Cart-pole inputs.csv", "w") as f:
131
142
  f.write("Time (s),Cart force (N)\n")
132
143
 
144
+ time = 0.0
133
145
  for k in range(N + 1):
134
- if k < N:
135
- f.write(f"{k * dt},{U.value(0, k)}\n")
136
- else:
137
- f.write(f"{k * dt},0.0\n")
146
+ f.write(f"{time},{U.value(0, k)}\n")
147
+
148
+ time += problem.dt().value(0, k)
@@ -68,29 +68,24 @@ def test_differential_drive_ocp():
68
68
  assert X.value(3, 0) == pytest.approx(x_initial[3, 0], abs=1e-8)
69
69
  assert X.value(4, 0) == pytest.approx(x_initial[4, 0], abs=1e-8)
70
70
 
71
- # FIXME: Replay diverges
72
- if 0:
73
- # Verify solution
74
- x = np.zeros((5, 1))
75
- u = np.zeros((2, 1))
76
- for k in range(N):
77
- u = U[:, k : k + 1].value()
78
-
79
- # Input constraints
80
- assert U[0, k].value() >= -u_max[0]
81
- assert U[0, k].value() <= u_max[0]
82
- assert U[1, k].value() >= -u_max[1]
83
- assert U[1, k].value() <= u_max[1]
84
-
85
- # Verify state
86
- assert X.value(0, k) == pytest.approx(x[0, 0], abs=1e-8)
87
- assert X.value(1, k) == pytest.approx(x[1, 0], abs=1e-8)
88
- assert X.value(2, k) == pytest.approx(x[2, 0], abs=1e-8)
89
- assert X.value(3, k) == pytest.approx(x[3, 0], abs=1e-8)
90
- assert X.value(4, k) == pytest.approx(x[4, 0], abs=1e-8)
91
-
92
- # Project state forward
93
- x = rk4(differential_drive_dynamics_double, x, u, problem.dt().value(0, k))
71
+ # Verify solution
72
+ for k in range(N):
73
+ # Input constraints
74
+ assert U.value(0, k) >= -u_max[0, 0]
75
+ assert U.value(0, k) <= u_max[0, 0]
76
+ assert U.value(1, k) >= -u_max[1, 0]
77
+ assert U.value(1, k) <= u_max[1, 0]
78
+
79
+ # Dynamics constraints
80
+ expected_x_k1 = rk4(
81
+ differential_drive_dynamics_double,
82
+ X[:, k : k + 1].value(),
83
+ U[:, k : k + 1].value(),
84
+ problem.dt().value(0, k),
85
+ )
86
+ actual_x_k1 = X[:, k + 1 : k + 2].value()
87
+ for row in range(actual_x_k1.shape[0]):
88
+ assert actual_x_k1[row, 0] == pytest.approx(expected_x_k1[row, 0], abs=1e-8)
94
89
 
95
90
  # Verify final state
96
91
  assert X.value(0, N) == pytest.approx(x_final[0, 0], abs=1e-8)