sleipnirgroup-jormungandr 0.6.5.dev22__tar.gz → 0.6.5.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.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable_block.hpp +7 -0
  3. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable_matrix.hpp +84 -0
  4. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable_block.cpp +2 -0
  5. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable_matrix.cpp +1 -0
  6. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/docstrings.hpp +12 -0
  7. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/__init__.py +1 -1
  8. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/variable_matrix_test.py +39 -0
  9. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/CMakeLists.txt +0 -0
  10. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/LICENSE.txt +0 -0
  11. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/README.md +0 -0
  12. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/SleipnirConfig.cmake.in +0 -0
  13. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/BuildTypes.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/CompilerFlags.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/Pybind11Mkdoc.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/SubdirList.cmake +0 -0
  17. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/arm-none-eabi.cmake +0 -0
  18. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/gradient.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/hessian.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/slice.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/multistart.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/problem.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/options.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/assert.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/concepts.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/empty.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/function_ref.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/pool.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/print.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/profiler.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/scope_exit.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/spy.hpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/symbol_exports.hpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/pyproject.toml +0 -0
  70. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/binders.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/for_each_type.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/main.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_ocp.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_problem.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/try_cast.hpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/autodiff/__init__.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/optimization/__init__.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/gradient_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/hessian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/jacobian_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/interior_point.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.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.5.dev22
3
+ Version: 0.6.5.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
@@ -624,6 +624,13 @@ class VariableBlock : public SleipnirBase {
624
624
  return result;
625
625
  }
626
626
 
627
+ /// Returns the matrix exponential.
628
+ ///
629
+ /// @return The matrix exponential.
630
+ std::remove_cv_t<Mat> exp() const {
631
+ return std::remove_cv_t<Mat>{*this}.exp();
632
+ }
633
+
627
634
  #ifndef DOXYGEN_SHOULD_SKIP_THIS
628
635
 
629
636
  class iterator {
@@ -3,6 +3,7 @@
3
3
  #pragma once
4
4
 
5
5
  #include <algorithm>
6
+ #include <array>
6
7
  #include <concepts>
7
8
  #include <cstddef>
8
9
  #include <initializer_list>
@@ -12,6 +13,7 @@
12
13
  #include <vector>
13
14
 
14
15
  #include <Eigen/Core>
16
+ #include <Eigen/LU>
15
17
  #include <Eigen/QR>
16
18
  #include <gch/small_vector.hpp>
17
19
 
@@ -1036,6 +1038,88 @@ class VariableMatrix : public SleipnirBase {
1036
1038
  return result;
1037
1039
  }
1038
1040
 
1041
+ /// Returns the matrix exponential.
1042
+ ///
1043
+ /// @return The matrix exponential.
1044
+ VariableMatrix<Scalar> exp() const {
1045
+ slp_assert(rows() == cols());
1046
+
1047
+ // Coefficients for (13, 13) Padé approximant of exp(A) are from the
1048
+ // following program:
1049
+ //
1050
+ // #!/usr/bin/env python
1051
+ //
1052
+ // import mpmath as mp
1053
+ //
1054
+ // # https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats
1055
+ // mp.mp.prec = 113 # quad precision
1056
+ //
1057
+ // L = 13
1058
+ // M = 13
1059
+ // p, q = mp.pade(mp.taylor(mp.exp, 0, L + M), L, M)
1060
+ //
1061
+ // print("constexpr std::array p{")
1062
+ // for k, p_k in enumerate(p):
1063
+ // print(f"Scalar({p_k}L){',' if k < len(p) - 1 else '};'}")
1064
+ // print("constexpr std::array q{")
1065
+ // for k, q_k in enumerate(q):
1066
+ // print(f"Scalar({q_k}L){',' if k < len(q) - 1 else '};'}")
1067
+ constexpr size_t NUM_COEFFS = 14;
1068
+ constexpr std::array p{Scalar(1.0L),
1069
+ Scalar(0.499999999999999999999987615564159L),
1070
+ Scalar(0.119999999999999999999993719796468L),
1071
+ Scalar(0.0183333333333333333333318078905823L),
1072
+ Scalar(0.00199275362318840579710121408775205L),
1073
+ Scalar(0.00016304347826086956521736560868541L),
1074
+ Scalar(1.03519668737060041407846479512981e-05L),
1075
+ Scalar(5.17598343685300207039205144279119e-07L),
1076
+ Scalar(2.04315135665250081725989398668247e-08L),
1077
+ Scalar(6.30602270571759511499920806570486e-10L),
1078
+ Scalar(1.48377004840414002705850442238441e-11L),
1079
+ Scalar(2.52915349159796595521307855480881e-13L),
1080
+ Scalar(2.81017054621996217245857568431558e-15L),
1081
+ Scalar(1.54404975067030888596595580141692e-17L)};
1082
+ constexpr std::array q{Scalar(1.0L),
1083
+ Scalar(-0.500000000000000000000012384435841L),
1084
+ Scalar(0.120000000000000000000006104232309L),
1085
+ Scalar(-0.0183333333333333333333347707904729L),
1086
+ Scalar(0.00199275362318840579710166350137732L),
1087
+ Scalar(-0.000163043478260869565217413851346892L),
1088
+ Scalar(1.03519668737060041407885187519331e-05L),
1089
+ Scalar(-5.17598343685300207039443859549262e-07L),
1090
+ Scalar(2.04315135665250081726103781506842e-08L),
1091
+ Scalar(-6.30602270571759511500345035969254e-10L),
1092
+ Scalar(1.48377004840414002705969744674248e-11L),
1093
+ Scalar(-2.52915349159796595521550648156349e-13L),
1094
+ Scalar(2.81017054621996217246180850207342e-15L),
1095
+ Scalar(-1.54404975067030888596810607146175e-17L)};
1096
+ static_assert(p.size() == NUM_COEFFS);
1097
+ static_assert(q.size() == NUM_COEFFS);
1098
+
1099
+ // 13
1100
+ // P = Σ pₖAᵏ
1101
+ // k=0
1102
+ //
1103
+ // 13
1104
+ // Q = Σ qₖAᵏ
1105
+ // k=0
1106
+ VariableMatrix<Scalar> P{
1107
+ Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(rows(), p[0])
1108
+ .asDiagonal()};
1109
+ VariableMatrix<Scalar> Q{
1110
+ Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(rows(), q[0])
1111
+ .asDiagonal()};
1112
+ auto A_pow = *this;
1113
+ for (size_t k = 1; k < NUM_COEFFS; ++k) {
1114
+ P += p[k] * A_pow;
1115
+ Q += q[k] * A_pow;
1116
+ A_pow *= *this;
1117
+ }
1118
+
1119
+ // exp(A) ≈ P/Q
1120
+ return VariableMatrix<Scalar>{Q.to_eigen().lu().solve(P.to_eigen())};
1121
+ }
1122
+
1039
1123
  #ifndef DOXYGEN_SHOULD_SKIP_THIS
1040
1124
 
1041
1125
  class iterator {
@@ -392,6 +392,8 @@ void bind_variable_block(
392
392
  const std::function<Variable<double>(const Variable<double>& x)>&
393
393
  unary_op) { return self.cwise_transform(unary_op); },
394
394
  "func"_a, DOC(slp, VariableBlock, cwise_transform));
395
+ cls.def("exp", &VariableBlock<VariableMatrix<double>>::exp,
396
+ DOC(slp, VariableBlock, exp));
395
397
 
396
398
  // Comparison operators
397
399
  for_each_type<nb::detail::self_t, double, int, Variable<double>>(
@@ -439,6 +439,7 @@ void bind_variable_matrix(nb::module_& autodiff,
439
439
  const std::function<Variable<double>(const Variable<double>& x)>&
440
440
  unary_op) { return self.cwise_transform(unary_op); },
441
441
  "func"_a, DOC(slp, VariableMatrix, cwise_transform));
442
+ cls.def("exp", &VariableMatrix<double>::exp, DOC(slp, VariableMatrix, exp));
442
443
  cls.def_static("identity", &VariableMatrix<double>::identity, "rows"_a,
443
444
  DOC(slp, VariableMatrix, identity));
444
445
  cls.def_static("zero", &VariableMatrix<double>::zero, "rows"_a, "cols"_a,
@@ -1160,6 +1160,12 @@ R"doc(Returns end iterator.
1160
1160
  Returns:
1161
1161
  End iterator.)doc";
1162
1162
 
1163
+ static const char *__doc_slp_VariableBlock_exp =
1164
+ R"doc(Returns the matrix exponential.
1165
+
1166
+ Returns:
1167
+ The matrix exponential.)doc";
1168
+
1163
1169
  static const char *__doc_slp_VariableBlock_iterator = R"doc()doc";
1164
1170
 
1165
1171
  static const char *__doc_slp_VariableBlock_iterator_iterator = R"doc()doc";
@@ -1812,6 +1818,12 @@ R"doc(Returns const end iterator.
1812
1818
  Returns:
1813
1819
  Const end iterator.)doc";
1814
1820
 
1821
+ static const char *__doc_slp_VariableMatrix_exp =
1822
+ R"doc(Returns the matrix exponential.
1823
+
1824
+ Returns:
1825
+ The matrix exponential.)doc";
1826
+
1815
1827
  static const char *__doc_slp_VariableMatrix_identity =
1816
1828
  R"doc(Returns an identity variable matrix.
1817
1829
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.5.dev22"
5
+ __version__ = "0.6.5.dev23"
@@ -404,6 +404,45 @@ def test_cwise_reduce():
404
404
  assert (result.value() == np.array([[16.0, 27.0, 40.0], [55.0, 72.0, 91.0]])).all()
405
405
 
406
406
 
407
+ def test_exp():
408
+ A1 = VariableMatrix([[4.0]])
409
+ np.testing.assert_allclose(A1.exp().value() @ (-A1).exp().value(), np.identity(1))
410
+ np.testing.assert_allclose(
411
+ A1[:, :].exp().value() @ (-A1[:, :]).exp().value(), np.identity(1)
412
+ )
413
+
414
+ A2 = VariableMatrix([[0.0, 1.0], [0.0, -0.5]])
415
+ np.testing.assert_allclose(
416
+ A2.exp().value() @ (-A2).exp().value(), np.identity(2), atol=1e-15
417
+ )
418
+ np.testing.assert_allclose(
419
+ A2[:, :].exp().value() @ (-A2[:, :]).exp().value(), np.identity(2), atol=1e-15
420
+ )
421
+
422
+ A3 = VariableMatrix([[0.0, 1.0], [0.0, 10.0]])
423
+ np.testing.assert_allclose(
424
+ A3.exp().value() @ (-A3).exp().value(), np.identity(2), atol=1e-15
425
+ )
426
+ np.testing.assert_allclose(
427
+ A3[:, :].exp().value() @ (-A3[:, :]).exp().value(), np.identity(2), atol=1e-15
428
+ )
429
+ A4 = VariableMatrix([[1.0, 10.0], [0.0, 0.0]])
430
+ np.testing.assert_allclose(
431
+ A4.exp().value() @ (-A4).exp().value(), np.identity(2), atol=1e-15
432
+ )
433
+ np.testing.assert_allclose(
434
+ A4[:, :].exp().value() @ (-A4[:, :]).exp().value(), np.identity(2), atol=1e-15
435
+ )
436
+
437
+ A5 = VariableMatrix([[2.0, 3.0], [4.0, 5.0]])
438
+ np.testing.assert_allclose(
439
+ A5.exp().value() @ (-A5).exp().value(), np.identity(2), atol=1e-12
440
+ )
441
+ np.testing.assert_allclose(
442
+ A5[:, :].exp().value() @ (-A5[:, :]).exp().value(), np.identity(2), atol=1e-12
443
+ )
444
+
445
+
407
446
  def test_block_free_function():
408
447
  A = VariableMatrix([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
409
448
  B = VariableMatrix([[7.0], [8.0]])