code: def __mul__(self, other):
      if isinstance(other, Quaternion):  # quaternion multiplication
          return Quaternion(
              np.array(
                  (
                      self.q[0] * other.q[0]
                      - self.q[1] * other.q[1]
                      - self.q[2] * other.q[2]
                      - self.q[3] * other.q[3],
                      self.q[0] * other.q[1]
                      + self.q[1] * other.q[0]
                      + self.q[2] * other.q[3]
                      - self.q[3] * other.q[2],
                      self.q[0] * other.q[2]
                      - self.q[1] * other.q[3]
                      + self.q[2] * other.q[0]
                      + self.q[3] * other.q[1],
                      self.q[0] * other.q[3]
                      + self.q[1] * other.q[2]
                      - self.q[2] * other.q[1]
                      + self.q[3] * other.q[0],
                  )
              )
          )
      else:  # scalar multiplication (assumed)
          return Quaternion(other * self.q)
  
imports: import numpy
label_desc: Use image node_id 7 for calling the Quaternion obj's underlying member method code with example usage: obj.__mul__(other) and returns: Quaternion, Quaternion