sleipnirgroup-jormungandr 0.6.5.dev8__tar.gz → 0.6.5.dev10__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.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/expression.hpp +87 -18
  3. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/src/sleipnir/__init__.py +1 -1
  4. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/autodiff/gradient_test.py +14 -0
  5. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/autodiff/hessian_test.py +56 -0
  6. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/cmake/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/cmake/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/cmake/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/cmake/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/cmake/arm-none-eabi.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/gradient.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/hessian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/slice.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/variable.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/multistart.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/ocp.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/problem.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/assert.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/concepts.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/empty.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/function_ref.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/pool.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/print.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/profiler.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/scope_exit.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/spy.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/include/sleipnir/util/symbol_exports.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_variable.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/binders.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/docstrings.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/for_each_type.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/main.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/bind_ocp.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/bind_problem.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/cpp/try_cast.hpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/src/sleipnir/autodiff/__init__.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/src/sleipnir/optimization/__init__.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/autodiff/jacobian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/autodiff/variable_matrix_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/optimization/solver/interior_point.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev10}/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.dev8
3
+ Version: 0.6.5.dev10
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -428,6 +428,8 @@ ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x);
428
428
  template <typename Scalar>
429
429
  ExpressionPtr<Scalar> exp(const ExpressionPtr<Scalar>& x);
430
430
  template <typename Scalar>
431
+ ExpressionPtr<Scalar> sign(const ExpressionPtr<Scalar>& x);
432
+ template <typename Scalar>
431
433
  ExpressionPtr<Scalar> sin(const ExpressionPtr<Scalar>& x);
432
434
  template <typename Scalar>
433
435
  ExpressionPtr<Scalar> sinh(const ExpressionPtr<Scalar>& x);
@@ -797,13 +799,7 @@ struct AbsExpression final : Expression<Scalar> {
797
799
  ExpressionPtr<Scalar> grad_expr_l(
798
800
  const ExpressionPtr<Scalar>& x,
799
801
  const ExpressionPtr<Scalar>&) const override {
800
- if (x->val < Scalar(0)) {
801
- return -this->adjoint_expr;
802
- } else if (x->val > Scalar(0)) {
803
- return this->adjoint_expr;
804
- } else {
805
- return constant_ptr(Scalar(0));
806
- }
802
+ return this->adjoint_expr * sign(x);
807
803
  }
808
804
  };
809
805
 
@@ -1356,6 +1352,72 @@ ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
1356
1352
  return make_expression_ptr<HypotExpression<Scalar>>(x, y);
1357
1353
  }
1358
1354
 
1355
+ /// Derived expression type for is_nonnegative().
1356
+ ///
1357
+ /// @tparam Scalar Scalar type.
1358
+ template <typename Scalar>
1359
+ struct IsNonnegativeExpression final : Expression<Scalar> {
1360
+ /// Constructs an unary expression (an operator with one argument).
1361
+ ///
1362
+ /// @param x Unary operator's operand.
1363
+ explicit constexpr IsNonnegativeExpression(ExpressionPtr<Scalar> x)
1364
+ : Expression<Scalar>{std::move(x)} {}
1365
+
1366
+ Scalar value(Scalar x, Scalar) const override {
1367
+ return x >= Scalar(0) ? Scalar(1) : Scalar(0);
1368
+ }
1369
+
1370
+ ExpressionType type() const override { return ExpressionType::NONLINEAR; }
1371
+
1372
+ std::string_view name() const override { return "is nonnegative"; }
1373
+ };
1374
+
1375
+ /// Returns one if x is nonnegative and zero otherwise.
1376
+ ///
1377
+ /// @tparam Scalar Scalar type.
1378
+ /// @param x The argument.
1379
+ template <typename Scalar>
1380
+ ExpressionPtr<Scalar> is_nonnegative(const ExpressionPtr<Scalar>& x) {
1381
+ if (x->type() == ExpressionType::CONSTANT) {
1382
+ return constant_ptr(x->val >= Scalar(0) ? Scalar(1) : Scalar(0));
1383
+ }
1384
+
1385
+ return make_expression_ptr<IsNonnegativeExpression<Scalar>>(x);
1386
+ }
1387
+
1388
+ /// Derived expression type for is_positive().
1389
+ ///
1390
+ /// @tparam Scalar Scalar type.
1391
+ template <typename Scalar>
1392
+ struct IsPositiveExpression final : Expression<Scalar> {
1393
+ /// Constructs an unary expression (an operator with one argument).
1394
+ ///
1395
+ /// @param x Unary operator's operand.
1396
+ explicit constexpr IsPositiveExpression(ExpressionPtr<Scalar> x)
1397
+ : Expression<Scalar>{std::move(x)} {}
1398
+
1399
+ Scalar value(Scalar x, Scalar) const override {
1400
+ return x > Scalar(0) ? Scalar(1) : Scalar(0);
1401
+ }
1402
+
1403
+ ExpressionType type() const override { return ExpressionType::NONLINEAR; }
1404
+
1405
+ std::string_view name() const override { return "is positive"; }
1406
+ };
1407
+
1408
+ /// Returns one if x is positive and zero otherwise.
1409
+ ///
1410
+ /// @tparam Scalar Scalar type.
1411
+ /// @param x The argument.
1412
+ template <typename Scalar>
1413
+ ExpressionPtr<Scalar> is_positive(const ExpressionPtr<Scalar>& x) {
1414
+ if (x->type() == ExpressionType::CONSTANT) {
1415
+ return constant_ptr(x->val > Scalar(0) ? Scalar(1) : Scalar(0));
1416
+ }
1417
+
1418
+ return make_expression_ptr<IsPositiveExpression<Scalar>>(x);
1419
+ }
1420
+
1359
1421
  /// Derived expression type for log().
1360
1422
  ///
1361
1423
  /// @tparam Scalar Scalar type.
@@ -1496,13 +1558,19 @@ struct MaxExpression final : Expression<Scalar> {
1496
1558
  ExpressionPtr<Scalar> grad_expr_l(
1497
1559
  const ExpressionPtr<Scalar>& a,
1498
1560
  const ExpressionPtr<Scalar>& b) const override {
1499
- return a->val >= b->val ? this->adjoint_expr : constant_ptr(Scalar(0));
1561
+ // adjoint * (a >= b)
1562
+ // adjoint * (a - b >= 0)
1563
+ return this->adjoint_expr * is_nonnegative(a - b);
1500
1564
  }
1501
1565
 
1502
1566
  ExpressionPtr<Scalar> grad_expr_r(
1503
1567
  const ExpressionPtr<Scalar>& a,
1504
1568
  const ExpressionPtr<Scalar>& b) const override {
1505
- return a->val >= b->val ? constant_ptr(Scalar(0)) : this->adjoint_expr;
1569
+ // adjoint * !(a >= b)
1570
+ // adjoint * (a < b)
1571
+ // adjoint * (b > a)
1572
+ // adjoint * (b - a > 0)
1573
+ return this->adjoint_expr * is_positive(b - a);
1506
1574
  }
1507
1575
  };
1508
1576
 
@@ -1560,13 +1628,19 @@ struct MinExpression final : Expression<Scalar> {
1560
1628
  ExpressionPtr<Scalar> grad_expr_l(
1561
1629
  const ExpressionPtr<Scalar>& a,
1562
1630
  const ExpressionPtr<Scalar>& b) const override {
1563
- return a->val <= b->val ? this->adjoint_expr : constant_ptr(Scalar(0));
1631
+ // adjoint * (a <= b)
1632
+ // adjoint * (b >= a)
1633
+ // adjoint * (b - a >= 0)
1634
+ return this->adjoint_expr * is_nonnegative(b - a);
1564
1635
  }
1565
1636
 
1566
1637
  ExpressionPtr<Scalar> grad_expr_r(
1567
1638
  const ExpressionPtr<Scalar>& a,
1568
1639
  const ExpressionPtr<Scalar>& b) const override {
1569
- return a->val <= b->val ? constant_ptr(Scalar(0)) : this->adjoint_expr;
1640
+ // adjoint * !(a <= b)
1641
+ // adjoint * (a > b)
1642
+ // adjoint * (a - b > 0)
1643
+ return this->adjoint_expr * is_positive(a - b);
1570
1644
  }
1571
1645
  };
1572
1646
 
@@ -1624,9 +1698,7 @@ struct PowExpression final : Expression<Scalar> {
1624
1698
  using std::log;
1625
1699
  using std::pow;
1626
1700
 
1627
- // Since x log(x) -> 0 as x -> 0
1628
- return base == Scalar(0) ? Scalar(0)
1629
- : this->adjoint * pow(base, power) * log(base);
1701
+ return this->adjoint * pow(base, power) * log(base);
1630
1702
  }
1631
1703
 
1632
1704
  ExpressionPtr<Scalar> grad_expr_l(
@@ -1639,10 +1711,7 @@ struct PowExpression final : Expression<Scalar> {
1639
1711
  ExpressionPtr<Scalar> grad_expr_r(
1640
1712
  const ExpressionPtr<Scalar>& base,
1641
1713
  const ExpressionPtr<Scalar>& power) const override {
1642
- // Since x log(x) -> 0 as x -> 0
1643
- return base->val == Scalar(0)
1644
- ? base // Return zero
1645
- : this->adjoint_expr * pow(base, power) * log(base);
1714
+ return this->adjoint_expr * pow(base, power) * log(base);
1646
1715
  }
1647
1716
  };
1648
1717
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.5.dev8"
5
+ __version__ = "0.6.5.dev10"
@@ -363,6 +363,20 @@ def test_abs():
363
363
  assert g.get().value()[0, 0] == 0.0
364
364
  assert g.value()[0, 0] == 0.0
365
365
 
366
+ f = autodiff.abs(x * x - 4.0)
367
+ g = Gradient(f, x)
368
+ symbolic_g = g.get()
369
+
370
+ x.set_value(3.0)
371
+ assert symbolic_g.value()[0, 0] == 6.0
372
+ assert g.value()[0, 0] == 6.0
373
+ assert g.get().value()[0, 0] == 6.0
374
+
375
+ x.set_value(1.0)
376
+ assert symbolic_g.value()[0, 0] == -2.0
377
+ assert g.value()[0, 0] == -2.0
378
+ assert g.get().value()[0, 0] == -2.0
379
+
366
380
 
367
381
  def test_atan2():
368
382
  x = Variable()
@@ -209,6 +209,62 @@ def test_nested_powers():
209
209
  assert H[0, 0] == pytest.approx(12 * x0 * x0, abs=1e-12)
210
210
 
211
211
 
212
+ def test_max_and_min():
213
+ input = VariableMatrix(2)
214
+ expected_y = np.array([[0.0, 0.0], [0.0, 2.0]])
215
+ expected_x = np.array([[2.0, 0.0], [0.0, 0.0]])
216
+
217
+ def check(f, x0, y0, x1, y1):
218
+ hessian = Hessian(f, input)
219
+ symbolic_H = hessian.get()
220
+
221
+ input[0].set_value(x0)
222
+ input[1].set_value(y0)
223
+ np.testing.assert_array_equal(symbolic_H.value(), expected_y)
224
+ np.testing.assert_array_equal(hessian.value().todense(), expected_y)
225
+
226
+ input[0].set_value(x1)
227
+ input[1].set_value(y1)
228
+ np.testing.assert_array_equal(symbolic_H.value(), expected_x)
229
+ np.testing.assert_array_equal(hessian.value().todense(), expected_x)
230
+
231
+ input[0].set_value(2.0)
232
+ input[1].set_value(2.0)
233
+ np.testing.assert_array_equal(symbolic_H.value(), expected_x)
234
+ np.testing.assert_array_equal(hessian.value().todense(), expected_x)
235
+
236
+ x_squared = input[0] * input[0]
237
+ y_squared = input[1] * input[1]
238
+ check(autodiff.max(x_squared, y_squared), 1.0, 2.0, 3.0, 2.0)
239
+ check(autodiff.min(x_squared, y_squared), 2.0, 1.0, 2.0, 3.0)
240
+
241
+
242
+ def test_pow():
243
+ input = VariableMatrix(2)
244
+ f = autodiff.pow(input[0] + 1.0, input[1])
245
+ hessian = Hessian(f, input)
246
+
247
+ symbolic_H = hessian.get()
248
+
249
+ input[0].set_value(2.0)
250
+ input[1].set_value(3.0)
251
+ mixed = 9.0 * (1.0 + 3.0 * math.log(3.0))
252
+ expected = np.array([[18.0, mixed], [mixed, 27.0 * math.log(3.0) ** 2]])
253
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
254
+ np.testing.assert_allclose(
255
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
256
+ )
257
+
258
+ input[0].set_value(3.0)
259
+ input[1].set_value(2.0)
260
+ mixed = 4.0 * (1.0 + 2.0 * math.log(4.0))
261
+ expected = np.array([[2.0, mixed], [mixed, 16.0 * math.log(4.0) ** 2]])
262
+ np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
263
+ np.testing.assert_allclose(
264
+ hessian.value().todense(), expected, rtol=0.0, atol=1e-12
265
+ )
266
+
267
+
212
268
  def test_rosenbrock():
213
269
  # z = (1 − x)² + 100(y − x²)²
214
270
  # = 100(−x² + y)² + (−x + 1)²