code: def angle(self):
          
          self._normalise()
          norm = np.linalg.norm(self.vector)
          return self._wrap_angle(2.0 * atan2(norm,self.scalar))
docs: Get the angle (in radians) describing the magnitude of the quaternion rotation about its rotation axis.
  
          This is guaranteed to be within the range (-pi:pi) with the direction of
          rotation indicated by the sign.
  
          When a particular rotation describes a 180 degree rotation about an arbitrary
          axis vector `v`, the conversion to axis / angle representation may jump
          discontinuously between all permutations of `(-pi, pi)` and `(-v, v)`,
          each being geometrically equivalent (see Note in documentation).
  
          Returns:
              A real number in the range (-pi:pi) describing the angle of rotation
                  in radians about a Quaternion object's axis of rotation.
  
          Note:
              This feature only makes sense when referring to a unit quaternion.
              Calling this method will implicitly normalise the Quaternion object to a unit quaternion if it is not already one.