openscvx 0.5.3.dev56__tar.gz → 0.5.3.dev58__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.
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/_docs.yml +1 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-examples.yml +3 -1
- openscvx-0.5.3.dev58/.github/workflows/tests-moreau.yml +20 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests.yml +4 -2
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/CONTRIBUTING.md +3 -2
- {openscvx-0.5.3.dev56/openscvx.egg-info → openscvx-0.5.3.dev58}/PKG-INFO +12 -11
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/README.md +7 -6
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/custom_algorithms_autotuners.md +5 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/01_hello_world_brachistochrone.md +1 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/05_visualization.md +5 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/installation.md +13 -11
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_sensor_view.py +2 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/_version.py +3 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/acceptance_ratio.py +23 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/augmented_lagrangian.py +19 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/base.py +13 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/loader.py +1 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/__init__.py +8 -21
- openscvx-0.5.3.dev58/openscvx/plotting/_deps.py +18 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/problem.py +28 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/moreau_ptr_solver.py +27 -37
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/ptr_solver.py +4 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/__init__.py +3 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/expr.py +41 -1
- openscvx-0.5.3.dev58/openscvx/symbolic/expr/lie/_citations.py +14 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/se3.py +10 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/so3.py +10 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stl.py +16 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stljax.py +17 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/problem.py +39 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58/openscvx.egg-info}/PKG-INFO +12 -11
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/SOURCES.txt +6 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/requires.txt +5 -4
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/scm_file_list.json +6 -0
- openscvx-0.5.3.dev58/openscvx.egg-info/scm_version.json +8 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/pyproject.toml +8 -7
- openscvx-0.5.3.dev58/tests/algorithms/autotuner/test_citation.py +44 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/conftest.py +1 -34
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_moreau.py +2 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_moreau_ptr_solver.py +0 -23
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_expr.py +40 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_lie.py +26 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_stl.py +22 -0
- openscvx-0.5.3.dev58/tests/symbolic/test_citations.py +90 -0
- openscvx-0.5.3.dev58/tests/test_citation.py +98 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_examples.py +15 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_plotting.py +9 -1
- openscvx-0.5.3.dev56/openscvx.egg-info/scm_version.json +0 -8
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/_extra.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/docs.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/lint.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/release.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-cvxpygen.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-lie.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-mjx.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.github/workflows/tests-qpax.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.gitignore +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/.gitmodules +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/CITATION.cff +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/LICENSE +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/batching_jit_grad.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/08_mpcc.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/favicon.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-client/index.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/drone_racing.viser +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/changelog.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/citation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/examples.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/index.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/llms.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/versions.json +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_maze.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_maze_viz.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/_viser_embed_export.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone_batched.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/chen_allgoewer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/flappy_bird.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/hypersensitive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/impulsive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/stl_integer_variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/abstract/stl_or.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/aircraft/dynamic_soaring.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/aircraft/supersonic_time_to_climb.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_camera.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/_render.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/animations/senss_hop_lidar_camera.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/3_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_collision.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_disjoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_conditional.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_stl_or.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/dubins_car_waypoint_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_time2spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/readDataFcn.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/_viser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_hybrid.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_ice.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_mpc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_openscvx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/double_integrator_static.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/maze_rrt_scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/moving_safe_zones.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/multiphase_velocity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/_terrain.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/boresight_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/drone_racing_batched_gates.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/circle.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/lunar_terrain_agl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/maze_scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/moving_safe_columns.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/openscvx_logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_hector.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_zigzag.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_viewplanning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_waypoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/double_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/skydio_x2_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_game.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_discrete.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_discrete.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/plotting_viser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/3DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/6DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/_cstc_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/ascent_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/reusable_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/rocket_ilqr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/lidar.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/rocket/senss/senss_dem.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/scaling/scaling_study.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.bin +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.gltf +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_normals.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/halo_orbit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/hohmann_transfer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/let_transfer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/examples/spacecraft/relative_loitering.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/figures/video_preview.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-hero.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-viser.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/home.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/main.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-diagram.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-dropin-banner.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-hero.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-pipeline.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/partials/home-viser-strip.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/material/overrides/sitemap.xml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/mkdocs.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/__main__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/history.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/hyperparams.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/loop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/penalty.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/iteration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/weights.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/config.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/discretize_linearize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/byof.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/expert/validation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/init/inverse_kinematics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/_utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/frax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/menagerie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrations/mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/diffrax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/publication.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/coordinates.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/orbits.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/cones.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/solvers/qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/affine.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/canonicalize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/parameter.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/time.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stljax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/cache.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/caching.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/printing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/utils/utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/scripts/mkdocs_seo_hook.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/setup.cfg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/_iteration_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_jit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_parity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/algorithms/test_make_solve_loop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_impulsive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_multishot_propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.json +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.yaml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/hohmann_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx_dynamics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/_iteration_callback_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_qpax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/solvers/test_subproblem_pytree.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_guess_expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_gmsr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_latex_formulation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_latex.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_autotuning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_discretization.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_expert.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_init.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_initialize_syncs_guesses.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_integrators.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_loader.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_optimization_results.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_post_process_batched_tau_clamp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_results_parameters.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/tests/test_solve_batched_inference.py +0 -0
|
@@ -39,7 +39,9 @@ jobs:
|
|
|
39
39
|
# cvxpygen omitted: its extra is unsatisfiable while cvxpy is pinned <1.9
|
|
40
40
|
# (cvxpygen>=1.0.0 needs cvxpy>=1.9, #551); its tests skip until that resolves.
|
|
41
41
|
# qpax omitted until its solves are stable on Linux runners (#550).
|
|
42
|
-
|
|
42
|
+
# moreau omitted: examples that need it carry the moreau marker and skip
|
|
43
|
+
# here. Solver-level moreau tests run in tests-moreau.yml.
|
|
44
|
+
uv pip install --system -e ".[test,plotting,mjx,lie,frax,stl]"
|
|
43
45
|
|
|
44
46
|
- name: Run examples sweep
|
|
45
47
|
run: |
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: moreau
|
|
2
|
+
|
|
3
|
+
# Badge workflow: health of the moreau integration on main.
|
|
4
|
+
# The weekly cron catches breakage from upstream releases between commits.
|
|
5
|
+
# Kept off the main tests.yml extras job so a moreau release cannot fail
|
|
6
|
+
# the mjx/lie checks.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches:
|
|
11
|
+
- main
|
|
12
|
+
schedule:
|
|
13
|
+
- cron: '0 6 * * 1' # Weekly on Monday, offset from the Sunday examples sweep
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
moreau:
|
|
18
|
+
uses: ./.github/workflows/_extra.yml
|
|
19
|
+
with:
|
|
20
|
+
extra: moreau
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
|
|
39
39
|
- name: Install dependencies
|
|
40
40
|
run: |
|
|
41
|
-
uv pip install --system -e ".[test]"
|
|
41
|
+
uv pip install --system -e ".[test,plotting]"
|
|
42
42
|
|
|
43
43
|
- name: Run unit tests
|
|
44
44
|
run: |
|
|
@@ -82,7 +82,7 @@ jobs:
|
|
|
82
82
|
|
|
83
83
|
- name: Install dependencies
|
|
84
84
|
run: |
|
|
85
|
-
uv pip install --system -e ".[test]"
|
|
85
|
+
uv pip install --system -e ".[test,plotting]"
|
|
86
86
|
|
|
87
87
|
- name: Run e2e tests
|
|
88
88
|
run: |
|
|
@@ -123,6 +123,8 @@ jobs:
|
|
|
123
123
|
# cvxpygen omitted: its extra is unsatisfiable while cvxpy is pinned <1.9
|
|
124
124
|
# (cvxpygen>=1.0.0 needs cvxpy>=1.9, #551); its tests skip until that resolves.
|
|
125
125
|
# qpax omitted until its solves are stable on Linux runners (#550).
|
|
126
|
+
# moreau omitted: tests-moreau.yml installs it and runs `-m moreau`, so an
|
|
127
|
+
# upstream moreau break stays on that badge.
|
|
126
128
|
uv pip install --system -e ".[test,mjx,lie]"
|
|
127
129
|
|
|
128
130
|
- name: Run extras tests
|
|
@@ -16,10 +16,11 @@ source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
|
16
16
|
Then install the package in editable mode with development dependencies:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
pip install -e ".[test]"
|
|
19
|
+
pip install -e ".[test,plotting]"
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
For additional features, you can install optional dependencies:
|
|
23
|
+
- `pip install -e ".[plotting]"` - Plotly, Matplotlib, and Viser visualization
|
|
23
24
|
- `pip install -e ".[cvxpygen]"` - Code generation support
|
|
24
25
|
- `pip install -e ".[stl]"` - STL (Signal Temporal Logic) constraints
|
|
25
26
|
|
|
@@ -32,7 +33,7 @@ git clone git@github.com:OpenSCvx/OpenSCvx.git
|
|
|
32
33
|
cd OpenSCvx
|
|
33
34
|
uv venv
|
|
34
35
|
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
35
|
-
uv pip install -e ".[test]"
|
|
36
|
+
uv pip install -e ".[test,plotting]"
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
To contribute changes, you'll need to create a branch or fork. See [Forking and Merging](#forking-and-merging) below for details on our workflow and [Branch Naming Conventions](#branch-naming-conventions) for required naming patterns.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.5.3.
|
|
3
|
+
Version: 0.5.3.dev58
|
|
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
|
|
@@ -14,13 +14,9 @@ Requires-Dist: cvxpy>=1.8.1
|
|
|
14
14
|
Requires-Dist: qoco
|
|
15
15
|
Requires-Dist: numpy
|
|
16
16
|
Requires-Dist: jax
|
|
17
|
-
Requires-Dist: plotly
|
|
18
17
|
Requires-Dist: termcolor
|
|
19
18
|
Requires-Dist: diffrax
|
|
20
|
-
Requires-Dist: absl-py
|
|
21
19
|
Requires-Dist: flatbuffers
|
|
22
|
-
Requires-Dist: viser
|
|
23
|
-
Requires-Dist: matplotlib
|
|
24
20
|
Requires-Dist: pyyaml
|
|
25
21
|
Requires-Dist: pydantic>=2.0
|
|
26
22
|
Provides-Extra: cvxpygen
|
|
@@ -39,6 +35,10 @@ Requires-Dist: mujoco>=3.0; extra == "mjx"
|
|
|
39
35
|
Requires-Dist: mujoco-mjx>=3.0; extra == "mjx"
|
|
40
36
|
Provides-Extra: frax
|
|
41
37
|
Requires-Dist: frax>=0.0.4; extra == "frax"
|
|
38
|
+
Provides-Extra: plotting
|
|
39
|
+
Requires-Dist: matplotlib; extra == "plotting"
|
|
40
|
+
Requires-Dist: plotly; extra == "plotting"
|
|
41
|
+
Requires-Dist: viser; extra == "plotting"
|
|
42
42
|
Provides-Extra: test
|
|
43
43
|
Requires-Dist: pytest; extra == "test"
|
|
44
44
|
Requires-Dist: pytest-xdist; extra == "test"
|
|
@@ -156,9 +156,10 @@ uv pip install openscvx
|
|
|
156
156
|
> [!TIP]
|
|
157
157
|
> **Optional dependencies**
|
|
158
158
|
>
|
|
159
|
-
>
|
|
159
|
+
> Plotting (Plotly, Matplotlib, and Viser) and CVXPYGen code generation:
|
|
160
160
|
> ```bash
|
|
161
|
-
> pip install openscvx[
|
|
161
|
+
> pip install "openscvx[plotting]"
|
|
162
|
+
> pip install "openscvx[cvxpygen]"
|
|
162
163
|
> ```
|
|
163
164
|
|
|
164
165
|
> [!TIP]
|
|
@@ -221,7 +222,7 @@ Check out the OpenSCvx documentation:
|
|
|
221
222
|
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.
|
|
222
223
|
|
|
223
224
|
> [!Note]
|
|
224
|
-
> To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e
|
|
225
|
+
> To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode with the plotting extra (`pip install -e ".[plotting]"`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
|
|
225
226
|
|
|
226
227
|
To run a problem simply run any of the examples directly, for example:
|
|
227
228
|
|
|
@@ -260,7 +261,7 @@ OpenSCvx integrates with several optional third-party packages. Each installs as
|
|
|
260
261
|
| [jaxlie](https://github.com/brentyi/jaxlie) | `lie` | SO(3)/SE(3) Lie-group operations and IK initialization | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml) |
|
|
261
262
|
| [qpax](https://github.com/qpax-solver/qpax) | `qpax` | JAX-native QP solver backend | [](https://github.com/OpenSCvx/OpenSCvx/issues/550) |
|
|
262
263
|
| [CVXPYGen](https://github.com/cvxgrp/cvxpygen) | `cvxpygen` | Generated C solver code for the convex subproblem | [](https://github.com/OpenSCvx/OpenSCvx/issues/551) |
|
|
263
|
-
| [moreau](https://pypi.org/project/moreau/) | `moreau` |
|
|
264
|
+
| [moreau](https://pypi.org/project/moreau/) | `moreau` | Open Source SOCP solver backend | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml) |
|
|
264
265
|
| [stljax](https://github.com/UW-CTRL/stljax) | `stl` | Signal Temporal Logic robustness bridge |  |
|
|
265
266
|
| [frax](https://github.com/danielpmorton/frax) | `frax` | Robot dynamics for the manipulator examples | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-examples.yml) |
|
|
266
267
|
|
|
@@ -275,7 +276,7 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
|
|
|
275
276
|
Please cite the following works if you use the repository,
|
|
276
277
|
|
|
277
278
|
```tex
|
|
278
|
-
@misc{
|
|
279
|
+
@misc{hayner2026openscvx,
|
|
279
280
|
title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
|
|
280
281
|
author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
|
|
281
282
|
year={2026},
|
|
@@ -315,4 +316,4 @@ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint
|
|
|
315
316
|
}
|
|
316
317
|
```
|
|
317
318
|
|
|
318
|
-
Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
|
319
|
+
Additionally please run `problem.citation()` after `problem.intitialize()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
|
@@ -109,9 +109,10 @@ uv pip install openscvx
|
|
|
109
109
|
> [!TIP]
|
|
110
110
|
> **Optional dependencies**
|
|
111
111
|
>
|
|
112
|
-
>
|
|
112
|
+
> Plotting (Plotly, Matplotlib, and Viser) and CVXPYGen code generation:
|
|
113
113
|
> ```bash
|
|
114
|
-
> pip install openscvx[
|
|
114
|
+
> pip install "openscvx[plotting]"
|
|
115
|
+
> pip install "openscvx[cvxpygen]"
|
|
115
116
|
> ```
|
|
116
117
|
|
|
117
118
|
> [!TIP]
|
|
@@ -174,7 +175,7 @@ Check out the OpenSCvx documentation:
|
|
|
174
175
|
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.
|
|
175
176
|
|
|
176
177
|
> [!Note]
|
|
177
|
-
> To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e
|
|
178
|
+
> To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode with the plotting extra (`pip install -e ".[plotting]"`). See the [Installing From Source](#installing-from-source) section above for detailed installation instructions.
|
|
178
179
|
|
|
179
180
|
To run a problem simply run any of the examples directly, for example:
|
|
180
181
|
|
|
@@ -213,7 +214,7 @@ OpenSCvx integrates with several optional third-party packages. Each installs as
|
|
|
213
214
|
| [jaxlie](https://github.com/brentyi/jaxlie) | `lie` | SO(3)/SE(3) Lie-group operations and IK initialization | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-lie.yml) |
|
|
214
215
|
| [qpax](https://github.com/qpax-solver/qpax) | `qpax` | JAX-native QP solver backend | [](https://github.com/OpenSCvx/OpenSCvx/issues/550) |
|
|
215
216
|
| [CVXPYGen](https://github.com/cvxgrp/cvxpygen) | `cvxpygen` | Generated C solver code for the convex subproblem | [](https://github.com/OpenSCvx/OpenSCvx/issues/551) |
|
|
216
|
-
| [moreau](https://pypi.org/project/moreau/) | `moreau` |
|
|
217
|
+
| [moreau](https://pypi.org/project/moreau/) | `moreau` | Open Source SOCP solver backend | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-moreau.yml) |
|
|
217
218
|
| [stljax](https://github.com/UW-CTRL/stljax) | `stl` | Signal Temporal Logic robustness bridge |  |
|
|
218
219
|
| [frax](https://github.com/danielpmorton/frax) | `frax` | Robot dynamics for the manipulator examples | [](https://github.com/OpenSCvx/OpenSCvx/actions/workflows/tests-examples.yml) |
|
|
219
220
|
|
|
@@ -228,7 +229,7 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
|
|
|
228
229
|
Please cite the following works if you use the repository,
|
|
229
230
|
|
|
230
231
|
```tex
|
|
231
|
-
@misc{
|
|
232
|
+
@misc{hayner2026openscvx,
|
|
232
233
|
title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
|
|
233
234
|
author={Christopher R. Hayner and Griffin J. Norris and Fabio Spada and Samet Uzun and Avi Mittal and Behcet Acıkmese and Karen Leung},
|
|
234
235
|
year={2026},
|
|
@@ -268,4 +269,4 @@ keywords = {Trajectory optimization, Optimal control, Continuous-time constraint
|
|
|
268
269
|
}
|
|
269
270
|
```
|
|
270
271
|
|
|
271
|
-
Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
|
272
|
+
Additionally please run `problem.citation()` after `problem.intitialize()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
{openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UnderTheHood/custom_algorithms_autotuners.md
RENAMED
|
@@ -120,6 +120,11 @@ To add columns to the iteration table, set the class attribute `COLUMNS` to a
|
|
|
120
120
|
list of `openscvx.utils.printing.Column` specs; the algorithm concatenates
|
|
121
121
|
them into its own table via `get_columns`.
|
|
122
122
|
|
|
123
|
+
If the update rule comes from a published scheme, override `citation()` to
|
|
124
|
+
return its BibTeX entries — `Problem.citation()` prints them in a dedicated
|
|
125
|
+
autotuner section. The default is an empty list, right for unpublished
|
|
126
|
+
heuristics.
|
|
127
|
+
|
|
123
128
|
## A custom algorithm
|
|
124
129
|
|
|
125
130
|
An `Algorithm` owns the SCP iteration end to end: it *builds* the JAX-pure
|
{openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/docs/UsersGuide/01_hello_world_brachistochrone.md
RENAMED
|
@@ -316,7 +316,7 @@ theta_traj = results.trajectory["theta"]
|
|
|
316
316
|
|
|
317
317
|
### Visualizing the Results
|
|
318
318
|
|
|
319
|
-
OpenSCvx provides
|
|
319
|
+
OpenSCvx provides plotting utilities for quick visualization of your results. Install them with `pip install "openscvx[plotting]"`. The simplest way to see your solution is with `plot_states()` and `plot_controls()`:
|
|
320
320
|
|
|
321
321
|
```python
|
|
322
322
|
from openscvx.plotting import plot_states, plot_controls
|
|
@@ -22,7 +22,11 @@ This tutorial covers:
|
|
|
22
22
|
|
|
23
23
|
## 2D Plots with Plotly
|
|
24
24
|
|
|
25
|
-
The `openscvx.plotting` module provides high-level functions for common visualization tasks. These work with any problem
|
|
25
|
+
The `openscvx.plotting` module provides high-level functions for common visualization tasks. These work with any problem once the plotting extra is installed:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
pip install "openscvx[plotting]"
|
|
29
|
+
```
|
|
26
30
|
|
|
27
31
|
### Time Series: States and Controls
|
|
28
32
|
|
|
@@ -9,8 +9,8 @@ description: >-
|
|
|
9
9
|
|
|
10
10
|
OpenSCvx is published on PyPI as [`openscvx`](https://pypi.org/project/openscvx/)
|
|
11
11
|
and requires **Python 3.11 or newer**. Its core depends on JAX and CVXPY; the
|
|
12
|
-
optional extras below pull in additional solvers, dynamics backends,
|
|
13
|
-
features only when you need them.
|
|
12
|
+
optional extras below pull in plotting, additional solvers, dynamics backends,
|
|
13
|
+
and modeling features only when you need them.
|
|
14
14
|
|
|
15
15
|
## How to install OpenSCvx
|
|
16
16
|
|
|
@@ -19,8 +19,8 @@ features only when you need them.
|
|
|
19
19
|
```sh
|
|
20
20
|
uv pip install openscvx
|
|
21
21
|
|
|
22
|
-
# Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
23
|
-
uv pip install "openscvx[cvxpygen,stl,lie,mjx]"
|
|
22
|
+
# Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
23
|
+
uv pip install "openscvx[plotting,cvxpygen,stl,lie,mjx]"
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
=== "pip"
|
|
@@ -28,8 +28,8 @@ features only when you need them.
|
|
|
28
28
|
```sh
|
|
29
29
|
pip install openscvx
|
|
30
30
|
|
|
31
|
-
# Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
32
|
-
pip install "openscvx[cvxpygen,stl,lie,mjx]"
|
|
31
|
+
# Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
32
|
+
pip install "openscvx[plotting,cvxpygen,stl,lie,mjx]"
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
=== "From source (editable)"
|
|
@@ -39,12 +39,13 @@ features only when you need them.
|
|
|
39
39
|
cd OpenSCvx
|
|
40
40
|
uv pip install -e .
|
|
41
41
|
|
|
42
|
-
# Optional: cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
43
|
-
uv pip install -e ".[cvxpygen,stl,lie,mjx]"
|
|
42
|
+
# Optional: plotting, cvxpygen, stljax, jaxlie, mujoco-mjx extras
|
|
43
|
+
uv pip install -e ".[plotting,cvxpygen,stl,lie,mjx]"
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Install from source if you want to
|
|
47
|
-
|
|
46
|
+
Install from source if you want to modify the library or track the development
|
|
47
|
+
branch. Running the [examples](examples.md) needs the `plotting` extra as well,
|
|
48
|
+
because those scripts import Plotly and Viser at startup.
|
|
48
49
|
|
|
49
50
|
## Optional extras
|
|
50
51
|
|
|
@@ -52,9 +53,10 @@ Extras are installed with the `openscvx[extra1,extra2]` syntax shown above.
|
|
|
52
53
|
|
|
53
54
|
| Extra | Enables |
|
|
54
55
|
|-------|---------|
|
|
56
|
+
| `plotting` | 2D plots and 3D scenes (`matplotlib`, `plotly`, `viser`). |
|
|
55
57
|
| `cvxpygen` | Generated C solvers via `cvxpygen` + `qocogen`. |
|
|
56
58
|
| `qpax` | The `qpax` differentiable QP backend. |
|
|
57
|
-
| `moreau` | The
|
|
59
|
+
| `moreau` | The `moreau` conic solver backend. |
|
|
58
60
|
| `stl` | Signal Temporal Logic constraints via `stljax`. |
|
|
59
61
|
| `lie` | Lie-group operators via `jaxlie`. |
|
|
60
62
|
| `mjx` | MuJoCo MJX dynamics (`mujoco`, `mujoco-mjx`). |
|
|
@@ -6,7 +6,8 @@ frame-perfectly aligned with the viser recording and can be composited with
|
|
|
6
6
|
ffmpeg afterwards.
|
|
7
7
|
|
|
8
8
|
Uses matplotlib's Agg canvas rather than plotly + kaleido so there's no
|
|
9
|
-
headless-Chrome dependency
|
|
9
|
+
headless-Chrome dependency. Matplotlib comes with the plotting extra
|
|
10
|
+
(``pip install 'openscvx[plotting]'``). Raw RGB
|
|
10
11
|
frames are piped straight into ``ffmpeg -f rawvideo`` (same pattern as
|
|
11
12
|
``_render.py``), so there's no intermediate PNGs and no Python-side decode.
|
|
12
13
|
"""
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.5.3.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 5, 3, '
|
|
21
|
+
__version__ = version = '0.5.3.dev58'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 5, 3, 'dev58')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gb7be593bb'
|
{openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/acceptance_ratio.py
RENAMED
|
@@ -88,6 +88,29 @@ class AcceptanceRatioAutotuner(AutotuningBase):
|
|
|
88
88
|
Column("adaptive_state", "Adaptive", 16, "{}", color_adaptive_state, Verbosity.FULL),
|
|
89
89
|
]
|
|
90
90
|
|
|
91
|
+
def citation(self) -> List[str]:
|
|
92
|
+
"""Return BibTeX citations for the SCvx acceptance-ratio update rule."""
|
|
93
|
+
return [
|
|
94
|
+
r"""@inproceedings{mao2016scvx,
|
|
95
|
+
title={Successive convexification of non-convex optimal control problems and its
|
|
96
|
+
convergence properties},
|
|
97
|
+
author={Mao, Yuanqi and Szmuk, Michael and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
|
|
98
|
+
booktitle={2016 IEEE 55th Conference on Decision and Control (CDC)},
|
|
99
|
+
pages={3636--3641},
|
|
100
|
+
year={2016},
|
|
101
|
+
publisher={IEEE}
|
|
102
|
+
}""",
|
|
103
|
+
r"""@misc{mao2019scvx,
|
|
104
|
+
title={Successive Convexification: A Superlinearly Convergent Algorithm for
|
|
105
|
+
Non-convex Optimal Control Problems},
|
|
106
|
+
author={Mao, Yuanqi and Szmuk, Michael and Xu, Xiangru and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
|
|
107
|
+
year={2019},
|
|
108
|
+
eprint={1804.06539},
|
|
109
|
+
archivePrefix={arXiv},
|
|
110
|
+
primaryClass={math.OC}
|
|
111
|
+
}""",
|
|
112
|
+
]
|
|
113
|
+
|
|
91
114
|
def _update_multipliers(
|
|
92
115
|
self,
|
|
93
116
|
state: "AlgorithmState",
|
{openscvx-0.5.3.dev56 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/augmented_lagrangian.py
RENAMED
|
@@ -6,7 +6,7 @@ SCP loop records history outside this module.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import warnings
|
|
9
|
-
from typing import TYPE_CHECKING, Literal
|
|
9
|
+
from typing import TYPE_CHECKING, List, Literal
|
|
10
10
|
|
|
11
11
|
import jax.numpy as jnp
|
|
12
12
|
from pydantic import BaseModel, ConfigDict
|
|
@@ -256,6 +256,24 @@ class AugmentedLagrangian(AcceptanceRatioAutotuner):
|
|
|
256
256
|
# :py:meth:`_update_virtual_buffer_nodal_weights`.
|
|
257
257
|
return jnp.minimum(state.hyper.lam_vc_max, lam_vb_new)
|
|
258
258
|
|
|
259
|
+
def citation(self) -> List[str]:
|
|
260
|
+
"""Return BibTeX citations for the augmented-Lagrangian multiplier updates.
|
|
261
|
+
|
|
262
|
+
Extends the inherited SCvx acceptance-ratio references with Luo's
|
|
263
|
+
dissertation, whose penalty-weight updates this autotuner implements.
|
|
264
|
+
"""
|
|
265
|
+
return super().citation() + [
|
|
266
|
+
r"""@phdthesis{luo2025modeling,
|
|
267
|
+
title={Modeling and Algorithms for Nonconvex Trajectory Generation Problems:
|
|
268
|
+
From Constraint Reformulations and First-Order Proximal Methods to
|
|
269
|
+
Structure-Exploiting Convex Solvers},
|
|
270
|
+
author={Luo, Dayou},
|
|
271
|
+
school={University of Washington},
|
|
272
|
+
year={2025},
|
|
273
|
+
url={https://hdl.handle.net/1773/53364}
|
|
274
|
+
}"""
|
|
275
|
+
]
|
|
276
|
+
|
|
259
277
|
|
|
260
278
|
# =============================================================================
|
|
261
279
|
# Pydantic spec for dict / YAML validation
|
|
@@ -257,3 +257,16 @@ class AutotuningBase(ABC):
|
|
|
257
257
|
the autotuner's decision; the SCP loop records that into history
|
|
258
258
|
and maps it to a printable label.
|
|
259
259
|
"""
|
|
260
|
+
|
|
261
|
+
def citation(self) -> List[str]:
|
|
262
|
+
"""Return BibTeX citations for the published update rule this autotuner implements.
|
|
263
|
+
|
|
264
|
+
Autotuners implementing a published scheme override this so that
|
|
265
|
+
:meth:`openscvx.Problem.citation` can credit it alongside the
|
|
266
|
+
algorithm, solver, and discretization references. Unpublished
|
|
267
|
+
heuristics keep the default.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
List of BibTeX citation strings. Empty for uncited autotuners.
|
|
271
|
+
"""
|
|
272
|
+
return []
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
"""Trajectory visualization and plotting utilities.
|
|
2
2
|
|
|
3
|
+
Requires the plotting extra::
|
|
4
|
+
|
|
5
|
+
pip install 'openscvx[plotting]'
|
|
6
|
+
|
|
3
7
|
This module provides reusable building blocks for visualizing trajectory
|
|
4
8
|
optimization results. It is intentionally minimal - we provide common utilities
|
|
5
9
|
that can be composed together, not a complete solution that tries to do
|
|
@@ -41,27 +45,10 @@ For problem-specific visualization examples (drones, rockets, etc.), see
|
|
|
41
45
|
``examples/plotting_viser.py``.
|
|
42
46
|
"""
|
|
43
47
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
# Accessing openscvx.plotting.viser will raise a helpful error message.
|
|
49
|
-
class _MissingOptionalDependency:
|
|
50
|
-
def __init__(self, *, package: str, exc: Exception):
|
|
51
|
-
self._package = package
|
|
52
|
-
self._exc = exc
|
|
53
|
-
|
|
54
|
-
def __getattr__(self, name: str):
|
|
55
|
-
raise ModuleNotFoundError(
|
|
56
|
-
f"Optional dependency '{self._package}' is required for 3D visualization.\n"
|
|
57
|
-
f"Install it with: pip install {self._package}\n"
|
|
58
|
-
f"Original error: {self._exc}"
|
|
59
|
-
) from self._exc
|
|
60
|
-
|
|
61
|
-
def __repr__(self) -> str: # pragma: no cover
|
|
62
|
-
return f"<missing optional dependency '{self._package}'>"
|
|
63
|
-
|
|
64
|
-
viser = _MissingOptionalDependency(package="viser", exc=e) # type: ignore[assignment]
|
|
48
|
+
from . import (
|
|
49
|
+
_deps, # noqa: F401 # raises if the plotting extra is missing
|
|
50
|
+
viser,
|
|
51
|
+
)
|
|
65
52
|
from .plotting import (
|
|
66
53
|
plot_control_component,
|
|
67
54
|
plot_controls,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Fail fast when the plotting extra is not installed.
|
|
2
|
+
|
|
3
|
+
Imported by :mod:`openscvx.plotting` before Plotly, Matplotlib, or Viser.
|
|
4
|
+
``import openscvx`` does not import this module, so solving a problem does not
|
|
5
|
+
require the plotting stack.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from importlib.util import find_spec
|
|
9
|
+
|
|
10
|
+
_REQUIRED = ("matplotlib", "plotly", "viser")
|
|
11
|
+
|
|
12
|
+
_missing = [name for name in _REQUIRED if find_spec(name) is None]
|
|
13
|
+
if _missing:
|
|
14
|
+
missing = ", ".join(_missing)
|
|
15
|
+
raise ImportError(
|
|
16
|
+
"openscvx.plotting requires the optional plotting extra "
|
|
17
|
+
f"(missing {missing}). Install it with: pip install 'openscvx[plotting]'"
|
|
18
|
+
)
|
|
@@ -2299,9 +2299,11 @@ class Problem:
|
|
|
2299
2299
|
def citation(self) -> str:
|
|
2300
2300
|
"""Return BibTeX citations for all components used in this problem.
|
|
2301
2301
|
|
|
2302
|
-
Aggregates citations from the algorithm
|
|
2303
|
-
|
|
2304
|
-
|
|
2302
|
+
Aggregates citations from the algorithm, its autotuner, the convex
|
|
2303
|
+
solver, the discretization, and every symbolic node in the problem's
|
|
2304
|
+
expression graphs (e.g. GMSR STL operators, jaxlie-backed Lie-group
|
|
2305
|
+
maps). Each section is prefixed with a comment indicating which
|
|
2306
|
+
component the citation is for.
|
|
2305
2307
|
|
|
2306
2308
|
Returns:
|
|
2307
2309
|
Formatted string containing all BibTeX citations with comments.
|
|
@@ -2324,6 +2326,14 @@ class Problem:
|
|
|
2324
2326
|
citations = "\n".join(algo_citations)
|
|
2325
2327
|
sections.append(f"{header}\n\n{citations}")
|
|
2326
2328
|
|
|
2329
|
+
# Autotuner citations
|
|
2330
|
+
tuner_citations = self._algorithm.autotuner.citation()
|
|
2331
|
+
if tuner_citations:
|
|
2332
|
+
tuner_name = type(self._algorithm.autotuner).__name__
|
|
2333
|
+
header = f"% Autotuner: {tuner_name}"
|
|
2334
|
+
citations = "\n".join(tuner_citations)
|
|
2335
|
+
sections.append(f"{header}\n\n{citations}")
|
|
2336
|
+
|
|
2327
2337
|
# Solver citations
|
|
2328
2338
|
solver_citations = self._solver.citation()
|
|
2329
2339
|
if solver_citations:
|
|
@@ -2340,6 +2350,21 @@ class Problem:
|
|
|
2340
2350
|
citations = "\n".join(dis_citations)
|
|
2341
2351
|
sections.append(f"{header}\n\n{citations}")
|
|
2342
2352
|
|
|
2353
|
+
# Symbolic-node citations, gathered by walking the expression graphs.
|
|
2354
|
+
# Distinct node classes can share a reference (every GMSR operator
|
|
2355
|
+
# cites the same paper), so entries are deduplicated across classes.
|
|
2356
|
+
node_citations = self.symbolic.citations()
|
|
2357
|
+
if node_citations:
|
|
2358
|
+
names = ", ".join(sorted(node_citations))
|
|
2359
|
+
header = f"% Symbolic Operators: {names}"
|
|
2360
|
+
entries: list[str] = []
|
|
2361
|
+
for name in sorted(node_citations):
|
|
2362
|
+
for entry in node_citations[name]:
|
|
2363
|
+
if entry not in entries:
|
|
2364
|
+
entries.append(entry)
|
|
2365
|
+
citations = "\n".join(entries)
|
|
2366
|
+
sections.append(f"{header}\n\n{citations}")
|
|
2367
|
+
|
|
2343
2368
|
sections.append(r"% --- END AUTO-GENERATED CITATIONS")
|
|
2344
2369
|
|
|
2345
2370
|
return "\n\n".join(sections)
|