def METHOD_NAME(m, R, z):
    """Compute the derivative of rotation vector given the value, rotation, and angular velocity
    Args:
        m (arr): the rotation vector
        R (arr): the rotation matrix
        z (arr): the angular velocity
    Returns:
        dm ([arr]): the dereivative
    """
    angleEps = 1e-3
    Half = 0.5
    npR = np.array(R).reshape((3, 3), order='F')  # since it is column major
    trace = np.trace(npR)
    theta = np.arccos((trace - 1) / 2)
    if np.abs(theta) < angleEps:
        return z
    # compute matrix derivative
    dR = np.zeros((3, 3), order='F')
    for i in range(3):
        dR[:, i] = np.cross(z, npR[:, i])
    vdR = uncross(dR)
    tracedR = np.trace(dR)
    if np.abs(theta - np.pi) < angleEps:
        dmx = np.pi*0.25/np.sqrt((npR[0, 0]+1)*Half)*dR[0, 0]
        dmy = np.pi*0.25/np.sqrt((npR[1, 1]+1)*Half)*dR[1, 1]
        dmz = np.pi*0.25/np.sqrt((npR[2, 2]+1)*Half)*dR[2, 2]
        return [dmx, dmy, dmz]
    sinctheta = Sinc(theta)
    dsinctheta = Sinc_Dx(theta)
    scale = Half / sinctheta
    gamma2 = dsinctheta/sinctheta/(2*np.sin(theta))
    dm = [dm_ * tracedR * gamma2 + scale * vdR_ for dm_, vdR_ in zip(m, vdR)]
    # dm.inplaceMul(tracedR*gamma2);
    # dm.madd(vdR,scale);
    return dm