sleipnirgroup-jormungandr 0.6.7.dev68__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.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/problem.hpp +38 -58
  3. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm.hpp +62 -126
  4. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton.hpp +36 -75
  5. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp.hpp +54 -112
  6. sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/optimization/solver/util/time_trace.hpp +164 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print_diagnostics.hpp +151 -37
  8. sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/util/time_tracer.hpp +401 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/__init__.py +1 -1
  10. sleipnirgroup_jormungandr-0.6.7.dev68/include/sleipnir/util/profiler.hpp +0 -187
  11. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/CMakeLists.txt +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/LICENSE.txt +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/README.md +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/SleipnirConfig.cmake.in +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/BuildTypes.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/CompilerFlags.cmake +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11Mkdoc.cmake +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/SubdirList.cmake +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/arm-none-eabi.cmake +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/gradient.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/hessian.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/slice.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/multistart.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/options.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev68 → 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.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/assert.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/concepts.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/empty.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/function_ref.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/pool.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/scope_exit.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/spy.hpp +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/symbol_exports.hpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/pyproject.toml +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/arity.hpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable.cpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/binders.hpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/docstrings.hpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/for_each_type.hpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/main.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_ocp.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_problem.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/slice_tuple.hpp +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/text_wrap.hpp +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/try_cast.hpp +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/postprocess_stubs.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/autodiff/__init__.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/optimization/__init__.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/gradient_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/hessian_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/jacobian_test.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_matrix_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_problem_test.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_util.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/constraints_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/decision_variable_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_problem_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_util.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/double_integrator_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_ocp_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/linear_problem_test.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/multistart_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/near.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/nonlinear_problem_test.py +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/problem_spy_test.py +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/quadratic_problem_test.py +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/rk4.py +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/solver/exit_status_test.py +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/trivial_problem_test.py +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/gradient.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/hessian.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/jacobian.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/variable_matrix.cpp +0 -0
  125. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/ocp.cpp +0 -0
  126. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/problem.cpp +0 -0
  127. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/ipm.cpp +0 -0
  128. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/newton.cpp +0 -0
  129. {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/sqp.cpp +0 -0
  130. {sleipnirgroup_jormungandr-0.6.7.dev68 → 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.dev68
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
  //
@@ -167,93 +169,40 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
167
169
 
168
170
  const auto solve_start_time = std::chrono::steady_clock::now();
169
171
 
170
- gch::small_vector<SolveProfiler> solve_profilers;
171
- solve_profilers.emplace_back("solver");
172
- solve_profilers.emplace_back("↳ setup");
173
- solve_profilers.emplace_back("↳ iteration");
174
- solve_profilers.emplace_back(" ↳ callbacks");
175
- solve_profilers.emplace_back(" ↳ KKT matrix build");
176
- solve_profilers.emplace_back(" ↳ KKT matrix decomp");
177
- solve_profilers.emplace_back(" ↳ KKT system solve");
178
- solve_profilers.emplace_back(" ↳ line search");
179
- solve_profilers.emplace_back(" ↳ SOC");
180
- solve_profilers.emplace_back(" ↳ feas. restoration");
181
- solve_profilers.emplace_back(" ↳ f(x)");
182
- solve_profilers.emplace_back(" ↳ ∇f(x)");
183
- solve_profilers.emplace_back(" ↳ ∇²ₓₓL");
184
- solve_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
185
- solve_profilers.emplace_back(" ↳ cₑ(x)");
186
- solve_profilers.emplace_back(" ↳ ∂cₑ/∂x");
187
- solve_profilers.emplace_back(" ↳ cᵢ(x)");
188
- solve_profilers.emplace_back(" ↳ ∂cᵢ/∂x");
189
-
190
- auto& solver_prof = solve_profilers[0];
191
- auto& setup_prof = solve_profilers[1];
192
- auto& inner_iter_prof = solve_profilers[2];
193
- auto& iter_callbacks_prof = solve_profilers[3];
194
- auto& kkt_matrix_build_prof = solve_profilers[4];
195
- auto& kkt_matrix_decomp_prof = solve_profilers[5];
196
- auto& kkt_system_solve_prof = solve_profilers[6];
197
- auto& line_search_prof = solve_profilers[7];
198
- auto& soc_prof = solve_profilers[8];
199
- auto& feasibility_restoration_prof = solve_profilers[9];
200
-
201
- // 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.
202
183
  #ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
203
- auto& f_prof = solve_profilers[10];
204
- auto& g_prof = solve_profilers[11];
205
- auto& H_prof = solve_profilers[12];
206
- auto& H_c_prof = solve_profilers[13];
207
- auto& c_e_prof = solve_profilers[14];
208
- auto& A_e_prof = solve_profilers[15];
209
- auto& c_i_prof = solve_profilers[16];
210
- auto& A_i_prof = solve_profilers[17];
211
-
212
- IPMMatrixCallbacks<Scalar> matrices{
213
- matrix_callbacks.num_decision_variables,
214
- matrix_callbacks.num_equality_constraints,
215
- matrix_callbacks.num_inequality_constraints,
216
- [&](const DenseVector& x) -> Scalar {
217
- ScopedProfiler prof{f_prof};
218
- return matrix_callbacks.f(x);
219
- },
220
- [&](const DenseVector& x) -> SparseVector {
221
- ScopedProfiler prof{g_prof};
222
- return matrix_callbacks.g(x);
223
- },
224
- [&](const DenseVector& x, const DenseVector& y,
225
- const DenseVector& z) -> SparseMatrix {
226
- ScopedProfiler prof{H_prof};
227
- return matrix_callbacks.H(x, y, z);
228
- },
229
- [&](const DenseVector& x, const DenseVector& y,
230
- const DenseVector& z) -> SparseMatrix {
231
- ScopedProfiler prof{H_c_prof};
232
- return matrix_callbacks.H_c(x, y, z);
233
- },
234
- [&](const DenseVector& x) -> DenseVector {
235
- ScopedProfiler prof{c_e_prof};
236
- return matrix_callbacks.c_e(x);
237
- },
238
- [&](const DenseVector& x) -> SparseMatrix {
239
- ScopedProfiler prof{A_e_prof};
240
- return matrix_callbacks.A_e(x);
241
- },
242
- [&](const DenseVector& x) -> DenseVector {
243
- ScopedProfiler prof{c_i_prof};
244
- return matrix_callbacks.c_i(x);
245
- },
246
- [&](const DenseVector& x) -> SparseMatrix {
247
- ScopedProfiler prof{A_i_prof};
248
- return matrix_callbacks.A_i(x);
249
- },
250
- 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;
251
201
  #else
252
202
  const auto& matrices = matrix_callbacks;
253
203
  #endif
254
204
 
255
- solver_prof.start();
256
- setup_prof.start();
205
+ ScopedTimeTracer setup_tracer{diagnostics[SETUP]};
257
206
 
258
207
  Scalar f = matrices.f(x);
259
208
  SparseVector g = matrices.g(x);
@@ -375,32 +324,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
375
324
  Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
376
325
  matrices.scaling, g, A_e, c_e, A_i, c_i, s, y, z, Scalar(0));
377
326
 
378
- setup_prof.stop();
379
-
380
- // Prints final solver diagnostics when the solver exits
381
- scope_exit exit{[&] {
382
- if (options.diagnostics) {
383
- solver_prof.stop();
384
-
385
- if (in_feasibility_restoration) {
386
- return;
387
- }
388
-
389
- if (iterations > 0) {
390
- print_bottom_iteration_diagnostics();
391
- }
392
- print_solver_diagnostics(solve_profilers);
393
- }
394
- }};
395
-
396
- // Print initial iterate diagnostics
397
- if (options.diagnostics) {
398
- print_initial_iterate_diagnostics(E_0, f, constraint_violation(c_e, c_i, s),
399
- s.dot(z), μ);
400
- }
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
+ μ};
401
341
 
402
342
  while (E_0 > Scalar(options.tolerance)) {
403
- ScopedProfiler inner_iter_profiler{inner_iter_prof};
343
+ ScopedTimeTracer inner_iter_tracer{diagnostics[ITERATION]};
404
344
 
405
345
  // Check for diverging iterates
406
346
  if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
@@ -408,7 +348,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
408
348
  return ExitStatus::DIVERGING_ITERATES;
409
349
  }
410
350
 
411
- ScopedProfiler iter_callbacks_profiler{iter_callbacks_prof};
351
+ PhaseTimeTracer phase_tracer{diagnostics[CALLBACKS]};
412
352
 
413
353
  // Call iteration callbacks
414
354
  for (const auto& callback : iteration_callbacks) {
@@ -417,8 +357,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
417
357
  }
418
358
  }
419
359
 
420
- iter_callbacks_profiler.stop();
421
- ScopedProfiler kkt_matrix_build_profiler{kkt_matrix_build_prof};
360
+ phase_tracer.next(diagnostics[KKT_MATRIX_BUILD]);
422
361
 
423
362
  // S = diag(s)
424
363
  // Z = diag(z)
@@ -447,8 +386,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
447
386
  A_i.transpose() * (-Σ * c_i + μ * s.cwiseInverse() + z);
448
387
  rhs.segment(x.rows(), y.rows()) = -c_e;
449
388
 
450
- kkt_matrix_build_profiler.stop();
451
- ScopedProfiler kkt_matrix_decomp_profiler{kkt_matrix_decomp_prof};
389
+ phase_tracer.next(diagnostics[KKT_MATRIX_DECOMP]);
452
390
 
453
391
  Step step;
454
392
  Scalar α_max(1);
@@ -464,8 +402,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
464
402
  return ExitStatus::FACTORIZATION_FAILED;
465
403
  }
466
404
 
467
- kkt_matrix_decomp_profiler.stop();
468
- ScopedProfiler kkt_system_solve_profiler{kkt_system_solve_prof};
405
+ phase_tracer.next(diagnostics[KKT_SYSTEM_SOLVE]);
469
406
 
470
407
  auto compute_step = [&](Step& step, const DenseVector& c_i_minus_s) {
471
408
  // p = [ pˣ]
@@ -481,8 +418,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
481
418
  };
482
419
  compute_step(step, c_i - s);
483
420
 
484
- kkt_system_solve_profiler.stop();
485
- ScopedProfiler line_search_profiler{line_search_prof};
421
+ phase_tracer.next(diagnostics[LINE_SEARCH]);
486
422
 
487
423
  // αᵐᵃˣ = max(α ∈ (0, 1] : sₖ + αpₖˢ ≥ (1−τⱼ)sₖ)
488
424
  α_max = fraction_to_the_boundary_rule<Scalar>(s, step.p_s, τ);
@@ -571,15 +507,15 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
571
507
  bool step_acceptable = false;
572
508
  for (int soc_iteration = 0; soc_iteration < 5 && !step_acceptable;
573
509
  ++soc_iteration) {
574
- ScopedProfiler soc_profiler{soc_prof};
510
+ ScopedTimeTracer soc_tracer{diagnostics[SOC]};
575
511
 
576
512
  scope_exit soc_exit{[&] {
577
- soc_profiler.stop();
513
+ soc_tracer.stop();
578
514
 
579
515
  if (options.diagnostics && step_acceptable) {
580
- print_iteration_diagnostics(
516
+ print_iterate_diagnostics(
581
517
  iterations, IterationType::SECOND_ORDER_CORRECTION,
582
- soc_profiler.current_duration(),
518
+ soc_tracer.current_duration(),
583
519
  unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
584
520
  matrices.scaling, g, A_e, trial_c_e, A_i, trial_c_i,
585
521
  trial_s, trial_y, trial_z, Scalar(0)),
@@ -709,7 +645,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
709
645
  }
710
646
  }
711
647
 
712
- line_search_profiler.stop();
648
+ phase_tracer.stop();
713
649
 
714
650
  // If solver stalled, invoke feasibility restoration
715
651
  if (!call_feasibility_restoration && !in_feasibility_restoration) {
@@ -721,8 +657,8 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
721
657
  }
722
658
 
723
659
  if (call_feasibility_restoration) {
724
- ScopedProfiler feasibility_restoration_profiler{
725
- feasibility_restoration_prof};
660
+ ScopedTimeTracer feasibility_restoration_tracer{
661
+ diagnostics[FEASIBILITY_RESTORATION]};
726
662
 
727
663
  // If already in feasibility restoration mode, running it again won't help
728
664
  if (in_feasibility_restoration) {
@@ -834,14 +770,14 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
834
770
  }
835
771
  }
836
772
 
837
- inner_iter_profiler.stop();
773
+ inner_iter_tracer.stop();
838
774
 
839
775
  if (options.diagnostics) {
840
- print_iteration_diagnostics(
776
+ print_iterate_diagnostics(
841
777
  iterations,
842
778
  in_feasibility_restoration ? IterationType::FEASIBILITY_RESTORATION
843
779
  : IterationType::NORMAL,
844
- inner_iter_profiler.current_duration(), E_0, f,
780
+ inner_iter_tracer.current_duration(), E_0, f,
845
781
  constraint_violation(c_e, c_i, s), s.dot(z), μ,
846
782
  solver.hessian_regularization(),
847
783
  solver.constraint_jacobian_regularization(), step.primal_inf_norm(),