openscvx 0.4.1.dev91__tar.gz → 0.4.1.dev92__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.dev91/openscvx.egg-info → openscvx-0.4.1.dev92}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/abstract/brachistochrone.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/car/dubins_car.py +2 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/car/dubins_car_conditional.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/car/dubins_car_disjoint.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/car/dubins_car_stljax.py +3 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/logo.py +2 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/__init__.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/_version.py +3 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/config.py +1 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/loader.py +2 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/problem.py +6 -11
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/solvers/ptr_solver.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/augmentation.py +43 -25
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/builder.py +1 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/__init__.py +5 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/control.py +15 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/state.py +23 -1
- openscvx-0.4.1.dev92/openscvx/symbolic/expr/time.py +248 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/state.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/state.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/preprocessing.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92/openscvx.egg-info}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx.egg-info/SOURCES.txt +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/fixtures/brachistochrone.json +2 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/fixtures/brachistochrone.yaml +1 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_scaling.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_variable.py +354 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_augmentation.py +126 -5
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_preprocessing.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_brachistochrone.py +7 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_loader.py +7 -3
- openscvx-0.4.1.dev91/openscvx/symbolic/time.py +0 -84
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/docs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/lint.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/release.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/tests-integration.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.github/workflows/tests-unit.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/.gitignore +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/CONTRIBUTING.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/LICENSE +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/README.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/discretization.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/ocp.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/04_viewpoint_constraints.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/05_visualization.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/favicon.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/citation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/examples.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/getting-started.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/index.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/arm/three_link_arm.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/cinema_vp.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/dr_double_integrator.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/dr_vp.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/dr_vp_nodal.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/dr_vp_polytope.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/drone_racing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/obstacle_avoidance_nodal.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/drone/obstacle_avoidance_vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/plotting.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/plotting_viser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/base_problems/cinema_vp_realtime_base.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/base_problems/drone_racing_realtime_base.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/rocket/3DoF_pdg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/examples/spacecraft/proxops_cw.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/figures/video_preview.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/1-background.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/2-mars.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/3-moon.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/5-space.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/6-earth.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/javascripts/parallax.js +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/assets/stylesheets/parallax.css +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/home.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/main.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/partials/parallax/hero.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/material/overrides/partials/parallax.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/mkdocs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/__main__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/AugmentedLagrangian.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/ConstantProximalWeight.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/RampProximalWeight.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/base.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/algorithms/penalized_trust_region.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/discretization/base.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/discretization/linearize_discretize.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/expert/byof.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/expert/validation.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/init/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/solvers/base.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/lie/se3.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/lie/so3.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/problem.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/cache.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/caching.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/printing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx/utils/utils.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/pyproject.toml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/setup.cfg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_autotuning.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_discretization.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_examples.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_expert.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_init.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_integrators.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_optimization_results.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/tests/test_plotting.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev92}/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.dev92
|
|
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
|
|
@@ -74,6 +74,7 @@ time = ox.Time(
|
|
|
74
74
|
final=("minimize", total_time),
|
|
75
75
|
min=0.0,
|
|
76
76
|
max=total_time,
|
|
77
|
+
uniform_time_grid=True,
|
|
77
78
|
)
|
|
78
79
|
|
|
79
80
|
problem = Problem(
|
|
@@ -91,7 +92,6 @@ problem.settings.prp.dt = 0.01
|
|
|
91
92
|
|
|
92
93
|
problem.settings.scp.lam_prox = 1e1 # Weight on the Trust Reigon
|
|
93
94
|
problem.settings.scp.lam_cost = 1e0 # Weight on the Minimal Time Objective
|
|
94
|
-
problem.settings.scp.uniform_time_grid = True
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
plotting_dict = {}
|
|
@@ -86,6 +86,8 @@ time = ox.Time(
|
|
|
86
86
|
final=ox.Minimize(total_time),
|
|
87
87
|
min=0.0,
|
|
88
88
|
max=20,
|
|
89
|
+
time_dilation_min=0.02 * total_time,
|
|
90
|
+
uniform_time_grid=True,
|
|
89
91
|
)
|
|
90
92
|
|
|
91
93
|
problem = Problem(
|
|
@@ -96,13 +98,11 @@ problem = Problem(
|
|
|
96
98
|
constraints=constraints,
|
|
97
99
|
N=n,
|
|
98
100
|
licq_max=1e-8,
|
|
99
|
-
time_dilation_factor_min=0.02,
|
|
100
101
|
)
|
|
101
102
|
|
|
102
103
|
# Set solver parameters
|
|
103
104
|
problem.settings.scp.lam_cost = 4e1
|
|
104
105
|
problem.settings.scp.lam_vc = 1e3
|
|
105
|
-
problem.settings.scp.uniform_time_grid = True
|
|
106
106
|
|
|
107
107
|
plotting_dict = {
|
|
108
108
|
"obs_radius": problem.parameters["obs_radius"],
|
|
@@ -99,6 +99,7 @@ time = ox.Time(
|
|
|
99
99
|
final=ox.Minimize(total_time),
|
|
100
100
|
min=0.0,
|
|
101
101
|
max=20,
|
|
102
|
+
uniform_time_grid=True,
|
|
102
103
|
)
|
|
103
104
|
|
|
104
105
|
problem = Problem(
|
|
@@ -113,7 +114,6 @@ problem = Problem(
|
|
|
113
114
|
|
|
114
115
|
# Set solver parameters
|
|
115
116
|
problem.settings.scp.lam_vc = 1e3
|
|
116
|
-
problem.settings.scp.uniform_time_grid = True
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
plotting_dict = {
|
|
@@ -102,6 +102,7 @@ time = ox.Time(
|
|
|
102
102
|
final=("minimize", total_time),
|
|
103
103
|
min=0.0,
|
|
104
104
|
max=20,
|
|
105
|
+
uniform_time_grid=True,
|
|
105
106
|
)
|
|
106
107
|
|
|
107
108
|
problem = Problem(
|
|
@@ -114,7 +115,6 @@ problem = Problem(
|
|
|
114
115
|
)
|
|
115
116
|
# Set solver parameters
|
|
116
117
|
problem.settings.scp.lam_vc = 6e2
|
|
117
|
-
problem.settings.scp.uniform_time_grid = True
|
|
118
118
|
plotting_dict = {
|
|
119
119
|
"wp1_radius": problem.parameters["wp1_radius"],
|
|
120
120
|
"wp1_center": problem.parameters["wp1_center"],
|
|
@@ -57,7 +57,9 @@ angular_rate.guess = np.zeros((n, 1))
|
|
|
57
57
|
|
|
58
58
|
# Define time (needed for time-dependent constraints)
|
|
59
59
|
# Time is a State subclass, so it can be used directly in expressions
|
|
60
|
-
time = ox.Time(
|
|
60
|
+
time = ox.Time(
|
|
61
|
+
initial=0.0, final=("minimize", total_time), min=0.0, max=10.0, uniform_time_grid=True
|
|
62
|
+
)
|
|
61
63
|
|
|
62
64
|
|
|
63
65
|
# Define list of all states and controls
|
|
@@ -106,7 +108,6 @@ problem = Problem(
|
|
|
106
108
|
)
|
|
107
109
|
# Set solver parameters
|
|
108
110
|
problem.settings.scp.lam_vc = 6e2
|
|
109
|
-
problem.settings.scp.uniform_time_grid = True
|
|
110
111
|
# Extract parameter values from problem.parameters (not Parameter objects)
|
|
111
112
|
plotting_dict = {
|
|
112
113
|
"wp1_center": problem.parameters.get("wp1_center", None),
|
|
@@ -127,6 +127,8 @@ time_state = ox.Time(
|
|
|
127
127
|
final=total_time,
|
|
128
128
|
min=0.0,
|
|
129
129
|
max=total_time,
|
|
130
|
+
time_dilation_min=0.001 * total_time,
|
|
131
|
+
time_dilation_max=3.0 * total_time,
|
|
130
132
|
)
|
|
131
133
|
|
|
132
134
|
# Control components
|
|
@@ -353,8 +355,6 @@ problem = Problem(
|
|
|
353
355
|
constraints=constraints,
|
|
354
356
|
N=n,
|
|
355
357
|
byof=byof,
|
|
356
|
-
time_dilation_factor_min=0.001,
|
|
357
|
-
time_dilation_factor_max=3.0,
|
|
358
358
|
autotuner=ox.RampProximalWeight(),
|
|
359
359
|
float_dtype="float64",
|
|
360
360
|
)
|
|
@@ -142,6 +142,7 @@ time = ox.Time(
|
|
|
142
142
|
final=("minimize", total_time),
|
|
143
143
|
min=0.0,
|
|
144
144
|
max=total_time,
|
|
145
|
+
time_dilation_min=0.2 * total_time,
|
|
145
146
|
)
|
|
146
147
|
|
|
147
148
|
problem = Problem(
|
|
@@ -151,7 +152,6 @@ problem = Problem(
|
|
|
151
152
|
time=time,
|
|
152
153
|
constraints=constraints,
|
|
153
154
|
N=n,
|
|
154
|
-
time_dilation_factor_min=0.2,
|
|
155
155
|
autotuner=ox.ConstantProximalWeight(),
|
|
156
156
|
)
|
|
157
157
|
|
|
@@ -70,7 +70,7 @@ from openscvx.symbolic.expr import (
|
|
|
70
70
|
Vstack,
|
|
71
71
|
ctcs,
|
|
72
72
|
)
|
|
73
|
-
from openscvx.symbolic.time import Time
|
|
73
|
+
from openscvx.symbolic.expr.time import Time
|
|
74
74
|
from openscvx.utils.cache import clear_cache, get_cache_dir, get_cache_size
|
|
75
75
|
|
|
76
76
|
load_results = OptimizationResults.load
|
|
@@ -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.dev92'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 4, 1, 'dev92')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g624f43d2f'
|
|
@@ -409,7 +409,6 @@ class ScpConfig:
|
|
|
409
409
|
ep_tr: float = 1e-4,
|
|
410
410
|
ep_vb: float = 1e-4,
|
|
411
411
|
ep_vc: float = 1e-8,
|
|
412
|
-
uniform_time_grid: bool = False,
|
|
413
412
|
autotuner: Optional["AutotuningBase"] = None,
|
|
414
413
|
):
|
|
415
414
|
"""
|
|
@@ -433,8 +432,6 @@ class ScpConfig:
|
|
|
433
432
|
lam_cost (float): The weight for original cost. Defaults to 0.0.
|
|
434
433
|
lam_vb (float): The weight for virtual buffer. This is only used if
|
|
435
434
|
there are nonconvex nodal constraints present. Defaults to 0.0.
|
|
436
|
-
uniform_time_grid (bool): Whether to use a uniform time grid.
|
|
437
|
-
Defaults to `False`.
|
|
438
435
|
autotuner: Optional custom autotuner instance. If not provided, defaults
|
|
439
436
|
to ``AugmentedLagrangian()`` with default parameters. Useful for
|
|
440
437
|
customizing parameters:
|
|
@@ -464,7 +461,7 @@ class ScpConfig:
|
|
|
464
461
|
self.ep_vc = ep_vc
|
|
465
462
|
self.lam_cost = lam_cost
|
|
466
463
|
self.lam_vb = lam_vb
|
|
467
|
-
self.
|
|
464
|
+
self._uniform_time_grid = False
|
|
468
465
|
# Store autotuner via property to support lazy default construction
|
|
469
466
|
self.autotuner = autotuner
|
|
470
467
|
|
|
@@ -68,9 +68,9 @@ from openscvx.config import _resolve_autotuner
|
|
|
68
68
|
from openscvx.symbolic.expr.control import Control
|
|
69
69
|
from openscvx.symbolic.expr.expr import Expr, Parameter
|
|
70
70
|
from openscvx.symbolic.expr.state import State
|
|
71
|
+
from openscvx.symbolic.expr.time import Time
|
|
71
72
|
from openscvx.symbolic.parser._registry import _PARSE_FUNCTIONS
|
|
72
73
|
from openscvx.symbolic.parser.parser import ExprParser
|
|
73
|
-
from openscvx.symbolic.time import Time
|
|
74
74
|
|
|
75
75
|
# ---------------------------------------------------------------------------
|
|
76
76
|
# Public API
|
|
@@ -180,6 +180,7 @@ def load_dict(data: dict) -> dict:
|
|
|
180
180
|
final=_parse_time_boundary(time_data["final"]),
|
|
181
181
|
min=float(time_data["min"]),
|
|
182
182
|
max=float(time_data["max"]),
|
|
183
|
+
uniform_time_grid=bool(time_data.get("uniform_time_grid", False)),
|
|
183
184
|
)
|
|
184
185
|
|
|
185
186
|
# ---- N -------------------------------------------------------------
|
|
@@ -55,9 +55,9 @@ from openscvx.symbolic.builder import preprocess_symbolic_problem
|
|
|
55
55
|
from openscvx.symbolic.expr import CTCS, Constraint
|
|
56
56
|
from openscvx.symbolic.expr.control import Control
|
|
57
57
|
from openscvx.symbolic.expr.state import State
|
|
58
|
+
from openscvx.symbolic.expr.time import Time
|
|
58
59
|
from openscvx.symbolic.lower import lower_symbolic_problem
|
|
59
60
|
from openscvx.symbolic.problem import SymbolicProblem
|
|
60
|
-
from openscvx.symbolic.time import Time
|
|
61
61
|
from openscvx.utils import printing, profiling
|
|
62
62
|
from openscvx.utils.caching import (
|
|
63
63
|
get_solver_cache_paths,
|
|
@@ -82,8 +82,6 @@ class Problem:
|
|
|
82
82
|
algebraic_prop: Optional[dict] = None,
|
|
83
83
|
licq_min: float = 0.0,
|
|
84
84
|
licq_max: float = 1e-4,
|
|
85
|
-
time_dilation_factor_min: float = 0.3,
|
|
86
|
-
time_dilation_factor_max: float = 3.0,
|
|
87
85
|
autotuner: Optional[AutotuningBase] = AugmentedLagrangian(),
|
|
88
86
|
byof: Optional[ByofSpec] = None,
|
|
89
87
|
float_dtype: str = "float32",
|
|
@@ -113,10 +111,6 @@ class Problem:
|
|
|
113
111
|
for outputs evaluated (not integrated) during propagation.
|
|
114
112
|
licq_min (float): Minimum LICQ constraint value. Defaults to 0.0.
|
|
115
113
|
licq_max (float): Maximum LICQ constraint value. Defaults to 1e-4.
|
|
116
|
-
time_dilation_factor_min (float): Minimum time dilation factor.
|
|
117
|
-
Defaults to 0.3.
|
|
118
|
-
time_dilation_factor_max (float): Maximum time dilation factor.
|
|
119
|
-
Defaults to 3.0.
|
|
120
114
|
byof (ByofSpec, optional): Expert mode only. Raw JAX functions to
|
|
121
115
|
bypass symbolic layer. See :class:`openscvx.expert.ByofSpec` for
|
|
122
116
|
detailed documentation.
|
|
@@ -157,8 +151,6 @@ class Problem:
|
|
|
157
151
|
time=time,
|
|
158
152
|
licq_min=licq_min,
|
|
159
153
|
licq_max=licq_max,
|
|
160
|
-
time_dilation_factor_min=time_dilation_factor_min,
|
|
161
|
-
time_dilation_factor_max=time_dilation_factor_max,
|
|
162
154
|
dynamics_prop_extra=dynamics_prop,
|
|
163
155
|
states_prop_extra=states_prop,
|
|
164
156
|
algebraic_prop=algebraic_prop,
|
|
@@ -220,8 +212,11 @@ class Problem:
|
|
|
220
212
|
prp=PropagationConfig(),
|
|
221
213
|
)
|
|
222
214
|
|
|
223
|
-
#
|
|
224
|
-
#
|
|
215
|
+
# Copy time grid setting from Time to SCP config so the solver can
|
|
216
|
+
# read it during constraint assembly.
|
|
217
|
+
if isinstance(time, Time):
|
|
218
|
+
self.settings.scp._uniform_time_grid = time.uniform_time_grid
|
|
219
|
+
|
|
225
220
|
self._discretization_solver: callable = None
|
|
226
221
|
|
|
227
222
|
# Set up emitter & queue (thread started in initialize() after columns are known)
|
|
@@ -470,7 +470,7 @@ class PTRSolver(ConvexSolver):
|
|
|
470
470
|
if settings.sim.x.final_type[i] == "Fix":
|
|
471
471
|
constr += [x_nonscaled[-1][i] == x_term[i]] # Final Boundary Conditions
|
|
472
472
|
|
|
473
|
-
if settings.scp.
|
|
473
|
+
if settings.scp._uniform_time_grid:
|
|
474
474
|
S_u_inv_td = inv_S_u[settings.sim.time_dilation_slice, settings.sim.time_dilation_slice]
|
|
475
475
|
c_u_td = c_u[settings.sim.time_dilation_slice]
|
|
476
476
|
constr += [
|
|
@@ -71,6 +71,7 @@ from openscvx.symbolic.expr import (
|
|
|
71
71
|
)
|
|
72
72
|
from openscvx.symbolic.expr.control import Control
|
|
73
73
|
from openscvx.symbolic.expr.state import State
|
|
74
|
+
from openscvx.symbolic.expr.time import Time
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
def _check_nonconvex_equality(constraint: Constraint, context: str) -> None:
|
|
@@ -440,8 +441,6 @@ def augment_dynamics_with_ctcs(
|
|
|
440
441
|
N: int,
|
|
441
442
|
licq_min: float = 0.0,
|
|
442
443
|
licq_max: float = 1e-4,
|
|
443
|
-
time_dilation_factor_min: float = 0.3,
|
|
444
|
-
time_dilation_factor_max: float = 3.0,
|
|
445
444
|
) -> Tuple[Expr, List[State], List[Control]]:
|
|
446
445
|
"""Augment dynamics with continuous-time constraint satisfaction states.
|
|
447
446
|
|
|
@@ -467,8 +466,6 @@ def augment_dynamics_with_ctcs(
|
|
|
467
466
|
N: Number of discretization nodes
|
|
468
467
|
licq_min: Minimum bound for augmented states (default: 0.0)
|
|
469
468
|
licq_max: Maximum bound for augmented states (default: 1e-4)
|
|
470
|
-
time_dilation_factor_min: Minimum time dilation factor (default: 0.3)
|
|
471
|
-
time_dilation_factor_max: Maximum time dilation factor (default: 3.0)
|
|
472
469
|
|
|
473
470
|
Returns:
|
|
474
471
|
Tuple of:
|
|
@@ -561,28 +558,49 @@ def augment_dynamics_with_ctcs(
|
|
|
561
558
|
raise ValueError("No state named 'time' found in states list")
|
|
562
559
|
|
|
563
560
|
time_final = time_state.final[0]
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
dtau = 1.0 / (N - 1) # Normalized time step between nodes
|
|
577
|
-
# Compute finite difference: time_dilation[k] = (time[k+1] - time[k]) / dtau
|
|
578
|
-
for k in range(N - 1):
|
|
579
|
-
time_dilation_guess[k] = (time_guess[k + 1] - time_guess[k]) / dtau
|
|
580
|
-
# For the last node, use the previous value (extrapolate)
|
|
581
|
-
time_dilation_guess[N - 1] = time_dilation_guess[N - 2]
|
|
582
|
-
time_dilation.guess = time_dilation_guess.reshape(-1, 1)
|
|
561
|
+
|
|
562
|
+
# If time_state is a Time instance, use its time_dilation_* attributes.
|
|
563
|
+
# Otherwise fall back to default factor-based bounds (0.3 / 3.0).
|
|
564
|
+
is_time = isinstance(time_state, Time)
|
|
565
|
+
|
|
566
|
+
if is_time and time_state.time_dilation_min is not None:
|
|
567
|
+
time_dilation.min = np.array([time_state.time_dilation_min])
|
|
568
|
+
else:
|
|
569
|
+
time_dilation.min = np.array([0.3 * time_final])
|
|
570
|
+
|
|
571
|
+
if is_time and time_state.time_dilation_max is not None:
|
|
572
|
+
time_dilation.max = np.array([time_state.time_dilation_max])
|
|
583
573
|
else:
|
|
584
|
-
|
|
585
|
-
|
|
574
|
+
time_dilation.max = np.array([3.0 * time_final])
|
|
575
|
+
|
|
576
|
+
# Use user-provided time_dilation guess if available,
|
|
577
|
+
# otherwise compute from time.guess via finite differences
|
|
578
|
+
if is_time and time_state.time_dilation_guess is not None:
|
|
579
|
+
time_dilation.guess = time_state.time_dilation_guess
|
|
580
|
+
else:
|
|
581
|
+
# The relationship is: dt/dtau = time_dilation, where tau is normalized time [0,1]
|
|
582
|
+
# With N nodes, dtau = 1/(N-1) between consecutive nodes
|
|
583
|
+
if time_state.guess is None:
|
|
584
|
+
raise ValueError("time state must have a guess set before augmentation")
|
|
585
|
+
|
|
586
|
+
if N > 1:
|
|
587
|
+
time_guess = time_state.guess.flatten() # Shape (N,)
|
|
588
|
+
time_dilation_guess = np.zeros(N)
|
|
589
|
+
dtau = 1.0 / (N - 1) # Normalized time step between nodes
|
|
590
|
+
# Compute finite difference: time_dilation[k] = (time[k+1] - time[k]) / dtau
|
|
591
|
+
for k in range(N - 1):
|
|
592
|
+
time_dilation_guess[k] = (time_guess[k + 1] - time_guess[k]) / dtau
|
|
593
|
+
# For the last node, use the previous value (extrapolate)
|
|
594
|
+
time_dilation_guess[N - 1] = time_dilation_guess[N - 2]
|
|
595
|
+
time_dilation.guess = time_dilation_guess.reshape(-1, 1)
|
|
596
|
+
else:
|
|
597
|
+
# Single node case: use time_final as guess
|
|
598
|
+
time_dilation.guess = np.ones([N, 1]) * time_final
|
|
599
|
+
|
|
600
|
+
# Store a back-reference so that later mutations to the Time object
|
|
601
|
+
# (e.g. time.time_dilation_min = ...) propagate to the live control.
|
|
602
|
+
if is_time:
|
|
603
|
+
time_state._time_dilation_control = time_dilation
|
|
586
604
|
|
|
587
605
|
controls_augmented.append(time_dilation)
|
|
588
606
|
|
|
@@ -43,6 +43,7 @@ from openscvx.symbolic.constraint_set import ConstraintSet
|
|
|
43
43
|
from openscvx.symbolic.expr import Constant, Parameter, traverse
|
|
44
44
|
from openscvx.symbolic.expr.control import Control
|
|
45
45
|
from openscvx.symbolic.expr.state import State
|
|
46
|
+
from openscvx.symbolic.expr.time import Time
|
|
46
47
|
from openscvx.symbolic.preprocessing import (
|
|
47
48
|
collect_and_assign_slices,
|
|
48
49
|
convert_dynamics_dict_to_expr,
|
|
@@ -61,7 +62,6 @@ from openscvx.symbolic.preprocessing import (
|
|
|
61
62
|
validate_variable_names,
|
|
62
63
|
)
|
|
63
64
|
from openscvx.symbolic.problem import SymbolicProblem
|
|
64
|
-
from openscvx.symbolic.time import Time
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
def preprocess_symbolic_problem(
|
|
@@ -73,8 +73,6 @@ def preprocess_symbolic_problem(
|
|
|
73
73
|
time: Time,
|
|
74
74
|
licq_min: float = 0.0,
|
|
75
75
|
licq_max: float = 1e-4,
|
|
76
|
-
time_dilation_factor_min: float = 0.3,
|
|
77
|
-
time_dilation_factor_max: float = 3.0,
|
|
78
76
|
dynamics_prop_extra: dict = None,
|
|
79
77
|
states_prop_extra: List[State] = None,
|
|
80
78
|
algebraic_prop: dict = None,
|
|
@@ -109,8 +107,6 @@ def preprocess_symbolic_problem(
|
|
|
109
107
|
time: Time configuration object specifying time bounds and constraints
|
|
110
108
|
licq_min: Minimum bound for CTCS augmented states (default: 0.0)
|
|
111
109
|
licq_max: Maximum bound for CTCS augmented states (default: 1e-4)
|
|
112
|
-
time_dilation_factor_min: Minimum factor for time dilation control (default: 0.3)
|
|
113
|
-
time_dilation_factor_max: Maximum factor for time dilation control (default: 3.0)
|
|
114
110
|
dynamics_prop_extra: Optional dictionary of additional dynamics for propagation-only
|
|
115
111
|
states (default: None)
|
|
116
112
|
states_prop_extra: Optional list of additional State objects for propagation only
|
|
@@ -308,8 +304,6 @@ def preprocess_symbolic_problem(
|
|
|
308
304
|
N,
|
|
309
305
|
licq_min=licq_min,
|
|
310
306
|
licq_max=licq_max,
|
|
311
|
-
time_dilation_factor_min=time_dilation_factor_min,
|
|
312
|
-
time_dilation_factor_max=time_dilation_factor_max,
|
|
313
307
|
)
|
|
314
308
|
|
|
315
309
|
# Assign slices to augmented states and controls in canonical order
|
|
@@ -149,6 +149,9 @@ from .state import BoundaryType, Fixed, Free, Maximize, Minimize, State
|
|
|
149
149
|
# STL operations
|
|
150
150
|
from .stl import Or
|
|
151
151
|
|
|
152
|
+
# Time
|
|
153
|
+
from .time import Time
|
|
154
|
+
|
|
152
155
|
# Variable
|
|
153
156
|
from .variable import Variable
|
|
154
157
|
|
|
@@ -190,6 +193,8 @@ __all__ = [
|
|
|
190
193
|
"Maximize",
|
|
191
194
|
# Control
|
|
192
195
|
"Control",
|
|
196
|
+
# Time
|
|
197
|
+
"Time",
|
|
193
198
|
# Mathematical functions
|
|
194
199
|
"Sin",
|
|
195
200
|
"Cos",
|
|
@@ -59,17 +59,31 @@ class Control(Variable):
|
|
|
59
59
|
steer.guess = np.linspace([0, 0], [0, 1], 50) # Gradual acceleration
|
|
60
60
|
"""
|
|
61
61
|
|
|
62
|
-
def __init__(
|
|
62
|
+
def __init__(
|
|
63
|
+
self,
|
|
64
|
+
name: str,
|
|
65
|
+
shape: Tuple[int, ...],
|
|
66
|
+
*,
|
|
67
|
+
min: Optional[np.ndarray] = None,
|
|
68
|
+
max: Optional[np.ndarray] = None,
|
|
69
|
+
):
|
|
63
70
|
"""Initialize a Control object.
|
|
64
71
|
|
|
65
72
|
Args:
|
|
66
73
|
name: Name identifier for the control variable
|
|
67
74
|
shape: Shape of the control vector (typically 1D tuple like (3,))
|
|
75
|
+
min: Optional minimum bounds array (keyword-only)
|
|
76
|
+
max: Optional maximum bounds array (keyword-only)
|
|
68
77
|
"""
|
|
69
78
|
super().__init__(name, shape)
|
|
70
79
|
self._scaling_min = None
|
|
71
80
|
self._scaling_max = None
|
|
72
81
|
|
|
82
|
+
if min is not None:
|
|
83
|
+
self.min = min
|
|
84
|
+
if max is not None:
|
|
85
|
+
self.max = max
|
|
86
|
+
|
|
73
87
|
def sparsity(self, n_x: int, n_u: int) -> Tuple[np.ndarray, np.ndarray]:
|
|
74
88
|
"""Element-level exact sparsity: diagonal block at ``_slice``."""
|
|
75
89
|
n = self._shape[0]
|
|
@@ -197,12 +197,25 @@ class State(Variable):
|
|
|
197
197
|
pos.final = [10, ("free", 5), ("maximize", 150)] # Maximize final altitude
|
|
198
198
|
"""
|
|
199
199
|
|
|
200
|
-
def __init__(
|
|
200
|
+
def __init__(
|
|
201
|
+
self,
|
|
202
|
+
name: str,
|
|
203
|
+
shape: Tuple[int, ...],
|
|
204
|
+
*,
|
|
205
|
+
min: Optional[np.ndarray] = None,
|
|
206
|
+
max: Optional[np.ndarray] = None,
|
|
207
|
+
initial: Optional[list] = None,
|
|
208
|
+
final: Optional[list] = None,
|
|
209
|
+
):
|
|
201
210
|
"""Initialize a State object.
|
|
202
211
|
|
|
203
212
|
Args:
|
|
204
213
|
name: Name identifier for the state variable
|
|
205
214
|
shape: Shape of the state vector (typically 1D tuple)
|
|
215
|
+
min: Optional minimum bounds array (keyword-only)
|
|
216
|
+
max: Optional maximum bounds array (keyword-only)
|
|
217
|
+
initial: Optional initial boundary conditions array (keyword-only)
|
|
218
|
+
final: Optional final boundary conditions array (keyword-only)
|
|
206
219
|
"""
|
|
207
220
|
super().__init__(name, shape)
|
|
208
221
|
self._initial = None
|
|
@@ -212,6 +225,15 @@ class State(Variable):
|
|
|
212
225
|
self._scaling_min = None
|
|
213
226
|
self._scaling_max = None
|
|
214
227
|
|
|
228
|
+
if min is not None:
|
|
229
|
+
self.min = min
|
|
230
|
+
if max is not None:
|
|
231
|
+
self.max = max
|
|
232
|
+
if initial is not None:
|
|
233
|
+
self.initial = initial
|
|
234
|
+
if final is not None:
|
|
235
|
+
self.final = final
|
|
236
|
+
|
|
215
237
|
def sparsity(self, n_x: int, n_u: int) -> Tuple[np.ndarray, np.ndarray]:
|
|
216
238
|
"""Element-level exact sparsity: diagonal block at ``_slice``."""
|
|
217
239
|
n = self._shape[0]
|