openscvx 0.4.1.dev144__tar.gz → 0.4.1.dev145__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.dev144/openscvx.egg-info → openscvx-0.4.1.dev145}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/_version.py +3 -3
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/base.py +145 -6
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/penalized_trust_region.py +19 -8
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145/openscvx.egg-info}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/docs.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/lint.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/release.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/tests-integration.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.github/workflows/tests-unit.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/.gitignore +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/CONTRIBUTING.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/LICENSE +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/README.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/05_visualization.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/favicon.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/citation.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/examples.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/getting-started.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/index.md +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/abstract/brachistochrone.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/abstract/impulsive.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/arm/three_link_arm.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/car/dubins_car.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/car/dubins_car_conditional.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/car/dubins_car_disjoint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/car/dubins_car_stljax.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/dr_double_integrator.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/logo.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/drone/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/plotting.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/plotting_viser.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/spacecraft/hohmann_transfer.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/figures/video_preview.png +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/1-background.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/javascripts/parallax.js +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/stylesheets/parallax.css +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/home.html +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/main.html +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/partials/parallax/hero.html +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/partials/parallax.html +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/mkdocs.yml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/__main__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/augmented_lagrangian.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/constant_proximal_weight.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/ramp_proximal_weight.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/config.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/discretization/base.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/expert/byof.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/expert/validation.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/init/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/loader.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/orbits.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/problem.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/solvers/base.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/solvers/ptr_solver.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/expr.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/lie/se3.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/lie/so3.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/stl.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/time.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/cvxpy/state.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/state.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/problem.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/cache.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/caching.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/printing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/utils/utils.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx.egg-info/SOURCES.txt +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/pyproject.toml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/setup.cfg +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/fixtures/brachistochrone.json +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/fixtures/brachistochrone.yaml +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/hohmann_analytical.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_expr.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_lie.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_autotuning.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_brachistochrone.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_discretization.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_examples.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_expert.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_impulsive.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_init.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_integrators.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_loader.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_optimization_results.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/tests/test_plotting.py +0 -0
- {openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/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.dev145
|
|
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
|
|
@@ -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.dev145'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 4, 1, 'dev145')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g8b0169a22'
|
|
@@ -101,6 +101,100 @@ def _expand_lam_cost_dict(
|
|
|
101
101
|
return lam_arr
|
|
102
102
|
|
|
103
103
|
|
|
104
|
+
def _expand_lam_vc_dict(
|
|
105
|
+
lam_vc_dict: Dict[str, Union[float, list, np.ndarray]],
|
|
106
|
+
states: List["State"],
|
|
107
|
+
) -> np.ndarray:
|
|
108
|
+
"""Expand a ``{state_name: weight}`` dict to a per-state VC weight array.
|
|
109
|
+
|
|
110
|
+
Maps user-provided per-state virtual control weights to a dense array
|
|
111
|
+
using each state's ``_slice``. States not present in the dict default
|
|
112
|
+
to ``1.0`` (neutral weight — dynamics violations are still penalised at
|
|
113
|
+
the base rate).
|
|
114
|
+
|
|
115
|
+
Per-state values may be:
|
|
116
|
+
|
|
117
|
+
* **scalar** — broadcast to every component and every node.
|
|
118
|
+
* **1-D array** of length ``n_components`` — per-component weight,
|
|
119
|
+
same for every node.
|
|
120
|
+
* **2-D array** of shape ``(K, n_components)`` — per-node-per-component.
|
|
121
|
+
When any state supplies a 2-D value the output is 2-D with first
|
|
122
|
+
dimension *K* (all 2-D entries must agree on *K*).
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
lam_vc_dict: Mapping from state names to VC weights.
|
|
126
|
+
states: List of State objects (must already have ``_slice`` assigned).
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
np.ndarray of shape ``(n_states,)`` when all entries are scalar/1-D,
|
|
130
|
+
or ``(K, n_states)`` when any entry is 2-D.
|
|
131
|
+
|
|
132
|
+
Raises:
|
|
133
|
+
ValueError: If the dict contains unknown state names or 2-D entries
|
|
134
|
+
disagree on the number of nodes.
|
|
135
|
+
"""
|
|
136
|
+
n_states = sum(s.shape[0] if len(s.shape) > 0 else 1 for s in states)
|
|
137
|
+
|
|
138
|
+
valid_names = {s.name for s in states}
|
|
139
|
+
unknown = set(lam_vc_dict.keys()) - valid_names
|
|
140
|
+
if unknown:
|
|
141
|
+
raise ValueError(
|
|
142
|
+
f"lam_vc dict contains unknown state name(s): {unknown}. "
|
|
143
|
+
f"Valid state names: {sorted(valid_names)}"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# First pass: determine if any entry is 2-D and infer K.
|
|
147
|
+
n_nodes: Optional[int] = None
|
|
148
|
+
for state in states:
|
|
149
|
+
if state.name not in lam_vc_dict:
|
|
150
|
+
continue
|
|
151
|
+
val = np.asarray(lam_vc_dict[state.name], dtype=float)
|
|
152
|
+
if val.ndim == 2:
|
|
153
|
+
if n_nodes is None:
|
|
154
|
+
n_nodes = val.shape[0]
|
|
155
|
+
elif val.shape[0] != n_nodes:
|
|
156
|
+
raise ValueError(
|
|
157
|
+
f"lam_vc['{state.name}'] has {val.shape[0]} rows, but a "
|
|
158
|
+
f"previous entry had {n_nodes} rows. All 2-D entries "
|
|
159
|
+
f"must have the same number of rows (n_nodes-1)."
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Build the output array.
|
|
163
|
+
if n_nodes is not None:
|
|
164
|
+
lam_arr = np.ones((n_nodes, n_states))
|
|
165
|
+
else:
|
|
166
|
+
lam_arr = np.ones(n_states)
|
|
167
|
+
|
|
168
|
+
for state in states:
|
|
169
|
+
if state.name not in lam_vc_dict:
|
|
170
|
+
continue
|
|
171
|
+
val = np.asarray(lam_vc_dict[state.name], dtype=float)
|
|
172
|
+
n_components = state.shape[0] if len(state.shape) > 0 else 1
|
|
173
|
+
|
|
174
|
+
if val.ndim == 0:
|
|
175
|
+
# Scalar — broadcast to all components (and all nodes if 2-D).
|
|
176
|
+
lam_arr[..., state._slice] = float(val)
|
|
177
|
+
elif val.ndim == 1:
|
|
178
|
+
if val.shape[0] != n_components:
|
|
179
|
+
raise ValueError(
|
|
180
|
+
f"lam_vc['{state.name}'] has length {val.shape[0]}, "
|
|
181
|
+
f"expected scalar or length {n_components}"
|
|
182
|
+
)
|
|
183
|
+
lam_arr[..., state._slice] = val
|
|
184
|
+
elif val.ndim == 2:
|
|
185
|
+
if val.shape[1] != n_components:
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"lam_vc['{state.name}'] has {val.shape[1]} columns, expected {n_components}"
|
|
188
|
+
)
|
|
189
|
+
lam_arr[:, state._slice] = val
|
|
190
|
+
else:
|
|
191
|
+
raise ValueError(
|
|
192
|
+
f"lam_vc['{state.name}'] has {val.ndim} dimensions, expected scalar, 1-D, or 2-D"
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
return lam_arr
|
|
196
|
+
|
|
197
|
+
|
|
104
198
|
@dataclass
|
|
105
199
|
class Weights:
|
|
106
200
|
"""Normalized SCP weights used internally by the algorithm and autotuner.
|
|
@@ -121,7 +215,9 @@ class Weights:
|
|
|
121
215
|
|
|
122
216
|
Attributes:
|
|
123
217
|
lam_prox: Trust region (proximal) weight (normalized).
|
|
124
|
-
lam_vc: Virtual control penalty weight (normalized).
|
|
218
|
+
lam_vc: Virtual control penalty weight (normalized). Scalar or
|
|
219
|
+
array of shape ``(n_states,)`` or ``(n_nodes-1, n_states)``
|
|
220
|
+
for per-state / per-node weighting.
|
|
125
221
|
lam_cost: Cost weight per state (normalized). Scalar or array of
|
|
126
222
|
shape ``(n_states,)`` for per-state weighting.
|
|
127
223
|
lam_vb: Global virtual buffer penalty weight (normalized). Scalar
|
|
@@ -136,7 +232,7 @@ class Weights:
|
|
|
136
232
|
"""
|
|
137
233
|
|
|
138
234
|
lam_prox: float = 1e0
|
|
139
|
-
lam_vc: float = 1e1
|
|
235
|
+
lam_vc: Union[float, np.ndarray] = 1e1
|
|
140
236
|
lam_cost: Union[float, np.ndarray] = 1e-1
|
|
141
237
|
lam_vb: float = 0.0
|
|
142
238
|
lam_vb_nodal: Optional[np.ndarray] = None
|
|
@@ -144,12 +240,16 @@ class Weights:
|
|
|
144
240
|
|
|
145
241
|
def __post_init__(self):
|
|
146
242
|
# Coerce lists/lists-of-lists to numpy arrays.
|
|
243
|
+
if isinstance(self.lam_vc, (list, tuple)):
|
|
244
|
+
self.lam_vc = np.asarray(self.lam_vc, dtype=float)
|
|
147
245
|
if isinstance(self.lam_cost, (list, tuple)):
|
|
148
246
|
self.lam_cost = np.asarray(self.lam_cost, dtype=float)
|
|
149
247
|
|
|
150
248
|
# Snapshot the user-specified values so normalize() is idempotent.
|
|
151
249
|
self._raw_lam_prox = self.lam_prox
|
|
152
|
-
self._raw_lam_vc =
|
|
250
|
+
self._raw_lam_vc = (
|
|
251
|
+
self.lam_vc.copy() if isinstance(self.lam_vc, np.ndarray) else self.lam_vc
|
|
252
|
+
)
|
|
153
253
|
self._raw_lam_cost = (
|
|
154
254
|
self.lam_cost.copy() if isinstance(self.lam_cost, np.ndarray) else self.lam_cost
|
|
155
255
|
)
|
|
@@ -164,6 +264,11 @@ class Weights:
|
|
|
164
264
|
making this method idempotent and safe to call after updating
|
|
165
265
|
any individual raw weight.
|
|
166
266
|
"""
|
|
267
|
+
raw_vc_max = (
|
|
268
|
+
float(np.max(self._raw_lam_vc))
|
|
269
|
+
if isinstance(self._raw_lam_vc, np.ndarray)
|
|
270
|
+
else self._raw_lam_vc
|
|
271
|
+
)
|
|
167
272
|
raw_cost_max = (
|
|
168
273
|
float(np.max(self._raw_lam_cost))
|
|
169
274
|
if isinstance(self._raw_lam_cost, np.ndarray)
|
|
@@ -176,7 +281,7 @@ class Weights:
|
|
|
176
281
|
)
|
|
177
282
|
else:
|
|
178
283
|
raw_vb_max = self._raw_lam_vb
|
|
179
|
-
scale = max(self._raw_lam_prox,
|
|
284
|
+
scale = max(self._raw_lam_prox, raw_vc_max, raw_cost_max, raw_vb_max)
|
|
180
285
|
if scale > 0:
|
|
181
286
|
self.lam_prox = self._raw_lam_prox / scale
|
|
182
287
|
self.lam_vc = self._raw_lam_vc / scale
|
|
@@ -787,8 +892,9 @@ class AlgorithmState:
|
|
|
787
892
|
|
|
788
893
|
Args:
|
|
789
894
|
settings: Configuration object containing initial guesses and SCP parameters
|
|
790
|
-
weights: Normalized initial weights from the algorithm.
|
|
791
|
-
``lam_vc`` is expanded to an ``(N-1, n_states)`` array here
|
|
895
|
+
weights: Normalized initial weights from the algorithm.
|
|
896
|
+
``lam_vc`` is expanded to an ``(N-1, n_states)`` array here
|
|
897
|
+
(scalar or per-state values are broadcast).
|
|
792
898
|
|
|
793
899
|
Returns:
|
|
794
900
|
Fresh AlgorithmState initialized from settings with copied arrays
|
|
@@ -915,6 +1021,39 @@ class Algorithm(ABC):
|
|
|
915
1021
|
return _expand_lam_cost_dict(lam_cost, states)
|
|
916
1022
|
return lam_cost
|
|
917
1023
|
|
|
1024
|
+
@staticmethod
|
|
1025
|
+
def _resolve_lam_vc(
|
|
1026
|
+
lam_vc: Union[float, Dict[str, Union[float, list, np.ndarray]]],
|
|
1027
|
+
states: Optional[List["State"]] = None,
|
|
1028
|
+
) -> Union[float, np.ndarray]:
|
|
1029
|
+
"""Resolve a ``lam_vc`` spec to a numeric value.
|
|
1030
|
+
|
|
1031
|
+
If *lam_vc* is a float it is returned as-is. If it is a dict
|
|
1032
|
+
mapping state names to weights, *states* must be provided so the
|
|
1033
|
+
dict can be expanded to a per-state array via
|
|
1034
|
+
:func:`_expand_lam_vc_dict`.
|
|
1035
|
+
|
|
1036
|
+
Args:
|
|
1037
|
+
lam_vc: Scalar weight or ``{state_name: weight}`` dict.
|
|
1038
|
+
states: Symbolic State objects (required when *lam_vc* is a dict).
|
|
1039
|
+
|
|
1040
|
+
Returns:
|
|
1041
|
+
float or np.ndarray of shape ``(n_states,)`` or
|
|
1042
|
+
``(K, n_states)``.
|
|
1043
|
+
|
|
1044
|
+
Raises:
|
|
1045
|
+
ValueError: If *lam_vc* is a dict and *states* is ``None``.
|
|
1046
|
+
"""
|
|
1047
|
+
if isinstance(lam_vc, dict):
|
|
1048
|
+
if states is None:
|
|
1049
|
+
raise ValueError(
|
|
1050
|
+
"lam_vc was specified as a dict but no states were "
|
|
1051
|
+
"provided. Pass states so the dict can be expanded to "
|
|
1052
|
+
"a per-state weight array."
|
|
1053
|
+
)
|
|
1054
|
+
return _expand_lam_vc_dict(lam_vc, states)
|
|
1055
|
+
return lam_vc
|
|
1056
|
+
|
|
918
1057
|
def _resolve_lam_vb(
|
|
919
1058
|
self,
|
|
920
1059
|
N: int,
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/openscvx/algorithms/penalized_trust_region.py
RENAMED
|
@@ -86,7 +86,7 @@ class PenalizedTrustRegion(Algorithm):
|
|
|
86
86
|
autotuner: "AutotuningBase" = None,
|
|
87
87
|
k_max: int = 200,
|
|
88
88
|
lam_prox: float = 1e0,
|
|
89
|
-
lam_vc: float = 1e1,
|
|
89
|
+
lam_vc: Union[float, Dict[str, Union[float, list]]] = 1e1,
|
|
90
90
|
lam_cost: Union[float, Dict[str, float]] = 1e-1,
|
|
91
91
|
lam_vb: float = 0.0,
|
|
92
92
|
ep_tr: float = 1e-4,
|
|
@@ -101,7 +101,14 @@ class PenalizedTrustRegion(Algorithm):
|
|
|
101
101
|
:class:`AugmentedLagrangian` when ``None``.
|
|
102
102
|
k_max: Maximum SCP iterations. Defaults to 200.
|
|
103
103
|
lam_prox: Trust region (proximal) weight. Defaults to 1.0.
|
|
104
|
-
lam_vc: Virtual control penalty weight.
|
|
104
|
+
lam_vc: Virtual control penalty weight. Either a float
|
|
105
|
+
(applied uniformly to all states) or a dict mapping state
|
|
106
|
+
names to per-state weights, e.g.
|
|
107
|
+
``{"velocity": 1e1, "position": 5e0}``. Dict values may
|
|
108
|
+
be scalars, 1-D arrays for per-component weighting, or
|
|
109
|
+
2-D arrays of shape ``(n_nodes-1, n_components)`` for
|
|
110
|
+
per-node-per-component weighting. States not in the dict
|
|
111
|
+
default to ``1.0``. Defaults to 10.0.
|
|
105
112
|
lam_cost: Cost weight. Either a float (applied to all
|
|
106
113
|
minimize/maximize states) or a dict mapping state names
|
|
107
114
|
to per-state weights, e.g.
|
|
@@ -131,13 +138,14 @@ class PenalizedTrustRegion(Algorithm):
|
|
|
131
138
|
# new dict via the property setter after construction).
|
|
132
139
|
self._states: List["State"] = states
|
|
133
140
|
|
|
134
|
-
# Resolve dict lam_cost → ndarray (requires states)
|
|
141
|
+
# Resolve dict lam_vc / lam_cost → ndarray (requires states)
|
|
142
|
+
resolved_lam_vc = self._resolve_lam_vc(lam_vc, states)
|
|
135
143
|
resolved_lam_cost = self._resolve_lam_cost(lam_cost, states)
|
|
136
144
|
|
|
137
145
|
# SCP weights (grouped dataclass, normalized for numerical conditioning)
|
|
138
146
|
self.weights = Weights(
|
|
139
147
|
lam_prox=lam_prox,
|
|
140
|
-
lam_vc=
|
|
148
|
+
lam_vc=resolved_lam_vc,
|
|
141
149
|
lam_cost=resolved_lam_cost,
|
|
142
150
|
lam_vb=lam_vb,
|
|
143
151
|
)
|
|
@@ -198,12 +206,15 @@ class PenalizedTrustRegion(Algorithm):
|
|
|
198
206
|
self.weights.normalize()
|
|
199
207
|
|
|
200
208
|
@property
|
|
201
|
-
def lam_vc(self) -> float:
|
|
202
|
-
"""Virtual control penalty weight.
|
|
209
|
+
def lam_vc(self) -> Union[float, np.ndarray]:
|
|
210
|
+
"""Virtual control penalty weight (pre-normalization).
|
|
203
211
|
|
|
204
212
|
This is the user-specified value before normalization. Setting this
|
|
205
213
|
property triggers automatic re-normalization of all weights.
|
|
206
214
|
|
|
215
|
+
Returns a float when a uniform scalar was provided, or an ndarray
|
|
216
|
+
when per-state weights were given (via dict or array).
|
|
217
|
+
|
|
207
218
|
!!! note
|
|
208
219
|
The autotuner may modify the normalized weight in
|
|
209
220
|
``self.weights.lam_vc`` during iteration. Those changes are
|
|
@@ -212,8 +223,8 @@ class PenalizedTrustRegion(Algorithm):
|
|
|
212
223
|
return self.weights._raw_lam_vc
|
|
213
224
|
|
|
214
225
|
@lam_vc.setter
|
|
215
|
-
def lam_vc(self, value: float) -> None:
|
|
216
|
-
self.weights._raw_lam_vc = value
|
|
226
|
+
def lam_vc(self, value: Union[float, Dict[str, Union[float, list]]]) -> None:
|
|
227
|
+
self.weights._raw_lam_vc = self._resolve_lam_vc(value, self._states)
|
|
217
228
|
self.weights.normalize()
|
|
218
229
|
|
|
219
230
|
@property
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.4.1.
|
|
3
|
+
Version: 0.4.1.dev145
|
|
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
|
|
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.dev144 → openscvx-0.4.1.dev145}/docs/Foundations/constraint_reformulation.md
RENAMED
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/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.dev144 → openscvx-0.4.1.dev145}/docs/UnderTheHood/vectorization_and_vmapping.md
RENAMED
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/01_hello_world_brachistochrone.md
RENAMED
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/docs/UsersGuide/02_drone_racing_constraints.md
RENAMED
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/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
|
|
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.dev144 → openscvx-0.4.1.dev145}/examples/realtime/obstacle_avoidance_realtime.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/2-mars.avif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/3-moon.avif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/4-sat1.avif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/5-space.avif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/images/layers/6-earth.avif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/javascripts/parallax.js
RENAMED
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/stylesheets/custom.css
RENAMED
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/assets/stylesheets/parallax.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscvx-0.4.1.dev144 → openscvx-0.4.1.dev145}/material/overrides/partials/parallax/hero.html
RENAMED
|
File without changes
|