|
1 | | -import numpy as np |
2 | 1 | from . import biorbd # This is created while installing using CMake |
3 | 2 | from .biorbd import * |
4 | 3 | from ._version import __version__ |
5 | 4 | from .surface_max_torque_actuator import * |
6 | 5 | from .rigid_body import * |
7 | 6 | from .utils import * |
| 7 | +from .wrapper import * |
| 8 | +from .wrapper import has_static_optimization, has_extended_kalman_filter |
8 | 9 |
|
9 | 10 |
|
10 | | -if biorbd.currentLinearAlgebraBackend() == 1: |
11 | | - from casadi import Function, MX, SX, horzcat |
| 11 | +if biorbd.currentLinearAlgebraBackend() == biorbd.CASADI: |
| 12 | + from casadi import MX, SX, Function, horzcat |
12 | 13 |
|
13 | | - def to_casadi_func(name, func, *all_param, expand=True): |
| 14 | + backend = biorbd.CASADI |
| 15 | + |
| 16 | + def to_casadi_func(name, func, *all_param, expand=True, **kwargs): |
14 | 17 | cx_param = [] |
15 | 18 | for p in all_param: |
16 | 19 | if isinstance(p, (MX, SX)): |
17 | 20 | cx_param.append(p) |
| 21 | + for value in kwargs.values(): |
| 22 | + if isinstance(value, (MX, SX)): |
| 23 | + cx_param.append(value) |
18 | 24 |
|
19 | 25 | if isinstance(func, (MX, SX, Function)): |
20 | | - func_evaluated = func |
| 26 | + func_evaluated = [func] |
21 | 27 | else: |
22 | | - func_evaluated = func(*all_param) |
| 28 | + func_evaluated = func(*all_param, **kwargs) |
23 | 29 | if isinstance(func_evaluated, (list, tuple)): |
24 | | - func_evaluated = horzcat(*[val if isinstance(val, MX) else val.to_mx() for val in func_evaluated]) |
| 30 | + func_evaluated = [val if isinstance(val, MX) else val.to_mx() for val in func_evaluated] |
25 | 31 | elif not isinstance(func_evaluated, MX): |
26 | | - func_evaluated = func_evaluated.to_mx() |
27 | | - func = Function(name, cx_param, [func_evaluated]) |
| 32 | + func_evaluated = [func_evaluated.to_mx()] |
| 33 | + else: |
| 34 | + func_evaluated = [func_evaluated] |
| 35 | + func = Function(name, cx_param, func_evaluated) |
28 | 36 | return func.expand() if expand else func |
| 37 | + |
| 38 | +elif biorbd.currentLinearAlgebraBackend() == biorbd.EIGEN3: |
| 39 | + backend = biorbd.EIGEN3 |
| 40 | + |
| 41 | + def to_casadi_func(name, func, *all_param, expand=True): |
| 42 | + raise RuntimeError("to_casadi_func is only available with the CASADI backend") |
| 43 | + |
| 44 | +else: |
| 45 | + raise RuntimeError("Unknown backend") |
0 commit comments