openscvx 0.3.2.dev127__tar.gz → 0.3.2.dev143__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 (227) hide show
  1. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/CONTRIBUTING.md +33 -0
  2. {openscvx-0.3.2.dev127/openscvx.egg-info → openscvx-0.3.2.dev143}/PKG-INFO +1 -1
  3. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/_version.py +3 -3
  4. openscvx-0.3.2.dev143/openscvx/algorithms/__init__.py +92 -0
  5. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/algorithms/autotuning.py +2 -2
  6. openscvx-0.3.2.dev127/openscvx/algorithms/solver_state.py → openscvx-0.3.2.dev143/openscvx/algorithms/base.py +128 -9
  7. openscvx-0.3.2.dev143/openscvx/algorithms/penalized_trust_region.py +384 -0
  8. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/problem.py +124 -26
  9. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/solvers/__init__.py +5 -1
  10. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143/openscvx.egg-info}/PKG-INFO +1 -1
  11. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx.egg-info/SOURCES.txt +2 -2
  12. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_cvxpygen_optional.py +1 -1
  13. openscvx-0.3.2.dev127/openscvx/algorithms/__init__.py +0 -45
  14. openscvx-0.3.2.dev127/openscvx/algorithms/ptr.py +0 -343
  15. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/assets/logo.svg +0 -0
  16. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/release-drafter.yml +0 -0
  17. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/_docs.yml +0 -0
  18. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/docs.yml +0 -0
  19. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/lint.yml +0 -0
  20. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/nightly.yml +0 -0
  21. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/release-drafter.yml +0 -0
  22. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/release.yml +0 -0
  23. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/tests-integration.yml +0 -0
  24. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.github/workflows/tests-unit.yml +0 -0
  25. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/.gitignore +0 -0
  26. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/LICENSE +0 -0
  27. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/README.md +0 -0
  28. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/constraint_reformulation.md +0 -0
  29. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/control_parameterization.md +0 -0
  30. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/discretization.md +0 -0
  31. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/ocp.md +0 -0
  32. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/scvx.md +0 -0
  33. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Overview/time_dilation.md +0 -0
  34. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/UnderTheHood/lowering_architecture.md +0 -0
  35. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  36. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/advanced_problem_setup.md +0 -0
  37. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api.md +0 -0
  38. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_constraints.md +0 -0
  39. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_control.md +0 -0
  40. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_integrators.md +0 -0
  41. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_state.md +0 -0
  42. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_trajoptproblem.md +0 -0
  43. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/api_variable.md +0 -0
  44. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/basic_problem_setup.md +0 -0
  45. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/tutorial_6dof_los_guidance.md +0 -0
  46. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/tutorial_6dof_obstacle_avoidance.md +0 -0
  47. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/Usage/tutorials.md +0 -0
  48. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/favicon.png +0 -0
  49. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/ct-scvx_dark.png +0 -0
  50. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/ct-scvx_light.png +0 -0
  51. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/ctcs_dark.png +0 -0
  52. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/ctcs_light.png +0 -0
  53. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/problem_class_dark.png +0 -0
  54. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/images/problem_class_light.png +0 -0
  55. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/assets/logo.svg +0 -0
  56. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/citation.md +0 -0
  57. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/examples.md +0 -0
  58. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/getting-started.md +0 -0
  59. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/index.md +0 -0
  60. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/docs/javascripts/mathjax.js +0 -0
  61. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/abstract/3DoF_pdg.py +0 -0
  62. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/abstract/brachistochrone.py +0 -0
  63. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/car/dubins_car.py +0 -0
  64. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/car/dubins_car_disjoint.py +0 -0
  65. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/car/dubins_car_stljax.py +0 -0
  66. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/cinema_vp.py +0 -0
  67. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/cinema_vp_realtime_base.py +0 -0
  68. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/dr_double_integrator.py +0 -0
  69. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/dr_vp.py +0 -0
  70. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/dr_vp_nodal.py +0 -0
  71. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/dr_vp_polytope.py +0 -0
  72. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/drone_racing.py +0 -0
  73. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/obstacle_avoidance.py +0 -0
  74. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  75. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/drone/obstacle_avoidance_realtime_base.py +0 -0
  76. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/plotting.py +0 -0
  77. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/plotting_viser.py +0 -0
  78. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/realtime/cinema_vp_realtime.py +0 -0
  79. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/realtime/drone_racing_realtime.py +0 -0
  80. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/realtime/dubins_car_realtime.py +0 -0
  81. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  82. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/ctlos_cine.gif +0 -0
  83. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/ctlos_dr.gif +0 -0
  84. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/dtlos_cine.gif +0 -0
  85. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/dtlos_dr.gif +0 -0
  86. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/openscvx_logo.svg +0 -0
  87. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/openscvx_logo_square.png +0 -0
  88. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/oscvx_structure_full_dark.svg +0 -0
  89. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/figures/video_preview.png +0 -0
  90. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/__init__.py +0 -0
  91. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/1-background.avif +0 -0
  92. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
  93. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
  94. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
  95. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
  96. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/2-mars.avif +0 -0
  97. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
  98. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
  99. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
  100. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
  101. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/3-moon.avif +0 -0
  102. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
  103. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
  104. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
  105. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
  106. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
  107. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
  108. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
  109. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
  110. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
  111. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/5-space.avif +0 -0
  112. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
  113. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
  114. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
  115. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
  116. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/6-earth.avif +0 -0
  117. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
  118. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
  119. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
  120. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
  121. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/javascripts/parallax.js +0 -0
  122. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/logo.svg +0 -0
  123. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/stylesheets/custom.css +0 -0
  124. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/assets/stylesheets/parallax.css +0 -0
  125. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/home.html +0 -0
  126. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/main.html +0 -0
  127. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/partials/parallax/hero.html +0 -0
  128. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/material/overrides/partials/parallax.html +0 -0
  129. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/mkdocs.yml +0 -0
  130. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/__init__.py +0 -0
  131. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/algorithms/optimization_results.py +0 -0
  132. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/config.py +0 -0
  133. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/discretization/__init__.py +0 -0
  134. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/discretization/discretization.py +0 -0
  135. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/expert/__init__.py +0 -0
  136. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/expert/byof.py +0 -0
  137. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/expert/lowering.py +0 -0
  138. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/expert/validation.py +0 -0
  139. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/integrators/__init__.py +0 -0
  140. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/integrators/runge_kutta.py +0 -0
  141. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/__init__.py +0 -0
  142. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/cvxpy_constraints.py +0 -0
  143. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/cvxpy_variables.py +0 -0
  144. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/dynamics.py +0 -0
  145. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/jax_constraints.py +0 -0
  146. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/parameters.py +0 -0
  147. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/problem.py +0 -0
  148. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/lowered/unified.py +0 -0
  149. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/__init__.py +0 -0
  150. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/plotting.py +0 -0
  151. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/scp_iteration.py +0 -0
  152. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/__init__.py +0 -0
  153. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/animated.py +0 -0
  154. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/plotly_integration.py +0 -0
  155. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/primitives.py +0 -0
  156. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/scp.py +0 -0
  157. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/plotting/viser/server.py +0 -0
  158. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/propagation/__init__.py +0 -0
  159. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/propagation/post_processing.py +0 -0
  160. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/propagation/propagation.py +0 -0
  161. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/solvers/cvxpy.py +0 -0
  162. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/__init__.py +0 -0
  163. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/augmentation.py +0 -0
  164. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/builder.py +0 -0
  165. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/constraint_set.py +0 -0
  166. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/__init__.py +0 -0
  167. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/arithmetic.py +0 -0
  168. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/array.py +0 -0
  169. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/constraint.py +0 -0
  170. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/control.py +0 -0
  171. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/expr.py +0 -0
  172. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/linalg.py +0 -0
  173. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/math.py +0 -0
  174. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/spatial.py +0 -0
  175. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/state.py +0 -0
  176. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/stl.py +0 -0
  177. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/expr/variable.py +0 -0
  178. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/hashing.py +0 -0
  179. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/lower.py +0 -0
  180. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/lowerers/__init__.py +0 -0
  181. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/lowerers/cvxpy.py +0 -0
  182. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/lowerers/jax.py +0 -0
  183. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/preprocessing.py +0 -0
  184. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/problem.py +0 -0
  185. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/time.py +0 -0
  186. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/symbolic/unified.py +0 -0
  187. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/__init__.py +0 -0
  188. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/cache.py +0 -0
  189. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/caching.py +0 -0
  190. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/printing.py +0 -0
  191. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/profiling.py +0 -0
  192. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx/utils/utils.py +0 -0
  193. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx.egg-info/dependency_links.txt +0 -0
  194. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx.egg-info/requires.txt +0 -0
  195. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/openscvx.egg-info/top_level.txt +0 -0
  196. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/pyproject.toml +0 -0
  197. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/scripts/gen_example_pages.py +0 -0
  198. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/scripts/gen_ref_pages.py +0 -0
  199. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/setup.cfg +0 -0
  200. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/__init__.py +0 -0
  201. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/brachistochrone_analytical.py +0 -0
  202. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/__init__.py +0 -0
  203. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/__init__.py +0 -0
  204. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_arithmetic.py +0 -0
  205. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_array.py +0 -0
  206. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_constraint.py +0 -0
  207. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_expr.py +0 -0
  208. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_linalg.py +0 -0
  209. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_math.py +0 -0
  210. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_node_reference.py +0 -0
  211. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_parameters.py +0 -0
  212. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_scaling.py +0 -0
  213. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_spatial.py +0 -0
  214. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/expr/test_variable.py +0 -0
  215. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_augmentation.py +0 -0
  216. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_hashing.py +0 -0
  217. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_lower_cvxpy.py +0 -0
  218. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_lower_jax.py +0 -0
  219. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_preprocessing.py +0 -0
  220. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/symbolic/test_unified.py +0 -0
  221. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_brachistochrone.py +0 -0
  222. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_discretization.py +0 -0
  223. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_examples.py +0 -0
  224. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_expert.py +0 -0
  225. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_integrators.py +0 -0
  226. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_plotting.py +0 -0
  227. {openscvx-0.3.2.dev127 → openscvx-0.3.2.dev143}/tests/test_propagation.py +0 -0
@@ -178,3 +178,36 @@ While we do not strictly follow [test driven development (TDD)](https://en.wikip
178
178
  For example, the [symbolic-expression layer](openscvx/symbolic/__init__.py) is well covered by [tests](tests/symbolic/) which were written simultaneously with the symbolic layer.
179
179
 
180
180
  The extensive test suite helps ensure that new features and refactors don't break existing functionality.
181
+
182
+ #### Documentation
183
+
184
+ We use [MkDocs](https://www.mkdocs.org/) with [Material](https://squidfunk.github.io/mkdocs-material/) theme for documentation, hosted at [haynec.github.io/OpenSCvx](https://haynec.github.io/OpenSCvx/).
185
+
186
+ API reference is auto-generated from docstrings using [mkdocstrings](https://mkdocstrings.github.io/). Please use [Google-style docstrings](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings) for all public functions and classes:
187
+
188
+ ```python
189
+ def solve(self, max_iterations: int = 100) -> OptimizationResult:
190
+ """Solve the trajectory optimization problem.
191
+
192
+ Args:
193
+ max_iterations: Maximum number of SCP iterations.
194
+
195
+ Returns:
196
+ The optimization result containing the trajectory and convergence info.
197
+
198
+ Raises:
199
+ ConvergenceError: If the solver fails to converge.
200
+ """
201
+ ```
202
+
203
+ To preview documentation locally, first install the dependencies:
204
+
205
+ ```bash
206
+ pip install mkdocs-material mkdocstrings-python mkdocs-gen-files mkdocs-literate-nav mkdocs-section-index
207
+ ```
208
+
209
+ Then serve the documentation locally:
210
+
211
+ ```bash
212
+ mkdocs serve
213
+ ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.3.2.dev127
3
+ Version: 0.3.2.dev143
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
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.3.2.dev127'
32
- __version_tuple__ = version_tuple = (0, 3, 2, 'dev127')
31
+ __version__ = version = '0.3.2.dev143'
32
+ __version_tuple__ = version_tuple = (0, 3, 2, 'dev143')
33
33
 
34
- __commit_id__ = commit_id = 'g580ea58cc'
34
+ __commit_id__ = commit_id = 'gfab08d1d7'
@@ -0,0 +1,92 @@
1
+ """Successive convexification algorithms for trajectory optimization.
2
+
3
+ This module provides implementations of SCvx (Successive Convexification) algorithms
4
+ for solving non-convex trajectory optimization problems through iterative convex
5
+ approximation.
6
+
7
+ All algorithms inherit from :class:`Algorithm`, enabling pluggable algorithm
8
+ implementations and custom SCvx variants:
9
+
10
+ ```python
11
+ class Algorithm(ABC):
12
+ @abstractmethod
13
+ def initialize(self, ocp, discretization_solver, jax_constraints,
14
+ solve_ocp, emitter, params, settings) -> None:
15
+ '''Store compiled infrastructure and warm-start solvers.'''
16
+ ...
17
+
18
+ @abstractmethod
19
+ def step(self, state, params, settings) -> bool:
20
+ '''Execute one iteration using stored infrastructure.'''
21
+ ...
22
+ ```
23
+
24
+ Immutable components (ocp, discretization_solver, jax_constraints, etc.) are stored
25
+ during ``initialize()``. Mutable configuration (params, settings) is passed per-step
26
+ to support runtime parameter updates and tolerance tuning.
27
+
28
+ :class:`AlgorithmState` holds mutable state during SCP iterations. Algorithms
29
+ that require additional state can subclass it:
30
+
31
+ ```python
32
+ @dataclass
33
+ class MyAlgorithmState(AlgorithmState):
34
+ my_custom_field: float = 0.0
35
+ ```
36
+
37
+ Note:
38
+ ``AlgorithmState`` currently combines iteration metrics (costs, weights),
39
+ trajectory history, and discretization data. A future refactor may separate
40
+ these concerns into distinct classes for clearer data flow:
41
+
42
+ ```python
43
+ @dataclass
44
+ class AlgorithmState:
45
+ # Mutable iteration state
46
+ k: int
47
+ J_tr: float
48
+ J_vb: float
49
+ J_vc: float
50
+ w_tr: float
51
+ lam_cost: float
52
+ lam_vc: ...
53
+ lam_vb: float
54
+
55
+ @dataclass
56
+ class TrajectoryHistory:
57
+ # Accumulated trajectory solutions
58
+ X: List[np.ndarray]
59
+ U: List[np.ndarray]
60
+
61
+ @property
62
+ def x(self): return self.X[-1]
63
+
64
+ @property
65
+ def u(self): return self.U[-1]
66
+
67
+ @dataclass
68
+ class DebugHistory:
69
+ # Optional diagnostic data (discretization matrices, etc.)
70
+ V_history: List[np.ndarray]
71
+ VC_history: List[np.ndarray]
72
+ TR_history: List[np.ndarray]
73
+ ```
74
+
75
+ Current Implementations:
76
+
77
+ - :class:`PenalizedTrustRegion`: Penalized Trust Region (PTR) algorithm
78
+ """
79
+
80
+ from .base import Algorithm, AlgorithmState
81
+ from .optimization_results import OptimizationResults
82
+ from .penalized_trust_region import PenalizedTrustRegion
83
+
84
+ __all__ = [
85
+ # Base class
86
+ "Algorithm",
87
+ "AlgorithmState",
88
+ # Core results
89
+ "OptimizationResults",
90
+ # PTR algorithm
91
+ "PenalizedTrustRegion",
92
+ ]
@@ -5,10 +5,10 @@ from typing import TYPE_CHECKING
5
5
  from openscvx.config import Config
6
6
 
7
7
  if TYPE_CHECKING:
8
- from .solver_state import SolverState
8
+ from .base import AlgorithmState
9
9
 
10
10
 
11
- def update_scp_weights(state: "SolverState", settings: Config, scp_k: int):
11
+ def update_scp_weights(state: "AlgorithmState", settings: Config, scp_k: int):
12
12
  """Update SCP weights and cost parameters based on iteration number.
13
13
 
14
14
  Args:
@@ -1,22 +1,25 @@
1
- """Solver state management for SCP iterations.
1
+ """Base class for successive convexification algorithms.
2
2
 
3
- This module contains the SolverState dataclass that holds all mutable state
4
- during successive convex programming iterations. By separating solver state
5
- from problem definition, we enable clean reset() functionality and prevent
6
- accidental mutation of initial conditions.
3
+ This module defines the abstract interface that all SCP algorithm implementations
4
+ must follow, along with the AlgorithmState dataclass that holds mutable state
5
+ during SCP iterations.
7
6
  """
8
7
 
8
+ from abc import ABC, abstractmethod
9
9
  from dataclasses import dataclass, field
10
10
  from typing import TYPE_CHECKING, List, Union
11
11
 
12
12
  import numpy as np
13
13
 
14
14
  if TYPE_CHECKING:
15
+ import cvxpy as cp
16
+
15
17
  from openscvx.config import Config
18
+ from openscvx.lowered.jax_constraints import LoweredJaxConstraints
16
19
 
17
20
 
18
21
  @dataclass
19
- class SolverState:
22
+ class AlgorithmState:
20
23
  """Mutable state for SCP iterations.
21
24
 
22
25
  This dataclass holds all state that changes during the solve process.
@@ -200,8 +203,8 @@ class SolverState:
200
203
  return V_final[:, i3:i4].reshape(self.N - 1, self.n_x, self.n_u)
201
204
 
202
205
  @classmethod
203
- def from_settings(cls, settings: "Config") -> "SolverState":
204
- """Create initial solver state from configuration.
206
+ def from_settings(cls, settings: "Config") -> "AlgorithmState":
207
+ """Create initial algorithm state from configuration.
205
208
 
206
209
  Copies only the trajectory arrays from settings, leaving all metadata
207
210
  (bounds, boundary conditions, etc.) in the original settings object.
@@ -210,7 +213,7 @@ class SolverState:
210
213
  settings: Configuration object containing initial guesses and SCP parameters
211
214
 
212
215
  Returns:
213
- Fresh SolverState initialized from settings with copied arrays
216
+ Fresh AlgorithmState initialized from settings with copied arrays
214
217
  """
215
218
  return cls(
216
219
  k=1,
@@ -230,3 +233,119 @@ class SolverState:
230
233
  VC_history=[],
231
234
  TR_history=[],
232
235
  )
236
+
237
+
238
+ class Algorithm(ABC):
239
+ """Abstract base class for successive convexification algorithms.
240
+
241
+ This class defines the interface for SCP algorithms used in trajectory
242
+ optimization. Implementations should remain minimal and functional,
243
+ delegating state management to the AlgorithmState dataclass.
244
+
245
+ The two core methods mirror the SCP workflow:
246
+
247
+ - initialize: Store compiled infrastructure and warm-start solvers
248
+ - step: Execute one convex subproblem iteration
249
+
250
+ Immutable components (ocp, discretization_solver, jax_constraints, etc.) are
251
+ stored during initialize(). Mutable configuration (params, settings) is passed
252
+ per-step to support runtime parameter updates and tolerance tuning.
253
+
254
+ !!! tip "Statefullness"
255
+ Avoid storing mutable iteration state (costs, weights, trajectories) on
256
+ ``self``. All iteration state should live in :class:`AlgorithmState` or
257
+ a subclass thereof, passed explicitly to ``step()``. This keeps algorithm
258
+ classes stateless w.r.t. iteration, making data flow explicit and staying
259
+ close to functional programming principles where possible.
260
+
261
+ Example:
262
+ Implementing a custom algorithm::
263
+
264
+ class MyAlgorithm(Algorithm):
265
+ def initialize(self, ocp, discretization_solver,
266
+ jax_constraints, solve_ocp, emitter,
267
+ params, settings):
268
+ # Store compiled infrastructure
269
+ self._ocp = ocp
270
+ self._discretization_solver = discretization_solver
271
+ self._jax_constraints = jax_constraints
272
+ self._solve_ocp = solve_ocp
273
+ self._emitter = emitter
274
+ # Warm-start with initial params/settings...
275
+
276
+ def step(self, state, params, settings):
277
+ # Run one iteration using self._* and per-step params/settings
278
+ return converged
279
+ """
280
+
281
+ @abstractmethod
282
+ def initialize(
283
+ self,
284
+ ocp: "cp.Problem",
285
+ discretization_solver: callable,
286
+ jax_constraints: "LoweredJaxConstraints",
287
+ solve_ocp: callable,
288
+ emitter: callable,
289
+ params: dict,
290
+ settings: "Config",
291
+ ) -> None:
292
+ """Initialize the algorithm and store compiled infrastructure.
293
+
294
+ This method stores immutable components and performs any setup required
295
+ before the SCP loop begins (e.g., warm-starting solvers). The params and
296
+ settings are passed for warm-start but may change between steps.
297
+
298
+ Args:
299
+ ocp: The CVXPy optimal control problem
300
+ discretization_solver: Compiled discretization solver function
301
+ jax_constraints: JIT-compiled JAX constraint functions
302
+ solve_ocp: Callable that solves the OCP (captures solver config)
303
+ emitter: Callback for emitting iteration progress data
304
+ params: Problem parameters dictionary (for warm-start only)
305
+ settings: Configuration object (for warm-start only)
306
+ """
307
+ ...
308
+
309
+ @abstractmethod
310
+ def step(
311
+ self,
312
+ state: AlgorithmState,
313
+ params: dict,
314
+ settings: "Config",
315
+ ) -> bool:
316
+ """Execute one iteration of the SCP algorithm.
317
+
318
+ This method solves a single convex subproblem, updates the algorithm
319
+ state in place, and returns whether convergence criteria are met.
320
+
321
+ Uses stored infrastructure (ocp, discretization_solver, etc.) with
322
+ per-step params and settings to support runtime modifications.
323
+
324
+ Args:
325
+ state: Mutable algorithm state (modified in place)
326
+ params: Problem parameters dictionary (may change between steps)
327
+ settings: Configuration object (may change between steps)
328
+
329
+ Returns:
330
+ True if convergence criteria are satisfied, False otherwise.
331
+ """
332
+ ...
333
+
334
+ @abstractmethod
335
+ def citation(self) -> List[str]:
336
+ """Return BibTeX citations for this algorithm.
337
+
338
+ Implementations should return a list of BibTeX entry strings for the
339
+ papers that should be cited when using this algorithm.
340
+
341
+ Returns:
342
+ List of BibTeX citation strings.
343
+
344
+ Example:
345
+ Getting citations for an algorithm::
346
+
347
+ algorithm = PenalizedTrustRegion()
348
+ for bibtex in algorithm.citation():
349
+ print(bibtex)
350
+ """
351
+ ...