openscvx 0.4.1.dev152__tar.gz → 0.4.1.dev153__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 (328) hide show
  1. {openscvx-0.4.1.dev152/openscvx.egg-info → openscvx-0.4.1.dev153}/PKG-INFO +1 -1
  2. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/abstract/stl_or.py +0 -5
  3. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car_stl_or.py +3 -2
  4. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car_waypoint_stl.py +5 -5
  5. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/dr_vp_nodal.py +0 -3
  6. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/_version.py +3 -3
  7. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/augmented_lagrangian.py +96 -17
  8. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/base.py +17 -1
  9. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/constant_proximal_weight.py +1 -1
  10. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/ramp_proximal_weight.py +1 -1
  11. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153/openscvx.egg-info}/PKG-INFO +1 -1
  12. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_autotuning.py +16 -10
  13. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_brachistochrone.py +33 -9
  14. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/assets/logo.svg +0 -0
  15. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/release-drafter.yml +0 -0
  16. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/_docs.yml +0 -0
  17. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/branch-name.yml +0 -0
  18. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/docs.yml +0 -0
  19. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/lint.yml +0 -0
  20. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/nightly.yml +0 -0
  21. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/release-drafter.yml +0 -0
  22. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/release.yml +0 -0
  23. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/tests-integration.yml +0 -0
  24. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.github/workflows/tests-unit.yml +0 -0
  25. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/.gitignore +0 -0
  26. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/CONTRIBUTING.md +0 -0
  27. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/LICENSE +0 -0
  28. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/README.md +0 -0
  29. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/constraint_reformulation.md +0 -0
  30. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/control_parameterization.md +0 -0
  31. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/discretization.md +0 -0
  32. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/ocp.md +0 -0
  33. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/scvx.md +0 -0
  34. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/Foundations/time_dilation.md +0 -0
  35. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UnderTheHood/lowering_architecture.md +0 -0
  36. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  37. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/00_introduction.md +0 -0
  38. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  39. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  40. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
  41. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
  42. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/05_visualization.md +0 -0
  43. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/06_logic.md +0 -0
  44. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/07_lie.md +0 -0
  45. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/UsersGuide/08_mpcc.md +0 -0
  46. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/favicon.png +0 -0
  47. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/ct-scvx_dark.png +0 -0
  48. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/ct-scvx_light.png +0 -0
  49. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/ctcs_dark.png +0 -0
  50. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/ctcs_light.png +0 -0
  51. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/problem_class_dark.png +0 -0
  52. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/images/problem_class_light.png +0 -0
  53. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/assets/logo.svg +0 -0
  54. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/citation.md +0 -0
  55. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/examples.md +0 -0
  56. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/getting-started.md +0 -0
  57. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/index.md +0 -0
  58. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/docs/javascripts/mathjax.js +0 -0
  59. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/abstract/brachistochrone.py +0 -0
  60. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/abstract/impulsive.py +0 -0
  61. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/abstract/stl_integer_variable.py +0 -0
  62. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/arm/three_link_arm.py +0 -0
  63. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car.py +0 -0
  64. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car_disjoint.py +0 -0
  65. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car_obstacle_conditional.py +0 -0
  66. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/car/dubins_car_obstacle_stl.py +0 -0
  67. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/cinema_vp.py +0 -0
  68. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/dr_double_integrator.py +0 -0
  69. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/dr_vp.py +0 -0
  70. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/dr_vp_polytope.py +0 -0
  71. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/drone_racing.py +0 -0
  72. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/logo.py +0 -0
  73. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/logo_utils/acl_logo.svg +0 -0
  74. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  75. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/obstacle_avoidance.py +0 -0
  76. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/obstacle_avoidance_nodal.py +0 -0
  77. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/drone/obstacle_avoidance_vmap.py +0 -0
  78. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/mpc/double_integrator_discrete.py +0 -0
  79. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/mpc/double_integrator_drone_racing.py +0 -0
  80. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/mpc/dubins_car_circle_analytical.py +0 -0
  81. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/mpc/dubins_car_circle_discrete.py +0 -0
  82. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
  83. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/plotting.py +0 -0
  84. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/plotting_viser.py +0 -0
  85. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
  86. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
  87. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
  88. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/cinema_vp_realtime.py +0 -0
  89. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/drone_racing_realtime.py +0 -0
  90. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/dubins_car_realtime.py +0 -0
  91. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
  92. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/rocket/3DoF_pdg.py +0 -0
  93. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/spacecraft/hohmann_transfer.py +0 -0
  94. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/examples/spacecraft/proxops_cw.py +0 -0
  95. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/ctlos_cine.gif +0 -0
  96. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/ctlos_dr.gif +0 -0
  97. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/dtlos_cine.gif +0 -0
  98. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/dtlos_dr.gif +0 -0
  99. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/openscvx_logo.svg +0 -0
  100. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/openscvx_logo_square.png +0 -0
  101. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/oscvx_structure_full_dark.svg +0 -0
  102. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/figures/video_preview.png +0 -0
  103. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/__init__.py +0 -0
  104. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/1-background.avif +0 -0
  105. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
  106. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
  107. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
  108. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
  109. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/2-mars.avif +0 -0
  110. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
  111. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
  112. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
  113. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
  114. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/3-moon.avif +0 -0
  115. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
  116. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
  117. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
  118. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
  119. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
  120. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
  121. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
  122. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
  123. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
  124. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/5-space.avif +0 -0
  125. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
  126. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
  127. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
  128. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
  129. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/6-earth.avif +0 -0
  130. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
  131. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
  132. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
  133. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
  134. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/javascripts/parallax.js +0 -0
  135. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/logo.svg +0 -0
  136. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/stylesheets/custom.css +0 -0
  137. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/assets/stylesheets/parallax.css +0 -0
  138. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/home.html +0 -0
  139. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/main.html +0 -0
  140. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/partials/parallax/hero.html +0 -0
  141. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/material/overrides/partials/parallax.html +0 -0
  142. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/mkdocs.yml +0 -0
  143. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/__init__.py +0 -0
  144. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/__main__.py +0 -0
  145. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/__init__.py +0 -0
  146. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/optimization_results.py +0 -0
  147. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/algorithms/penalized_trust_region.py +0 -0
  148. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/config.py +0 -0
  149. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/discretization/__init__.py +0 -0
  150. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/discretization/base.py +0 -0
  151. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/discretization/linearize_discretize.py +0 -0
  152. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/expert/__init__.py +0 -0
  153. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/expert/byof.py +0 -0
  154. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/expert/lowering.py +0 -0
  155. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/expert/validation.py +0 -0
  156. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/init/__init__.py +0 -0
  157. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/init/interpolation.py +0 -0
  158. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/integrators/__init__.py +0 -0
  159. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/integrators/runge_kutta.py +0 -0
  160. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/loader.py +0 -0
  161. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/__init__.py +0 -0
  162. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/cvxpy_constraints.py +0 -0
  163. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/cvxpy_variables.py +0 -0
  164. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/dynamics.py +0 -0
  165. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/jax_constraints.py +0 -0
  166. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/parameters.py +0 -0
  167. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/problem.py +0 -0
  168. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/lowered/unified.py +0 -0
  169. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/__init__.py +0 -0
  170. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/plotting.py +0 -0
  171. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/scp_iteration.py +0 -0
  172. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/__init__.py +0 -0
  173. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/animated.py +0 -0
  174. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/orbits.py +0 -0
  175. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/plotly_integration.py +0 -0
  176. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/primitives.py +0 -0
  177. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/scp.py +0 -0
  178. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/plotting/viser/server.py +0 -0
  179. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/problem.py +0 -0
  180. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/propagation/__init__.py +0 -0
  181. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/propagation/post_processing.py +0 -0
  182. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/propagation/propagation.py +0 -0
  183. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/solvers/__init__.py +0 -0
  184. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/solvers/base.py +0 -0
  185. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/solvers/ptr_solver.py +0 -0
  186. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/__init__.py +0 -0
  187. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/augmentation.py +0 -0
  188. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/builder.py +0 -0
  189. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/constraint_set.py +0 -0
  190. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/__init__.py +0 -0
  191. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/arithmetic.py +0 -0
  192. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/array.py +0 -0
  193. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/constraint.py +0 -0
  194. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/control.py +0 -0
  195. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/expr.py +0 -0
  196. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  197. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  198. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/lie/se3.py +0 -0
  199. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/lie/so3.py +0 -0
  200. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/linalg.py +0 -0
  201. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/logic.py +0 -0
  202. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/math.py +0 -0
  203. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/spatial.py +0 -0
  204. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/state.py +0 -0
  205. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/stl.py +0 -0
  206. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/stljax.py +0 -0
  207. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/time.py +0 -0
  208. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/variable.py +0 -0
  209. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/expr/vmap.py +0 -0
  210. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/hashing.py +0 -0
  211. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lower.py +0 -0
  212. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/__init__.py +0 -0
  213. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  214. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  215. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  216. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  217. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  218. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  219. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  220. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  221. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  222. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  223. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  224. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
  225. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  226. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  227. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  228. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  229. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  230. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  231. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  232. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  233. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  234. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  235. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  236. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  237. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  238. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/state.py +0 -0
  239. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  240. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
  241. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  242. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/__init__.py +0 -0
  243. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/_registry.py +0 -0
  244. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/array.py +0 -0
  245. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/constraint.py +0 -0
  246. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/lie.py +0 -0
  247. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/linalg.py +0 -0
  248. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/logic.py +0 -0
  249. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/math.py +0 -0
  250. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/parser.py +0 -0
  251. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/spatial.py +0 -0
  252. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/stl.py +0 -0
  253. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/stljax.py +0 -0
  254. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/parser/tokenizer.py +0 -0
  255. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/preprocessing.py +0 -0
  256. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/problem.py +0 -0
  257. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/sparsity.py +0 -0
  258. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/symbolic/unified.py +0 -0
  259. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/__init__.py +0 -0
  260. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/cache.py +0 -0
  261. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/caching.py +0 -0
  262. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/printing.py +0 -0
  263. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/profiling.py +0 -0
  264. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx/utils/utils.py +0 -0
  265. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx.egg-info/SOURCES.txt +0 -0
  266. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx.egg-info/dependency_links.txt +0 -0
  267. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx.egg-info/entry_points.txt +0 -0
  268. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx.egg-info/requires.txt +0 -0
  269. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/openscvx.egg-info/top_level.txt +0 -0
  270. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/pyproject.toml +0 -0
  271. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/scripts/gen_example_pages.py +0 -0
  272. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/scripts/gen_ref_pages.py +0 -0
  273. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/setup.cfg +0 -0
  274. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/__init__.py +0 -0
  275. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/brachistochrone_analytical.py +0 -0
  276. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/expr/__init__.py +0 -0
  277. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/expr/test_gmsr.py +0 -0
  278. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/fixtures/brachistochrone.json +0 -0
  279. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/fixtures/brachistochrone.yaml +0 -0
  280. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/hohmann_analytical.py +0 -0
  281. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/__init__.py +0 -0
  282. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/__init__.py +0 -0
  283. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_arithmetic.py +0 -0
  284. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_array.py +0 -0
  285. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_constraint.py +0 -0
  286. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_expr.py +0 -0
  287. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_lie.py +0 -0
  288. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_linalg.py +0 -0
  289. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_logic.py +0 -0
  290. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_math.py +0 -0
  291. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_node_reference.py +0 -0
  292. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_parameters.py +0 -0
  293. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_scaling.py +0 -0
  294. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_spatial.py +0 -0
  295. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_stl.py +0 -0
  296. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_variable.py +0 -0
  297. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/expr/test_vmap.py +0 -0
  298. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/__init__.py +0 -0
  299. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_array.py +0 -0
  300. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_constraint.py +0 -0
  301. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_lie.py +0 -0
  302. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_linalg.py +0 -0
  303. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_load.py +0 -0
  304. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_logic.py +0 -0
  305. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_math.py +0 -0
  306. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_parser.py +0 -0
  307. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_spatial.py +0 -0
  308. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_stl.py +0 -0
  309. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_tokenizer.py +0 -0
  310. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/parser/test_vmap.py +0 -0
  311. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_augmentation.py +0 -0
  312. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_hashing.py +0 -0
  313. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_lower_cvxpy.py +0 -0
  314. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_lower_jax.py +0 -0
  315. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_preprocessing.py +0 -0
  316. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_sparsity.py +0 -0
  317. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/symbolic/test_unified.py +0 -0
  318. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_cvxpygen_optional.py +0 -0
  319. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_discretization.py +0 -0
  320. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_examples.py +0 -0
  321. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_expert.py +0 -0
  322. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_impulsive.py +0 -0
  323. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_init.py +0 -0
  324. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_integrators.py +0 -0
  325. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_loader.py +0 -0
  326. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_optimization_results.py +0 -0
  327. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/tests/test_plotting.py +0 -0
  328. {openscvx-0.4.1.dev152 → openscvx-0.4.1.dev153}/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.dev152
3
+ Version: 0.4.1.dev153
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
@@ -89,14 +89,9 @@ problem = Problem(
89
89
  controls=controls,
90
90
  N=N,
91
91
  time=time,
92
- algorithm={"autotuner": ox.ConstantProximalWeight()},
93
92
  float_dtype="float64",
94
93
  )
95
94
 
96
- problem.algorithm.lam_vb = 1e2
97
-
98
- problem.algorithm.lam_vc = 1e1
99
-
100
95
  if __name__ == "__main__":
101
96
  problem.initialize()
102
97
  results = problem.solve()
@@ -92,8 +92,8 @@ wp1_pred = ox.linalg.Norm(position - wp1_center) <= wp1_radius
92
92
  wp2_pred = ox.linalg.Norm(position - wp2_center) <= wp2_radius
93
93
 
94
94
  # Visit waypoint constraints using symbolic Or
95
- # Note: visit_wp_or_expr is already a constraint, so we can use .over() directly
96
- constraints.append(ox.stl.Or(wp1_pred, wp2_pred).over((3, 5), penalty="squared_relu"))
95
+ # Note: visit_wp_or_expr is already a constraint, so we can use .at() directly
96
+ constraints.append(ox.stl.Or(wp1_pred, wp2_pred).at([3, 4, 5]))
97
97
 
98
98
  # Build the problem
99
99
  constraints.append((time.at(5) - time.at(3) == 1.23).convex())
@@ -105,6 +105,7 @@ problem = Problem(
105
105
  time=time, # Time is already defined above as ox.Time
106
106
  constraints=constraints,
107
107
  N=n,
108
+ algorithm={"autotuner": ox.AugmentedLagrangian(eta_lambda=1e0), "lam_vb": 1e0},
108
109
  float_dtype="float64",
109
110
  )
110
111
 
@@ -85,7 +85,7 @@ safety_region = ox.linalg.Norm(position - obs_center) <= 1.6
85
85
  # Globally the control bound is 10.0; inside the waypoint window we restrict to 1.0.
86
86
  slow_speed_in_waypoint = ox.linalg.Norm(speed) <= 1.0
87
87
 
88
- speed_constraint = ox.stl.IfThen(safety_region, slow_speed_in_waypoint, c=1e-18)
88
+ speed_constraint = ox.stl.IfThen(safety_region, slow_speed_in_waypoint, c=1e-2)
89
89
 
90
90
  constraints.append(
91
91
  speed_constraint.over(
@@ -128,12 +128,12 @@ problem = Problem(
128
128
  N=n,
129
129
  algorithm={"autotuner": ox.RampProximalWeight()},
130
130
  float_dtype="float64",
131
- licq_max=1e-8,
131
+ licq_max=1e-10,
132
132
  )
133
133
 
134
- problem.algorithm.ep_vc = 1e-6
135
- problem.algorithm.ep_tr = 5e-4
136
- problem.algorithm.lam_vc = 1e3
134
+ # problem.algorithm.ep_vc = 1e-6
135
+ # problem.algorithm.ep_tr = 5e-4
136
+ problem.algorithm.lam_vc = 2e3
137
137
 
138
138
  plotting_dict = {
139
139
  "obs_radius": problem.parameters["obs_radius"],
@@ -226,11 +226,8 @@ problem = Problem(
226
226
  constraints=constraints,
227
227
  N=n,
228
228
  algorithm={
229
- "lam_prox": 8e1,
230
- "lam_cost": 2e1,
231
229
  "lam_vc": 1e2,
232
230
  "lam_vb": 4e0,
233
- "ep_tr": 1e-3,
234
231
  },
235
232
  )
236
233
 
@@ -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.4.1.dev152'
32
- __version_tuple__ = version_tuple = (0, 4, 1, 'dev152')
31
+ __version__ = version = '0.4.1.dev153'
32
+ __version_tuple__ = version_tuple = (0, 4, 1, 'dev153')
33
33
 
34
- __commit_id__ = commit_id = 'gd78c3c228'
34
+ __commit_id__ = commit_id = 'g8bdc94692'
@@ -59,7 +59,7 @@ class AugmentedLagrangian(AutotuningBase):
59
59
  eta_1: float = 1e-1,
60
60
  eta_2: float = 0.8,
61
61
  ep: float = 0.5,
62
- eta_lambda: float = 1e0,
62
+ eta_lambda: float = 1e1,
63
63
  lam_vc_max: float = 1e5,
64
64
  lam_prox_min: float = 1e-3,
65
65
  lam_prox_max: float = 2e5,
@@ -134,6 +134,91 @@ class AugmentedLagrangian(AutotuningBase):
134
134
  vc_new = np.where(mask, case1, case2)
135
135
  return np.minimum(self.lam_vc_max, vc_new)
136
136
 
137
+ def _update_virtual_buffer_nodal_weights(
138
+ self,
139
+ candidate: "CandidateIterate",
140
+ nodal_constraints: "LoweredJaxConstraints",
141
+ params: dict,
142
+ lam_vb_nodal: np.ndarray,
143
+ lam_prox: np.ndarray,
144
+ ) -> np.ndarray:
145
+ """
146
+ !!! warning
147
+ This code is WIP and may not be correct.
148
+
149
+ TODO: (haynec) Flush this out.
150
+
151
+ Update virtual buffer penalty weights for nodal constraints.
152
+
153
+ Evaluates each nodal constraint to obtain violation
154
+ nu = max(0, g(x, u)), then applies the same two-case update rule
155
+ used for virtual control weights: linear when nu > ep, quadratic
156
+ otherwise. Result is clipped to lam_vc_max.
157
+ """
158
+ lam_vb_new = lam_vb_nodal.copy()
159
+ lam_prox_scalar = float(np.max(lam_prox))
160
+ scale = self.eta_lambda * (1 / (2 * lam_prox_scalar))
161
+
162
+ for idx, constraint in enumerate(nodal_constraints.nodal):
163
+ g = constraint.func(candidate.x, candidate.u, 0, params)
164
+ nu = np.maximum(0, g)
165
+
166
+ if constraint.nodes is not None:
167
+ nodes_array = np.array(constraint.nodes)
168
+ nu_slice = nu[nodes_array]
169
+ current = lam_vb_nodal[nodes_array, idx]
170
+ else:
171
+ nu_slice = nu
172
+ current = lam_vb_nodal[:, idx]
173
+
174
+ mask = nu_slice > self.ep
175
+ case1 = current + nu_slice * scale
176
+ case2 = current + (nu_slice**2) / self.ep * scale
177
+ updated = np.where(mask, case1, case2)
178
+
179
+ if constraint.nodes is not None:
180
+ lam_vb_new[nodes_array, idx] = updated
181
+ else:
182
+ lam_vb_new[:, idx] = updated
183
+
184
+ return np.minimum(self.lam_vc_max, lam_vb_new)
185
+
186
+ def _update_virtual_buffer_cross_weights(
187
+ self,
188
+ candidate: "CandidateIterate",
189
+ nodal_constraints: "LoweredJaxConstraints",
190
+ params: dict,
191
+ lam_vb_cross: np.ndarray,
192
+ lam_prox: np.ndarray,
193
+ ) -> np.ndarray:
194
+ """
195
+ !!! warning
196
+ This code is WIP and may not be correct.
197
+
198
+ TODO: (haynec) Flush this out.
199
+
200
+ Update virtual buffer penalty weights for cross-node constraints.
201
+
202
+ Evaluates each cross-node constraint to obtain total violation
203
+ nu = sum(max(0, g(X, U))), then applies the same two-case update
204
+ rule used for virtual control weights. Result is clipped to lam_vc_max.
205
+ """
206
+ lam_vb_new = lam_vb_cross.copy()
207
+ lam_prox_scalar = float(np.max(lam_prox))
208
+ scale = self.eta_lambda * (1 / (2 * lam_prox_scalar))
209
+
210
+ for idx, constraint in enumerate(nodal_constraints.cross_node):
211
+ g = constraint.func(candidate.x, candidate.u, params)
212
+ nu = np.sum(np.maximum(0, g))
213
+
214
+ current = lam_vb_cross[idx]
215
+ if nu > self.ep:
216
+ lam_vb_new[idx] = current + nu * scale
217
+ else:
218
+ lam_vb_new[idx] = current + (nu**2) / self.ep * scale
219
+
220
+ return np.minimum(self.lam_vc_max, lam_vb_new)
221
+
137
222
  def update_weights(
138
223
  self,
139
224
  state: "AlgorithmState",
@@ -225,51 +310,45 @@ class AugmentedLagrangian(AutotuningBase):
225
310
  if rho < self.eta_0:
226
311
  # Reject Solution and higher weight
227
312
  lam_prox_k1 = np.minimum(self.lam_prox_max, self.gamma_1 * lam_prox_k)
228
- state.lam_prox_history.append(lam_prox_k1)
313
+ candidate.lam_prox = lam_prox_k1
314
+ state.reject_solution(candidate)
229
315
  adaptive_state = "Reject Higher"
230
316
  elif rho >= self.eta_0 and rho < self.eta_1:
231
317
  # Accept Solution with heigher weight
232
318
  lam_prox_k1 = np.minimum(self.lam_prox_max, self.gamma_1 * lam_prox_k)
233
- state.lam_prox_history.append(lam_prox_k1)
234
-
319
+ candidate.lam_prox = lam_prox_k1
235
320
  # Update virtual control weight matrix
236
321
  candidate.lam_vc = self._update_virtual_control_weights(
237
- candidate, candidate_x_prop, settings, state.lam_vc, state.lam_prox
322
+ candidate, candidate_x_prop, settings, state.lam_vc, candidate.lam_prox
238
323
  )
239
- candidate.lam_vb_nodal = state.lam_vb_nodal
240
- candidate.lam_vb_cross = state.lam_vb_cross
241
324
 
242
325
  state.accept_solution(candidate)
243
326
  adaptive_state = "Accept Higher"
244
327
  elif rho >= self.eta_1 and rho < self.eta_2:
245
328
  # Accept Solution with constant weight
246
329
  lam_prox_k1 = lam_prox_k
247
- state.lam_prox_history.append(lam_prox_k1)
248
-
330
+ candidate.lam_prox = lam_prox_k1
249
331
  # Update virtual control weight matrix
250
332
  candidate.lam_vc = self._update_virtual_control_weights(
251
- candidate, candidate_x_prop, settings, state.lam_vc, state.lam_prox
333
+ candidate, candidate_x_prop, settings, state.lam_vc, candidate.lam_prox
252
334
  )
253
- candidate.lam_vb_nodal = state.lam_vb_nodal
254
- candidate.lam_vb_cross = state.lam_vb_cross
255
335
 
256
336
  state.accept_solution(candidate)
257
337
  adaptive_state = "Accept Constant"
258
338
  else:
259
339
  # Accept Solution with lower weight
260
340
  lam_prox_k1 = np.maximum(self.lam_prox_min, self.gamma_2 * lam_prox_k)
261
- state.lam_prox_history.append(lam_prox_k1)
341
+ candidate.lam_prox = lam_prox_k1
262
342
  # Update virtual control weight matrix
263
343
  candidate.lam_vc = self._update_virtual_control_weights(
264
- candidate, candidate_x_prop, settings, state.lam_vc, state.lam_prox
344
+ candidate, candidate_x_prop, settings, state.lam_vc, candidate.lam_prox
265
345
  )
266
- candidate.lam_vb_nodal = state.lam_vb_nodal
267
- candidate.lam_vb_cross = state.lam_vb_cross
346
+
268
347
  state.accept_solution(candidate)
269
348
  adaptive_state = "Accept Lower"
270
349
 
271
350
  else:
272
- state.lam_prox_history.append(lam_prox_k)
351
+ candidate.lam_prox = lam_prox_k
273
352
  candidate.lam_vc = state.lam_vc
274
353
  candidate.lam_vb_nodal = state.lam_vb_nodal
275
354
  candidate.lam_vb_cross = state.lam_vb_cross
@@ -740,7 +740,6 @@ class AlgorithmState:
740
740
 
741
741
  def accept_solution(self, cand: CandidateIterate) -> None:
742
742
  """Accept the given candidate iterate by updating the state in place."""
743
-
744
743
  if cand.x is None or cand.u is None:
745
744
  raise ValueError(
746
745
  "No candidate iterate to accept. Expected algorithm to set "
@@ -775,6 +774,8 @@ class AlgorithmState:
775
774
  if cand.TR is not None:
776
775
  self.TR_history.append(cand.TR)
777
776
 
777
+ if cand.lam_prox is not None:
778
+ self.lam_prox_history.append(cand.lam_prox)
778
779
  if cand.lam_vc is not None:
779
780
  self.lam_vc_history.append(cand.lam_vc)
780
781
  if cand.lam_cost is not None:
@@ -789,6 +790,21 @@ class AlgorithmState:
789
790
  if cand.J_lin is not None:
790
791
  self.J_lin_history.append(cand.J_lin)
791
792
 
793
+ def reject_solution(self, cand: CandidateIterate) -> None:
794
+ """Reject the current candidate and update only the trust-region weight.
795
+
796
+ This is intended for autotuners that decide to *reject* a candidate
797
+ iterate but still want to adapt the proximal (trust-region) weight
798
+ for the next solve. The new trust region weight is taken from
799
+ ``cand.lam_prox`` (shape ``(N, n_states + n_controls)``) and appended
800
+ to the history. It does **not** modify trajectories or any other
801
+ histories.
802
+
803
+ Args:
804
+ cand: The rejected candidate iterate; its ``lam_prox`` is recorded.
805
+ """
806
+ self.lam_prox_history.append(cand.lam_prox)
807
+
792
808
  @property
793
809
  def x(self) -> np.ndarray:
794
810
  """Get current state trajectory array.
@@ -57,6 +57,6 @@ class ConstantProximalWeight(AutotuningBase):
57
57
  else:
58
58
  candidate.lam_cost = weights.lam_cost
59
59
 
60
- state.lam_prox_history.append(state.lam_prox)
60
+ candidate.lam_prox = state.lam_prox
61
61
  state.accept_solution(candidate)
62
62
  return "Accept Constant"
@@ -67,7 +67,7 @@ class RampProximalWeight(AutotuningBase):
67
67
 
68
68
  # Calculate and append new value
69
69
  new_lam_prox = np.minimum(state.lam_prox * self.ramp_factor, self.lam_prox_max)
70
- state.lam_prox_history.append(new_lam_prox)
70
+ candidate.lam_prox = new_lam_prox
71
71
 
72
72
  # If we were already at max, or if we just reached it and it's staying constant
73
73
  if was_at_max:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.4.1.dev152
3
+ Version: 0.4.1.dev153
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
@@ -1024,8 +1024,12 @@ def test_augmented_lagrangian_accept_decrease(
1024
1024
  assert len(algorithm_state.X) == initial_x_len + 1
1025
1025
  assert len(algorithm_state.lam_vc_history) == 2
1026
1026
  assert np.allclose(algorithm_state.lam_vc_history[-1], candidate.lam_vc)
1027
- assert len(algorithm_state.lam_vb_nodal_history) == 2
1028
- assert len(algorithm_state.lam_vb_cross_history) == 2
1027
+ # Virtual buffer weight updates are currently disabled (commented out),
1028
+ # so these histories should not grow in accept branches.
1029
+ assert candidate.lam_vb_nodal is None
1030
+ assert candidate.lam_vb_cross is None
1031
+ assert len(algorithm_state.lam_vb_nodal_history) == 1
1032
+ assert len(algorithm_state.lam_vb_cross_history) == 1
1029
1033
  assert len(algorithm_state.lam_cost_history) == 2
1030
1034
  assert algorithm_state.lam_cost_history[-1] == pytest.approx(candidate.lam_cost)
1031
1035
 
@@ -1183,13 +1187,14 @@ def test_augmented_lagrangian_accept_higher(
1183
1187
  # Candidate should have updated virtual control weights and be accepted,
1184
1188
  # and those weights must be recorded back into the algorithm_state histories.
1185
1189
  assert candidate.lam_vc is not None
1186
- assert candidate.lam_vb_nodal is not None
1187
- assert candidate.lam_vb_cross is not None
1188
1190
  assert len(algorithm_state.X) == initial_x_len + 1
1189
1191
  assert len(algorithm_state.lam_vc_history) == 2
1190
1192
  assert np.allclose(algorithm_state.lam_vc_history[-1], candidate.lam_vc)
1191
- assert len(algorithm_state.lam_vb_nodal_history) == 2
1192
- assert len(algorithm_state.lam_vb_cross_history) == 2
1193
+ # Virtual buffer weight updates are currently disabled (commented out)
1194
+ assert candidate.lam_vb_nodal is None
1195
+ assert candidate.lam_vb_cross is None
1196
+ assert len(algorithm_state.lam_vb_nodal_history) == 1
1197
+ assert len(algorithm_state.lam_vb_cross_history) == 1
1193
1198
  assert len(algorithm_state.lam_cost_history) == 2
1194
1199
  assert algorithm_state.lam_cost_history[-1] == pytest.approx(candidate.lam_cost)
1195
1200
 
@@ -1282,13 +1287,14 @@ def test_augmented_lagrangian_accept_constant(
1282
1287
  # Candidate should have updated virtual control weights and be accepted,
1283
1288
  # and those weights must be recorded back into the algorithm_state histories.
1284
1289
  assert candidate.lam_vc is not None
1285
- assert candidate.lam_vb_nodal is not None
1286
- assert candidate.lam_vb_cross is not None
1287
1290
  assert len(algorithm_state.X) == initial_x_len + 1
1288
1291
  assert len(algorithm_state.lam_vc_history) == 2
1289
1292
  assert np.allclose(algorithm_state.lam_vc_history[-1], candidate.lam_vc)
1290
- assert len(algorithm_state.lam_vb_nodal_history) == 2
1291
- assert len(algorithm_state.lam_vb_cross_history) == 2
1293
+ # Virtual buffer weight updates are currently disabled (commented out)
1294
+ assert candidate.lam_vb_nodal is None
1295
+ assert candidate.lam_vb_cross is None
1296
+ assert len(algorithm_state.lam_vb_nodal_history) == 1
1297
+ assert len(algorithm_state.lam_vb_cross_history) == 1
1292
1298
  assert len(algorithm_state.lam_cost_history) == 2
1293
1299
  assert algorithm_state.lam_cost_history[-1] == pytest.approx(candidate.lam_cost)
1294
1300
 
@@ -358,13 +358,26 @@ def test_constraint_types(constraint_type):
358
358
  jax.clear_caches()
359
359
 
360
360
 
361
- @pytest.mark.parametrize("algorithm_type", ["augmented_lagrangian", "constant_proximal"])
362
- def test_algorithm_types(algorithm_type):
361
+ @pytest.mark.parametrize(
362
+ "autotuner_spec",
363
+ [
364
+ "augmented_lagrangian",
365
+ "constant_proximal",
366
+ "ramp_proximal",
367
+ "string_augmented_lagrangian",
368
+ "dict_ramp_proximal",
369
+ ],
370
+ )
371
+ def test_autotuning(autotuner_spec):
363
372
  """
364
- Test brachistochrone with different algorithm types.
373
+ Test brachistochrone with different autotuning strategies.
374
+
375
+ Covers all three autotuner implementations (AugmentedLagrangian,
376
+ ConstantProximalWeight, RampProximalWeight) as well as the string
377
+ and dict-based resolution paths in ``_resolve_autotuner``.
365
378
 
366
379
  Args:
367
- constraint_type: Specifies which algorithm is used.
380
+ autotuner_spec: Identifies the autotuner and how it is specified.
368
381
  """
369
382
  import jax.numpy as jnp
370
383
 
@@ -412,7 +425,7 @@ def test_algorithm_types(algorithm_type):
412
425
  "velocity": g * ox.Cos(theta[0]),
413
426
  }
414
427
 
415
- # Generate box constraints for all states based on constraint_type
428
+ # Generate box constraints for all states
416
429
  constraint_exprs = []
417
430
  for state in states:
418
431
  constraint_exprs.extend([ox.ctcs(state <= state.max), ox.ctcs(state.min <= state)])
@@ -425,10 +438,16 @@ def test_algorithm_types(algorithm_type):
425
438
  uniform_time_grid=True,
426
439
  )
427
440
 
428
- if algorithm_type == "augmented_lagrangian":
441
+ if autotuner_spec == "augmented_lagrangian":
429
442
  autotuner = ox.AugmentedLagrangian()
430
- elif algorithm_type == "constant_proximal":
443
+ elif autotuner_spec == "constant_proximal":
431
444
  autotuner = ox.ConstantProximalWeight()
445
+ elif autotuner_spec == "ramp_proximal":
446
+ autotuner = ox.RampProximalWeight()
447
+ elif autotuner_spec == "string_augmented_lagrangian":
448
+ autotuner = "AugmentedLagrangian"
449
+ elif autotuner_spec == "dict_ramp_proximal":
450
+ autotuner = {"type": "RampProximalWeight", "ramp_factor": 1.0}
432
451
 
433
452
  problem = Problem(
434
453
  dynamics=dynamics,
@@ -469,7 +488,7 @@ def test_algorithm_types(algorithm_type):
469
488
  g,
470
489
  )
471
490
 
472
- _print_comparison_metrics(comparison, f"Brachistochrone {algorithm_type.capitalize()}")
491
+ _print_comparison_metrics(comparison, f"Brachistochrone Autotuning ({autotuner_spec})")
473
492
  _assert_brachistochrone_accuracy(comparison, problem, result)
474
493
 
475
494
  # Clean up JAX caches
@@ -712,7 +731,12 @@ def test_parameters():
712
731
  constraints=constraint_exprs,
713
732
  N=n,
714
733
  licq_max=1e-8,
715
- algorithm={"lam_prox": 1e0, "lam_cost": 6e-1, "lam_vc": 1e1},
734
+ algorithm={
735
+ "autotuner": ox.ConstantProximalWeight(),
736
+ "lam_prox": 1e0,
737
+ "lam_cost": 6e-1,
738
+ "lam_vc": 1e1,
739
+ },
716
740
  )
717
741
 
718
742
  problem.solver.solver_args = {"abstol": 1e-6, "reltol": 1e-9}
File without changes