openscvx 0.5.3.dev55__tar.gz → 0.5.3.dev57__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 (535) hide show
  1. {openscvx-0.5.3.dev55/openscvx.egg-info → openscvx-0.5.3.dev57}/PKG-INFO +23 -19
  2. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/README.md +22 -18
  3. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/custom_algorithms_autotuners.md +5 -0
  4. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/_version.py +3 -3
  5. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/acceptance_ratio.py +23 -0
  6. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/augmented_lagrangian.py +19 -1
  7. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/base.py +13 -0
  8. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/problem.py +28 -3
  9. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/__init__.py +3 -1
  10. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/expr.py +41 -1
  11. openscvx-0.5.3.dev57/openscvx/symbolic/expr/lie/_citations.py +14 -0
  12. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/se3.py +10 -1
  13. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/so3.py +10 -1
  14. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stl.py +16 -1
  15. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stljax.py +17 -1
  16. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/problem.py +39 -0
  17. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57/openscvx.egg-info}/PKG-INFO +23 -19
  18. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/SOURCES.txt +4 -0
  19. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/scm_file_list.json +4 -0
  20. openscvx-0.5.3.dev57/openscvx.egg-info/scm_version.json +8 -0
  21. openscvx-0.5.3.dev57/tests/algorithms/autotuner/test_citation.py +44 -0
  22. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_expr.py +40 -1
  23. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_lie.py +26 -0
  24. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_stl.py +22 -0
  25. openscvx-0.5.3.dev57/tests/symbolic/test_citations.py +90 -0
  26. openscvx-0.5.3.dev57/tests/test_citation.py +98 -0
  27. openscvx-0.5.3.dev55/openscvx.egg-info/scm_version.json +0 -8
  28. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/assets/logo.svg +0 -0
  29. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/release-drafter.yml +0 -0
  30. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/_docs.yml +0 -0
  31. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/_extra.yml +0 -0
  32. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/branch-name.yml +0 -0
  33. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/docs.yml +0 -0
  34. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/lint.yml +0 -0
  35. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/nightly.yml +0 -0
  36. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/release-drafter.yml +0 -0
  37. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/release.yml +0 -0
  38. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-cvxpygen.yml +0 -0
  39. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-examples.yml +0 -0
  40. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-lie.yml +0 -0
  41. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-mjx.yml +0 -0
  42. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-qpax.yml +0 -0
  43. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests.yml +0 -0
  44. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.gitignore +0 -0
  45. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.gitmodules +0 -0
  46. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/CITATION.cff +0 -0
  47. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/CONTRIBUTING.md +0 -0
  48. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/LICENSE +0 -0
  49. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/constraint_reformulation.md +0 -0
  50. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/control_parameterization.md +0 -0
  51. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/discretization.md +0 -0
  52. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/ocp.md +0 -0
  53. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/scvx.md +0 -0
  54. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/time_dilation.md +0 -0
  55. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/batching_jit_grad.md +0 -0
  56. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/lowering_architecture.md +0 -0
  57. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  58. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/00_introduction.md +0 -0
  59. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  60. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  61. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  62. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  63. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/05_visualization.md +0 -0
  64. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/06_logic.md +0 -0
  65. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/07_lie.md +0 -0
  66. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/08_mpcc.md +0 -0
  67. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
  68. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/favicon.png +0 -0
  69. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_dark.png +0 -0
  70. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_light.png +0 -0
  71. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_dark.png +0 -0
  72. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_light.png +0 -0
  73. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_dark.png +0 -0
  74. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_light.png +0 -0
  75. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/logo.svg +0 -0
  76. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/openscvx_logo_square.png +0 -0
  77. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-client/index.html +0 -0
  78. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/drone_racing.viser +0 -0
  79. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
  80. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/changelog.md +0 -0
  81. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/citation.md +0 -0
  82. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/examples.md +0 -0
  83. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/index.md +0 -0
  84. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/installation.md +0 -0
  85. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/javascripts/mathjax.js +0 -0
  86. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/llms.txt +0 -0
  87. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/versions.json +0 -0
  88. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_maze.py +0 -0
  89. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_maze_viz.py +0 -0
  90. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_viser_embed_export.py +0 -0
  91. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone.py +0 -0
  92. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone_batched.py +0 -0
  93. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/chen_allgoewer.py +0 -0
  94. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/flappy_bird.py +0 -0
  95. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/hypersensitive.py +0 -0
  96. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/impulsive.py +0 -0
  97. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/stl_integer_variable.py +0 -0
  98. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/stl_or.py +0 -0
  99. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/aircraft/dynamic_soaring.py +0 -0
  100. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/aircraft/supersonic_time_to_climb.py +0 -0
  101. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/7_dof_arm.py +0 -0
  102. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_camera.py +0 -0
  103. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_render.py +0 -0
  104. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_sensor_view.py +0 -0
  105. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/dr_vp_polytope.py +0 -0
  106. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/franka_fr3v2_pick_place.py +0 -0
  107. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/logo.py +0 -0
  108. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/obstacle_avoidance_vmap.py +0 -0
  109. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/senss_hop_lidar_camera.py +0 -0
  110. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/3_dof_arm.py +0 -0
  111. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm.py +0 -0
  112. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_collision.py +0 -0
  113. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_vp.py +0 -0
  114. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_pick_place.py +0 -0
  115. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
  116. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
  117. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car.py +0 -0
  118. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_disjoint.py +0 -0
  119. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  120. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_stl.py +0 -0
  121. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_stl_or.py +0 -0
  122. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_waypoint_stl.py +0 -0
  123. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_plotting.py +0 -0
  124. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_time2spatial.py +0 -0
  125. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
  126. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
  127. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/readDataFcn.py +0 -0
  128. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_viser.py +0 -0
  129. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_hybrid.py +0 -0
  130. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_ice.py +0 -0
  131. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_mpc.py +0 -0
  132. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent.py +0 -0
  133. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
  134. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
  135. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_openscvx.py +0 -0
  136. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/_plotting.py +0 -0
  137. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/double_integrator_static.py +0 -0
  138. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/maze_rrt_scp.py +0 -0
  139. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/moving_safe_zones.py +0 -0
  140. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/multiphase_velocity.py +0 -0
  141. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
  142. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
  143. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/_plotting.py +0 -0
  144. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/_terrain.py +0 -0
  145. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/boresight_trace_mpcc.py +0 -0
  146. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp.py +0 -0
  147. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp_nodal.py +0 -0
  148. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp.py +0 -0
  149. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_nodal.py +0 -0
  150. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_polytope.py +0 -0
  151. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/drone_racing.py +0 -0
  152. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/drone_racing_batched_gates.py +0 -0
  153. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo.py +0 -0
  154. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/acl_logo.svg +0 -0
  155. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/circle.svg +0 -0
  156. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
  157. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
  158. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  159. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/lunar_terrain_agl.py +0 -0
  160. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/maze_scp.py +0 -0
  161. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/moving_safe_columns.py +0 -0
  162. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance.py +0 -0
  163. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  164. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/openscvx_logo.py +0 -0
  165. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_hector.py +0 -0
  166. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_zigzag.py +0 -0
  167. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax.py +0 -0
  168. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_pick_place.py +0 -0
  169. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_viewplanning.py +0 -0
  170. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_waypoint.py +0 -0
  171. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
  172. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace.py +0 -0
  173. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
  174. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/cartpole_mjx.py +0 -0
  175. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/double_cartpole_mjx.py +0 -0
  176. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/skydio_x2_mjx.py +0 -0
  177. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
  178. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_game.py +0 -0
  179. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_mjx.py +0 -0
  180. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_discrete.py +0 -0
  181. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_drone_racing.py +0 -0
  182. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  183. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  184. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  185. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent.py +0 -0
  186. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
  187. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
  188. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
  189. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/plotting.py +0 -0
  190. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/plotting_viser.py +0 -0
  191. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/3DoF_pdg_realtime.py +0 -0
  192. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/6DoF_pdg_realtime.py +0 -0
  193. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
  194. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
  195. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  196. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  197. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
  198. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  199. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/cinema_vp_realtime.py +0 -0
  200. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/drone_racing_realtime.py +0 -0
  201. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/dubins_car_realtime.py +0 -0
  202. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  203. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/3DoF_pdg.py +0 -0
  204. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg.py +0 -0
  205. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
  206. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc.py +0 -0
  207. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
  208. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/_cstc_plotting.py +0 -0
  209. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/ascent_launch_vehicle.py +0 -0
  210. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/reusable_launch_vehicle.py +0 -0
  211. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/rocket_ilqr.py +0 -0
  212. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
  213. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
  214. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
  215. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
  216. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
  217. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
  218. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
  219. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_dem.py +0 -0
  220. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/__init__.py +0 -0
  221. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/dem.py +0 -0
  222. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/lidar.py +0 -0
  223. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
  224. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/senss_dem.png +0 -0
  225. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/scaling/scaling_study.py +0 -0
  226. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.bin +0 -0
  227. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.gltf +0 -0
  228. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
  229. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
  230. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_normals.png +0 -0
  231. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
  232. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
  233. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
  234. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
  235. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/halo_orbit.py +0 -0
  236. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/hohmann_transfer.py +0 -0
  237. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/let_transfer.py +0 -0
  238. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/proxops_cw.py +0 -0
  239. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/relative_loitering.py +0 -0
  240. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/ctlos_cine.gif +0 -0
  241. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/ctlos_dr.gif +0 -0
  242. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/dtlos_cine.gif +0 -0
  243. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/dtlos_dr.gif +0 -0
  244. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/openscvx_logo.svg +0 -0
  245. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/openscvx_logo_square.png +0 -0
  246. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/oscvx_structure_full_dark.svg +0 -0
  247. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/video_preview.png +0 -0
  248. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/__init__.py +0 -0
  249. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/custom.css +0 -0
  250. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
  251. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-hero.css +0 -0
  252. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-viser.css +0 -0
  253. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/home.html +0 -0
  254. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/main.html +0 -0
  255. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-diagram.html +0 -0
  256. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-dropin-banner.html +0 -0
  257. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-hero.html +0 -0
  258. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-pipeline.html +0 -0
  259. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-viser-strip.html +0 -0
  260. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/sitemap.xml +0 -0
  261. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/mkdocs.yml +0 -0
  262. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/__init__.py +0 -0
  263. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/__main__.py +0 -0
  264. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/__init__.py +0 -0
  265. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/__init__.py +0 -0
  266. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
  267. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
  268. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
  269. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/base.py +0 -0
  270. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/history.py +0 -0
  271. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/hyperparams.py +0 -0
  272. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/loop.py +0 -0
  273. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/optimization_results.py +0 -0
  274. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/penalty.py +0 -0
  275. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/__init__.py +0 -0
  276. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/iteration.py +0 -0
  277. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
  278. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/state.py +0 -0
  279. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/weights.py +0 -0
  280. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/config.py +0 -0
  281. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/__init__.py +0 -0
  282. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/base.py +0 -0
  283. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/discretize_linearize.py +0 -0
  284. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize.py +0 -0
  285. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
  286. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/__init__.py +0 -0
  287. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
  288. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
  289. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/__init__.py +0 -0
  290. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/byof.py +0 -0
  291. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/lowering.py +0 -0
  292. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/validation.py +0 -0
  293. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/__init__.py +0 -0
  294. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/interpolation.py +0 -0
  295. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/inverse_kinematics.py +0 -0
  296. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/__init__.py +0 -0
  297. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/_utils.py +0 -0
  298. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/base.py +0 -0
  299. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/frax.py +0 -0
  300. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/menagerie.py +0 -0
  301. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/mjx.py +0 -0
  302. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/__init__.py +0 -0
  303. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/diffrax.py +0 -0
  304. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/runge_kutta.py +0 -0
  305. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/loader.py +0 -0
  306. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/__init__.py +0 -0
  307. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_constraints.py +0 -0
  308. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_variables.py +0 -0
  309. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/dynamics.py +0 -0
  310. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/jax_constraints.py +0 -0
  311. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/parameters.py +0 -0
  312. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/problem.py +0 -0
  313. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/unified.py +0 -0
  314. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/__init__.py +0 -0
  315. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/plotting.py +0 -0
  316. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/publication.py +0 -0
  317. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/scp_iteration.py +0 -0
  318. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/__init__.py +0 -0
  319. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/animated.py +0 -0
  320. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/coordinates.py +0 -0
  321. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/orbits.py +0 -0
  322. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/plotly_integration.py +0 -0
  323. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/primitives.py +0 -0
  324. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/scp.py +0 -0
  325. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/server.py +0 -0
  326. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/__init__.py +0 -0
  327. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/post_processing.py +0 -0
  328. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/propagation.py +0 -0
  329. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/__init__.py +0 -0
  330. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/base.py +0 -0
  331. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/cones.py +0 -0
  332. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
  333. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/moreau_ptr_solver.py +0 -0
  334. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/ptr_solver.py +0 -0
  335. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/qpax_ptr_solver.py +0 -0
  336. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/__init__.py +0 -0
  337. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/affine.py +0 -0
  338. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/augmentation.py +0 -0
  339. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/builder.py +0 -0
  340. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/canonicalize.py +0 -0
  341. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/constraint_set.py +0 -0
  342. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/arithmetic.py +0 -0
  343. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/array.py +0 -0
  344. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/autodiff.py +0 -0
  345. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/constraint.py +0 -0
  346. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/control.py +0 -0
  347. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  348. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  349. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/linalg.py +0 -0
  350. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/logic.py +0 -0
  351. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/math.py +0 -0
  352. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/parameter.py +0 -0
  353. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/spatial.py +0 -0
  354. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/state.py +0 -0
  355. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/time.py +0 -0
  356. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/variable.py +0 -0
  357. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/vmap.py +0 -0
  358. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/hashing.py +0 -0
  359. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lower.py +0 -0
  360. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/__init__.py +0 -0
  361. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  362. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  363. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  364. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  365. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  366. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
  367. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  368. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  369. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  370. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  371. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  372. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  373. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  374. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  375. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  376. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  377. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  378. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  379. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
  380. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  381. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  382. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  383. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  384. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  385. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  386. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  387. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  388. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  389. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  390. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  391. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  392. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
  393. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
  394. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
  395. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
  396. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/array.py +0 -0
  397. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
  398. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
  399. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/control.py +0 -0
  400. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
  401. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
  402. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
  403. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
  404. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
  405. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/math.py +0 -0
  406. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
  407. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/state.py +0 -0
  408. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
  409. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
  410. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/__init__.py +0 -0
  411. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/_registry.py +0 -0
  412. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/array.py +0 -0
  413. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/constraint.py +0 -0
  414. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/lie.py +0 -0
  415. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/linalg.py +0 -0
  416. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/logic.py +0 -0
  417. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/math.py +0 -0
  418. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/parser.py +0 -0
  419. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/spatial.py +0 -0
  420. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stl.py +0 -0
  421. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stljax.py +0 -0
  422. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/tokenizer.py +0 -0
  423. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/preprocessing.py +0 -0
  424. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/sparsity.py +0 -0
  425. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/unified.py +0 -0
  426. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/__init__.py +0 -0
  427. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/cache.py +0 -0
  428. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/caching.py +0 -0
  429. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/printing.py +0 -0
  430. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/profiling.py +0 -0
  431. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/utils.py +0 -0
  432. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/dependency_links.txt +0 -0
  433. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/entry_points.txt +0 -0
  434. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/requires.txt +0 -0
  435. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/top_level.txt +0 -0
  436. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/pyproject.toml +0 -0
  437. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/gen_example_pages.py +0 -0
  438. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/gen_ref_pages.py +0 -0
  439. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
  440. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/mkdocs_seo_hook.py +0 -0
  441. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/setup.cfg +0 -0
  442. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/__init__.py +0 -0
  443. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/__init__.py +0 -0
  444. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/_iteration_helpers.py +0 -0
  445. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/__init__.py +0 -0
  446. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
  447. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
  448. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
  449. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
  450. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_jit.py +0 -0
  451. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_parity.py +0 -0
  452. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_make_solve_loop.py +0 -0
  453. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/brachistochrone_analytical.py +0 -0
  454. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/conftest.py +0 -0
  455. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/__init__.py +0 -0
  456. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_brachistochrone.py +0 -0
  457. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_impulsive.py +0 -0
  458. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_multishot_propagation.py +0 -0
  459. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
  460. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
  461. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
  462. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
  463. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
  464. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
  465. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
  466. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.json +0 -0
  467. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.yaml +0 -0
  468. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/hohmann_analytical.py +0 -0
  469. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/__init__.py +0 -0
  470. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx.py +0 -0
  471. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx_dynamics.py +0 -0
  472. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/__init__.py +0 -0
  473. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/_iteration_callback_helpers.py +0 -0
  474. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
  475. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
  476. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_moreau.py +0 -0
  477. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_qpax.py +0 -0
  478. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_vmap.py +0 -0
  479. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_moreau_ptr_solver.py +0 -0
  480. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_qpax_ptr_solver.py +0 -0
  481. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_subproblem_pytree.py +0 -0
  482. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/__init__.py +0 -0
  483. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/__init__.py +0 -0
  484. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_arithmetic.py +0 -0
  485. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_array.py +0 -0
  486. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_autodiff.py +0 -0
  487. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_constraint.py +0 -0
  488. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_guess_expr.py +0 -0
  489. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_linalg.py +0 -0
  490. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_logic.py +0 -0
  491. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_math.py +0 -0
  492. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_node_reference.py +0 -0
  493. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_parameters.py +0 -0
  494. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_scaling.py +0 -0
  495. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_spatial.py +0 -0
  496. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_variable.py +0 -0
  497. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_vmap.py +0 -0
  498. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/__init__.py +0 -0
  499. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_array.py +0 -0
  500. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_constraint.py +0 -0
  501. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_lie.py +0 -0
  502. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_linalg.py +0 -0
  503. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_load.py +0 -0
  504. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_logic.py +0 -0
  505. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_math.py +0 -0
  506. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_parser.py +0 -0
  507. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_spatial.py +0 -0
  508. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_stl.py +0 -0
  509. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_tokenizer.py +0 -0
  510. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_vmap.py +0 -0
  511. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_augmentation.py +0 -0
  512. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_gmsr.py +0 -0
  513. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_hashing.py +0 -0
  514. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_latex_formulation.py +0 -0
  515. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_cvxpy.py +0 -0
  516. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_jax.py +0 -0
  517. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_latex.py +0 -0
  518. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_preprocessing.py +0 -0
  519. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_sparsity.py +0 -0
  520. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_unified.py +0 -0
  521. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_autotuning.py +0 -0
  522. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_cvxpygen_optional.py +0 -0
  523. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_discretization.py +0 -0
  524. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_examples.py +0 -0
  525. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_expert.py +0 -0
  526. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_init.py +0 -0
  527. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_initialize_syncs_guesses.py +0 -0
  528. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_integrators.py +0 -0
  529. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_loader.py +0 -0
  530. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_optimization_results.py +0 -0
  531. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_plotting.py +0 -0
  532. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_post_process_batched_tau_clamp.py +0 -0
  533. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_propagation.py +0 -0
  534. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_results_parameters.py +0 -0
  535. {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_solve_batched_inference.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.3.dev55
3
+ Version: 0.5.3.dev57
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
@@ -275,27 +275,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
275
275
  Please cite the following works if you use the repository,
276
276
 
277
277
  ```tex
278
- @ARTICLE{hayner2025los,
279
- author={Hayner, Christopher R. and Carson III, John M. and Açıkmeşe, Behçet and Leung, Karen},
280
- journal={IEEE Robotics and Automation Letters},
281
- title={Continuous-Time Line-of-Sight Constrained Trajectory Planning for 6-Degree of Freedom Systems},
282
- year={2025},
283
- volume={},
284
- number={},
285
- pages={1-8},
286
- keywords={Robot sensing systems;Vectors;Vehicle dynamics;Line-of-sight propagation;Trajectory planning;Trajectory optimization;Quadrotors;Nonlinear dynamical systems;Heuristic algorithms;Convergence;Constrained Motion Planning;Optimization and Optimal Control;Aerial Systems: Perception and Autonomy},
287
- doi={10.1109/LRA.2025.3545299}}
278
+ @misc{hayner2026openscvxopensourcemodularextensible,
279
+ title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
280
+ author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
281
+ year={2026},
282
+ eprint={2608.21631},
283
+ archivePrefix={arXiv},
284
+ primaryClass={cs.RO},
285
+ url={https://arxiv.org/abs/2608.21631},
286
+ }
288
287
  ```
289
288
 
290
289
  ```tex
291
- @misc{elango2024ctscvx,
292
- title={Successive Convexification for Trajectory Optimization with Continuous-Time Constraint Satisfaction},
293
- author={Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
294
- year={2024},
295
- eprint={2404.16826},
296
- archivePrefix={arXiv},
297
- primaryClass={math.OC},
298
- url={https://arxiv.org/abs/2404.16826},
290
+ @article{elango2025ctcs,
291
+ title = {Continuous-time successive convexification for constrained trajectory optimization},
292
+ journal = {Automatica},
293
+ volume = {180},
294
+ pages = {112464},
295
+ year = {2025},
296
+ issn = {0005-1098},
297
+ doi = {https://doi.org/10.1016/j.automatica.2025.112464},
298
+ url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
299
+ author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
300
+ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
299
301
  }
300
302
  ```
301
303
 
@@ -312,3 +314,5 @@ Please cite the following works if you use the repository,
312
314
  month = mar,
313
315
  }
314
316
  ```
317
+
318
+ Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
@@ -228,27 +228,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
228
228
  Please cite the following works if you use the repository,
229
229
 
230
230
  ```tex
231
- @ARTICLE{hayner2025los,
232
- author={Hayner, Christopher R. and Carson III, John M. and Açıkmeşe, Behçet and Leung, Karen},
233
- journal={IEEE Robotics and Automation Letters},
234
- title={Continuous-Time Line-of-Sight Constrained Trajectory Planning for 6-Degree of Freedom Systems},
235
- year={2025},
236
- volume={},
237
- number={},
238
- pages={1-8},
239
- keywords={Robot sensing systems;Vectors;Vehicle dynamics;Line-of-sight propagation;Trajectory planning;Trajectory optimization;Quadrotors;Nonlinear dynamical systems;Heuristic algorithms;Convergence;Constrained Motion Planning;Optimization and Optimal Control;Aerial Systems: Perception and Autonomy},
240
- doi={10.1109/LRA.2025.3545299}}
231
+ @misc{hayner2026openscvxopensourcemodularextensible,
232
+ title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
233
+ author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
234
+ year={2026},
235
+ eprint={2608.21631},
236
+ archivePrefix={arXiv},
237
+ primaryClass={cs.RO},
238
+ url={https://arxiv.org/abs/2608.21631},
239
+ }
241
240
  ```
242
241
 
243
242
  ```tex
244
- @misc{elango2024ctscvx,
245
- title={Successive Convexification for Trajectory Optimization with Continuous-Time Constraint Satisfaction},
246
- author={Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
247
- year={2024},
248
- eprint={2404.16826},
249
- archivePrefix={arXiv},
250
- primaryClass={math.OC},
251
- url={https://arxiv.org/abs/2404.16826},
243
+ @article{elango2025ctcs,
244
+ title = {Continuous-time successive convexification for constrained trajectory optimization},
245
+ journal = {Automatica},
246
+ volume = {180},
247
+ pages = {112464},
248
+ year = {2025},
249
+ issn = {0005-1098},
250
+ doi = {https://doi.org/10.1016/j.automatica.2025.112464},
251
+ url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
252
+ author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
253
+ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
252
254
  }
253
255
  ```
254
256
 
@@ -265,3 +267,5 @@ Please cite the following works if you use the repository,
265
267
  month = mar,
266
268
  }
267
269
  ```
270
+
271
+ Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
@@ -120,6 +120,11 @@ To add columns to the iteration table, set the class attribute `COLUMNS` to a
120
120
  list of `openscvx.utils.printing.Column` specs; the algorithm concatenates
121
121
  them into its own table via `get_columns`.
122
122
 
123
+ If the update rule comes from a published scheme, override `citation()` to
124
+ return its BibTeX entries — `Problem.citation()` prints them in a dedicated
125
+ autotuner section. The default is an empty list, right for unpublished
126
+ heuristics.
127
+
123
128
  ## A custom algorithm
124
129
 
125
130
  An `Algorithm` owns the SCP iteration end to end: it *builds* the JAX-pure
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.5.3.dev55'
22
- __version_tuple__ = version_tuple = (0, 5, 3, 'dev55')
21
+ __version__ = version = '0.5.3.dev57'
22
+ __version_tuple__ = version_tuple = (0, 5, 3, 'dev57')
23
23
 
24
- __commit_id__ = commit_id = 'g17a1e9f4d'
24
+ __commit_id__ = commit_id = 'g9f23a62a0'
@@ -88,6 +88,29 @@ class AcceptanceRatioAutotuner(AutotuningBase):
88
88
  Column("adaptive_state", "Adaptive", 16, "{}", color_adaptive_state, Verbosity.FULL),
89
89
  ]
90
90
 
91
+ def citation(self) -> List[str]:
92
+ """Return BibTeX citations for the SCvx acceptance-ratio update rule."""
93
+ return [
94
+ r"""@inproceedings{mao2016scvx,
95
+ title={Successive convexification of non-convex optimal control problems and its
96
+ convergence properties},
97
+ author={Mao, Yuanqi and Szmuk, Michael and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
98
+ booktitle={2016 IEEE 55th Conference on Decision and Control (CDC)},
99
+ pages={3636--3641},
100
+ year={2016},
101
+ publisher={IEEE}
102
+ }""",
103
+ r"""@misc{mao2019scvx,
104
+ title={Successive Convexification: A Superlinearly Convergent Algorithm for
105
+ Non-convex Optimal Control Problems},
106
+ author={Mao, Yuanqi and Szmuk, Michael and Xu, Xiangru and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
107
+ year={2019},
108
+ eprint={1804.06539},
109
+ archivePrefix={arXiv},
110
+ primaryClass={math.OC}
111
+ }""",
112
+ ]
113
+
91
114
  def _update_multipliers(
92
115
  self,
93
116
  state: "AlgorithmState",
@@ -6,7 +6,7 @@ SCP loop records history outside this module.
6
6
  """
7
7
 
8
8
  import warnings
9
- from typing import TYPE_CHECKING, Literal
9
+ from typing import TYPE_CHECKING, List, Literal
10
10
 
11
11
  import jax.numpy as jnp
12
12
  from pydantic import BaseModel, ConfigDict
@@ -256,6 +256,24 @@ class AugmentedLagrangian(AcceptanceRatioAutotuner):
256
256
  # :py:meth:`_update_virtual_buffer_nodal_weights`.
257
257
  return jnp.minimum(state.hyper.lam_vc_max, lam_vb_new)
258
258
 
259
+ def citation(self) -> List[str]:
260
+ """Return BibTeX citations for the augmented-Lagrangian multiplier updates.
261
+
262
+ Extends the inherited SCvx acceptance-ratio references with Luo's
263
+ dissertation, whose penalty-weight updates this autotuner implements.
264
+ """
265
+ return super().citation() + [
266
+ r"""@phdthesis{luo2025modeling,
267
+ title={Modeling and Algorithms for Nonconvex Trajectory Generation Problems:
268
+ From Constraint Reformulations and First-Order Proximal Methods to
269
+ Structure-Exploiting Convex Solvers},
270
+ author={Luo, Dayou},
271
+ school={University of Washington},
272
+ year={2025},
273
+ url={https://hdl.handle.net/1773/53364}
274
+ }"""
275
+ ]
276
+
259
277
 
260
278
  # =============================================================================
261
279
  # Pydantic spec for dict / YAML validation
@@ -257,3 +257,16 @@ class AutotuningBase(ABC):
257
257
  the autotuner's decision; the SCP loop records that into history
258
258
  and maps it to a printable label.
259
259
  """
260
+
261
+ def citation(self) -> List[str]:
262
+ """Return BibTeX citations for the published update rule this autotuner implements.
263
+
264
+ Autotuners implementing a published scheme override this so that
265
+ :meth:`openscvx.Problem.citation` can credit it alongside the
266
+ algorithm, solver, and discretization references. Unpublished
267
+ heuristics keep the default.
268
+
269
+ Returns:
270
+ List of BibTeX citation strings. Empty for uncited autotuners.
271
+ """
272
+ return []
@@ -2299,9 +2299,11 @@ class Problem:
2299
2299
  def citation(self) -> str:
2300
2300
  """Return BibTeX citations for all components used in this problem.
2301
2301
 
2302
- Aggregates citations from the algorithm and other components (discretization,
2303
- convex solver, etc.) Each section is prefixed with a comment indicating which component the
2304
- citation is for.
2302
+ Aggregates citations from the algorithm, its autotuner, the convex
2303
+ solver, the discretization, and every symbolic node in the problem's
2304
+ expression graphs (e.g. GMSR STL operators, jaxlie-backed Lie-group
2305
+ maps). Each section is prefixed with a comment indicating which
2306
+ component the citation is for.
2305
2307
 
2306
2308
  Returns:
2307
2309
  Formatted string containing all BibTeX citations with comments.
@@ -2324,6 +2326,14 @@ class Problem:
2324
2326
  citations = "\n".join(algo_citations)
2325
2327
  sections.append(f"{header}\n\n{citations}")
2326
2328
 
2329
+ # Autotuner citations
2330
+ tuner_citations = self._algorithm.autotuner.citation()
2331
+ if tuner_citations:
2332
+ tuner_name = type(self._algorithm.autotuner).__name__
2333
+ header = f"% Autotuner: {tuner_name}"
2334
+ citations = "\n".join(tuner_citations)
2335
+ sections.append(f"{header}\n\n{citations}")
2336
+
2327
2337
  # Solver citations
2328
2338
  solver_citations = self._solver.citation()
2329
2339
  if solver_citations:
@@ -2340,6 +2350,21 @@ class Problem:
2340
2350
  citations = "\n".join(dis_citations)
2341
2351
  sections.append(f"{header}\n\n{citations}")
2342
2352
 
2353
+ # Symbolic-node citations, gathered by walking the expression graphs.
2354
+ # Distinct node classes can share a reference (every GMSR operator
2355
+ # cites the same paper), so entries are deduplicated across classes.
2356
+ node_citations = self.symbolic.citations()
2357
+ if node_citations:
2358
+ names = ", ".join(sorted(node_citations))
2359
+ header = f"% Symbolic Operators: {names}"
2360
+ entries: list[str] = []
2361
+ for name in sorted(node_citations):
2362
+ for entry in node_citations[name]:
2363
+ if entry not in entries:
2364
+ entries.append(entry)
2365
+ citations = "\n".join(entries)
2366
+ sections.append(f"{header}\n\n{citations}")
2367
+
2343
2368
  sections.append(r"% --- END AUTO-GENERATED CITATIONS")
2344
2369
 
2345
2370
  return "\n\n".join(sections)
@@ -23,7 +23,7 @@ Module Organization:
23
23
 
24
24
  Core Expressions (expr.py):
25
25
  Base classes and utilities including `Expr`, `Leaf`, `Parameter`, `Constant`,
26
- and helper functions `to_expr` and `traverse`.
26
+ and helper functions `to_expr`, `traverse`, and `walk`.
27
27
 
28
28
  Arithmetic Operations (arithmetic.py):
29
29
  Fundamental arithmetic operations including `Add`, `Sub`, `Mul`, `Div`,
@@ -110,6 +110,7 @@ from .expr import (
110
110
  NodeReference,
111
111
  to_expr,
112
112
  traverse,
113
+ walk,
113
114
  )
114
115
 
115
116
  # Lie algebra operations
@@ -182,6 +183,7 @@ __all__ = [
182
183
  "Parameter",
183
184
  "to_expr",
184
185
  "traverse",
186
+ "walk",
185
187
  "transitive_closure",
186
188
  "discrete_sparsity",
187
189
  "Add",
@@ -67,7 +67,7 @@ import functools
67
67
  import hashlib
68
68
  import struct
69
69
  import threading
70
- from typing import TYPE_CHECKING, Callable, List, Tuple, Union
70
+ from typing import TYPE_CHECKING, Callable, Iterator, List, Tuple, Union
71
71
 
72
72
  if TYPE_CHECKING:
73
73
  from .linalg import Transpose
@@ -357,6 +357,20 @@ class Expr:
357
357
  """
358
358
  return []
359
359
 
360
+ def citation(self) -> List[str]:
361
+ """Return BibTeX citations for the published method behind this node.
362
+
363
+ Most nodes are plain arithmetic and cite nothing. Nodes that implement
364
+ a published formulation or defer to an external library (e.g. the GMSR
365
+ STL operators, the jaxlie-backed Lie-group maps) override this so that
366
+ :meth:`openscvx.Problem.citation` can credit the methods a problem
367
+ actually uses by scanning its expression trees.
368
+
369
+ Returns:
370
+ List of BibTeX citation strings. Empty for uncited nodes.
371
+ """
372
+ return []
373
+
360
374
  def canonicalize(self) -> "Expr":
361
375
  """
362
376
  Return a canonical (simplified) form of this expression.
@@ -631,6 +645,32 @@ def traverse(expr: Expr, visit: Callable[[Expr], None]):
631
645
  traverse(child, visit)
632
646
 
633
647
 
648
+ def walk(expr: Expr) -> Iterator[Expr]:
649
+ """Yield ``expr`` and every node reachable through ``children()``, each once.
650
+
651
+ The counterpart of :func:`ast.walk` for symbolic expressions: a pre-order
652
+ traversal of the expression graph. Unlike :func:`traverse`, each distinct
653
+ node is visited a single time — canonicalization preserves sharing, so an
654
+ expression is generally a DAG, and revisiting shared subexpressions can be
655
+ exponentially wasteful.
656
+
657
+ Args:
658
+ expr: Root expression to traverse.
659
+
660
+ Yields:
661
+ Each distinct node in the expression graph, parents before children.
662
+ """
663
+ seen = set()
664
+ stack = [expr]
665
+ while stack:
666
+ node = stack.pop()
667
+ if id(node) in seen:
668
+ continue
669
+ seen.add(id(node))
670
+ yield node
671
+ stack.extend(node.children())
672
+
673
+
634
674
  class Constant(Leaf):
635
675
  """Constant value expression.
636
676
 
@@ -0,0 +1,14 @@
1
+ """Shared BibTeX entry for the jaxlie-backed Lie-group nodes.
2
+
3
+ The SO(3)/SE(3) exponential and logarithm maps in this package lower through
4
+ :mod:`jaxlie`; its authors ask users to cite the paper below. The entry lives
5
+ here once so ``so3.py`` and ``se3.py`` can both return it from ``citation()``.
6
+ """
7
+
8
+ JAXLIE_CITATION = r"""@inproceedings{yi2021iros,
9
+ title={Differentiable Factor Graph Optimization for Learning Smoothers},
10
+ author={Brent Yi and Michelle Lee and Alina Kloss and Roberto Mart\'in-Mart\'in and
11
+ Jeannette Bohg},
12
+ booktitle={2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
13
+ year={2021}
14
+ }"""
@@ -12,11 +12,12 @@ Note:
12
12
  SE3 tangent parameterization, so no reordering is needed during lowering.
13
13
  """
14
14
 
15
- from typing import Tuple, Union
15
+ from typing import List, Tuple, Union
16
16
 
17
17
  import numpy as np
18
18
 
19
19
  from ..expr import Expr, to_expr
20
+ from ._citations import JAXLIE_CITATION
20
21
 
21
22
 
22
23
  class SE3Exp(Expr):
@@ -81,6 +82,10 @@ class SE3Exp(Expr):
81
82
  def children(self):
82
83
  return [self.twist]
83
84
 
85
+ def citation(self) -> List[str]:
86
+ """Return the BibTeX citation for jaxlie, which backs this map's lowering."""
87
+ return [JAXLIE_CITATION]
88
+
84
89
  def canonicalize(self) -> "Expr":
85
90
  twist = self.twist.canonicalize()
86
91
  return SE3Exp(twist)
@@ -150,6 +155,10 @@ class SE3Log(Expr):
150
155
  def children(self):
151
156
  return [self.transform]
152
157
 
158
+ def citation(self) -> List[str]:
159
+ """Return the BibTeX citation for jaxlie, which backs this map's lowering."""
160
+ return [JAXLIE_CITATION]
161
+
153
162
  def canonicalize(self) -> "Expr":
154
163
  transform = self.transform.canonicalize()
155
164
  return SE3Log(transform)
@@ -6,11 +6,12 @@ group, enabling axis-angle to rotation matrix conversions and vice versa.
6
6
  Requires jaxlie: pip install openscvx[lie]
7
7
  """
8
8
 
9
- from typing import Tuple, Union
9
+ from typing import List, Tuple, Union
10
10
 
11
11
  import numpy as np
12
12
 
13
13
  from ..expr import Expr, to_expr
14
+ from ._citations import JAXLIE_CITATION
14
15
 
15
16
 
16
17
  class SO3Exp(Expr):
@@ -58,6 +59,10 @@ class SO3Exp(Expr):
58
59
  def children(self):
59
60
  return [self.omega]
60
61
 
62
+ def citation(self) -> List[str]:
63
+ """Return the BibTeX citation for jaxlie, which backs this map's lowering."""
64
+ return [JAXLIE_CITATION]
65
+
61
66
  def canonicalize(self) -> "Expr":
62
67
  omega = self.omega.canonicalize()
63
68
  return SO3Exp(omega)
@@ -116,6 +121,10 @@ class SO3Log(Expr):
116
121
  def children(self):
117
122
  return [self.rotation]
118
123
 
124
+ def citation(self) -> List[str]:
125
+ """Return the BibTeX citation for jaxlie, which backs this map's lowering."""
126
+ return [JAXLIE_CITATION]
127
+
119
128
  def canonicalize(self) -> "Expr":
120
129
  rotation = self.rotation.canonicalize()
121
130
  return SO3Log(rotation)
@@ -57,7 +57,7 @@ See also:
57
57
  """
58
58
 
59
59
  from dataclasses import dataclass
60
- from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union
60
+ from typing import TYPE_CHECKING, Callable, List, Optional, Tuple, Union
61
61
 
62
62
  import numpy as np
63
63
 
@@ -304,6 +304,21 @@ class STLExpr(Expr):
304
304
  # explicit `time` state). Currently raises
305
305
  # NotImplementedError at .over() time.
306
306
 
307
+ def citation(self) -> List[str]:
308
+ """Return the BibTeX citation for the GMSR robustness formulation."""
309
+ return [
310
+ r"""@misc{uzun2024gmsr,
311
+ title={Optimization with Temporal and Logical Specifications via Generalized
312
+ Mean-based Smooth Robustness Measures},
313
+ author={Uzun, Samet and Elango, Purnanand and Garoche, Pierre-Lo{\"i}c and
314
+ A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
315
+ year={2024},
316
+ eprint={2405.10996},
317
+ archivePrefix={arXiv},
318
+ primaryClass={math.OC}
319
+ }"""
320
+ ]
321
+
307
322
  def over(
308
323
  self,
309
324
  interval: "IntervalLike",
@@ -9,7 +9,7 @@ STL operators accept Constraint objects (predicates) and extract robustness
9
9
  expressions which are lowered to STLJax during compilation.
10
10
  """
11
11
 
12
- from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union
12
+ from typing import TYPE_CHECKING, Callable, List, Optional, Tuple, Union
13
13
 
14
14
  import numpy as np
15
15
 
@@ -53,6 +53,22 @@ class STLJaxExpr(Expr):
53
53
  Eventually, Always, or Until for actual STL specifications.
54
54
  """
55
55
 
56
+ def citation(self) -> List[str]:
57
+ """Return the BibTeX citation the stljax library asks its users to cite."""
58
+ return [
59
+ r"""@article{kapoor2025stlcg,
60
+ title={{STLCG++}: A Masking Approach for Differentiable Signal Temporal Logic
61
+ Specification},
62
+ author={Kapoor, Parv and Mizuta, Kazuki and Kang, Eunsuk and Leung, Karen},
63
+ journal={IEEE Robotics and Automation Letters},
64
+ volume={10},
65
+ number={9},
66
+ pages={9240--9247},
67
+ year={2025},
68
+ doi={10.1109/LRA.2025.3588389}
69
+ }"""
70
+ ]
71
+
56
72
  def over(
57
73
  self,
58
74
  interval: tuple[int, int],
@@ -117,3 +117,42 @@ class SymbolicProblem:
117
117
  2. Propagation dynamics have been set up
118
118
  """
119
119
  return self.constraints.is_categorized and self.dynamics_prop is not None
120
+
121
+ def citations(self) -> Dict[str, List[str]]:
122
+ """Collect BibTeX citations from every expression node in the problem.
123
+
124
+ Walks the dynamics, constraint, and propagation expression graphs and
125
+ gathers :meth:`~openscvx.symbolic.expr.expr.Expr.citation` from each
126
+ node, so :meth:`openscvx.Problem.citation` can credit the published
127
+ methods a problem actually uses (e.g. GMSR STL operators, jaxlie-backed
128
+ Lie-group maps). Works at either lifecycle stage: unsorted constraints
129
+ are scanned before preprocessing, categorized ones after.
130
+
131
+ Returns:
132
+ Mapping from node class name to the deduplicated BibTeX entries
133
+ cited by nodes of that name, containing only names that cite
134
+ anything. Same-named classes (e.g. the GMSR and stljax ``Or``)
135
+ share a key; their entries are merged.
136
+ """
137
+ from openscvx.symbolic.expr import walk
138
+
139
+ roots: List["Expr"] = [self.dynamics]
140
+ for optional in (self.dynamics_discrete, self.dynamics_prop):
141
+ if optional is not None:
142
+ roots.append(optional)
143
+ if self.algebraic_prop:
144
+ roots.extend(self.algebraic_prop.values())
145
+ c = self.constraints
146
+ roots.extend(
147
+ [*c.unsorted, *c.ctcs, *c.nodal, *c.nodal_convex, *c.cross_node, *c.cross_node_convex]
148
+ )
149
+
150
+ cited: Dict[str, List[str]] = {}
151
+ for root in roots:
152
+ for node in walk(root):
153
+ entries = node.citation()
154
+ if not entries:
155
+ continue
156
+ bucket = cited.setdefault(type(node).__name__, [])
157
+ bucket.extend(e for e in entries if e not in bucket)
158
+ return cited
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.3.dev55
3
+ Version: 0.5.3.dev57
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
@@ -275,27 +275,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
275
275
  Please cite the following works if you use the repository,
276
276
 
277
277
  ```tex
278
- @ARTICLE{hayner2025los,
279
- author={Hayner, Christopher R. and Carson III, John M. and Açıkmeşe, Behçet and Leung, Karen},
280
- journal={IEEE Robotics and Automation Letters},
281
- title={Continuous-Time Line-of-Sight Constrained Trajectory Planning for 6-Degree of Freedom Systems},
282
- year={2025},
283
- volume={},
284
- number={},
285
- pages={1-8},
286
- keywords={Robot sensing systems;Vectors;Vehicle dynamics;Line-of-sight propagation;Trajectory planning;Trajectory optimization;Quadrotors;Nonlinear dynamical systems;Heuristic algorithms;Convergence;Constrained Motion Planning;Optimization and Optimal Control;Aerial Systems: Perception and Autonomy},
287
- doi={10.1109/LRA.2025.3545299}}
278
+ @misc{hayner2026openscvxopensourcemodularextensible,
279
+ title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
280
+ author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
281
+ year={2026},
282
+ eprint={2608.21631},
283
+ archivePrefix={arXiv},
284
+ primaryClass={cs.RO},
285
+ url={https://arxiv.org/abs/2608.21631},
286
+ }
288
287
  ```
289
288
 
290
289
  ```tex
291
- @misc{elango2024ctscvx,
292
- title={Successive Convexification for Trajectory Optimization with Continuous-Time Constraint Satisfaction},
293
- author={Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
294
- year={2024},
295
- eprint={2404.16826},
296
- archivePrefix={arXiv},
297
- primaryClass={math.OC},
298
- url={https://arxiv.org/abs/2404.16826},
290
+ @article{elango2025ctcs,
291
+ title = {Continuous-time successive convexification for constrained trajectory optimization},
292
+ journal = {Automatica},
293
+ volume = {180},
294
+ pages = {112464},
295
+ year = {2025},
296
+ issn = {0005-1098},
297
+ doi = {https://doi.org/10.1016/j.automatica.2025.112464},
298
+ url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
299
+ author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
300
+ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
299
301
  }
300
302
  ```
301
303
 
@@ -312,3 +314,5 @@ Please cite the following works if you use the repository,
312
314
  month = mar,
313
315
  }
314
316
  ```
317
+
318
+ Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
@@ -353,6 +353,7 @@ openscvx/symbolic/expr/time.py
353
353
  openscvx/symbolic/expr/variable.py
354
354
  openscvx/symbolic/expr/vmap.py
355
355
  openscvx/symbolic/expr/lie/__init__.py
356
+ openscvx/symbolic/expr/lie/_citations.py
356
357
  openscvx/symbolic/expr/lie/adjoint.py
357
358
  openscvx/symbolic/expr/lie/se3.py
358
359
  openscvx/symbolic/expr/lie/so3.py
@@ -434,6 +435,7 @@ tests/brachistochrone_analytical.py
434
435
  tests/conftest.py
435
436
  tests/hohmann_analytical.py
436
437
  tests/test_autotuning.py
438
+ tests/test_citation.py
437
439
  tests/test_cvxpygen_optional.py
438
440
  tests/test_discretization.py
439
441
  tests/test_examples.py
@@ -455,6 +457,7 @@ tests/algorithms/test_iteration_fn_jit.py
455
457
  tests/algorithms/test_iteration_fn_parity.py
456
458
  tests/algorithms/test_make_solve_loop.py
457
459
  tests/algorithms/autotuner/__init__.py
460
+ tests/algorithms/autotuner/test_citation.py
458
461
  tests/algorithms/autotuner/test_defaults_agreement.py
459
462
  tests/algorithms/autotuner/test_hyper_overrides.py
460
463
  tests/algorithms/autotuner/test_update_weights_jit.py
@@ -486,6 +489,7 @@ tests/solvers/test_qpax_ptr_solver.py
486
489
  tests/solvers/test_subproblem_pytree.py
487
490
  tests/symbolic/__init__.py
488
491
  tests/symbolic/test_augmentation.py
492
+ tests/symbolic/test_citations.py
489
493
  tests/symbolic/test_gmsr.py
490
494
  tests/symbolic/test_hashing.py
491
495
  tests/symbolic/test_latex_formulation.py