sleipnirgroup-jormungandr 0.6.7.dev67__tar.gz → 0.6.7.dev69__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 (130) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/problem.hpp +38 -58
  3. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm.hpp +82 -137
  4. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton.hpp +36 -75
  5. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp.hpp +69 -115
  6. sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/optimization/solver/util/time_trace.hpp +164 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print_diagnostics.hpp +160 -51
  8. sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/util/time_tracer.hpp +401 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/__init__.py +1 -1
  10. sleipnirgroup_jormungandr-0.6.7.dev67/include/sleipnir/util/profiler.hpp +0 -187
  11. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/CMakeLists.txt +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/LICENSE.txt +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/README.md +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/SleipnirConfig.cmake.in +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/BuildTypes.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/CompilerFlags.cmake +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11Mkdoc.cmake +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/SubdirList.cmake +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/arm-none-eabi.cmake +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/gradient.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/hessian.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/slice.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/multistart.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/options.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/assert.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/concepts.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/empty.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/function_ref.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/pool.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/scope_exit.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/spy.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/symbol_exports.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/arity.hpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/binders.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/docstrings.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/for_each_type.hpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/main.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_ocp.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_problem.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/slice_tuple.hpp +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/text_wrap.hpp +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/try_cast.hpp +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/postprocess_stubs.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/autodiff/__init__.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/optimization/__init__.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/gradient_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/hessian_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/jacobian_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_matrix_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_util.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/constraints_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/decision_variable_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_problem_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_util.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/double_integrator_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_ocp_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/linear_problem_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/multistart_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/near.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/nonlinear_problem_test.py +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/problem_spy_test.py +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/quadratic_problem_test.py +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/rk4.py +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/solver/exit_status_test.py +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/trivial_problem_test.py +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/gradient.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/hessian.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/jacobian.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/variable_matrix.cpp +0 -0
  125. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/ocp.cpp +0 -0
  126. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/problem.cpp +0 -0
  127. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/ipm.cpp +0 -0
  128. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/newton.cpp +0 -0
  129. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/sqp.cpp +0 -0
  130. {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/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.dev67
3
+ Version: 0.6.7.dev69
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -35,12 +35,13 @@
35
35
  #include "sleipnir/optimization/solver/sqp_matrix_callbacks.hpp"
36
36
  #include "sleipnir/optimization/solver/util/bounds.hpp"
37
37
  #include "sleipnir/optimization/solver/util/problem_scaling.hpp"
38
+ #include "sleipnir/optimization/solver/util/time_trace.hpp"
38
39
  #include "sleipnir/util/empty.hpp"
39
40
  #include "sleipnir/util/print.hpp"
40
41
  #include "sleipnir/util/print_diagnostics.hpp"
41
- #include "sleipnir/util/profiler.hpp"
42
42
  #include "sleipnir/util/spy.hpp"
43
43
  #include "sleipnir/util/symbol_exports.hpp"
44
+ #include "sleipnir/util/time_tracer.hpp"
44
45
 
45
46
  namespace slp {
46
47
 
@@ -413,6 +414,7 @@ class Problem {
413
414
  DenseVector& x) {
414
415
  using SparseMatrix = Eigen::SparseMatrix<Scalar>;
415
416
  using SparseVector = Eigen::SparseVector<Scalar>;
417
+ using enum SetupTimeTracerID;
416
418
 
417
419
  VariableMatrix<Scalar> x_ad{m_decision_variables};
418
420
 
@@ -430,27 +432,23 @@ class Problem {
430
432
  iteration_callbacks.emplace_back(callback);
431
433
  }
432
434
 
433
- gch::small_vector<SetupProfiler> ad_setup_profilers;
434
- ad_setup_profilers.emplace_back("setup");
435
- ad_setup_profilers.emplace_back("↳ ∇f(x)");
436
- ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
437
-
438
- ad_setup_profilers[0].start();
435
+ TimeTracerTree<SetupTimeTracer, newton_setup_time_trace> ad_setup_tracers{
436
+ options.diagnostics};
437
+ ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
439
438
 
440
439
  // Set up gradient autodiff
441
- ad_setup_profilers[1].start();
440
+ PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
442
441
  Gradient g{f, x_ad};
443
- ad_setup_profilers[1].stop();
444
442
 
445
443
  // Set up Lagrangian Hessian autodiff
446
- ad_setup_profilers[2].start();
444
+ phase_tracer.next(ad_setup_tracers[HESSIAN]);
447
445
  Hessian<Scalar, Eigen::Lower> H{f, x_ad};
448
- ad_setup_profilers[2].stop();
449
446
 
450
- ad_setup_profilers[0].stop();
447
+ phase_tracer.stop();
448
+ setup_tracer.stop();
451
449
 
452
450
  if (options.diagnostics) {
453
- print_setup_diagnostics(ad_setup_profilers);
451
+ print_setup_diagnostics(ad_setup_tracers);
454
452
  }
455
453
 
456
454
  #ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
@@ -498,6 +496,7 @@ class Problem {
498
496
  DenseVector& x) {
499
497
  using SparseMatrix = Eigen::SparseMatrix<Scalar>;
500
498
  using SparseVector = Eigen::SparseVector<Scalar>;
499
+ using enum SetupTimeTracerID;
501
500
 
502
501
  VariableMatrix<Scalar> x_ad{m_decision_variables};
503
502
 
@@ -519,44 +518,35 @@ class Problem {
519
518
  VariableMatrix<Scalar> c_e_ad{m_equality_constraints};
520
519
  VariableMatrix<Scalar> y_ad(num_equality_constraints);
521
520
 
522
- gch::small_vector<SetupProfiler> ad_setup_profilers;
523
- ad_setup_profilers.emplace_back("setup");
524
- ad_setup_profilers.emplace_back("↳ ∇f(x)");
525
- ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
526
- ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_f");
527
- ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
528
- ad_setup_profilers.emplace_back("↳ ∂cₑ/∂x");
529
-
530
- ad_setup_profilers[0].start();
521
+ TimeTracerTree<SetupTimeTracer, sqp_setup_time_trace> ad_setup_tracers{
522
+ options.diagnostics};
523
+ ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
531
524
 
532
525
  // Set up gradient autodiff
533
- ad_setup_profilers[1].start();
526
+ PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
534
527
  Gradient g{f, x_ad};
535
- ad_setup_profilers[1].stop();
536
528
 
537
- ad_setup_profilers[2].start();
529
+ phase_tracer.next(ad_setup_tracers[HESSIAN]);
538
530
 
539
531
  // Set up cost part of Lagrangian Hessian autodiff
540
- ad_setup_profilers[3].start();
532
+ PhaseTimeTracer hessian_phase_tracer{ad_setup_tracers[HESSIAN_COST]};
541
533
  Hessian<Scalar, Eigen::Lower> H_f{f, x_ad};
542
- ad_setup_profilers[3].stop();
543
534
 
544
535
  // Set up constraint part of Lagrangian Hessian autodiff
545
- ad_setup_profilers[4].start();
536
+ hessian_phase_tracer.next(ad_setup_tracers[HESSIAN_CONSTRAINTS]);
546
537
  Hessian<Scalar, Eigen::Lower> H_c{-y_ad.T() * c_e_ad, x_ad};
547
- ad_setup_profilers[4].stop();
548
538
 
549
- ad_setup_profilers[2].stop();
539
+ hessian_phase_tracer.stop();
550
540
 
551
541
  // Set up equality constraint Jacobian autodiff
552
- ad_setup_profilers[5].start();
542
+ phase_tracer.next(ad_setup_tracers[EQUALITY_JACOBIAN]);
553
543
  Jacobian A_e{c_e_ad, x_ad};
554
- ad_setup_profilers[5].stop();
555
544
 
556
- ad_setup_profilers[0].stop();
545
+ phase_tracer.stop();
546
+ setup_tracer.stop();
557
547
 
558
548
  if (options.diagnostics) {
559
- print_setup_diagnostics(ad_setup_profilers);
549
+ print_setup_diagnostics(ad_setup_tracers);
560
550
  }
561
551
 
562
552
  #ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
@@ -626,6 +616,7 @@ class Problem {
626
616
  DenseVector& x) {
627
617
  using SparseMatrix = Eigen::SparseMatrix<Scalar>;
628
618
  using SparseVector = Eigen::SparseVector<Scalar>;
619
+ using enum SetupTimeTracerID;
629
620
 
630
621
  VariableMatrix<Scalar> x_ad{m_decision_variables};
631
622
 
@@ -650,51 +641,40 @@ class Problem {
650
641
  VariableMatrix<Scalar> y_ad(num_equality_constraints);
651
642
  VariableMatrix<Scalar> z_ad(num_inequality_constraints);
652
643
 
653
- gch::small_vector<SetupProfiler> ad_setup_profilers;
654
- ad_setup_profilers.emplace_back("setup");
655
- ad_setup_profilers.emplace_back("↳ ∇f(x)");
656
- ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
657
- ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_f");
658
- ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
659
- ad_setup_profilers.emplace_back("↳ ∂cₑ/∂x");
660
- ad_setup_profilers.emplace_back("↳ ∂cᵢ/∂x");
661
-
662
- ad_setup_profilers[0].start();
644
+ TimeTracerTree<SetupTimeTracer, ipm_setup_time_trace> ad_setup_tracers{
645
+ options.diagnostics};
646
+ ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
663
647
 
664
648
  // Set up gradient autodiff
665
- ad_setup_profilers[1].start();
649
+ PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
666
650
  Gradient g{f, x_ad};
667
- ad_setup_profilers[1].stop();
668
651
 
669
- ad_setup_profilers[2].start();
652
+ phase_tracer.next(ad_setup_tracers[HESSIAN]);
670
653
 
671
654
  // Set up cost part of Lagrangian Hessian autodiff
672
- ad_setup_profilers[3].start();
655
+ PhaseTimeTracer hessian_phase_tracer{ad_setup_tracers[HESSIAN_COST]};
673
656
  Hessian<Scalar, Eigen::Lower> H_f{f, x_ad};
674
- ad_setup_profilers[3].stop();
675
657
 
676
658
  // Set up constraint part of Lagrangian Hessian autodiff
677
- ad_setup_profilers[4].start();
659
+ hessian_phase_tracer.next(ad_setup_tracers[HESSIAN_CONSTRAINTS]);
678
660
  Hessian<Scalar, Eigen::Lower> H_c{-y_ad.T() * c_e_ad - z_ad.T() * c_i_ad,
679
661
  x_ad};
680
- ad_setup_profilers[4].stop();
681
662
 
682
- ad_setup_profilers[2].stop();
663
+ hessian_phase_tracer.stop();
683
664
 
684
665
  // Set up equality constraint Jacobian autodiff
685
- ad_setup_profilers[5].start();
666
+ phase_tracer.next(ad_setup_tracers[EQUALITY_JACOBIAN]);
686
667
  Jacobian A_e{c_e_ad, x_ad};
687
- ad_setup_profilers[5].stop();
688
668
 
689
669
  // Set up inequality constraint Jacobian autodiff
690
- ad_setup_profilers[6].start();
670
+ phase_tracer.next(ad_setup_tracers[INEQUALITY_JACOBIAN]);
691
671
  Jacobian A_i{c_i_ad, x_ad};
692
- ad_setup_profilers[6].stop();
693
672
 
694
- ad_setup_profilers[0].stop();
673
+ phase_tracer.stop();
674
+ setup_tracer.stop();
695
675
 
696
676
  if (options.diagnostics) {
697
- print_setup_diagnostics(ad_setup_profilers);
677
+ print_setup_diagnostics(ad_setup_tracers);
698
678
  }
699
679
 
700
680
  #ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
@@ -6,6 +6,7 @@
6
6
  #include <chrono>
7
7
  #include <cmath>
8
8
  #include <functional>
9
+ #include <optional>
9
10
  #include <span>
10
11
 
11
12
  #include <Eigen/Core>
@@ -24,11 +25,12 @@
24
25
  #include "sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp"
25
26
  #include "sleipnir/optimization/solver/util/kkt_error.hpp"
26
27
  #include "sleipnir/optimization/solver/util/kkt_solver.hpp"
28
+ #include "sleipnir/optimization/solver/util/time_trace.hpp"
27
29
  #include "sleipnir/util/assert.hpp"
28
30
  #include "sleipnir/util/print_diagnostics.hpp"
29
- #include "sleipnir/util/profiler.hpp"
30
31
  #include "sleipnir/util/scope_exit.hpp"
31
32
  #include "sleipnir/util/symbol_exports.hpp"
33
+ #include "sleipnir/util/time_tracer.hpp"
32
34
 
33
35
  // See docs/algorithms.md#Works_cited for citation definitions.
34
36
  //
@@ -145,99 +147,62 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
145
147
  DenseVector p_y;
146
148
  /// Inequality constraint dual step.
147
149
  DenseVector p_z;
150
+
151
+ /// Returns the infinity norm of the primal step.
152
+ ///
153
+ /// @return The infinity norm of the primal step.
154
+ Scalar primal_inf_norm() const {
155
+ return std::max(p_x.template lpNorm<Eigen::Infinity>(),
156
+ p_s.template lpNorm<Eigen::Infinity>());
157
+ }
158
+
159
+ /// Returns the infinity norm of the dual step.
160
+ ///
161
+ /// @return The infinity norm of the dual step.
162
+ Scalar dual_inf_norm() const {
163
+ return std::max(p_y.template lpNorm<Eigen::Infinity>(),
164
+ p_z.template lpNorm<Eigen::Infinity>());
165
+ }
148
166
  };
149
167
 
150
168
  using std::isfinite;
151
169
 
152
170
  const auto solve_start_time = std::chrono::steady_clock::now();
153
171
 
154
- gch::small_vector<SolveProfiler> solve_profilers;
155
- solve_profilers.emplace_back("solver");
156
- solve_profilers.emplace_back("↳ setup");
157
- solve_profilers.emplace_back("↳ iteration");
158
- solve_profilers.emplace_back(" ↳ callbacks");
159
- solve_profilers.emplace_back(" ↳ KKT matrix build");
160
- solve_profilers.emplace_back(" ↳ KKT matrix decomp");
161
- solve_profilers.emplace_back(" ↳ KKT system solve");
162
- solve_profilers.emplace_back(" ↳ line search");
163
- solve_profilers.emplace_back(" ↳ SOC");
164
- solve_profilers.emplace_back(" ↳ feas. restoration");
165
- solve_profilers.emplace_back(" ↳ f(x)");
166
- solve_profilers.emplace_back(" ↳ ∇f(x)");
167
- solve_profilers.emplace_back(" ↳ ∇²ₓₓL");
168
- solve_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
169
- solve_profilers.emplace_back(" ↳ cₑ(x)");
170
- solve_profilers.emplace_back(" ↳ ∂cₑ/∂x");
171
- solve_profilers.emplace_back(" ↳ cᵢ(x)");
172
- solve_profilers.emplace_back(" ↳ ∂cᵢ/∂x");
173
-
174
- auto& solver_prof = solve_profilers[0];
175
- auto& setup_prof = solve_profilers[1];
176
- auto& inner_iter_prof = solve_profilers[2];
177
- auto& iter_callbacks_prof = solve_profilers[3];
178
- auto& kkt_matrix_build_prof = solve_profilers[4];
179
- auto& kkt_matrix_decomp_prof = solve_profilers[5];
180
- auto& kkt_system_solve_prof = solve_profilers[6];
181
- auto& line_search_prof = solve_profilers[7];
182
- auto& soc_prof = solve_profilers[8];
183
- auto& feasibility_restoration_prof = solve_profilers[9];
184
-
185
- // Set up profiled matrix callbacks
172
+ using enum SolveTimeTracerID;
173
+
174
+ // Prints final solver diagnostics when the solver exits
175
+ //
176
+ // Feasibility restoration still traces so its iterations can be printed, but
177
+ // the outer solver prints the final solver diagnostics.
178
+ SolveDiagnostics<ipm_time_trace> diagnostics{options.diagnostics,
179
+ !in_feasibility_restoration};
180
+
181
+ // Set up traced matrix callbacks if diagnostics are enabled. Feasibility
182
+ // restoration's callbacks call the outer solver's, which are already traced.
186
183
  #ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
187
- auto& f_prof = solve_profilers[10];
188
- auto& g_prof = solve_profilers[11];
189
- auto& H_prof = solve_profilers[12];
190
- auto& H_c_prof = solve_profilers[13];
191
- auto& c_e_prof = solve_profilers[14];
192
- auto& A_e_prof = solve_profilers[15];
193
- auto& c_i_prof = solve_profilers[16];
194
- auto& A_i_prof = solve_profilers[17];
195
-
196
- IPMMatrixCallbacks<Scalar> matrices{
197
- matrix_callbacks.num_decision_variables,
198
- matrix_callbacks.num_equality_constraints,
199
- matrix_callbacks.num_inequality_constraints,
200
- [&](const DenseVector& x) -> Scalar {
201
- ScopedProfiler prof{f_prof};
202
- return matrix_callbacks.f(x);
203
- },
204
- [&](const DenseVector& x) -> SparseVector {
205
- ScopedProfiler prof{g_prof};
206
- return matrix_callbacks.g(x);
207
- },
208
- [&](const DenseVector& x, const DenseVector& y,
209
- const DenseVector& z) -> SparseMatrix {
210
- ScopedProfiler prof{H_prof};
211
- return matrix_callbacks.H(x, y, z);
212
- },
213
- [&](const DenseVector& x, const DenseVector& y,
214
- const DenseVector& z) -> SparseMatrix {
215
- ScopedProfiler prof{H_c_prof};
216
- return matrix_callbacks.H_c(x, y, z);
217
- },
218
- [&](const DenseVector& x) -> DenseVector {
219
- ScopedProfiler prof{c_e_prof};
220
- return matrix_callbacks.c_e(x);
221
- },
222
- [&](const DenseVector& x) -> SparseMatrix {
223
- ScopedProfiler prof{A_e_prof};
224
- return matrix_callbacks.A_e(x);
225
- },
226
- [&](const DenseVector& x) -> DenseVector {
227
- ScopedProfiler prof{c_i_prof};
228
- return matrix_callbacks.c_i(x);
229
- },
230
- [&](const DenseVector& x) -> SparseMatrix {
231
- ScopedProfiler prof{A_i_prof};
232
- return matrix_callbacks.A_i(x);
233
- },
234
- matrix_callbacks.scaling};
184
+ std::optional<IPMMatrixCallbacks<Scalar>> traced_matrices;
185
+ if (options.diagnostics && !in_feasibility_restoration) {
186
+ traced_matrices.emplace(
187
+ matrix_callbacks.num_decision_variables,
188
+ matrix_callbacks.num_equality_constraints,
189
+ matrix_callbacks.num_inequality_constraints,
190
+ traced(diagnostics[COST], matrix_callbacks.f),
191
+ traced(diagnostics[GRADIENT], matrix_callbacks.g),
192
+ traced(diagnostics[HESSIAN], matrix_callbacks.H),
193
+ traced(diagnostics[HESSIAN_CONSTRAINTS], matrix_callbacks.H_c),
194
+ traced(diagnostics[EQUALITY_CONSTRAINTS], matrix_callbacks.c_e),
195
+ traced(diagnostics[EQUALITY_JACOBIAN], matrix_callbacks.A_e),
196
+ traced(diagnostics[INEQUALITY_CONSTRAINTS], matrix_callbacks.c_i),
197
+ traced(diagnostics[INEQUALITY_JACOBIAN], matrix_callbacks.A_i),
198
+ matrix_callbacks.scaling);
199
+ }
200
+ const auto& matrices = traced_matrices ? *traced_matrices : matrix_callbacks;
235
201
  #else
236
202
  const auto& matrices = matrix_callbacks;
237
203
  #endif
238
204
 
239
- solver_prof.start();
240
- setup_prof.start();
205
+ ScopedTimeTracer setup_tracer{diagnostics[SETUP]};
241
206
 
242
207
  Scalar f = matrices.f(x);
243
208
  SparseVector g = matrices.g(x);
@@ -359,32 +324,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
359
324
  Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
360
325
  matrices.scaling, g, A_e, c_e, A_i, c_i, s, y, z, Scalar(0));
361
326
 
362
- setup_prof.stop();
363
-
364
- // Prints final solver diagnostics when the solver exits
365
- scope_exit exit{[&] {
366
- if (options.diagnostics) {
367
- solver_prof.stop();
368
-
369
- if (in_feasibility_restoration) {
370
- return;
371
- }
372
-
373
- if (iterations > 0) {
374
- print_bottom_iteration_diagnostics();
375
- }
376
- print_solver_diagnostics(solve_profilers);
377
- }
378
- }};
379
-
380
- // Print initial iterate diagnostics
381
- if (options.diagnostics) {
382
- print_initial_iterate_diagnostics(E_0, f, constraint_violation(c_e, c_i, s),
383
- s.dot(z), μ);
384
- }
327
+ setup_tracer.stop();
328
+
329
+ // Prints initial iterate diagnostics now and closes the iterate diagnostics
330
+ // table when the solver exits.
331
+ //
332
+ // Feasibility restoration's iterations are printed in the outer solver's
333
+ // table, so it doesn't open its own.
334
+ IterateDiagnosticsTable table{
335
+ options.diagnostics && !in_feasibility_restoration,
336
+ E_0,
337
+ f,
338
+ constraint_violation(c_e, c_i, s),
339
+ s.dot(z),
340
+ μ};
385
341
 
386
342
  while (E_0 > Scalar(options.tolerance)) {
387
- ScopedProfiler inner_iter_profiler{inner_iter_prof};
343
+ ScopedTimeTracer inner_iter_tracer{diagnostics[ITERATION]};
388
344
 
389
345
  // Check for diverging iterates
390
346
  if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
@@ -392,7 +348,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
392
348
  return ExitStatus::DIVERGING_ITERATES;
393
349
  }
394
350
 
395
- ScopedProfiler iter_callbacks_profiler{iter_callbacks_prof};
351
+ PhaseTimeTracer phase_tracer{diagnostics[CALLBACKS]};
396
352
 
397
353
  // Call iteration callbacks
398
354
  for (const auto& callback : iteration_callbacks) {
@@ -401,8 +357,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
401
357
  }
402
358
  }
403
359
 
404
- iter_callbacks_profiler.stop();
405
- ScopedProfiler kkt_matrix_build_profiler{kkt_matrix_build_prof};
360
+ phase_tracer.next(diagnostics[KKT_MATRIX_BUILD]);
406
361
 
407
362
  // S = diag(s)
408
363
  // Z = diag(z)
@@ -431,8 +386,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
431
386
  A_i.transpose() * (-Σ * c_i + μ * s.cwiseInverse() + z);
432
387
  rhs.segment(x.rows(), y.rows()) = -c_e;
433
388
 
434
- kkt_matrix_build_profiler.stop();
435
- ScopedProfiler kkt_matrix_decomp_profiler{kkt_matrix_decomp_prof};
389
+ phase_tracer.next(diagnostics[KKT_MATRIX_DECOMP]);
436
390
 
437
391
  Step step;
438
392
  Scalar α_max(1);
@@ -448,8 +402,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
448
402
  return ExitStatus::FACTORIZATION_FAILED;
449
403
  }
450
404
 
451
- kkt_matrix_decomp_profiler.stop();
452
- ScopedProfiler kkt_system_solve_profiler{kkt_system_solve_prof};
405
+ phase_tracer.next(diagnostics[KKT_SYSTEM_SOLVE]);
453
406
 
454
407
  auto compute_step = [&](Step& step, const DenseVector& c_i_minus_s) {
455
408
  // p = [ pˣ]
@@ -465,8 +418,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
465
418
  };
466
419
  compute_step(step, c_i - s);
467
420
 
468
- kkt_system_solve_profiler.stop();
469
- ScopedProfiler line_search_profiler{line_search_prof};
421
+ phase_tracer.next(diagnostics[LINE_SEARCH]);
470
422
 
471
423
  // αᵐᵃˣ = max(α ∈ (0, 1] : sₖ + αpₖˢ ≥ (1−τⱼ)sₖ)
472
424
  α_max = fraction_to_the_boundary_rule<Scalar>(s, step.p_s, τ);
@@ -555,26 +507,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
555
507
  bool step_acceptable = false;
556
508
  for (int soc_iteration = 0; soc_iteration < 5 && !step_acceptable;
557
509
  ++soc_iteration) {
558
- ScopedProfiler soc_profiler{soc_prof};
510
+ ScopedTimeTracer soc_tracer{diagnostics[SOC]};
559
511
 
560
512
  scope_exit soc_exit{[&] {
561
- soc_profiler.stop();
513
+ soc_tracer.stop();
562
514
 
563
515
  if (options.diagnostics && step_acceptable) {
564
- print_iteration_diagnostics(
516
+ print_iterate_diagnostics(
565
517
  iterations, IterationType::SECOND_ORDER_CORRECTION,
566
- soc_profiler.current_duration(),
518
+ soc_tracer.current_duration(),
567
519
  unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
568
520
  matrices.scaling, g, A_e, trial_c_e, A_i, trial_c_i,
569
521
  trial_s, trial_y, trial_z, Scalar(0)),
570
522
  trial_f, constraint_violation(trial_c_e, trial_c_i, trial_s),
571
523
  trial_s.dot(trial_z), μ, solver.hessian_regularization(),
572
524
  solver.constraint_jacobian_regularization(),
573
- std::max(soc_step.p_x.template lpNorm<Eigen::Infinity>(),
574
- soc_step.p_s.template lpNorm<Eigen::Infinity>()),
575
- std::max(soc_step.p_y.template lpNorm<Eigen::Infinity>(),
576
- soc_step.p_z.template lpNorm<Eigen::Infinity>()),
577
- α_soc, Scalar(1), α_reduction_factor, α_z_soc);
525
+ soc_step.primal_inf_norm(), soc_step.dual_inf_norm(), α_soc,
526
+ Scalar(1), α_reduction_factor, α_z_soc);
578
527
  }
579
528
  }};
580
529
 
@@ -696,7 +645,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
696
645
  }
697
646
  }
698
647
 
699
- line_search_profiler.stop();
648
+ phase_tracer.stop();
700
649
 
701
650
  // If solver stalled, invoke feasibility restoration
702
651
  if (!call_feasibility_restoration && !in_feasibility_restoration) {
@@ -708,8 +657,8 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
708
657
  }
709
658
 
710
659
  if (call_feasibility_restoration) {
711
- ScopedProfiler feasibility_restoration_profiler{
712
- feasibility_restoration_prof};
660
+ ScopedTimeTracer feasibility_restoration_tracer{
661
+ diagnostics[FEASIBILITY_RESTORATION]};
713
662
 
714
663
  // If already in feasibility restoration mode, running it again won't help
715
664
  if (in_feasibility_restoration) {
@@ -821,22 +770,18 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
821
770
  }
822
771
  }
823
772
 
824
- inner_iter_profiler.stop();
773
+ inner_iter_tracer.stop();
825
774
 
826
775
  if (options.diagnostics) {
827
- print_iteration_diagnostics(
776
+ print_iterate_diagnostics(
828
777
  iterations,
829
778
  in_feasibility_restoration ? IterationType::FEASIBILITY_RESTORATION
830
779
  : IterationType::NORMAL,
831
- inner_iter_profiler.current_duration(), E_0, f,
780
+ inner_iter_tracer.current_duration(), E_0, f,
832
781
  constraint_violation(c_e, c_i, s), s.dot(z), μ,
833
782
  solver.hessian_regularization(),
834
- solver.constraint_jacobian_regularization(),
835
- std::max(step.p_x.template lpNorm<Eigen::Infinity>(),
836
- step.p_s.template lpNorm<Eigen::Infinity>()),
837
- std::max(step.p_y.template lpNorm<Eigen::Infinity>(),
838
- step.p_z.template lpNorm<Eigen::Infinity>()),
839
- α, α_max, α_reduction_factor, α_z);
783
+ solver.constraint_jacobian_regularization(), step.primal_inf_norm(),
784
+ step.dual_inf_norm(), α, α_max, α_reduction_factor, α_z);
840
785
  }
841
786
 
842
787
  ++iterations;