docstr: TODO: docstring
docstr_tok: ["TODO",":","docstring"]
code: def select(cls, tileable_data: TileableData) -> Set[Any]:
      """
      TODO: docstring
      """
      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)
      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)
      return set()
  
file_path: mars/mars/optimization/logical/tileable/column_pruning/self_column_selector.py
imports: from typing import Set, Any, Callable
  from .utils import get_cols_exclude_index
  from .....core import TileableData
  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
label_desc: Use image node_id 2 for calling the SelfColumnSelector obj's underlying member method code with example usage: obj.select(cls, tileable_data) and returns: set, cls, cls