sleipnirgroup-jormungandr 0.6.7.dev72__tar.gz → 0.6.7.dev74__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.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/CMakeLists.txt +71 -20
  2. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/PKG-INFO +1 -1
  3. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/src/sleipnir/__init__.py +1 -1
  4. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/autodiff/hessian_test.py +253 -1
  5. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/LICENSE.txt +0 -0
  6. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/README.md +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/SleipnirConfig.cmake.in +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/BuildTypes.cmake +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/CompilerFlags.cmake +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/Pybind11Mkdoc.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/SubdirList.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/cmake/arm-none-eabi.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/expression.hpp +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/gradient.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/hessian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/slice.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/variable.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/multistart.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/ocp.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/problem.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/optimization/solver/util/time_trace.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/assert.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/concepts.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/empty.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/function_ref.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/pool.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/print.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/scope_exit.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/spy.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/symbol_exports.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/include/sleipnir/util/time_tracer.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/arity.hpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_variable.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/binders.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/docstrings.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/for_each_type.hpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/main.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/bind_ocp.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/bind_problem.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/slice_tuple.hpp +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/text_wrap.hpp +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/cpp/try_cast.hpp +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/postprocess_stubs.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/src/sleipnir/autodiff/__init__.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/src/sleipnir/optimization/__init__.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/autodiff/gradient_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/autodiff/jacobian_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/autodiff/variable_matrix_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/autodiff/variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/cart_pole_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/cart_pole_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/constraints_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/decision_variable_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/differential_drive_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/differential_drive_util.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/double_integrator_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/flywheel_ocp_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/flywheel_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/linear_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/multistart_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/near.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/nonlinear_problem_test.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/problem_spy_test.py +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/quadratic_problem_test.py +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/rk4.py +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/solver/exit_status_test.py +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/python/test/optimization/trivial_problem_test.py +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/autodiff/gradient.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/autodiff/hessian.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/autodiff/jacobian.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/autodiff/variable_matrix.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/optimization/ocp.cpp +0 -0
  125. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/optimization/problem.cpp +0 -0
  126. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/optimization/solver/ipm.cpp +0 -0
  127. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/optimization/solver/newton.cpp +0 -0
  128. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/optimization/solver/sqp.cpp +0 -0
  129. {sleipnirgroup_jormungandr-0.6.7.dev72 → sleipnirgroup_jormungandr-0.6.7.dev74}/src/util/pool.cpp +0 -0
@@ -36,6 +36,11 @@ option(
36
36
  "Enable projecting the state onto bound inequality constraints inside problem setup"
37
37
  OFF
38
38
  )
39
+ set(SLEIPNIR_TEST_SCALAR_TYPES
40
+ "double"
41
+ CACHE STRING
42
+ "Semicolon-separated list of scalar types to test (double, ExplicitDouble)"
43
+ )
39
44
 
40
45
  # Options for using a package manager (e.g., vcpkg) for certain dependencies
41
46
  option(SLEIPNIR_USE_SYSTEM_BENCHMARK "Use system benchmark" OFF)
@@ -231,52 +236,98 @@ if(PROJECT_IS_TOP_LEVEL AND BUILD_TESTING AND NOT CMAKE_CROSSCOMPILING)
231
236
  list(APPEND CMAKE_MODULE_PATH ${Catch2_SOURCE_DIR}/extras)
232
237
  include(Catch)
233
238
 
234
- # Build autodiff explicit instantiations shared by autodiff and
235
- # optimization tests
236
- file(
237
- GLOB_RECURSE sleipnir_autodiff_explicit_double_src
238
- test/src/autodiff/*_explicit_double.cpp
239
- )
240
- add_library(
241
- sleipnir_autodiff_explicit_double
242
- OBJECT
243
- ${sleipnir_autodiff_explicit_double_src}
244
- )
245
- compiler_flags(sleipnir_autodiff_explicit_double)
246
- target_include_directories(
247
- sleipnir_autodiff_explicit_double
248
- PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test/include
249
- )
250
- target_link_libraries(sleipnir_autodiff_explicit_double PUBLIC Sleipnir)
239
+ set(sleipnir_allowed_test_scalar_types double ExplicitDouble)
240
+ foreach(type IN LISTS SLEIPNIR_TEST_SCALAR_TYPES)
241
+ if(NOT type IN_LIST sleipnir_allowed_test_scalar_types)
242
+ message(
243
+ FATAL_ERROR
244
+ "Unknown scalar type \"${type}\" in SLEIPNIR_TEST_SCALAR_TYPES"
245
+ )
246
+ endif()
247
+ endforeach()
248
+ if(NOT SLEIPNIR_TEST_SCALAR_TYPES)
249
+ message(FATAL_ERROR "SLEIPNIR_TEST_SCALAR_TYPES is empty")
250
+ endif()
251
+ list(JOIN SLEIPNIR_TEST_SCALAR_TYPES "," sleipnir_test_scalar_types)
252
+
253
+ if("ExplicitDouble" IN_LIST SLEIPNIR_TEST_SCALAR_TYPES)
254
+ # Build autodiff explicit instantiations
255
+ file(
256
+ GLOB_RECURSE sleipnir_autodiff_explicit_src
257
+ test/src/autodiff/*_explicit_double.cpp
258
+ )
259
+ add_library(
260
+ sleipnir_autodiff_explicit
261
+ OBJECT
262
+ ${sleipnir_autodiff_explicit_src}
263
+ )
264
+ compiler_flags(sleipnir_autodiff_explicit)
265
+ target_include_directories(
266
+ sleipnir_autodiff_explicit
267
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test/include
268
+ )
269
+ target_link_libraries(sleipnir_autodiff_explicit PUBLIC Sleipnir)
270
+
271
+ # Build optimization explicit instantiations
272
+ file(
273
+ GLOB_RECURSE sleipnir_optimization_explicit_src
274
+ test/src/optimization/*_explicit_double.cpp
275
+ )
276
+ add_library(
277
+ sleipnir_optimization_explicit
278
+ OBJECT
279
+ ${sleipnir_optimization_explicit_src}
280
+ )
281
+ compiler_flags(sleipnir_optimization_explicit)
282
+ target_include_directories(
283
+ sleipnir_optimization_explicit
284
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test/include
285
+ )
286
+ target_link_libraries(sleipnir_optimization_explicit PUBLIC Sleipnir)
287
+ endif()
251
288
 
252
289
  # Build Sleipnir autodiff tests
253
290
  file(GLOB_RECURSE sleipnir_autodiff_test_src test/src/autodiff/*_test.cpp)
254
291
  add_executable(sleipnir_autodiff_test ${sleipnir_autodiff_test_src})
255
292
  compiler_flags(sleipnir_autodiff_test)
293
+ target_compile_definitions(
294
+ sleipnir_autodiff_test
295
+ PRIVATE SCALAR_TYPES=${sleipnir_test_scalar_types}
296
+ )
256
297
  target_include_directories(
257
298
  sleipnir_autodiff_test
258
299
  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test/include
259
300
  )
260
301
  target_link_libraries(
261
302
  sleipnir_autodiff_test
262
- PUBLIC Sleipnir sleipnir_autodiff_explicit_double Catch2::Catch2WithMain
303
+ PUBLIC
304
+ Sleipnir
305
+ $<TARGET_NAME_IF_EXISTS:sleipnir_autodiff_explicit>
306
+ Catch2::Catch2WithMain
263
307
  )
264
308
 
265
309
  # Build Sleipnir optimization tests
266
310
  file(
267
311
  GLOB_RECURSE sleipnir_optimization_test_src
268
- test/src/optimization/*_explicit_double.cpp
269
312
  test/src/optimization/*_test.cpp
270
313
  )
271
314
  add_executable(sleipnir_optimization_test ${sleipnir_optimization_test_src})
272
315
  compiler_flags(sleipnir_optimization_test)
316
+ target_compile_definitions(
317
+ sleipnir_optimization_test
318
+ PRIVATE SCALAR_TYPES=${sleipnir_test_scalar_types}
319
+ )
273
320
  target_include_directories(
274
321
  sleipnir_optimization_test
275
322
  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test/include
276
323
  )
277
324
  target_link_libraries(
278
325
  sleipnir_optimization_test
279
- PUBLIC Sleipnir sleipnir_autodiff_explicit_double Catch2::Catch2WithMain
326
+ PUBLIC
327
+ Sleipnir
328
+ $<TARGET_NAME_IF_EXISTS:sleipnir_autodiff_explicit>
329
+ $<TARGET_NAME_IF_EXISTS:sleipnir_optimization_explicit>
330
+ Catch2::Catch2WithMain
280
331
  )
281
332
 
282
333
  # Build Sleipnir util tests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.6.7.dev72
3
+ Version: 0.6.7.dev74
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.dev72"
5
+ __version__ = "0.6.7.dev74"
@@ -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)²