docs: def normal_errors(axes, covariance_matrix, **kwargs):
      """
      Currently assumes upper hemisphere of stereonet
      """
      level = kwargs.pop('level',1)
      traditional_layout = kwargs.pop('traditional_layout',True)
      d = N.diagonal(covariance_matrix)
      ell = ellipse(**kwargs)
  
      if axes[2,2] < 0:
          axes *= -1
  
      # Not sure where this factor comes from but it
      # seems to make things work better
      c1 = 2
      axis_lengths = d[:2]
      f = N.linalg.norm(
          ell*axis_lengths,axis=1)
  
      e0 = -ell.T*d[2]*c1
      e = N.vstack((e0,f))
  
      _ = dot(e.T,axes).T
  
      if traditional_layout:
          lon,lat = stereonet_math.cart2sph(_[2],_[0],-_[1])
      else:
          lon,lat = stereonet_math.cart2sph(-_[1],_[0],_[2])
      return list(zip(lon,lat))