code: def ecef2enu(x: float, y: float, z: float,
               lat0: float, lon0: float, h0: float,
               ell: Ellipsoid = None, deg: bool = True) -> Tuple[float, float, float]:
      
      x0, y0, z0 = geodetic2ecef(lat0, lon0, h0, ell, deg=deg)
  
      return uvw2enu(x - x0, y - y0, z - z0, lat0, lon0, deg=deg)
docs: from observer to target, ECEF => ENU
  
      Parameters
      ----------
      x : float or numpy.ndarray of float
          target x ECEF coordinate (meters)
      y : float or numpy.ndarray of float
          target y ECEF coordinate (meters)
      z : float or numpy.ndarray of float
          target z ECEF 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
      -------
      East : float or numpy.ndarray of float
          target east ENU coordinate (meters)
      North : float or numpy.ndarray of float
          target north ENU coordinate (meters)
      Up : float or numpy.ndarray of float
          target up ENU coordinate (meters)