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: If the dtype is categorical, there are two options:
  
  - There are only values in the data buffer.
  - There is a separate dictionary-style encoding for categorical values.
  
  Raises TypeError if the dtype is not categorical
  
  Content of returned dict:
  
      - "is_ordered" : bool, whether the ordering of dictionary
                       indices is semantically meaningful.
      - "is_dictionary" : bool, whether a dictionary-style mapping of
                          categorical values to other objects exists
      - "mapping" : dict, Python-level only (e.g. ``{int: str}``).
                    None if not a dictionary-style categorical.
code: def describe_categorical(self) -> Tuple[bool, bool, Dict[int, Any]]:
      """
      If the dtype is categorical, there are two options:
  
      - There are only values in the data buffer.
      - There is a separate dictionary-style encoding for categorical values.
  
      Raises TypeError if the dtype is not categorical
  
      Content of returned dict:
  
          - "is_ordered" : bool, whether the ordering of dictionary
                           indices is semantically meaningful.
          - "is_dictionary" : bool, whether a dictionary-style mapping of
                              categorical values to other objects exists
          - "mapping" : dict, Python-level only (e.g. ``{int: str}``).
                        None if not a dictionary-style categorical.
      """
      if not self.dtype[0] == _DtypeKind.CATEGORICAL:
          raise TypeError(
              "`describe_categorical only works on "
              "a column with categorical dtype!"
          )
      categ_col = cast(cudf.core.column.CategoricalColumn, self._col)
      ordered = bool(categ_col.dtype.ordered)
      is_dictionary = True
      # NOTE: this shows the children approach is better, transforming
      # `categories` to a "mapping" dict is inefficient
      categories = categ_col.categories
      mapping = {
          ix: val for ix, val in enumerate(categories.values_host)
      }
      return ordered, is_dictionary, mapping
  
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 6 for calling the _CuDFColumn obj's underlying member method code with example usage: obj.describe_categorical() and returns: ordered,  is_dictionary,  mapping