class_docstr: A column object, with only the methods and properties required by the
  interchange protocol defined.
  
  A column can contain one or more chunks. Each chunk can contain up to three
  buffers - a data buffer, a mask buffer (depending on null representation),
  and an offsets buffer (if variable-size binary; e.g., variable-length
  strings).
  
  Note: this Column object can only be produced by ``__dataframe__``, so
        doesn't need its own version or ``__column__`` protocol.
class_docstr_tok: ["A","column","object",",","with","only","the","methods","and","properties","required","by","the","interchange","protocol","defined",".","A","column","can","contain","one","or","more","chunks",".","Each","chunk","can","contain","up","to","three","buffers","-","a","data","buffer",",","a","mask","buffer","(","depending","on","null","representation",")",",","and","an","offsets","buffer","(","if","variable-size","binary",";","e.g.",",","variable-length","strings",")",".","Note",":","this","Column","object","can","only","be","produced","by","``","__dataframe__","``",",","so","does","n't","need","its","own","version","or","``","__column__","``","protocol","."]
docstr: Return the buffer containing the data and
         the buffer's associated dtype.
code: def _get_data_buffer(
      self,
  ) -> Tuple[_CuDFBuffer, ProtoDtype]:
      """
      Return the buffer containing the data and
             the buffer's associated dtype.
      """
      if self.dtype[0] in (
          _DtypeKind.INT,
          _DtypeKind.UINT,
          _DtypeKind.FLOAT,
          _DtypeKind.BOOL,
      ):
          col_data = self._col
          dtype = self.dtype
  
      elif self.dtype[0] == _DtypeKind.CATEGORICAL:
          col_data = cast(
              cudf.core.column.CategoricalColumn, self._col
          ).codes
          dtype = self._dtype_from_cudfdtype(col_data.dtype)
  
      elif self.dtype[0] == _DtypeKind.STRING:
          col_data = self._col.children[1]
          dtype = self._dtype_from_cudfdtype(col_data.dtype)
  
      else:
          raise NotImplementedError(
              f"Data type {self._col.dtype} not handled yet"
          )
      assert (col_data is not None) and (col_data.data is not None), " "
      f"col_data(.data) should not be None when dtype = {dtype}"
      buffer = _CuDFBuffer(
          col_data.data, col_data.dtype, allow_copy=self._allow_copy
      )
  
      return buffer, dtype
  
imports: import enum
  from collections import abc
  from typing import Any, Dict, Iterable, Mapping, Optional, Sequence, Tuple, cast
  import cupy
  import numpy
  from numba.cuda import as_cuda_array
  import rmm
  import cudf
  from cudf.core.buffer import Buffer, as_buffer
  from cudf.core.column import as_column, build_categorical_column, build_column
label_desc: Use image node_id 15 for calling the _CuDFColumn obj's underlying member method code with example usage: obj._get_data_buffer() and returns: buffer,  dtype