docs: def ellipse(map_axis, centerlon, centerlat, major_axis, minor_axis, angle, n=360, filled=False, **kwargs):
      """
      This function enables general error ellipses to be drawn on the cartopy projection of the input map axis
      using a center and a set of major and minor axes and a rotation angle east of north.
      (Adapted from equi).
  
      Parameters
      -----------
      map_axis : cartopy axis
      centerlon : longitude of the center of the ellipse
      centerlat : latitude of the center of the ellipse
      major_axis : Major axis of ellipse
      minor_axis : Minor axis of ellipse
      angle : angle of major axis in degrees east of north
      n : number of points with which to apporximate the ellipse
      filled : boolean specifying if the ellipse should be plotted as a filled polygon or
               as a set of line segments (Doesn't work right now)
      kwargs : any other key word arguments can be passed for the line
  
      Returns
      ---------
      The map object with the ellipse plotted on it
  
      """
      if not has_cartopy:
          print('-W- cartopy must be installed to run ipmag.ellipse')
          return False
      angle = angle*(np.pi/180)
      glon1 = centerlon
      glat1 = centerlat
      X = []
      Y = []
      for azimuth in np.linspace(0, 360, n):
          az_rad = azimuth*(np.pi/180)
          radius = ((major_axis*minor_axis)/(((minor_axis*np.cos(az_rad-angle))
                                              ** 2 + (major_axis*np.sin(az_rad-angle))**2)**.5))
          glon2, glat2, baz = shoot(glon1, glat1, azimuth, radius)
          X.append((360+glon2) % 360)
          Y.append(glat2)
      X.append(X[0])
      Y.append(Y[0])
  
      if filled:
          ellip = np.array((X, Y)).T
          ellip = map_axis.projection.transform_points(
              ccrs.PlateCarree(), ellip[:, 0], ellip[:, 1])
          poly = Polygon(ellip[:, :2], **kwargs)
          map_axis.add_patch(poly)
      else:
          try:
              map_axis.plot(X, Y, transform=ccrs.Geodetic(), **kwargs)
              return True
          except ValueError:
              return False