class_docstr: Parameters
  ----------
  data : mapping
      Mapping of keys to column values.
  multiindex : bool, optional
      Whether tuple keys represent a hierarchical
      index with multiple "levels" (default=False).
  level_names : tuple, optional
      Tuple containing names for each of the levels.
      For a non-hierarchical index, a tuple of size 1
      may be passe.
  rangeindex : bool, optional
      Whether the keys should be returned as a RangeIndex
      in `to_pandas_index` (default=False).
  label_dtype : Dtype, optional
      What dtype should be returned in `to_pandas_index`
      (default=None).
class_docstr_tok: ["Parameters","--","--","--","--","--","data",":","mapping","Mapping","of","keys","to","column","values",".","multiindex",":","bool",",","optional","Whether","tuple","keys","represent","a","hierarchical","index","with","multiple","``","levels","''","(","default=False",")",".","level_names",":","tuple",",","optional","Tuple","containing","names","for","each","of","the","levels",".","For","a","non-hierarchical","index",",","a","tuple","of","size","1","may","be","passe",".","rangeindex",":","bool",",","optional","Whether","the","keys","should","be","returned","as","a","RangeIndex","in","`","to_pandas_index","`","(","default=False",")",".","label_dtype",":","Dtype",",","optional","What","dtype","should","be","returned","in","`","to_pandas_index","`","(","default=None",")","."]
code: def __init__(
      self,
      data: Union[abc.MutableMapping, ColumnAccessor, None] = None,
      multiindex: bool = False,
      level_names=None,
      rangeindex: bool = False,
      label_dtype: Dtype | None = None,
  ):
      self.rangeindex = rangeindex
      self.label_dtype = label_dtype
      if data is None:
          data = {}
      # TODO: we should validate the keys of `data`
      if isinstance(data, ColumnAccessor):
          multiindex = multiindex or data.multiindex
          level_names = level_names or data.level_names
          self._data = data._data
          self.multiindex = multiindex
          self._level_names = level_names
          self.rangeindex = data.rangeindex
          self.label_dtype = data.label_dtype
      else:
          # This code path is performance-critical for copies and should be
          # modified with care.
          self._data = {}
          if data:
              data = dict(data)
              # Faster than next(iter(data.values()))
              column_length = len(data[next(iter(data))])
              for k, v in data.items():
                  # Much faster to avoid the function call if possible; the
                  # extra isinstance is negligible if we do have to make a
                  # column from something else.
                  if not isinstance(v, column.ColumnBase):
                      v = column.as_column(v)
                  if len(v) != column_length:
                      raise ValueError(
                          "All columns must be of equal length"
                      )
                  self._data[k] = v
  
          self.multiindex = multiindex
          self._level_names = level_names
  
imports: from __future__ import annotations
  import itertools
  import warnings
  from collections import abc
  from functools import cached_property, reduce
  from typing import TYPE_CHECKING, Any, Callable, Dict, Mapping, Optional, Tuple, Union
  import numpy
  import pandas
  from packaging.version import Version
  from pandas.api.types import is_bool
  from typing_extensions import Self
  import cudf
  from cudf.core import column
label_desc: Use image node_id 1 to create a new ColumnAccessor object from inherited base classes: abc with example: obj = ColumnAccessor(data, multiindex, level_names, rangeindex, label_dtype)