openscvx 0.5.3.dev56__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.dev56/openscvx.egg-info → openscvx-0.5.3.dev57}/PKG-INFO +1 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UnderTheHood/custom_algorithms_autotuners.md +5 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/_version.py +3 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/acceptance_ratio.py +23 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/augmented_lagrangian.py +19 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/base.py +13 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/problem.py +28 -3
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/__init__.py +3 -1
- {openscvx-0.5.3.dev56 → 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.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/se3.py +10 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/so3.py +10 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stl.py +16 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/stljax.py +17 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/problem.py +39 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57/openscvx.egg-info}/PKG-INFO +1 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/SOURCES.txt +4 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/scm_file_list.json +4 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/scm_version.json +2 -2
- openscvx-0.5.3.dev57/tests/algorithms/autotuner/test_citation.py +44 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_expr.py +40 -1
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_lie.py +26 -0
- {openscvx-0.5.3.dev56 → 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.dev56 → openscvx-0.5.3.dev57}/.github/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/_extra.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/docs.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/lint.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/release.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests-cvxpygen.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests-examples.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests-lie.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests-mjx.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests-qpax.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.github/workflows/tests.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.gitignore +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/.gitmodules +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/CITATION.cff +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/CONTRIBUTING.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/LICENSE +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/README.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UnderTheHood/batching_jit_grad.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/05_visualization.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/08_mpcc.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/UsersGuide/09_mjx_dynamics.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/favicon.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/viser-client/index.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/drone_racing.viser +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/assets/viser-recordings/franka_fr3v2_pick_place.viser +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/changelog.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/citation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/examples.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/index.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/installation.md +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/llms.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/docs/versions.json +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/_maze.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/_maze_viz.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/_viser_embed_export.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/brachistochrone_batched.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/chen_allgoewer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/flappy_bird.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/hypersensitive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/impulsive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/stl_integer_variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/abstract/stl_or.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/aircraft/dynamic_soaring.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/aircraft/supersonic_time_to_climb.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/_camera.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/_render.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/_sensor_view.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/animations/senss_hop_lidar_camera.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/3_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_collision.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/7_dof_arm_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/arm/franka_fr3v2_viewplanning_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car_disjoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_conditional.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car_obstacle_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car_stl_or.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/dubins_car_waypoint_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_time2spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/LMS_Track_x4.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_tracks/readDataFcn.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/_viser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_hybrid.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_ice.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_mpc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_multi_agent_mpcc_ice.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/car/racing/race_car_openscvx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/double_integrator_static.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/maze_rrt_scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/moving_safe_zones.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/multiphase_velocity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/double_integrator/obstacle_avoidance_vmap_2d.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/_terrain.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/boresight_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/cinema_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/drone_racing_batched_gates.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/circle.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/openscvx_logo_single.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/quadrotor_mesh.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/lunar_terrain_agl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/maze_scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/moving_safe_columns.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/openscvx_logo.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_hector.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/drone/quadrotor_zigzag.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/panda_frax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_pick_place.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_viewplanning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/panda_frax_waypoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/ur5e_assets/ur5e.urdf +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/frax/ur5e_pen_trace_mpcc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/double_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/skydio_x2_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_3d_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_game.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mjx/triple_cartpole_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_discrete.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mpc/double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mpc/dubins_car_circle_discrete.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/mpc/realtime_double_integrator_drone_racing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/multi_agent/ilqgames_three_agent_lqr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/multi_agent/multi_agent_circle_swap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/pendulum/pendulum_swingup_ocp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/plotting_viser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/3DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/6DoF_pdg_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/3DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/6DoF_pdg_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/dubins_car_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_batched_ic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/6DoF_pdg_stc_ifthen.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/_cstc_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/ascent_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/reusable_launch_vehicle.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/rocket_ilqr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_dem_static.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_gimbal_hop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_hop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/6DoF_pdg_stc_senss_planar.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/_dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/dem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/_halo/lidar.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/_hop_lidar_overlay.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/rocket/senss/senss_dem.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/scaling/scaling_study.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.bin +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone.gltf +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_albedo.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_ao.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_normals.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_pbr_jpg.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/capstone_plot_mesh.npz +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/capstone/foil_normal.jpg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/dual_deputy_inspection_cw.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/halo_orbit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/hohmann_transfer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/let_transfer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/examples/spacecraft/relative_loitering.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/figures/video_preview.png +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-dropin.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-hero.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/assets/stylesheets/home-viser.css +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/home.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/main.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/partials/home-diagram.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/partials/home-dropin-banner.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/partials/home-hero.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/partials/home-pipeline.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/partials/home-viser-strip.html +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/material/overrides/sitemap.xml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/mkdocs.yml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/__main__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/adaptive_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/constant_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/autotuner/ramp_proximal_weight.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/history.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/hyperparams.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/loop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/penalty.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/iteration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/scvx/penalized_trust_region.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/algorithms/weights.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/config.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/discretize_linearize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/linearize_discretize_sparse.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/bcoo_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/discretization/sparse_utils/sparse_jacobian.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/expert/byof.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/expert/validation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/init/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/init/inverse_kinematics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/_utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/frax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/menagerie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrations/mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrators/diffrax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/loader.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/publication.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/coordinates.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/orbits.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/base.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/cones.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/cvxpy_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/moreau_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/solvers/qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/affine.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/canonicalize.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/parameter.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/time.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/stljax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_lowerer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/control.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/formulation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/state.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/lowerers/latex/vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/stljax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/cache.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/caching.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/printing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx/utils/utils.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/pyproject.toml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/scripts/mkdocs_copy_viser_client_hook.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/scripts/mkdocs_seo_hook.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/setup.cfg +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/_iteration_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_defaults_agreement.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_hyper_overrides.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/autotuner/test_update_weights_jit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/test_algorithm_state_pytree.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_jit.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/test_iteration_fn_parity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/algorithms/test_make_solve_loop.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/conftest.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_impulsive.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_multishot_propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_cvxpy_export_errors.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_batched_export_roundtrip.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_bare_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_jit_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_brachistochrone.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/e2e/test_solve_jax_vmap_converged_no_drift.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.json +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/fixtures/brachistochrone.yaml +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/hohmann_analytical.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/integrations/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/integrations/test_mjx_dynamics.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/_iteration_callback_helpers.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_cvxpy_callback_jit_spike.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_cvxpy.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_moreau.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_qpax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_iteration_callback_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_moreau_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_qpax_ptr_solver.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/solvers/test_subproblem_pytree.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_autodiff.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_guess_expr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_gmsr.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_latex_formulation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_lower_latex.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_autotuning.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_discretization.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_examples.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_expert.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_init.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_initialize_syncs_guesses.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_integrators.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_loader.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_optimization_results.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_plotting.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_post_process_batched_tau_clamp.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_propagation.py +0 -0
- {openscvx-0.5.3.dev56 → openscvx-0.5.3.dev57}/tests/test_results_parameters.py +0 -0
- {openscvx-0.5.3.dev56 → 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
|
{openscvx-0.5.3.dev56 → 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.dev56 → 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.dev56 → 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
|
|
@@ -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
|
|
@@ -328,6 +328,7 @@
|
|
|
328
328
|
"openscvx/symbolic/expr/control.py",
|
|
329
329
|
"openscvx/symbolic/expr/expr.py",
|
|
330
330
|
"openscvx/symbolic/expr/lie/__init__.py",
|
|
331
|
+
"openscvx/symbolic/expr/lie/_citations.py",
|
|
331
332
|
"openscvx/symbolic/expr/lie/adjoint.py",
|
|
332
333
|
"openscvx/symbolic/expr/lie/se3.py",
|
|
333
334
|
"openscvx/symbolic/expr/lie/so3.py",
|
|
@@ -426,6 +427,7 @@
|
|
|
426
427
|
"tests/algorithms/__init__.py",
|
|
427
428
|
"tests/algorithms/_iteration_helpers.py",
|
|
428
429
|
"tests/algorithms/autotuner/__init__.py",
|
|
430
|
+
"tests/algorithms/autotuner/test_citation.py",
|
|
429
431
|
"tests/algorithms/autotuner/test_defaults_agreement.py",
|
|
430
432
|
"tests/algorithms/autotuner/test_hyper_overrides.py",
|
|
431
433
|
"tests/algorithms/autotuner/test_update_weights_jit.py",
|
|
@@ -495,6 +497,7 @@
|
|
|
495
497
|
"tests/symbolic/parser/test_tokenizer.py",
|
|
496
498
|
"tests/symbolic/parser/test_vmap.py",
|
|
497
499
|
"tests/symbolic/test_augmentation.py",
|
|
500
|
+
"tests/symbolic/test_citations.py",
|
|
498
501
|
"tests/symbolic/test_gmsr.py",
|
|
499
502
|
"tests/symbolic/test_hashing.py",
|
|
500
503
|
"tests/symbolic/test_latex_formulation.py",
|
|
@@ -505,6 +508,7 @@
|
|
|
505
508
|
"tests/symbolic/test_sparsity.py",
|
|
506
509
|
"tests/symbolic/test_unified.py",
|
|
507
510
|
"tests/test_autotuning.py",
|
|
511
|
+
"tests/test_citation.py",
|
|
508
512
|
"tests/test_cvxpygen_optional.py",
|
|
509
513
|
"tests/test_discretization.py",
|
|
510
514
|
"tests/test_examples.py",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Autotuner ``citation()`` returns the references behind each update rule.
|
|
2
|
+
|
|
3
|
+
Published schemes cite their papers; unpublished heuristics return the base
|
|
4
|
+
class's empty default. Like the sibling autotuner tests, this reads class
|
|
5
|
+
metadata only — no solves.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from openscvx.algorithms.autotuner.acceptance_ratio import AcceptanceRatioAutotuner
|
|
9
|
+
from openscvx.algorithms.autotuner.adaptive_proximal_weight import AdaptiveProximalWeight
|
|
10
|
+
from openscvx.algorithms.autotuner.augmented_lagrangian import AugmentedLagrangian
|
|
11
|
+
from openscvx.algorithms.autotuner.constant_proximal_weight import ConstantProximalWeight
|
|
12
|
+
from openscvx.algorithms.autotuner.ramp_proximal_weight import RampProximalWeight
|
|
13
|
+
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# Published update rules cite their papers
|
|
16
|
+
# =============================================================================
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_acceptance_ratio_cites_scvx():
|
|
20
|
+
entries = AcceptanceRatioAutotuner().citation()
|
|
21
|
+
assert any("mao2016scvx" in e for e in entries)
|
|
22
|
+
assert any("mao2019scvx" in e for e in entries)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_augmented_lagrangian_extends_scvx_with_luo_dissertation():
|
|
26
|
+
entries = AugmentedLagrangian().citation()
|
|
27
|
+
# Inherits the SCvx acceptance-ratio references and adds Luo's dissertation.
|
|
28
|
+
assert any("mao2016scvx" in e for e in entries)
|
|
29
|
+
assert any("luo2025modeling" in e for e in entries)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_adaptive_proximal_weight_inherits_scvx_citations():
|
|
33
|
+
entries = AdaptiveProximalWeight().citation()
|
|
34
|
+
assert any("mao2016scvx" in e for e in entries)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# =============================================================================
|
|
38
|
+
# Unpublished heuristics keep the empty default
|
|
39
|
+
# =============================================================================
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_uncited_autotuners_return_empty():
|
|
43
|
+
assert ConstantProximalWeight().citation() == []
|
|
44
|
+
assert RampProximalWeight().citation() == []
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This module tests the fundamental AST infrastructure of the symbolic expression
|
|
4
4
|
system, including:
|
|
5
5
|
- to_expr() conversion function
|
|
6
|
-
- traverse() tree traversal
|
|
6
|
+
- traverse() and walk() tree traversal functions
|
|
7
7
|
- Tree structure and pretty printing
|
|
8
8
|
- Base Expr/Leaf behavior
|
|
9
9
|
|
|
@@ -23,6 +23,7 @@ from openscvx.symbolic.expr import (
|
|
|
23
23
|
Variable,
|
|
24
24
|
to_expr,
|
|
25
25
|
traverse,
|
|
26
|
+
walk,
|
|
26
27
|
)
|
|
27
28
|
from openscvx.symbolic.preprocessing import validate_shapes
|
|
28
29
|
|
|
@@ -102,6 +103,44 @@ def test_traverse_visits_all_nodes_in_preorder():
|
|
|
102
103
|
assert visited == ["Add", "Constant", "Mul", "Constant", "Constant"]
|
|
103
104
|
|
|
104
105
|
|
|
106
|
+
# =============================================================================
|
|
107
|
+
# walk() Function Tests
|
|
108
|
+
# =============================================================================
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def test_walk_yields_every_node_parents_first():
|
|
112
|
+
a, b, c = Constant(1), Constant(2), Constant(3)
|
|
113
|
+
expr = Add(a, Mul(b, c))
|
|
114
|
+
|
|
115
|
+
visited = list(walk(expr))
|
|
116
|
+
|
|
117
|
+
assert visited[0] is expr
|
|
118
|
+
assert {id(n) for n in visited} == {id(n) for n in (expr, a, b, c, expr.children()[1])}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def test_walk_visits_shared_subexpressions_once():
|
|
122
|
+
# (x + 1) * (x + 1) with a genuinely shared child, as canonicalization produces
|
|
123
|
+
x = State("x", shape=(2,))
|
|
124
|
+
shared = Add(x, Constant(1))
|
|
125
|
+
expr = Mul(shared, shared)
|
|
126
|
+
|
|
127
|
+
visited = list(walk(expr))
|
|
128
|
+
|
|
129
|
+
assert sum(1 for n in visited if n is shared) == 1
|
|
130
|
+
assert len(visited) == 4 # Mul, Add, State, Constant
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# =============================================================================
|
|
134
|
+
# Expr.citation() Default Tests
|
|
135
|
+
# =============================================================================
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_citation_defaults_to_empty():
|
|
139
|
+
x = State("x", shape=(2,))
|
|
140
|
+
assert x.citation() == []
|
|
141
|
+
assert (x + 1).citation() == []
|
|
142
|
+
|
|
143
|
+
|
|
105
144
|
# =============================================================================
|
|
106
145
|
# Expr.canonicalize() Method Tests
|
|
107
146
|
# =============================================================================
|