openscvx 0.5.2.dev16__tar.gz → 0.5.3.dev12__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 (381) hide show
  1. {openscvx-0.5.2.dev16/openscvx.egg-info → openscvx-0.5.3.dev12}/PKG-INFO +1 -1
  2. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UnderTheHood/lowering_architecture.md +10 -0
  3. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +1 -1
  4. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/3DoF_pdg_realtime.py +2 -2
  5. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/6DoF_pdg_realtime.py +2 -2
  6. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/cinema_vp_realtime.py +2 -2
  7. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/drone_racing_realtime.py +2 -2
  8. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/dubins_car_realtime.py +2 -2
  9. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/obstacle_avoidance_realtime.py +2 -2
  10. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/_version.py +3 -3
  11. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/__init__.py +33 -68
  12. openscvx-0.5.3.dev12/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +192 -0
  13. openscvx-0.5.3.dev12/openscvx/algorithms/autotuner/augmented_lagrangian.py +385 -0
  14. openscvx-0.5.3.dev12/openscvx/algorithms/autotuner/constant_proximal_weight.py +89 -0
  15. openscvx-0.5.3.dev12/openscvx/algorithms/autotuner/ramp_proximal_weight.py +101 -0
  16. openscvx-0.5.3.dev12/openscvx/algorithms/base.py +838 -0
  17. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/scvx/penalized_trust_region.py +320 -274
  18. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/problem.py +90 -41
  19. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/cvxpy_ptr_solver.py +229 -3
  20. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/moreau_ptr_solver.py +456 -3
  21. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/ptr_solver.py +211 -9
  22. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/qpax_ptr_solver.py +488 -1
  23. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12/openscvx.egg-info}/PKG-INFO +1 -1
  24. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx.egg-info/SOURCES.txt +11 -0
  25. openscvx-0.5.3.dev12/tests/algorithms/autotuner/test_update_weights_jit.py +194 -0
  26. openscvx-0.5.3.dev12/tests/algorithms/test_algorithm_state_pytree.py +110 -0
  27. openscvx-0.5.3.dev12/tests/solvers/_iteration_callback_helpers.py +189 -0
  28. openscvx-0.5.3.dev12/tests/solvers/test_cvxpy_callback_jit_spike.py +149 -0
  29. openscvx-0.5.3.dev12/tests/solvers/test_iteration_callback_cvxpy.py +218 -0
  30. openscvx-0.5.3.dev12/tests/solvers/test_iteration_callback_moreau.py +140 -0
  31. openscvx-0.5.3.dev12/tests/solvers/test_iteration_callback_qpax.py +125 -0
  32. openscvx-0.5.3.dev12/tests/solvers/test_iteration_callback_vmap.py +153 -0
  33. openscvx-0.5.3.dev12/tests/solvers/test_subproblem_pytree.py +135 -0
  34. openscvx-0.5.3.dev12/tests/symbolic/expr/__init__.py +0 -0
  35. openscvx-0.5.3.dev12/tests/symbolic/parser/__init__.py +0 -0
  36. openscvx-0.5.3.dev12/tests/test_autotuning.py +1079 -0
  37. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_brachistochrone.py +15 -6
  38. openscvx-0.5.2.dev16/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -190
  39. openscvx-0.5.2.dev16/openscvx/algorithms/autotuner/augmented_lagrangian.py +0 -401
  40. openscvx-0.5.2.dev16/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -83
  41. openscvx-0.5.2.dev16/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -100
  42. openscvx-0.5.2.dev16/openscvx/algorithms/base.py +0 -796
  43. openscvx-0.5.2.dev16/tests/test_autotuning.py +0 -1743
  44. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/assets/logo.svg +0 -0
  45. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/release-drafter.yml +0 -0
  46. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/_docs.yml +0 -0
  47. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/branch-name.yml +0 -0
  48. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/docs.yml +0 -0
  49. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/lint.yml +0 -0
  50. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/nightly.yml +0 -0
  51. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/release-drafter.yml +0 -0
  52. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/release.yml +0 -0
  53. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/tests-integration.yml +0 -0
  54. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.github/workflows/tests-unit.yml +0 -0
  55. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.gitignore +0 -0
  56. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/.gitmodules +0 -0
  57. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/CONTRIBUTING.md +0 -0
  58. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/LICENSE +0 -0
  59. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/README.md +0 -0
  60. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/constraint_reformulation.md +0 -0
  61. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/control_parameterization.md +0 -0
  62. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/discretization.md +0 -0
  63. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/ocp.md +0 -0
  64. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/scvx.md +0 -0
  65. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/Foundations/time_dilation.md +0 -0
  66. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  67. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/00_introduction.md +0 -0
  68. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  69. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  70. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  71. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/05_visualization.md +0 -0
  72. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/06_logic.md +0 -0
  73. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/07_lie.md +0 -0
  74. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/08_mpcc.md +0 -0
  75. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
  76. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/favicon.png +0 -0
  77. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/ct-scvx_dark.png +0 -0
  78. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/ct-scvx_light.png +0 -0
  79. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/ctcs_dark.png +0 -0
  80. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/ctcs_light.png +0 -0
  81. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/problem_class_dark.png +0 -0
  82. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/images/problem_class_light.png +0 -0
  83. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/logo.svg +0 -0
  84. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/openscvx_logo_square.png +0 -0
  85. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/viser-client/index.html +0 -0
  86. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/viser-recordings/drone_racing.viser +0 -0
  87. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
  88. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/citation.md +0 -0
  89. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/examples.md +0 -0
  90. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/index.md +0 -0
  91. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/javascripts/mathjax.js +0 -0
  92. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/docs/versions.json +0 -0
  93. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/_viser_embed_export.py +0 -0
  94. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/abstract/brachistochrone.py +0 -0
  95. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/abstract/hypersensitive.py +0 -0
  96. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/abstract/impulsive.py +0 -0
  97. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/abstract/stl_integer_variable.py +0 -0
  98. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/abstract/stl_or.py +0 -0
  99. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/7_dof_arm.py +0 -0
  100. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/_camera.py +0 -0
  101. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/_render.py +0 -0
  102. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/_sensor_view.py +0 -0
  103. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/dr_vp_polytope.py +0 -0
  104. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/franka_fr3v2_pick_place.py +0 -0
  105. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/logo.py +0 -0
  106. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/animations/obstacle_avoidance_vmap.py +0 -0
  107. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/3_dof_arm.py +0 -0
  108. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/7_dof_arm.py +0 -0
  109. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/7_dof_arm_collision.py +0 -0
  110. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/7_dof_arm_vp.py +0 -0
  111. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/franka_fr3v2_pick_place.py +0 -0
  112. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
  113. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car.py +0 -0
  114. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car_disjoint.py +0 -0
  115. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  116. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car_obstacle_stl.py +0 -0
  117. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car_stl_or.py +0 -0
  118. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/car/dubins_car_waypoint_stl.py +0 -0
  119. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/cinema_vp.py +0 -0
  120. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/dr_double_integrator.py +0 -0
  121. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/dr_vp.py +0 -0
  122. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/dr_vp_nodal.py +0 -0
  123. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/dr_vp_polytope.py +0 -0
  124. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/drone_racing.py +0 -0
  125. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/logo.py +0 -0
  126. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/logo_utils/acl_logo.svg +0 -0
  127. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  128. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/obstacle_avoidance.py +0 -0
  129. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  130. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/drone/obstacle_avoidance_vmap.py +0 -0
  131. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/cartpole_mjx.py +0 -0
  132. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/double_cartpole_mjx.py +0 -0
  133. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/skydio_x2_mjx.py +0 -0
  134. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
  135. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/triple_cartpole_game.py +0 -0
  136. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mjx/triple_cartpole_mjx.py +0 -0
  137. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mpc/double_integrator_discrete.py +0 -0
  138. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mpc/double_integrator_drone_racing.py +0 -0
  139. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  140. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  141. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  142. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/plotting.py +0 -0
  143. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/plotting_viser.py +0 -0
  144. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
  145. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
  146. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  147. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  148. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
  149. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  150. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/rocket/3DoF_pdg.py +0 -0
  151. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/rocket/6DoF_pdg.py +0 -0
  152. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/spacecraft/halo_orbit.py +0 -0
  153. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/spacecraft/hohmann_transfer.py +0 -0
  154. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/spacecraft/let_transfer.py +0 -0
  155. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/examples/spacecraft/proxops_cw.py +0 -0
  156. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/ctlos_cine.gif +0 -0
  157. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/ctlos_dr.gif +0 -0
  158. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/dtlos_cine.gif +0 -0
  159. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/dtlos_dr.gif +0 -0
  160. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/openscvx_logo.svg +0 -0
  161. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/openscvx_logo_square.png +0 -0
  162. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/oscvx_structure_full_dark.svg +0 -0
  163. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/figures/video_preview.png +0 -0
  164. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/__init__.py +0 -0
  165. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/assets/stylesheets/custom.css +0 -0
  166. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
  167. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/assets/stylesheets/home-hero.css +0 -0
  168. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/assets/stylesheets/home-viser.css +0 -0
  169. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/home.html +0 -0
  170. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/main.html +0 -0
  171. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/partials/home-diagram.html +0 -0
  172. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/partials/home-dropin-banner.html +0 -0
  173. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/partials/home-hero.html +0 -0
  174. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/partials/home-pipeline.html +0 -0
  175. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/material/overrides/partials/home-viser-strip.html +0 -0
  176. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/mkdocs.yml +0 -0
  177. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/__init__.py +0 -0
  178. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/__main__.py +0 -0
  179. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/autotuner/__init__.py +0 -0
  180. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/optimization_results.py +0 -0
  181. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/scvx/__init__.py +0 -0
  182. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/algorithms/weights.py +0 -0
  183. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/config.py +0 -0
  184. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/__init__.py +0 -0
  185. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/base.py +0 -0
  186. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/discretize_linearize.py +0 -0
  187. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/linearize_discretize.py +0 -0
  188. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
  189. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/sparse_utils/__init__.py +0 -0
  190. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
  191. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
  192. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/expert/__init__.py +0 -0
  193. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/expert/byof.py +0 -0
  194. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/expert/lowering.py +0 -0
  195. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/expert/validation.py +0 -0
  196. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/init/__init__.py +0 -0
  197. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/init/interpolation.py +0 -0
  198. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/init/inverse_kinematics.py +0 -0
  199. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrations/__init__.py +0 -0
  200. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrations/base.py +0 -0
  201. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrations/menagerie.py +0 -0
  202. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrations/mjx.py +0 -0
  203. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrators/__init__.py +0 -0
  204. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrators/diffrax.py +0 -0
  205. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/integrators/runge_kutta.py +0 -0
  206. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/loader.py +0 -0
  207. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/__init__.py +0 -0
  208. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/cvxpy_constraints.py +0 -0
  209. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/cvxpy_variables.py +0 -0
  210. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/dynamics.py +0 -0
  211. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/jax_constraints.py +0 -0
  212. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/parameters.py +0 -0
  213. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/problem.py +0 -0
  214. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/lowered/unified.py +0 -0
  215. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/__init__.py +0 -0
  216. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/plotting.py +0 -0
  217. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/scp_iteration.py +0 -0
  218. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/__init__.py +0 -0
  219. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/animated.py +0 -0
  220. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/orbits.py +0 -0
  221. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/plotly_integration.py +0 -0
  222. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/primitives.py +0 -0
  223. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/scp.py +0 -0
  224. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/plotting/viser/server.py +0 -0
  225. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/propagation/__init__.py +0 -0
  226. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/propagation/post_processing.py +0 -0
  227. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/propagation/propagation.py +0 -0
  228. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/__init__.py +0 -0
  229. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/solvers/base.py +0 -0
  230. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/__init__.py +0 -0
  231. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/augmentation.py +0 -0
  232. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/builder.py +0 -0
  233. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/constraint_set.py +0 -0
  234. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/__init__.py +0 -0
  235. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/arithmetic.py +0 -0
  236. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/array.py +0 -0
  237. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/constraint.py +0 -0
  238. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/control.py +0 -0
  239. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/expr.py +0 -0
  240. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  241. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  242. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/lie/se3.py +0 -0
  243. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/lie/so3.py +0 -0
  244. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/linalg.py +0 -0
  245. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/logic.py +0 -0
  246. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/math.py +0 -0
  247. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/parameter.py +0 -0
  248. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/spatial.py +0 -0
  249. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/state.py +0 -0
  250. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/stl.py +0 -0
  251. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/stljax.py +0 -0
  252. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/time.py +0 -0
  253. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/variable.py +0 -0
  254. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/expr/vmap.py +0 -0
  255. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/hashing.py +0 -0
  256. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lower.py +0 -0
  257. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/__init__.py +0 -0
  258. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  259. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  260. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  261. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  262. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  263. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  264. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  265. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  266. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  267. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  268. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  269. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  270. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  271. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  272. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  273. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  274. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  275. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  276. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  277. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  278. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  279. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  280. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  281. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  282. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  283. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  284. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  285. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  286. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  287. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/__init__.py +0 -0
  288. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/_registry.py +0 -0
  289. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/array.py +0 -0
  290. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/constraint.py +0 -0
  291. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/lie.py +0 -0
  292. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/linalg.py +0 -0
  293. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/logic.py +0 -0
  294. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/math.py +0 -0
  295. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/parser.py +0 -0
  296. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/spatial.py +0 -0
  297. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/stl.py +0 -0
  298. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/stljax.py +0 -0
  299. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/parser/tokenizer.py +0 -0
  300. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/preprocessing.py +0 -0
  301. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/problem.py +0 -0
  302. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/sparsity.py +0 -0
  303. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/symbolic/unified.py +0 -0
  304. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/__init__.py +0 -0
  305. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/cache.py +0 -0
  306. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/caching.py +0 -0
  307. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/printing.py +0 -0
  308. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/profiling.py +0 -0
  309. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx/utils/utils.py +0 -0
  310. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx.egg-info/dependency_links.txt +0 -0
  311. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx.egg-info/entry_points.txt +0 -0
  312. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx.egg-info/requires.txt +0 -0
  313. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/openscvx.egg-info/top_level.txt +0 -0
  314. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/pyproject.toml +0 -0
  315. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/scripts/gen_example_pages.py +0 -0
  316. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/scripts/gen_ref_pages.py +0 -0
  317. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
  318. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/setup.cfg +0 -0
  319. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/__init__.py +0 -0
  320. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/_marks.py +0 -0
  321. {openscvx-0.5.2.dev16/tests/expr → openscvx-0.5.3.dev12/tests/algorithms}/__init__.py +0 -0
  322. {openscvx-0.5.2.dev16/tests/integrations → openscvx-0.5.3.dev12/tests/algorithms/autotuner}/__init__.py +0 -0
  323. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/brachistochrone_analytical.py +0 -0
  324. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/conftest.py +0 -0
  325. {openscvx-0.5.2.dev16/tests/solvers → openscvx-0.5.3.dev12/tests/expr}/__init__.py +0 -0
  326. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/expr/test_gmsr.py +0 -0
  327. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/fixtures/brachistochrone.json +0 -0
  328. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/fixtures/brachistochrone.yaml +0 -0
  329. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/hohmann_analytical.py +0 -0
  330. {openscvx-0.5.2.dev16/tests/symbolic → openscvx-0.5.3.dev12/tests/integrations}/__init__.py +0 -0
  331. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/integrations/test_mjx.py +0 -0
  332. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/integrations/test_mjx_dynamics.py +0 -0
  333. {openscvx-0.5.2.dev16/tests/symbolic/expr → openscvx-0.5.3.dev12/tests/solvers}/__init__.py +0 -0
  334. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/solvers/test_moreau_ptr_solver.py +0 -0
  335. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/solvers/test_qpax_ptr_solver.py +0 -0
  336. {openscvx-0.5.2.dev16/tests/symbolic/parser → openscvx-0.5.3.dev12/tests/symbolic}/__init__.py +0 -0
  337. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_arithmetic.py +0 -0
  338. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_array.py +0 -0
  339. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_constraint.py +0 -0
  340. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_expr.py +0 -0
  341. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_lie.py +0 -0
  342. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_linalg.py +0 -0
  343. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_logic.py +0 -0
  344. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_math.py +0 -0
  345. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_node_reference.py +0 -0
  346. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_parameters.py +0 -0
  347. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_scaling.py +0 -0
  348. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_spatial.py +0 -0
  349. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_stl.py +0 -0
  350. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_variable.py +0 -0
  351. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/expr/test_vmap.py +0 -0
  352. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_array.py +0 -0
  353. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_constraint.py +0 -0
  354. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_lie.py +0 -0
  355. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_linalg.py +0 -0
  356. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_load.py +0 -0
  357. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_logic.py +0 -0
  358. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_math.py +0 -0
  359. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_parser.py +0 -0
  360. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_spatial.py +0 -0
  361. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_stl.py +0 -0
  362. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_tokenizer.py +0 -0
  363. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/parser/test_vmap.py +0 -0
  364. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_augmentation.py +0 -0
  365. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_hashing.py +0 -0
  366. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_lower_cvxpy.py +0 -0
  367. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_lower_jax.py +0 -0
  368. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_preprocessing.py +0 -0
  369. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_sparsity.py +0 -0
  370. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/symbolic/test_unified.py +0 -0
  371. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_cvxpygen_optional.py +0 -0
  372. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_discretization.py +0 -0
  373. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_examples.py +0 -0
  374. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_expert.py +0 -0
  375. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_impulsive.py +0 -0
  376. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_init.py +0 -0
  377. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_integrators.py +0 -0
  378. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_loader.py +0 -0
  379. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_optimization_results.py +0 -0
  380. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_plotting.py +0 -0
  381. {openscvx-0.5.2.dev16 → openscvx-0.5.3.dev12}/tests/test_propagation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.2.dev16
3
+ Version: 0.5.3.dev12
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
@@ -171,6 +171,16 @@ of the abstract `PTRSolver` base. Three backends ship today:
171
171
  | QPAX | `QPAXPTRSolver` | `solver={"backend": "qpax"}` | JAX-native QP via `qpax.solve_qp`. Flat `(Q, q, A, b, G, h)` assembly. Supports box / dynamics (continuous and impulsive) / CTCS / boundary-Fix; **rejects** user `.convex()` and cross-node at `initialize()` with a clear "use `CVXPyPTRSolver`" message. Enables a path toward an end-to-end JAX-differentiable SCP loop in follow-up work. |
172
172
  | Moreau | `MoreauPTRSolver` | `solver={"backend": "moreau"}` | JAX-native conic solver (`moreau.jax.Solver`). Sparse CSR assembly; SOC epigraphs for the L1 / pos PTR penalties (fewer variables and rows than QPAX). Warm-starts between SCP iterations. Same supported subset as QPAX (continuous and impulsive dynamics). Paves the way for user `.convex()` SOC support in a follow-up. |
173
173
 
174
+ Each backend exposes two per-iteration entry points: the historical NumPy
175
+ `update_*` + `solve()` stages used by today's Python-side SCP loop, and a
176
+ JAX-pure `iteration_callback()` built once at `initialize()`. The callback
177
+ returns a `(state, SubproblemData) -> SubproblemSolution` callable; all
178
+ three backends emit the same input/output pytree shape so the callable
179
+ composes with `jax.jit` and `jax.vmap` (CVXPy via `jax.pure_callback` with
180
+ `vmap_method="sequential"` — its batched solves are serial). The downstream
181
+ batchable-`Problem.solve()` work wraps this callback in `lax.while_loop` to
182
+ keep the entire SCP iteration on the JAX boundary.
183
+
174
184
  Picking a backend at construction time:
175
185
 
176
186
  ```python
@@ -373,7 +373,7 @@ while running:
373
373
  step_result = problem.step()
374
374
 
375
375
  # Extract control to apply
376
- control = problem.state.V_history[-1] # Access current solution
376
+ control = problem.history.V_history[-1] # Access current solution
377
377
  ```
378
378
 
379
379
  Parameter updates take effect immediately on the next `step()` call without any recompilation.
@@ -455,8 +455,8 @@ def create_realtime_server(optimization_problem) -> viser.ViserServer:
455
455
  results.update(get_print_queue_data(optimization_problem))
456
456
  metrics_text.content = format_metrics_markdown(results)
457
457
 
458
- if optimization_problem.state.V_history:
459
- V_multi_shoot = np.asarray(optimization_problem.state.V_history[-1])
458
+ if optimization_problem.history.V_history:
459
+ V_multi_shoot = np.asarray(optimization_problem.history.V_history[-1])
460
460
  update_trajectory(V_multi_shoot)
461
461
 
462
462
  time.sleep(0.05)
@@ -613,8 +613,8 @@ def create_realtime_server(optimization_problem) -> viser.ViserServer:
613
613
  results.update(get_print_queue_data(optimization_problem))
614
614
  metrics_text.content = format_metrics_markdown(results)
615
615
 
616
- if optimization_problem.state.V_history:
617
- V_multi_shoot = np.asarray(optimization_problem.state.V_history[-1])
616
+ if optimization_problem.history.V_history:
617
+ V_multi_shoot = np.asarray(optimization_problem.history.V_history[-1])
618
618
  update_trajectory(V_multi_shoot)
619
619
 
620
620
  time.sleep(0.05)
@@ -434,8 +434,8 @@ def create_realtime_server(
434
434
  update_metrics(results)
435
435
 
436
436
  # Update trajectory from V_history
437
- if optimization_problem.state.V_history:
438
- V_multi_shoot = np.array(optimization_problem.state.V_history[-1])
437
+ if optimization_problem.history.V_history:
438
+ V_multi_shoot = np.array(optimization_problem.history.V_history[-1])
439
439
  x_traj = np.array(optimization_problem.state.x)
440
440
  update_trajectory_and_drone(V_multi_shoot, x_traj)
441
441
 
@@ -355,8 +355,8 @@ def create_realtime_server(
355
355
  update_gates()
356
356
 
357
357
  # Update trajectory from V_history
358
- if optimization_problem.state.V_history:
359
- V_multi_shoot = np.array(optimization_problem.state.V_history[-1])
358
+ if optimization_problem.history.V_history:
359
+ V_multi_shoot = np.array(optimization_problem.history.V_history[-1])
360
360
  update_trajectory(V_multi_shoot)
361
361
 
362
362
  iteration += 1
@@ -228,8 +228,8 @@ def create_realtime_server(optimization_problem) -> viser.ViserServer:
228
228
 
229
229
  update_metrics(results)
230
230
 
231
- if optimization_problem.state.V_history:
232
- V_multi_shoot = np.asarray(optimization_problem.state.V_history[-1])
231
+ if optimization_problem.history.V_history:
232
+ V_multi_shoot = np.asarray(optimization_problem.history.V_history[-1])
233
233
  update_trajectory(V_multi_shoot)
234
234
 
235
235
  time.sleep(0.05)
@@ -334,8 +334,8 @@ def create_realtime_server(
334
334
  update_obstacles()
335
335
 
336
336
  # Update trajectory from V_history
337
- if optimization_problem.state.V_history:
338
- V_multi_shoot = np.array(optimization_problem.state.V_history[-1])
337
+ if optimization_problem.history.V_history:
338
+ V_multi_shoot = np.array(optimization_problem.history.V_history[-1])
339
339
  update_trajectory(V_multi_shoot)
340
340
 
341
341
  iteration += 1
@@ -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.2.dev16'
22
- __version_tuple__ = version_tuple = (0, 5, 2, 'dev16')
21
+ __version__ = version = '0.5.3.dev12'
22
+ __version_tuple__ = version_tuple = (0, 5, 3, 'dev12')
23
23
 
24
- __commit_id__ = commit_id = 'ged65ccb87'
24
+ __commit_id__ = commit_id = 'g9149c4b81'
@@ -5,73 +5,27 @@ for solving non-convex trajectory optimization problems through iterative convex
5
5
  approximation.
6
6
 
7
7
  All algorithms inherit from :class:`Algorithm`, enabling pluggable algorithm
8
- implementations and custom SCvx variants:
9
-
10
- ```python
11
- class Algorithm(ABC):
12
- @abstractmethod
13
- def initialize(self, solver, discretization_solver, jax_constraints,
14
- emitter, params, settings) -> None:
15
- '''Store compiled infrastructure and warm-start solvers.'''
16
- ...
17
-
18
- @abstractmethod
19
- def step(self, state, params, settings) -> bool:
20
- '''Execute one iteration using stored infrastructure.'''
21
- ...
22
- ```
23
-
24
- Immutable components (solver, discretization_solver, jax_constraints, etc.) are stored
25
- during ``initialize()``. Mutable configuration (params, settings) is passed per-step
26
- to support runtime parameter updates and tolerance tuning.
27
-
28
- :class:`AlgorithmState` holds mutable state during SCP iterations. Algorithms
29
- that require additional state can subclass it:
30
-
31
- ```python
32
- @dataclass
33
- class MyAlgorithmState(AlgorithmState):
34
- my_custom_field: float = 0.0
35
- ```
36
-
37
- Note:
38
- ``AlgorithmState`` currently combines iteration metrics (costs, weights),
39
- trajectory history, and discretization data. A future refactor may separate
40
- these concerns into distinct classes for clearer data flow:
41
-
42
- ```python
43
- @dataclass
44
- class AlgorithmState:
45
- # Mutable iteration state
46
- k: int
47
- J_tr: float
48
- J_vb: float
49
- J_vc: float
50
- lam_prox: float
51
- lam_cost: float
52
- lam_vc: ...
53
- lam_vb_nodal: np.ndarray # (N, n_nodal)
54
- lam_vb_cross: np.ndarray # (n_cross,)
55
-
56
- @dataclass
57
- class TrajectoryHistory:
58
- # Accumulated trajectory solutions
59
- X: List[np.ndarray]
60
- U: List[np.ndarray]
61
-
62
- @property
63
- def x(self): return self.X[-1]
64
-
65
- @property
66
- def u(self): return self.U[-1]
67
-
68
- @dataclass
69
- class DebugHistory:
70
- # Optional diagnostic data (discretization matrices, etc.)
71
- V_history: List[np.ndarray]
72
- VC_history: List[np.ndarray]
73
- TR_history: List[np.ndarray]
74
- ```
8
+ implementations and custom SCvx variants. Immutable components (solver,
9
+ discretization_solver, jax_constraints, etc.) are stored during ``initialize()``;
10
+ mutable configuration (params, settings) is passed per-step.
11
+
12
+ The iterate carry is split into two objects:
13
+
14
+ * :class:`AlgorithmState` — a frozen, JAX-registered pytree holding only the
15
+ current iterate (``x``, ``u``, weights, propagated states, diagnostic scalars).
16
+ Every leaf is a ``jnp.ndarray`` so the state composes with ``jax.vmap`` /
17
+ ``jax.jit`` / ``jax.grad``.
18
+
19
+ * :class:`AlgorithmHistory` a CPU-side mutable record of every iteration's
20
+ trajectories, discretizations, weights, and diagnostics. Grown by the SCP loop
21
+ via ``record_iteration``; never crosses the JAX boundary.
22
+
23
+ Autotuners follow the same contract: :class:`AutotuningBase` declares
24
+ ``update_weights`` as a pure functional update on the :class:`AlgorithmState`
25
+ pytree (no mutation, no string returns, no list appends, no Python-level
26
+ branching on iterate values). The next-iterate adaptive state is reported via
27
+ the :class:`AdaptiveStateCode` IntEnum and converted to a human-readable string
28
+ on the printing path with :func:`adaptive_state_code_to_str`.
75
29
 
76
30
  Current Implementations:
77
31
 
@@ -92,7 +46,15 @@ from .autotuner import (
92
46
  RampProximalWeight,
93
47
  RampProximalWeightSpec,
94
48
  )
95
- from .base import Algorithm, AlgorithmState, AutotuningBase, DiscretizationResult
49
+ from .base import (
50
+ AdaptiveStateCode,
51
+ Algorithm,
52
+ AlgorithmHistory,
53
+ AlgorithmState,
54
+ AutotuningBase,
55
+ DiscretizationResult,
56
+ adaptive_state_code_to_str,
57
+ )
96
58
  from .optimization_results import OptimizationResults
97
59
  from .scvx import PenalizedTrustRegion
98
60
  from .weights import Weights
@@ -172,7 +134,10 @@ class PenalizedTrustRegionConfig(BaseModel):
172
134
  __all__ = [
173
135
  # Base class
174
136
  "Algorithm",
137
+ "AlgorithmHistory",
175
138
  "AlgorithmState",
139
+ "AdaptiveStateCode",
140
+ "adaptive_state_code_to_str",
176
141
  "DiscretizationResult",
177
142
  "Weights",
178
143
  # Core results
@@ -0,0 +1,192 @@
1
+ """Adaptive proximal-weight autotuner.
2
+
3
+ Same acceptance-ratio decision logic as :class:`AugmentedLagrangian` for
4
+ ``lam_prox``, but ``lam_vc`` and ``lam_vb_*`` are held constant at their
5
+ current values.
6
+ """
7
+
8
+ from typing import TYPE_CHECKING, Literal
9
+
10
+ import jax
11
+ import jax.numpy as jnp
12
+ from pydantic import BaseModel, ConfigDict
13
+
14
+ from openscvx.config import Config
15
+
16
+ from ..base import AdaptiveStateCode, AutotuningBase
17
+ from .augmented_lagrangian import AugmentedLagrangian
18
+
19
+ if TYPE_CHECKING:
20
+ from openscvx.lowered import LoweredJaxConstraints
21
+
22
+ from ..base import AlgorithmState, CandidateIterate
23
+
24
+
25
+ class AdaptiveProximalWeight(AutotuningBase):
26
+ """PTR-style proximal adaptation with fixed virtual-penalty weights.
27
+
28
+ Same four-bucket acceptance-ratio logic as
29
+ :class:`AugmentedLagrangian` for ``lam_prox``, but the virtual-control
30
+ and virtual-buffer weights are carried unchanged.
31
+
32
+ ``update_weights`` is a pure functional update on the
33
+ :class:`AlgorithmState` pytree; see the base-class contract.
34
+ """
35
+
36
+ COLUMNS = AugmentedLagrangian.COLUMNS
37
+
38
+ def __init__(
39
+ self,
40
+ gamma_1: float = 2.0,
41
+ gamma_2: float = 0.5,
42
+ eta_0: float = 1e-2,
43
+ eta_1: float = 1e-1,
44
+ eta_2: float = 0.8,
45
+ lam_prox_min: float = 1e-3,
46
+ lam_prox_max: float = 1e4,
47
+ lam_cost_drop: int = -1,
48
+ lam_cost_relax: float = 1.0,
49
+ ):
50
+ self.gamma_1 = gamma_1
51
+ self.gamma_2 = gamma_2
52
+ self.eta_0 = eta_0
53
+ self.eta_1 = eta_1
54
+ self.eta_2 = eta_2
55
+ self.lam_prox_min = lam_prox_min
56
+ self.lam_prox_max = lam_prox_max
57
+ self.lam_cost_drop = lam_cost_drop
58
+ self.lam_cost_relax = lam_cost_relax
59
+
60
+ def update_weights(
61
+ self,
62
+ state: "AlgorithmState",
63
+ candidate: "CandidateIterate",
64
+ nodal_constraints: "LoweredJaxConstraints",
65
+ settings: Config,
66
+ params: dict,
67
+ ) -> "AlgorithmState":
68
+ """Return the next-iterate state.
69
+
70
+ Pure functional update — see class docstring.
71
+ """
72
+ candidate_x_prop = candidate.x_prop_plus[1:]
73
+ nonlin_cost, nonlin_pen, nodal_pen = self.calculate_nonlinear_penalty(
74
+ candidate_x_prop,
75
+ candidate.x,
76
+ candidate.u,
77
+ state.lam_vc,
78
+ state.lam_vb_nodal,
79
+ state.lam_vb_cross,
80
+ state.lam_cost,
81
+ nodal_constraints,
82
+ params,
83
+ settings,
84
+ )
85
+ J_nonlin = nonlin_cost + nonlin_pen + nodal_pen
86
+
87
+ lam_cost_next = jnp.where(
88
+ state.k > self.lam_cost_drop,
89
+ state.lam_cost * self.lam_cost_relax,
90
+ state.lam_cost_init,
91
+ )
92
+
93
+ def first_iter(state):
94
+ return state.replace(
95
+ x=candidate.x,
96
+ u=candidate.u,
97
+ x_prop=candidate.x_prop,
98
+ x_prop_plus=candidate.x_prop_plus,
99
+ lam_cost=lam_cost_next,
100
+ J_nonlin=J_nonlin,
101
+ adaptive_state_code=jnp.asarray(int(AdaptiveStateCode.INITIAL), dtype=jnp.int32),
102
+ )
103
+
104
+ def later_iter(state):
105
+ prev_x_prop = state.x_prop_plus[1:]
106
+ prev_cost, prev_pen, prev_nodal_pen = self.calculate_nonlinear_penalty(
107
+ prev_x_prop,
108
+ state.x,
109
+ state.u,
110
+ state.lam_vc,
111
+ state.lam_vb_nodal,
112
+ state.lam_vb_cross,
113
+ state.lam_cost,
114
+ nodal_constraints,
115
+ params,
116
+ settings,
117
+ )
118
+ prev_J_nonlin = prev_cost + prev_pen + prev_nodal_pen
119
+
120
+ actual = prev_J_nonlin - J_nonlin
121
+ predicted = prev_J_nonlin - candidate.J_lin
122
+ safe_pred = jnp.where(predicted == 0.0, 1.0, predicted)
123
+ rho = jnp.where(predicted == 0.0, -jnp.inf, actual / safe_pred)
124
+
125
+ is_reject = rho < self.eta_0
126
+ is_accept_higher = (rho >= self.eta_0) & (rho < self.eta_1)
127
+ is_accept_constant = (rho >= self.eta_1) & (rho < self.eta_2)
128
+ accepted = ~is_reject
129
+
130
+ lp_higher = jnp.minimum(self.lam_prox_max, self.gamma_1 * state.lam_prox)
131
+ lp_lower = jnp.maximum(self.lam_prox_min, self.gamma_2 * state.lam_prox)
132
+ new_lam_prox = jnp.where(
133
+ is_reject | is_accept_higher,
134
+ lp_higher,
135
+ jnp.where(is_accept_constant, state.lam_prox, lp_lower),
136
+ )
137
+
138
+ code = jnp.where(
139
+ is_reject,
140
+ jnp.int32(AdaptiveStateCode.REJECT),
141
+ jnp.where(
142
+ is_accept_higher,
143
+ jnp.int32(AdaptiveStateCode.ACCEPT_HIGHER),
144
+ jnp.where(
145
+ is_accept_constant,
146
+ jnp.int32(AdaptiveStateCode.ACCEPT_CONSTANT),
147
+ jnp.int32(AdaptiveStateCode.ACCEPT_LOWER),
148
+ ),
149
+ ),
150
+ )
151
+
152
+ return state.replace(
153
+ x=jnp.where(accepted, candidate.x, state.x),
154
+ u=jnp.where(accepted, candidate.u, state.u),
155
+ x_prop=jnp.where(accepted, candidate.x_prop, state.x_prop),
156
+ x_prop_plus=jnp.where(accepted, candidate.x_prop_plus, state.x_prop_plus),
157
+ lam_prox=new_lam_prox,
158
+ # Virtual-control / virtual-buffer weights are held constant.
159
+ lam_cost=lam_cost_next,
160
+ J_nonlin=jnp.where(accepted, J_nonlin, state.J_nonlin),
161
+ predicted_reduction=predicted,
162
+ actual_reduction=actual,
163
+ acceptance_ratio=rho,
164
+ adaptive_state_code=code,
165
+ )
166
+
167
+ return jax.lax.cond(state.k == 1, first_iter, later_iter, state)
168
+
169
+
170
+ # =============================================================================
171
+ # Pydantic spec for dict / YAML validation
172
+ # =============================================================================
173
+
174
+
175
+ class AdaptiveProximalWeightSpec(BaseModel):
176
+ """Validates AdaptiveProximalWeight configuration from dict/YAML input."""
177
+
178
+ type: Literal["AdaptiveProximalWeight"] = "AdaptiveProximalWeight"
179
+ gamma_1: float = 2.0
180
+ gamma_2: float = 0.5
181
+ eta_0: float = 1e-2
182
+ eta_1: float = 1e-1
183
+ eta_2: float = 0.8
184
+ lam_prox_min: float = 1e-3
185
+ lam_prox_max: float = 1e4
186
+ lam_cost_drop: int = -1
187
+ lam_cost_relax: float = 1.0
188
+
189
+ model_config = ConfigDict(extra="forbid")
190
+
191
+ def build(self) -> AdaptiveProximalWeight:
192
+ return AdaptiveProximalWeight(**self.model_dump(exclude={"type"}, exclude_unset=True))