openscvx 0.5.3.dev56__tar.gz → 0.5.3.dev58__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.
Files changed (537) hide show
  1. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/_docs.yml +1 -1
  2. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-examples.yml +3 -1
  3. openscvx-0.5.3.dev58/.github/workflows/tests-moreau.yml +20 -0
  4. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests.yml +4 -2
  5. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/CONTRIBUTING.md +3 -2
  6. {openscvx-0.5.3.dev56/openscvx.egg-info → openscvx-0.5.3.dev58}/PKG-INFO +12 -11
  7. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/README.md +7 -6
  8. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/custom_algorithms_autotuners.md +5 -0
  9. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/01_hello_world_brachistochrone.md +1 -1
  10. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/05_visualization.md +5 -1
  11. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/installation.md +13 -11
  12. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_sensor_view.py +2 -1
  13. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/_version.py +3 -3
  14. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/acceptance_ratio.py +23 -0
  15. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/augmented_lagrangian.py +19 -1
  16. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/base.py +13 -0
  17. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/loader.py +1 -1
  18. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/__init__.py +8 -21
  19. openscvx-0.5.3.dev58/openscvx/plotting/_deps.py +18 -0
  20. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/problem.py +28 -3
  21. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/moreau_ptr_solver.py +27 -37
  22. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/ptr_solver.py +4 -3
  23. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/__init__.py +3 -1
  24. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/expr.py +41 -1
  25. openscvx-0.5.3.dev58/openscvx/symbolic/expr/lie/_citations.py +14 -0
  26. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/se3.py +10 -1
  27. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/so3.py +10 -1
  28. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stl.py +16 -1
  29. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stljax.py +17 -1
  30. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/problem.py +39 -0
  31. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58/openscvx.egg-info}/PKG-INFO +12 -11
  32. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/SOURCES.txt +6 -0
  33. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/requires.txt +5 -4
  34. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/scm_file_list.json +6 -0
  35. openscvx-0.5.3.dev58/openscvx.egg-info/scm_version.json +8 -0
  36. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/pyproject.toml +8 -7
  37. openscvx-0.5.3.dev58/tests/algorithms/autotuner/test_citation.py +44 -0
  38. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/conftest.py +1 -34
  39. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_moreau.py +2 -3
  40. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_moreau_ptr_solver.py +0 -23
  41. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_expr.py +40 -1
  42. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_lie.py +26 -0
  43. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_stl.py +22 -0
  44. openscvx-0.5.3.dev58/tests/symbolic/test_citations.py +90 -0
  45. openscvx-0.5.3.dev58/tests/test_citation.py +98 -0
  46. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_examples.py +15 -0
  47. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_plotting.py +9 -1
  48. openscvx-0.5.3.dev56/openscvx.egg-info/scm_version.json +0 -8
  49. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/assets/logo.svg +0 -0
  50. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/release-drafter.yml +0 -0
  51. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/_extra.yml +0 -0
  52. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/branch-name.yml +0 -0
  53. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/docs.yml +0 -0
  54. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/lint.yml +0 -0
  55. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/nightly.yml +0 -0
  56. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/release-drafter.yml +0 -0
  57. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/release.yml +0 -0
  58. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-cvxpygen.yml +0 -0
  59. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-lie.yml +0 -0
  60. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-mjx.yml +0 -0
  61. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-qpax.yml +0 -0
  62. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.gitignore +0 -0
  63. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.gitmodules +0 -0
  64. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/CITATION.cff +0 -0
  65. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/LICENSE +0 -0
  66. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/constraint_reformulation.md +0 -0
  67. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/control_parameterization.md +0 -0
  68. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/discretization.md +0 -0
  69. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/ocp.md +0 -0
  70. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/scvx.md +0 -0
  71. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/time_dilation.md +0 -0
  72. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/batching_jit_grad.md +0 -0
  73. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/lowering_architecture.md +0 -0
  74. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  75. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/00_introduction.md +0 -0
  76. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  77. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  78. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  79. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/06_logic.md +0 -0
  80. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/07_lie.md +0 -0
  81. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/08_mpcc.md +0 -0
  82. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
  83. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/favicon.png +0 -0
  84. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_dark.png +0 -0
  85. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_light.png +0 -0
  86. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_dark.png +0 -0
  87. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_light.png +0 -0
  88. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_dark.png +0 -0
  89. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_light.png +0 -0
  90. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/logo.svg +0 -0
  91. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/openscvx_logo_square.png +0 -0
  92. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-client/index.html +0 -0
  93. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/drone_racing.viser +0 -0
  94. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
  95. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/changelog.md +0 -0
  96. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/citation.md +0 -0
  97. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/examples.md +0 -0
  98. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/index.md +0 -0
  99. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/javascripts/mathjax.js +0 -0
  100. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/llms.txt +0 -0
  101. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/versions.json +0 -0
  102. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_maze.py +0 -0
  103. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_maze_viz.py +0 -0
  104. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_viser_embed_export.py +0 -0
  105. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone.py +0 -0
  106. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone_batched.py +0 -0
  107. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/chen_allgoewer.py +0 -0
  108. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/flappy_bird.py +0 -0
  109. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/hypersensitive.py +0 -0
  110. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/impulsive.py +0 -0
  111. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/stl_integer_variable.py +0 -0
  112. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/stl_or.py +0 -0
  113. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/aircraft/dynamic_soaring.py +0 -0
  114. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/aircraft/supersonic_time_to_climb.py +0 -0
  115. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/7_dof_arm.py +0 -0
  116. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_camera.py +0 -0
  117. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_render.py +0 -0
  118. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/dr_vp_polytope.py +0 -0
  119. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/franka_fr3v2_pick_place.py +0 -0
  120. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/logo.py +0 -0
  121. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/obstacle_avoidance_vmap.py +0 -0
  122. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/senss_hop_lidar_camera.py +0 -0
  123. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/3_dof_arm.py +0 -0
  124. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm.py +0 -0
  125. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_collision.py +0 -0
  126. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_vp.py +0 -0
  127. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_pick_place.py +0 -0
  128. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
  129. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
  130. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car.py +0 -0
  131. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_disjoint.py +0 -0
  132. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  133. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_stl.py +0 -0
  134. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_stl_or.py +0 -0
  135. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_waypoint_stl.py +0 -0
  136. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_plotting.py +0 -0
  137. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_time2spatial.py +0 -0
  138. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
  139. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
  140. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/readDataFcn.py +0 -0
  141. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_viser.py +0 -0
  142. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_hybrid.py +0 -0
  143. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_ice.py +0 -0
  144. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_mpc.py +0 -0
  145. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent.py +0 -0
  146. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
  147. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
  148. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_openscvx.py +0 -0
  149. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/_plotting.py +0 -0
  150. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/double_integrator_static.py +0 -0
  151. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/maze_rrt_scp.py +0 -0
  152. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/moving_safe_zones.py +0 -0
  153. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/multiphase_velocity.py +0 -0
  154. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
  155. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
  156. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/_plotting.py +0 -0
  157. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/_terrain.py +0 -0
  158. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/boresight_trace_mpcc.py +0 -0
  159. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp.py +0 -0
  160. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp_nodal.py +0 -0
  161. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp.py +0 -0
  162. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_nodal.py +0 -0
  163. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_polytope.py +0 -0
  164. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/drone_racing.py +0 -0
  165. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/drone_racing_batched_gates.py +0 -0
  166. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo.py +0 -0
  167. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/acl_logo.svg +0 -0
  168. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/circle.svg +0 -0
  169. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
  170. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
  171. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  172. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/lunar_terrain_agl.py +0 -0
  173. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/maze_scp.py +0 -0
  174. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/moving_safe_columns.py +0 -0
  175. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance.py +0 -0
  176. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  177. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/openscvx_logo.py +0 -0
  178. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_hector.py +0 -0
  179. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_zigzag.py +0 -0
  180. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax.py +0 -0
  181. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_pick_place.py +0 -0
  182. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_viewplanning.py +0 -0
  183. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_waypoint.py +0 -0
  184. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
  185. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace.py +0 -0
  186. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
  187. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/cartpole_mjx.py +0 -0
  188. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/double_cartpole_mjx.py +0 -0
  189. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/skydio_x2_mjx.py +0 -0
  190. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
  191. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_game.py +0 -0
  192. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_mjx.py +0 -0
  193. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_discrete.py +0 -0
  194. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_drone_racing.py +0 -0
  195. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  196. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  197. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  198. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent.py +0 -0
  199. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
  200. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
  201. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
  202. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/plotting.py +0 -0
  203. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/plotting_viser.py +0 -0
  204. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/3DoF_pdg_realtime.py +0 -0
  205. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/6DoF_pdg_realtime.py +0 -0
  206. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
  207. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
  208. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  209. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  210. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
  211. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  212. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/cinema_vp_realtime.py +0 -0
  213. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/drone_racing_realtime.py +0 -0
  214. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/dubins_car_realtime.py +0 -0
  215. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  216. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/3DoF_pdg.py +0 -0
  217. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg.py +0 -0
  218. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
  219. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc.py +0 -0
  220. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
  221. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/_cstc_plotting.py +0 -0
  222. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/ascent_launch_vehicle.py +0 -0
  223. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/reusable_launch_vehicle.py +0 -0
  224. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/rocket_ilqr.py +0 -0
  225. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
  226. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
  227. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
  228. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
  229. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
  230. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
  231. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
  232. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_dem.py +0 -0
  233. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/__init__.py +0 -0
  234. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/dem.py +0 -0
  235. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/lidar.py +0 -0
  236. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
  237. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/senss_dem.png +0 -0
  238. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/scaling/scaling_study.py +0 -0
  239. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.bin +0 -0
  240. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.gltf +0 -0
  241. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
  242. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
  243. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_normals.png +0 -0
  244. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
  245. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
  246. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
  247. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
  248. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/halo_orbit.py +0 -0
  249. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/hohmann_transfer.py +0 -0
  250. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/let_transfer.py +0 -0
  251. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/proxops_cw.py +0 -0
  252. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/relative_loitering.py +0 -0
  253. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/ctlos_cine.gif +0 -0
  254. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/ctlos_dr.gif +0 -0
  255. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/dtlos_cine.gif +0 -0
  256. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/dtlos_dr.gif +0 -0
  257. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/openscvx_logo.svg +0 -0
  258. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/openscvx_logo_square.png +0 -0
  259. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/oscvx_structure_full_dark.svg +0 -0
  260. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/video_preview.png +0 -0
  261. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/__init__.py +0 -0
  262. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/custom.css +0 -0
  263. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
  264. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-hero.css +0 -0
  265. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-viser.css +0 -0
  266. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/home.html +0 -0
  267. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/main.html +0 -0
  268. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-diagram.html +0 -0
  269. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-dropin-banner.html +0 -0
  270. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-hero.html +0 -0
  271. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-pipeline.html +0 -0
  272. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-viser-strip.html +0 -0
  273. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/sitemap.xml +0 -0
  274. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/mkdocs.yml +0 -0
  275. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/__init__.py +0 -0
  276. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/__main__.py +0 -0
  277. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/__init__.py +0 -0
  278. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/__init__.py +0 -0
  279. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
  280. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
  281. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
  282. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/base.py +0 -0
  283. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/history.py +0 -0
  284. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/hyperparams.py +0 -0
  285. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/loop.py +0 -0
  286. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/optimization_results.py +0 -0
  287. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/penalty.py +0 -0
  288. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/__init__.py +0 -0
  289. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/iteration.py +0 -0
  290. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
  291. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/state.py +0 -0
  292. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/weights.py +0 -0
  293. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/config.py +0 -0
  294. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/__init__.py +0 -0
  295. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/base.py +0 -0
  296. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/discretize_linearize.py +0 -0
  297. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize.py +0 -0
  298. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
  299. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/__init__.py +0 -0
  300. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
  301. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
  302. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/__init__.py +0 -0
  303. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/byof.py +0 -0
  304. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/lowering.py +0 -0
  305. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/validation.py +0 -0
  306. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/__init__.py +0 -0
  307. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/interpolation.py +0 -0
  308. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/inverse_kinematics.py +0 -0
  309. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/__init__.py +0 -0
  310. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/_utils.py +0 -0
  311. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/base.py +0 -0
  312. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/frax.py +0 -0
  313. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/menagerie.py +0 -0
  314. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/mjx.py +0 -0
  315. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/__init__.py +0 -0
  316. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/diffrax.py +0 -0
  317. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/runge_kutta.py +0 -0
  318. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/__init__.py +0 -0
  319. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_constraints.py +0 -0
  320. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_variables.py +0 -0
  321. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/dynamics.py +0 -0
  322. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/jax_constraints.py +0 -0
  323. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/parameters.py +0 -0
  324. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/problem.py +0 -0
  325. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/unified.py +0 -0
  326. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/plotting.py +0 -0
  327. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/publication.py +0 -0
  328. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/scp_iteration.py +0 -0
  329. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/__init__.py +0 -0
  330. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/animated.py +0 -0
  331. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/coordinates.py +0 -0
  332. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/orbits.py +0 -0
  333. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/plotly_integration.py +0 -0
  334. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/primitives.py +0 -0
  335. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/scp.py +0 -0
  336. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/server.py +0 -0
  337. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/__init__.py +0 -0
  338. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/post_processing.py +0 -0
  339. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/propagation.py +0 -0
  340. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/__init__.py +0 -0
  341. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/base.py +0 -0
  342. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/cones.py +0 -0
  343. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
  344. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/qpax_ptr_solver.py +0 -0
  345. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/__init__.py +0 -0
  346. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/affine.py +0 -0
  347. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/augmentation.py +0 -0
  348. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/builder.py +0 -0
  349. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/canonicalize.py +0 -0
  350. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/constraint_set.py +0 -0
  351. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/arithmetic.py +0 -0
  352. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/array.py +0 -0
  353. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/autodiff.py +0 -0
  354. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/constraint.py +0 -0
  355. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/control.py +0 -0
  356. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  357. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  358. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/linalg.py +0 -0
  359. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/logic.py +0 -0
  360. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/math.py +0 -0
  361. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/parameter.py +0 -0
  362. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/spatial.py +0 -0
  363. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/state.py +0 -0
  364. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/time.py +0 -0
  365. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/variable.py +0 -0
  366. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/vmap.py +0 -0
  367. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/hashing.py +0 -0
  368. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lower.py +0 -0
  369. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/__init__.py +0 -0
  370. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  371. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  372. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  373. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  374. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  375. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
  376. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  377. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  378. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  379. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  380. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  381. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  382. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  383. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  384. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  385. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  386. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  387. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  388. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
  389. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  390. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  391. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  392. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  393. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  394. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  395. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  396. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  397. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  398. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  399. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  400. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  401. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
  402. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
  403. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
  404. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
  405. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/array.py +0 -0
  406. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
  407. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
  408. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/control.py +0 -0
  409. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
  410. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
  411. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
  412. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
  413. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
  414. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/math.py +0 -0
  415. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
  416. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/state.py +0 -0
  417. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
  418. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
  419. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/__init__.py +0 -0
  420. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/_registry.py +0 -0
  421. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/array.py +0 -0
  422. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/constraint.py +0 -0
  423. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/lie.py +0 -0
  424. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/linalg.py +0 -0
  425. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/logic.py +0 -0
  426. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/math.py +0 -0
  427. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/parser.py +0 -0
  428. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/spatial.py +0 -0
  429. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stl.py +0 -0
  430. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stljax.py +0 -0
  431. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/tokenizer.py +0 -0
  432. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/preprocessing.py +0 -0
  433. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/sparsity.py +0 -0
  434. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/unified.py +0 -0
  435. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/__init__.py +0 -0
  436. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/cache.py +0 -0
  437. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/caching.py +0 -0
  438. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/printing.py +0 -0
  439. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/profiling.py +0 -0
  440. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/utils.py +0 -0
  441. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/dependency_links.txt +0 -0
  442. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/entry_points.txt +0 -0
  443. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/top_level.txt +0 -0
  444. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/gen_example_pages.py +0 -0
  445. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/gen_ref_pages.py +0 -0
  446. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
  447. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/mkdocs_seo_hook.py +0 -0
  448. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/setup.cfg +0 -0
  449. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/__init__.py +0 -0
  450. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/__init__.py +0 -0
  451. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/_iteration_helpers.py +0 -0
  452. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/__init__.py +0 -0
  453. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
  454. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
  455. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
  456. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
  457. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_jit.py +0 -0
  458. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_parity.py +0 -0
  459. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_make_solve_loop.py +0 -0
  460. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/brachistochrone_analytical.py +0 -0
  461. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/__init__.py +0 -0
  462. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_brachistochrone.py +0 -0
  463. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_impulsive.py +0 -0
  464. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_multishot_propagation.py +0 -0
  465. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
  466. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
  467. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
  468. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
  469. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
  470. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
  471. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
  472. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.json +0 -0
  473. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.yaml +0 -0
  474. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/hohmann_analytical.py +0 -0
  475. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/__init__.py +0 -0
  476. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx.py +0 -0
  477. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx_dynamics.py +0 -0
  478. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/__init__.py +0 -0
  479. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/_iteration_callback_helpers.py +0 -0
  480. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
  481. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
  482. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_qpax.py +0 -0
  483. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_vmap.py +0 -0
  484. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_qpax_ptr_solver.py +0 -0
  485. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_subproblem_pytree.py +0 -0
  486. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/__init__.py +0 -0
  487. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/__init__.py +0 -0
  488. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_arithmetic.py +0 -0
  489. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_array.py +0 -0
  490. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_autodiff.py +0 -0
  491. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_constraint.py +0 -0
  492. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_guess_expr.py +0 -0
  493. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_linalg.py +0 -0
  494. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_logic.py +0 -0
  495. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_math.py +0 -0
  496. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_node_reference.py +0 -0
  497. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_parameters.py +0 -0
  498. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_scaling.py +0 -0
  499. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_spatial.py +0 -0
  500. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_variable.py +0 -0
  501. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_vmap.py +0 -0
  502. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/__init__.py +0 -0
  503. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_array.py +0 -0
  504. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_constraint.py +0 -0
  505. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_lie.py +0 -0
  506. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_linalg.py +0 -0
  507. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_load.py +0 -0
  508. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_logic.py +0 -0
  509. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_math.py +0 -0
  510. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_parser.py +0 -0
  511. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_spatial.py +0 -0
  512. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_stl.py +0 -0
  513. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_tokenizer.py +0 -0
  514. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_vmap.py +0 -0
  515. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_augmentation.py +0 -0
  516. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_gmsr.py +0 -0
  517. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_hashing.py +0 -0
  518. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_latex_formulation.py +0 -0
  519. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_cvxpy.py +0 -0
  520. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_jax.py +0 -0
  521. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_latex.py +0 -0
  522. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_preprocessing.py +0 -0
  523. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_sparsity.py +0 -0
  524. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_unified.py +0 -0
  525. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_autotuning.py +0 -0
  526. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_cvxpygen_optional.py +0 -0
  527. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_discretization.py +0 -0
  528. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_expert.py +0 -0
  529. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_init.py +0 -0
  530. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_initialize_syncs_guesses.py +0 -0
  531. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_integrators.py +0 -0
  532. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_loader.py +0 -0
  533. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_optimization_results.py +0 -0
  534. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_post_process_batched_tau_clamp.py +0 -0
  535. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_propagation.py +0 -0
  536. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_results_parameters.py +0 -0
  537. {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_solve_batched_inference.py +0 -0
@@ -65,7 +65,7 @@ jobs:
65
65
  uv pip install --system mike
66
66
 
67
67
  - name: Install package
68
- run: uv pip install --system -e .
68
+ run: uv pip install --system -e ".[plotting]"
69
69
 
70
70
  - name: Build documentation (check only)
71
71
  if: ${{ !inputs.version }}
@@ -39,7 +39,9 @@ jobs:
39
39
  # cvxpygen omitted: its extra is unsatisfiable while cvxpy is pinned <1.9
40
40
  # (cvxpygen>=1.0.0 needs cvxpy>=1.9, #551); its tests skip until that resolves.
41
41
  # qpax omitted until its solves are stable on Linux runners (#550).
42
- uv pip install --system -e ".[test,mjx,lie,frax,stl]"
42
+ # moreau omitted: examples that need it carry the moreau marker and skip
43
+ # here. Solver-level moreau tests run in tests-moreau.yml.
44
+ uv pip install --system -e ".[test,plotting,mjx,lie,frax,stl]"
43
45
 
44
46
  - name: Run examples sweep
45
47
  run: |
@@ -0,0 +1,20 @@
1
+ name: moreau
2
+
3
+ # Badge workflow: health of the moreau integration on main.
4
+ # The weekly cron catches breakage from upstream releases between commits.
5
+ # Kept off the main tests.yml extras job so a moreau release cannot fail
6
+ # the mjx/lie checks.
7
+
8
+ on:
9
+ push:
10
+ branches:
11
+ - main
12
+ schedule:
13
+ - cron: '0 6 * * 1' # Weekly on Monday, offset from the Sunday examples sweep
14
+ workflow_dispatch:
15
+
16
+ jobs:
17
+ moreau:
18
+ uses: ./.github/workflows/_extra.yml
19
+ with:
20
+ extra: moreau
@@ -38,7 +38,7 @@ jobs:
38
38
 
39
39
  - name: Install dependencies
40
40
  run: |
41
- uv pip install --system -e ".[test]"
41
+ uv pip install --system -e ".[test,plotting]"
42
42
 
43
43
  - name: Run unit tests
44
44
  run: |
@@ -82,7 +82,7 @@ jobs:
82
82
 
83
83
  - name: Install dependencies
84
84
  run: |
85
- uv pip install --system -e ".[test]"
85
+ uv pip install --system -e ".[test,plotting]"
86
86
 
87
87
  - name: Run e2e tests
88
88
  run: |
@@ -123,6 +123,8 @@ jobs:
123
123
  # cvxpygen omitted: its extra is unsatisfiable while cvxpy is pinned <1.9
124
124
  # (cvxpygen>=1.0.0 needs cvxpy>=1.9, #551); its tests skip until that resolves.
125
125
  # qpax omitted until its solves are stable on Linux runners (#550).
126
+ # moreau omitted: tests-moreau.yml installs it and runs `-m moreau`, so an
127
+ # upstream moreau break stays on that badge.
126
128
  uv pip install --system -e ".[test,mjx,lie]"
127
129
 
128
130
  - name: Run extras tests
@@ -16,10 +16,11 @@ source venv/bin/activate # On Windows: venv\Scripts\activate
16
16
  Then install the package in editable mode with development dependencies:
17
17
 
18
18
  ```bash
19
- pip install -e ".[test]"
19
+ pip install -e ".[test,plotting]"
20
20
  ```
21
21
 
22
22
  For additional features, you can install optional dependencies:
23
+ - `pip install -e ".[plotting]"` - Plotly, Matplotlib, and Viser visualization
23
24
  - `pip install -e ".[cvxpygen]"` - Code generation support
24
25
  - `pip install -e ".[stl]"` - STL (Signal Temporal Logic) constraints
25
26
 
@@ -32,7 +33,7 @@ git clone git@github.com:OpenSCvx/OpenSCvx.git
32
33
  cd OpenSCvx
33
34
  uv venv
34
35
  source .venv/bin/activate # On Windows: .venv\Scripts\activate
35
- uv pip install -e ".[test]"
36
+ uv pip install -e ".[test,plotting]"
36
37
  ```
37
38
 
38
39
  To contribute changes, you'll need to create a branch or fork. See [Forking and Merging](#forking-and-merging) below for details on our workflow and [Branch Naming Conventions](#branch-naming-conventions) for required naming patterns.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.3.dev56
3
+ Version: 0.5.3.dev58
4
4
  Summary: A general Python-based successive convexification implementation which uses a JAX backend.
5
5
  Author-email: Chris Hayner and Griffin Norris <haynec@uw.edu>
6
6
  License: Apache Software License
@@ -14,13 +14,9 @@ Requires-Dist: cvxpy>=1.8.1
14
14
  Requires-Dist: qoco
15
15
  Requires-Dist: numpy
16
16
  Requires-Dist: jax
17
- Requires-Dist: plotly
18
17
  Requires-Dist: termcolor
19
18
  Requires-Dist: diffrax
20
- Requires-Dist: absl-py
21
19
  Requires-Dist: flatbuffers
22
- Requires-Dist: viser
23
- Requires-Dist: matplotlib
24
20
  Requires-Dist: pyyaml
25
21
  Requires-Dist: pydantic>=2.0
26
22
  Provides-Extra: cvxpygen
@@ -39,6 +35,10 @@ Requires-Dist: mujoco>=3.0; extra == "mjx"
39
35
  Requires-Dist: mujoco-mjx>=3.0; extra == "mjx"
40
36
  Provides-Extra: frax
41
37
  Requires-Dist: frax>=0.0.4; extra == "frax"
38
+ Provides-Extra: plotting
39
+ Requires-Dist: matplotlib; extra == "plotting"
40
+ Requires-Dist: plotly; extra == "plotting"
41
+ Requires-Dist: viser; extra == "plotting"
42
42
  Provides-Extra: test
43
43
  Requires-Dist: pytest; extra == "test"
44
44
  Requires-Dist: pytest-xdist; extra == "test"
@@ -156,9 +156,10 @@ uv pip install openscvx
156
156
  > [!TIP]
157
157
  > **Optional dependencies**
158
158
  >
159
- > For CVXPYGen code generation:
159
+ > Plotting (Plotly, Matplotlib, and Viser) and CVXPYGen code generation:
160
160
  > ```bash
161
- > pip install openscvx[cvxpygen]
161
+ > pip install "openscvx[plotting]"
162
+ > pip install "openscvx[cvxpygen]"
162
163
  > ```
163
164
 
164
165
  > [!TIP]
@@ -221,7 +222,7 @@ Check out the OpenSCvx documentation:
221
222
  We also have a selection of problems in the `examples/` folder as well as on the [Examples page](https://openscvx.github.io/OpenSCvx/latest/Examples/abstract/brachistochrone/) of the documentation. The example trajectory optimization problems are grouped by application and represent some of the problem types that can be solved by OpenSCvx.
222
223
 
223
224
  > [!Note]
224
- > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
225
+ > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode with the plotting extra (`pip install -e ".[plotting]"`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
225
226
 
226
227
  To run a problem simply run any of the examples directly, for example:
227
228
 
@@ -260,7 +261,7 @@ OpenSCvx integrates with several optional third-party packages. Each installs as
260
261
  | [jaxlie](https://github.com/brentyi/jaxlie) | `lie` | SO(3)/SE(3) Lie-group operations and IK initialization | [![jaxlie](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml) |
261
262
  | [qpax](https://github.com/qpax-solver/qpax) | `qpax` | JAX-native QP solver backend | [![qpax](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-qpax.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/issues/550) |
262
263
  | [CVXPYGen](https://github.com/cvxgrp/cvxpygen) | `cvxpygen` | Generated C solver code for the convex subproblem | [![cvxpygen](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-cvxpygen.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/issues/551) |
263
- | [moreau](https://pypi.org/project/moreau/) | `moreau` | Licensed QP solver backend | ![moreau](https://img.shields.io/badge/moreau-license%20required-lightgrey) |
264
+ | [moreau](https://pypi.org/project/moreau/) | `moreau` | Open Source SOCP solver backend | [![moreau](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml) |
264
265
  | [stljax](https://github.com/UW-CTRL/stljax) | `stl` | Signal Temporal Logic robustness bridge | ![stljax](https://img.shields.io/badge/stljax-no%20tests%20yet-lightgrey) |
265
266
  | [frax](https://github.com/danielpmorton/frax) | `frax` | Robot dynamics for the manipulator examples | [![frax](https://img.shields.io/badge/frax-weekly%20examples%20sweep-blue)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-examples.yml) |
266
267
 
@@ -275,7 +276,7 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
275
276
  Please cite the following works if you use the repository,
276
277
 
277
278
  ```tex
278
- @misc{hayner2026openscvxopensourcemodularextensible,
279
+ @misc{hayner2026openscvx,
279
280
  title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
280
281
  author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
281
282
  year={2026},
@@ -315,4 +316,4 @@ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint
315
316
  }
316
317
  ```
317
318
 
318
- Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
319
+ Additionally please run `problem.citation()` after `problem.intitialize()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
@@ -109,9 +109,10 @@ uv pip install openscvx
109
109
  > [!TIP]
110
110
  > **Optional dependencies**
111
111
  >
112
- > For CVXPYGen code generation:
112
+ > Plotting (Plotly, Matplotlib, and Viser) and CVXPYGen code generation:
113
113
  > ```bash
114
- > pip install openscvx[cvxpygen]
114
+ > pip install "openscvx[plotting]"
115
+ > pip install "openscvx[cvxpygen]"
115
116
  > ```
116
117
 
117
118
  > [!TIP]
@@ -174,7 +175,7 @@ Check out the OpenSCvx documentation:
174
175
  We also have a selection of problems in the `examples/` folder as well as on the [Examples page](https://openscvx.github.io/OpenSCvx/latest/Examples/abstract/brachistochrone/) of the documentation. The example trajectory optimization problems are grouped by application and represent some of the problem types that can be solved by OpenSCvx.
175
176
 
176
177
  > [!Note]
177
- > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
178
+ > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode with the plotting extra (`pip install -e ".[plotting]"`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
178
179
 
179
180
  To run a problem simply run any of the examples directly, for example:
180
181
 
@@ -213,7 +214,7 @@ OpenSCvx integrates with several optional third-party packages. Each installs as
213
214
  | [jaxlie](https://github.com/brentyi/jaxlie) | `lie` | SO(3)/SE(3) Lie-group operations and IK initialization | [![jaxlie](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml) |
214
215
  | [qpax](https://github.com/qpax-solver/qpax) | `qpax` | JAX-native QP solver backend | [![qpax](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-qpax.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/issues/550) |
215
216
  | [CVXPYGen](https://github.com/cvxgrp/cvxpygen) | `cvxpygen` | Generated C solver code for the convex subproblem | [![cvxpygen](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-cvxpygen.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/issues/551) |
216
- | [moreau](https://pypi.org/project/moreau/) | `moreau` | Licensed QP solver backend | ![moreau](https://img.shields.io/badge/moreau-license%20required-lightgrey) |
217
+ | [moreau](https://pypi.org/project/moreau/) | `moreau` | Open Source SOCP solver backend | [![moreau](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml/badge.svg?branch=main)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml) |
217
218
  | [stljax](https://github.com/UW-CTRL/stljax) | `stl` | Signal Temporal Logic robustness bridge | ![stljax](https://img.shields.io/badge/stljax-no%20tests%20yet-lightgrey) |
218
219
  | [frax](https://github.com/danielpmorton/frax) | `frax` | Robot dynamics for the manipulator examples | [![frax](https://img.shields.io/badge/frax-weekly%20examples%20sweep-blue)](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-examples.yml) |
219
220
 
@@ -228,7 +229,7 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
228
229
  Please cite the following works if you use the repository,
229
230
 
230
231
  ```tex
231
- @misc{hayner2026openscvxopensourcemodularextensible,
232
+ @misc{hayner2026openscvx,
232
233
  title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
233
234
  author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
234
235
  year={2026},
@@ -268,4 +269,4 @@ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint
268
269
  }
269
270
  ```
270
271
 
271
- Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
272
+ Additionally please run `problem.citation()` after `problem.intitialize()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
@@ -120,6 +120,11 @@ To add columns to the iteration table, set the class attribute `COLUMNS` to a
120
120
  list of `openscvx.utils.printing.Column` specs; the algorithm concatenates
121
121
  them into its own table via `get_columns`.
122
122
 
123
+ If the update rule comes from a published scheme, override `citation()` to
124
+ return its BibTeX entries — `Problem.citation()` prints them in a dedicated
125
+ autotuner section. The default is an empty list, right for unpublished
126
+ heuristics.
127
+
123
128
  ## A custom algorithm
124
129
 
125
130
  An `Algorithm` owns the SCP iteration end to end: it *builds* the JAX-pure
@@ -316,7 +316,7 @@ theta_traj = results.trajectory["theta"]
316
316
 
317
317
  ### Visualizing the Results
318
318
 
319
- OpenSCvx provides built-in plotting utilities for quick visualization of your results. The simplest way to see your solution is with `plot_states()` and `plot_controls()`:
319
+ OpenSCvx provides plotting utilities for quick visualization of your results. Install them with `pip install "openscvx[plotting]"`. The simplest way to see your solution is with `plot_states()` and `plot_controls()`:
320
320
 
321
321
  ```python
322
322
  from openscvx.plotting import plot_states, plot_controls
@@ -22,7 +22,11 @@ This tutorial covers:
22
22
 
23
23
  ## 2D Plots with Plotly
24
24
 
25
- The `openscvx.plotting` module provides high-level functions for common visualization tasks. These work with any problem and require no additional setup.
25
+ The `openscvx.plotting` module provides high-level functions for common visualization tasks. These work with any problem once the plotting extra is installed:
26
+
27
+ ```sh
28
+ pip install "openscvx[plotting]"
29
+ ```
26
30
 
27
31
  ### Time Series: States and Controls
28
32
 
@@ -9,8 +9,8 @@ description: >-
9
9
 
10
10
  OpenSCvx is published on PyPI as [`openscvx`](https://pypi.org/project/openscvx/)
11
11
  and requires **Python 3.11 or newer**. Its core depends on JAX and CVXPY; the
12
- optional extras below pull in additional solvers, dynamics backends, and modeling
13
- features only when you need them.
12
+ optional extras below pull in plotting, additional solvers, dynamics backends,
13
+ and modeling features only when you need them.
14
14
 
15
15
  ## How to install OpenSCvx
16
16
 
@@ -19,8 +19,8 @@ features only when you need them.
19
19
  ```sh
20
20
  uv pip install openscvx
21
21
 
22
- # Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
23
- uv pip install "openscvx[cvxpygen,stl,lie,mjx]"
22
+ # Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
23
+ uv pip install "openscvx[plotting,cvxpygen,stl,lie,mjx]"
24
24
  ```
25
25
 
26
26
  === "pip"
@@ -28,8 +28,8 @@ features only when you need them.
28
28
  ```sh
29
29
  pip install openscvx
30
30
 
31
- # Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
32
- pip install "openscvx[cvxpygen,stl,lie,mjx]"
31
+ # Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
32
+ pip install "openscvx[plotting,cvxpygen,stl,lie,mjx]"
33
33
  ```
34
34
 
35
35
  === "From source (editable)"
@@ -39,12 +39,13 @@ features only when you need them.
39
39
  cd OpenSCvx
40
40
  uv pip install -e .
41
41
 
42
- # Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
43
- uv pip install -e ".[cvxpygen,stl,lie,mjx]"
42
+ # Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
43
+ uv pip install -e ".[plotting,cvxpygen,stl,lie,mjx]"
44
44
  ```
45
45
 
46
- Install from source if you want to run the [examples](examples.md), modify the
47
- library, or track the development branch.
46
+ Install from source if you want to modify the library or track the development
47
+ branch. Running the [examples](examples.md) needs the `plotting` extra as well,
48
+ because those scripts import Plotly and Viser at startup.
48
49
 
49
50
  ## Optional extras
50
51
 
@@ -52,9 +53,10 @@ Extras are installed with the `openscvx[extra1,extra2]` syntax shown above.
52
53
 
53
54
  | Extra | Enables |
54
55
  |-------|---------|
56
+ | `plotting` | 2D plots and 3D scenes (`matplotlib`, `plotly`, `viser`). |
55
57
  | `cvxpygen` | Generated C solvers via `cvxpygen` + `qocogen`. |
56
58
  | `qpax` | The `qpax` differentiable QP backend. |
57
- | `moreau` | The licensed `moreau` conic solver. |
59
+ | `moreau` | The `moreau` conic solver backend. |
58
60
  | `stl` | Signal Temporal Logic constraints via `stljax`. |
59
61
  | `lie` | Lie-group operators via `jaxlie`. |
60
62
  | `mjx` | MuJoCo MJX dynamics (`mujoco`, `mujoco-mjx`). |
@@ -6,7 +6,8 @@ frame-perfectly aligned with the viser recording and can be composited with
6
6
  ffmpeg afterwards.
7
7
 
8
8
  Uses matplotlib's Agg canvas rather than plotly + kaleido so there's no
9
- headless-Chrome dependency — matplotlib is already a project dep. Raw RGB
9
+ headless-Chrome dependency. Matplotlib comes with the plotting extra
10
+ (``pip install 'openscvx[plotting]'``). Raw RGB
10
11
  frames are piped straight into ``ffmpeg -f rawvideo`` (same pattern as
11
12
  ``_render.py``), so there's no intermediate PNGs and no Python-side decode.
12
13
  """
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.5.3.dev56'
22
- __version_tuple__ = version_tuple = (0, 5, 3, 'dev56')
21
+ __version__ = version = '0.5.3.dev58'
22
+ __version_tuple__ = version_tuple = (0, 5, 3, 'dev58')
23
23
 
24
- __commit_id__ = commit_id = 'g96d2204af'
24
+ __commit_id__ = commit_id = 'gb7be593bb'
@@ -88,6 +88,29 @@ class AcceptanceRatioAutotuner(AutotuningBase):
88
88
  Column("adaptive_state", "Adaptive", 16, "{}", color_adaptive_state, Verbosity.FULL),
89
89
  ]
90
90
 
91
+ def citation(self) -> List[str]:
92
+ """Return BibTeX citations for the SCvx acceptance-ratio update rule."""
93
+ return [
94
+ r"""@inproceedings{mao2016scvx,
95
+ title={Successive convexification of non-convex optimal control problems and its
96
+ convergence properties},
97
+ author={Mao, Yuanqi and Szmuk, Michael and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
98
+ booktitle={2016 IEEE 55th Conference on Decision and Control (CDC)},
99
+ pages={3636--3641},
100
+ year={2016},
101
+ publisher={IEEE}
102
+ }""",
103
+ r"""@misc{mao2019scvx,
104
+ title={Successive Convexification: A Superlinearly Convergent Algorithm for
105
+ Non-convex Optimal Control Problems},
106
+ author={Mao, Yuanqi and Szmuk, Michael and Xu, Xiangru and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
107
+ year={2019},
108
+ eprint={1804.06539},
109
+ archivePrefix={arXiv},
110
+ primaryClass={math.OC}
111
+ }""",
112
+ ]
113
+
91
114
  def _update_multipliers(
92
115
  self,
93
116
  state: "AlgorithmState",
@@ -6,7 +6,7 @@ SCP loop records history outside this module.
6
6
  """
7
7
 
8
8
  import warnings
9
- from typing import TYPE_CHECKING, Literal
9
+ from typing import TYPE_CHECKING, List, Literal
10
10
 
11
11
  import jax.numpy as jnp
12
12
  from pydantic import BaseModel, ConfigDict
@@ -256,6 +256,24 @@ class AugmentedLagrangian(AcceptanceRatioAutotuner):
256
256
  # :py:meth:`_update_virtual_buffer_nodal_weights`.
257
257
  return jnp.minimum(state.hyper.lam_vc_max, lam_vb_new)
258
258
 
259
+ def citation(self) -> List[str]:
260
+ """Return BibTeX citations for the augmented-Lagrangian multiplier updates.
261
+
262
+ Extends the inherited SCvx acceptance-ratio references with Luo's
263
+ dissertation, whose penalty-weight updates this autotuner implements.
264
+ """
265
+ return super().citation() + [
266
+ r"""@phdthesis{luo2025modeling,
267
+ title={Modeling and Algorithms for Nonconvex Trajectory Generation Problems:
268
+ From Constraint Reformulations and First-Order Proximal Methods to
269
+ Structure-Exploiting Convex Solvers},
270
+ author={Luo, Dayou},
271
+ school={University of Washington},
272
+ year={2025},
273
+ url={https://hdl.handle.net/1773/53364}
274
+ }"""
275
+ ]
276
+
259
277
 
260
278
  # =============================================================================
261
279
  # Pydantic spec for dict / YAML validation
@@ -257,3 +257,16 @@ class AutotuningBase(ABC):
257
257
  the autotuner's decision; the SCP loop records that into history
258
258
  and maps it to a printable label.
259
259
  """
260
+
261
+ def citation(self) -> List[str]:
262
+ """Return BibTeX citations for the published update rule this autotuner implements.
263
+
264
+ Autotuners implementing a published scheme override this so that
265
+ :meth:`openscvx.Problem.citation` can credit it alongside the
266
+ algorithm, solver, and discretization references. Unpublished
267
+ heuristics keep the default.
268
+
269
+ Returns:
270
+ List of BibTeX citation strings. Empty for uncited autotuners.
271
+ """
272
+ return []
@@ -89,7 +89,7 @@ def load_yaml(path: Union[str, Path]) -> dict:
89
89
  Returns:
90
90
  Dict of keyword arguments suitable for ``Problem(**result)``.
91
91
  """
92
- import yaml # optional dependency
92
+ import yaml
93
93
 
94
94
  with open(path) as f:
95
95
  data = yaml.safe_load(f)
@@ -1,5 +1,9 @@
1
1
  """Trajectory visualization and plotting utilities.
2
2
 
3
+ Requires the plotting extra::
4
+
5
+ pip install 'openscvx[plotting]'
6
+
3
7
  This module provides reusable building blocks for visualizing trajectory
4
8
  optimization results. It is intentionally minimal - we provide common utilities
5
9
  that can be composed together, not a complete solution that tries to do
@@ -41,27 +45,10 @@ For problem-specific visualization examples (drones, rockets, etc.), see
41
45
  ``examples/plotting_viser.py``.
42
46
  """
43
47
 
44
- try:
45
- from . import viser
46
- except ModuleNotFoundError as e:
47
- # Make viser an optional dependency so 2D plotting works without it.
48
- # Accessing openscvx.plotting.viser will raise a helpful error message.
49
- class _MissingOptionalDependency:
50
- def __init__(self, *, package: str, exc: Exception):
51
- self._package = package
52
- self._exc = exc
53
-
54
- def __getattr__(self, name: str):
55
- raise ModuleNotFoundError(
56
- f"Optional dependency '{self._package}' is required for 3D visualization.\n"
57
- f"Install it with: pip install {self._package}\n"
58
- f"Original error: {self._exc}"
59
- ) from self._exc
60
-
61
- def __repr__(self) -> str: # pragma: no cover
62
- return f"<missing optional dependency '{self._package}'>"
63
-
64
- viser = _MissingOptionalDependency(package="viser", exc=e) # type: ignore[assignment]
48
+ from . import (
49
+ _deps, # noqa: F401 # raises if the plotting extra is missing
50
+ viser,
51
+ )
65
52
  from .plotting import (
66
53
  plot_control_component,
67
54
  plot_controls,
@@ -0,0 +1,18 @@
1
+ """Fail fast when the plotting extra is not installed.
2
+
3
+ Imported by :mod:`openscvx.plotting` before Plotly, Matplotlib, or Viser.
4
+ ``import openscvx`` does not import this module, so solving a problem does not
5
+ require the plotting stack.
6
+ """
7
+
8
+ from importlib.util import find_spec
9
+
10
+ _REQUIRED = ("matplotlib", "plotly", "viser")
11
+
12
+ _missing = [name for name in _REQUIRED if find_spec(name) is None]
13
+ if _missing:
14
+ missing = ", ".join(_missing)
15
+ raise ImportError(
16
+ "openscvx.plotting requires the optional plotting extra "
17
+ f"(missing {missing}). Install it with: pip install 'openscvx[plotting]'"
18
+ )
@@ -2299,9 +2299,11 @@ class Problem:
2299
2299
  def citation(self) -> str:
2300
2300
  """Return BibTeX citations for all components used in this problem.
2301
2301
 
2302
- Aggregates citations from the algorithm and other components (discretization,
2303
- convex solver, etc.) Each section is prefixed with a comment indicating which component the
2304
- citation is for.
2302
+ Aggregates citations from the algorithm, its autotuner, the convex
2303
+ solver, the discretization, and every symbolic node in the problem's
2304
+ expression graphs (e.g. GMSR STL operators, jaxlie-backed Lie-group
2305
+ maps). Each section is prefixed with a comment indicating which
2306
+ component the citation is for.
2305
2307
 
2306
2308
  Returns:
2307
2309
  Formatted string containing all BibTeX citations with comments.
@@ -2324,6 +2326,14 @@ class Problem:
2324
2326
  citations = "\n".join(algo_citations)
2325
2327
  sections.append(f"{header}\n\n{citations}")
2326
2328
 
2329
+ # Autotuner citations
2330
+ tuner_citations = self._algorithm.autotuner.citation()
2331
+ if tuner_citations:
2332
+ tuner_name = type(self._algorithm.autotuner).__name__
2333
+ header = f"% Autotuner: {tuner_name}"
2334
+ citations = "\n".join(tuner_citations)
2335
+ sections.append(f"{header}\n\n{citations}")
2336
+
2327
2337
  # Solver citations
2328
2338
  solver_citations = self._solver.citation()
2329
2339
  if solver_citations:
@@ -2340,6 +2350,21 @@ class Problem:
2340
2350
  citations = "\n".join(dis_citations)
2341
2351
  sections.append(f"{header}\n\n{citations}")
2342
2352
 
2353
+ # Symbolic-node citations, gathered by walking the expression graphs.
2354
+ # Distinct node classes can share a reference (every GMSR operator
2355
+ # cites the same paper), so entries are deduplicated across classes.
2356
+ node_citations = self.symbolic.citations()
2357
+ if node_citations:
2358
+ names = ", ".join(sorted(node_citations))
2359
+ header = f"% Symbolic Operators: {names}"
2360
+ entries: list[str] = []
2361
+ for name in sorted(node_citations):
2362
+ for entry in node_citations[name]:
2363
+ if entry not in entries:
2364
+ entries.append(entry)
2365
+ citations = "\n".join(entries)
2366
+ sections.append(f"{header}\n\n{citations}")
2367
+
2343
2368
  sections.append(r"% --- END AUTO-GENERATED CITATIONS")
2344
2369
 
2345
2370
  return "\n\n".join(sections)