code: def convert_nodes(data, *, name, default_type, dtype) -> NodeData:
      converter = ColumnarConverter(
          name,
          default_type,
          type_column=None,
          column_defaults={},
          selected_columns={},
          transform_columns={},
          dtype=dtype,
      )
      ids, columns, type_info = converter.convert(data)
      assert len(columns) == 0
      return NodeData(ids, 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 1 for calling a global function with example usage: convert_nodes(data) and returns: NodeData