class_docstr: Class to denote a quaternion-orienter.
code: def __new__(cls, q0, q1, q2, q3):
      q0 = sympify(q0)
      q1 = sympify(q1)
      q2 = sympify(q2)
      q3 = sympify(q3)
      parent_orient = Matrix(
          [
              [
                  q0**2 + q1**2 - q2**2 - q3**2,
                  2 * (q1 * q2 - q0 * q3),
                  2 * (q0 * q2 + q1 * q3),
              ],
              [
                  2 * (q1 * q2 + q0 * q3),
                  q0**2 - q1**2 + q2**2 - q3**2,
                  2 * (q2 * q3 - q0 * q1),
              ],
              [
                  2 * (q1 * q3 - q0 * q2),
                  2 * (q0 * q1 + q2 * q3),
                  q0**2 - q1**2 - q2**2 + q3**2,
              ],
          ]
      )
      parent_orient = parent_orient.T
  
      obj = super().__new__(cls, q0, q1, q2, q3)
      obj._q0 = q0
      obj._q1 = q1
      obj._q2 = q2
      obj._q3 = q3
      obj._parent_orient = parent_orient
  
      return obj
  
imports: from sympy.core.basic import Basic
  from sympy.core.sympify import sympify
  from sympy.functions.elementary.trigonometric import cos, sin
  from sympy.matrices.dense import eye, rot_axis1, rot_axis2, rot_axis3
  from sympy.matrices.immutable import ImmutableDenseMatrix
  from sympy.core.cache import cacheit
  from sympy.core.symbol import Str
  import sympy.vector
label_desc: Use image node_id 1 for calling the QuaternionOrienter obj's underlying member method code with example usage: obj.__new__(cls, q0, q1, q2, q3) and returns: obj