text: from plotly.basedatatypes import BaseTraceHierarchyType
  import copy
  
  
  class Hoverlabel(BaseTraceHierarchyType):
  
      # bgcolor
      # -------
      @property
      def bgcolor(self):
          """
          Sets the background color of the hover labels for this trace
      
          The 'bgcolor' property is a color and may be specified as:
            - A hex string (e.g. '#ff0000')
            - An rgb/rgba string (e.g. 'rgb(255,0,0)')
            - An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
            - An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
            - A named CSS color:
                  aliceblue, antiquewhite, aqua, aquamarine, azure,
                  beige, bisque, black, blanchedalmond, blue,
                  blueviolet, brown, burlywood, cadetblue,
                  chartreuse, chocolate, coral, cornflowerblue,
                  cornsilk, crimson, cyan, darkblue, darkcyan,
                  darkgoldenrod, darkgray, darkgrey, darkgreen,
                  darkkhaki, darkmagenta, darkolivegreen, darkorange,
                  darkorchid, darkred, darksalmon, darkseagreen,
                  darkslateblue, darkslategray, darkslategrey,
                  darkturquoise, darkviolet, deeppink, deepskyblue,
                  dimgray, dimgrey, dodgerblue, firebrick,
                  floralwhite, forestgreen, fuchsia, gainsboro,
                  ghostwhite, gold, goldenrod, gray, grey, green,
                  greenyellow, honeydew, hotpink, indianred, indigo,
                  ivory, khaki, lavender, lavenderblush, lawngreen,
                  lemonchiffon, lightblue, lightcoral, lightcyan,
                  lightgoldenrodyellow, lightgray, lightgrey,
                  lightgreen, lightpink, lightsalmon, lightseagreen,
                  lightskyblue, lightslategray, lightslategrey,
                  lightsteelblue, lightyellow, lime, limegreen,
                  linen, magenta, maroon, mediumaquamarine,
                  mediumblue, mediumorchid, mediumpurple,
                  mediumseagreen, mediumslateblue, mediumspringgreen,
                  mediumturquoise, mediumvioletred, midnightblue,
                  mintcream, mistyrose, moccasin, navajowhite, navy,
                  oldlace, olive, olivedrab, orange, orangered,
                  orchid, palegoldenrod, palegreen, paleturquoise,
                  palevioletred, papayawhip, peachpuff, peru, pink,
                  plum, powderblue, purple, red, rosybrown,
                  royalblue, saddlebrown, salmon, sandybrown,
                  seagreen, seashell, sienna, silver, skyblue,
                  slateblue, slategray, slategrey, snow, springgreen,
                  steelblue, tan, teal, thistle, tomato, turquoise,
                  violet, wheat, white, whitesmoke, yellow,
                  yellowgreen
            - A list or array of any of the above
  
          Returns
          -------
          str|numpy.ndarray
          """
          return self['bgcolor']
  
      @bgcolor.setter
      def bgcolor(self, val):
          self['bgcolor'] = val
  
      # bgcolorsrc
      # ----------
      @property
      def bgcolorsrc(self):
          """
          Sets the source reference on plot.ly for  bgcolor .
      
          The 'bgcolorsrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self['bgcolorsrc']
  
      @bgcolorsrc.setter
      def bgcolorsrc(self, val):
          self['bgcolorsrc'] = val
  
      # bordercolor
      # -----------
      @property
      def bordercolor(self):
          """
          Sets the border color of the hover labels for this trace.
      
          The 'bordercolor' property is a color and may be specified as:
            - A hex string (e.g. '#ff0000')
            - An rgb/rgba string (e.g. 'rgb(255,0,0)')
            - An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
            - An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
            - A named CSS color:
                  aliceblue, antiquewhite, aqua, aquamarine, azure,
                  beige, bisque, black, blanchedalmond, blue,
                  blueviolet, brown, burlywood, cadetblue,
                  chartreuse, chocolate, coral, cornflowerblue,
                  cornsilk, crimson, cyan, darkblue, darkcyan,
                  darkgoldenrod, darkgray, darkgrey, darkgreen,
                  darkkhaki, darkmagenta, darkolivegreen, darkorange,
                  darkorchid, darkred, darksalmon, darkseagreen,
                  darkslateblue, darkslategray, darkslategrey,
                  darkturquoise, darkviolet, deeppink, deepskyblue,
                  dimgray, dimgrey, dodgerblue, firebrick,
                  floralwhite, forestgreen, fuchsia, gainsboro,
                  ghostwhite, gold, goldenrod, gray, grey, green,
                  greenyellow, honeydew, hotpink, indianred, indigo,
                  ivory, khaki, lavender, lavenderblush, lawngreen,
                  lemonchiffon, lightblue, lightcoral, lightcyan,
                  lightgoldenrodyellow, lightgray, lightgrey,
                  lightgreen, lightpink, lightsalmon, lightseagreen,
                  lightskyblue, lightslategray, lightslategrey,
                  lightsteelblue, lightyellow, lime, limegreen,
                  linen, magenta, maroon, mediumaquamarine,
                  mediumblue, mediumorchid, mediumpurple,
                  mediumseagreen, mediumslateblue, mediumspringgreen,
                  mediumturquoise, mediumvioletred, midnightblue,
                  mintcream, mistyrose, moccasin, navajowhite, navy,
                  oldlace, olive, olivedrab, orange, orangered,
                  orchid, palegoldenrod, palegreen, paleturquoise,
                  palevioletred, papayawhip, peachpuff, peru, pink,
                  plum, powderblue, purple, red, rosybrown,
                  royalblue, saddlebrown, salmon, sandybrown,
                  seagreen, seashell, sienna, silver, skyblue,
                  slateblue, slategray, slategrey, snow, springgreen,
                  steelblue, tan, teal, thistle, tomato, turquoise,
                  violet, wheat, white, whitesmoke, yellow,
                  yellowgreen
            - A list or array of any of the above
  
          Returns
          -------
          str|numpy.ndarray
          """
          return self['bordercolor']
  
      @bordercolor.setter
      def bordercolor(self, val):
          self['bordercolor'] = val
  
      # bordercolorsrc
      # --------------
      @property
      def bordercolorsrc(self):
          """
          Sets the source reference on plot.ly for  bordercolor .
      
          The 'bordercolorsrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self['bordercolorsrc']
  
      @bordercolorsrc.setter
      def bordercolorsrc(self, val):
          self['bordercolorsrc'] = val
  
      # font
      # ----
      @property
      def font(self):
          """
          Sets the font used in hover labels.
      
          The 'font' property is an instance of Font
          that may be specified as:
            - An instance of plotly.graph_objs.mesh3d.hoverlabel.Font
            - A dict of string/value properties that will be passed
              to the Font constructor
      
              Supported dict properties:
                  
                  color
      
                  colorsrc
                      Sets the source reference on plot.ly for  color
                      .
                  family
                      HTML font family - the typeface that will be
                      applied by the web browser. The web browser
                      will only be able to apply a font if it is
                      available on the system which it operates.
                      Provide multiple font families, separated by
                      commas, to indicate the preference in which to
                      apply fonts if they aren't available on the
                      system. The plotly service (at https://plot.ly
                      or on-premise) generates images on a server,
                      where only a select number of fonts are
                      installed and supported. These include *Arial*,
                      *Balto*, *Courier New*, *Droid Sans*,, *Droid
                      Serif*, *Droid Sans Mono*, *Gravitas One*, *Old
                      Standard TT*, *Open Sans*, *Overpass*, *PT Sans
                      Narrow*, *Raleway*, *Times New Roman*.
                  familysrc
                      Sets the source reference on plot.ly for
                      family .
                  size
      
                  sizesrc
                      Sets the source reference on plot.ly for  size
                      .
  
          Returns
          -------
          plotly.graph_objs.mesh3d.hoverlabel.Font
          """
          return self['font']
  
      @font.setter
      def font(self, val):
          self['font'] = val
  
      # namelength
      # ----------
      @property
      def namelength(self):
          """
          Sets the length (in number of characters) of the trace name in
          the hover labels for this trace. -1 shows the whole name
          regardless of length. 0-3 shows the first 0-3 characters, and
          an integer >3 will show the whole name if it is less than that
          many characters, but if it is longer, will truncate to
          `namelength - 3` characters and add an ellipsis.
      
          The 'namelength' property is a integer and may be specified as:
            - An int (or float that will be cast to an int)
              in the interval [-1, 9223372036854775807]
            - A tuple, list, or one-dimensional numpy array of the above
  
          Returns
          -------
          int|numpy.ndarray
          """
          return self['namelength']
  
      @namelength.setter
      def namelength(self, val):
          self['namelength'] = val
  
      # namelengthsrc
      # -------------
      @property
      def namelengthsrc(self):
          """
          Sets the source reference on plot.ly for  namelength .
      
          The 'namelengthsrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self['namelengthsrc']
  
      @namelengthsrc.setter
      def namelengthsrc(self, val):
          self['namelengthsrc'] = val
  
      # property parent name
      # --------------------
      @property
      def _parent_path_str(self):
          return 'mesh3d'
  
      # Self properties description
      # ---------------------------
      @property
      def _prop_descriptions(self):
          return """\
          bgcolor
              Sets the background color of the hover labels for this
              trace
          bgcolorsrc
              Sets the source reference on plot.ly for  bgcolor .
          bordercolor
              Sets the border color of the hover labels for this
              trace.
          bordercolorsrc
              Sets the source reference on plot.ly for  bordercolor .
          font
              Sets the font used in hover labels.
          namelength
              Sets the length (in number of characters) of the trace
              name in the hover labels for this trace. -1 shows the
              whole name regardless of length. 0-3 shows the first
              0-3 characters, and an integer >3 will show the whole
              name if it is less than that many characters, but if it
              is longer, will truncate to `namelength - 3` characters
              and add an ellipsis.
          namelengthsrc
              Sets the source reference on plot.ly for  namelength .
          """
  
      def __init__(
          self,
          arg=None,
          bgcolor=None,
          bgcolorsrc=None,
          bordercolor=None,
          bordercolorsrc=None,
          font=None,
          namelength=None,
          namelengthsrc=None,
          **kwargs
      ):
          """
          Construct a new Hoverlabel object
          
          Parameters
          ----------
          arg
              dict of properties compatible with this constructor or
              an instance of plotly.graph_objs.mesh3d.Hoverlabel
          bgcolor
              Sets the background color of the hover labels for this
              trace
          bgcolorsrc
              Sets the source reference on plot.ly for  bgcolor .
          bordercolor
              Sets the border color of the hover labels for this
              trace.
          bordercolorsrc
              Sets the source reference on plot.ly for  bordercolor .
          font
              Sets the font used in hover labels.
          namelength
              Sets the length (in number of characters) of the trace
              name in the hover labels for this trace. -1 shows the
              whole name regardless of length. 0-3 shows the first
              0-3 characters, and an integer >3 will show the whole
              name if it is less than that many characters, but if it
              is longer, will truncate to `namelength - 3` characters
              and add an ellipsis.
          namelengthsrc
              Sets the source reference on plot.ly for  namelength .
  
          Returns
          -------
          Hoverlabel
          """
          super(Hoverlabel, self).__init__('hoverlabel')
  
          # Validate arg
          # ------------
          if arg is None:
              arg = {}
          elif isinstance(arg, self.__class__):
              arg = arg.to_plotly_json()
          elif isinstance(arg, dict):
              arg = copy.copy(arg)
          else:
              raise ValueError(
                  """\
  The first argument to the plotly.graph_objs.mesh3d.Hoverlabel 
  constructor must be a dict or 
  an instance of plotly.graph_objs.mesh3d.Hoverlabel"""
              )
  
          # Import validators
          # -----------------
          from plotly.validators.mesh3d import (hoverlabel as v_hoverlabel)
  
          # Initialize validators
          # ---------------------
          self._validators['bgcolor'] = v_hoverlabel.BgcolorValidator()
          self._validators['bgcolorsrc'] = v_hoverlabel.BgcolorsrcValidator()
          self._validators['bordercolor'] = v_hoverlabel.BordercolorValidator()
          self._validators['bordercolorsrc'
                          ] = v_hoverlabel.BordercolorsrcValidator()
          self._validators['font'] = v_hoverlabel.FontValidator()
          self._validators['namelength'] = v_hoverlabel.NamelengthValidator()
          self._validators['namelengthsrc'
                          ] = v_hoverlabel.NamelengthsrcValidator()
  
          # Populate data dict with properties
          # ----------------------------------
          _v = arg.pop('bgcolor', None)
          self.bgcolor = bgcolor if bgcolor is not None else _v
          _v = arg.pop('bgcolorsrc', None)
          self.bgcolorsrc = bgcolorsrc if bgcolorsrc is not None else _v
          _v = arg.pop('bordercolor', None)
          self.bordercolor = bordercolor if bordercolor is not None else _v
          _v = arg.pop('bordercolorsrc', None)
          self.bordercolorsrc = bordercolorsrc if bordercolorsrc is not None else _v
          _v = arg.pop('font', None)
          self.font = font if font is not None else _v
          _v = arg.pop('namelength', None)
          self.namelength = namelength if namelength is not None else _v
          _v = arg.pop('namelengthsrc', None)
          self.namelengthsrc = namelengthsrc if namelengthsrc is not None else _v
  
          # Process unknown kwargs
          # ----------------------
          self._process_kwargs(**dict(arg, **kwargs))
  