docs: def read_gtfs(path: Path, dist_units: str) -> "Feed":
      """
      Create a Feed instance from the given path and given distance units.
      The path should be a directory containing GTFS text files or a
      zip file that unzips as a collection of GTFS text files
      (and not as a directory containing GTFS text files).
      The distance units given must lie in :const:`constants.dist_units`
  
      Notes
      -----
      - Ignore non-GTFS files
      - Automatically strip whitespace from the column names in GTFS files
      """
      path = Path(path)
      if not path.exists():
          raise ValueError(f"Path {path} does not exist")
  
      # Unzip path to temporary directory if necessary
      if path.is_file():
          zipped = True
          tmp_dir = tempfile.TemporaryDirectory()
          src_path = Path(tmp_dir.name)
          shutil.unpack_archive(str(path), tmp_dir.name, "zip")
      else:
          zipped = False
          src_path = path
  
      # Read files into feed dictionary of DataFrames
      feed_dict = {table: None for table in cs.GTFS_REF["table"]}
      for p in src_path.iterdir():
          table = p.stem
          # Skip empty files, irrelevant files, and files with no data
          if p.is_file() and p.stat().st_size and table in feed_dict:
              # utf-8-sig gets rid of the byte order mark (BOM);
              # see http://stackoverflow.com/questions/17912307/u-ufeff-in-python-string
              df = pd.read_csv(p, dtype=cs.DTYPE, encoding="utf-8-sig")
              if not df.empty:
                  feed_dict[table] = cn.clean_column_names(df)
  
      feed_dict["dist_units"] = dist_units
  
      # Delete temporary directory
      if zipped:
          tmp_dir.cleanup()
  
      # Create feed
      return Feed(**feed_dict)