code: def init(cls, eltype, data, keys, values):
      params = eltype.param.objects()
      index = params["kdims"]
      columns = params["vdims"]
  
      if isinstance(index.bounds[1], int):
          ndim = min([index.bounds[1], len(index.default)])
      else:
          ndim = None
      nvdim = (
          columns.bounds[1]
          if isinstance(columns.bounds[1], int)
          else None
      )
      if keys and values is None:
          values = [c for c in data.columns if c not in keys]
      elif values and keys is None:
          keys = [c for c in data.columns if c not in values][:ndim]
      elif keys is None:
          keys = list(data.columns[:ndim])
          if values is None:
              values = [
                  key
                  for key in data.columns[
                      ndim : ((ndim + nvdim) if nvdim else None)
                  ]
                  if key not in keys
              ]
      elif keys == [] and values is None:
          values = list(data.columns[: nvdim if nvdim else None])
      return data, dict(kdims=keys, vdims=values), {}
  
imports: import sys
  from collections.abc import Iterable
  from functools import lru_cache
  import numpy
  from packaging.version import Version
  from ..None import util
  from ..element import Element
  from ..ndmapping import NdMapping, item_check, sorted_context
  from .None import pandas
  from .interface import Interface
  from .util import cached
label_desc: Use image node_id 5 for calling the IbisInterface obj's underlying member method code with example usage: obj.init(cls, eltype, data, keys, values) and returns: data,  dict,  dict