openscvx 0.5.3.dev55__tar.gz → 0.5.3.dev57__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.dev55/openscvx.egg-info → openscvx-0.5.3.dev57}/PKG-INFO +23 -19
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/README.md +22 -18
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/custom_algorithms_autotuners.md +5 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/_version.py +3 -3
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/acceptance_ratio.py +23 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/augmented_lagrangian.py +19 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/base.py +13 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/problem.py +28 -3
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/__init__.py +3 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/expr.py +41 -1
- openscvx-0.5.3.dev57/openscvx/symbolic/expr/lie/_citations.py +14 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/se3.py +10 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/so3.py +10 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stl.py +16 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stljax.py +17 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/problem.py +39 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57/openscvx.egg-info}/PKG-INFO +23 -19
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/SOURCES.txt +4 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/scm_file_list.json +4 -0
- openscvx-0.5.3.dev57/openscvx.egg-info/scm_version.json +8 -0
- openscvx-0.5.3.dev57/tests/algorithms/autotuner/test_citation.py +44 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_expr.py +40 -1
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_lie.py +26 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_stl.py +22 -0
- openscvx-0.5.3.dev57/tests/symbolic/test_citations.py +90 -0
- openscvx-0.5.3.dev57/tests/test_citation.py +98 -0
- openscvx-0.5.3.dev55/openscvx.egg-info/scm_version.json +0 -8
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/_extra.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/docs.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/lint.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/release.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-cvxpygen.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-examples.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-lie.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-mjx.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests-qpax.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.github/workflows/tests.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.gitignore +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/.gitmodules +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/CITATION.cff +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/CONTRIBUTING.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/LICENSE +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/batching_jit_grad.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/05_visualization.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/08_mpcc.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/favicon.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-client/index.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/drone_racing.viser +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/changelog.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/citation.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/examples.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/index.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/installation.md +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/llms.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/docs/versions.json +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_maze.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_maze_viz.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/_viser_embed_export.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone_batched.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/chen_allgoewer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/flappy_bird.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/hypersensitive.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/impulsive.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/stl_integer_variable.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/abstract/stl_or.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/aircraft/dynamic_soaring.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/aircraft/supersonic_time_to_climb.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_camera.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_render.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/_sensor_view.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/logo.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/animations/senss_hop_lidar_camera.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/3_dof_arm.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_collision.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_vp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_disjoint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_conditional.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_stl_or.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/dubins_car_waypoint_stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_time2spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/readDataFcn.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/_viser.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_hybrid.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_ice.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_mpc.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_openscvx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/_plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/double_integrator_static.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/maze_rrt_scp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/moving_safe_zones.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/multiphase_velocity.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/_plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/_terrain.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/boresight_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/drone_racing_batched_gates.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/circle.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/lunar_terrain_agl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/maze_scp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/moving_safe_columns.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/openscvx_logo.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_hector.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_zigzag.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_pick_place.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_viewplanning.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_waypoint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/double_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/skydio_x2_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_game.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_discrete.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_analytical.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_discrete.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/plotting_viser.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/3DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/6DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/_cstc_plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/ascent_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/reusable_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/rocket_ilqr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_dem.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/dem.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/lidar.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/rocket/senss/senss_dem.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/scaling/scaling_study.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.bin +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.gltf +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_normals.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/halo_orbit.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/hohmann_transfer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/let_transfer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/examples/spacecraft/relative_loitering.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/figures/video_preview.png +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-hero.css +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-viser.css +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/home.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/main.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-diagram.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-dropin-banner.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-hero.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-pipeline.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/partials/home-viser-strip.html +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/material/overrides/sitemap.xml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/mkdocs.yml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/__main__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/history.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/hyperparams.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/loop.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/penalty.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/iteration.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/state.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/algorithms/weights.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/config.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/discretize_linearize.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/byof.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/expert/validation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/init/inverse_kinematics.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/_utils.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/frax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/menagerie.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrations/mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/diffrax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/loader.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/publication.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/coordinates.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/orbits.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/base.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/cones.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/moreau_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/solvers/qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/affine.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/canonicalize.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/autodiff.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/parameter.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/time.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/state.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/control.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/state.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stljax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/cache.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/caching.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/printing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx/utils/utils.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/pyproject.toml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/scripts/mkdocs_seo_hook.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/setup.cfg +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/_iteration_helpers.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_jit.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_parity.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/algorithms/test_make_solve_loop.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/conftest.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_impulsive.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_multishot_propagation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.json +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.yaml +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/hohmann_analytical.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx_dynamics.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/_iteration_callback_helpers.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_moreau.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_qpax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_moreau_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/solvers/test_subproblem_pytree.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_autodiff.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_guess_expr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_gmsr.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_latex_formulation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_latex.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_autotuning.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_discretization.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_examples.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_expert.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_init.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_initialize_syncs_guesses.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_integrators.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_loader.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_optimization_results.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_plotting.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_post_process_batched_tau_clamp.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_propagation.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_results_parameters.py +0 -0
- {openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/tests/test_solve_batched_inference.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.5.3.
|
|
3
|
+
Version: 0.5.3.dev57
|
|
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
|
|
@@ -275,27 +275,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
|
|
|
275
275
|
Please cite the following works if you use the repository,
|
|
276
276
|
|
|
277
277
|
```tex
|
|
278
|
-
@
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
doi={10.1109/LRA.2025.3545299}}
|
|
278
|
+
@misc{hayner2026openscvxopensourcemodularextensible,
|
|
279
|
+
title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
|
|
280
|
+
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
|
+
year={2026},
|
|
282
|
+
eprint={2608.21631},
|
|
283
|
+
archivePrefix={arXiv},
|
|
284
|
+
primaryClass={cs.RO},
|
|
285
|
+
url={https://arxiv.org/abs/2608.21631},
|
|
286
|
+
}
|
|
288
287
|
```
|
|
289
288
|
|
|
290
289
|
```tex
|
|
291
|
-
@
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
290
|
+
@article{elango2025ctcs,
|
|
291
|
+
title = {Continuous-time successive convexification for constrained trajectory optimization},
|
|
292
|
+
journal = {Automatica},
|
|
293
|
+
volume = {180},
|
|
294
|
+
pages = {112464},
|
|
295
|
+
year = {2025},
|
|
296
|
+
issn = {0005-1098},
|
|
297
|
+
doi = {https://doi.org/10.1016/j.automatica.2025.112464},
|
|
298
|
+
url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
|
|
299
|
+
author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
|
|
300
|
+
keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
|
|
299
301
|
}
|
|
300
302
|
```
|
|
301
303
|
|
|
@@ -312,3 +314,5 @@ Please cite the following works if you use the repository,
|
|
|
312
314
|
month = mar,
|
|
313
315
|
}
|
|
314
316
|
```
|
|
317
|
+
|
|
318
|
+
Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
|
@@ -228,27 +228,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
|
|
|
228
228
|
Please cite the following works if you use the repository,
|
|
229
229
|
|
|
230
230
|
```tex
|
|
231
|
-
@
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
doi={10.1109/LRA.2025.3545299}}
|
|
231
|
+
@misc{hayner2026openscvxopensourcemodularextensible,
|
|
232
|
+
title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
|
|
233
|
+
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
|
+
year={2026},
|
|
235
|
+
eprint={2608.21631},
|
|
236
|
+
archivePrefix={arXiv},
|
|
237
|
+
primaryClass={cs.RO},
|
|
238
|
+
url={https://arxiv.org/abs/2608.21631},
|
|
239
|
+
}
|
|
241
240
|
```
|
|
242
241
|
|
|
243
242
|
```tex
|
|
244
|
-
@
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
243
|
+
@article{elango2025ctcs,
|
|
244
|
+
title = {Continuous-time successive convexification for constrained trajectory optimization},
|
|
245
|
+
journal = {Automatica},
|
|
246
|
+
volume = {180},
|
|
247
|
+
pages = {112464},
|
|
248
|
+
year = {2025},
|
|
249
|
+
issn = {0005-1098},
|
|
250
|
+
doi = {https://doi.org/10.1016/j.automatica.2025.112464},
|
|
251
|
+
url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
|
|
252
|
+
author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
|
|
253
|
+
keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
|
|
252
254
|
}
|
|
253
255
|
```
|
|
254
256
|
|
|
@@ -265,3 +267,5 @@ Please cite the following works if you use the repository,
|
|
|
265
267
|
month = mar,
|
|
266
268
|
}
|
|
267
269
|
```
|
|
270
|
+
|
|
271
|
+
Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
{openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/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
|
|
@@ -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.dev57'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 5, 3, 'dev57')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9f23a62a0'
|
{openscvx-0.5.3.dev55 → openscvx-0.5.3.dev57}/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.dev55 → openscvx-0.5.3.dev57}/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 []
|
|
@@ -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)
|
|
@@ -23,7 +23,7 @@ Module Organization:
|
|
|
23
23
|
|
|
24
24
|
Core Expressions (expr.py):
|
|
25
25
|
Base classes and utilities including `Expr`, `Leaf`, `Parameter`, `Constant`,
|
|
26
|
-
and helper functions `to_expr` and `
|
|
26
|
+
and helper functions `to_expr`, `traverse`, and `walk`.
|
|
27
27
|
|
|
28
28
|
Arithmetic Operations (arithmetic.py):
|
|
29
29
|
Fundamental arithmetic operations including `Add`, `Sub`, `Mul`, `Div`,
|
|
@@ -110,6 +110,7 @@ from .expr import (
|
|
|
110
110
|
NodeReference,
|
|
111
111
|
to_expr,
|
|
112
112
|
traverse,
|
|
113
|
+
walk,
|
|
113
114
|
)
|
|
114
115
|
|
|
115
116
|
# Lie algebra operations
|
|
@@ -182,6 +183,7 @@ __all__ = [
|
|
|
182
183
|
"Parameter",
|
|
183
184
|
"to_expr",
|
|
184
185
|
"traverse",
|
|
186
|
+
"walk",
|
|
185
187
|
"transitive_closure",
|
|
186
188
|
"discrete_sparsity",
|
|
187
189
|
"Add",
|
|
@@ -67,7 +67,7 @@ import functools
|
|
|
67
67
|
import hashlib
|
|
68
68
|
import struct
|
|
69
69
|
import threading
|
|
70
|
-
from typing import TYPE_CHECKING, Callable, List, Tuple, Union
|
|
70
|
+
from typing import TYPE_CHECKING, Callable, Iterator, List, Tuple, Union
|
|
71
71
|
|
|
72
72
|
if TYPE_CHECKING:
|
|
73
73
|
from .linalg import Transpose
|
|
@@ -357,6 +357,20 @@ class Expr:
|
|
|
357
357
|
"""
|
|
358
358
|
return []
|
|
359
359
|
|
|
360
|
+
def citation(self) -> List[str]:
|
|
361
|
+
"""Return BibTeX citations for the published method behind this node.
|
|
362
|
+
|
|
363
|
+
Most nodes are plain arithmetic and cite nothing. Nodes that implement
|
|
364
|
+
a published formulation or defer to an external library (e.g. the GMSR
|
|
365
|
+
STL operators, the jaxlie-backed Lie-group maps) override this so that
|
|
366
|
+
:meth:`openscvx.Problem.citation` can credit the methods a problem
|
|
367
|
+
actually uses by scanning its expression trees.
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
List of BibTeX citation strings. Empty for uncited nodes.
|
|
371
|
+
"""
|
|
372
|
+
return []
|
|
373
|
+
|
|
360
374
|
def canonicalize(self) -> "Expr":
|
|
361
375
|
"""
|
|
362
376
|
Return a canonical (simplified) form of this expression.
|
|
@@ -631,6 +645,32 @@ def traverse(expr: Expr, visit: Callable[[Expr], None]):
|
|
|
631
645
|
traverse(child, visit)
|
|
632
646
|
|
|
633
647
|
|
|
648
|
+
def walk(expr: Expr) -> Iterator[Expr]:
|
|
649
|
+
"""Yield ``expr`` and every node reachable through ``children()``, each once.
|
|
650
|
+
|
|
651
|
+
The counterpart of :func:`ast.walk` for symbolic expressions: a pre-order
|
|
652
|
+
traversal of the expression graph. Unlike :func:`traverse`, each distinct
|
|
653
|
+
node is visited a single time — canonicalization preserves sharing, so an
|
|
654
|
+
expression is generally a DAG, and revisiting shared subexpressions can be
|
|
655
|
+
exponentially wasteful.
|
|
656
|
+
|
|
657
|
+
Args:
|
|
658
|
+
expr: Root expression to traverse.
|
|
659
|
+
|
|
660
|
+
Yields:
|
|
661
|
+
Each distinct node in the expression graph, parents before children.
|
|
662
|
+
"""
|
|
663
|
+
seen = set()
|
|
664
|
+
stack = [expr]
|
|
665
|
+
while stack:
|
|
666
|
+
node = stack.pop()
|
|
667
|
+
if id(node) in seen:
|
|
668
|
+
continue
|
|
669
|
+
seen.add(id(node))
|
|
670
|
+
yield node
|
|
671
|
+
stack.extend(node.children())
|
|
672
|
+
|
|
673
|
+
|
|
634
674
|
class Constant(Leaf):
|
|
635
675
|
"""Constant value expression.
|
|
636
676
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Shared BibTeX entry for the jaxlie-backed Lie-group nodes.
|
|
2
|
+
|
|
3
|
+
The SO(3)/SE(3) exponential and logarithm maps in this package lower through
|
|
4
|
+
:mod:`jaxlie`; its authors ask users to cite the paper below. The entry lives
|
|
5
|
+
here once so ``so3.py`` and ``se3.py`` can both return it from ``citation()``.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
JAXLIE_CITATION = r"""@inproceedings{yi2021iros,
|
|
9
|
+
title={Differentiable Factor Graph Optimization for Learning Smoothers},
|
|
10
|
+
author={Brent Yi and Michelle Lee and Alina Kloss and Roberto Mart\'in-Mart\'in and
|
|
11
|
+
Jeannette Bohg},
|
|
12
|
+
booktitle={2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
|
|
13
|
+
year={2021}
|
|
14
|
+
}"""
|
|
@@ -12,11 +12,12 @@ Note:
|
|
|
12
12
|
SE3 tangent parameterization, so no reordering is needed during lowering.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
from typing import Tuple, Union
|
|
15
|
+
from typing import List, Tuple, Union
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
19
|
from ..expr import Expr, to_expr
|
|
20
|
+
from ._citations import JAXLIE_CITATION
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class SE3Exp(Expr):
|
|
@@ -81,6 +82,10 @@ class SE3Exp(Expr):
|
|
|
81
82
|
def children(self):
|
|
82
83
|
return [self.twist]
|
|
83
84
|
|
|
85
|
+
def citation(self) -> List[str]:
|
|
86
|
+
"""Return the BibTeX citation for jaxlie, which backs this map's lowering."""
|
|
87
|
+
return [JAXLIE_CITATION]
|
|
88
|
+
|
|
84
89
|
def canonicalize(self) -> "Expr":
|
|
85
90
|
twist = self.twist.canonicalize()
|
|
86
91
|
return SE3Exp(twist)
|
|
@@ -150,6 +155,10 @@ class SE3Log(Expr):
|
|
|
150
155
|
def children(self):
|
|
151
156
|
return [self.transform]
|
|
152
157
|
|
|
158
|
+
def citation(self) -> List[str]:
|
|
159
|
+
"""Return the BibTeX citation for jaxlie, which backs this map's lowering."""
|
|
160
|
+
return [JAXLIE_CITATION]
|
|
161
|
+
|
|
153
162
|
def canonicalize(self) -> "Expr":
|
|
154
163
|
transform = self.transform.canonicalize()
|
|
155
164
|
return SE3Log(transform)
|
|
@@ -6,11 +6,12 @@ group, enabling axis-angle to rotation matrix conversions and vice versa.
|
|
|
6
6
|
Requires jaxlie: pip install openscvx[lie]
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from typing import Tuple, Union
|
|
9
|
+
from typing import List, Tuple, Union
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
12
|
|
|
13
13
|
from ..expr import Expr, to_expr
|
|
14
|
+
from ._citations import JAXLIE_CITATION
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class SO3Exp(Expr):
|
|
@@ -58,6 +59,10 @@ class SO3Exp(Expr):
|
|
|
58
59
|
def children(self):
|
|
59
60
|
return [self.omega]
|
|
60
61
|
|
|
62
|
+
def citation(self) -> List[str]:
|
|
63
|
+
"""Return the BibTeX citation for jaxlie, which backs this map's lowering."""
|
|
64
|
+
return [JAXLIE_CITATION]
|
|
65
|
+
|
|
61
66
|
def canonicalize(self) -> "Expr":
|
|
62
67
|
omega = self.omega.canonicalize()
|
|
63
68
|
return SO3Exp(omega)
|
|
@@ -116,6 +121,10 @@ class SO3Log(Expr):
|
|
|
116
121
|
def children(self):
|
|
117
122
|
return [self.rotation]
|
|
118
123
|
|
|
124
|
+
def citation(self) -> List[str]:
|
|
125
|
+
"""Return the BibTeX citation for jaxlie, which backs this map's lowering."""
|
|
126
|
+
return [JAXLIE_CITATION]
|
|
127
|
+
|
|
119
128
|
def canonicalize(self) -> "Expr":
|
|
120
129
|
rotation = self.rotation.canonicalize()
|
|
121
130
|
return SO3Log(rotation)
|
|
@@ -57,7 +57,7 @@ See also:
|
|
|
57
57
|
"""
|
|
58
58
|
|
|
59
59
|
from dataclasses import dataclass
|
|
60
|
-
from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union
|
|
60
|
+
from typing import TYPE_CHECKING, Callable, List, Optional, Tuple, Union
|
|
61
61
|
|
|
62
62
|
import numpy as np
|
|
63
63
|
|
|
@@ -304,6 +304,21 @@ class STLExpr(Expr):
|
|
|
304
304
|
# explicit `time` state). Currently raises
|
|
305
305
|
# NotImplementedError at .over() time.
|
|
306
306
|
|
|
307
|
+
def citation(self) -> List[str]:
|
|
308
|
+
"""Return the BibTeX citation for the GMSR robustness formulation."""
|
|
309
|
+
return [
|
|
310
|
+
r"""@misc{uzun2024gmsr,
|
|
311
|
+
title={Optimization with Temporal and Logical Specifications via Generalized
|
|
312
|
+
Mean-based Smooth Robustness Measures},
|
|
313
|
+
author={Uzun, Samet and Elango, Purnanand and Garoche, Pierre-Lo{\"i}c and
|
|
314
|
+
A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
|
|
315
|
+
year={2024},
|
|
316
|
+
eprint={2405.10996},
|
|
317
|
+
archivePrefix={arXiv},
|
|
318
|
+
primaryClass={math.OC}
|
|
319
|
+
}"""
|
|
320
|
+
]
|
|
321
|
+
|
|
307
322
|
def over(
|
|
308
323
|
self,
|
|
309
324
|
interval: "IntervalLike",
|
|
@@ -9,7 +9,7 @@ STL operators accept Constraint objects (predicates) and extract robustness
|
|
|
9
9
|
expressions which are lowered to STLJax during compilation.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union
|
|
12
|
+
from typing import TYPE_CHECKING, Callable, List, Optional, Tuple, Union
|
|
13
13
|
|
|
14
14
|
import numpy as np
|
|
15
15
|
|
|
@@ -53,6 +53,22 @@ class STLJaxExpr(Expr):
|
|
|
53
53
|
Eventually, Always, or Until for actual STL specifications.
|
|
54
54
|
"""
|
|
55
55
|
|
|
56
|
+
def citation(self) -> List[str]:
|
|
57
|
+
"""Return the BibTeX citation the stljax library asks its users to cite."""
|
|
58
|
+
return [
|
|
59
|
+
r"""@article{kapoor2025stlcg,
|
|
60
|
+
title={{STLCG++}: A Masking Approach for Differentiable Signal Temporal Logic
|
|
61
|
+
Specification},
|
|
62
|
+
author={Kapoor, Parv and Mizuta, Kazuki and Kang, Eunsuk and Leung, Karen},
|
|
63
|
+
journal={IEEE Robotics and Automation Letters},
|
|
64
|
+
volume={10},
|
|
65
|
+
number={9},
|
|
66
|
+
pages={9240--9247},
|
|
67
|
+
year={2025},
|
|
68
|
+
doi={10.1109/LRA.2025.3588389}
|
|
69
|
+
}"""
|
|
70
|
+
]
|
|
71
|
+
|
|
56
72
|
def over(
|
|
57
73
|
self,
|
|
58
74
|
interval: tuple[int, int],
|
|
@@ -117,3 +117,42 @@ class SymbolicProblem:
|
|
|
117
117
|
2. Propagation dynamics have been set up
|
|
118
118
|
"""
|
|
119
119
|
return self.constraints.is_categorized and self.dynamics_prop is not None
|
|
120
|
+
|
|
121
|
+
def citations(self) -> Dict[str, List[str]]:
|
|
122
|
+
"""Collect BibTeX citations from every expression node in the problem.
|
|
123
|
+
|
|
124
|
+
Walks the dynamics, constraint, and propagation expression graphs and
|
|
125
|
+
gathers :meth:`~openscvx.symbolic.expr.expr.Expr.citation` from each
|
|
126
|
+
node, so :meth:`openscvx.Problem.citation` can credit the published
|
|
127
|
+
methods a problem actually uses (e.g. GMSR STL operators, jaxlie-backed
|
|
128
|
+
Lie-group maps). Works at either lifecycle stage: unsorted constraints
|
|
129
|
+
are scanned before preprocessing, categorized ones after.
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
Mapping from node class name to the deduplicated BibTeX entries
|
|
133
|
+
cited by nodes of that name, containing only names that cite
|
|
134
|
+
anything. Same-named classes (e.g. the GMSR and stljax ``Or``)
|
|
135
|
+
share a key; their entries are merged.
|
|
136
|
+
"""
|
|
137
|
+
from openscvx.symbolic.expr import walk
|
|
138
|
+
|
|
139
|
+
roots: List["Expr"] = [self.dynamics]
|
|
140
|
+
for optional in (self.dynamics_discrete, self.dynamics_prop):
|
|
141
|
+
if optional is not None:
|
|
142
|
+
roots.append(optional)
|
|
143
|
+
if self.algebraic_prop:
|
|
144
|
+
roots.extend(self.algebraic_prop.values())
|
|
145
|
+
c = self.constraints
|
|
146
|
+
roots.extend(
|
|
147
|
+
[*c.unsorted, *c.ctcs, *c.nodal, *c.nodal_convex, *c.cross_node, *c.cross_node_convex]
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
cited: Dict[str, List[str]] = {}
|
|
151
|
+
for root in roots:
|
|
152
|
+
for node in walk(root):
|
|
153
|
+
entries = node.citation()
|
|
154
|
+
if not entries:
|
|
155
|
+
continue
|
|
156
|
+
bucket = cited.setdefault(type(node).__name__, [])
|
|
157
|
+
bucket.extend(e for e in entries if e not in bucket)
|
|
158
|
+
return cited
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.5.3.
|
|
3
|
+
Version: 0.5.3.dev57
|
|
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
|
|
@@ -275,27 +275,29 @@ This work was supported by a NASA Space Technology Graduate Research Opportunity
|
|
|
275
275
|
Please cite the following works if you use the repository,
|
|
276
276
|
|
|
277
277
|
```tex
|
|
278
|
-
@
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
doi={10.1109/LRA.2025.3545299}}
|
|
278
|
+
@misc{hayner2026openscvxopensourcemodularextensible,
|
|
279
|
+
title={OpenSCvx: An Open-Source Modular and Extensible Nonlinear Trajectory Planning Package},
|
|
280
|
+
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
|
+
year={2026},
|
|
282
|
+
eprint={2608.21631},
|
|
283
|
+
archivePrefix={arXiv},
|
|
284
|
+
primaryClass={cs.RO},
|
|
285
|
+
url={https://arxiv.org/abs/2608.21631},
|
|
286
|
+
}
|
|
288
287
|
```
|
|
289
288
|
|
|
290
289
|
```tex
|
|
291
|
-
@
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
290
|
+
@article{elango2025ctcs,
|
|
291
|
+
title = {Continuous-time successive convexification for constrained trajectory optimization},
|
|
292
|
+
journal = {Automatica},
|
|
293
|
+
volume = {180},
|
|
294
|
+
pages = {112464},
|
|
295
|
+
year = {2025},
|
|
296
|
+
issn = {0005-1098},
|
|
297
|
+
doi = {https://doi.org/10.1016/j.automatica.2025.112464},
|
|
298
|
+
url = {https://www.sciencedirect.com/science/article/pii/S0005109825003589},
|
|
299
|
+
author = {Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
|
|
300
|
+
keywords = {Trajectory optimization, Optimal control, Continuous-time constraint satisfaction, Sequential convex programming},
|
|
299
301
|
}
|
|
300
302
|
```
|
|
301
303
|
|
|
@@ -312,3 +314,5 @@ Please cite the following works if you use the repository,
|
|
|
312
314
|
month = mar,
|
|
313
315
|
}
|
|
314
316
|
```
|
|
317
|
+
|
|
318
|
+
Additionally please run `problem.citation()` to generate the appropriate bibtex citations for the corresponding components used within your problem.
|
|
@@ -353,6 +353,7 @@ openscvx/symbolic/expr/time.py
|
|
|
353
353
|
openscvx/symbolic/expr/variable.py
|
|
354
354
|
openscvx/symbolic/expr/vmap.py
|
|
355
355
|
openscvx/symbolic/expr/lie/__init__.py
|
|
356
|
+
openscvx/symbolic/expr/lie/_citations.py
|
|
356
357
|
openscvx/symbolic/expr/lie/adjoint.py
|
|
357
358
|
openscvx/symbolic/expr/lie/se3.py
|
|
358
359
|
openscvx/symbolic/expr/lie/so3.py
|
|
@@ -434,6 +435,7 @@ tests/brachistochrone_analytical.py
|
|
|
434
435
|
tests/conftest.py
|
|
435
436
|
tests/hohmann_analytical.py
|
|
436
437
|
tests/test_autotuning.py
|
|
438
|
+
tests/test_citation.py
|
|
437
439
|
tests/test_cvxpygen_optional.py
|
|
438
440
|
tests/test_discretization.py
|
|
439
441
|
tests/test_examples.py
|
|
@@ -455,6 +457,7 @@ tests/algorithms/test_iteration_fn_jit.py
|
|
|
455
457
|
tests/algorithms/test_iteration_fn_parity.py
|
|
456
458
|
tests/algorithms/test_make_solve_loop.py
|
|
457
459
|
tests/algorithms/autotuner/__init__.py
|
|
460
|
+
tests/algorithms/autotuner/test_citation.py
|
|
458
461
|
tests/algorithms/autotuner/test_defaults_agreement.py
|
|
459
462
|
tests/algorithms/autotuner/test_hyper_overrides.py
|
|
460
463
|
tests/algorithms/autotuner/test_update_weights_jit.py
|
|
@@ -486,6 +489,7 @@ tests/solvers/test_qpax_ptr_solver.py
|
|
|
486
489
|
tests/solvers/test_subproblem_pytree.py
|
|
487
490
|
tests/symbolic/__init__.py
|
|
488
491
|
tests/symbolic/test_augmentation.py
|
|
492
|
+
tests/symbolic/test_citations.py
|
|
489
493
|
tests/symbolic/test_gmsr.py
|
|
490
494
|
tests/symbolic/test_hashing.py
|
|
491
495
|
tests/symbolic/test_latex_formulation.py
|