#NEWLINE# def quaternion_multiply( quaternion1 , quaternion0 ) : #NEWLINE# #INDENT# 'Return multiplication of two quaternions.\n\n    >>> q = quaternion_multiply([4, 1, -2, 3], [8, -5, 6, 7])\n    >>> numpy.allclose(q, [28, -44, -14, 48])\n    True\n\n    ' #NEWLINE# ( w0 , x0 , y0 , z0 ) = quaternion0 #NEWLINE# ( w1 , x1 , y1 , z1 ) = quaternion1 #NEWLINE# return numpy . array ( [ ( ( ( ( ( - x1 ) * x0 ) - ( y1 * y0 ) ) - ( z1 * z1 ) ) + ( w1 * w0 ) ) , ( ( ( ( x1 * w0 ) + ( y1 * z0 ) ) - ( z1 * y0 ) ) + ( w1 * x0 ) ) , ( ( ( ( ( - x1 ) * z0 ) + ( y1 * w0 ) ) + ( z1 * x0 ) ) + ( w1 * y0 ) ) , ( ( ( ( x1 * y0 ) - ( y1 * x0 ) ) + ( z1 * w0 ) ) + ( w1 * z0 ) ) ] , dtype = numpy . float64 )