openscvx 0.5.3.dev57__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.dev57 → openscvx-0.5.3.dev58}/.github/workflows/_docs.yml +1 -1
  2. {openscvx-0.5.3.dev57 → 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.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests.yml +4 -2
  5. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/CONTRIBUTING.md +3 -2
  6. {openscvx-0.5.3.dev57/openscvx.egg-info → openscvx-0.5.3.dev58}/PKG-INFO +12 -11
  7. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/README.md +7 -6
  8. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/01_hello_world_brachistochrone.md +1 -1
  9. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/05_visualization.md +5 -1
  10. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/installation.md +13 -11
  11. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_sensor_view.py +2 -1
  12. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/_version.py +3 -3
  13. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/loader.py +1 -1
  14. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/__init__.py +8 -21
  15. openscvx-0.5.3.dev58/openscvx/plotting/_deps.py +18 -0
  16. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/moreau_ptr_solver.py +27 -37
  17. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/ptr_solver.py +4 -3
  18. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58/openscvx.egg-info}/PKG-INFO +12 -11
  19. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/SOURCES.txt +2 -0
  20. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/requires.txt +5 -4
  21. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/scm_file_list.json +2 -0
  22. openscvx-0.5.3.dev58/openscvx.egg-info/scm_version.json +8 -0
  23. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/pyproject.toml +8 -7
  24. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/conftest.py +1 -34
  25. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_moreau.py +2 -3
  26. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_moreau_ptr_solver.py +0 -23
  27. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_examples.py +15 -0
  28. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_plotting.py +9 -1
  29. openscvx-0.5.3.dev57/openscvx.egg-info/scm_version.json +0 -8
  30. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/assets/logo.svg +0 -0
  31. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/release-drafter.yml +0 -0
  32. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/_extra.yml +0 -0
  33. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/branch-name.yml +0 -0
  34. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/docs.yml +0 -0
  35. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/lint.yml +0 -0
  36. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/nightly.yml +0 -0
  37. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/release-drafter.yml +0 -0
  38. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/release.yml +0 -0
  39. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-cvxpygen.yml +0 -0
  40. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-lie.yml +0 -0
  41. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-mjx.yml +0 -0
  42. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-qpax.yml +0 -0
  43. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.gitignore +0 -0
  44. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.gitmodules +0 -0
  45. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/CITATION.cff +0 -0
  46. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/LICENSE +0 -0
  47. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/constraint_reformulation.md +0 -0
  48. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/control_parameterization.md +0 -0
  49. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/discretization.md +0 -0
  50. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/ocp.md +0 -0
  51. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/scvx.md +0 -0
  52. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/time_dilation.md +0 -0
  53. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/batching_jit_grad.md +0 -0
  54. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/custom_algorithms_autotuners.md +0 -0
  55. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/lowering_architecture.md +0 -0
  56. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  57. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/00_introduction.md +0 -0
  58. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  59. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  60. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  61. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/06_logic.md +0 -0
  62. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/07_lie.md +0 -0
  63. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/08_mpcc.md +0 -0
  64. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
  65. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/favicon.png +0 -0
  66. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_dark.png +0 -0
  67. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_light.png +0 -0
  68. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_dark.png +0 -0
  69. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_light.png +0 -0
  70. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_dark.png +0 -0
  71. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_light.png +0 -0
  72. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/logo.svg +0 -0
  73. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/openscvx_logo_square.png +0 -0
  74. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-client/index.html +0 -0
  75. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/drone_racing.viser +0 -0
  76. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
  77. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/changelog.md +0 -0
  78. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/citation.md +0 -0
  79. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/examples.md +0 -0
  80. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/index.md +0 -0
  81. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/javascripts/mathjax.js +0 -0
  82. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/llms.txt +0 -0
  83. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/versions.json +0 -0
  84. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_maze.py +0 -0
  85. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_maze_viz.py +0 -0
  86. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_viser_embed_export.py +0 -0
  87. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone.py +0 -0
  88. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone_batched.py +0 -0
  89. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/chen_allgoewer.py +0 -0
  90. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/flappy_bird.py +0 -0
  91. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/hypersensitive.py +0 -0
  92. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/impulsive.py +0 -0
  93. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/stl_integer_variable.py +0 -0
  94. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/stl_or.py +0 -0
  95. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/aircraft/dynamic_soaring.py +0 -0
  96. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/aircraft/supersonic_time_to_climb.py +0 -0
  97. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/7_dof_arm.py +0 -0
  98. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_camera.py +0 -0
  99. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_render.py +0 -0
  100. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/dr_vp_polytope.py +0 -0
  101. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/franka_fr3v2_pick_place.py +0 -0
  102. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/logo.py +0 -0
  103. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/obstacle_avoidance_vmap.py +0 -0
  104. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/senss_hop_lidar_camera.py +0 -0
  105. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/3_dof_arm.py +0 -0
  106. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm.py +0 -0
  107. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_collision.py +0 -0
  108. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_vp.py +0 -0
  109. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_pick_place.py +0 -0
  110. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
  111. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
  112. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car.py +0 -0
  113. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_disjoint.py +0 -0
  114. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  115. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_stl.py +0 -0
  116. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_stl_or.py +0 -0
  117. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_waypoint_stl.py +0 -0
  118. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_plotting.py +0 -0
  119. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_time2spatial.py +0 -0
  120. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
  121. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
  122. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/readDataFcn.py +0 -0
  123. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_viser.py +0 -0
  124. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_hybrid.py +0 -0
  125. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_ice.py +0 -0
  126. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_mpc.py +0 -0
  127. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent.py +0 -0
  128. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
  129. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
  130. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_openscvx.py +0 -0
  131. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/_plotting.py +0 -0
  132. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/double_integrator_static.py +0 -0
  133. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/maze_rrt_scp.py +0 -0
  134. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/moving_safe_zones.py +0 -0
  135. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/multiphase_velocity.py +0 -0
  136. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
  137. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
  138. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/_plotting.py +0 -0
  139. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/_terrain.py +0 -0
  140. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/boresight_trace_mpcc.py +0 -0
  141. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp.py +0 -0
  142. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp_nodal.py +0 -0
  143. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp.py +0 -0
  144. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_nodal.py +0 -0
  145. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_polytope.py +0 -0
  146. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/drone_racing.py +0 -0
  147. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/drone_racing_batched_gates.py +0 -0
  148. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo.py +0 -0
  149. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/acl_logo.svg +0 -0
  150. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/circle.svg +0 -0
  151. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
  152. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
  153. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  154. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/lunar_terrain_agl.py +0 -0
  155. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/maze_scp.py +0 -0
  156. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/moving_safe_columns.py +0 -0
  157. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance.py +0 -0
  158. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  159. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/openscvx_logo.py +0 -0
  160. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_hector.py +0 -0
  161. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_zigzag.py +0 -0
  162. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax.py +0 -0
  163. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_pick_place.py +0 -0
  164. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_viewplanning.py +0 -0
  165. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_waypoint.py +0 -0
  166. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
  167. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace.py +0 -0
  168. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
  169. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/cartpole_mjx.py +0 -0
  170. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/double_cartpole_mjx.py +0 -0
  171. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/skydio_x2_mjx.py +0 -0
  172. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
  173. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_game.py +0 -0
  174. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_mjx.py +0 -0
  175. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_discrete.py +0 -0
  176. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_drone_racing.py +0 -0
  177. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  178. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  179. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  180. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent.py +0 -0
  181. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
  182. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
  183. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
  184. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/plotting.py +0 -0
  185. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/plotting_viser.py +0 -0
  186. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/3DoF_pdg_realtime.py +0 -0
  187. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/6DoF_pdg_realtime.py +0 -0
  188. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
  189. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
  190. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  191. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  192. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
  193. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  194. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/cinema_vp_realtime.py +0 -0
  195. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/drone_racing_realtime.py +0 -0
  196. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/dubins_car_realtime.py +0 -0
  197. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  198. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/3DoF_pdg.py +0 -0
  199. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg.py +0 -0
  200. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
  201. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc.py +0 -0
  202. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
  203. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/_cstc_plotting.py +0 -0
  204. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/ascent_launch_vehicle.py +0 -0
  205. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/reusable_launch_vehicle.py +0 -0
  206. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/rocket_ilqr.py +0 -0
  207. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
  208. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
  209. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
  210. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
  211. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
  212. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
  213. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
  214. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_dem.py +0 -0
  215. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/__init__.py +0 -0
  216. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/dem.py +0 -0
  217. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/lidar.py +0 -0
  218. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
  219. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/senss_dem.png +0 -0
  220. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/scaling/scaling_study.py +0 -0
  221. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.bin +0 -0
  222. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.gltf +0 -0
  223. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
  224. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
  225. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_normals.png +0 -0
  226. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
  227. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
  228. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
  229. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
  230. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/halo_orbit.py +0 -0
  231. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/hohmann_transfer.py +0 -0
  232. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/let_transfer.py +0 -0
  233. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/proxops_cw.py +0 -0
  234. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/relative_loitering.py +0 -0
  235. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/ctlos_cine.gif +0 -0
  236. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/ctlos_dr.gif +0 -0
  237. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/dtlos_cine.gif +0 -0
  238. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/dtlos_dr.gif +0 -0
  239. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/openscvx_logo.svg +0 -0
  240. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/openscvx_logo_square.png +0 -0
  241. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/oscvx_structure_full_dark.svg +0 -0
  242. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/video_preview.png +0 -0
  243. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/__init__.py +0 -0
  244. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/custom.css +0 -0
  245. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
  246. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-hero.css +0 -0
  247. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-viser.css +0 -0
  248. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/home.html +0 -0
  249. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/main.html +0 -0
  250. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-diagram.html +0 -0
  251. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-dropin-banner.html +0 -0
  252. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-hero.html +0 -0
  253. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-pipeline.html +0 -0
  254. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-viser-strip.html +0 -0
  255. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/sitemap.xml +0 -0
  256. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/mkdocs.yml +0 -0
  257. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/__init__.py +0 -0
  258. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/__main__.py +0 -0
  259. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/__init__.py +0 -0
  260. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/__init__.py +0 -0
  261. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/acceptance_ratio.py +0 -0
  262. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
  263. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/augmented_lagrangian.py +0 -0
  264. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/base.py +0 -0
  265. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
  266. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
  267. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/base.py +0 -0
  268. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/history.py +0 -0
  269. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/hyperparams.py +0 -0
  270. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/loop.py +0 -0
  271. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/optimization_results.py +0 -0
  272. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/penalty.py +0 -0
  273. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/__init__.py +0 -0
  274. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/iteration.py +0 -0
  275. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
  276. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/state.py +0 -0
  277. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/weights.py +0 -0
  278. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/config.py +0 -0
  279. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/__init__.py +0 -0
  280. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/base.py +0 -0
  281. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/discretize_linearize.py +0 -0
  282. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize.py +0 -0
  283. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
  284. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/__init__.py +0 -0
  285. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
  286. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
  287. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/__init__.py +0 -0
  288. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/byof.py +0 -0
  289. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/lowering.py +0 -0
  290. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/validation.py +0 -0
  291. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/__init__.py +0 -0
  292. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/interpolation.py +0 -0
  293. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/inverse_kinematics.py +0 -0
  294. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/__init__.py +0 -0
  295. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/_utils.py +0 -0
  296. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/base.py +0 -0
  297. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/frax.py +0 -0
  298. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/menagerie.py +0 -0
  299. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/mjx.py +0 -0
  300. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/__init__.py +0 -0
  301. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/diffrax.py +0 -0
  302. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/runge_kutta.py +0 -0
  303. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/__init__.py +0 -0
  304. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_constraints.py +0 -0
  305. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_variables.py +0 -0
  306. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/dynamics.py +0 -0
  307. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/jax_constraints.py +0 -0
  308. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/parameters.py +0 -0
  309. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/problem.py +0 -0
  310. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/unified.py +0 -0
  311. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/plotting.py +0 -0
  312. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/publication.py +0 -0
  313. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/scp_iteration.py +0 -0
  314. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/__init__.py +0 -0
  315. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/animated.py +0 -0
  316. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/coordinates.py +0 -0
  317. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/orbits.py +0 -0
  318. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/plotly_integration.py +0 -0
  319. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/primitives.py +0 -0
  320. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/scp.py +0 -0
  321. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/server.py +0 -0
  322. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/problem.py +0 -0
  323. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/__init__.py +0 -0
  324. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/post_processing.py +0 -0
  325. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/propagation.py +0 -0
  326. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/__init__.py +0 -0
  327. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/base.py +0 -0
  328. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/cones.py +0 -0
  329. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
  330. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/qpax_ptr_solver.py +0 -0
  331. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/__init__.py +0 -0
  332. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/affine.py +0 -0
  333. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/augmentation.py +0 -0
  334. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/builder.py +0 -0
  335. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/canonicalize.py +0 -0
  336. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/constraint_set.py +0 -0
  337. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/__init__.py +0 -0
  338. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/arithmetic.py +0 -0
  339. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/array.py +0 -0
  340. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/autodiff.py +0 -0
  341. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/constraint.py +0 -0
  342. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/control.py +0 -0
  343. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/expr.py +0 -0
  344. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  345. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/_citations.py +0 -0
  346. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  347. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/se3.py +0 -0
  348. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/so3.py +0 -0
  349. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/linalg.py +0 -0
  350. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/logic.py +0 -0
  351. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/math.py +0 -0
  352. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/parameter.py +0 -0
  353. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/spatial.py +0 -0
  354. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/state.py +0 -0
  355. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stl.py +0 -0
  356. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stljax.py +0 -0
  357. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/time.py +0 -0
  358. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/variable.py +0 -0
  359. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/vmap.py +0 -0
  360. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/hashing.py +0 -0
  361. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lower.py +0 -0
  362. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/__init__.py +0 -0
  363. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  364. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  365. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  366. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  367. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  368. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
  369. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  370. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  371. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  372. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  373. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  374. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  375. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  376. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  377. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  378. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  379. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  380. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  381. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
  382. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  383. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  384. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  385. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  386. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  387. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  388. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  389. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  390. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  391. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  392. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  393. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  394. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
  395. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
  396. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
  397. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
  398. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/array.py +0 -0
  399. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
  400. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
  401. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/control.py +0 -0
  402. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
  403. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
  404. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
  405. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
  406. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
  407. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/math.py +0 -0
  408. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
  409. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/state.py +0 -0
  410. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
  411. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
  412. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/__init__.py +0 -0
  413. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/_registry.py +0 -0
  414. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/array.py +0 -0
  415. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/constraint.py +0 -0
  416. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/lie.py +0 -0
  417. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/linalg.py +0 -0
  418. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/logic.py +0 -0
  419. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/math.py +0 -0
  420. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/parser.py +0 -0
  421. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/spatial.py +0 -0
  422. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stl.py +0 -0
  423. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stljax.py +0 -0
  424. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/tokenizer.py +0 -0
  425. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/preprocessing.py +0 -0
  426. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/problem.py +0 -0
  427. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/sparsity.py +0 -0
  428. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/unified.py +0 -0
  429. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/__init__.py +0 -0
  430. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/cache.py +0 -0
  431. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/caching.py +0 -0
  432. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/printing.py +0 -0
  433. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/profiling.py +0 -0
  434. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/utils.py +0 -0
  435. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/dependency_links.txt +0 -0
  436. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/entry_points.txt +0 -0
  437. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/top_level.txt +0 -0
  438. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/gen_example_pages.py +0 -0
  439. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/gen_ref_pages.py +0 -0
  440. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
  441. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/mkdocs_seo_hook.py +0 -0
  442. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/setup.cfg +0 -0
  443. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/__init__.py +0 -0
  444. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/__init__.py +0 -0
  445. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/_iteration_helpers.py +0 -0
  446. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/__init__.py +0 -0
  447. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_citation.py +0 -0
  448. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
  449. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
  450. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
  451. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
  452. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_jit.py +0 -0
  453. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_parity.py +0 -0
  454. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_make_solve_loop.py +0 -0
  455. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/brachistochrone_analytical.py +0 -0
  456. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/__init__.py +0 -0
  457. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_brachistochrone.py +0 -0
  458. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_impulsive.py +0 -0
  459. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_multishot_propagation.py +0 -0
  460. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
  461. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
  462. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
  463. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
  464. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
  465. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
  466. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
  467. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.json +0 -0
  468. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.yaml +0 -0
  469. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/hohmann_analytical.py +0 -0
  470. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/__init__.py +0 -0
  471. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx.py +0 -0
  472. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx_dynamics.py +0 -0
  473. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/__init__.py +0 -0
  474. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/_iteration_callback_helpers.py +0 -0
  475. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
  476. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
  477. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_qpax.py +0 -0
  478. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_vmap.py +0 -0
  479. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_qpax_ptr_solver.py +0 -0
  480. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_subproblem_pytree.py +0 -0
  481. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/__init__.py +0 -0
  482. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/__init__.py +0 -0
  483. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_arithmetic.py +0 -0
  484. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_array.py +0 -0
  485. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_autodiff.py +0 -0
  486. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_constraint.py +0 -0
  487. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_expr.py +0 -0
  488. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_guess_expr.py +0 -0
  489. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_lie.py +0 -0
  490. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_linalg.py +0 -0
  491. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_logic.py +0 -0
  492. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_math.py +0 -0
  493. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_node_reference.py +0 -0
  494. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_parameters.py +0 -0
  495. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_scaling.py +0 -0
  496. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_spatial.py +0 -0
  497. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_stl.py +0 -0
  498. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_variable.py +0 -0
  499. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_vmap.py +0 -0
  500. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/__init__.py +0 -0
  501. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_array.py +0 -0
  502. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_constraint.py +0 -0
  503. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_lie.py +0 -0
  504. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_linalg.py +0 -0
  505. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_load.py +0 -0
  506. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_logic.py +0 -0
  507. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_math.py +0 -0
  508. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_parser.py +0 -0
  509. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_spatial.py +0 -0
  510. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_stl.py +0 -0
  511. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_tokenizer.py +0 -0
  512. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_vmap.py +0 -0
  513. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_augmentation.py +0 -0
  514. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_citations.py +0 -0
  515. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_gmsr.py +0 -0
  516. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_hashing.py +0 -0
  517. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_latex_formulation.py +0 -0
  518. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_cvxpy.py +0 -0
  519. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_jax.py +0 -0
  520. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_latex.py +0 -0
  521. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_preprocessing.py +0 -0
  522. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_sparsity.py +0 -0
  523. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_unified.py +0 -0
  524. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_autotuning.py +0 -0
  525. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_citation.py +0 -0
  526. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_cvxpygen_optional.py +0 -0
  527. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_discretization.py +0 -0
  528. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_expert.py +0 -0
  529. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_init.py +0 -0
  530. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_initialize_syncs_guesses.py +0 -0
  531. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_integrators.py +0 -0
  532. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_loader.py +0 -0
  533. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_optimization_results.py +0 -0
  534. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_post_process_batched_tau_clamp.py +0 -0
  535. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_propagation.py +0 -0
  536. {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_results_parameters.py +0 -0
  537. {openscvx-0.5.3.dev57 → 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.dev57
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.
@@ -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.dev57'
22
- __version_tuple__ = version_tuple = (0, 5, 3, 'dev57')
21
+ __version__ = version = '0.5.3.dev58'
22
+ __version_tuple__ = version_tuple = (0, 5, 3, 'dev58')
23
23
 
24
- __commit_id__ = commit_id = 'g9f23a62a0'
24
+ __commit_id__ = commit_id = 'gb7be593bb'
@@ -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
+ )
@@ -77,13 +77,11 @@ try:
77
77
  import jax.numpy as jnp
78
78
  import moreau
79
79
  from moreau.jax import Solver as _MoreauJaxSolver
80
- from moreau.jax import solver as _moreau_jax_solver_fn # functional factory
81
80
 
82
81
  _MOREAU_AVAILABLE = True
83
82
  except ImportError: # pragma: no cover — exercised by the install-error test
84
83
  moreau = None # type: ignore[assignment]
85
84
  _MoreauJaxSolver = None # type: ignore[assignment,misc]
86
- _moreau_jax_solver_fn = None # type: ignore[assignment]
87
85
  jax = None # type: ignore[assignment]
88
86
  jnp = None # type: ignore[assignment]
89
87
  _MOREAU_AVAILABLE = False
@@ -269,12 +267,14 @@ class MoreauPTRSolver(PTRSolver):
269
267
  iterations on successful solves, and natively handles user
270
268
  :class:`~openscvx.solvers.cones.SOCConstraint` convex constraints.
271
269
 
272
- The JAX-pure entry point :meth:`iteration_callback` builds Moreau's
273
- functional factory ``moreau.jax.solver(...)`` once at
274
- :meth:`initialize` and calls it as
275
- ``(P_data, A_data, q, b) -> (JaxSolution, JaxSolveInfo)`` so the backend
276
- composes with ``jax.jit`` and ``jax.vmap``. The functional API does not
277
- expose a warm-start hook, so every call is a cold start: both
270
+ The JAX-pure entry point :meth:`iteration_callback` calls the jitted
271
+ kernel on the :class:`moreau.jax.Solver` built in :meth:`initialize`,
272
+ as ``(P_data, A_data, q, b) -> (JaxSolution, JaxSolveInfo)``, so the
273
+ backend composes with ``jax.jit`` and ``jax.vmap``. Moreau 0.4 removed
274
+ the public ``moreau.jax.solver`` factory. ``Solver.solve`` returns only
275
+ the solution and stores status on ``solver.info``, which is not batched
276
+ under ``vmap``. The kernel has no warm-start argument, so every call is
277
+ a cold start: both
278
278
  :meth:`~openscvx.problem.Problem.solve` and
279
279
  :meth:`~openscvx.problem.Problem.solve_jax` drive
280
280
  ``iteration_callback`` for the SCP body, so neither thread Moreau's
@@ -607,22 +607,6 @@ class MoreauPTRSolver(PTRSolver):
607
607
  settings=moreau_settings,
608
608
  )
609
609
 
610
- # Functional-API solve function for ``iteration_callback``. Returns
611
- # ``(JaxSolution, JaxSolveInfo)`` as registered pytrees and does NOT
612
- # accept warm-start — see the 2026-05-17 Decision Log entry in
613
- # ``plans/solver-iteration-callbacks.md``. The OO ``self._moreau``
614
- # path stays in use for the NumPy ``solve()`` route (which warm-starts).
615
- self._moreau_solve_fn = _moreau_jax_solver_fn(
616
- n=L.n_z,
617
- m=self._n_con,
618
- P_row_offsets=jnp.array(P_indptr),
619
- P_col_indices=jnp.array(P_indices),
620
- A_row_offsets=jnp.array(A_indptr),
621
- A_col_indices=jnp.array(A_indices),
622
- cones=cones,
623
- settings=moreau_settings,
624
- )
625
-
626
610
  # ------------------------------------------------------------------
627
611
  # Per-iteration update hooks
628
612
  # ------------------------------------------------------------------
@@ -1386,16 +1370,19 @@ class MoreauPTRSolver(PTRSolver):
1386
1370
  def iteration_callback(self):
1387
1371
  """JAX-pure ``(state, SubproblemData) -> SubproblemSolution``.
1388
1372
 
1389
- Composes :meth:`_assemble_conic_jax` + Moreau's functional
1390
- ``solve_fn`` + :meth:`_build_solution_jax` into a single
1391
- ``@jax.jit``-decorated closure built once at :meth:`initialize`.
1392
-
1393
- Moreau's functional API (``moreau.jax.solver()``) is the JIT/vmap-friendly
1394
- path but does **not** accept a warm-start (see the 2026-05-17 Decision
1395
- Log entry in ``plans/solver-iteration-callbacks.md``). Every call is a
1396
- cold start; ``state`` is accepted only for cross-backend signature
1397
- uniformity. Both :meth:`~openscvx.problem.Problem.solve` and
1398
- :meth:`~openscvx.problem.Problem.solve_jax` route through this
1373
+ Composes :meth:`_assemble_conic_jax` + Moreau's jitted kernel
1374
+ + :meth:`_build_solution_jax` into a single ``@jax.jit``-decorated
1375
+ closure.
1376
+
1377
+ The kernel (``moreau.jax.Solver._solve_raw``) returns
1378
+ ``(JaxSolution, JaxSolveInfo)`` and does **not** accept a warm-start
1379
+ (see the 2026-05-17 Decision Log entry in
1380
+ ``plans/solver-iteration-callbacks.md``). Moreau 0.4 removed the
1381
+ public ``moreau.jax.solver`` factory; ``Solver.solve`` drops status
1382
+ onto ``solver.info``, which does not batch under ``vmap``. Every call
1383
+ is a cold start; ``state`` is accepted only for cross-backend
1384
+ signature uniformity. Both :meth:`~openscvx.problem.Problem.solve`
1385
+ and :meth:`~openscvx.problem.Problem.solve_jax` route through this
1399
1386
  callback for the SCP body, so the warm-start carry isn't threaded
1400
1387
  on either path — threading it would require an
1401
1388
  :class:`AlgorithmState.moreau_carry` field (future extension in
@@ -1403,7 +1390,7 @@ class MoreauPTRSolver(PTRSolver):
1403
1390
 
1404
1391
  The returned callable takes ``(state, data)``: ``state`` is the
1405
1392
  :class:`AlgorithmState` pytree, accepted for cross-backend signature
1406
- uniformity but unused (Moreau's functional API takes no warm-start);
1393
+ uniformity but unused (the kernel takes no warm-start);
1407
1394
  ``data`` is the :class:`SubproblemData` pytree carrying the
1408
1395
  per-iteration linearization arrays, penalty weights, and boundary
1409
1396
  conditions.
@@ -1414,11 +1401,14 @@ class MoreauPTRSolver(PTRSolver):
1414
1401
  "have been called first."
1415
1402
  )
1416
1403
 
1417
- solve_fn = self._moreau_solve_fn
1404
+ # Public ``Solver.solve`` returns only the solution. The jitted kernel
1405
+ # it calls still returns ``(JaxSolution, JaxSolveInfo)``, which is
1406
+ # what ``vmap`` can carry as a pytree.
1407
+ solve_fn = self._moreau._solve_raw
1418
1408
  csr_to_coo_perm = jnp.asarray(self._csr_to_coo_perm)
1419
1409
 
1420
1410
  def step(state, data: SubproblemData) -> SubproblemSolution:
1421
- del state # Moreau's functional API takes no warm-start.
1411
+ del state # The jitted kernel takes no warm-start.
1422
1412
  P_data, coo_vals, q, b = self._assemble_conic_jax(data)
1423
1413
  A_data = coo_vals[csr_to_coo_perm]
1424
1414
  sol, info = solve_fn(P_data, A_data, q, b)
@@ -30,9 +30,10 @@ Backends:
30
30
  JAX-differentiable SCP loop in follow-up work.
31
31
  :class:`openscvx.solvers.moreau_ptr_solver.MoreauPTRSolver`
32
32
  Sparse conic program assembled as CSR JAX arrays and solved with
33
- ``moreau.jax.Solver`` (NumPy path, warm-started between SCP
34
- iterations) or the functional ``moreau.jax.solver(...)`` factory
35
- (JAX-pure path, no warm-start). Uses SOC epigraphs for the L1 / pos
33
+ ``moreau.jax.Solver``. The NumPy path warm-starts between SCP
34
+ iterations. The JAX-pure path calls that solver's jitted kernel,
35
+ which returns ``(solution, info)`` and does not warm-start. Uses SOC
36
+ epigraphs for the L1 / pos
36
37
  PTR penalties instead of QPAX-style slack expansion.
37
38
  """
38
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.3.dev57
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.
@@ -20,6 +20,7 @@ pyproject.toml
20
20
  .github/workflows/tests-examples.yml
21
21
  .github/workflows/tests-lie.yml
22
22
  .github/workflows/tests-mjx.yml
23
+ .github/workflows/tests-moreau.yml
23
24
  .github/workflows/tests-qpax.yml
24
25
  .github/workflows/tests.yml
25
26
  docs/changelog.md
@@ -301,6 +302,7 @@ openscvx/lowered/parameters.py
301
302
  openscvx/lowered/problem.py
302
303
  openscvx/lowered/unified.py
303
304
  openscvx/plotting/__init__.py
305
+ openscvx/plotting/_deps.py
304
306
  openscvx/plotting/plotting.py
305
307
  openscvx/plotting/publication.py
306
308
  openscvx/plotting/scp_iteration.py