def quaternion_rotation(quat, vector):
dp = np.dot(quat[<NUM_LIT:1>:], vector)<EOL>cos = (<NUM_LIT:2>*quat[<NUM_LIT:0>]*quat[<NUM_LIT:0>] - <NUM_LIT:1>)<EOL>return np.array([<EOL><NUM_LIT:2> * (quat[<NUM_LIT:0>] * (quat[<NUM_LIT:2>] * vector[<NUM_LIT:2>] - quat[<NUM_LIT:3>] * vector[<NUM_LIT:1>]) + quat[<NUM_LIT:1>] * dp) + cos * vector[<NUM_LIT:0>],<EOL><NUM_LIT:2> * (quat[<NUM_LIT:0>] * (quat[<NUM_LIT:3>] * vector[<NUM_LIT:0>] - quat[<NUM_LIT:1>] * vector[<NUM_LIT:2>]) + quat[<NUM_LIT:2>] * dp) + cos * vector[<NUM_LIT:1>],<EOL><NUM_LIT:2> * (quat[<NUM_LIT:0>] * (quat[<NUM_LIT:1>] * vector[<NUM_LIT:1>] - quat[<NUM_LIT:2>] * vector[<NUM_LIT:0>]) + quat[<NUM_LIT:3>] * dp) + cos * vector[<NUM_LIT:2>]<EOL>], float)<EOL>
Apply the rotation represented by the quaternion to the vector

       Warning: This only works correctly for normalized quaternions.