sleipnirgroup-jormungandr 0.6.5.dev7__tar.gz → 0.6.5.dev9__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.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression.hpp +91 -60
  3. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/__init__.py +1 -1
  4. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/gradient_test.py +14 -0
  5. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/hessian_test.py +56 -0
  6. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/arm-none-eabi.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/gradient.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/hessian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/slice.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/multistart.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/problem.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/options.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/assert.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/concepts.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/empty.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/function_ref.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/pool.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/print.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/profiler.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/scope_exit.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/spy.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/symbol_exports.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/binders.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/docstrings.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/for_each_type.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/main.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_ocp.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_problem.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/try_cast.hpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/autodiff/__init__.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/optimization/__init__.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/jacobian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/variable_matrix_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/interior_point.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.5.dev7 → sleipnirgroup_jormungandr-0.6.5.dev9}/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.dev7
3
+ Version: 0.6.5.dev9
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.
@@ -1486,39 +1548,29 @@ struct MaxExpression final : Expression<Scalar> {
1486
1548
  std::string_view name() const override { return "max"; }
1487
1549
 
1488
1550
  Scalar grad_l(Scalar a, Scalar b) const override {
1489
- if (a >= b) {
1490
- return this->adjoint;
1491
- } else {
1492
- return Scalar(0);
1493
- }
1551
+ return a >= b ? this->adjoint : Scalar(0);
1494
1552
  }
1495
1553
 
1496
1554
  Scalar grad_r(Scalar a, Scalar b) const override {
1497
- if (b > a) {
1498
- return this->adjoint;
1499
- } else {
1500
- return Scalar(0);
1501
- }
1555
+ return a >= b ? Scalar(0) : this->adjoint;
1502
1556
  }
1503
1557
 
1504
1558
  ExpressionPtr<Scalar> grad_expr_l(
1505
1559
  const ExpressionPtr<Scalar>& a,
1506
1560
  const ExpressionPtr<Scalar>& b) const override {
1507
- if (a->val >= b->val) {
1508
- return this->adjoint_expr;
1509
- } else {
1510
- return constant_ptr(Scalar(0));
1511
- }
1561
+ // adjoint * (a >= b)
1562
+ // adjoint * (a - b >= 0)
1563
+ return this->adjoint_expr * is_nonnegative(a - b);
1512
1564
  }
1513
1565
 
1514
1566
  ExpressionPtr<Scalar> grad_expr_r(
1515
1567
  const ExpressionPtr<Scalar>& a,
1516
1568
  const ExpressionPtr<Scalar>& b) const override {
1517
- if (b->val > a->val) {
1518
- return this->adjoint_expr;
1519
- } else {
1520
- return constant_ptr(Scalar(0));
1521
- }
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);
1522
1574
  }
1523
1575
  };
1524
1576
 
@@ -1565,40 +1617,30 @@ struct MinExpression final : Expression<Scalar> {
1565
1617
  std::string_view name() const override { return "min"; }
1566
1618
 
1567
1619
  Scalar grad_l(Scalar a, Scalar b) const override {
1568
- if (a <= b) {
1569
- return this->adjoint;
1570
- } else {
1571
- return Scalar(0);
1572
- }
1620
+ return a <= b ? this->adjoint : Scalar(0);
1573
1621
  }
1574
1622
 
1575
1623
  Scalar grad_r([[maybe_unused]] Scalar a,
1576
1624
  [[maybe_unused]] Scalar b) const override {
1577
- if (b < a) {
1578
- return this->adjoint;
1579
- } else {
1580
- return Scalar(0);
1581
- }
1625
+ return a <= b ? Scalar(0) : this->adjoint;
1582
1626
  }
1583
1627
 
1584
1628
  ExpressionPtr<Scalar> grad_expr_l(
1585
1629
  const ExpressionPtr<Scalar>& a,
1586
1630
  const ExpressionPtr<Scalar>& b) const override {
1587
- if (a->val <= b->val) {
1588
- return this->adjoint_expr;
1589
- } else {
1590
- return constant_ptr(Scalar(0));
1591
- }
1631
+ // adjoint * (a <= b)
1632
+ // adjoint * (b >= a)
1633
+ // adjoint * (b - a >= 0)
1634
+ return this->adjoint_expr * is_nonnegative(b - a);
1592
1635
  }
1593
1636
 
1594
1637
  ExpressionPtr<Scalar> grad_expr_r(
1595
1638
  const ExpressionPtr<Scalar>& a,
1596
1639
  const ExpressionPtr<Scalar>& b) const override {
1597
- if (b->val < a->val) {
1598
- return this->adjoint_expr;
1599
- } else {
1600
- return constant_ptr(Scalar(0));
1601
- }
1640
+ // adjoint * !(a <= b)
1641
+ // adjoint * (a > b)
1642
+ // adjoint * (a - b > 0)
1643
+ return this->adjoint_expr * is_positive(a - b);
1602
1644
  }
1603
1645
  };
1604
1646
 
@@ -1656,12 +1698,7 @@ struct PowExpression final : Expression<Scalar> {
1656
1698
  using std::log;
1657
1699
  using std::pow;
1658
1700
 
1659
- // Since x log(x) -> 0 as x -> 0
1660
- if (base == Scalar(0)) {
1661
- return Scalar(0);
1662
- } else {
1663
- return this->adjoint * pow(base, power) * log(base);
1664
- }
1701
+ return this->adjoint * pow(base, power) * log(base);
1665
1702
  }
1666
1703
 
1667
1704
  ExpressionPtr<Scalar> grad_expr_l(
@@ -1674,13 +1711,7 @@ struct PowExpression final : Expression<Scalar> {
1674
1711
  ExpressionPtr<Scalar> grad_expr_r(
1675
1712
  const ExpressionPtr<Scalar>& base,
1676
1713
  const ExpressionPtr<Scalar>& power) const override {
1677
- // Since x log(x) -> 0 as x -> 0
1678
- if (base->val == Scalar(0)) {
1679
- // Return zero
1680
- return base;
1681
- } else {
1682
- return this->adjoint_expr * pow(base, power) * log(base);
1683
- }
1714
+ return this->adjoint_expr * pow(base, power) * log(base);
1684
1715
  }
1685
1716
  };
1686
1717
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.5.dev7"
5
+ __version__ = "0.6.5.dev9"
@@ -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)²