openscvx 0.5.2.dev14__tar.gz → 0.5.2.dev15__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 (365) hide show
  1. {openscvx-0.5.2.dev14/openscvx.egg-info → openscvx-0.5.2.dev15}/PKG-INFO +1 -1
  2. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/00_introduction.md +1 -0
  3. openscvx-0.5.2.dev15/docs/UsersGuide/09_mjx_dynamics.md +265 -0
  4. openscvx-0.5.2.dev15/docs/examples.md +36 -0
  5. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/partials/home-pipeline.html +1 -1
  6. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/mkdocs.yml +1 -0
  7. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/_version.py +3 -3
  8. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15/openscvx.egg-info}/PKG-INFO +1 -1
  9. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx.egg-info/SOURCES.txt +1 -0
  10. openscvx-0.5.2.dev14/docs/examples.md +0 -63
  11. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/assets/logo.svg +0 -0
  12. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/release-drafter.yml +0 -0
  13. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/_docs.yml +0 -0
  14. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/branch-name.yml +0 -0
  15. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/docs.yml +0 -0
  16. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/lint.yml +0 -0
  17. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/nightly.yml +0 -0
  18. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/release-drafter.yml +0 -0
  19. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/release.yml +0 -0
  20. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/tests-integration.yml +0 -0
  21. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.github/workflows/tests-unit.yml +0 -0
  22. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.gitignore +0 -0
  23. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/.gitmodules +0 -0
  24. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/CONTRIBUTING.md +0 -0
  25. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/LICENSE +0 -0
  26. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/README.md +0 -0
  27. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/constraint_reformulation.md +0 -0
  28. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/control_parameterization.md +0 -0
  29. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/discretization.md +0 -0
  30. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/ocp.md +0 -0
  31. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/scvx.md +0 -0
  32. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/Foundations/time_dilation.md +0 -0
  33. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UnderTheHood/lowering_architecture.md +0 -0
  34. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  35. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  36. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  37. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  38. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  39. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/05_visualization.md +0 -0
  40. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/06_logic.md +0 -0
  41. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/07_lie.md +0 -0
  42. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/UsersGuide/08_mpcc.md +0 -0
  43. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/favicon.png +0 -0
  44. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/ct-scvx_dark.png +0 -0
  45. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/ct-scvx_light.png +0 -0
  46. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/ctcs_dark.png +0 -0
  47. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/ctcs_light.png +0 -0
  48. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/problem_class_dark.png +0 -0
  49. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/images/problem_class_light.png +0 -0
  50. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/logo.svg +0 -0
  51. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/openscvx_logo_square.png +0 -0
  52. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/viser-client/index.html +0 -0
  53. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/viser-recordings/drone_racing.viser +0 -0
  54. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
  55. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/citation.md +0 -0
  56. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/index.md +0 -0
  57. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/javascripts/mathjax.js +0 -0
  58. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/docs/versions.json +0 -0
  59. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/_viser_embed_export.py +0 -0
  60. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/abstract/brachistochrone.py +0 -0
  61. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/abstract/hypersensitive.py +0 -0
  62. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/abstract/impulsive.py +0 -0
  63. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/abstract/stl_integer_variable.py +0 -0
  64. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/abstract/stl_or.py +0 -0
  65. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/7_dof_arm.py +0 -0
  66. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/_camera.py +0 -0
  67. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/_render.py +0 -0
  68. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/_sensor_view.py +0 -0
  69. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/dr_vp_polytope.py +0 -0
  70. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/franka_fr3v2_pick_place.py +0 -0
  71. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/logo.py +0 -0
  72. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/animations/obstacle_avoidance_vmap.py +0 -0
  73. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/3_dof_arm.py +0 -0
  74. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/7_dof_arm.py +0 -0
  75. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/7_dof_arm_collision.py +0 -0
  76. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/7_dof_arm_vp.py +0 -0
  77. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/franka_fr3v2_pick_place.py +0 -0
  78. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
  79. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car.py +0 -0
  80. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car_disjoint.py +0 -0
  81. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  82. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car_obstacle_stl.py +0 -0
  83. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car_stl_or.py +0 -0
  84. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/car/dubins_car_waypoint_stl.py +0 -0
  85. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/cinema_vp.py +0 -0
  86. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/dr_double_integrator.py +0 -0
  87. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/dr_vp.py +0 -0
  88. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/dr_vp_nodal.py +0 -0
  89. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/dr_vp_polytope.py +0 -0
  90. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/drone_racing.py +0 -0
  91. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/logo.py +0 -0
  92. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/logo_utils/acl_logo.svg +0 -0
  93. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  94. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/obstacle_avoidance.py +0 -0
  95. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  96. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/drone/obstacle_avoidance_vmap.py +0 -0
  97. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/cartpole_mjx.py +0 -0
  98. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/double_cartpole_mjx.py +0 -0
  99. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/skydio_x2_mjx.py +0 -0
  100. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
  101. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/triple_cartpole_game.py +0 -0
  102. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mjx/triple_cartpole_mjx.py +0 -0
  103. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mpc/double_integrator_discrete.py +0 -0
  104. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mpc/double_integrator_drone_racing.py +0 -0
  105. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  106. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  107. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  108. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/plotting.py +0 -0
  109. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/plotting_viser.py +0 -0
  110. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/3DoF_pdg_realtime.py +0 -0
  111. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/6DoF_pdg_realtime.py +0 -0
  112. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
  113. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
  114. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  115. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  116. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
  117. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  118. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/cinema_vp_realtime.py +0 -0
  119. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/drone_racing_realtime.py +0 -0
  120. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/dubins_car_realtime.py +0 -0
  121. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  122. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/rocket/3DoF_pdg.py +0 -0
  123. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/rocket/6DoF_pdg.py +0 -0
  124. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/spacecraft/halo_orbit.py +0 -0
  125. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/spacecraft/hohmann_transfer.py +0 -0
  126. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/spacecraft/let_transfer.py +0 -0
  127. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/examples/spacecraft/proxops_cw.py +0 -0
  128. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/ctlos_cine.gif +0 -0
  129. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/ctlos_dr.gif +0 -0
  130. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/dtlos_cine.gif +0 -0
  131. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/dtlos_dr.gif +0 -0
  132. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/openscvx_logo.svg +0 -0
  133. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/openscvx_logo_square.png +0 -0
  134. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/oscvx_structure_full_dark.svg +0 -0
  135. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/figures/video_preview.png +0 -0
  136. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/__init__.py +0 -0
  137. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/assets/stylesheets/custom.css +0 -0
  138. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
  139. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/assets/stylesheets/home-hero.css +0 -0
  140. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/assets/stylesheets/home-viser.css +0 -0
  141. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/home.html +0 -0
  142. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/main.html +0 -0
  143. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/partials/home-diagram.html +0 -0
  144. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/partials/home-dropin-banner.html +0 -0
  145. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/partials/home-hero.html +0 -0
  146. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/material/overrides/partials/home-viser-strip.html +0 -0
  147. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/__init__.py +0 -0
  148. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/__main__.py +0 -0
  149. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/__init__.py +0 -0
  150. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/autotuner/__init__.py +0 -0
  151. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
  152. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/autotuner/augmented_lagrangian.py +0 -0
  153. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
  154. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
  155. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/base.py +0 -0
  156. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/optimization_results.py +0 -0
  157. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/scvx/__init__.py +0 -0
  158. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
  159. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/algorithms/weights.py +0 -0
  160. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/config.py +0 -0
  161. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/__init__.py +0 -0
  162. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/base.py +0 -0
  163. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/discretize_linearize.py +0 -0
  164. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/linearize_discretize.py +0 -0
  165. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
  166. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/sparse_utils/__init__.py +0 -0
  167. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
  168. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
  169. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/expert/__init__.py +0 -0
  170. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/expert/byof.py +0 -0
  171. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/expert/lowering.py +0 -0
  172. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/expert/validation.py +0 -0
  173. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/init/__init__.py +0 -0
  174. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/init/interpolation.py +0 -0
  175. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/init/inverse_kinematics.py +0 -0
  176. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrations/__init__.py +0 -0
  177. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrations/base.py +0 -0
  178. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrations/menagerie.py +0 -0
  179. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrations/mjx.py +0 -0
  180. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrators/__init__.py +0 -0
  181. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrators/diffrax.py +0 -0
  182. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/integrators/runge_kutta.py +0 -0
  183. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/loader.py +0 -0
  184. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/__init__.py +0 -0
  185. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/cvxpy_constraints.py +0 -0
  186. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/cvxpy_variables.py +0 -0
  187. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/dynamics.py +0 -0
  188. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/jax_constraints.py +0 -0
  189. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/parameters.py +0 -0
  190. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/problem.py +0 -0
  191. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/lowered/unified.py +0 -0
  192. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/__init__.py +0 -0
  193. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/plotting.py +0 -0
  194. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/scp_iteration.py +0 -0
  195. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/__init__.py +0 -0
  196. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/animated.py +0 -0
  197. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/orbits.py +0 -0
  198. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/plotly_integration.py +0 -0
  199. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/primitives.py +0 -0
  200. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/scp.py +0 -0
  201. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/plotting/viser/server.py +0 -0
  202. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/problem.py +0 -0
  203. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/propagation/__init__.py +0 -0
  204. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/propagation/post_processing.py +0 -0
  205. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/propagation/propagation.py +0 -0
  206. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/__init__.py +0 -0
  207. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/base.py +0 -0
  208. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
  209. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/moreau_ptr_solver.py +0 -0
  210. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/ptr_solver.py +0 -0
  211. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/solvers/qpax_ptr_solver.py +0 -0
  212. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/__init__.py +0 -0
  213. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/augmentation.py +0 -0
  214. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/builder.py +0 -0
  215. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/constraint_set.py +0 -0
  216. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/__init__.py +0 -0
  217. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/arithmetic.py +0 -0
  218. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/array.py +0 -0
  219. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/constraint.py +0 -0
  220. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/control.py +0 -0
  221. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/expr.py +0 -0
  222. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  223. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  224. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/lie/se3.py +0 -0
  225. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/lie/so3.py +0 -0
  226. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/linalg.py +0 -0
  227. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/logic.py +0 -0
  228. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/math.py +0 -0
  229. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/parameter.py +0 -0
  230. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/spatial.py +0 -0
  231. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/state.py +0 -0
  232. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/stl.py +0 -0
  233. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/stljax.py +0 -0
  234. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/time.py +0 -0
  235. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/variable.py +0 -0
  236. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/expr/vmap.py +0 -0
  237. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/hashing.py +0 -0
  238. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lower.py +0 -0
  239. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/__init__.py +0 -0
  240. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  241. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  242. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  243. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  244. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  245. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  246. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  247. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  248. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  249. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  250. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  251. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  252. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  253. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  254. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  255. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  256. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  257. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  258. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  259. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  260. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  261. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  262. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  263. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  264. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  265. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  266. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  267. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  268. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  269. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/__init__.py +0 -0
  270. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/_registry.py +0 -0
  271. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/array.py +0 -0
  272. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/constraint.py +0 -0
  273. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/lie.py +0 -0
  274. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/linalg.py +0 -0
  275. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/logic.py +0 -0
  276. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/math.py +0 -0
  277. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/parser.py +0 -0
  278. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/spatial.py +0 -0
  279. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/stl.py +0 -0
  280. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/stljax.py +0 -0
  281. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/parser/tokenizer.py +0 -0
  282. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/preprocessing.py +0 -0
  283. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/problem.py +0 -0
  284. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/sparsity.py +0 -0
  285. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/symbolic/unified.py +0 -0
  286. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/__init__.py +0 -0
  287. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/cache.py +0 -0
  288. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/caching.py +0 -0
  289. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/printing.py +0 -0
  290. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/profiling.py +0 -0
  291. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx/utils/utils.py +0 -0
  292. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx.egg-info/dependency_links.txt +0 -0
  293. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx.egg-info/entry_points.txt +0 -0
  294. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx.egg-info/requires.txt +0 -0
  295. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/openscvx.egg-info/top_level.txt +0 -0
  296. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/pyproject.toml +0 -0
  297. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/scripts/gen_example_pages.py +0 -0
  298. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/scripts/gen_ref_pages.py +0 -0
  299. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
  300. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/setup.cfg +0 -0
  301. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/__init__.py +0 -0
  302. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/_marks.py +0 -0
  303. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/brachistochrone_analytical.py +0 -0
  304. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/conftest.py +0 -0
  305. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/expr/__init__.py +0 -0
  306. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/expr/test_gmsr.py +0 -0
  307. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/fixtures/brachistochrone.json +0 -0
  308. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/fixtures/brachistochrone.yaml +0 -0
  309. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/hohmann_analytical.py +0 -0
  310. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/integrations/__init__.py +0 -0
  311. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/integrations/test_mjx.py +0 -0
  312. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/integrations/test_mjx_dynamics.py +0 -0
  313. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/solvers/__init__.py +0 -0
  314. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/solvers/test_moreau_ptr_solver.py +0 -0
  315. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/solvers/test_qpax_ptr_solver.py +0 -0
  316. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/__init__.py +0 -0
  317. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/__init__.py +0 -0
  318. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_arithmetic.py +0 -0
  319. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_array.py +0 -0
  320. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_constraint.py +0 -0
  321. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_expr.py +0 -0
  322. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_lie.py +0 -0
  323. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_linalg.py +0 -0
  324. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_logic.py +0 -0
  325. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_math.py +0 -0
  326. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_node_reference.py +0 -0
  327. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_parameters.py +0 -0
  328. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_scaling.py +0 -0
  329. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_spatial.py +0 -0
  330. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_stl.py +0 -0
  331. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_variable.py +0 -0
  332. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/expr/test_vmap.py +0 -0
  333. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/__init__.py +0 -0
  334. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_array.py +0 -0
  335. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_constraint.py +0 -0
  336. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_lie.py +0 -0
  337. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_linalg.py +0 -0
  338. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_load.py +0 -0
  339. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_logic.py +0 -0
  340. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_math.py +0 -0
  341. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_parser.py +0 -0
  342. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_spatial.py +0 -0
  343. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_stl.py +0 -0
  344. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_tokenizer.py +0 -0
  345. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/parser/test_vmap.py +0 -0
  346. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_augmentation.py +0 -0
  347. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_hashing.py +0 -0
  348. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_lower_cvxpy.py +0 -0
  349. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_lower_jax.py +0 -0
  350. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_preprocessing.py +0 -0
  351. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_sparsity.py +0 -0
  352. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/symbolic/test_unified.py +0 -0
  353. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_autotuning.py +0 -0
  354. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_brachistochrone.py +0 -0
  355. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_cvxpygen_optional.py +0 -0
  356. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_discretization.py +0 -0
  357. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_examples.py +0 -0
  358. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_expert.py +0 -0
  359. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_impulsive.py +0 -0
  360. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_init.py +0 -0
  361. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_integrators.py +0 -0
  362. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_loader.py +0 -0
  363. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_optimization_results.py +0 -0
  364. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/tests/test_plotting.py +0 -0
  365. {openscvx-0.5.2.dev14 → openscvx-0.5.2.dev15}/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.dev14
3
+ Version: 0.5.2.dev15
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
@@ -16,6 +16,7 @@ The tutorials are designed to be read in order. Each builds on concepts from the
16
16
  | [06 Dubin's Car](06_logic.md) | Conditional path planning | Conditional statements, signal temporal logic (STL) |
17
17
  | [07 Multi-Link Arms](07_lie.md) | Articulated robot control | Lie algebra, propagated states |
18
18
  | [08 Model Predictive Control](08_mpcc.md) | Closed-loop drone racing | Receding horizon control, warm starting, cubic spline interpolation |
19
+ | [09 MuJoCo MJX Dynamics](09_mjx_dynamics.md) | Cartpole swing-up, quadrotor racing | `MjxDynamics`, MuJoCo MJCF, free-joint quaternions, `examples/mjx/` |
19
20
 
20
21
  ## Quick Start
21
22
 
@@ -0,0 +1,265 @@
1
+ # 09 MuJoCo MJX Dynamics
2
+
3
+ In earlier tutorials we wrote dynamics by hand as symbolic expressions. Many real systems already have a MuJoCo model — articulated robots, cartpoles, quadrotors — and re-deriving those equations is tedious and error-prone.
4
+
5
+ This tutorial shows how to plug a **MuJoCo MJX** model directly into OpenSCvx via `ox.MjxDynamics`. We use the cartpole swing-up as the main walkthrough (the same problem as `examples/mjx/cartpole_mjx.py`), then point to richer examples: multi-link cartpoles, 3D triple pendulums, and Skydio X2 gate racing.
6
+
7
+ This tutorial covers:
8
+
9
+ - Installing the optional MJX extra (`openscvx[mjx]`)
10
+ - Loading a MuJoCo model and uploading it to MJX
11
+ - The `MjxDynamics` adapter: states, controls, and `Problem` wiring
12
+ - Contact-free models and why contacts are disabled
13
+ - Free-joint models (`nq > nv`) and automatic quaternion kinematics
14
+ - The full set of MJX examples in `examples/mjx/`
15
+
16
+ !!! tip "Prerequisites"
17
+ You should be comfortable with the core workflow from [Hello Brachistochrone](01_hello_world_brachistochrone.md): `State`, `Control`, `Time`, CTCS constraints, `initialize` / `solve` / `post_process`, and accessing results by variable name.
18
+
19
+ ## Installation
20
+
21
+ MJX is an optional dependency. Install OpenSCvx with the MJX extra:
22
+
23
+ ```sh
24
+ pip install openscvx[mjx]
25
+ ```
26
+
27
+ This pulls in `mujoco` with JAX-backed MJX support. All examples under `examples/mjx/` guard-import MuJoCo and print a clear message if the extra is missing.
28
+
29
+ ## Why MJX?
30
+
31
+ [MuJoCo MJX](https://mujoco.readthedocs.io/en/stable/mjx.html) runs the same physics as classic MuJoCo, but on JAX arrays so the forward dynamics are compatible with OpenSCvx's JAX compilation and autodiff pipeline.
32
+
33
+ The integration layer (`openscvx.integrations`) wraps an MJX model as a **dynamics adapter** you pass to `Problem` in the same slot as a symbolic dynamics dict. You still set boundary conditions, costs, and constraints the usual way — only the equations of motion come from MuJoCo.
34
+
35
+ ## The Cartpole Swing-Up Problem
36
+
37
+ We optimize a horizontal force on a cart with a passive hinged pole. The goal is to swing the pole from hanging down ($\theta = \pi$) to upright ($\theta = 0$) in minimum time.
38
+
39
+ In MuJoCo coordinates:
40
+
41
+ - **Position** $\mathbf{q} = [x, \theta]^\top$ — cart slide and hinge angle
42
+ - **Velocity** $\dot{\mathbf{q}} = [\dot{x}, \dot{\theta}]^\top$
43
+ - **Control** $u$ — normalized motor command on the slider joint
44
+
45
+ The continuous dynamics $\ddot{\mathbf{q}} = f(\mathbf{q}, \dot{\mathbf{q}}, u)$ are computed by MJX's `forward` pass; OpenSCvx does not require you to write them symbolically.
46
+
47
+ ## Loading a MuJoCo Model
48
+
49
+ Examples typically define MJCF inline (self-contained) or load from a file:
50
+
51
+ ```python
52
+ import mujoco
53
+ import mujoco.mjx as mjx
54
+
55
+ CARTPOLE_XML = """
56
+ <mujoco model="cartpole">
57
+ <option gravity="0 0 -9.81" timestep="0.01" integrator="Euler"/>
58
+ ...
59
+ </mujoco>
60
+ """
61
+
62
+ mj_model = mujoco.MjModel.from_xml_string(CARTPOLE_XML)
63
+ # For assets on disk: mujoco.MjModel.from_xml_path("cartpole.xml")
64
+ ```
65
+
66
+ ### Disable contacts for differentiability
67
+
68
+ MJX's contact solver uses `lax.while_loop`, which is **not** reverse-mode differentiable. For manipulation and locomotion models that do not need contact forces in the optimizer, disable contacts before uploading:
69
+
70
+ ```python
71
+ mj_model.opt.disableflags |= mujoco.mjtDisableBit.mjDSBL_CONTACT
72
+ mjx_model = mjx.put_model(mj_model)
73
+ ```
74
+
75
+ Cartpoles, serial arms without collision, and quadrotors in free flight all fit this pattern. If you need contact-rich dynamics, treat that as an advanced case and consult the lower-level `mjx_dynamics` API in the [reference](../Reference/integrations/mjx.md).
76
+
77
+ After `put_model`, read off dimensions:
78
+
79
+ ```python
80
+ n_q = int(mjx_model.nq) # generalized positions
81
+ n_v = int(mjx_model.nv) # generalized velocities
82
+ n_u = int(mjx_model.nu) # actuators
83
+ ```
84
+
85
+ For a simple cartpole, `nq == nv == 2` and `nu == 1`.
86
+
87
+ ## The `MjxDynamics` Adapter
88
+
89
+ `ox.MjxDynamics(mjx_model)` is the recommended entry point. It:
90
+
91
+ 1. Creates default `qpos`, `qvel`, and `ctrl` variables matching `nq`, `nv`, and `nu`
92
+ 2. Exposes them on `.states` and `.controls`
93
+ 3. Routes MJX forward dynamics through the internal BYOF channel — you do **not** pass `byof=` yourself
94
+
95
+ ```python
96
+ import openscvx as ox
97
+
98
+ dyn = ox.MjxDynamics(mjx_model)
99
+ qpos, qvel = dyn.states
100
+ (ctrl,) = dyn.controls
101
+ ```
102
+
103
+ `MjxDynamics` also seeds `.min` / `.max` from joint and actuator limits declared in MJCF (`jnt_range`, `actuator_ctrlrange`). Override them for your OCP as needed.
104
+
105
+ ### Boundary conditions
106
+
107
+ Set initial and final values on the adapter's states like any other `ox.State`:
108
+
109
+ ```python
110
+ qpos.min = np.array([-3.0, -2.0 * np.pi])
111
+ qpos.max = np.array([3.0, 2.0 * np.pi])
112
+ qpos.initial = np.array([0.0, np.pi]) # cart at origin, pole hanging
113
+ qpos.final = np.array([0.0, 0.0]) # upright
114
+
115
+ qvel.initial = np.zeros(2)
116
+ qvel.final = np.zeros(2)
117
+
118
+ ctrl.min = np.array([-1.0])
119
+ ctrl.max = np.array([1.0])
120
+ ctrl.guess = np.zeros((n, 1))
121
+ ```
122
+
123
+ Use the same boundary-condition syntax as earlier tutorials (`ox.Free`, `ox.Minimize`, tuples, etc.) — see [Hello Brachistochrone](01_hello_world_brachistochrone.md).
124
+
125
+ ### Initial guess
126
+
127
+ A good state guess helps underactuated swing-up problems converge:
128
+
129
+ ```python
130
+ theta_guess = np.linspace(np.pi, 0.0, n)
131
+ qpos.guess = np.column_stack([np.zeros(n), theta_guess])
132
+ qvel.guess = np.zeros((n, 2))
133
+ ```
134
+
135
+ ### Constraints and time
136
+
137
+ CTCS box constraints follow the same pattern as tutorial 01:
138
+
139
+ ```python
140
+ constraints = []
141
+ for state in dyn.states:
142
+ constraints.extend([ox.ctcs(state <= state.max), ox.ctcs(state.min <= state)])
143
+ for control in dyn.controls:
144
+ constraints.extend([ox.ctcs(control <= control.max), ox.ctcs(control.min <= control)])
145
+
146
+ time = ox.Time(
147
+ initial=0.0,
148
+ final=ox.Minimize(total_time),
149
+ min=0.0,
150
+ max=2.0 * total_time,
151
+ )
152
+ ```
153
+
154
+ ### Defining and solving the problem
155
+
156
+ Pass the adapter as `dynamics=` and reuse its states and controls:
157
+
158
+ ```python
159
+ problem = ox.Problem(
160
+ dynamics=dyn,
161
+ states=dyn.states,
162
+ controls=dyn.controls,
163
+ time=time,
164
+ constraints=constraints,
165
+ N=n,
166
+ )
167
+
168
+ problem.initialize()
169
+ problem.solve()
170
+ results = problem.post_process()
171
+ ```
172
+
173
+ Results are accessed by the same names:
174
+
175
+ ```python
176
+ theta_traj = results.trajectory["qpos"][:, 1]
177
+ u_traj = results.trajectory["ctrl"]
178
+ ```
179
+
180
+ ### Run the full example
181
+
182
+ The complete script adds a Viser animation of the cart and pole:
183
+
184
+ ```sh
185
+ python examples/mjx/cartpole_mjx.py
186
+ ```
187
+
188
+ ## How It Works Internally
189
+
190
+ For models with `nq == nv` (no quaternion free joint), `MjxDynamics` sets symbolic kinematics `qpos_dot = qvel` and uses MJX to provide `qvel_dot` (generalized accelerations) from `mjx.forward`.
191
+
192
+ For models with `nq > nv` (a floating base with a quaternion), the adapter inserts quaternion kinematics for `qpos` and MJX accelerations for `qvel`. You do not need to write the $\dot{q}$ equation for the attitude quaternion — that is handled automatically.
193
+
194
+ Supported joint types: **free**, **slide**, and **hinge**. All free joints must appear before slide/hinge joints in the MJCF layout. Ball joints are explicitly rejected with a clear error; use the lower-level `mjx_dynamics` helper if you need them.
195
+
196
+ ## Free-Joint Example: Skydio X2 Gate Racing
197
+
198
+ `examples/mjx/skydio_x2_mjx.py` mirrors [Drone Racing](02_drone_racing_constraints.md) but uses a Menagerie (or inline fallback) quadrotor model:
199
+
200
+ - `nq = 7` — position plus unit quaternion `[w, x, y, z]`
201
+ - `nv = 6` — linear and angular velocity
202
+ - `nu = 4` — per-rotor thrusts
203
+
204
+ The problem setup is identical in spirit to tutorial 02: nodal gate constraints with `.at()`, minimum-time objective, loop closure in position. The only change is `dynamics=dyn` instead of a hand-written double-integrator dict.
205
+
206
+ ```python
207
+ dyn = ox.MjxDynamics(mjx_model)
208
+ qpos, qvel = dyn.states
209
+ (ctrl,) = dyn.controls
210
+
211
+ # qpos: [x, y, z, qw, qx, qy, qz]
212
+ qpos.initial = np.concatenate([start_pos, hover_quat])
213
+ qpos.final = [10.0, 0.0, 20.0, ("free", 1.0), ("free", 0.0), ("free", 0.0), ("free", 0.0)]
214
+ ```
215
+
216
+ Optional: initialize the MuJoCo Menagerie submodule for the textured mesh used in Viser:
217
+
218
+ ```sh
219
+ git submodule update --init third_party/mujoco_menagerie
220
+ ```
221
+
222
+ ## MJX Examples Overview
223
+
224
+ | Example | Description | Highlights |
225
+ |---------|-------------|------------|
226
+ | [`cartpole_mjx`](../Examples/mjx/cartpole_mjx.md) | Single-link swing-up | Minimal `MjxDynamics` workflow, Viser animation |
227
+ | [`double_cartpole_mjx`](../Examples/mjx/double_cartpole_mjx.md) | Two-link cartpole | Underactuated serial links, `ox.Free` terminal cart |
228
+ | [`triple_cartpole_mjx`](../Examples/mjx/triple_cartpole_mjx.md) | Three-link cartpole | Longer horizon, ZOH control parameterization |
229
+ | [`triple_cartpole_3d_mjx`](../Examples/mjx/triple_cartpole_3d_mjx.md) | 3D triple pendulum on a cart | Higher DOF, 3D Viser scene |
230
+ | [`triple_cartpole_game`](../Examples/mjx/triple_cartpole_game.md) | Game-style triple cartpole | Variant with different cost / setup |
231
+ | [`skydio_x2_mjx`](../Examples/mjx/skydio_x2_mjx.md) | Gate racing quadrotor | Free joint, Menagerie model, nodal constraints |
232
+
233
+ All live under `examples/mjx/` and require `pip install openscvx[mjx]`.
234
+
235
+ ## Advanced: `mjx_dynamics` and Custom Names
236
+
237
+ If you need custom `State` / `Control` names, extra states alongside MJX, or ball joints, drop to `openscvx.integrations.mjx_dynamics` and assemble `byof` manually:
238
+
239
+ ```python
240
+ from openscvx.integrations import mjx_dynamics
241
+
242
+ qpos = ox.State("cart_and_pole", shape=(mjx_model.nq,))
243
+ qvel = ox.State("rates", shape=(mjx_model.nv,))
244
+ ctrl = ox.Control("force", shape=(mjx_model.nu,))
245
+
246
+ qvel_dot = mjx_dynamics(mjx_model, qpos=qpos, qvel=qvel, ctrl=ctrl)
247
+
248
+ problem = ox.Problem(
249
+ dynamics={"cart_and_pole": qvel},
250
+ byof={"dynamics": {"rates": qvel_dot}},
251
+ states=[qpos, qvel],
252
+ controls=[ctrl],
253
+ ...
254
+ )
255
+ ```
256
+
257
+ See the [API reference](../Reference/integrations/mjx.md) for `return_component`, `extra_postprocess`, and full signatures.
258
+
259
+ ## Further Reading
260
+
261
+ - [Complete Cartpole MJX Example](../Examples/mjx/cartpole_mjx.md)
262
+ - [Skydio X2 MJX Gate Racing](../Examples/mjx/skydio_x2_mjx.md)
263
+ - [Drone Racing: Constraints](02_drone_racing_constraints.md) — same gate constraints without MJX
264
+ - [Visualization](05_visualization.md) — Plotly and Viser patterns used in MJX examples
265
+ - [API Reference: `MjxDynamics`](../Reference/integrations/mjx.md)
@@ -0,0 +1,36 @@
1
+ # Examples
2
+
3
+ OpenSCvx comes with a comprehensive set of examples demonstrating various trajectory optimization problems. These examples are located in the `examples/` folder and cover different applications and complexity levels.
4
+
5
+ ## Running Examples
6
+
7
+ See `examples/` folder for several example trajectory optimization problems.
8
+ To run a problem simply run any of the examples directly, for example:
9
+
10
+ ```sh
11
+ python3 examples/brachistochrone.py
12
+ ```
13
+
14
+ and adjust the plotting as needed (see [Tutorial 05: Visualization](UsersGuide/05_visualization.md)).
15
+
16
+ ## Creating Your Own Problems
17
+
18
+ Check out the problem definitions inside `examples/params` to see how to define your own problems. Each example demonstrates:
19
+
20
+ - State and control variable definition
21
+ - Dynamics specification
22
+ - Constraint formulation
23
+ - Problem instantiation and solving
24
+ - Results visualization
25
+
26
+ ## Example Structure
27
+
28
+ Most examples follow this structure:
29
+
30
+ 1. **Imports**: Import necessary OpenSCvx modules
31
+ 2. **Problem Setup**: Define parameters, state, and control variables
32
+ 3. **Dynamics**: Specify the system dynamics
33
+ 4. **Constraints**: Define path and boundary constraints
34
+ 5. **Problem Instantiation**: Create and configure the Problem
35
+ 6. **Solving**: Run the optimization
36
+ 7. **Visualization**: Plot and analyze results
@@ -1,6 +1,6 @@
1
1
  {#- Problem → OpenSCvx → solution — minimal copy, scales without inner scroll. -#}
2
2
  <section class="osc-home-pipeline" aria-labelledby="osc-home-pipeline-title">
3
- <h2 id="osc-home-pipeline-title" class="osc-home-pipeline__title">From a nonlinear optimal control problem to a dynamically feasible trajectory</h2>
3
+ <h2 id="osc-home-pipeline-title" class="osc-home-pipeline__title">From nonlinear optimal control problems to dynamically feasible trajectories.</h2>
4
4
  <p class="osc-home-pipeline__lede">
5
5
  Model in Python, compile with JAX, and scale batches on CPU or GPU—successive convexification turns a nonlinear OCP into a sequence of convex subproblems.
6
6
  </p>
@@ -185,6 +185,7 @@ nav:
185
185
  - 'UsersGuide/06_logic.md'
186
186
  - 'UsersGuide/07_lie.md'
187
187
  - 'UsersGuide/08_mpcc.md'
188
+ - 'UsersGuide/09_mjx_dynamics.md'
188
189
  - Examples: Examples/
189
190
  - Reference: Reference/
190
191
  - Foundations:
@@ -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.dev14'
22
- __version_tuple__ = version_tuple = (0, 5, 2, 'dev14')
21
+ __version__ = version = '0.5.2.dev15'
22
+ __version_tuple__ = version_tuple = (0, 5, 2, 'dev15')
23
23
 
24
- __commit_id__ = commit_id = 'g78ea9d746'
24
+ __commit_id__ = commit_id = 'gbbe5a3732'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.2.dev14
3
+ Version: 0.5.2.dev15
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
@@ -37,6 +37,7 @@ docs/UsersGuide/05_visualization.md
37
37
  docs/UsersGuide/06_logic.md
38
38
  docs/UsersGuide/07_lie.md
39
39
  docs/UsersGuide/08_mpcc.md
40
+ docs/UsersGuide/09_mjx_dynamics.md
40
41
  docs/assets/favicon.png
41
42
  docs/assets/logo.svg
42
43
  docs/assets/openscvx_logo_square.png
@@ -1,63 +0,0 @@
1
- # Examples
2
-
3
- OpenSCvx comes with a comprehensive set of examples demonstrating various trajectory optimization problems. These examples are located in the `examples/` folder and cover different applications and complexity levels.
4
-
5
- ## Running Examples
6
-
7
- See `examples/params/` folder for several example trajectory optimization problems.
8
- To run a problem simply run any of the examples directly, for example:
9
-
10
- ```sh
11
- python3 examples/params/brachistochrone.py
12
- ```
13
-
14
- and adjust the plotting as needed.
15
-
16
- ## Example Categories
17
-
18
- ### Abstract Problems
19
- - **Brachistochrone**: Classic minimum-time problem with gravity
20
- - **3DoF Rocket Landing**: Rocket landing with fuel optimization
21
-
22
- ### Drone Applications
23
- - **Obstacle Avoidance**: 6DoF drone navigating around obstacles
24
- - **Line-of-Sight Guidance**: Drone maintaining line-of-sight to keypoints while passing through gates
25
- - **Cinema View Planning**: Camera drone planning for cinematic shots
26
- - **Drone Racing**: High-speed racing through gates
27
-
28
- ### Ground Vehicle Applications
29
- - **Dubins Car**: Simple 2D vehicle with turning constraints
30
- - **Dubins Car with Waypoints**: Navigation through multiple waypoints
31
-
32
- ### Real-time Applications
33
- - **Real-time Drone Racing**: Live optimization during flight
34
- - **Real-time Obstacle Avoidance**: Dynamic obstacle avoidance
35
-
36
- ## Creating Your Own Problems
37
-
38
- Check out the problem definitions inside `examples/params` to see how to define your own problems. Each example demonstrates:
39
-
40
- - State and control variable definition
41
- - Dynamics specification
42
- - Constraint formulation
43
- - Problem instantiation and solving
44
- - Results visualization
45
-
46
- ## Example Structure
47
-
48
- Most examples follow this structure:
49
-
50
- 1. **Imports**: Import necessary OpenSCvx modules
51
- 2. **Problem Setup**: Define parameters, state, and control variables
52
- 3. **Dynamics**: Specify the system dynamics
53
- 4. **Constraints**: Define path and boundary constraints
54
- 5. **Problem Instantiation**: Create and configure the Problem
55
- 6. **Solving**: Run the optimization
56
- 7. **Visualization**: Plot and analyze results
57
-
58
- ## Performance Tips
59
-
60
- - Start with simpler examples to understand the workflow
61
- - Use the provided initial guesses as starting points
62
- - Adjust SCP weights based on your specific problem
63
- - Consider using CVXPYGen for faster performance on smaller problems
File without changes
File without changes