docs: def ecef2enuv(u: float, v: float, w: float,
                lat0: float, lon0: float, deg: bool = True) -> Tuple[float, float, float]:
      """
      VECTOR from observer to target  ECEF => ENU
  
      Parameters
      ----------
      u : float or numpy.ndarray of float
          target x ECEF coordinate (meters)
      v : float or numpy.ndarray of float
          target y ECEF coordinate (meters)
      w : 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)
      deg : bool, optional
            degrees input/output  (False: radians in/out)
  
      Returns
      -------
      uEast : float or numpy.ndarray of float
          target east ENU coordinate (meters)
      vNorth : float or numpy.ndarray of float
          target north ENU coordinate (meters)
      wUp : float or numpy.ndarray of float
          target up ENU coordinate (meters)
  
      """
      if deg:
          lat0 = radians(lat0)
          lon0 = radians(lon0)
  
      t = cos(lon0) * u + sin(lon0) * v
      uEast = -sin(lon0) * u + cos(lon0) * v
      wUp = cos(lat0) * t + sin(lat0) * w
      vNorth = -sin(lat0) * t + cos(lat0) * w
  
      return uEast, vNorth, wUp