def _symplectic_euler_step(state, force, dt):
    """Compute one step of the symplectic euler approximation.

    Parameters
    ----------
    state : array-like, shape=[2, dim]
        variables a time t
    force : callable
    dt : float
        time-step

    Returns
    -------
    point_new : array-like, shape=[dim]
        first variable at time t + dt
    vector_new : array-like, shape=[dim]
        second variable at time t + dt
    """
    point, vector = state
    point_new = point + vector * dt
    vector_new = vector + force(point, vector) * dt
    return point_new, vector_new
