def __imul__(left, right):
    """
        Pose multiplication
        
        :arg left: left multiplicand
        :arg right: right multiplicand
        :return: product
        :raises: ValueError
        
        - ``X *= Y`` compounds the poses X and Y and places the result in X
        - ``X *= s`` performs elementwise multiplication of the elements of ``X``


        Any other input combinations result in a ValueError.
        
        Note that left and right can have a length greater than 1 in which case
        
        ====   =====   ====  ================================
        left   right   len     operation
        ====   =====   ====  ================================
         1      1       1    ``prod = left * right``
         1      M       M    ``prod[i] = left * right[i]``
         N      1       M    ``prod[i] = left[i] * right``
         M      M       M    ``prod[i] = left[i] * right[i]``
        ====   =====   ====  ================================

        A scalar of length M is list, tuple or numpy array.
        An N-vector of length M is a NxM numpy array, where each column is an N-vector.
        """
    return left.__mul__(right)
