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: Dtype description as a tuple
  ``(kind, bit-width, format string, endianness)``
  
  Kind :
  
      - INT = 0
      - UINT = 1
      - FLOAT = 2
      - BOOL = 20
      - STRING = 21   # UTF-8
      - DATETIME = 22
      - CATEGORICAL = 23
  
  Bit-width : the number of bits as an integer
  Format string : data type description format string in Apache Arrow C
                  Data Interface format.
  Endianness : current only native endianness (``=``) is supported
  
  Notes
  -----
  - Kind specifiers are aligned with DLPack where possible
   (hence the jump to 20, leave enough room for future extension)
  - Masks must be specified as boolean with either bit width 1
   (for bit masks) or 8 (for byte masks).
  - Dtype width in bits was preferred over bytes
  - Endianness isn't too useful, but included now in case
    in the future we need to support non-native endianness
  - Went with Apache Arrow format strings over NumPy format strings
    because they're more complete from a dataframe perspective
  - Format strings are mostly useful for datetime specification,
    and for categoricals.
  - For categoricals, the format string describes the type of the
    categorical in the data buffer. In case of a separate encoding
    of the categorical (e.g. an integer to string mapping),
    this can be derived from ``self.describe_categorical``.
  - Data types not included: complex, Arrow-style null,
    binary, decimal, and nested (list, struct, map, union) dtypes.
code: def dtype(self) -> ProtoDtype:
      """
      Dtype description as a tuple
      ``(kind, bit-width, format string, endianness)``
  
      Kind :
  
          - INT = 0
          - UINT = 1
          - FLOAT = 2
          - BOOL = 20
          - STRING = 21   # UTF-8
          - DATETIME = 22
          - CATEGORICAL = 23
  
      Bit-width : the number of bits as an integer
      Format string : data type description format string in Apache Arrow C
                      Data Interface format.
      Endianness : current only native endianness (``=``) is supported
  
      Notes
      -----
      - Kind specifiers are aligned with DLPack where possible
       (hence the jump to 20, leave enough room for future extension)
      - Masks must be specified as boolean with either bit width 1
       (for bit masks) or 8 (for byte masks).
      - Dtype width in bits was preferred over bytes
      - Endianness isn't too useful, but included now in case
        in the future we need to support non-native endianness
      - Went with Apache Arrow format strings over NumPy format strings
        because they're more complete from a dataframe perspective
      - Format strings are mostly useful for datetime specification,
        and for categoricals.
      - For categoricals, the format string describes the type of the
        categorical in the data buffer. In case of a separate encoding
        of the categorical (e.g. an integer to string mapping),
        this can be derived from ``self.describe_categorical``.
      - Data types not included: complex, Arrow-style null,
        binary, decimal, and nested (list, struct, map, union) dtypes.
      """
      dtype = self._col.dtype
  
      # For now, assume that, if the column dtype is 'O' (i.e., `object`),
      # then we have an array of strings
      if (
          not isinstance(dtype, cudf.CategoricalDtype)
          and dtype.kind == "O"
      ):
          return (_DtypeKind.STRING, 8, "u", "=")
  
      return self._dtype_from_cudfdtype(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 4 for calling the _CuDFColumn obj's underlying member method code with example usage: obj.dtype() and returns: self, _DtypeKind,  int,  str,  str