docstr: Get the column pruning results of given tileable data.
  
  Parameters
  ----------
  tileable_data : TileableData
      The tileable data to be processed.
  required_cols: List[Any]
      Names of columns required by the successors of the given tileable data. If required_cols is None, all the
      input columns will be selected.
  Returns
  -------
  Dict[TileableData: List[Any]]
      A dictionary that represents the column pruning results. For every key-value pairs in the dictionary, the
      key is a predecessor of the given tileable data, and the value is a list of column names that the given
      tileable data depends on.
docstr_tok: ["Get","the","column","pruning","results","of","given","tileable","data",".","Parameters","--","--","--","--","--","tileable_data",":","TileableData","The","tileable","data","to","be","processed",".","required_cols",":","List","[","Any","]","Names","of","columns","required","by","the","successors","of","the","given","tileable","data",".","If","required_cols","is","None",",","all","the","input","columns","will","be","selected",".","Returns","--","--","--","-","Dict","[","TileableData",":","List","[","Any","]","]","A","dictionary","that","represents","the","column","pruning","results",".","For","every","key-value","pairs","in","the","dictionary",",","the","key","is","a","predecessor","of","the","given","tileable","data",",","and","the","value","is","a","list","of","column","names","that","the","given","tileable","data","depends","on","."]
code: def select(
      cls, tileable_data: TileableData, required_cols: Set[Any]
  ) -> Dict[TileableData, Set[Any]]:
      """
      Get the column pruning results of given tileable data.
  
      Parameters
      ----------
      tileable_data : TileableData
          The tileable data to be processed.
      required_cols: List[Any]
          Names of columns required by the successors of the given tileable data. If required_cols is None, all the
          input columns will be selected.
      Returns
      -------
      Dict[TileableData: List[Any]]
          A dictionary that represents the column pruning results. For every key-value pairs in the dictionary, the
          key is a predecessor of the given tileable data, and the value is a list of column names that the given
          tileable data depends on.
      """
      if required_cols is None:
          return cls.select_all_input_columns(tileable_data, set())
  
      op_type = type(tileable_data.op)
      if op_type in cls._OP_TO_SELECT_FUNCTION:
          return cls._OP_TO_SELECT_FUNCTION[op_type](
              tileable_data, required_cols
          )
      for op_cls in op_type.__mro__:
          if op_cls in cls._OP_TO_SELECT_FUNCTION:
              cls._OP_TO_SELECT_FUNCTION[
                  op_type
              ] = cls._OP_TO_SELECT_FUNCTION[op_cls]
              return cls._OP_TO_SELECT_FUNCTION[op_cls](
                  tileable_data, required_cols
              )
      return cls.select_all_input_columns(tileable_data, required_cols)
  
imports: from collections import defaultdict
  from typing import Callable, Dict, Any, Set
  from .....core import TileableData
  from .....dataframe import NamedAgg
  from .....dataframe.arithmetic.core import DataFrameBinOp, DataFrameUnaryOp
  from .....dataframe.core import BaseDataFrameData, BaseSeriesData
  from .....dataframe.groupby.aggregation import DataFrameGroupByAgg
  from .....dataframe.indexing.getitem import DataFrameIndex
  from .....dataframe.indexing.setitem import DataFrameSetitem
  from .....dataframe.merge import DataFrameMerge
  from .....typing import OperandType
  from .utils import get_cols_exclude_index
label_desc: Use image node_id 5 for calling the InputColumnSelector obj's underlying member method code with example usage: obj.select(cls, tileable_data, required_cols) and returns: cls, cls, cls, cls