(
dae: dynamics.ContinuousDynamicsAbstract, integrator: dynamics.IntegratorAbstract
)
| 134 | @pytest.mark.parametrize("dae", dae_list) |
| 135 | @pytest.mark.parametrize("integrator", [dynamics.IntegratorMidpoint]) |
| 136 | def test_implicit_integrator( |
| 137 | dae: dynamics.ContinuousDynamicsAbstract, integrator: dynamics.IntegratorAbstract |
| 138 | ): |
| 139 | dt = 0.1 |
| 140 | dyn = integrator(dae, dt) |
| 141 | x = dae.space.rand() |
| 142 | x = np.clip(x, -5, 5) |
| 143 | u = np.random.randn(dyn.nu) |
| 144 | data = dyn.createData() |
| 145 | dyn.evaluate(x, u, x, data) |
| 146 | assert isinstance(data, dynamics.IntegratorData) |
| 147 | |
| 148 | Jx_nd, Ju_nd, Jy_nd = dynamics_finite_difference(dyn, dyn.space, x, u, eps=EPSILON) |
| 149 | |
| 150 | dyn.evaluate(x, u, x, data) |
| 151 | dyn.computeJacobians(x, u, x, data) |
| 152 | atol = EPSILON**0.5 |
| 153 | assert np.allclose(data.Jx, Jx_nd, atol=atol) |
| 154 | assert np.allclose(data.Ju, Ju_nd, atol=atol) |
| 155 | assert np.allclose(data.Jy, Jy_nd, atol=atol) |
| 156 | |
| 157 | |
| 158 | def exp_dyn_fd_check(dyn: dynamics.ExplicitDynamicsModel, x, u, eps: float): |
nothing calls this directly
no test coverage detected