docs: def ecef2aer(x: float, y: float, z: float,
               lat0: float, lon0: float, h0: float,
               ell=None, deg: bool = True) -> Tuple[float, float, float]:
      """
      gives azimuth, elevation and slant range from an Observer to a Point with ECEF coordinates.
  
      ECEF input location is with units of meters
  
      Parameters
      ----------
  
      x : float or numpy.ndarray of float
          ECEF x coordinate (meters)
      y : float or numpy.ndarray of float
          ECEF y coordinate (meters)
      z : float or numpy.ndarray of float
          ECEF z coordinate (meters)
      lat0 : float
          Observer geodetic latitude
      lon0 : float
          Observer geodetic longitude
      h0 : float
           observer altitude above geodetic ellipsoid (meters)
      ell : Ellipsoid, optional
          reference ellipsoid
      deg : bool, optional
          degrees input/output  (False: radians in/out)
  
      Returns
      -------
      az : float or numpy.ndarray of float
           azimuth to target
      el : float or numpy.ndarray of float
           elevation to target
      srange : float or numpy.ndarray of float
           slant range [meters]
      """
      xEast, yNorth, zUp = ecef2enu(x, y, z, lat0, lon0, h0, ell, deg=deg)
  
      return enu2aer(xEast, yNorth, zUp, deg=deg)