code: def read_table(
      source, columns=None, memory_map=False, use_threads=True
  ):
      """
      Read a pyarrow.Table from Feather format
  
      Parameters
      ----------
      source : str file path, or file-like object
          You can use MemoryMappedFile as source, for explicitly use memory map.
      columns : sequence, optional
          Only read a specific set of columns. If not provided, all columns are
          read.
      memory_map : boolean, default False
          Use memory mapping when opening file on disk, when source is a str
      use_threads : bool, default True
          Whether to parallelize reading using multiple threads.
  
      Returns
      -------
      table : pyarrow.Table
          The contents of the Feather file as a pyarrow.Table
      """
      reader = _feather.FeatherReader(
          source, use_memory_map=memory_map, use_threads=use_threads
      )
  
      if columns is None:
          return reader.read()
  
      column_types = [type(column) for column in columns]
      if all(map(lambda t: t == int, column_types)):
          table = reader.read_indices(columns)
      elif all(map(lambda t: t == str, column_types)):
          table = reader.read_names(columns)
      else:
          column_type_names = [t.__name__ for t in column_types]
          raise TypeError(
              "Columns must be indices or names. "
              "Got columns {} of types {}".format(
                  columns, column_type_names
              )
          )
  
      # Feather v1 already respects the column selection
      if reader.version < 3:
          return table
      # Feather v2 reads with sorted / deduplicated selection
      elif sorted(set(columns)) == columns:
          return table
      else:
          # follow exact order / selection of names
          return table.select(columns)
  
file_path: arrow/python/pyarrow/feather.py
imports: import os
  from pyarrow.pandas_compat import _pandas_api
  from pyarrow.lib import Codec, Table, concat_tables, schema
  import pyarrow.lib
  from pyarrow import _feather
  from pyarrow._feather import FeatherError
label_desc: Use image node_id 4 for calling a global function with example usage: read_table(source, columns, memory_map, use_threads) and returns: reader, table, table, table