sleipnirgroup-jormungandr 0.6.7.dev71__tar.gz → 0.6.7.dev73__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.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/hessian_test.py +253 -1
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression.hpp +116 -116
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/optimization/solver/util/time_trace.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/include/sleipnir/util/time_tracer.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/arity.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/slice_tuple.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/text_wrap.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/postprocess_stubs.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/near.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/util/pool.cpp +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import math
|
|
2
2
|
import operator
|
|
3
|
-
from collections.abc import Iterable
|
|
3
|
+
from collections.abc import Callable, Iterable
|
|
4
4
|
from functools import reduce
|
|
5
5
|
|
|
6
6
|
import numpy as np
|
|
@@ -210,6 +210,222 @@ def test_nested_powers() -> None:
|
|
|
210
210
|
assert H[0, 0] == pytest.approx(12 * x0 * x0, abs=1e-12)
|
|
211
211
|
|
|
212
212
|
|
|
213
|
+
def check_unary_hessian(
|
|
214
|
+
f: Callable[[Variable], Variable],
|
|
215
|
+
df: Callable[[float], float],
|
|
216
|
+
d2f: Callable[[float], float],
|
|
217
|
+
) -> None:
|
|
218
|
+
# y = f(u) where u = x₀x₁
|
|
219
|
+
#
|
|
220
|
+
# ∂²y/∂x₀² = f″(u) x₁²
|
|
221
|
+
# ∂²y/∂x₀∂x₁ = f″(u) x₀x₁ + f′(u)
|
|
222
|
+
# ∂²y/∂x₁² = f″(u) x₀²
|
|
223
|
+
x = VariableMatrix(2)
|
|
224
|
+
x[0].set_value(0.6)
|
|
225
|
+
x[1].set_value(0.7)
|
|
226
|
+
hessian = Hessian(f(x[0] * x[1]), x)
|
|
227
|
+
symbolic_H = hessian.get()
|
|
228
|
+
|
|
229
|
+
# Check symbolic Hessian at a point other than where it was built too
|
|
230
|
+
for x0, x1 in [(0.6, 0.7), (0.3, 0.7)]:
|
|
231
|
+
x[0].set_value(x0)
|
|
232
|
+
x[1].set_value(x1)
|
|
233
|
+
|
|
234
|
+
u = x0 * x1
|
|
235
|
+
mixed = d2f(u) * u + df(u)
|
|
236
|
+
expected = np.array([[d2f(u) * x1 * x1, mixed], [mixed, d2f(u) * x0 * x0]])
|
|
237
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
238
|
+
np.testing.assert_allclose(
|
|
239
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def test_division() -> None:
|
|
244
|
+
# y = x₀/x₁
|
|
245
|
+
#
|
|
246
|
+
# ∂²y/∂x₀² = 0
|
|
247
|
+
# ∂²y/∂x₀∂x₁ = −1/x₁²
|
|
248
|
+
# ∂²y/∂x₁² = 2x₀/x₁³
|
|
249
|
+
x = VariableMatrix(2)
|
|
250
|
+
hessian = Hessian(x[0] / x[1], x)
|
|
251
|
+
symbolic_H = hessian.get()
|
|
252
|
+
|
|
253
|
+
for x0, x1 in [(3.0, 2.0), (-1.5, 0.5)]:
|
|
254
|
+
x[0].set_value(x0)
|
|
255
|
+
x[1].set_value(x1)
|
|
256
|
+
|
|
257
|
+
mixed = -1.0 / (x1 * x1)
|
|
258
|
+
expected = np.array([[0.0, mixed], [mixed, 2.0 * x0 / (x1 * x1 * x1)]])
|
|
259
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
260
|
+
np.testing.assert_allclose(
|
|
261
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def test_unary_minus() -> None:
|
|
266
|
+
check_unary_hessian(lambda u: -u, lambda u: -1.0, lambda u: 0.0)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def test_abs() -> None:
|
|
270
|
+
check_unary_hessian(autodiff.abs, lambda u: 1.0, lambda u: 0.0)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def test_acos() -> None:
|
|
274
|
+
check_unary_hessian(
|
|
275
|
+
autodiff.acos,
|
|
276
|
+
lambda u: -1.0 / math.sqrt(1.0 - u * u),
|
|
277
|
+
lambda u: -u / math.sqrt(1.0 - u * u) ** 3,
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def test_asin() -> None:
|
|
282
|
+
check_unary_hessian(
|
|
283
|
+
autodiff.asin,
|
|
284
|
+
lambda u: 1.0 / math.sqrt(1.0 - u * u),
|
|
285
|
+
lambda u: u / math.sqrt(1.0 - u * u) ** 3,
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def test_atan() -> None:
|
|
290
|
+
check_unary_hessian(
|
|
291
|
+
autodiff.atan,
|
|
292
|
+
lambda u: 1.0 / (1.0 + u * u),
|
|
293
|
+
lambda u: -2.0 * u / ((1.0 + u * u) * (1.0 + u * u)),
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def test_atan2() -> None:
|
|
298
|
+
# z = atan2(y, x)
|
|
299
|
+
#
|
|
300
|
+
# ∂²z/∂y² = −2xy/(x² + y²)²
|
|
301
|
+
# ∂²z/∂y∂x = (y² − x²)/(x² + y²)²
|
|
302
|
+
# ∂²z/∂x² = 2xy/(x² + y²)²
|
|
303
|
+
input = VariableMatrix(2)
|
|
304
|
+
hessian = Hessian(autodiff.atan2(input[0], input[1]), input)
|
|
305
|
+
symbolic_H = hessian.get()
|
|
306
|
+
|
|
307
|
+
for y, x in [(1.5, 0.5), (-0.7, 1.3)]:
|
|
308
|
+
input[0].set_value(y)
|
|
309
|
+
input[1].set_value(x)
|
|
310
|
+
|
|
311
|
+
d = x * x + y * y
|
|
312
|
+
mixed = (y * y - x * x) / (d * d)
|
|
313
|
+
expected = np.array(
|
|
314
|
+
[[-2.0 * x * y / (d * d), mixed], [mixed, 2.0 * x * y / (d * d)]]
|
|
315
|
+
)
|
|
316
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
317
|
+
np.testing.assert_allclose(
|
|
318
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def test_cbrt() -> None:
|
|
323
|
+
check_unary_hessian(
|
|
324
|
+
autodiff.cbrt,
|
|
325
|
+
lambda u: 1.0 / (3.0 * math.cbrt(u) * math.cbrt(u)),
|
|
326
|
+
lambda u: -2.0 / (9.0 * u * math.cbrt(u) * math.cbrt(u)),
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def test_cos() -> None:
|
|
331
|
+
check_unary_hessian(autodiff.cos, lambda u: -math.sin(u), lambda u: -math.cos(u))
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def test_cosh() -> None:
|
|
335
|
+
check_unary_hessian(autodiff.cosh, math.sinh, math.cosh)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def test_erf() -> None:
|
|
339
|
+
check_unary_hessian(
|
|
340
|
+
autodiff.erf,
|
|
341
|
+
lambda u: 2.0 / math.sqrt(math.pi) * math.exp(-u * u),
|
|
342
|
+
lambda u: -4.0 / math.sqrt(math.pi) * u * math.exp(-u * u),
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def test_exp() -> None:
|
|
347
|
+
check_unary_hessian(autodiff.exp, math.exp, math.exp)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def hypot_expected_H(v: np.ndarray) -> np.ndarray:
|
|
351
|
+
# y = ‖v‖
|
|
352
|
+
#
|
|
353
|
+
# ∂²y/∂vᵢ∂vⱼ = (‖v‖²δᵢⱼ − vᵢvⱼ)/‖v‖³
|
|
354
|
+
r2 = v @ v
|
|
355
|
+
return (r2 * np.eye(len(v)) - np.outer(v, v)) / (r2 * math.sqrt(r2))
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
def test_hypot_two_arguments() -> None:
|
|
359
|
+
x = VariableMatrix(2)
|
|
360
|
+
hessian = Hessian(autodiff.hypot(x[0], x[1]), x)
|
|
361
|
+
symbolic_H = hessian.get()
|
|
362
|
+
|
|
363
|
+
for x0, x1 in [(1.3, 2.3), (-0.5, 1.5)]:
|
|
364
|
+
x[0].set_value(x0)
|
|
365
|
+
x[1].set_value(x1)
|
|
366
|
+
|
|
367
|
+
expected = hypot_expected_H(np.array([x0, x1]))
|
|
368
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
369
|
+
np.testing.assert_allclose(
|
|
370
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def test_hypot_three_arguments() -> None:
|
|
375
|
+
x = VariableMatrix(3)
|
|
376
|
+
hessian = Hessian(autodiff.hypot(x[0], x[1], x[2]), x)
|
|
377
|
+
symbolic_H = hessian.get()
|
|
378
|
+
|
|
379
|
+
for v in [np.array([1.3, 2.3, 3.3]), np.array([-0.5, 1.5, -2.5])]:
|
|
380
|
+
x[0].set_value(v[0])
|
|
381
|
+
x[1].set_value(v[1])
|
|
382
|
+
x[2].set_value(v[2])
|
|
383
|
+
|
|
384
|
+
expected = hypot_expected_H(v)
|
|
385
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
386
|
+
np.testing.assert_allclose(
|
|
387
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def test_hypot_repeated_argument() -> None:
|
|
392
|
+
# y = hypot(a, b, a) = √(2a² + b²)
|
|
393
|
+
#
|
|
394
|
+
# ∂²y/∂a² = (2y² − 4a²)/y³
|
|
395
|
+
# ∂²y/∂a∂b = −2ab/y³
|
|
396
|
+
# ∂²y/∂b² = (y² − b²)/y³
|
|
397
|
+
x = VariableMatrix(2)
|
|
398
|
+
hessian = Hessian(autodiff.hypot(x[0], x[1], x[0]), x)
|
|
399
|
+
symbolic_H = hessian.get()
|
|
400
|
+
|
|
401
|
+
for a, b in [(1.3, 2.3), (-0.5, 1.5)]:
|
|
402
|
+
x[0].set_value(a)
|
|
403
|
+
x[1].set_value(b)
|
|
404
|
+
|
|
405
|
+
y2 = 2.0 * a * a + b * b
|
|
406
|
+
y3 = y2 * math.sqrt(y2)
|
|
407
|
+
mixed = -2.0 * a * b / y3
|
|
408
|
+
expected = np.array(
|
|
409
|
+
[[(2.0 * y2 - 4.0 * a * a) / y3, mixed], [mixed, (y2 - b * b) / y3]]
|
|
410
|
+
)
|
|
411
|
+
np.testing.assert_allclose(symbolic_H.value(), expected, rtol=0.0, atol=1e-12)
|
|
412
|
+
np.testing.assert_allclose(
|
|
413
|
+
hessian.value().todense(), expected, rtol=0.0, atol=1e-12
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def test_log() -> None:
|
|
418
|
+
check_unary_hessian(autodiff.log, lambda u: 1.0 / u, lambda u: -1.0 / (u * u))
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def test_log10() -> None:
|
|
422
|
+
check_unary_hessian(
|
|
423
|
+
autodiff.log10,
|
|
424
|
+
lambda u: 1.0 / (math.log(10.0) * u),
|
|
425
|
+
lambda u: -1.0 / (math.log(10.0) * u * u),
|
|
426
|
+
)
|
|
427
|
+
|
|
428
|
+
|
|
213
429
|
def test_max_and_min() -> None:
|
|
214
430
|
input = VariableMatrix(2)
|
|
215
431
|
expected_y = np.array([[0.0, 0.0], [0.0, 2.0]])
|
|
@@ -266,6 +482,42 @@ def test_pow() -> None:
|
|
|
266
482
|
)
|
|
267
483
|
|
|
268
484
|
|
|
485
|
+
def test_sign() -> None:
|
|
486
|
+
check_unary_hessian(autodiff.sign, lambda u: 0.0, lambda u: 0.0)
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
def test_sin() -> None:
|
|
490
|
+
check_unary_hessian(autodiff.sin, math.cos, lambda u: -math.sin(u))
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
def test_sinh() -> None:
|
|
494
|
+
check_unary_hessian(autodiff.sinh, math.cosh, math.sinh)
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
def test_sqrt() -> None:
|
|
498
|
+
check_unary_hessian(
|
|
499
|
+
autodiff.sqrt,
|
|
500
|
+
lambda u: 1.0 / (2.0 * math.sqrt(u)),
|
|
501
|
+
lambda u: -1.0 / (4.0 * u * math.sqrt(u)),
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
def test_tan() -> None:
|
|
506
|
+
check_unary_hessian(
|
|
507
|
+
autodiff.tan,
|
|
508
|
+
lambda u: 1.0 / (math.cos(u) * math.cos(u)),
|
|
509
|
+
lambda u: 2.0 * math.tan(u) / (math.cos(u) * math.cos(u)),
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
def test_tanh() -> None:
|
|
514
|
+
check_unary_hessian(
|
|
515
|
+
autodiff.tanh,
|
|
516
|
+
lambda u: 1.0 / (math.cosh(u) * math.cosh(u)),
|
|
517
|
+
lambda u: -2.0 * math.tanh(u) / (math.cosh(u) * math.cosh(u)),
|
|
518
|
+
)
|
|
519
|
+
|
|
520
|
+
|
|
269
521
|
def test_rosenbrock() -> None:
|
|
270
522
|
# z = (1 − x)² + 100(y − x²)²
|
|
271
523
|
# = 100(−x² + y)² + (−x + 1)²
|
{sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/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
|
|
@@ -472,122 +472,6 @@ struct BinaryPlusExpression final : Expression<Scalar> {
|
|
|
472
472
|
ExpressionPtr<Scalar> grad_expr_r() const { return this->adj_expr; }
|
|
473
473
|
};
|
|
474
474
|
|
|
475
|
-
/// Derived expression type for cbrt().
|
|
476
|
-
///
|
|
477
|
-
/// @tparam Scalar Scalar type.
|
|
478
|
-
template <typename Scalar>
|
|
479
|
-
struct CbrtExpression final : Expression<Scalar> {
|
|
480
|
-
/// Unary operator's operand.
|
|
481
|
-
ExpressionPtr<Scalar> x;
|
|
482
|
-
|
|
483
|
-
/// Constructs an unary expression (an operator with one argument).
|
|
484
|
-
///
|
|
485
|
-
/// @param x Unary operator's operand.
|
|
486
|
-
explicit constexpr CbrtExpression(ExpressionPtr<Scalar> x)
|
|
487
|
-
: x{std::move(x)} {}
|
|
488
|
-
|
|
489
|
-
void visit_args(
|
|
490
|
-
function_ref<void(Expression<Scalar>* arg)> func) const override {
|
|
491
|
-
func(x.get());
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
Scalar value() const override {
|
|
495
|
-
using std::cbrt;
|
|
496
|
-
return cbrt(x->val);
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
ExpressionType type() const override { return ExpressionType::NONLINEAR; }
|
|
500
|
-
|
|
501
|
-
std::string_view name() const override { return "cbrt"; }
|
|
502
|
-
|
|
503
|
-
void accumulate_adjoints() const override { x->adj += grad_l(); }
|
|
504
|
-
|
|
505
|
-
void accumulate_adjoints_expr() const override {
|
|
506
|
-
x->adj_expr += grad_expr_l();
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
private:
|
|
510
|
-
Scalar grad_l() const {
|
|
511
|
-
using std::cbrt;
|
|
512
|
-
|
|
513
|
-
Scalar c = cbrt(x->val);
|
|
514
|
-
return this->adj / (Scalar(3) * c * c);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
ExpressionPtr<Scalar> grad_expr_l() const {
|
|
518
|
-
auto c = cbrt(x);
|
|
519
|
-
return this->adj_expr / (constant_ptr(Scalar(3)) * c * c);
|
|
520
|
-
}
|
|
521
|
-
};
|
|
522
|
-
|
|
523
|
-
/// cbrt() for Expressions.
|
|
524
|
-
///
|
|
525
|
-
/// @tparam Scalar Scalar type.
|
|
526
|
-
/// @param x The argument.
|
|
527
|
-
template <typename Scalar>
|
|
528
|
-
ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x) {
|
|
529
|
-
using enum ExpressionType;
|
|
530
|
-
using std::cbrt;
|
|
531
|
-
|
|
532
|
-
// Evaluate constant
|
|
533
|
-
if (x->type() == CONSTANT) {
|
|
534
|
-
if (x->val == Scalar(0)) {
|
|
535
|
-
// Return zero
|
|
536
|
-
return x;
|
|
537
|
-
} else if (x->val == Scalar(-1) || x->val == Scalar(1)) {
|
|
538
|
-
return x;
|
|
539
|
-
} else {
|
|
540
|
-
return constant_ptr(cbrt(x->val));
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
return make_expression_ptr<CbrtExpression<Scalar>>(x);
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
/// Derived expression type for constant.
|
|
548
|
-
///
|
|
549
|
-
/// @tparam Scalar Scalar type.
|
|
550
|
-
template <typename Scalar>
|
|
551
|
-
struct ConstantExpression final : Expression<Scalar> {
|
|
552
|
-
/// Constructs a nullary expression (an operator with no arguments).
|
|
553
|
-
///
|
|
554
|
-
/// @param value The expression value.
|
|
555
|
-
explicit constexpr ConstantExpression(Scalar value)
|
|
556
|
-
: Expression<Scalar>{value} {}
|
|
557
|
-
|
|
558
|
-
Scalar value() const override { return this->val; }
|
|
559
|
-
|
|
560
|
-
ExpressionType type() const override { return ExpressionType::CONSTANT; }
|
|
561
|
-
|
|
562
|
-
std::string_view name() const override { return "constant"; }
|
|
563
|
-
};
|
|
564
|
-
|
|
565
|
-
template <typename Scalar>
|
|
566
|
-
ExpressionPtr<Scalar> constant_ptr(Scalar value) {
|
|
567
|
-
return make_expression_ptr<ConstantExpression<Scalar>>(value);
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
/// Derived expression type for decision variable.
|
|
571
|
-
///
|
|
572
|
-
/// @tparam Scalar Scalar type.
|
|
573
|
-
template <typename Scalar>
|
|
574
|
-
struct DecisionVariableExpression final : Expression<Scalar> {
|
|
575
|
-
/// Constructs a decision variable expression with a value of zero.
|
|
576
|
-
constexpr DecisionVariableExpression() : Expression<Scalar>{Scalar(0)} {}
|
|
577
|
-
|
|
578
|
-
/// Constructs a nullary expression (an operator with no arguments).
|
|
579
|
-
///
|
|
580
|
-
/// @param value The expression value.
|
|
581
|
-
explicit constexpr DecisionVariableExpression(Scalar value)
|
|
582
|
-
: Expression<Scalar>{value} {}
|
|
583
|
-
|
|
584
|
-
Scalar value() const override { return this->val; }
|
|
585
|
-
|
|
586
|
-
ExpressionType type() const override { return ExpressionType::LINEAR; }
|
|
587
|
-
|
|
588
|
-
std::string_view name() const override { return "decision variable"; }
|
|
589
|
-
};
|
|
590
|
-
|
|
591
475
|
/// Derived expression type for binary division operator.
|
|
592
476
|
///
|
|
593
477
|
/// @tparam Scalar Scalar type.
|
|
@@ -1128,6 +1012,122 @@ ExpressionPtr<Scalar> atan2(const ExpressionPtr<Scalar>& y,
|
|
|
1128
1012
|
return make_expression_ptr<Atan2Expression<Scalar>>(y, x);
|
|
1129
1013
|
}
|
|
1130
1014
|
|
|
1015
|
+
/// Derived expression type for cbrt().
|
|
1016
|
+
///
|
|
1017
|
+
/// @tparam Scalar Scalar type.
|
|
1018
|
+
template <typename Scalar>
|
|
1019
|
+
struct CbrtExpression final : Expression<Scalar> {
|
|
1020
|
+
/// Unary operator's operand.
|
|
1021
|
+
ExpressionPtr<Scalar> x;
|
|
1022
|
+
|
|
1023
|
+
/// Constructs an unary expression (an operator with one argument).
|
|
1024
|
+
///
|
|
1025
|
+
/// @param x Unary operator's operand.
|
|
1026
|
+
explicit constexpr CbrtExpression(ExpressionPtr<Scalar> x)
|
|
1027
|
+
: x{std::move(x)} {}
|
|
1028
|
+
|
|
1029
|
+
void visit_args(
|
|
1030
|
+
function_ref<void(Expression<Scalar>* arg)> func) const override {
|
|
1031
|
+
func(x.get());
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
Scalar value() const override {
|
|
1035
|
+
using std::cbrt;
|
|
1036
|
+
return cbrt(x->val);
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
ExpressionType type() const override { return ExpressionType::NONLINEAR; }
|
|
1040
|
+
|
|
1041
|
+
std::string_view name() const override { return "cbrt"; }
|
|
1042
|
+
|
|
1043
|
+
void accumulate_adjoints() const override { x->adj += grad_l(); }
|
|
1044
|
+
|
|
1045
|
+
void accumulate_adjoints_expr() const override {
|
|
1046
|
+
x->adj_expr += grad_expr_l();
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
private:
|
|
1050
|
+
Scalar grad_l() const {
|
|
1051
|
+
using std::cbrt;
|
|
1052
|
+
|
|
1053
|
+
Scalar c = cbrt(x->val);
|
|
1054
|
+
return this->adj / (Scalar(3) * c * c);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
ExpressionPtr<Scalar> grad_expr_l() const {
|
|
1058
|
+
auto c = cbrt(x);
|
|
1059
|
+
return this->adj_expr / (constant_ptr(Scalar(3)) * c * c);
|
|
1060
|
+
}
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1063
|
+
/// cbrt() for Expressions.
|
|
1064
|
+
///
|
|
1065
|
+
/// @tparam Scalar Scalar type.
|
|
1066
|
+
/// @param x The argument.
|
|
1067
|
+
template <typename Scalar>
|
|
1068
|
+
ExpressionPtr<Scalar> cbrt(const ExpressionPtr<Scalar>& x) {
|
|
1069
|
+
using enum ExpressionType;
|
|
1070
|
+
using std::cbrt;
|
|
1071
|
+
|
|
1072
|
+
// Evaluate constant
|
|
1073
|
+
if (x->type() == CONSTANT) {
|
|
1074
|
+
if (x->val == Scalar(0)) {
|
|
1075
|
+
// Return zero
|
|
1076
|
+
return x;
|
|
1077
|
+
} else if (x->val == Scalar(-1) || x->val == Scalar(1)) {
|
|
1078
|
+
return x;
|
|
1079
|
+
} else {
|
|
1080
|
+
return constant_ptr(cbrt(x->val));
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
return make_expression_ptr<CbrtExpression<Scalar>>(x);
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/// Derived expression type for constant.
|
|
1088
|
+
///
|
|
1089
|
+
/// @tparam Scalar Scalar type.
|
|
1090
|
+
template <typename Scalar>
|
|
1091
|
+
struct ConstantExpression final : Expression<Scalar> {
|
|
1092
|
+
/// Constructs a nullary expression (an operator with no arguments).
|
|
1093
|
+
///
|
|
1094
|
+
/// @param value The expression value.
|
|
1095
|
+
explicit constexpr ConstantExpression(Scalar value)
|
|
1096
|
+
: Expression<Scalar>{value} {}
|
|
1097
|
+
|
|
1098
|
+
Scalar value() const override { return this->val; }
|
|
1099
|
+
|
|
1100
|
+
ExpressionType type() const override { return ExpressionType::CONSTANT; }
|
|
1101
|
+
|
|
1102
|
+
std::string_view name() const override { return "constant"; }
|
|
1103
|
+
};
|
|
1104
|
+
|
|
1105
|
+
template <typename Scalar>
|
|
1106
|
+
ExpressionPtr<Scalar> constant_ptr(Scalar value) {
|
|
1107
|
+
return make_expression_ptr<ConstantExpression<Scalar>>(value);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
/// Derived expression type for decision variable.
|
|
1111
|
+
///
|
|
1112
|
+
/// @tparam Scalar Scalar type.
|
|
1113
|
+
template <typename Scalar>
|
|
1114
|
+
struct DecisionVariableExpression final : Expression<Scalar> {
|
|
1115
|
+
/// Constructs a decision variable expression with a value of zero.
|
|
1116
|
+
constexpr DecisionVariableExpression() : Expression<Scalar>{Scalar(0)} {}
|
|
1117
|
+
|
|
1118
|
+
/// Constructs a nullary expression (an operator with no arguments).
|
|
1119
|
+
///
|
|
1120
|
+
/// @param value The expression value.
|
|
1121
|
+
explicit constexpr DecisionVariableExpression(Scalar value)
|
|
1122
|
+
: Expression<Scalar>{value} {}
|
|
1123
|
+
|
|
1124
|
+
Scalar value() const override { return this->val; }
|
|
1125
|
+
|
|
1126
|
+
ExpressionType type() const override { return ExpressionType::LINEAR; }
|
|
1127
|
+
|
|
1128
|
+
std::string_view name() const override { return "decision variable"; }
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
1131
|
/// Derived expression type for cos().
|
|
1132
1132
|
///
|
|
1133
1133
|
/// @tparam Scalar Scalar type.
|
|
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.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/pyproject.toml
RENAMED
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/python/cpp/arity.hpp
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
|
{sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev71 → sleipnirgroup_jormungandr-0.6.7.dev73}/src/util/pool.cpp
RENAMED
|
File without changes
|