class_docstr: Convert data from a columnar representation like Pandas and Numpy into values appropriate for
  element_data.py types.
  
  Args:
      name (str): the name of the argument for error messages
      default_type (hashable): the default type to use for data without a type
      type_column (hashable, optional): the name of the type column, if one is being used
      column_defaults (dict of hashable to any): any default values for columns (using names before renaming!)
      selected_columns (dict of hashable to hashable): renamings for columns, mapping original name to new name
      dtype (str or numpy dtype): the data type to use for the feature matrices
      transform_columns (dict of hashable to callable): column transformations, maps column name to transform
class_docstr_tok: ["Convert","data","from","a","columnar","representation","like","Pandas","and","Numpy","into","values","appropriate","for","element_data.py","types",".","Args",":","name","(","str",")",":","the","name","of","the","argument","for","error","messages","default_type","(","hashable",")",":","the","default","type","to","use","for","data","without","a","type","type_column","(","hashable",",","optional",")",":","the","name","of","the","type","column",",","if","one","is","being","used","column_defaults","(","dict","of","hashable","to","any",")",":","any","default","values","for","columns","(","using","names","before","renaming","!",")","selected_columns","(","dict","of","hashable","to","hashable",")",":","renamings","for","columns",",","mapping","original","name","to","new","name","dtype","(","str","or","numpy","dtype",")",":","the","data","type","to","use","for","the","feature","matrices","transform_columns","(","dict","of","hashable","to","callable",")",":","column","transformations",",","maps","column","name","to","transform"]
code: def convert(self, elements):
      if self.type_column is not None:
          return self._convert_with_type_column(elements)
  
      if isinstance(elements, (pd.DataFrame, IndexedArray, np.ndarray)):
          elements = {self.default_type: elements}
  
      if not isinstance(elements, dict):
          raise TypeError(
              f"{self.name()}: expected dict, found {type(elements).__name__}"
          )
  
      singles = {
          type_name: self._convert_single(type_name, data)
          for type_name, data in elements.items()
      }
  
      (
          ids,
          columns,
          type_info,
      ) = self._ids_columns_and_type_info_from_singles(singles)
      return (ids, columns, type_info)
  
imports: from collections import defaultdict, namedtuple
  from typing import Iterable
  import warnings
  import numpy
  import pandas
  from ..globalvar import SOURCE, TARGET, WEIGHT, TYPE_ATTR_NAME
  from .element_data import NodeData, EdgeData
  from .indexed_array import IndexedArray
  from .validation import comma_sep, require_dataframe_has_columns
  from .utils import is_real_iterable, zero_sized_array, smart_array_concatenate, smart_array_index
label_desc: Use image node_id 8 for calling the ColumnarConverter obj's underlying member method code with example usage: obj.convert(elements) and returns: ids,  columns,  type_info, self