code: def _from_axis_angle(cls, axis, angle):
          
          mag_sq = np.dot(axis, axis)
          if mag_sq == 0.0:
              raise ZeroDivisionError("Provided rotation axis has no length")
          # Ensure axis is in unit vector form
          if (abs(1.0 - mag_sq) > 1e-12):
              axis = axis / sqrt(mag_sq)
          theta = angle / 2.0
          r = cos(theta)
          i = axis * sin(theta)
  
          return cls(r, i[0], i[1], i[2])
docs: Initialise from axis and angle representation
  
          Create a Quaternion by specifying the 3-vector rotation axis and rotation
          angle (in radians) from which the quaternion's rotation should be created.
  
          Params:
              axis: a valid numpy 3-vector
              angle: a real valued angle in radians