class_docstr: ORC Function-Wrapper Class
  Reads ORC data from disk to produce a partition.
class_docstr_tok: ["ORC","Function-Wrapper","Class","Reads","ORC","data","from","disk","to","produce","a","partition","."]
docstr: Return a new ORCFunctionWrapper object with
  a sub-column projection.
docstr_tok: ["Return","a","new","ORCFunctionWrapper","object","with","a","sub-column","projection","."]
code: def project_columns(self, columns):
      """Return a new ORCFunctionWrapper object with
      a sub-column projection.
      """
      if columns == self.columns:
          return self
      func = copy.deepcopy(self)
      func._columns = columns
      return func
  
imports: from __future__ import annotations
  import copy
  from typing import TYPE_CHECKING, Literal
  from fsspec.core import get_fs_token_paths
  from fsspec.utils import stringify_path
  from dask.base import compute_as_if_collection, tokenize
  from dask.dataframe.backends import dataframe_creation_dispatch
  from dask.dataframe.core import DataFrame, Scalar
  from dask.dataframe.io.io import from_map
  from dask.dataframe.io.orc.utils import ORCEngine
  from dask.dataframe.io.utils import DataFrameIOFunction
  from dask.highlevelgraph import HighLevelGraph
  from dask.utils import apply
label_desc: Use image node_id 3 for calling the ORCFunctionWrapper obj's underlying member method code with example usage: obj.project_columns(columns) and returns: func, self