def __mul__(self, w):
    if self.iden:
        return w
    if w.iden:
        return self
    cc = (np.cos(self.a) * np.cos(w.a))
    cs = (np.cos(self.a) * np.sin(w.a))
    sc = (np.sin(self.a) * np.cos(w.a))
    ss = (np.sin(self.a) * np.sin(w.a))
    c = np.arccos((cc - (np.dot(self.v, w.v.T) * ss)))
    k1 = (self.v * sc)
    k2 = (w.v * cs)
    k3 = ((- np.cross(self.v, w.v)) * ss)
    k = ((1 / np.sin(c)) * ((k1 + k2) + k3))
    return ExpPauli((c * k))
def __mul__(self, w):
    if self.iden:
        return w
    if w.iden:
        return self
    cc = (np.cos(self.a) * np.cos(w.a))
    cs = (np.cos(self.a) * np.sin(w.a))
    sc = (np.sin(self.a) * np.cos(w.a))
    ss = (np.sin(self.a) * np.sin(w.a))
    c = np.arccos((cc - (np.dot(self.v, w.v.T) * ss)))
    k1 = (self.v * sc)
    k2 = (w.v * cs)
    k3 = ((- np.cross(self.v, w.v)) * ss)
    k = ((1 / np.sin(c)) * ((k1 + k2) + k3))
    return ExpPauli((c * k))