sleipnirgroup-jormungandr 0.6.7.dev13__tar.gz → 0.6.7.dev14__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 (122) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/expression.hpp +97 -23
  3. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/variable.hpp +1 -1
  4. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/src/sleipnir/__init__.py +1 -1
  5. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/CMakeLists.txt +0 -0
  6. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/LICENSE.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/README.md +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/SleipnirConfig.cmake.in +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/cmake/BuildTypes.cmake +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/cmake/CompilerFlags.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/cmake/Pybind11Mkdoc.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/cmake/SubdirList.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/cmake/arm-none-eabi.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/gradient.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/hessian.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/slice.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/multistart.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/ocp.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/problem.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/options.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/assert.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/concepts.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/empty.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/function_ref.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/pool.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/print.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/profiler.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/scope_exit.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/spy.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/include/sleipnir/util/symbol_exports.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/pyproject.toml +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_variable.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/binders.hpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/docstrings.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/for_each_type.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/main.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/bind_ocp.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/bind_problem.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/cpp/try_cast.hpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/src/sleipnir/autodiff/__init__.py +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/src/sleipnir/optimization/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/autodiff/gradient_test.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/autodiff/hessian_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/autodiff/jacobian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/autodiff/variable_matrix_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/autodiff/variable_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/cart_pole_problem_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/cart_pole_util.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/constraints_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/decision_variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/differential_drive_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/differential_drive_util.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/double_integrator_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/flywheel_ocp_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/flywheel_problem_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/linear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/multistart_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/nonlinear_problem_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/problem_spy_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/quadratic_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/rk4.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/solver/exit_status_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/python/test/optimization/trivial_problem_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/autodiff/gradient.cpp +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/autodiff/hessian.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/autodiff/jacobian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/autodiff/variable_matrix.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/optimization/ocp.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/optimization/problem.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/optimization/solver/ipm.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/optimization/solver/newton.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/optimization/solver/sqp.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev13 → sleipnirgroup_jormungandr-0.6.7.dev14}/src/util/pool.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.6.7.dev13
3
+ Version: 0.6.7.dev14
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -1396,11 +1396,11 @@ template <typename Scalar>
1396
1396
  ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
1397
1397
  const ExpressionPtr<Scalar>& y);
1398
1398
 
1399
- /// Derived expression type for hypot().
1399
+ /// Derived expression type for hypot() with two arguments.
1400
1400
  ///
1401
1401
  /// @tparam Scalar Scalar type.
1402
1402
  template <typename Scalar>
1403
- struct HypotExpression final : Expression<Scalar> {
1403
+ struct Hypot2Expression final : Expression<Scalar> {
1404
1404
  /// Binary operator's left operand.
1405
1405
  ExpressionPtr<Scalar> x;
1406
1406
 
@@ -1411,7 +1411,7 @@ struct HypotExpression final : Expression<Scalar> {
1411
1411
  ///
1412
1412
  /// @param x Binary operator's left operand.
1413
1413
  /// @param y Binary operator's right operand.
1414
- constexpr HypotExpression(ExpressionPtr<Scalar> x, ExpressionPtr<Scalar> y)
1414
+ constexpr Hypot2Expression(ExpressionPtr<Scalar> x, ExpressionPtr<Scalar> y)
1415
1415
  : x{std::move(x)}, y{std::move(y)} {}
1416
1416
 
1417
1417
  void visit_args(
@@ -1430,32 +1430,102 @@ struct HypotExpression final : Expression<Scalar> {
1430
1430
  std::string_view name() const override { return "hypot"; }
1431
1431
 
1432
1432
  void accumulate_adjoints() const override {
1433
- x->adj += grad_l();
1434
- y->adj += grad_r();
1433
+ using std::hypot;
1434
+ Scalar norm = hypot(x->val, y->val);
1435
+ x->adj += this->adj * x->val / norm;
1436
+ y->adj += this->adj * y->val / norm;
1435
1437
  }
1436
1438
 
1437
1439
  void accumulate_adjoints_expr() const override {
1438
- x->adj_expr += grad_expr_l();
1439
- y->adj_expr += grad_expr_r();
1440
+ auto norm = hypot(x, y);
1441
+ x->adj_expr += this->adj_expr * x / norm;
1442
+ y->adj_expr += this->adj_expr * y / norm;
1440
1443
  }
1444
+ };
1441
1445
 
1442
- private:
1443
- Scalar grad_l() const {
1444
- using std::hypot;
1445
- return this->adj * x->val / hypot(x->val, y->val);
1446
+ /// hypot() for Expressions.
1447
+ ///
1448
+ /// @tparam Scalar Scalar type.
1449
+ /// @param x The x argument.
1450
+ /// @param y The y argument.
1451
+ template <typename Scalar>
1452
+ ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
1453
+ const ExpressionPtr<Scalar>& y) {
1454
+ using enum ExpressionType;
1455
+ using std::hypot;
1456
+
1457
+ // Prune expression
1458
+ if (x->is_constant(Scalar(0))) {
1459
+ return abs(y);
1460
+ } else if (y->is_constant(Scalar(0))) {
1461
+ return abs(x);
1446
1462
  }
1447
1463
 
1448
- Scalar grad_r() const {
1464
+ // Evaluate constant
1465
+ if (x->type() == CONSTANT && y->type() == CONSTANT) {
1466
+ return constant_ptr(hypot(x->val, y->val));
1467
+ }
1468
+
1469
+ return make_expression_ptr<Hypot2Expression<Scalar>>(x, y);
1470
+ }
1471
+
1472
+ template <typename Scalar>
1473
+ ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
1474
+ const ExpressionPtr<Scalar>& y,
1475
+ const ExpressionPtr<Scalar>& z);
1476
+
1477
+ /// Derived expression type for hypot() with three arguments.
1478
+ ///
1479
+ /// @tparam Scalar Scalar type.
1480
+ template <typename Scalar>
1481
+ struct Hypot3Expression final : Expression<Scalar> {
1482
+ /// Ternary operator's first operand.
1483
+ ExpressionPtr<Scalar> x;
1484
+
1485
+ /// Ternary operator's second operand.
1486
+ ExpressionPtr<Scalar> y;
1487
+
1488
+ /// Ternary operator's third operand.
1489
+ ExpressionPtr<Scalar> z;
1490
+
1491
+ /// Constructs a ternary expression (an operator with three arguments).
1492
+ ///
1493
+ /// @param x Ternary operator's first operand.
1494
+ /// @param y Ternary operator's second operand.
1495
+ /// @param z Ternary operator's third operand.
1496
+ constexpr Hypot3Expression(ExpressionPtr<Scalar> x, ExpressionPtr<Scalar> y,
1497
+ ExpressionPtr<Scalar> z)
1498
+ : x{std::move(x)}, y{std::move(y)}, z{std::move(z)} {}
1499
+
1500
+ void visit_args(
1501
+ function_ref<void(Expression<Scalar>* arg)> func) const override {
1502
+ func(x.get());
1503
+ func(y.get());
1504
+ func(z.get());
1505
+ }
1506
+
1507
+ Scalar value() const override {
1449
1508
  using std::hypot;
1450
- return this->adj * y->val / hypot(x->val, y->val);
1509
+ return hypot(x->val, y->val, z->val);
1451
1510
  }
1452
1511
 
1453
- ExpressionPtr<Scalar> grad_expr_l() const {
1454
- return this->adj_expr * x / hypot(x, y);
1512
+ ExpressionType type() const override { return ExpressionType::NONLINEAR; }
1513
+
1514
+ std::string_view name() const override { return "hypot"; }
1515
+
1516
+ void accumulate_adjoints() const override {
1517
+ using std::hypot;
1518
+ Scalar norm = hypot(x->val, y->val, z->val);
1519
+ x->adj += this->adj * x->val / norm;
1520
+ y->adj += this->adj * y->val / norm;
1521
+ z->adj += this->adj * z->val / norm;
1455
1522
  }
1456
1523
 
1457
- ExpressionPtr<Scalar> grad_expr_r() const {
1458
- return this->adj_expr * y / hypot(x, y);
1524
+ void accumulate_adjoints_expr() const override {
1525
+ auto norm = hypot(x, y, z);
1526
+ x->adj_expr += this->adj_expr * x / norm;
1527
+ y->adj_expr += this->adj_expr * y / norm;
1528
+ z->adj_expr += this->adj_expr * z / norm;
1459
1529
  }
1460
1530
  };
1461
1531
 
@@ -1464,25 +1534,29 @@ struct HypotExpression final : Expression<Scalar> {
1464
1534
  /// @tparam Scalar Scalar type.
1465
1535
  /// @param x The x argument.
1466
1536
  /// @param y The y argument.
1537
+ /// @param z The z argument.
1467
1538
  template <typename Scalar>
1468
1539
  ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
1469
- const ExpressionPtr<Scalar>& y) {
1540
+ const ExpressionPtr<Scalar>& y,
1541
+ const ExpressionPtr<Scalar>& z) {
1470
1542
  using enum ExpressionType;
1471
1543
  using std::hypot;
1472
1544
 
1473
1545
  // Prune expression
1474
1546
  if (x->is_constant(Scalar(0))) {
1475
- return abs(y);
1547
+ return hypot(y, z);
1476
1548
  } else if (y->is_constant(Scalar(0))) {
1477
- return abs(x);
1549
+ return hypot(x, z);
1550
+ } else if (z->is_constant(Scalar(0))) {
1551
+ return hypot(x, y);
1478
1552
  }
1479
1553
 
1480
1554
  // Evaluate constant
1481
- if (x->type() == CONSTANT && y->type() == CONSTANT) {
1482
- return constant_ptr(hypot(x->val, y->val));
1555
+ if (x->type() == CONSTANT && y->type() == CONSTANT && z->type() == CONSTANT) {
1556
+ return constant_ptr(hypot(x->val, y->val, z->val));
1483
1557
  }
1484
1558
 
1485
- return make_expression_ptr<HypotExpression<Scalar>>(x, y);
1559
+ return make_expression_ptr<Hypot3Expression<Scalar>>(x, y, z);
1486
1560
  }
1487
1561
 
1488
1562
  /// Derived expression type for is_nonnegative().
@@ -708,7 +708,7 @@ Variable<Scalar> tanh(const Variable<Scalar>& x) {
708
708
  template <typename Scalar>
709
709
  Variable<Scalar> hypot(const Variable<Scalar>& x, const Variable<Scalar>& y,
710
710
  const Variable<Scalar>& z) {
711
- return Variable{sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))};
711
+ return Variable{detail::hypot(x.expr, y.expr, z.expr)};
712
712
  }
713
713
 
714
714
  // The standard form for equality constraints is c(x) = 0, and the standard form
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev13"
5
+ __version__ = "0.6.7.dev14"