sleipnirgroup-jormungandr 0.6.5.dev8__tar.gz → 0.6.5.dev9__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.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression.hpp +87 -18
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/gradient_test.py +14 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/hessian_test.py +56 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/interior_point.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/util/pool.cpp +0 -0
|
@@ -428,6 +428,8 @@ ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x);
|
|
|
428
428
|
template <typename Scalar>
|
|
429
429
|
ExpressionPtr<Scalar> exp(const ExpressionPtr<Scalar>& x);
|
|
430
430
|
template <typename Scalar>
|
|
431
|
+
ExpressionPtr<Scalar> sign(const ExpressionPtr<Scalar>& x);
|
|
432
|
+
template <typename Scalar>
|
|
431
433
|
ExpressionPtr<Scalar> sin(const ExpressionPtr<Scalar>& x);
|
|
432
434
|
template <typename Scalar>
|
|
433
435
|
ExpressionPtr<Scalar> sinh(const ExpressionPtr<Scalar>& x);
|
|
@@ -797,13 +799,7 @@ struct AbsExpression final : Expression<Scalar> {
|
|
|
797
799
|
ExpressionPtr<Scalar> grad_expr_l(
|
|
798
800
|
const ExpressionPtr<Scalar>& x,
|
|
799
801
|
const ExpressionPtr<Scalar>&) const override {
|
|
800
|
-
|
|
801
|
-
return -this->adjoint_expr;
|
|
802
|
-
} else if (x->val > Scalar(0)) {
|
|
803
|
-
return this->adjoint_expr;
|
|
804
|
-
} else {
|
|
805
|
-
return constant_ptr(Scalar(0));
|
|
806
|
-
}
|
|
802
|
+
return this->adjoint_expr * sign(x);
|
|
807
803
|
}
|
|
808
804
|
};
|
|
809
805
|
|
|
@@ -1356,6 +1352,72 @@ ExpressionPtr<Scalar> hypot(const ExpressionPtr<Scalar>& x,
|
|
|
1356
1352
|
return make_expression_ptr<HypotExpression<Scalar>>(x, y);
|
|
1357
1353
|
}
|
|
1358
1354
|
|
|
1355
|
+
/// Derived expression type for is_nonnegative().
|
|
1356
|
+
///
|
|
1357
|
+
/// @tparam Scalar Scalar type.
|
|
1358
|
+
template <typename Scalar>
|
|
1359
|
+
struct IsNonnegativeExpression final : Expression<Scalar> {
|
|
1360
|
+
/// Constructs an unary expression (an operator with one argument).
|
|
1361
|
+
///
|
|
1362
|
+
/// @param x Unary operator's operand.
|
|
1363
|
+
explicit constexpr IsNonnegativeExpression(ExpressionPtr<Scalar> x)
|
|
1364
|
+
: Expression<Scalar>{std::move(x)} {}
|
|
1365
|
+
|
|
1366
|
+
Scalar value(Scalar x, Scalar) const override {
|
|
1367
|
+
return x >= Scalar(0) ? Scalar(1) : Scalar(0);
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
ExpressionType type() const override { return ExpressionType::NONLINEAR; }
|
|
1371
|
+
|
|
1372
|
+
std::string_view name() const override { return "is nonnegative"; }
|
|
1373
|
+
};
|
|
1374
|
+
|
|
1375
|
+
/// Returns one if x is nonnegative and zero otherwise.
|
|
1376
|
+
///
|
|
1377
|
+
/// @tparam Scalar Scalar type.
|
|
1378
|
+
/// @param x The argument.
|
|
1379
|
+
template <typename Scalar>
|
|
1380
|
+
ExpressionPtr<Scalar> is_nonnegative(const ExpressionPtr<Scalar>& x) {
|
|
1381
|
+
if (x->type() == ExpressionType::CONSTANT) {
|
|
1382
|
+
return constant_ptr(x->val >= Scalar(0) ? Scalar(1) : Scalar(0));
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
return make_expression_ptr<IsNonnegativeExpression<Scalar>>(x);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
/// Derived expression type for is_positive().
|
|
1389
|
+
///
|
|
1390
|
+
/// @tparam Scalar Scalar type.
|
|
1391
|
+
template <typename Scalar>
|
|
1392
|
+
struct IsPositiveExpression final : Expression<Scalar> {
|
|
1393
|
+
/// Constructs an unary expression (an operator with one argument).
|
|
1394
|
+
///
|
|
1395
|
+
/// @param x Unary operator's operand.
|
|
1396
|
+
explicit constexpr IsPositiveExpression(ExpressionPtr<Scalar> x)
|
|
1397
|
+
: Expression<Scalar>{std::move(x)} {}
|
|
1398
|
+
|
|
1399
|
+
Scalar value(Scalar x, Scalar) const override {
|
|
1400
|
+
return x > Scalar(0) ? Scalar(1) : Scalar(0);
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
ExpressionType type() const override { return ExpressionType::NONLINEAR; }
|
|
1404
|
+
|
|
1405
|
+
std::string_view name() const override { return "is positive"; }
|
|
1406
|
+
};
|
|
1407
|
+
|
|
1408
|
+
/// Returns one if x is positive and zero otherwise.
|
|
1409
|
+
///
|
|
1410
|
+
/// @tparam Scalar Scalar type.
|
|
1411
|
+
/// @param x The argument.
|
|
1412
|
+
template <typename Scalar>
|
|
1413
|
+
ExpressionPtr<Scalar> is_positive(const ExpressionPtr<Scalar>& x) {
|
|
1414
|
+
if (x->type() == ExpressionType::CONSTANT) {
|
|
1415
|
+
return constant_ptr(x->val > Scalar(0) ? Scalar(1) : Scalar(0));
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
return make_expression_ptr<IsPositiveExpression<Scalar>>(x);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1359
1421
|
/// Derived expression type for log().
|
|
1360
1422
|
///
|
|
1361
1423
|
/// @tparam Scalar Scalar type.
|
|
@@ -1496,13 +1558,19 @@ struct MaxExpression final : Expression<Scalar> {
|
|
|
1496
1558
|
ExpressionPtr<Scalar> grad_expr_l(
|
|
1497
1559
|
const ExpressionPtr<Scalar>& a,
|
|
1498
1560
|
const ExpressionPtr<Scalar>& b) const override {
|
|
1499
|
-
|
|
1561
|
+
// adjoint * (a >= b)
|
|
1562
|
+
// adjoint * (a - b >= 0)
|
|
1563
|
+
return this->adjoint_expr * is_nonnegative(a - b);
|
|
1500
1564
|
}
|
|
1501
1565
|
|
|
1502
1566
|
ExpressionPtr<Scalar> grad_expr_r(
|
|
1503
1567
|
const ExpressionPtr<Scalar>& a,
|
|
1504
1568
|
const ExpressionPtr<Scalar>& b) const override {
|
|
1505
|
-
|
|
1569
|
+
// adjoint * !(a >= b)
|
|
1570
|
+
// adjoint * (a < b)
|
|
1571
|
+
// adjoint * (b > a)
|
|
1572
|
+
// adjoint * (b - a > 0)
|
|
1573
|
+
return this->adjoint_expr * is_positive(b - a);
|
|
1506
1574
|
}
|
|
1507
1575
|
};
|
|
1508
1576
|
|
|
@@ -1560,13 +1628,19 @@ struct MinExpression final : Expression<Scalar> {
|
|
|
1560
1628
|
ExpressionPtr<Scalar> grad_expr_l(
|
|
1561
1629
|
const ExpressionPtr<Scalar>& a,
|
|
1562
1630
|
const ExpressionPtr<Scalar>& b) const override {
|
|
1563
|
-
|
|
1631
|
+
// adjoint * (a <= b)
|
|
1632
|
+
// adjoint * (b >= a)
|
|
1633
|
+
// adjoint * (b - a >= 0)
|
|
1634
|
+
return this->adjoint_expr * is_nonnegative(b - a);
|
|
1564
1635
|
}
|
|
1565
1636
|
|
|
1566
1637
|
ExpressionPtr<Scalar> grad_expr_r(
|
|
1567
1638
|
const ExpressionPtr<Scalar>& a,
|
|
1568
1639
|
const ExpressionPtr<Scalar>& b) const override {
|
|
1569
|
-
|
|
1640
|
+
// adjoint * !(a <= b)
|
|
1641
|
+
// adjoint * (a > b)
|
|
1642
|
+
// adjoint * (a - b > 0)
|
|
1643
|
+
return this->adjoint_expr * is_positive(a - b);
|
|
1570
1644
|
}
|
|
1571
1645
|
};
|
|
1572
1646
|
|
|
@@ -1624,9 +1698,7 @@ struct PowExpression final : Expression<Scalar> {
|
|
|
1624
1698
|
using std::log;
|
|
1625
1699
|
using std::pow;
|
|
1626
1700
|
|
|
1627
|
-
|
|
1628
|
-
return base == Scalar(0) ? Scalar(0)
|
|
1629
|
-
: this->adjoint * pow(base, power) * log(base);
|
|
1701
|
+
return this->adjoint * pow(base, power) * log(base);
|
|
1630
1702
|
}
|
|
1631
1703
|
|
|
1632
1704
|
ExpressionPtr<Scalar> grad_expr_l(
|
|
@@ -1639,10 +1711,7 @@ struct PowExpression final : Expression<Scalar> {
|
|
|
1639
1711
|
ExpressionPtr<Scalar> grad_expr_r(
|
|
1640
1712
|
const ExpressionPtr<Scalar>& base,
|
|
1641
1713
|
const ExpressionPtr<Scalar>& power) const override {
|
|
1642
|
-
|
|
1643
|
-
return base->val == Scalar(0)
|
|
1644
|
-
? base // Return zero
|
|
1645
|
-
: this->adjoint_expr * pow(base, power) * log(base);
|
|
1714
|
+
return this->adjoint_expr * pow(base, power) * log(base);
|
|
1646
1715
|
}
|
|
1647
1716
|
};
|
|
1648
1717
|
|
|
@@ -363,6 +363,20 @@ def test_abs():
|
|
|
363
363
|
assert g.get().value()[0, 0] == 0.0
|
|
364
364
|
assert g.value()[0, 0] == 0.0
|
|
365
365
|
|
|
366
|
+
f = autodiff.abs(x * x - 4.0)
|
|
367
|
+
g = Gradient(f, x)
|
|
368
|
+
symbolic_g = g.get()
|
|
369
|
+
|
|
370
|
+
x.set_value(3.0)
|
|
371
|
+
assert symbolic_g.value()[0, 0] == 6.0
|
|
372
|
+
assert g.value()[0, 0] == 6.0
|
|
373
|
+
assert g.get().value()[0, 0] == 6.0
|
|
374
|
+
|
|
375
|
+
x.set_value(1.0)
|
|
376
|
+
assert symbolic_g.value()[0, 0] == -2.0
|
|
377
|
+
assert g.value()[0, 0] == -2.0
|
|
378
|
+
assert g.get().value()[0, 0] == -2.0
|
|
379
|
+
|
|
366
380
|
|
|
367
381
|
def test_atan2():
|
|
368
382
|
x = Variable()
|
|
@@ -209,6 +209,62 @@ def test_nested_powers():
|
|
|
209
209
|
assert H[0, 0] == pytest.approx(12 * x0 * x0, abs=1e-12)
|
|
210
210
|
|
|
211
211
|
|
|
212
|
+
def test_max_and_min():
|
|
213
|
+
input = VariableMatrix(2)
|
|
214
|
+
expected_y = np.array([[0.0, 0.0], [0.0, 2.0]])
|
|
215
|
+
expected_x = np.array([[2.0, 0.0], [0.0, 0.0]])
|
|
216
|
+
|
|
217
|
+
def check(f, x0, y0, x1, y1):
|
|
218
|
+
hessian = Hessian(f, input)
|
|
219
|
+
symbolic_H = hessian.get()
|
|
220
|
+
|
|
221
|
+
input[0].set_value(x0)
|
|
222
|
+
input[1].set_value(y0)
|
|
223
|
+
np.testing.assert_array_equal(symbolic_H.value(), expected_y)
|
|
224
|
+
np.testing.assert_array_equal(hessian.value().todense(), expected_y)
|
|
225
|
+
|
|
226
|
+
input[0].set_value(x1)
|
|
227
|
+
input[1].set_value(y1)
|
|
228
|
+
np.testing.assert_array_equal(symbolic_H.value(), expected_x)
|
|
229
|
+
np.testing.assert_array_equal(hessian.value().todense(), expected_x)
|
|
230
|
+
|
|
231
|
+
input[0].set_value(2.0)
|
|
232
|
+
input[1].set_value(2.0)
|
|
233
|
+
np.testing.assert_array_equal(symbolic_H.value(), expected_x)
|
|
234
|
+
np.testing.assert_array_equal(hessian.value().todense(), expected_x)
|
|
235
|
+
|
|
236
|
+
x_squared = input[0] * input[0]
|
|
237
|
+
y_squared = input[1] * input[1]
|
|
238
|
+
check(autodiff.max(x_squared, y_squared), 1.0, 2.0, 3.0, 2.0)
|
|
239
|
+
check(autodiff.min(x_squared, y_squared), 2.0, 1.0, 2.0, 3.0)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def test_pow():
|
|
243
|
+
input = VariableMatrix(2)
|
|
244
|
+
f = autodiff.pow(input[0] + 1.0, input[1])
|
|
245
|
+
hessian = Hessian(f, input)
|
|
246
|
+
|
|
247
|
+
symbolic_H = hessian.get()
|
|
248
|
+
|
|
249
|
+
input[0].set_value(2.0)
|
|
250
|
+
input[1].set_value(3.0)
|
|
251
|
+
mixed = 9.0 * (1.0 + 3.0 * math.log(3.0))
|
|
252
|
+
expected = np.array([[18.0, mixed], [mixed, 27.0 * math.log(3.0) ** 2]])
|
|
253
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
254
|
+
np.testing.assert_allclose(
|
|
255
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
input[0].set_value(3.0)
|
|
259
|
+
input[1].set_value(2.0)
|
|
260
|
+
mixed = 4.0 * (1.0 + 2.0 * math.log(4.0))
|
|
261
|
+
expected = np.array([[2.0, mixed], [mixed, 16.0 * math.log(4.0) ** 2]])
|
|
262
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
263
|
+
np.testing.assert_allclose(
|
|
264
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
|
|
212
268
|
def test_rosenbrock():
|
|
213
269
|
# z = (1 − x)² + 100(y − x²)²
|
|
214
270
|
# = 100(−x² + y)² + (−x + 1)²
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/CMakeLists.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/BuildTypes.cmake
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/cmake/SubdirList.cmake
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
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/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.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/python/cpp/binders.hpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/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
|
{sleipnirgroup_jormungandr-0.6.5.dev8 → sleipnirgroup_jormungandr-0.6.5.dev9}/src/util/pool.cpp
RENAMED
|
File without changes
|