openscvx 0.4.1.dev12__tar.gz → 0.4.1.dev43__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 (304) hide show
  1. {openscvx-0.4.1.dev12/openscvx.egg-info → openscvx-0.4.1.dev43}/PKG-INFO +109 -183
  2. openscvx-0.4.1.dev43/README.md +233 -0
  3. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/logo.py +30 -20
  4. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/logo_utils/svg_path_utils.py +8 -3
  5. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/plotting_viser.py +234 -162
  6. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/__init__.py +11 -0
  7. openscvx-0.4.1.dev43/openscvx/__main__.py +54 -0
  8. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/_version.py +3 -3
  9. openscvx-0.4.1.dev43/openscvx/algorithms/optimization_results.py +358 -0
  10. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/config.py +119 -2
  11. openscvx-0.4.1.dev43/openscvx/loader.py +303 -0
  12. openscvx-0.4.1.dev43/openscvx/symbolic/parser/__init__.py +53 -0
  13. openscvx-0.4.1.dev43/openscvx/symbolic/parser/_registry.py +56 -0
  14. openscvx-0.4.1.dev43/openscvx/symbolic/parser/array.py +42 -0
  15. openscvx-0.4.1.dev43/openscvx/symbolic/parser/constraint.py +62 -0
  16. openscvx-0.4.1.dev43/openscvx/symbolic/parser/lie.py +73 -0
  17. openscvx-0.4.1.dev43/openscvx/symbolic/parser/linalg.py +62 -0
  18. openscvx-0.4.1.dev43/openscvx/symbolic/parser/logic.py +83 -0
  19. openscvx-0.4.1.dev43/openscvx/symbolic/parser/math.py +149 -0
  20. openscvx-0.4.1.dev43/openscvx/symbolic/parser/parser.py +664 -0
  21. openscvx-0.4.1.dev43/openscvx/symbolic/parser/spatial.py +28 -0
  22. openscvx-0.4.1.dev43/openscvx/symbolic/parser/stl.py +14 -0
  23. openscvx-0.4.1.dev43/openscvx/symbolic/parser/tokenizer.py +178 -0
  24. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43/openscvx.egg-info}/PKG-INFO +109 -183
  25. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx.egg-info/SOURCES.txt +33 -1
  26. openscvx-0.4.1.dev43/openscvx.egg-info/entry_points.txt +2 -0
  27. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx.egg-info/requires.txt +1 -0
  28. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/pyproject.toml +4 -0
  29. openscvx-0.4.1.dev43/tests/fixtures/brachistochrone.json +59 -0
  30. openscvx-0.4.1.dev43/tests/fixtures/brachistochrone.yaml +49 -0
  31. openscvx-0.4.1.dev43/tests/symbolic/parser/__init__.py +0 -0
  32. openscvx-0.4.1.dev43/tests/symbolic/parser/test_array.py +101 -0
  33. openscvx-0.4.1.dev43/tests/symbolic/parser/test_constraint.py +169 -0
  34. openscvx-0.4.1.dev43/tests/symbolic/parser/test_lie.py +157 -0
  35. openscvx-0.4.1.dev43/tests/symbolic/parser/test_linalg.py +160 -0
  36. openscvx-0.4.1.dev43/tests/symbolic/parser/test_load.py +322 -0
  37. openscvx-0.4.1.dev43/tests/symbolic/parser/test_logic.py +173 -0
  38. openscvx-0.4.1.dev43/tests/symbolic/parser/test_math.py +225 -0
  39. openscvx-0.4.1.dev43/tests/symbolic/parser/test_parser.py +487 -0
  40. openscvx-0.4.1.dev43/tests/symbolic/parser/test_spatial.py +83 -0
  41. openscvx-0.4.1.dev43/tests/symbolic/parser/test_stl.py +44 -0
  42. openscvx-0.4.1.dev43/tests/symbolic/parser/test_tokenizer.py +501 -0
  43. openscvx-0.4.1.dev43/tests/symbolic/parser/test_vmap.py +203 -0
  44. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_examples.py +10 -0
  45. openscvx-0.4.1.dev43/tests/test_loader.py +326 -0
  46. openscvx-0.4.1.dev43/tests/test_optimization_results.py +186 -0
  47. openscvx-0.4.1.dev12/README.md +0 -308
  48. openscvx-0.4.1.dev12/openscvx/algorithms/optimization_results.py +0 -218
  49. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/assets/logo.svg +0 -0
  50. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/release-drafter.yml +0 -0
  51. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/_docs.yml +0 -0
  52. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/branch-name.yml +0 -0
  53. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/docs.yml +0 -0
  54. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/lint.yml +0 -0
  55. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/nightly.yml +0 -0
  56. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/release-drafter.yml +0 -0
  57. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/release.yml +0 -0
  58. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/tests-integration.yml +0 -0
  59. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.github/workflows/tests-unit.yml +0 -0
  60. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/.gitignore +0 -0
  61. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/CONTRIBUTING.md +0 -0
  62. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/LICENSE +0 -0
  63. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/constraint_reformulation.md +0 -0
  64. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/control_parameterization.md +0 -0
  65. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/discretization.md +0 -0
  66. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/ocp.md +0 -0
  67. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/scvx.md +0 -0
  68. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/Foundations/time_dilation.md +0 -0
  69. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UnderTheHood/lowering_architecture.md +0 -0
  70. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  71. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/00_introduction.md +0 -0
  72. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  73. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  74. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  75. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  76. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/05_visualization.md +0 -0
  77. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/06_logic.md +0 -0
  78. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/UsersGuide/07_lie.md +0 -0
  79. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/favicon.png +0 -0
  80. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/ct-scvx_dark.png +0 -0
  81. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/ct-scvx_light.png +0 -0
  82. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/ctcs_dark.png +0 -0
  83. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/ctcs_light.png +0 -0
  84. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/problem_class_dark.png +0 -0
  85. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/images/problem_class_light.png +0 -0
  86. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/assets/logo.svg +0 -0
  87. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/citation.md +0 -0
  88. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/examples.md +0 -0
  89. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/getting-started.md +0 -0
  90. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/index.md +0 -0
  91. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/docs/javascripts/mathjax.js +0 -0
  92. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/abstract/brachistochrone.py +0 -0
  93. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/arm/three_link_arm.py +0 -0
  94. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/car/dubins_car.py +0 -0
  95. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/car/dubins_car_conditional.py +0 -0
  96. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/car/dubins_car_disjoint.py +0 -0
  97. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/car/dubins_car_stljax.py +0 -0
  98. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/cinema_vp.py +0 -0
  99. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/dr_double_integrator.py +0 -0
  100. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/dr_vp.py +0 -0
  101. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/dr_vp_nodal.py +0 -0
  102. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/dr_vp_polytope.py +0 -0
  103. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/drone_racing.py +0 -0
  104. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/logo_utils/acl_logo.svg +0 -0
  105. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/obstacle_avoidance.py +0 -0
  106. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  107. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/drone/obstacle_avoidance_vmap.py +0 -0
  108. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/plotting.py +0 -0
  109. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  110. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  111. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  112. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/cinema_vp_realtime.py +0 -0
  113. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/drone_racing_realtime.py +0 -0
  114. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/dubins_car_realtime.py +0 -0
  115. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  116. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/rocket/3DoF_pdg.py +0 -0
  117. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/examples/spacecraft/proxops_cw.py +0 -0
  118. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/ctlos_cine.gif +0 -0
  119. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/ctlos_dr.gif +0 -0
  120. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/dtlos_cine.gif +0 -0
  121. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/dtlos_dr.gif +0 -0
  122. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/openscvx_logo.svg +0 -0
  123. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/openscvx_logo_square.png +0 -0
  124. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/oscvx_structure_full_dark.svg +0 -0
  125. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/figures/video_preview.png +0 -0
  126. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/__init__.py +0 -0
  127. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/1-background.avif +0 -0
  128. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
  129. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
  130. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
  131. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
  132. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/2-mars.avif +0 -0
  133. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
  134. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
  135. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
  136. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
  137. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/3-moon.avif +0 -0
  138. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
  139. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
  140. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
  141. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
  142. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
  143. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
  144. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
  145. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
  146. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
  147. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/5-space.avif +0 -0
  148. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
  149. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
  150. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
  151. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
  152. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/6-earth.avif +0 -0
  153. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
  154. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
  155. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
  156. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
  157. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/javascripts/parallax.js +0 -0
  158. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/logo.svg +0 -0
  159. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/stylesheets/custom.css +0 -0
  160. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/assets/stylesheets/parallax.css +0 -0
  161. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/home.html +0 -0
  162. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/main.html +0 -0
  163. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/partials/parallax/hero.html +0 -0
  164. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/material/overrides/partials/parallax.html +0 -0
  165. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/mkdocs.yml +0 -0
  166. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/algorithms/__init__.py +0 -0
  167. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/algorithms/autotuning.py +0 -0
  168. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/algorithms/base.py +0 -0
  169. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/algorithms/penalized_trust_region.py +0 -0
  170. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/discretization/__init__.py +0 -0
  171. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/discretization/discretization.py +0 -0
  172. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/expert/__init__.py +0 -0
  173. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/expert/byof.py +0 -0
  174. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/expert/lowering.py +0 -0
  175. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/expert/validation.py +0 -0
  176. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/init/__init__.py +0 -0
  177. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/init/interpolation.py +0 -0
  178. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/integrators/__init__.py +0 -0
  179. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/integrators/runge_kutta.py +0 -0
  180. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/__init__.py +0 -0
  181. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/cvxpy_constraints.py +0 -0
  182. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/cvxpy_variables.py +0 -0
  183. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/dynamics.py +0 -0
  184. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/jax_constraints.py +0 -0
  185. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/parameters.py +0 -0
  186. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/problem.py +0 -0
  187. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/lowered/unified.py +0 -0
  188. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/__init__.py +0 -0
  189. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/plotting.py +0 -0
  190. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/scp_iteration.py +0 -0
  191. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/__init__.py +0 -0
  192. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/animated.py +0 -0
  193. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/plotly_integration.py +0 -0
  194. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/primitives.py +0 -0
  195. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/scp.py +0 -0
  196. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/plotting/viser/server.py +0 -0
  197. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/problem.py +0 -0
  198. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/propagation/__init__.py +0 -0
  199. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/propagation/post_processing.py +0 -0
  200. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/propagation/propagation.py +0 -0
  201. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/solvers/__init__.py +0 -0
  202. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/solvers/base.py +0 -0
  203. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/solvers/ptr_solver.py +0 -0
  204. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/__init__.py +0 -0
  205. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/augmentation.py +0 -0
  206. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/builder.py +0 -0
  207. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/constraint_set.py +0 -0
  208. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/__init__.py +0 -0
  209. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/arithmetic.py +0 -0
  210. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/array.py +0 -0
  211. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/constraint.py +0 -0
  212. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/control.py +0 -0
  213. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/expr.py +0 -0
  214. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  215. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  216. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/lie/se3.py +0 -0
  217. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/lie/so3.py +0 -0
  218. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/linalg.py +0 -0
  219. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/logic.py +0 -0
  220. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/math.py +0 -0
  221. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/spatial.py +0 -0
  222. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/state.py +0 -0
  223. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/stl.py +0 -0
  224. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/variable.py +0 -0
  225. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/expr/vmap.py +0 -0
  226. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/hashing.py +0 -0
  227. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lower.py +0 -0
  228. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/__init__.py +0 -0
  229. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  230. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  231. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  232. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  233. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  234. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  235. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  236. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  237. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  238. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  239. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  240. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  241. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  242. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  243. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  244. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  245. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  246. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  247. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  248. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  249. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  250. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  251. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  252. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  253. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  254. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  255. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  256. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  257. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/preprocessing.py +0 -0
  258. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/problem.py +0 -0
  259. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/time.py +0 -0
  260. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/symbolic/unified.py +0 -0
  261. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/__init__.py +0 -0
  262. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/cache.py +0 -0
  263. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/caching.py +0 -0
  264. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/printing.py +0 -0
  265. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/profiling.py +0 -0
  266. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx/utils/utils.py +0 -0
  267. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx.egg-info/dependency_links.txt +0 -0
  268. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/openscvx.egg-info/top_level.txt +0 -0
  269. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/scripts/gen_example_pages.py +0 -0
  270. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/scripts/gen_ref_pages.py +0 -0
  271. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/setup.cfg +0 -0
  272. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/__init__.py +0 -0
  273. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/brachistochrone_analytical.py +0 -0
  274. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/__init__.py +0 -0
  275. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/__init__.py +0 -0
  276. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_arithmetic.py +0 -0
  277. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_array.py +0 -0
  278. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_constraint.py +0 -0
  279. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_expr.py +0 -0
  280. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_lie.py +0 -0
  281. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_linalg.py +0 -0
  282. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_logic.py +0 -0
  283. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_math.py +0 -0
  284. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_node_reference.py +0 -0
  285. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_parameters.py +0 -0
  286. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_scaling.py +0 -0
  287. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_spatial.py +0 -0
  288. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_variable.py +0 -0
  289. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/expr/test_vmap.py +0 -0
  290. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_augmentation.py +0 -0
  291. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_hashing.py +0 -0
  292. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_lower_cvxpy.py +0 -0
  293. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_lower_jax.py +0 -0
  294. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_preprocessing.py +0 -0
  295. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/symbolic/test_unified.py +0 -0
  296. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_autotuning.py +0 -0
  297. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_brachistochrone.py +0 -0
  298. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_cvxpygen_optional.py +0 -0
  299. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_discretization.py +0 -0
  300. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_expert.py +0 -0
  301. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_init.py +0 -0
  302. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_integrators.py +0 -0
  303. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_plotting.py +0 -0
  304. {openscvx-0.4.1.dev12 → openscvx-0.4.1.dev43}/tests/test_propagation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.4.1.dev12
3
+ Version: 0.4.1.dev43
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
@@ -21,6 +21,7 @@ Requires-Dist: absl-py
21
21
  Requires-Dist: flatbuffers
22
22
  Requires-Dist: viser
23
23
  Requires-Dist: matplotlib
24
+ Requires-Dist: pyyaml
24
25
  Provides-Extra: gui
25
26
  Requires-Dist: pyqtgraph; extra == "gui"
26
27
  Requires-Dist: PyQt5; extra == "gui"
@@ -59,248 +60,173 @@ Dynamic: license-file
59
60
  <!-- PROJECT LOGO -->
60
61
  <br />
61
62
 
62
- <!-- GETTING STARTED -->
63
- ## Getting Started
63
+ ## What is OpenSCvx
64
64
 
65
- ### Installation
65
+ OpenSCvx is a general python-based successive convexification implementation which uses a JAX backend.
66
+ It is designed to be easy to use for anyone and fast enough for everyone, all while being open and modular for contributors.
66
67
 
67
- <details>
68
- <summary>Stable</summary>
68
+ OpenSCvx provides a clean symbolic interface for problem definition which should be intuitive to users of NumPy, JAX, and CVXPY. This allows us to hide a lot of the under-the-hood magic away from the user while also providing a modular architecture, enabling contributors to focus on the algorithms without worrying about interface design.
69
69
 
70
- To grab the latest stable release simply run
70
+ OpenSCvx makes heavy use of [JAX](https://github.com/jax-ml/jax) to efficiently perform calculations in the successive convex programming loop through automatic differentiation, ahead-of-time (AOT) compilation, vectorization, and GPU acceleration. Behind this is a [CVXPY](https://github.com/cvxpy/cvxpy/)-based backend to solve the convex subproblems.
71
71
 
72
- ```sh
73
- pip install openscvx
74
- ```
72
+ This is an open project and is under active development. Try it out, give us feedback, and help contribute.
75
73
 
76
- to install OpenSCVx in your python environment.
74
+ ```python
75
+ import openscvx as ox
77
76
 
78
- Or using uv:
77
+ g = 9.81
79
78
 
80
- ```sh
81
- uv pip install openscvx
82
- ```
79
+ # Define states
80
+ position = ox.State("position", shape=(2,))
81
+ position.min = [0.0, 0.0]
82
+ position.max = [10.0, 10.0]
83
+ position.initial = [0.0, 10.0]
84
+ position.final = [10.0, 5.0]
83
85
 
84
- For optional dependencies:
86
+ velocity = ox.State("velocity", shape=(1,))
87
+ velocity.min = [0.0]
88
+ velocity.max = [10.0]
89
+ velocity.initial = [0.0]
90
+ velocity.final = [ox.Free(10.0)]
85
91
 
86
- ```sh
87
- pip install openscvx[gui,cvxpygen]
88
- # or with uv
89
- uv pip install openscvx[gui,cvxpygen]
90
- ```
91
- </details>
92
-
93
- <details>
94
- <summary>Nightly</summary>
92
+ # Define control (angle from vertical)
93
+ theta = ox.Control("theta", shape=(1,))
94
+ theta.min = [0.0]
95
+ theta.max = [1.755]
96
+ theta.guess = [[0.09], [1.755]]
95
97
 
96
- To install the latest development version (nightly):
98
+ # Define dynamics
99
+ dynamics = {
100
+ "position": ox.Concat(
101
+ velocity * ox.Sin(theta),
102
+ -velocity * ox.Cos(theta),
103
+ ),
104
+ "velocity": g * ox.Cos(theta),
105
+ }
97
106
 
98
- ```sh
99
- pip install --pre openscvx
107
+ constraints = []
108
+ for state in [position, velocity]:
109
+ constraints.append(ox.ctcs(state <= state.max))
110
+ constraints.append(ox.ctcs(state.min <= state))
111
+
112
+ # Build and solve
113
+ problem = ox.Problem(
114
+ dynamics=dynamics,
115
+ constraints=constraints,
116
+ states=[position, velocity],
117
+ controls=[theta],
118
+ time=ox.Time(initial=0.0, final=ox.Minimize(2.0), min=0.0, max=2.0),
119
+ N=2,
120
+ )
121
+
122
+
123
+ problem.initialize()
124
+ results = problem.solve()
125
+ results = problem.post_process()
100
126
  ```
101
127
 
102
- With optional dependencies:
128
+ ## Installation
103
129
 
104
- ```sh
105
- pip install --pre openscvx[gui,cvxpygen]
106
- ```
130
+ OpenSCvx is available on [PyPI](https://pypi.org/project/openscvx/) and can be trivially installed with pip.
107
131
 
108
- Or using uv:
132
+ It is recommended to install OpenSCvx inside a virtual environment (venv, conda, uv, *etc.*). If you don't already have one set up:
109
133
 
110
- ```sh
111
- uv pip install --pre openscvx
112
- # With optional dependencies
113
- uv pip install --pre openscvx[gui,cvxpygen]
134
+ ```bash
135
+ python3 -m venv .venv
136
+ source .venv/bin/activate
114
137
  ```
115
138
 
116
- **Note:** The `--pre` flag tells pip/uv to install pre-release versions (e.g., `1.2.4.dev3`) from PyPI.
117
-
118
- Alternatively, for local development with the latest source:
119
-
120
- ```sh
121
- # Clone the repo
122
- git clone https://github.com/OpenSCvx/OpenSCvx.git
123
- cd OpenSCvx
139
+ ### Using pip
124
140
 
125
- # Install in editable/development mode
126
- pip install -e .
127
- # or with uv
128
- uv pip install -e .
141
+ ```bash
142
+ pip install openscvx
129
143
  ```
130
144
 
131
- </details>
145
+ ### Using uv
132
146
 
133
- ### Dependencies
147
+ If you have [uv installed](https://docs.astral.sh/uv/getting-started/installation/) you can prefix the commands with `uv` for faster installation:
134
148
 
135
- The main packages are:
136
-
137
- - `cvxpy` - is used to formulate and solve the convex subproblems
138
- - `jax` - is used for determining the Jacobians using automatic differentiation, vectorization, and ahead-of-time (AOT) compilation of the dynamics and their Jacobians
139
- - `numpy` - is used for numerical operations
140
- - `diffrax` - is used for the numerical integration of the dynamics
141
- - `termcolor` - is used for pretty command line output
142
- - `plotly` - is used for all visualizations
143
-
144
- These will be installed automatically, but can be installed via conda or pip if you are building from source.
149
+ ```bash
150
+ uv pip install openscvx
151
+ ```
145
152
 
146
- #### GUI Dependencies (Optional)
153
+ > [!TIP]
154
+ > **Optional Dependencies**
155
+ >
156
+ > For GUI support or CVXPYGen code generation:
157
+ > ```bash
158
+ > pip install openscvx[gui,cvxpygen]
159
+ > ```
147
160
 
148
- For interactive 3D plotting and real-time visualization, additional packages are required:
161
+ > [!TIP]
162
+ > **Nightly Builds**
163
+ >
164
+ > To install the latest development version (nightly), use the `--pre` flag:
165
+ > ```bash
166
+ > pip install --pre openscvx
167
+ > ```
149
168
 
150
- - `pyqtgraph` - is used for interactive 3D plotting and real-time visualization
151
- - `PyQt5` - provides the Qt5 GUI framework for pyqtgraph
152
- - `scipy` - is used for spatial transformations in plotting functions
153
- - `PyOpenGL` - provides OpenGL bindings for Python, required for 3D plotting
154
- - `PyOpenGL_accelerate` - (optional) speeds up PyOpenGL
169
+ ## Installing From Source
155
170
 
171
+ ### Using pip
156
172
 
157
- For local development:
173
+ ```bash
174
+ git clone https://github.com/OpenSCvx/OpenSCvx.git
175
+ cd OpenSCvx
158
176
 
159
- ```sh
160
- pip install -e ".[gui]"
177
+ python3 -m venv .venv
178
+ source .venv/bin/activate
179
+ pip install -e .
161
180
  ```
162
181
 
163
- #### CVXPYGen Dependencies (Optional)
164
-
165
- For code generation and faster solver performance, CVXPYGen can be installed:
166
-
167
- - `cvxpygen` - enables code generation for faster solver performance
168
- - `qocogen` - custom solver backend for CVXPYGen (included with cvxpygen extras)
182
+ ### Using uv
169
183
 
170
- To install with CVXPYGen support:
171
-
172
- ```sh
173
- pip install openscvx[cvxpygen]
174
- ```
175
-
176
- Or for both GUI and CVXPYGen:
184
+ ```bash
185
+ git clone https://github.com/OpenSCvx/OpenSCvx.git
186
+ cd OpenSCvx
177
187
 
178
- ```sh
179
- pip install openscvx[gui,cvxpygen]
188
+ uv venv
189
+ source .venv/bin/activate
190
+ uv pip install -e .
180
191
  ```
181
192
 
182
- CVXPYGen features include:
183
- - Automatic C++ code generation for optimization problems
184
- - Faster solver performance through compiled code
185
- - Support for custom solver backends like QOCOGen
193
+ ## Getting Started
186
194
 
187
- ### Local Development
195
+ Check out the OpenSCvx documentation to help you get started
188
196
 
189
- This git repository can be installed using https
197
+ - [Getting Started Docs](https://openscvx.github.io/OpenSCvx/latest/getting-started/)
198
+ - [Users Guide](https://openscvx.github.io/OpenSCvx/latest/UsersGuide/00_introduction/)
199
+ - [API Reference](https://openscvx.github.io/OpenSCvx/latest/Reference/problem/)
190
200
 
191
- ```sh
192
- git clone https://github.com/OpenSCvx/OpenSCvx.git
193
- ```
201
+ ### Running the Examples
194
202
 
195
- or ssh
203
+ We also have a selection of problems in the `examples/` folder as well as on the [Examples page](https://openscvx.github.io/OpenSCvx/latest/Examples/abstract/brachistochrone/) of the documentation. The example trajectory optimization problems are grouped by application and represent some of the problem types that can be solved by OpenSCvx.
196
204
 
197
- ```sh
198
- git clone git@github.com:OpenSCvx/OpenSCvx.git
199
- ```
205
+ > [!Note]
206
+ > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
200
207
 
201
- Dependencies can then be installed using Conda or Pip
202
-
203
- <details>
204
- <summary>Via Conda</summary>
205
-
206
- 1. Clone the repo using https or ssh
207
- 2. Create a conda environment with Python:
208
- ```sh
209
- conda create -n openscvx python>=3.9
210
- ```
211
- 3. Activate the environment:
212
- ```sh
213
- conda activate openscvx
214
- ```
215
- 4. Install the package with dependencies:
216
- ```sh
217
- pip install -e .
218
- ```
219
-
220
- Or install with optional dependencies:
221
- ```sh
222
- pip install -e ".[gui,cvxpygen]"
223
- ```
224
- </details>
225
-
226
- <details>
227
- <summary>Via uv</summary>
228
-
229
- 1. Prerequisites
230
- - Install [uv](https://docs.astral.sh/uv/getting-started/installation/)
231
- 2. Clone the repo using https or ssh
232
- 3. Create virtual environment and install the package:
233
- ```sh
234
- uv venv
235
- source .venv/bin/activate # On Windows: .venv\Scripts\activate
236
- uv pip install -e .
237
- ```
238
-
239
- Or install with optional dependencies:
240
- ```sh
241
- uv pip install -e ".[gui,cvxpygen]"
242
- ```
243
- </details>
244
-
245
- <details>
246
- <summary>Via pip</summary>
247
-
248
- 1. Prerequisites
249
- Python >= 3.9
250
- 2. Clone the repo using https or ssh
251
- 3. Create virtual environment (called `venv` here) and source it
252
- ```sh
253
- python3 -m venv venv
254
- source venv/bin/activate
255
- ```
256
- 4. Install the package with dependencies:
257
- ```sh
258
- pip install -e .
259
- ```
260
-
261
- Or install with optional dependencies:
262
- ```sh
263
- pip install -e ".[gui,cvxpygen]"
264
- ```
265
- </details>
266
-
267
- ### Running Trajectory Optimization
268
-
269
- See `examples/` folder for several example trajectory optimization problems grouped by application.
270
208
  To run a problem simply run any of the examples directly, for example:
271
209
 
272
210
  ```sh
273
211
  python3 examples/abstract/brachistochrone.py
274
212
  ```
275
213
 
276
- > **Note:** To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Local Development](#local-development) section above for detailed installation instructions.
277
-
278
214
  and adjust the plotting as needed.
279
215
 
280
216
  Check out the problem definitions inside `examples/` to see how to define your own problems.
281
217
 
282
218
  ## Code Structure
283
- <img src="figures/oscvx_structure_full_dark.svg" width="1200"/>
284
-
285
- ## ToDos
286
219
 
287
- - [X] Standardized Vehicle and Constraint classes
288
- - [X] Implement QOCOGen with CVPYGEN
289
- - [X] Non-Dilated Time Propagation
290
- - [X] Save and reload the compiled JAX code
291
- - [x] Unified Mathematical Interface
292
- - [ ] Auto-SCvx Weight Tuning
293
- - [ ] Compiled at the subproblem level with JAX
294
- - [ ] Single Shot propagation
220
+ <img src="figures/oscvx_structure_full_dark.svg" width="1200"/>
295
221
 
296
222
  ## What is implemented
297
223
 
298
224
  This repo has the following features:
299
225
 
300
226
  1. Free Final Time
301
- 2. Fully adaptive time dilation (```s``` is appended to the control vector)
227
+ 2. Fully adaptive time dilation (`s` is appended to the control vector)
302
228
  3. Continuous-Time Constraint Satisfaction
303
- 4. FOH and ZOH exact discretization (```t``` is a state so you can bring your own scheme)
229
+ 4. FOH and ZOH exact discretization (`t` is a state so you can bring your own scheme)
304
230
  6. Vectorized and Ahead-of-Time (AOT) Compiled Multishooting Discretization
305
231
  7. JAX Autodiff for Jacobians
306
232
 
@@ -0,0 +1,233 @@
1
+ <a id="readme-top"></a>
2
+
3
+ <img src="figures/openscvx_logo.svg" width="1200"/>
4
+ <p align="center">
5
+ <a href="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/lint.yml"><img src="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/lint.yml/badge.svg"/></a>
6
+ <a href="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-unit.yml"><img src="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-unit.yml/badge.svg"/></a>
7
+ <a href="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-integration.yml"><img src="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-integration.yml/badge.svg"/></a>
8
+ <a href="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/nightly.yml"><img src="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/nightly.yml/badge.svg"/></a>
9
+ <a href="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/release.yml"><img src="https://github.com/OpenSCvx/OpenSCvx/actions/workflows/release.yml/badge.svg?event=release"/></a>
10
+ </p>
11
+ <p align="center">
12
+ <a href="https://arxiv.org/abs/2410.22596"><img src="http://img.shields.io/badge/arXiv-2410.22596-B31B1B.svg"/></a>
13
+ <a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache 2.0"/></a>
14
+ </p>
15
+
16
+ <!-- PROJECT LOGO -->
17
+ <br />
18
+
19
+ ## What is OpenSCvx
20
+
21
+ OpenSCvx is a general python-based successive convexification implementation which uses a JAX backend.
22
+ It is designed to be easy to use for anyone and fast enough for everyone, all while being open and modular for contributors.
23
+
24
+ OpenSCvx provides a clean symbolic interface for problem definition which should be intuitive to users of NumPy, JAX, and CVXPY. This allows us to hide a lot of the under-the-hood magic away from the user while also providing a modular architecture, enabling contributors to focus on the algorithms without worrying about interface design.
25
+
26
+ OpenSCvx makes heavy use of [JAX](https://github.com/jax-ml/jax) to efficiently perform calculations in the successive convex programming loop through automatic differentiation, ahead-of-time (AOT) compilation, vectorization, and GPU acceleration. Behind this is a [CVXPY](https://github.com/cvxpy/cvxpy/)-based backend to solve the convex subproblems.
27
+
28
+ This is an open project and is under active development. Try it out, give us feedback, and help contribute.
29
+
30
+ ```python
31
+ import openscvx as ox
32
+
33
+ g = 9.81
34
+
35
+ # Define states
36
+ position = ox.State("position", shape=(2,))
37
+ position.min = [0.0, 0.0]
38
+ position.max = [10.0, 10.0]
39
+ position.initial = [0.0, 10.0]
40
+ position.final = [10.0, 5.0]
41
+
42
+ velocity = ox.State("velocity", shape=(1,))
43
+ velocity.min = [0.0]
44
+ velocity.max = [10.0]
45
+ velocity.initial = [0.0]
46
+ velocity.final = [ox.Free(10.0)]
47
+
48
+ # Define control (angle from vertical)
49
+ theta = ox.Control("theta", shape=(1,))
50
+ theta.min = [0.0]
51
+ theta.max = [1.755]
52
+ theta.guess = [[0.09], [1.755]]
53
+
54
+ # Define dynamics
55
+ dynamics = {
56
+ "position": ox.Concat(
57
+ velocity * ox.Sin(theta),
58
+ -velocity * ox.Cos(theta),
59
+ ),
60
+ "velocity": g * ox.Cos(theta),
61
+ }
62
+
63
+ constraints = []
64
+ for state in [position, velocity]:
65
+ constraints.append(ox.ctcs(state <= state.max))
66
+ constraints.append(ox.ctcs(state.min <= state))
67
+
68
+ # Build and solve
69
+ problem = ox.Problem(
70
+ dynamics=dynamics,
71
+ constraints=constraints,
72
+ states=[position, velocity],
73
+ controls=[theta],
74
+ time=ox.Time(initial=0.0, final=ox.Minimize(2.0), min=0.0, max=2.0),
75
+ N=2,
76
+ )
77
+
78
+
79
+ problem.initialize()
80
+ results = problem.solve()
81
+ results = problem.post_process()
82
+ ```
83
+
84
+ ## Installation
85
+
86
+ OpenSCvx is available on [PyPI](https://pypi.org/project/openscvx/) and can be trivially installed with pip.
87
+
88
+ It is recommended to install OpenSCvx inside a virtual environment (venv, conda, uv, *etc.*). If you don't already have one set up:
89
+
90
+ ```bash
91
+ python3 -m venv .venv
92
+ source .venv/bin/activate
93
+ ```
94
+
95
+ ### Using pip
96
+
97
+ ```bash
98
+ pip install openscvx
99
+ ```
100
+
101
+ ### Using uv
102
+
103
+ If you have [uv installed](https://docs.astral.sh/uv/getting-started/installation/) you can prefix the commands with `uv` for faster installation:
104
+
105
+ ```bash
106
+ uv pip install openscvx
107
+ ```
108
+
109
+ > [!TIP]
110
+ > **Optional Dependencies**
111
+ >
112
+ > For GUI support or CVXPYGen code generation:
113
+ > ```bash
114
+ > pip install openscvx[gui,cvxpygen]
115
+ > ```
116
+
117
+ > [!TIP]
118
+ > **Nightly Builds**
119
+ >
120
+ > To install the latest development version (nightly), use the `--pre` flag:
121
+ > ```bash
122
+ > pip install --pre openscvx
123
+ > ```
124
+
125
+ ## Installing From Source
126
+
127
+ ### Using pip
128
+
129
+ ```bash
130
+ git clone https://github.com/OpenSCvx/OpenSCvx.git
131
+ cd OpenSCvx
132
+
133
+ python3 -m venv .venv
134
+ source .venv/bin/activate
135
+ pip install -e .
136
+ ```
137
+
138
+ ### Using uv
139
+
140
+ ```bash
141
+ git clone https://github.com/OpenSCvx/OpenSCvx.git
142
+ cd OpenSCvx
143
+
144
+ uv venv
145
+ source .venv/bin/activate
146
+ uv pip install -e .
147
+ ```
148
+
149
+ ## Getting Started
150
+
151
+ Check out the OpenSCvx documentation to help you get started
152
+
153
+ - [Getting Started Docs](https://openscvx.github.io/OpenSCvx/latest/getting-started/)
154
+ - [Users Guide](https://openscvx.github.io/OpenSCvx/latest/UsersGuide/00_introduction/)
155
+ - [API Reference](https://openscvx.github.io/OpenSCvx/latest/Reference/problem/)
156
+
157
+ ### Running the Examples
158
+
159
+ We also have a selection of problems in the `examples/` folder as well as on the [Examples page](https://openscvx.github.io/OpenSCvx/latest/Examples/abstract/brachistochrone/) of the documentation. The example trajectory optimization problems are grouped by application and represent some of the problem types that can be solved by OpenSCvx.
160
+
161
+ > [!Note]
162
+ > To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
163
+
164
+ To run a problem simply run any of the examples directly, for example:
165
+
166
+ ```sh
167
+ python3 examples/abstract/brachistochrone.py
168
+ ```
169
+
170
+ and adjust the plotting as needed.
171
+
172
+ Check out the problem definitions inside `examples/` to see how to define your own problems.
173
+
174
+ ## Code Structure
175
+
176
+ <img src="figures/oscvx_structure_full_dark.svg" width="1200"/>
177
+
178
+ ## What is implemented
179
+
180
+ This repo has the following features:
181
+
182
+ 1. Free Final Time
183
+ 2. Fully adaptive time dilation (`s` is appended to the control vector)
184
+ 3. Continuous-Time Constraint Satisfaction
185
+ 4. FOH and ZOH exact discretization (`t` is a state so you can bring your own scheme)
186
+ 6. Vectorized and Ahead-of-Time (AOT) Compiled Multishooting Discretization
187
+ 7. JAX Autodiff for Jacobians
188
+
189
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
190
+
191
+ ## Acknowledgements
192
+
193
+ This work was supported by a NASA Space Technology Graduate Research Opportunity and the Office of Naval Research under grant N00014-17-1-2433. The authors would like to acknowledge Natalia Pavlasek, Fabio Spada, Samuel Buckner, Abhi Kamath, Govind Chari, and Purnanand Elango as well as the other Autonomous Controls Laboratory members, for their many helpful discussions and support throughout this work.
194
+
195
+ ## Citation
196
+
197
+ Please cite the following works if you use the repository,
198
+
199
+ ```tex
200
+ @ARTICLE{hayner2025los,
201
+ author={Hayner, Christopher R. and Carson III, John M. and Açıkmeşe, Behçet and Leung, Karen},
202
+ journal={IEEE Robotics and Automation Letters},
203
+ title={Continuous-Time Line-of-Sight Constrained Trajectory Planning for 6-Degree of Freedom Systems},
204
+ year={2025},
205
+ volume={},
206
+ number={},
207
+ pages={1-8},
208
+ 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},
209
+ doi={10.1109/LRA.2025.3545299}}
210
+ ```
211
+
212
+ ```tex
213
+ @misc{elango2024ctscvx,
214
+ title={Successive Convexification for Trajectory Optimization with Continuous-Time Constraint Satisfaction},
215
+ author={Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
216
+ year={2024},
217
+ eprint={2404.16826},
218
+ archivePrefix={arXiv},
219
+ primaryClass={math.OC},
220
+ url={https://arxiv.org/abs/2404.16826},
221
+ }
222
+ ```
223
+
224
+ ```tex
225
+ @misc{chari2025qoco,
226
+ title = {QOCO: A Quadratic Objective Conic Optimizer with Custom Solver Generation},
227
+ author = {Chari, Govind M and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
228
+ year = {2025},
229
+ eprint = {2503.12658},
230
+ archiveprefix = {arXiv},
231
+ primaryclass = {math.OC},
232
+ }
233
+ ```