sleipnirgroup-jormungandr 0.6.7.dev23__tar.gz → 0.6.7.dev24__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.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/bounds.hpp +28 -24
  3. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/__init__.py +1 -1
  4. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/CMakeLists.txt +0 -0
  5. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/LICENSE.txt +0 -0
  6. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/README.md +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/SleipnirConfig.cmake.in +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/BuildTypes.cmake +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/CompilerFlags.cmake +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/Pybind11Mkdoc.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/SubdirList.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/arm-none-eabi.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression.hpp +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/gradient.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/hessian.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/slice.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/multistart.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/problem.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/options.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/assert.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/concepts.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/empty.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/function_ref.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/pool.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/print.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/profiler.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/scope_exit.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/spy.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/symbol_exports.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/pyproject.toml +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/binders.hpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/docstrings.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/for_each_type.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/main.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_ocp.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_problem.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/try_cast.hpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/autodiff/__init__.py +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/optimization/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/gradient_test.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/hessian_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/jacobian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/variable_matrix_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/variable_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_problem_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_util.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/constraints_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/decision_variable_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_util.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/double_integrator_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/flywheel_ocp_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/flywheel_problem_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/linear_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/multistart_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/near.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/nonlinear_problem_test.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/problem_spy_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/quadratic_problem_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/rk4.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/solver/exit_status_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/trivial_problem_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/gradient.cpp +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/hessian.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/jacobian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/variable_matrix.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/ocp.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/problem.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/ipm.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/newton.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/sqp.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev23 → sleipnirgroup_jormungandr-0.6.7.dev24}/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.dev23
3
+ Version: 0.6.7.dev24
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -48,27 +48,35 @@ struct Bounds {
48
48
  /// @param inequality_constraints Variables representing the left-hand side of
49
49
  /// cᵢ(decision_variables) ≥ 0.
50
50
  /// @param A_i The Jacobian of inequality_constraints wrt decision_variables,
51
- /// evaluated anywhere, in *row-major* storage; in practice, since we
52
- /// typically store Jacobians column-major, the user of this function must
53
- /// perform a transpose.
51
+ /// evaluated anywhere.
54
52
  template <typename Scalar>
55
- Bounds<Scalar> get_bounds(
56
- std::span<Variable<Scalar>> decision_variables,
57
- std::span<Variable<Scalar>> inequality_constraints,
58
- const Eigen::SparseMatrix<Scalar, Eigen::RowMajor>& A_i) {
59
- // TODO: A blocked, out-of-place transpose should be much faster than
60
- // traversing row major on a column major matrix unless we have few linear
61
- // constraints (using a heuristic to choose between this and staying column
62
- // major based on the number of constraints would be an easy performance
63
- // improvement.)
64
-
53
+ Bounds<Scalar> get_bounds(std::span<Variable<Scalar>> decision_variables,
54
+ std::span<Variable<Scalar>> inequality_constraints,
55
+ const Eigen::SparseMatrix<Scalar>& A_i) {
65
56
  // NB: Casting to long is unspecified if the size of decision_variable.size()
66
57
  // is greater than the max long value, but then we wouldn't be able to fill
67
58
  // A_i correctly anyway.
68
59
  slp_assert(static_cast<Eigen::Index>(decision_variables.size()) ==
69
- A_i.innerSize());
60
+ A_i.cols());
70
61
  slp_assert(static_cast<Eigen::Index>(inequality_constraints.size()) ==
71
- A_i.outerSize());
62
+ A_i.rows());
63
+
64
+ // For each row of A_i, count its structural nonzeros and record the column
65
+ // and value of its most recently visited nonzero. If the count is 1, that's
66
+ // the row's only nonzero; otherwise, the recorded column and value are
67
+ // meaningless, but those rows aren't bound constraints, so they're never
68
+ // read.
69
+ gch::small_vector<int> row_num_nonzeros(A_i.rows(), 0);
70
+ gch::small_vector<int> row_nonzero_col(A_i.rows());
71
+ gch::small_vector<Scalar> row_nonzero_value(A_i.rows());
72
+ for (int col = 0; col < A_i.outerSize(); ++col) {
73
+ for (typename Eigen::SparseMatrix<Scalar>::InnerIterator it{A_i, col}; it;
74
+ ++it) {
75
+ ++row_num_nonzeros[it.row()];
76
+ row_nonzero_col[it.row()] = it.col();
77
+ row_nonzero_value[it.row()] = it.value();
78
+ }
79
+ }
72
80
 
73
81
  // Maps each decision variable's index to the indices of its upper and lower
74
82
  // bounds if they exist, or NO_BOUND if they do not; used only for bookkeeping
@@ -102,10 +110,7 @@ Bounds<Scalar> get_bounds(
102
110
  ExpressionType::LINEAR) {
103
111
  continue;
104
112
  }
105
- const Eigen::SparseVector<Scalar>& row_A_i =
106
- A_i.innerVector(constraint_index);
107
- const auto non_zeros = row_A_i.nonZeros();
108
- if (non_zeros != 1) {
113
+ if (row_num_nonzeros[constraint_index] != 1) {
109
114
  // Constraint is not a bound because either:
110
115
  //
111
116
  // 1. It's in more than one variable
@@ -122,10 +127,9 @@ Bounds<Scalar> get_bounds(
122
127
  // and a ≠ 0. The gradient of c is then aeᵢ (where eᵢ denotes the i-th basis
123
128
  // element), and c(0) = b. If c(x) ≥ 0, then since either a < 0 or a > 0, we
124
129
  // have either x ≤ -b/a or x ≥ -b/a, respectively. ∎
125
- typename Eigen::SparseVector<Scalar>::InnerIterator row_iter(row_A_i);
126
- const auto constraint_coefficient =
127
- row_iter
128
- .value(); // The nonzero value of the j-th constraint's gradient.
130
+ //
131
+ // The nonzero value of the j-th constraint's gradient.
132
+ const auto constraint_coefficient = row_nonzero_value[constraint_index];
129
133
 
130
134
  // The Jacobian's sparsity pattern is structural, so the single stored value
131
135
  // can be zero if the constraint's terms cancel (e.g., x − x + 1 ≥ 0). The
@@ -134,7 +138,7 @@ Bounds<Scalar> get_bounds(
134
138
  continue;
135
139
  }
136
140
 
137
- const auto decision_variable_index = row_iter.index();
141
+ const auto decision_variable_index = row_nonzero_col[constraint_index];
138
142
  const auto decision_variable_value =
139
143
  decision_variables[decision_variable_index].value();
140
144
  Scalar constraint_constant;
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev23"
5
+ __version__ = "0.6.7.dev24"