openscvx 0.3.1.dev4__tar.gz → 0.3.1.dev17__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.3.1.dev4/openscvx.egg-info → openscvx-0.3.1.dev17}/PKG-INFO +8 -5
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/README.md +7 -4
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/abstract/3DoF_pdg.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/abstract/brachistochrone.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/car/dubins_car.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/car/dubins_car_disjoint.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/car/dubins_car_stljax.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/cinema_vp.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/cinema_vp_realtime_base.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/dr_double_integrator.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/dr_vp.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/dr_vp_nodal.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/dr_vp_polytope.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/drone_racing.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/obstacle_avoidance.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/obstacle_avoidance_nodal.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/obstacle_avoidance_realtime_base.py +8 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/_version.py +3 -3
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/algorithms/optimization_results.py +2 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/algorithms/ptr.py +12 -8
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/algorithms/solver_state.py +4 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/plotting/__init__.py +2 -20
- openscvx-0.3.1.dev17/openscvx/plotting/plotting.py +1155 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/problem.py +6 -1
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17/openscvx.egg-info}/PKG-INFO +8 -5
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx.egg-info/SOURCES.txt +1 -0
- openscvx-0.3.1.dev17/tests/test_plotting.py +624 -0
- openscvx-0.3.1.dev4/openscvx/plotting/plotting.py +0 -851
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/assets/logo.svg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/release-drafter.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/docs.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/lint.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/release.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/tests-integration.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.github/workflows/tests-unit.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/.gitignore +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/LICENSE +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/constraint_reformulation.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/control_parameterization.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/discretization.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/ocp.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/scvx.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Overview/time_dilation.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/advanced_problem_setup.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_constraints.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_control.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_integrators.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_state.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_trajoptproblem.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/api_variable.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/basic_problem_setup.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/tutorial_6dof_los_guidance.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/tutorial_6dof_obstacle_avoidance.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/Usage/tutorials.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/favicon.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/assets/logo.svg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/citation.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/examples.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/getting-started.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/index.md +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/plotting.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/realtime/cinema_vp_realtime.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/realtime/drone_racing_realtime.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/realtime/dubins_car_realtime.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/realtime/obstacle_avoidance_realtime.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/figures/video_preview.png +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/1-background.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/2-mars.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/3-moon.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/5-space.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/6-earth.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/javascripts/parallax.js +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/logo.svg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/assets/stylesheets/parallax.css +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/home.html +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/main.html +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/partials/parallax/hero.html +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/material/overrides/partials/parallax.html +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/mkdocs.yml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/algorithms/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/algorithms/autotuning.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/config.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/discretization/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/discretization/discretization.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/propagation/post_processing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/propagation/propagation.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/solvers/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/solvers/cvxpy.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/augmentation.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/builder.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/control.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/expr.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/state.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/stl.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/lowerers/cvxpy.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/lowerers/jax.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/preprocessing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/problem.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/time.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/cache.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/caching.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/printing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx/utils/utils.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/pyproject.toml +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/setup.cfg +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_expr.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_scaling.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/expr/test_variable.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_augmentation.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_preprocessing.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_brachistochrone.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_cvxpygen_optional.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_discretization.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_examples.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_integrators.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_propagation.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_pyqtgraph_functions.py +0 -0
- {openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/tests/test_pyqtgraph_helpers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev17
|
|
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
|
|
@@ -266,15 +266,18 @@ Dependencies can then be installed using Conda or Pip
|
|
|
266
266
|
|
|
267
267
|
### Running Trajectory Optimization
|
|
268
268
|
|
|
269
|
-
See `examples
|
|
269
|
+
See `examples/` folder for several example trajectory optimization problems grouped by application.
|
|
270
270
|
To run a problem simply run any of the examples directly, for example:
|
|
271
271
|
|
|
272
272
|
```sh
|
|
273
|
-
python3 examples/
|
|
273
|
+
python3 examples/abstract/brachistochrone.py
|
|
274
274
|
```
|
|
275
|
+
|
|
276
|
+
> **Note:** To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Local Development](#local-development) section above for detailed installation instructions.
|
|
277
|
+
|
|
275
278
|
and adjust the plotting as needed.
|
|
276
279
|
|
|
277
|
-
Check out the problem definitions inside `examples
|
|
280
|
+
Check out the problem definitions inside `examples/` to see how to define your own problems.
|
|
278
281
|
|
|
279
282
|
## Code Structure
|
|
280
283
|
<img src="figures/oscvx_structure_full_dark.svg" width="1200"/>
|
|
@@ -285,10 +288,10 @@ Check out the problem definitions inside `examples/params` to see how to define
|
|
|
285
288
|
- [X] Implement QOCOGen with CVPYGEN
|
|
286
289
|
- [X] Non-Dilated Time Propagation
|
|
287
290
|
- [X] Save and reload the compiled JAX code
|
|
291
|
+
- [x] Unified Mathematical Interface
|
|
288
292
|
- [ ] Auto-SCvx Weight Tuning
|
|
289
293
|
- [ ] Compiled at the subproblem level with JAX
|
|
290
294
|
- [ ] Single Shot propagation
|
|
291
|
-
- [ ] Unified Mathematical Interface
|
|
292
295
|
|
|
293
296
|
## What is implemented
|
|
294
297
|
|
|
@@ -229,15 +229,18 @@ Dependencies can then be installed using Conda or Pip
|
|
|
229
229
|
|
|
230
230
|
### Running Trajectory Optimization
|
|
231
231
|
|
|
232
|
-
See `examples
|
|
232
|
+
See `examples/` folder for several example trajectory optimization problems grouped by application.
|
|
233
233
|
To run a problem simply run any of the examples directly, for example:
|
|
234
234
|
|
|
235
235
|
```sh
|
|
236
|
-
python3 examples/
|
|
236
|
+
python3 examples/abstract/brachistochrone.py
|
|
237
237
|
```
|
|
238
|
+
|
|
239
|
+
> **Note:** To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (`pip install -e .`). See the [Local Development](#local-development) section above for detailed installation instructions.
|
|
240
|
+
|
|
238
241
|
and adjust the plotting as needed.
|
|
239
242
|
|
|
240
|
-
Check out the problem definitions inside `examples
|
|
243
|
+
Check out the problem definitions inside `examples/` to see how to define your own problems.
|
|
241
244
|
|
|
242
245
|
## Code Structure
|
|
243
246
|
<img src="figures/oscvx_structure_full_dark.svg" width="1200"/>
|
|
@@ -248,10 +251,10 @@ Check out the problem definitions inside `examples/params` to see how to define
|
|
|
248
251
|
- [X] Implement QOCOGen with CVPYGEN
|
|
249
252
|
- [X] Non-Dilated Time Propagation
|
|
250
253
|
- [X] Save and reload the compiled JAX code
|
|
254
|
+
- [x] Unified Mathematical Interface
|
|
251
255
|
- [ ] Auto-SCvx Weight Tuning
|
|
252
256
|
- [ ] Compiled at the subproblem level with JAX
|
|
253
257
|
- [ ] Single Shot propagation
|
|
254
|
-
- [ ] Unified Mathematical Interface
|
|
255
258
|
|
|
256
259
|
## What is implemented
|
|
257
260
|
|
|
@@ -10,8 +10,16 @@ The problem includes:
|
|
|
10
10
|
- Glideslope constraint for safe landing approach
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import numpy as np
|
|
14
17
|
|
|
18
|
+
# Add grandparent directory to path to import examples.plotting
|
|
19
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
20
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
21
|
+
sys.path.append(grandparent_dir)
|
|
22
|
+
|
|
15
23
|
import openscvx as ox
|
|
16
24
|
from examples.plotting import plot_control_norm, plot_xy_xz_yz
|
|
17
25
|
from openscvx import Problem
|
|
@@ -10,9 +10,17 @@ trajectory generation with:
|
|
|
10
10
|
- Minimal time objective
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import (
|
|
18
26
|
plot_brachistochrone_position,
|
|
@@ -11,9 +11,17 @@ circular obstacle. The problem includes:
|
|
|
11
11
|
- Parameter updates for multiple scenarios
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
|
|
14
17
|
import jax.numpy as jnp
|
|
15
18
|
import numpy as np
|
|
16
19
|
|
|
20
|
+
# Add grandparent directory to path to import examples.plotting
|
|
21
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
22
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
23
|
+
sys.path.append(grandparent_dir)
|
|
24
|
+
|
|
17
25
|
import openscvx as ox
|
|
18
26
|
from examples.plotting import plot_dubins_car
|
|
19
27
|
from openscvx import Problem
|
|
@@ -10,9 +10,17 @@ using a smooth max approximation for the disjoint constraint. The problem includ
|
|
|
10
10
|
- Minimal time objective
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import plot_dubins_car_disjoint
|
|
18
26
|
from openscvx import Problem
|
|
@@ -10,9 +10,17 @@ using the stljax library for STL constraint formulation. The problem includes:
|
|
|
10
10
|
- Requires: pip install stljax
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import plot_dubins_car_disjoint
|
|
18
26
|
from openscvx import Problem
|
|
@@ -10,10 +10,18 @@ aerial cinematography with viewpoint constraints. The problem includes:
|
|
|
10
10
|
- Attitude planning to maintain visual coverage
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
import numpy.linalg as la
|
|
16
19
|
|
|
20
|
+
# Add grandparent directory to path to import examples.plotting
|
|
21
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
22
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
23
|
+
sys.path.append(grandparent_dir)
|
|
24
|
+
|
|
17
25
|
import openscvx as ox
|
|
18
26
|
from examples.plotting import plot_animation
|
|
19
27
|
from openscvx import Problem
|
|
@@ -10,10 +10,18 @@ The problem includes:
|
|
|
10
10
|
- Configured for real-time re-optimization with moving targets
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
import numpy.linalg as la
|
|
16
19
|
|
|
20
|
+
# Add grandparent directory to path to import examples.plotting
|
|
21
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
22
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
23
|
+
sys.path.append(grandparent_dir)
|
|
24
|
+
|
|
17
25
|
import openscvx as ox
|
|
18
26
|
from examples.plotting import plot_animation
|
|
19
27
|
from openscvx import Problem
|
|
@@ -10,9 +10,17 @@ double integrator (point mass) dynamics instead of full 6-DOF dynamics. The prob
|
|
|
10
10
|
- Loop closure constraint
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import plot_animation_double_integrator
|
|
18
26
|
from openscvx import Problem
|
|
@@ -10,10 +10,18 @@ to maintain visual contact with reference targets. The problem includes:
|
|
|
10
10
|
- Minimal time objective
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
import numpy.linalg as la
|
|
16
19
|
|
|
20
|
+
# Add grandparent directory to path to import examples.plotting
|
|
21
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
22
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
23
|
+
sys.path.append(grandparent_dir)
|
|
24
|
+
|
|
17
25
|
import openscvx as ox
|
|
18
26
|
from examples.plotting import plot_animation
|
|
19
27
|
from openscvx import Problem
|
|
@@ -10,10 +10,18 @@ constraints applied at all nodes. The problem includes:
|
|
|
10
10
|
- Minimal time objective
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
import numpy.linalg as la
|
|
16
19
|
|
|
20
|
+
# Add grandparent directory to path to import examples.plotting
|
|
21
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
22
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
23
|
+
sys.path.append(grandparent_dir)
|
|
24
|
+
|
|
17
25
|
import openscvx as ox
|
|
18
26
|
from examples.plotting import plot_animation
|
|
19
27
|
from openscvx import Problem
|
|
@@ -11,10 +11,18 @@ gates with sensor visibility constraints. The problem includes:
|
|
|
11
11
|
- Minimal time objective
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
|
|
14
17
|
import jax.numpy as jnp
|
|
15
18
|
import numpy as np
|
|
16
19
|
import numpy.linalg as la
|
|
17
20
|
|
|
21
|
+
# Add grandparent directory to path to import examples.plotting
|
|
22
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
23
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
24
|
+
sys.path.append(grandparent_dir)
|
|
25
|
+
|
|
18
26
|
import openscvx as ox
|
|
19
27
|
from examples.plotting import plot_animation
|
|
20
28
|
from openscvx import Problem
|
|
@@ -9,9 +9,17 @@ racing through a series of gates in a specified order. The problem includes:
|
|
|
9
9
|
- Loop closure (start equals end position)
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
+
import os
|
|
13
|
+
import sys
|
|
14
|
+
|
|
12
15
|
import jax.numpy as jnp
|
|
13
16
|
import numpy as np
|
|
14
17
|
|
|
18
|
+
# Add grandparent directory to path to import examples.plotting
|
|
19
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
20
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
21
|
+
sys.path.append(grandparent_dir)
|
|
22
|
+
|
|
15
23
|
import openscvx as ox
|
|
16
24
|
from examples.plotting import plot_animation
|
|
17
25
|
from openscvx import Problem
|
|
@@ -10,9 +10,17 @@ The problem includes:
|
|
|
10
10
|
- Minimal time objective
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import plot_animation
|
|
18
26
|
from openscvx import Problem
|
|
@@ -9,9 +9,17 @@ obstacle avoidance constraints applied at specific nodes. The problem includes:
|
|
|
9
9
|
- Minimal time objective
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
+
import os
|
|
13
|
+
import sys
|
|
14
|
+
|
|
12
15
|
import jax.numpy as jnp
|
|
13
16
|
import numpy as np
|
|
14
17
|
|
|
18
|
+
# Add grandparent directory to path to import examples.plotting
|
|
19
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
20
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
21
|
+
sys.path.append(grandparent_dir)
|
|
22
|
+
|
|
15
23
|
import openscvx as ox
|
|
16
24
|
from examples.plotting import plot_animation
|
|
17
25
|
from openscvx import Problem
|
{openscvx-0.3.1.dev4 → openscvx-0.3.1.dev17}/examples/drone/obstacle_avoidance_realtime_base.py
RENAMED
|
@@ -10,9 +10,17 @@ The problem includes:
|
|
|
10
10
|
- Configured for real-time re-optimization
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
13
16
|
import jax.numpy as jnp
|
|
14
17
|
import numpy as np
|
|
15
18
|
|
|
19
|
+
# Add grandparent directory to path to import examples.plotting
|
|
20
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
21
|
+
grandparent_dir = os.path.dirname(os.path.dirname(current_dir))
|
|
22
|
+
sys.path.append(grandparent_dir)
|
|
23
|
+
|
|
16
24
|
import openscvx as ox
|
|
17
25
|
from examples.plotting import plot_animation
|
|
18
26
|
from openscvx import Problem
|
|
@@ -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.3.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 3, 1, '
|
|
31
|
+
__version__ = version = '0.3.1.dev17'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 3, 1, 'dev17')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g63cc16df8'
|
|
@@ -66,6 +66,8 @@ class OptimizationResults:
|
|
|
66
66
|
J_tr_history: list[np.ndarray] = field(default_factory=list)
|
|
67
67
|
J_vb_history: list[np.ndarray] = field(default_factory=list)
|
|
68
68
|
J_vc_history: list[np.ndarray] = field(default_factory=list)
|
|
69
|
+
TR_history: list[np.ndarray] = field(default_factory=list)
|
|
70
|
+
VC_history: list[np.ndarray] = field(default_factory=list)
|
|
69
71
|
|
|
70
72
|
@property
|
|
71
73
|
def x(self) -> np.ndarray:
|
|
@@ -101,6 +101,8 @@ def format_result(problem, state: "SolverState", converged: bool) -> Optimizatio
|
|
|
101
101
|
J_tr_history=state.J_tr,
|
|
102
102
|
J_vb_history=state.J_vb,
|
|
103
103
|
J_vc_history=state.J_vc,
|
|
104
|
+
TR_history=state.TR_history,
|
|
105
|
+
VC_history=state.VC_history,
|
|
104
106
|
)
|
|
105
107
|
|
|
106
108
|
|
|
@@ -142,6 +144,8 @@ def PTR_step(
|
|
|
142
144
|
V_multi_shoot,
|
|
143
145
|
subprop_time,
|
|
144
146
|
dis_time,
|
|
147
|
+
vc_mat,
|
|
148
|
+
tr_mat,
|
|
145
149
|
) = PTR_subproblem(
|
|
146
150
|
params.items(),
|
|
147
151
|
cpg_solve,
|
|
@@ -157,6 +161,8 @@ def PTR_step(
|
|
|
157
161
|
state.V_history.append(V_multi_shoot)
|
|
158
162
|
state.X.append(x_sol)
|
|
159
163
|
state.U.append(u_sol)
|
|
164
|
+
state.VC_history.append(vc_mat)
|
|
165
|
+
state.TR_history.append(tr_mat)
|
|
160
166
|
|
|
161
167
|
state.J_tr = np.sum(np.array(J_tr_vec))
|
|
162
168
|
state.J_vb = np.sum(np.array(J_vb_vec))
|
|
@@ -300,14 +306,10 @@ def PTR_subproblem(
|
|
|
300
306
|
)
|
|
301
307
|
|
|
302
308
|
# Calculate J_tr_vec using the JAX-compatible block diagonal matrix
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
)
|
|
308
|
-
** 2
|
|
309
|
-
)
|
|
310
|
-
J_vc_vec = np.sum(np.abs(prob.var_dict["nu"].value), axis=1)
|
|
309
|
+
tr_mat = inv_block_diag @ np.hstack((x_new_guess - state.x, u_new_guess - state.u)).T
|
|
310
|
+
J_tr_vec = la.norm(tr_mat, axis=0) ** 2
|
|
311
|
+
vc_mat = np.abs(prob.var_dict["nu"].value)
|
|
312
|
+
J_vc_vec = np.sum(vc_mat, axis=1)
|
|
311
313
|
|
|
312
314
|
id_ncvx = 0
|
|
313
315
|
J_vb_vec = 0
|
|
@@ -336,4 +338,6 @@ def PTR_subproblem(
|
|
|
336
338
|
V_multi_shoot,
|
|
337
339
|
subprop_time,
|
|
338
340
|
dis_time,
|
|
341
|
+
vc_mat,
|
|
342
|
+
abs(tr_mat),
|
|
339
343
|
)
|
|
@@ -59,6 +59,8 @@ class SolverState:
|
|
|
59
59
|
X: List[np.ndarray] = field(default_factory=list)
|
|
60
60
|
U: List[np.ndarray] = field(default_factory=list)
|
|
61
61
|
V_history: List[np.ndarray] = field(default_factory=list)
|
|
62
|
+
VC_history: List[np.ndarray] = field(default_factory=list)
|
|
63
|
+
TR_history: List[np.ndarray] = field(default_factory=list)
|
|
62
64
|
|
|
63
65
|
@property
|
|
64
66
|
def x(self) -> np.ndarray:
|
|
@@ -225,4 +227,6 @@ class SolverState:
|
|
|
225
227
|
X=[settings.sim.x.guess.copy()],
|
|
226
228
|
U=[settings.sim.u.guess.copy()],
|
|
227
229
|
V_history=[],
|
|
230
|
+
VC_history=[],
|
|
231
|
+
TR_history=[],
|
|
228
232
|
)
|
|
@@ -13,34 +13,16 @@ violations, and creating animations of the optimization process.
|
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
15
|
from .plotting import (
|
|
16
|
-
frame_args,
|
|
17
|
-
full_subject_traj_time,
|
|
18
|
-
plot_constraint_violation,
|
|
19
16
|
plot_control,
|
|
20
|
-
|
|
21
|
-
plot_losses,
|
|
22
|
-
plot_scp_animation,
|
|
17
|
+
plot_scp_iteration_animation,
|
|
23
18
|
plot_state,
|
|
24
|
-
qdcm,
|
|
25
|
-
save_gate_parameters,
|
|
26
|
-
scp_traj_interp,
|
|
27
19
|
)
|
|
28
20
|
|
|
29
21
|
__all__ = [
|
|
30
22
|
# Core plotting functions
|
|
31
23
|
"plot_state",
|
|
32
24
|
"plot_control",
|
|
33
|
-
"
|
|
34
|
-
"plot_losses",
|
|
35
|
-
"plot_scp_animation",
|
|
36
|
-
"plot_initial_guess",
|
|
37
|
-
# Trajectory utilities
|
|
38
|
-
"full_subject_traj_time",
|
|
39
|
-
"scp_traj_interp",
|
|
40
|
-
# Helper functions
|
|
41
|
-
"qdcm",
|
|
42
|
-
"save_gate_parameters",
|
|
43
|
-
"frame_args",
|
|
25
|
+
"plot_scp_iteration_animation",
|
|
44
26
|
]
|
|
45
27
|
|
|
46
28
|
# Mark module as unstable/deprecated
|