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_with_type_column(self, data):
      # we've got a type column, so there's no dictionaries or separate dataframes. We just need
      # to make sure things are arranged right, i.e. nodes of each type are contiguous, and
      # 'range(...)' objects describing each one.
      ids, columns, features = self._convert_single(None, data)
  
      # the column we see in `known` is after being selected/renamed
      type_column_name = self.selected_columns[self.type_column]
  
      # the shared data doesn't use the type column; that info is encoded in `type_ranges` below
      type_column = columns.pop(type_column_name)
  
      sorting = np.argsort(type_column)
  
      # arrange everything to be sorted by type
      ids = ids[sorting]
      type_column = type_column[sorting]
  
      # For many graphs these end up with values for which actually indexing would be suboptimal
      # (require allocating a new array, in particular), e.g. default edge weights in columns, or
      # features.size == 0.
      columns = {
          name: smart_array_index(array, sorting)
          for name, array in columns.items()
      }
      features = smart_array_index(features, sorting)
  
      # deduce the type ranges based on the first index of each of the known values
      types, first_occurance = np.unique(type_column, return_index=True)
      last_occurance = np.append(first_occurance[1:], len(type_column))
  
      type_info = [
          (type_name, features[start:stop, :])
          for type_name, start, stop in zip(
              types, first_occurance, last_occurance
          )
      ]
  
      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 7 for calling the ColumnarConverter obj's underlying member method code with example usage: obj._convert_with_type_column(data) and returns: ids,  columns,  type_info