class_docstr: MultiInterface allows wrapping around a list of tabular datasets
  including dataframes, the columnar dictionary format or 2D tabular
  NumPy arrays. Using the split method the list of tabular data can
  be split into individual datasets.
  
  The interface makes the data appear a list of tabular datasets as
  a single dataset. The interface may be used to represent geometries
  so the behavior depends on the type of geometry being represented.
class_docstr_tok: ["MultiInterface","allows","wrapping","around","a","list","of","tabular","datasets","including","dataframes",",","the","columnar","dictionary","format","or","2D","tabular","NumPy","arrays",".","Using","the","split","method","the","list","of","tabular","data","can","be","split","into","individual","datasets",".","The","interface","makes","the","data","appear","a","list","of","tabular","datasets","as","a","single","dataset",".","The","interface","may","be","used","to","represent","geometries","so","the","behavior","depends","on","the","type","of","geometry","being","represented","."]
code: def init(cls, eltype, data, kdims, vdims):
      from ...element import Path, Polygons
  
      new_data = []
      dims = {"kdims": eltype.kdims, "vdims": eltype.vdims}
      if kdims is not None:
          dims["kdims"] = kdims
      if vdims is not None:
          dims["vdims"] = vdims
  
      if (
          isinstance(data, list)
          and len(data)
          and all(
              isinstance(d, tuple) and all(util.isscalar(v) for v in d)
              for d in data
          )
      ):
          data = [data]
      elif not isinstance(data, list):
          interface = [
              Interface.interfaces.get(st).applies(data)
              for st in cls.subtypes
              if st in Interface.interfaces
          ]
          if (interface or isinstance(data, tuple)) and issubclass(
              eltype, Path
          ):
              data = [data]
          else:
              raise ValueError(
                  "MultiInterface data must be a list of tabular data types."
              )
      prev_interface, prev_dims = None, None
      for d in data:
          datatype = cls.subtypes
          if isinstance(d, dict):
              if Polygons._hole_key in d:
                  datatype = [
                      dt
                      for dt in datatype
                      if hasattr(
                          Interface.interfaces.get(dt), "has_holes"
                      )
                  ]
              geom_type = d.get("geom_type")
              if (
                  geom_type is not None
                  and geom_type not in cls.geom_types
              ):
                  raise DataError(
                      f"Geometry type '{geom_type}' not recognized, "
                      f"must be one of {cls.geom_types}."
                  )
              else:
                  datatype = [
                      dt
                      for dt in datatype
                      if hasattr(
                          Interface.interfaces.get(dt), "geom_type"
                      )
                  ]
          d, interface, dims, _ = Interface.initialize(
              eltype, d, kdims, vdims, datatype=datatype
          )
          if prev_interface:
              if prev_interface != interface:
                  raise DataError(
                      "MultiInterface subpaths must all have matching datatype.",
                      cls,
                  )
              if dims["kdims"] != prev_dims["kdims"]:
                  raise DataError(
                      "MultiInterface subpaths must all have matching kdims.",
                      cls,
                  )
              if dims["vdims"] != prev_dims["vdims"]:
                  raise DataError(
                      "MultiInterface subpaths must all have matching vdims.",
                      cls,
                  )
          new_data.append(d)
          prev_interface, prev_dims = interface, dims
      return new_data, dims, {}
  
imports: import numpy
  from ..None import util
  from ..element import Element
  from ..ndmapping import NdMapping, item_check, sorted_context
  from .dictionary import DictInterface
  from .interface import DataError, Interface
label_desc: Use image node_id 1 for calling the MultiInterface obj's underlying member method code with example usage: obj.init(cls, eltype, data, kdims, vdims) and returns: new_data,  dims,  dict