docs: def validate(
      feed: "Feed", *, as_df: bool = True, include_warnings: bool = True
  ) -> Union[List, DataFrame]:
      """
      Check whether the given feed satisfies the GTFS.
  
      Parameters
      ----------
      feed : Feed
      as_df : boolean
          If ``True``, then return the resulting report as a DataFrame;
          otherwise return the result as a list
      include_warnings : boolean
          If ``True``, then include problems of types ``'error'`` and
          ``'warning'``; otherwise, only return problems of type
          ``'error'``
  
      Returns
      -------
      list or DataFrame
          Run all the table-checking functions: :func:`check_agency`,
          :func:`check_calendar`, etc.
          This yields a possibly empty list of items
          [problem type, message, table, rows].
          If ``as_df``, then format the error list as a DataFrame with the
          columns
  
          - ``'type'``: 'error' or 'warning'; 'error' means the GTFS is
            violated; 'warning' means there is a problem but it's not a
            GTFS violation
          - ``'message'``: description of the problem
          - ``'table'``: table in which problem occurs, e.g. 'routes'
          - ``'rows'``: rows of the table's DataFrame where problem occurs
  
          Return early if the feed is missing required tables or required
          columns.
  
      Notes
      -----
      - This function interprets the GTFS liberally, classifying problems
        as warnings rather than errors where the GTFS is unclear.
        For example if a trip_id listed in the trips table is not listed
        in the stop times table (a trip with no stop times),
        then that's a warning and not an error.
      - Timing benchmark: on a 2.80 GHz processor machine with 16 GB of
        memory, this function checks `this 31 MB Southeast Queensland feed
        <http://transitfeeds.com/p/translink/21/20170310>`_
        in 22 seconds, including warnings.
  
      """
      problems = []
  
      # Check for invalid columns and check the required tables
      checkers = [
          "check_agency",
          "check_calendar",
          "check_calendar_dates",
          "check_fare_attributes",
          "check_fare_rules",
          "check_feed_info",
          "check_frequencies",
          "check_routes",
          "check_shapes",
          "check_stops",
          "check_stop_times",
          "check_transfers",
          "check_trips",
      ]
      for checker in checkers:
          problems.extend(
              globals()[checker](feed, include_warnings=include_warnings)
          )
  
      # Check calendar/calendar_dates combo
      if feed.calendar is None and feed.calendar_dates is None:
          problems.append(
              ["error", "Missing both tables", "calendar & calendar_dates", []]
          )
  
      return format_problems(problems, as_df=as_df)