sleipnirgroup-jormungandr 0.6.5.dev22__tar.gz → 0.6.5.dev23__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.
Potentially problematic release.
This version of sleipnirgroup-jormungandr might be problematic. Click here for more details.
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable_block.hpp +7 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable_matrix.hpp +84 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable_block.cpp +2 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable_matrix.cpp +1 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/docstrings.hpp +12 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/variable_matrix_test.py +39 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/interior_point.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/util/pool.cpp +0 -0
|
@@ -624,6 +624,13 @@ class VariableBlock : public SleipnirBase {
|
|
|
624
624
|
return result;
|
|
625
625
|
}
|
|
626
626
|
|
|
627
|
+
/// Returns the matrix exponential.
|
|
628
|
+
///
|
|
629
|
+
/// @return The matrix exponential.
|
|
630
|
+
std::remove_cv_t<Mat> exp() const {
|
|
631
|
+
return std::remove_cv_t<Mat>{*this}.exp();
|
|
632
|
+
}
|
|
633
|
+
|
|
627
634
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
|
628
635
|
|
|
629
636
|
class iterator {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#pragma once
|
|
4
4
|
|
|
5
5
|
#include <algorithm>
|
|
6
|
+
#include <array>
|
|
6
7
|
#include <concepts>
|
|
7
8
|
#include <cstddef>
|
|
8
9
|
#include <initializer_list>
|
|
@@ -12,6 +13,7 @@
|
|
|
12
13
|
#include <vector>
|
|
13
14
|
|
|
14
15
|
#include <Eigen/Core>
|
|
16
|
+
#include <Eigen/LU>
|
|
15
17
|
#include <Eigen/QR>
|
|
16
18
|
#include <gch/small_vector.hpp>
|
|
17
19
|
|
|
@@ -1036,6 +1038,88 @@ class VariableMatrix : public SleipnirBase {
|
|
|
1036
1038
|
return result;
|
|
1037
1039
|
}
|
|
1038
1040
|
|
|
1041
|
+
/// Returns the matrix exponential.
|
|
1042
|
+
///
|
|
1043
|
+
/// @return The matrix exponential.
|
|
1044
|
+
VariableMatrix<Scalar> exp() const {
|
|
1045
|
+
slp_assert(rows() == cols());
|
|
1046
|
+
|
|
1047
|
+
// Coefficients for (13, 13) Padé approximant of exp(A) are from the
|
|
1048
|
+
// following program:
|
|
1049
|
+
//
|
|
1050
|
+
// #!/usr/bin/env python
|
|
1051
|
+
//
|
|
1052
|
+
// import mpmath as mp
|
|
1053
|
+
//
|
|
1054
|
+
// # https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats
|
|
1055
|
+
// mp.mp.prec = 113 # quad precision
|
|
1056
|
+
//
|
|
1057
|
+
// L = 13
|
|
1058
|
+
// M = 13
|
|
1059
|
+
// p, q = mp.pade(mp.taylor(mp.exp, 0, L + M), L, M)
|
|
1060
|
+
//
|
|
1061
|
+
// print("constexpr std::array p{")
|
|
1062
|
+
// for k, p_k in enumerate(p):
|
|
1063
|
+
// print(f"Scalar({p_k}L){',' if k < len(p) - 1 else '};'}")
|
|
1064
|
+
// print("constexpr std::array q{")
|
|
1065
|
+
// for k, q_k in enumerate(q):
|
|
1066
|
+
// print(f"Scalar({q_k}L){',' if k < len(q) - 1 else '};'}")
|
|
1067
|
+
constexpr size_t NUM_COEFFS = 14;
|
|
1068
|
+
constexpr std::array p{Scalar(1.0L),
|
|
1069
|
+
Scalar(0.499999999999999999999987615564159L),
|
|
1070
|
+
Scalar(0.119999999999999999999993719796468L),
|
|
1071
|
+
Scalar(0.0183333333333333333333318078905823L),
|
|
1072
|
+
Scalar(0.00199275362318840579710121408775205L),
|
|
1073
|
+
Scalar(0.00016304347826086956521736560868541L),
|
|
1074
|
+
Scalar(1.03519668737060041407846479512981e-05L),
|
|
1075
|
+
Scalar(5.17598343685300207039205144279119e-07L),
|
|
1076
|
+
Scalar(2.04315135665250081725989398668247e-08L),
|
|
1077
|
+
Scalar(6.30602270571759511499920806570486e-10L),
|
|
1078
|
+
Scalar(1.48377004840414002705850442238441e-11L),
|
|
1079
|
+
Scalar(2.52915349159796595521307855480881e-13L),
|
|
1080
|
+
Scalar(2.81017054621996217245857568431558e-15L),
|
|
1081
|
+
Scalar(1.54404975067030888596595580141692e-17L)};
|
|
1082
|
+
constexpr std::array q{Scalar(1.0L),
|
|
1083
|
+
Scalar(-0.500000000000000000000012384435841L),
|
|
1084
|
+
Scalar(0.120000000000000000000006104232309L),
|
|
1085
|
+
Scalar(-0.0183333333333333333333347707904729L),
|
|
1086
|
+
Scalar(0.00199275362318840579710166350137732L),
|
|
1087
|
+
Scalar(-0.000163043478260869565217413851346892L),
|
|
1088
|
+
Scalar(1.03519668737060041407885187519331e-05L),
|
|
1089
|
+
Scalar(-5.17598343685300207039443859549262e-07L),
|
|
1090
|
+
Scalar(2.04315135665250081726103781506842e-08L),
|
|
1091
|
+
Scalar(-6.30602270571759511500345035969254e-10L),
|
|
1092
|
+
Scalar(1.48377004840414002705969744674248e-11L),
|
|
1093
|
+
Scalar(-2.52915349159796595521550648156349e-13L),
|
|
1094
|
+
Scalar(2.81017054621996217246180850207342e-15L),
|
|
1095
|
+
Scalar(-1.54404975067030888596810607146175e-17L)};
|
|
1096
|
+
static_assert(p.size() == NUM_COEFFS);
|
|
1097
|
+
static_assert(q.size() == NUM_COEFFS);
|
|
1098
|
+
|
|
1099
|
+
// 13
|
|
1100
|
+
// P = Σ pₖAᵏ
|
|
1101
|
+
// k=0
|
|
1102
|
+
//
|
|
1103
|
+
// 13
|
|
1104
|
+
// Q = Σ qₖAᵏ
|
|
1105
|
+
// k=0
|
|
1106
|
+
VariableMatrix<Scalar> P{
|
|
1107
|
+
Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(rows(), p[0])
|
|
1108
|
+
.asDiagonal()};
|
|
1109
|
+
VariableMatrix<Scalar> Q{
|
|
1110
|
+
Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(rows(), q[0])
|
|
1111
|
+
.asDiagonal()};
|
|
1112
|
+
auto A_pow = *this;
|
|
1113
|
+
for (size_t k = 1; k < NUM_COEFFS; ++k) {
|
|
1114
|
+
P += p[k] * A_pow;
|
|
1115
|
+
Q += q[k] * A_pow;
|
|
1116
|
+
A_pow *= *this;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
// exp(A) ≈ P/Q
|
|
1120
|
+
return VariableMatrix<Scalar>{Q.to_eigen().lu().solve(P.to_eigen())};
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1039
1123
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
|
1040
1124
|
|
|
1041
1125
|
class iterator {
|
|
@@ -392,6 +392,8 @@ void bind_variable_block(
|
|
|
392
392
|
const std::function<Variable<double>(const Variable<double>& x)>&
|
|
393
393
|
unary_op) { return self.cwise_transform(unary_op); },
|
|
394
394
|
"func"_a, DOC(slp, VariableBlock, cwise_transform));
|
|
395
|
+
cls.def("exp", &VariableBlock<VariableMatrix<double>>::exp,
|
|
396
|
+
DOC(slp, VariableBlock, exp));
|
|
395
397
|
|
|
396
398
|
// Comparison operators
|
|
397
399
|
for_each_type<nb::detail::self_t, double, int, Variable<double>>(
|
|
@@ -439,6 +439,7 @@ void bind_variable_matrix(nb::module_& autodiff,
|
|
|
439
439
|
const std::function<Variable<double>(const Variable<double>& x)>&
|
|
440
440
|
unary_op) { return self.cwise_transform(unary_op); },
|
|
441
441
|
"func"_a, DOC(slp, VariableMatrix, cwise_transform));
|
|
442
|
+
cls.def("exp", &VariableMatrix<double>::exp, DOC(slp, VariableMatrix, exp));
|
|
442
443
|
cls.def_static("identity", &VariableMatrix<double>::identity, "rows"_a,
|
|
443
444
|
DOC(slp, VariableMatrix, identity));
|
|
444
445
|
cls.def_static("zero", &VariableMatrix<double>::zero, "rows"_a, "cols"_a,
|
|
@@ -1160,6 +1160,12 @@ R"doc(Returns end iterator.
|
|
|
1160
1160
|
Returns:
|
|
1161
1161
|
End iterator.)doc";
|
|
1162
1162
|
|
|
1163
|
+
static const char *__doc_slp_VariableBlock_exp =
|
|
1164
|
+
R"doc(Returns the matrix exponential.
|
|
1165
|
+
|
|
1166
|
+
Returns:
|
|
1167
|
+
The matrix exponential.)doc";
|
|
1168
|
+
|
|
1163
1169
|
static const char *__doc_slp_VariableBlock_iterator = R"doc()doc";
|
|
1164
1170
|
|
|
1165
1171
|
static const char *__doc_slp_VariableBlock_iterator_iterator = R"doc()doc";
|
|
@@ -1812,6 +1818,12 @@ R"doc(Returns const end iterator.
|
|
|
1812
1818
|
Returns:
|
|
1813
1819
|
Const end iterator.)doc";
|
|
1814
1820
|
|
|
1821
|
+
static const char *__doc_slp_VariableMatrix_exp =
|
|
1822
|
+
R"doc(Returns the matrix exponential.
|
|
1823
|
+
|
|
1824
|
+
Returns:
|
|
1825
|
+
The matrix exponential.)doc";
|
|
1826
|
+
|
|
1815
1827
|
static const char *__doc_slp_VariableMatrix_identity =
|
|
1816
1828
|
R"doc(Returns an identity variable matrix.
|
|
1817
1829
|
|
|
@@ -404,6 +404,45 @@ def test_cwise_reduce():
|
|
|
404
404
|
assert (result.value() == np.array([[16.0, 27.0, 40.0], [55.0, 72.0, 91.0]])).all()
|
|
405
405
|
|
|
406
406
|
|
|
407
|
+
def test_exp():
|
|
408
|
+
A1 = VariableMatrix([[4.0]])
|
|
409
|
+
np.testing.assert_allclose(A1.exp().value() @ (-A1).exp().value(), np.identity(1))
|
|
410
|
+
np.testing.assert_allclose(
|
|
411
|
+
A1[:, :].exp().value() @ (-A1[:, :]).exp().value(), np.identity(1)
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
A2 = VariableMatrix([[0.0, 1.0], [0.0, -0.5]])
|
|
415
|
+
np.testing.assert_allclose(
|
|
416
|
+
A2.exp().value() @ (-A2).exp().value(), np.identity(2), atol=1e-15
|
|
417
|
+
)
|
|
418
|
+
np.testing.assert_allclose(
|
|
419
|
+
A2[:, :].exp().value() @ (-A2[:, :]).exp().value(), np.identity(2), atol=1e-15
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
A3 = VariableMatrix([[0.0, 1.0], [0.0, 10.0]])
|
|
423
|
+
np.testing.assert_allclose(
|
|
424
|
+
A3.exp().value() @ (-A3).exp().value(), np.identity(2), atol=1e-15
|
|
425
|
+
)
|
|
426
|
+
np.testing.assert_allclose(
|
|
427
|
+
A3[:, :].exp().value() @ (-A3[:, :]).exp().value(), np.identity(2), atol=1e-15
|
|
428
|
+
)
|
|
429
|
+
A4 = VariableMatrix([[1.0, 10.0], [0.0, 0.0]])
|
|
430
|
+
np.testing.assert_allclose(
|
|
431
|
+
A4.exp().value() @ (-A4).exp().value(), np.identity(2), atol=1e-15
|
|
432
|
+
)
|
|
433
|
+
np.testing.assert_allclose(
|
|
434
|
+
A4[:, :].exp().value() @ (-A4[:, :]).exp().value(), np.identity(2), atol=1e-15
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
A5 = VariableMatrix([[2.0, 3.0], [4.0, 5.0]])
|
|
438
|
+
np.testing.assert_allclose(
|
|
439
|
+
A5.exp().value() @ (-A5).exp().value(), np.identity(2), atol=1e-12
|
|
440
|
+
)
|
|
441
|
+
np.testing.assert_allclose(
|
|
442
|
+
A5[:, :].exp().value() @ (-A5[:, :]).exp().value(), np.identity(2), atol=1e-12
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
|
|
407
446
|
def test_block_free_function():
|
|
408
447
|
A = VariableMatrix([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
|
|
409
448
|
B = VariableMatrix([[7.0], [8.0]])
|
{sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/CMakeLists.txt
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
|
|
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
|
{sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/pyproject.toml
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
|
{sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/python/cpp/main.cpp
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
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.5.dev22 → sleipnirgroup_jormungandr-0.6.5.dev23}/src/util/pool.cpp
RENAMED
|
File without changes
|