def METHOD_NAME(rave_robot, q, qd, qdd, forceslist=None, returncomponents=True):
    """Inverse dynamics equation.
    Simple wrapper around OpenRAVE's ComputeInverseDynamics
    function. Return the numerical values of the components of the
    inverse dynamics equation.
          M(q) qdd + C(q, qd) qd + g(q)
        = t1 + t2 + t3
    Parameters
    ----------
    rave_robot : OpenRAVE.robot
    q : (_N, ) ndarray
        Joint position.
    qd : (_N, ) ndarray
        Joint velocity.
    qdd : (_N, ) ndarray
        Joint acceleration.
    returncomponents : Bool
        If True, return the list [t1, t2, t3]
        If False, return t1 + t2 + t3
    Returns
    -------
    res : (3, ) List, or ndarray
        See returncomponents parameter.
    """
    if np.isscalar(q):  # Scalar case
        _q = [q]
        _qd = [qd]
        _qdd = [qdd]
    else:
        _q = q
        _qd = qd
        _qdd = qdd
    # Temporary remove kinematic Limits
    vlim = rave_robot.GetDOFVelocityLimits()
    alim = rave_robot.GetDOFAccelerationLimits()
    rave_robot.SetDOFVelocityLimits(100 * vlim)
    rave_robot.SetDOFAccelerationLimits(100 * alim)
    # Do computation
    with rave_robot:
        rave_robot.SetDOFValues(_q)
        rave_robot.SetDOFVelocities(_qd)
        res = rave_robot.ComputeInverseDynamics(
            _qdd, forceslist, returncomponents=returncomponents
        )
    # Restore kinematic limits
    rave_robot.SetDOFVelocityLimits(vlim)
    rave_robot.SetDOFAccelerationLimits(alim)
    return res