code: def aer2ecef(az: float, el: float, srange: float,
               lat0: float, lon0: float, alt0: float,
               ell=None, deg: bool = True) -> Tuple[float, float, float]:
      
      # Origin of the local system in geocentric coordinates.
      x0, y0, z0 = geodetic2ecef(lat0, lon0, alt0, ell, deg=deg)
      # Convert Local Spherical AER to ENU
      e1, n1, u1 = aer2enu(az, el, srange, deg=deg)
      # Rotating ENU to ECEF
      dx, dy, dz = enu2uvw(e1, n1, u1, lat0, lon0, deg=deg)
      # Origin + offset from origin equals position in ECEF
      return x0 + dx, y0 + dy, z0 + dz
docs: converts target azimuth, elevation, range from observer at lat0,lon0,alt0 to ECEF coordinates.
  
      Parameters
      ----------
      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]
      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
      -------
  
      ECEF (Earth centered, Earth fixed)  x,y,z
  
      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)
  
  
      Notes
      ------
      if srange==NaN, z=NaN