openscvx 0.5.3.dev57__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.dev57 → openscvx-0.5.3.dev58}/.github/workflows/_docs.yml +1 -1
- {openscvx-0.5.3.dev57 → 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.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests.yml +4 -2
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/CONTRIBUTING.md +3 -2
- {openscvx-0.5.3.dev57/openscvx.egg-info → openscvx-0.5.3.dev58}/PKG-INFO +12 -11
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/README.md +7 -6
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/01_hello_world_brachistochrone.md +1 -1
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/05_visualization.md +5 -1
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/installation.md +13 -11
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_sensor_view.py +2 -1
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/_version.py +3 -3
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/loader.py +1 -1
- {openscvx-0.5.3.dev57 → 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.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/moreau_ptr_solver.py +27 -37
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/ptr_solver.py +4 -3
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58/openscvx.egg-info}/PKG-INFO +12 -11
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/SOURCES.txt +2 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/requires.txt +5 -4
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/scm_file_list.json +2 -0
- openscvx-0.5.3.dev58/openscvx.egg-info/scm_version.json +8 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/pyproject.toml +8 -7
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/conftest.py +1 -34
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_moreau.py +2 -3
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_moreau_ptr_solver.py +0 -23
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_examples.py +15 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_plotting.py +9 -1
- openscvx-0.5.3.dev57/openscvx.egg-info/scm_version.json +0 -8
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/_extra.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/docs.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/lint.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/release.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-cvxpygen.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-lie.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-mjx.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.github/workflows/tests-qpax.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.gitignore +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/.gitmodules +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/CITATION.cff +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/LICENSE +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/batching_jit_grad.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/custom_algorithms_autotuners.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/08_mpcc.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/favicon.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-client/index.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/drone_racing.viser +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/changelog.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/citation.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/examples.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/index.md +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/llms.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/docs/versions.json +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_maze.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_maze_viz.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/_viser_embed_export.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/brachistochrone_batched.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/chen_allgoewer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/flappy_bird.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/hypersensitive.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/impulsive.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/stl_integer_variable.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/abstract/stl_or.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/aircraft/dynamic_soaring.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/aircraft/supersonic_time_to_climb.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_camera.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/_render.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/logo.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/animations/senss_hop_lidar_camera.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/3_dof_arm.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_collision.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/7_dof_arm_vp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_disjoint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_conditional.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_obstacle_stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_stl_or.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/dubins_car_waypoint_stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_time2spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_tracks/readDataFcn.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/_viser.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_hybrid.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_ice.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_mpc.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/car/racing/race_car_openscvx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/_plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/double_integrator_static.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/maze_rrt_scp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/moving_safe_zones.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/multiphase_velocity.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/_plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/_terrain.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/boresight_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/cinema_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/drone_racing_batched_gates.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/circle.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/lunar_terrain_agl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/maze_scp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/moving_safe_columns.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/openscvx_logo.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_hector.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/drone/quadrotor_zigzag.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_pick_place.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_viewplanning.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/panda_frax_waypoint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/double_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/skydio_x2_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_game.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mjx/triple_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_discrete.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_analytical.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/dubins_car_circle_discrete.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/plotting_viser.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/3DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/6DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/_cstc_plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/ascent_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/reusable_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/rocket_ilqr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_dem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/dem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_halo/lidar.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/rocket/senss/senss_dem.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/scaling/scaling_study.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.bin +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone.gltf +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_normals.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/halo_orbit.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/hohmann_transfer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/let_transfer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/examples/spacecraft/relative_loitering.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/figures/video_preview.png +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-hero.css +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/assets/stylesheets/home-viser.css +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/home.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/main.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-diagram.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-dropin-banner.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-hero.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-pipeline.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/partials/home-viser-strip.html +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/material/overrides/sitemap.xml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/mkdocs.yml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/__main__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/acceptance_ratio.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/augmented_lagrangian.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/history.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/hyperparams.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/loop.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/penalty.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/iteration.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/state.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/algorithms/weights.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/config.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/discretize_linearize.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/byof.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/expert/validation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/init/inverse_kinematics.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/_utils.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/frax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/menagerie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrations/mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/diffrax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/publication.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/coordinates.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/orbits.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/problem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/base.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/cones.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/solvers/qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/affine.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/canonicalize.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/autodiff.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/_citations.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/se3.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/lie/so3.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/parameter.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/stljax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/time.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/state.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/control.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/state.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/stljax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/problem.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/cache.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/caching.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/printing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx/utils/utils.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/scripts/mkdocs_seo_hook.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/setup.cfg +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/_iteration_helpers.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_citation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_jit.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_iteration_fn_parity.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/algorithms/test_make_solve_loop.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_impulsive.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_multishot_propagation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.json +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/fixtures/brachistochrone.yaml +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/hohmann_analytical.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/integrations/test_mjx_dynamics.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/_iteration_callback_helpers.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_qpax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_iteration_callback_vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/solvers/test_subproblem_pytree.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_autodiff.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_guess_expr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_lie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_citations.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_gmsr.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_latex_formulation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_lower_latex.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_autotuning.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_citation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_discretization.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_expert.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_init.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_initialize_syncs_guesses.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_integrators.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_loader.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_optimization_results.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_post_process_batched_tau_clamp.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_propagation.py +0 -0
- {openscvx-0.5.3.dev57 → openscvx-0.5.3.dev58}/tests/test_results_parameters.py +0 -0
- {openscvx-0.5.3.dev57 → 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.dev57 → 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'
|
|
@@ -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
|
+
)
|
|
@@ -77,13 +77,11 @@ try:
|
|
|
77
77
|
import jax.numpy as jnp
|
|
78
78
|
import moreau
|
|
79
79
|
from moreau.jax import Solver as _MoreauJaxSolver
|
|
80
|
-
from moreau.jax import solver as _moreau_jax_solver_fn # functional factory
|
|
81
80
|
|
|
82
81
|
_MOREAU_AVAILABLE = True
|
|
83
82
|
except ImportError: # pragma: no cover — exercised by the install-error test
|
|
84
83
|
moreau = None # type: ignore[assignment]
|
|
85
84
|
_MoreauJaxSolver = None # type: ignore[assignment,misc]
|
|
86
|
-
_moreau_jax_solver_fn = None # type: ignore[assignment]
|
|
87
85
|
jax = None # type: ignore[assignment]
|
|
88
86
|
jnp = None # type: ignore[assignment]
|
|
89
87
|
_MOREAU_AVAILABLE = False
|
|
@@ -269,12 +267,14 @@ class MoreauPTRSolver(PTRSolver):
|
|
|
269
267
|
iterations on successful solves, and natively handles user
|
|
270
268
|
:class:`~openscvx.solvers.cones.SOCConstraint` convex constraints.
|
|
271
269
|
|
|
272
|
-
The JAX-pure entry point :meth:`iteration_callback`
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
270
|
+
The JAX-pure entry point :meth:`iteration_callback` calls the jitted
|
|
271
|
+
kernel on the :class:`moreau.jax.Solver` built in :meth:`initialize`,
|
|
272
|
+
as ``(P_data, A_data, q, b) -> (JaxSolution, JaxSolveInfo)``, so the
|
|
273
|
+
backend composes with ``jax.jit`` and ``jax.vmap``. Moreau 0.4 removed
|
|
274
|
+
the public ``moreau.jax.solver`` factory. ``Solver.solve`` returns only
|
|
275
|
+
the solution and stores status on ``solver.info``, which is not batched
|
|
276
|
+
under ``vmap``. The kernel has no warm-start argument, so every call is
|
|
277
|
+
a cold start: both
|
|
278
278
|
:meth:`~openscvx.problem.Problem.solve` and
|
|
279
279
|
:meth:`~openscvx.problem.Problem.solve_jax` drive
|
|
280
280
|
``iteration_callback`` for the SCP body, so neither thread Moreau's
|
|
@@ -607,22 +607,6 @@ class MoreauPTRSolver(PTRSolver):
|
|
|
607
607
|
settings=moreau_settings,
|
|
608
608
|
)
|
|
609
609
|
|
|
610
|
-
# Functional-API solve function for ``iteration_callback``. Returns
|
|
611
|
-
# ``(JaxSolution, JaxSolveInfo)`` as registered pytrees and does NOT
|
|
612
|
-
# accept warm-start — see the 2026-05-17 Decision Log entry in
|
|
613
|
-
# ``plans/solver-iteration-callbacks.md``. The OO ``self._moreau``
|
|
614
|
-
# path stays in use for the NumPy ``solve()`` route (which warm-starts).
|
|
615
|
-
self._moreau_solve_fn = _moreau_jax_solver_fn(
|
|
616
|
-
n=L.n_z,
|
|
617
|
-
m=self._n_con,
|
|
618
|
-
P_row_offsets=jnp.array(P_indptr),
|
|
619
|
-
P_col_indices=jnp.array(P_indices),
|
|
620
|
-
A_row_offsets=jnp.array(A_indptr),
|
|
621
|
-
A_col_indices=jnp.array(A_indices),
|
|
622
|
-
cones=cones,
|
|
623
|
-
settings=moreau_settings,
|
|
624
|
-
)
|
|
625
|
-
|
|
626
610
|
# ------------------------------------------------------------------
|
|
627
611
|
# Per-iteration update hooks
|
|
628
612
|
# ------------------------------------------------------------------
|
|
@@ -1386,16 +1370,19 @@ class MoreauPTRSolver(PTRSolver):
|
|
|
1386
1370
|
def iteration_callback(self):
|
|
1387
1371
|
"""JAX-pure ``(state, SubproblemData) -> SubproblemSolution``.
|
|
1388
1372
|
|
|
1389
|
-
Composes :meth:`_assemble_conic_jax` + Moreau's
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1373
|
+
Composes :meth:`_assemble_conic_jax` + Moreau's jitted kernel
|
|
1374
|
+
+ :meth:`_build_solution_jax` into a single ``@jax.jit``-decorated
|
|
1375
|
+
closure.
|
|
1376
|
+
|
|
1377
|
+
The kernel (``moreau.jax.Solver._solve_raw``) returns
|
|
1378
|
+
``(JaxSolution, JaxSolveInfo)`` and does **not** accept a warm-start
|
|
1379
|
+
(see the 2026-05-17 Decision Log entry in
|
|
1380
|
+
``plans/solver-iteration-callbacks.md``). Moreau 0.4 removed the
|
|
1381
|
+
public ``moreau.jax.solver`` factory; ``Solver.solve`` drops status
|
|
1382
|
+
onto ``solver.info``, which does not batch under ``vmap``. Every call
|
|
1383
|
+
is a cold start; ``state`` is accepted only for cross-backend
|
|
1384
|
+
signature uniformity. Both :meth:`~openscvx.problem.Problem.solve`
|
|
1385
|
+
and :meth:`~openscvx.problem.Problem.solve_jax` route through this
|
|
1399
1386
|
callback for the SCP body, so the warm-start carry isn't threaded
|
|
1400
1387
|
on either path — threading it would require an
|
|
1401
1388
|
:class:`AlgorithmState.moreau_carry` field (future extension in
|
|
@@ -1403,7 +1390,7 @@ class MoreauPTRSolver(PTRSolver):
|
|
|
1403
1390
|
|
|
1404
1391
|
The returned callable takes ``(state, data)``: ``state`` is the
|
|
1405
1392
|
:class:`AlgorithmState` pytree, accepted for cross-backend signature
|
|
1406
|
-
uniformity but unused (
|
|
1393
|
+
uniformity but unused (the kernel takes no warm-start);
|
|
1407
1394
|
``data`` is the :class:`SubproblemData` pytree carrying the
|
|
1408
1395
|
per-iteration linearization arrays, penalty weights, and boundary
|
|
1409
1396
|
conditions.
|
|
@@ -1414,11 +1401,14 @@ class MoreauPTRSolver(PTRSolver):
|
|
|
1414
1401
|
"have been called first."
|
|
1415
1402
|
)
|
|
1416
1403
|
|
|
1417
|
-
|
|
1404
|
+
# Public ``Solver.solve`` returns only the solution. The jitted kernel
|
|
1405
|
+
# it calls still returns ``(JaxSolution, JaxSolveInfo)``, which is
|
|
1406
|
+
# what ``vmap`` can carry as a pytree.
|
|
1407
|
+
solve_fn = self._moreau._solve_raw
|
|
1418
1408
|
csr_to_coo_perm = jnp.asarray(self._csr_to_coo_perm)
|
|
1419
1409
|
|
|
1420
1410
|
def step(state, data: SubproblemData) -> SubproblemSolution:
|
|
1421
|
-
del state #
|
|
1411
|
+
del state # The jitted kernel takes no warm-start.
|
|
1422
1412
|
P_data, coo_vals, q, b = self._assemble_conic_jax(data)
|
|
1423
1413
|
A_data = coo_vals[csr_to_coo_perm]
|
|
1424
1414
|
sol, info = solve_fn(P_data, A_data, q, b)
|
|
@@ -30,9 +30,10 @@ Backends:
|
|
|
30
30
|
JAX-differentiable SCP loop in follow-up work.
|
|
31
31
|
:class:`openscvx.solvers.moreau_ptr_solver.MoreauPTRSolver`
|
|
32
32
|
Sparse conic program assembled as CSR JAX arrays and solved with
|
|
33
|
-
``moreau.jax.Solver
|
|
34
|
-
iterations
|
|
35
|
-
(
|
|
33
|
+
``moreau.jax.Solver``. The NumPy path warm-starts between SCP
|
|
34
|
+
iterations. The JAX-pure path calls that solver's jitted kernel,
|
|
35
|
+
which returns ``(solution, info)`` and does not warm-start. Uses SOC
|
|
36
|
+
epigraphs for the L1 / pos
|
|
36
37
|
PTR penalties instead of QPAX-style slack expansion.
|
|
37
38
|
"""
|
|
38
39
|
|
|
@@ -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.
|
|
@@ -20,6 +20,7 @@ pyproject.toml
|
|
|
20
20
|
.github/workflows/tests-examples.yml
|
|
21
21
|
.github/workflows/tests-lie.yml
|
|
22
22
|
.github/workflows/tests-mjx.yml
|
|
23
|
+
.github/workflows/tests-moreau.yml
|
|
23
24
|
.github/workflows/tests-qpax.yml
|
|
24
25
|
.github/workflows/tests.yml
|
|
25
26
|
docs/changelog.md
|
|
@@ -301,6 +302,7 @@ openscvx/lowered/parameters.py
|
|
|
301
302
|
openscvx/lowered/problem.py
|
|
302
303
|
openscvx/lowered/unified.py
|
|
303
304
|
openscvx/plotting/__init__.py
|
|
305
|
+
openscvx/plotting/_deps.py
|
|
304
306
|
openscvx/plotting/plotting.py
|
|
305
307
|
openscvx/plotting/publication.py
|
|
306
308
|
openscvx/plotting/scp_iteration.py
|