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