def eci2aer(eci: Tuple[float, float, float],
            lat0: float, lon0: float, h0: float,
            t: datetime,
            useastropy: bool = True) -> Tuple[float, float, float]:
    """
    takes ECI coordinates of point and gives az, el, slant range from Observer

    Parameters
    ----------

    eci : tuple
          [meters] Nx3 target ECI location (x,y,z)
    lat0 : float
           Observer geodetic latitude
    lon0 : float
           Observer geodetic longitude
    h0 : float
         observer altitude above geodetic ellipsoid (meters)
    t : datetime.datetime
        Observation time


    Returns
    -------
    az : float
         azimuth to target
    el : float
         elevation to target
    srange : float
         slant range [meters]
    """
    ecef = np.atleast_2d(eci2ecef(eci, t, useastropy))

    return ecef2aer(ecef[:, 0], ecef[:, 1], ecef[:, 2], lat0, lon0, h0)
def eci2aer ( eci : Tuple [ float , float , float ] , lat0 : float , lon0 : float , h0 : float , t : datetime , useastropy : bool = True ) -> Tuple [ float , float , float ] : ecef = np . atleast_2d ( eci2ecef ( eci , t , useastropy ) ) return ecef2aer ( ecef [ : , 0 ] , ecef [ : , 1 ] , ecef [ : , 2 ] , lat0 , lon0 , h0 )
takes ECI coordinates of point and gives az, el, slant range from Observer

    Parameters
    ----------

    eci : tuple
          [meters] Nx3 target ECI location (x,y,z)
    lat0 : float
           Observer geodetic latitude
    lon0 : float
           Observer geodetic longitude
    h0 : float
         observer altitude above geodetic ellipsoid (meters)
    t : datetime.datetime
        Observation time


    Returns
    -------
    az : float
         azimuth to target
    el : float
         elevation to target
    srange : float
         slant range [meters]