class_docstr: CSV Function-Wrapper Class
  Reads CSV data from disk to produce a partition (given a key).
class_docstr_tok: ["CSV","Function-Wrapper","Class","Reads","CSV","data","from","disk","to","produce","a","partition","(","given","a","key",")","."]
code: def __call__(self, part):
      # Part will be a 3-element tuple
      block, path, is_first, is_last = part
  
      # Construct `path_info`
      if path is not None:
          path_info = (
              self.colname,
              path,
              sorted(list(self.head[self.colname].cat.categories)),
          )
      else:
          path_info = None
  
      # Deal with arguments that are special
      # for the first block of each file
      write_header = False
      rest_kwargs = self.kwargs.copy()
      if not is_first:
          if rest_kwargs.get("names", None) is None:
              write_header = True
          rest_kwargs.pop("skiprows", None)
          if rest_kwargs.get("header", 0) is not None:
              rest_kwargs.pop("header", None)
      if not is_last:
          rest_kwargs.pop("skipfooter", None)
  
      # Deal with column projection
      columns = self.full_columns
      project_after_read = False
      if self._columns is not None:
          if self.kwargs:
              # To be safe, if any kwargs are defined, avoid
              # changing `usecols` here. Instead, we can just
              # select columns after the read
              project_after_read = True
          else:
              columns = self._columns
              rest_kwargs["usecols"] = columns
  
      # Call `pandas_read_text`
      df = pandas_read_text(
          self.reader,
          block,
          self.header,
          rest_kwargs,
          self.dtypes,
          columns,
          write_header,
          self.enforce,
          path_info,
      )
      if project_after_read:
          return df[self.columns]
      return df
  
imports: from __future__ import annotations
  import os
  from collections.abc import Mapping
  from io import BytesIO
  from warnings import catch_warnings, simplefilter, warn
  import numpy
  import pandas
  from fsspec.compression import compr
  from fsspec.core import get_fs_token_paths
  from fsspec.core import open
  from fsspec.core import open_files
  from fsspec.utils import infer_compression
  from pandas.api.types import CategoricalDtype, is_datetime64_any_dtype, is_float_dtype, is_integer_dtype, is_object_dtype
  from dask.base import tokenize
  from dask.bytes import read_bytes
  from dask.core import flatten
  from dask.dataframe.backends import dataframe_creation_dispatch
  from dask.dataframe.io.io import from_map
  from dask.dataframe.io.utils import DataFrameIOFunction
  from dask.dataframe.utils import clear_known_categories
  from dask.delayed import delayed
  from dask.utils import asciitable, parse_bytes
  from dask.dataframe.core import _Frame
label_desc: Use image node_id 4 for calling the CSVFunctionWrapper obj's underlying member method code with example usage: obj.__call__(part) and returns: df, df