class_docstr: The Polygons element represents one or more polygon geometries
  with associated scalar values. Each polygon geometry may be split
  into sub-geometries on NaN-values and may be associated with
  scalar values. In analogy to GEOS geometry types a Polygons
  element is a collection of Polygon and MultiPolygon
  geometries. Polygon geometries are defined as a set of coordinates
  describing the exterior bounding ring and any number of interior
  holes.
  
  Like all other elements a Polygons element may be defined through
  an extensible list of interfaces. Natively HoloViews provides the
  MultiInterface which allows representing paths as lists of regular
  columnar data objects including arrays, dataframes and
  dictionaries of column arrays and scalars.
  
  The canonical representation is a list of dictionaries storing the
  x- and y-coordinates, a list-of-lists of arrays representing the
  holes, along with any other values:
  
      [{'x': 1d-array, 'y': 1d-array, 'holes': list-of-lists-of-arrays, 'value': scalar}, ...]
  
  Alternatively Polygons also supports a single columnar
  data-structure to specify an individual polygon:
  
      {'x': 1d-array, 'y': 1d-array, 'holes': list-of-lists-of-arrays, 'value': scalar}
  
  The list-of-lists format of the holes corresponds to the potential
  for each coordinate array to be split into a multi-geometry
  through NaN-separators. Each sub-geometry separated by the NaNs
  therefore has an unambiguous mapping to a list of holes. If a
  (multi-)polygon has no holes, the 'holes' key may be omitted.
  
  Any value dimensions stored on a Polygons geometry must be scalar,
  just like the Contours element. Since not all formats allow
  storing scalar values as actual scalars arrays which are the same
  length as the coordinates but have only one unique value are also
  considered scalar.
  
  The easiest way of accessing the individual geometries is using
  the `Polygons.split` method, which returns each path geometry as a
  separate entity, while the other methods assume a flattened
  representation where all paths are separated by NaN values.
class_docstr_tok: ["The","Polygons","element","represents","one","or","more","polygon","geometries","with","associated","scalar","values",".","Each","polygon","geometry","may","be","split","into","sub-geometries","on","NaN-values","and","may","be","associated","with","scalar","values",".","In","analogy","to","GEOS","geometry","types","a","Polygons","element","is","a","collection","of","Polygon","and","MultiPolygon","geometries",".","Polygon","geometries","are","defined","as","a","set","of","coordinates","describing","the","exterior","bounding","ring","and","any","number","of","interior","holes",".","Like","all","other","elements","a","Polygons","element","may","be","defined","through","an","extensible","list","of","interfaces",".","Natively","HoloViews","provides","the","MultiInterface","which","allows","representing","paths","as","lists","of","regular","columnar","data","objects","including","arrays",",","dataframes","and","dictionaries","of","column","arrays","and","scalars",".","The","canonical","representation","is","a","list","of","dictionaries","storing","the","x-","and","y-coordinates",",","a","list-of-lists","of","arrays","representing","the","holes",",","along","with","any","other","values",":","[","{","'","x","'",":","1d-array",",","'","y","'",":","1d-array",",","'holes","'",":","list-of-lists-of-arrays",",","'value","'",":","scalar","}",",","...","]","Alternatively","Polygons","also","supports","a","single","columnar","data-structure","to","specify","an","individual","polygon",":","{","'","x","'",":","1d-array",",","'","y","'",":","1d-array",",","'holes","'",":","list-of-lists-of-arrays",",","'value","'",":","scalar","}","The","list-of-lists","format","of","the","holes","corresponds","to","the","potential","for","each","coordinate","array","to","be","split","into","a","multi-geometry","through","NaN-separators",".","Each","sub-geometry","separated","by","the","NaNs","therefore","has","an","unambiguous","mapping","to","a","list","of","holes",".","If","a","(","multi-",")","polygon","has","no","holes",",","the","'holes","'","key","may","be","omitted",".","Any","value","dimensions","stored","on","a","Polygons","geometry","must","be","scalar",",","just","like","the","Contours","element",".","Since","not","all","formats","allow","storing","scalar","values","as","actual","scalars","arrays","which","are","the","same","length","as","the","coordinates","but","have","only","one","unique","value","are","also","considered","scalar",".","The","easiest","way","of","accessing","the","individual","geometries","is","using","the","`","Polygons.split","`","method",",","which","returns","each","path","geometry","as","a","separate","entity",",","while","the","other","methods","assume","a","flattened","representation","where","all","paths","are","separated","by","NaN","values","."]
docstr: Detects whether any polygon in the Polygons element defines
  holes. Useful to avoid expanding Polygons unless necessary.
docstr_tok: ["Detects","whether","any","polygon","in","the","Polygons","element","defines","holes",".","Useful","to","avoid","expanding","Polygons","unless","necessary","."]
code: def has_holes(self):
      """
      Detects whether any polygon in the Polygons element defines
      holes. Useful to avoid expanding Polygons unless necessary.
      """
      return self.interface.has_holes(self)
  
imports: import numpy
  import param
  from ..core import Dataset
  from ..core.data import MultiInterface
  from ..core.dimension import Dimension
  from .geom import Geometry
  from .selection import SelectionPolyExpr
label_desc: Use image node_id 1 for calling the Polygons obj's underlying member method code with example usage: obj.has_holes() and returns: self