sleipnirgroup-jormungandr 0.6.7.dev71__tar.gz → 0.6.7.dev73__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 (129) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/__init__.py +1 -1
  3. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/hessian_test.py +253 -1
  4. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/CMakeLists.txt +0 -0
  5. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/LICENSE.txt +0 -0
  6. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/README.md +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/SleipnirConfig.cmake.in +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/BuildTypes.cmake +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/CompilerFlags.cmake +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/Pybind11Mkdoc.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/SubdirList.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/arm-none-eabi.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression.hpp +116 -116
  15. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/gradient.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/hessian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/slice.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/multistart.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/problem.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/time_trace.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/assert.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/concepts.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/empty.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/function_ref.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/pool.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/print.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/scope_exit.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/spy.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/symbol_exports.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/time_tracer.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/arity.hpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/binders.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/docstrings.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/for_each_type.hpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/main.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_ocp.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_problem.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/slice_tuple.hpp +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/text_wrap.hpp +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/try_cast.hpp +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/postprocess_stubs.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/autodiff/__init__.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/optimization/__init__.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/gradient_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/jacobian_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/variable_matrix_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/constraints_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/decision_variable_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_util.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/double_integrator_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/flywheel_ocp_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/flywheel_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/linear_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/multistart_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/near.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/nonlinear_problem_test.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/problem_spy_test.py +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/quadratic_problem_test.py +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/rk4.py +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/solver/exit_status_test.py +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/trivial_problem_test.py +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/gradient.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/hessian.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/jacobian.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/variable_matrix.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/ocp.cpp +0 -0
  125. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/problem.cpp +0 -0
  126. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/ipm.cpp +0 -0
  127. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/newton.cpp +0 -0
  128. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/sqp.cpp +0 -0
  129. {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/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.dev71
3
+ Version: 0.6.7.dev73
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev71"
5
+ __version__ = "0.6.7.dev73"
@@ -1,6 +1,6 @@
1
1
  import math
2
2
  import operator
3
- from collections.abc import Iterable
3
+ from collections.abc import Callable, Iterable
4
4
  from functools import reduce
5
5
 
6
6
  import numpy as np
@@ -210,6 +210,222 @@ def test_nested_powers() -> None:
210
210
  assert H[0, 0] == pytest.approx(12 * x0 * x0, abs=1e-12)
211
211
 
212
212
 
213
+ def check_unary_hessian(
214
+ f: Callable[[Variable], Variable],
215
+ df: Callable[[float], float],
216
+ d2f: Callable[[float], float],
217
+ ) -> None:
218
+ # y = f(u) where u = x₀x₁
219
+ #
220
+ # ∂²y/∂x₀² = f″(u) x₁²
221
+ # ∂²y/∂x₀∂x₁ = f″(u) x₀x₁ + f′(u)
222
+ # ∂²y/∂x₁² = f″(u) x₀²
223
+ x = VariableMatrix(2)
224
+ x[0].set_value(0.6)
225
+ x[1].set_value(0.7)
226
+ hessian = Hessian(f(x[0] * x[1]), x)
227
+ symbolic_H = hessian.get()
228
+
229
+ # Check symbolic Hessian at a point other than where it was built too
230
+ for x0, x1 in [(0.6, 0.7), (0.3, 0.7)]:
231
+ x[0].set_value(x0)
232
+ x[1].set_value(x1)
233
+
234
+ u = x0 * x1
235
+ mixed = d2f(u) * u + df(u)
236
+ expected = np.array([[d2f(u) * x1 * x1, mixed], [mixed, d2f(u) * x0 * x0]])
237
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
238
+ np.testing.assert_allclose(
239
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
240
+ )
241
+
242
+
243
+ def test_division() -> None:
244
+ # y = x₀/x₁
245
+ #
246
+ # ∂²y/∂x₀² = 0
247
+ # ∂²y/∂x₀∂x₁ = −1/x₁²
248
+ # ∂²y/∂x₁² = 2x₀/x₁³
249
+ x = VariableMatrix(2)
250
+ hessian = Hessian(x[0] / x[1], x)
251
+ symbolic_H = hessian.get()
252
+
253
+ for x0, x1 in [(3.0, 2.0), (-1.5, 0.5)]:
254
+ x[0].set_value(x0)
255
+ x[1].set_value(x1)
256
+
257
+ mixed = -1.0 / (x1 * x1)
258
+ expected = np.array([[0.0, mixed], [mixed, 2.0 * x0 / (x1 * x1 * x1)]])
259
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
260
+ np.testing.assert_allclose(
261
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
262
+ )
263
+
264
+
265
+ def test_unary_minus() -> None:
266
+ check_unary_hessian(lambda u: -u, lambda u: -1.0, lambda u: 0.0)
267
+
268
+
269
+ def test_abs() -> None:
270
+ check_unary_hessian(autodiff.abs, lambda u: 1.0, lambda u: 0.0)
271
+
272
+
273
+ def test_acos() -> None:
274
+ check_unary_hessian(
275
+ autodiff.acos,
276
+ lambda u: -1.0 / math.sqrt(1.0 - u * u),
277
+ lambda u: -u / math.sqrt(1.0 - u * u) ** 3,
278
+ )
279
+
280
+
281
+ def test_asin() -> None:
282
+ check_unary_hessian(
283
+ autodiff.asin,
284
+ lambda u: 1.0 / math.sqrt(1.0 - u * u),
285
+ lambda u: u / math.sqrt(1.0 - u * u) ** 3,
286
+ )
287
+
288
+
289
+ def test_atan() -> None:
290
+ check_unary_hessian(
291
+ autodiff.atan,
292
+ lambda u: 1.0 / (1.0 + u * u),
293
+ lambda u: -2.0 * u / ((1.0 + u * u) * (1.0 + u * u)),
294
+ )
295
+
296
+
297
+ def test_atan2() -> None:
298
+ # z = atan2(y, x)
299
+ #
300
+ # ∂²z/∂y² = −2xy/(x² + y²)²
301
+ # ∂²z/∂y∂x = (y² − x²)/(x² + y²)²
302
+ # ∂²z/∂x² = 2xy/(x² + y²)²
303
+ input = VariableMatrix(2)
304
+ hessian = Hessian(autodiff.atan2(input[0], input[1]), input)
305
+ symbolic_H = hessian.get()
306
+
307
+ for y, x in [(1.5, 0.5), (-0.7, 1.3)]:
308
+ input[0].set_value(y)
309
+ input[1].set_value(x)
310
+
311
+ d = x * x + y * y
312
+ mixed = (y * y - x * x) / (d * d)
313
+ expected = np.array(
314
+ [[-2.0 * x * y / (d * d), mixed], [mixed, 2.0 * x * y / (d * d)]]
315
+ )
316
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
317
+ np.testing.assert_allclose(
318
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
319
+ )
320
+
321
+
322
+ def test_cbrt() -> None:
323
+ check_unary_hessian(
324
+ autodiff.cbrt,
325
+ lambda u: 1.0 / (3.0 * math.cbrt(u) * math.cbrt(u)),
326
+ lambda u: -2.0 / (9.0 * u * math.cbrt(u) * math.cbrt(u)),
327
+ )
328
+
329
+
330
+ def test_cos() -> None:
331
+ check_unary_hessian(autodiff.cos, lambda u: -math.sin(u), lambda u: -math.cos(u))
332
+
333
+
334
+ def test_cosh() -> None:
335
+ check_unary_hessian(autodiff.cosh, math.sinh, math.cosh)
336
+
337
+
338
+ def test_erf() -> None:
339
+ check_unary_hessian(
340
+ autodiff.erf,
341
+ lambda u: 2.0 / math.sqrt(math.pi) * math.exp(-u * u),
342
+ lambda u: -4.0 / math.sqrt(math.pi) * u * math.exp(-u * u),
343
+ )
344
+
345
+
346
+ def test_exp() -> None:
347
+ check_unary_hessian(autodiff.exp, math.exp, math.exp)
348
+
349
+
350
+ def hypot_expected_H(v: np.ndarray) -> np.ndarray:
351
+ # y = ‖v‖
352
+ #
353
+ # ∂²y/∂vᵢ∂vⱼ = (‖v‖²δᵢⱼ − vᵢvⱼ)/‖v‖³
354
+ r2 = v @ v
355
+ return (r2 * np.eye(len(v)) - np.outer(v, v)) / (r2 * math.sqrt(r2))
356
+
357
+
358
+ def test_hypot_two_arguments() -> None:
359
+ x = VariableMatrix(2)
360
+ hessian = Hessian(autodiff.hypot(x[0], x[1]), x)
361
+ symbolic_H = hessian.get()
362
+
363
+ for x0, x1 in [(1.3, 2.3), (-0.5, 1.5)]:
364
+ x[0].set_value(x0)
365
+ x[1].set_value(x1)
366
+
367
+ expected = hypot_expected_H(np.array([x0, x1]))
368
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
369
+ np.testing.assert_allclose(
370
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
371
+ )
372
+
373
+
374
+ def test_hypot_three_arguments() -> None:
375
+ x = VariableMatrix(3)
376
+ hessian = Hessian(autodiff.hypot(x[0], x[1], x[2]), x)
377
+ symbolic_H = hessian.get()
378
+
379
+ for v in [np.array([1.3, 2.3, 3.3]), np.array([-0.5, 1.5, -2.5])]:
380
+ x[0].set_value(v[0])
381
+ x[1].set_value(v[1])
382
+ x[2].set_value(v[2])
383
+
384
+ expected = hypot_expected_H(v)
385
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
386
+ np.testing.assert_allclose(
387
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
388
+ )
389
+
390
+
391
+ def test_hypot_repeated_argument() -> None:
392
+ # y = hypot(a, b, a) = √(2a² + b²)
393
+ #
394
+ # ∂²y/∂a² = (2y² − 4a²)/y³
395
+ # ∂²y/∂a∂b = −2ab/y³
396
+ # ∂²y/∂b² = (y² − b²)/y³
397
+ x = VariableMatrix(2)
398
+ hessian = Hessian(autodiff.hypot(x[0], x[1], x[0]), x)
399
+ symbolic_H = hessian.get()
400
+
401
+ for a, b in [(1.3, 2.3), (-0.5, 1.5)]:
402
+ x[0].set_value(a)
403
+ x[1].set_value(b)
404
+
405
+ y2 = 2.0 * a * a + b * b
406
+ y3 = y2 * math.sqrt(y2)
407
+ mixed = -2.0 * a * b / y3
408
+ expected = np.array(
409
+ [[(2.0 * y2 - 4.0 * a * a) / y3, mixed], [mixed, (y2 - b * b) / y3]]
410
+ )
411
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
412
+ np.testing.assert_allclose(
413
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
414
+ )
415
+
416
+
417
+ def test_log() -> None:
418
+ check_unary_hessian(autodiff.log, lambda u: 1.0 / u, lambda u: -1.0 / (u * u))
419
+
420
+
421
+ def test_log10() -> None:
422
+ check_unary_hessian(
423
+ autodiff.log10,
424
+ lambda u: 1.0 / (math.log(10.0) * u),
425
+ lambda u: -1.0 / (math.log(10.0) * u * u),
426
+ )
427
+
428
+
213
429
  def test_max_and_min() -> None:
214
430
  input = VariableMatrix(2)
215
431
  expected_y = np.array([[0.0, 0.0], [0.0, 2.0]])
@@ -266,6 +482,42 @@ def test_pow() -> None:
266
482
  )
267
483
 
268
484
 
485
+ def test_sign() -> None:
486
+ check_unary_hessian(autodiff.sign, lambda u: 0.0, lambda u: 0.0)
487
+
488
+
489
+ def test_sin() -> None:
490
+ check_unary_hessian(autodiff.sin, math.cos, lambda u: -math.sin(u))
491
+
492
+
493
+ def test_sinh() -> None:
494
+ check_unary_hessian(autodiff.sinh, math.cosh, math.sinh)
495
+
496
+
497
+ def test_sqrt() -> None:
498
+ check_unary_hessian(
499
+ autodiff.sqrt,
500
+ lambda u: 1.0 / (2.0 * math.sqrt(u)),
501
+ lambda u: -1.0 / (4.0 * u * math.sqrt(u)),
502
+ )
503
+
504
+
505
+ def test_tan() -> None:
506
+ check_unary_hessian(
507
+ autodiff.tan,
508
+ lambda u: 1.0 / (math.cos(u) * math.cos(u)),
509
+ lambda u: 2.0 * math.tan(u) / (math.cos(u) * math.cos(u)),
510
+ )
511
+
512
+
513
+ def test_tanh() -> None:
514
+ check_unary_hessian(
515
+ autodiff.tanh,
516
+ lambda u: 1.0 / (math.cosh(u) * math.cosh(u)),
517
+ lambda u: -2.0 * math.tanh(u) / (math.cosh(u) * math.cosh(u)),
518
+ )
519
+
520
+
269
521
  def test_rosenbrock() -> None:
270
522
  # z = (1 − x)² + 100(y − x²)²
271
523
  # = 100(−x² + y)² + (−x + 1)²
@@ -472,122 +472,6 @@ struct BinaryPlusExpression final : Expression<Scalar> {
472
472
  ExpressionPtr<Scalar> grad_expr_r() const { return this->adj_expr; }
473
473
  };
474
474
 
475
- /// Derived expression type for cbrt().
476
- ///
477
- /// @tparam Scalar Scalar type.
478
- template <typename Scalar>
479
- struct CbrtExpression final : Expression<Scalar> {
480
- /// Unary operator's operand.
481
- ExpressionPtr<Scalar> x;
482
-
483
- /// Constructs an unary expression (an operator with one argument).
484
- ///
485
- /// @param x Unary operator's operand.
486
- explicit constexpr CbrtExpression(ExpressionPtr<Scalar> x)
487
- : x{std::move(x)} {}
488
-
489
- void visit_args(
490
- function_ref<void(Expression<Scalar>* arg)> func) const override {
491
- func(x.get());
492
- }
493
-
494
- Scalar value() const override {
495
- using std::cbrt;
496
- return cbrt(x->val);
497
- }
498
-
499
- ExpressionType type() const override { return ExpressionType::NONLINEAR; }
500
-
501
- std::string_view name() const override { return "cbrt"; }
502
-
503
- void accumulate_adjoints() const override { x->adj += grad_l(); }
504
-
505
- void accumulate_adjoints_expr() const override {
506
- x->adj_expr += grad_expr_l();
507
- }
508
-
509
- private:
510
- Scalar grad_l() const {
511
- using std::cbrt;
512
-
513
- Scalar c = cbrt(x->val);
514
- return this->adj / (Scalar(3) * c * c);
515
- }
516
-
517
- ExpressionPtr<Scalar> grad_expr_l() const {
518
- auto c = cbrt(x);
519
- return this->adj_expr / (constant_ptr(Scalar(3)) * c * c);
520
- }
521
- };
522
-
523
- /// cbrt() for Expressions.
524
- ///
525
- /// @tparam Scalar Scalar type.
526
- /// @param x The argument.
527
- template <typename Scalar>
528
- ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x) {
529
- using enum ExpressionType;
530
- using std::cbrt;
531
-
532
- // Evaluate constant
533
- if (x->type() == CONSTANT) {
534
- if (x->val == Scalar(0)) {
535
- // Return zero
536
- return x;
537
- } else if (x->val == Scalar(-1) || x->val == Scalar(1)) {
538
- return x;
539
- } else {
540
- return constant_ptr(cbrt(x->val));
541
- }
542
- }
543
-
544
- return make_expression_ptr<CbrtExpression<Scalar>>(x);
545
- }
546
-
547
- /// Derived expression type for constant.
548
- ///
549
- /// @tparam Scalar Scalar type.
550
- template <typename Scalar>
551
- struct ConstantExpression final : Expression<Scalar> {
552
- /// Constructs a nullary expression (an operator with no arguments).
553
- ///
554
- /// @param value The expression value.
555
- explicit constexpr ConstantExpression(Scalar value)
556
- : Expression<Scalar>{value} {}
557
-
558
- Scalar value() const override { return this->val; }
559
-
560
- ExpressionType type() const override { return ExpressionType::CONSTANT; }
561
-
562
- std::string_view name() const override { return "constant"; }
563
- };
564
-
565
- template <typename Scalar>
566
- ExpressionPtr<Scalar> constant_ptr(Scalar value) {
567
- return make_expression_ptr<ConstantExpression<Scalar>>(value);
568
- }
569
-
570
- /// Derived expression type for decision variable.
571
- ///
572
- /// @tparam Scalar Scalar type.
573
- template <typename Scalar>
574
- struct DecisionVariableExpression final : Expression<Scalar> {
575
- /// Constructs a decision variable expression with a value of zero.
576
- constexpr DecisionVariableExpression() : Expression<Scalar>{Scalar(0)} {}
577
-
578
- /// Constructs a nullary expression (an operator with no arguments).
579
- ///
580
- /// @param value The expression value.
581
- explicit constexpr DecisionVariableExpression(Scalar value)
582
- : Expression<Scalar>{value} {}
583
-
584
- Scalar value() const override { return this->val; }
585
-
586
- ExpressionType type() const override { return ExpressionType::LINEAR; }
587
-
588
- std::string_view name() const override { return "decision variable"; }
589
- };
590
-
591
475
  /// Derived expression type for binary division operator.
592
476
  ///
593
477
  /// @tparam Scalar Scalar type.
@@ -1128,6 +1012,122 @@ ExpressionPtr<Scalar> atan2(const ExpressionPtr<Scalar>& y,
1128
1012
  return make_expression_ptr<Atan2Expression<Scalar>>(y, x);
1129
1013
  }
1130
1014
 
1015
+ /// Derived expression type for cbrt().
1016
+ ///
1017
+ /// @tparam Scalar Scalar type.
1018
+ template <typename Scalar>
1019
+ struct CbrtExpression final : Expression<Scalar> {
1020
+ /// Unary operator's operand.
1021
+ ExpressionPtr<Scalar> x;
1022
+
1023
+ /// Constructs an unary expression (an operator with one argument).
1024
+ ///
1025
+ /// @param x Unary operator's operand.
1026
+ explicit constexpr CbrtExpression(ExpressionPtr<Scalar> x)
1027
+ : x{std::move(x)} {}
1028
+
1029
+ void visit_args(
1030
+ function_ref<void(Expression<Scalar>* arg)> func) const override {
1031
+ func(x.get());
1032
+ }
1033
+
1034
+ Scalar value() const override {
1035
+ using std::cbrt;
1036
+ return cbrt(x->val);
1037
+ }
1038
+
1039
+ ExpressionType type() const override { return ExpressionType::NONLINEAR; }
1040
+
1041
+ std::string_view name() const override { return "cbrt"; }
1042
+
1043
+ void accumulate_adjoints() const override { x->adj += grad_l(); }
1044
+
1045
+ void accumulate_adjoints_expr() const override {
1046
+ x->adj_expr += grad_expr_l();
1047
+ }
1048
+
1049
+ private:
1050
+ Scalar grad_l() const {
1051
+ using std::cbrt;
1052
+
1053
+ Scalar c = cbrt(x->val);
1054
+ return this->adj / (Scalar(3) * c * c);
1055
+ }
1056
+
1057
+ ExpressionPtr<Scalar> grad_expr_l() const {
1058
+ auto c = cbrt(x);
1059
+ return this->adj_expr / (constant_ptr(Scalar(3)) * c * c);
1060
+ }
1061
+ };
1062
+
1063
+ /// cbrt() for Expressions.
1064
+ ///
1065
+ /// @tparam Scalar Scalar type.
1066
+ /// @param x The argument.
1067
+ template <typename Scalar>
1068
+ ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x) {
1069
+ using enum ExpressionType;
1070
+ using std::cbrt;
1071
+
1072
+ // Evaluate constant
1073
+ if (x->type() == CONSTANT) {
1074
+ if (x->val == Scalar(0)) {
1075
+ // Return zero
1076
+ return x;
1077
+ } else if (x->val == Scalar(-1) || x->val == Scalar(1)) {
1078
+ return x;
1079
+ } else {
1080
+ return constant_ptr(cbrt(x->val));
1081
+ }
1082
+ }
1083
+
1084
+ return make_expression_ptr<CbrtExpression<Scalar>>(x);
1085
+ }
1086
+
1087
+ /// Derived expression type for constant.
1088
+ ///
1089
+ /// @tparam Scalar Scalar type.
1090
+ template <typename Scalar>
1091
+ struct ConstantExpression final : Expression<Scalar> {
1092
+ /// Constructs a nullary expression (an operator with no arguments).
1093
+ ///
1094
+ /// @param value The expression value.
1095
+ explicit constexpr ConstantExpression(Scalar value)
1096
+ : Expression<Scalar>{value} {}
1097
+
1098
+ Scalar value() const override { return this->val; }
1099
+
1100
+ ExpressionType type() const override { return ExpressionType::CONSTANT; }
1101
+
1102
+ std::string_view name() const override { return "constant"; }
1103
+ };
1104
+
1105
+ template <typename Scalar>
1106
+ ExpressionPtr<Scalar> constant_ptr(Scalar value) {
1107
+ return make_expression_ptr<ConstantExpression<Scalar>>(value);
1108
+ }
1109
+
1110
+ /// Derived expression type for decision variable.
1111
+ ///
1112
+ /// @tparam Scalar Scalar type.
1113
+ template <typename Scalar>
1114
+ struct DecisionVariableExpression final : Expression<Scalar> {
1115
+ /// Constructs a decision variable expression with a value of zero.
1116
+ constexpr DecisionVariableExpression() : Expression<Scalar>{Scalar(0)} {}
1117
+
1118
+ /// Constructs a nullary expression (an operator with no arguments).
1119
+ ///
1120
+ /// @param value The expression value.
1121
+ explicit constexpr DecisionVariableExpression(Scalar value)
1122
+ : Expression<Scalar>{value} {}
1123
+
1124
+ Scalar value() const override { return this->val; }
1125
+
1126
+ ExpressionType type() const override { return ExpressionType::LINEAR; }
1127
+
1128
+ std::string_view name() const override { return "decision variable"; }
1129
+ };
1130
+
1131
1131
  /// Derived expression type for cos().
1132
1132
  ///
1133
1133
  /// @tparam Scalar Scalar type.