text: from plotly.basedatatypes import BaseTraceType as _BaseTraceType
  import copy as _copy
  
  
  class Splom(_BaseTraceType):
  
      # class properties
      # --------------------
      _parent_path_str = ""
      _path_str = "splom"
      _valid_props = {
          "customdata",
          "customdatasrc",
          "diagonal",
          "dimensiondefaults",
          "dimensions",
          "hoverinfo",
          "hoverinfosrc",
          "hoverlabel",
          "hovertemplate",
          "hovertemplatesrc",
          "hovertext",
          "hovertextsrc",
          "ids",
          "idssrc",
          "legendgroup",
          "legendgrouptitle",
          "legendrank",
          "marker",
          "meta",
          "metasrc",
          "name",
          "opacity",
          "selected",
          "selectedpoints",
          "showlegend",
          "showlowerhalf",
          "showupperhalf",
          "stream",
          "text",
          "textsrc",
          "type",
          "uid",
          "uirevision",
          "unselected",
          "visible",
          "xaxes",
          "xhoverformat",
          "yaxes",
          "yhoverformat",
      }
  
      # customdata
      # ----------
      @property
      def customdata(self):
          """
          Assigns extra data each datum. This may be useful when
          listening to hover, click and selection events. Note that,
          "scatter" traces also appends customdata items in the markers
          DOM elements
      
          The 'customdata' property is an array that may be specified as a tuple,
          list, numpy array, or pandas Series
  
          Returns
          -------
          numpy.ndarray
          """
          return self["customdata"]
  
      @customdata.setter
      def customdata(self, val):
          self["customdata"] = val
  
      # customdatasrc
      # -------------
      @property
      def customdatasrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  customdata
          .
      
          The 'customdatasrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["customdatasrc"]
  
      @customdatasrc.setter
      def customdatasrc(self, val):
          self["customdatasrc"] = val
  
      # diagonal
      # --------
      @property
      def diagonal(self):
          """
          The 'diagonal' property is an instance of Diagonal
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Diagonal`
            - A dict of string/value properties that will be passed
              to the Diagonal constructor
      
              Supported dict properties:
                  
                  visible
                      Determines whether or not subplots on the
                      diagonal are displayed.
  
          Returns
          -------
          plotly.graph_objs.splom.Diagonal
          """
          return self["diagonal"]
  
      @diagonal.setter
      def diagonal(self, val):
          self["diagonal"] = val
  
      # dimensions
      # ----------
      @property
      def dimensions(self):
          """
          The 'dimensions' property is a tuple of instances of
          Dimension that may be specified as:
            - A list or tuple of instances of plotly.graph_objs.splom.Dimension
            - A list or tuple of dicts of string/value properties that
              will be passed to the Dimension constructor
      
              Supported dict properties:
                  
                  axis
                      :class:`plotly.graph_objects.splom.dimension.Ax
                      is` instance or dict with compatible properties
                  label
                      Sets the label corresponding to this splom
                      dimension.
                  name
                      When used in a template, named items are
                      created in the output figure in addition to any
                      items the figure already has in this array. You
                      can modify these items in the output figure by
                      making your own item with `templateitemname`
                      matching this `name` alongside your
                      modifications (including `visible: false` or
                      `enabled: false` to hide it). Has no effect
                      outside of a template.
                  templateitemname
                      Used to refer to a named item in this array in
                      the template. Named items from the template
                      will be created even without a matching item in
                      the input figure, but you can modify one by
                      making an item with `templateitemname` matching
                      its `name`, alongside your modifications
                      (including `visible: false` or `enabled: false`
                      to hide it). If there is no template or no
                      matching item, this item will be hidden unless
                      you explicitly show it with `visible: true`.
                  values
                      Sets the dimension values to be plotted.
                  valuessrc
                      Sets the source reference on Chart Studio Cloud
                      for  values .
                  visible
                      Determines whether or not this dimension is
                      shown on the graph. Note that even visible
                      false dimension contribute to the default grid
                      generate by this splom trace.
  
          Returns
          -------
          tuple[plotly.graph_objs.splom.Dimension]
          """
          return self["dimensions"]
  
      @dimensions.setter
      def dimensions(self, val):
          self["dimensions"] = val
  
      # dimensiondefaults
      # -----------------
      @property
      def dimensiondefaults(self):
          """
          When used in a template (as
          layout.template.data.splom.dimensiondefaults), sets the default
          property values to use for elements of splom.dimensions
      
          The 'dimensiondefaults' property is an instance of Dimension
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Dimension`
            - A dict of string/value properties that will be passed
              to the Dimension constructor
      
              Supported dict properties:
  
          Returns
          -------
          plotly.graph_objs.splom.Dimension
          """
          return self["dimensiondefaults"]
  
      @dimensiondefaults.setter
      def dimensiondefaults(self, val):
          self["dimensiondefaults"] = val
  
      # hoverinfo
      # ---------
      @property
      def hoverinfo(self):
          """
          Determines which trace information appear on hover. If `none`
          or `skip` are set, no information is displayed upon hovering.
          But, if `none` is set, click and hover events are still fired.
      
          The 'hoverinfo' property is a flaglist and may be specified
          as a string containing:
            - Any combination of ['x', 'y', 'z', 'text', 'name'] joined with '+' characters
              (e.g. 'x+y')
              OR exactly one of ['all', 'none', 'skip'] (e.g. 'skip')
            - A list or array of the above
  
          Returns
          -------
          Any|numpy.ndarray
          """
          return self["hoverinfo"]
  
      @hoverinfo.setter
      def hoverinfo(self, val):
          self["hoverinfo"] = val
  
      # hoverinfosrc
      # ------------
      @property
      def hoverinfosrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  hoverinfo
          .
      
          The 'hoverinfosrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["hoverinfosrc"]
  
      @hoverinfosrc.setter
      def hoverinfosrc(self, val):
          self["hoverinfosrc"] = val
  
      # hoverlabel
      # ----------
      @property
      def hoverlabel(self):
          """
          The 'hoverlabel' property is an instance of Hoverlabel
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Hoverlabel`
            - A dict of string/value properties that will be passed
              to the Hoverlabel constructor
      
              Supported dict properties:
                  
                  align
                      Sets the horizontal alignment of the text
                      content within hover label box. Has an effect
                      only if the hover label text spans more two or
                      more lines
                  alignsrc
                      Sets the source reference on Chart Studio Cloud
                      for  align .
                  bgcolor
                      Sets the background color of the hover labels
                      for this trace
                  bgcolorsrc
                      Sets the source reference on Chart Studio Cloud
                      for  bgcolor .
                  bordercolor
                      Sets the border color of the hover labels for
                      this trace.
                  bordercolorsrc
                      Sets the source reference on Chart Studio Cloud
                      for  bordercolor .
                  font
                      Sets the font used in hover labels.
                  namelength
                      Sets the default length (in number of
                      characters) of the trace name in the hover
                      labels for all traces. -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 Chart Studio Cloud
                      for  namelength .
  
          Returns
          -------
          plotly.graph_objs.splom.Hoverlabel
          """
          return self["hoverlabel"]
  
      @hoverlabel.setter
      def hoverlabel(self, val):
          self["hoverlabel"] = val
  
      # hovertemplate
      # -------------
      @property
      def hovertemplate(self):
          """
          Template string used for rendering the information that appear
          on hover box. Note that this will override `hoverinfo`.
          Variables are inserted using %{variable}, for example "y: %{y}"
          as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When
          showing info for several points, "xother" will be added to
          those with different x positions from the first point. An
          underscore before or after "(x|y)other" will add a space on
          that side, only when this field is shown. Numbers are formatted
          using d3-format's syntax %{variable:d3-format}, for example
          "Price: %{y:$.2f}". https://github.com/d3/d3-3.x-api-
          reference/blob/master/Formatting.md#d3_format for details on
          the formatting syntax. Dates are formatted using d3-time-
          format's syntax %{variable|d3-time-format}, for example "Day:
          %{2019-01-01|%A}". https://github.com/d3/d3-time-
          format#locale_format for details on the date formatting syntax.
          The variables available in `hovertemplate` are the ones emitted
          as event data described at this link
          https://plotly.com/javascript/plotlyjs-events/#event-data.
          Additionally, every attributes that can be specified per-point
          (the ones that are `arrayOk: true`) are available.  Anything
          contained in tag `<extra>` is displayed in the secondary box,
          for example "<extra>{fullData.name}</extra>". To hide the
          secondary box completely, use an empty tag `<extra></extra>`.
      
          The 'hovertemplate' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
            - A tuple, list, or one-dimensional numpy array of the above
  
          Returns
          -------
          str|numpy.ndarray
          """
          return self["hovertemplate"]
  
      @hovertemplate.setter
      def hovertemplate(self, val):
          self["hovertemplate"] = val
  
      # hovertemplatesrc
      # ----------------
      @property
      def hovertemplatesrc(self):
          """
          Sets the source reference on Chart Studio Cloud for
          hovertemplate .
      
          The 'hovertemplatesrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["hovertemplatesrc"]
  
      @hovertemplatesrc.setter
      def hovertemplatesrc(self, val):
          self["hovertemplatesrc"] = val
  
      # hovertext
      # ---------
      @property
      def hovertext(self):
          """
          Same as `text`.
      
          The 'hovertext' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
            - A tuple, list, or one-dimensional numpy array of the above
  
          Returns
          -------
          str|numpy.ndarray
          """
          return self["hovertext"]
  
      @hovertext.setter
      def hovertext(self, val):
          self["hovertext"] = val
  
      # hovertextsrc
      # ------------
      @property
      def hovertextsrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  hovertext
          .
      
          The 'hovertextsrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["hovertextsrc"]
  
      @hovertextsrc.setter
      def hovertextsrc(self, val):
          self["hovertextsrc"] = val
  
      # ids
      # ---
      @property
      def ids(self):
          """
          Assigns id labels to each datum. These ids for object constancy
          of data points during animation. Should be an array of strings,
          not numbers or any other type.
      
          The 'ids' property is an array that may be specified as a tuple,
          list, numpy array, or pandas Series
  
          Returns
          -------
          numpy.ndarray
          """
          return self["ids"]
  
      @ids.setter
      def ids(self, val):
          self["ids"] = val
  
      # idssrc
      # ------
      @property
      def idssrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  ids .
      
          The 'idssrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["idssrc"]
  
      @idssrc.setter
      def idssrc(self, val):
          self["idssrc"] = val
  
      # legendgroup
      # -----------
      @property
      def legendgroup(self):
          """
          Sets the legend group for this trace. Traces part of the same
          legend group hide/show at the same time when toggling legend
          items.
      
          The 'legendgroup' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
  
          Returns
          -------
          str
          """
          return self["legendgroup"]
  
      @legendgroup.setter
      def legendgroup(self, val):
          self["legendgroup"] = val
  
      # legendgrouptitle
      # ----------------
      @property
      def legendgrouptitle(self):
          """
          The 'legendgrouptitle' property is an instance of Legendgrouptitle
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Legendgrouptitle`
            - A dict of string/value properties that will be passed
              to the Legendgrouptitle constructor
      
              Supported dict properties:
                  
                  font
                      Sets this legend group's title font.
                  text
                      Sets the title of the legend group.
  
          Returns
          -------
          plotly.graph_objs.splom.Legendgrouptitle
          """
          return self["legendgrouptitle"]
  
      @legendgrouptitle.setter
      def legendgrouptitle(self, val):
          self["legendgrouptitle"] = val
  
      # legendrank
      # ----------
      @property
      def legendrank(self):
          """
          Sets the legend rank for this trace. Items and groups with
          smaller ranks are presented on top/left side while with
          `*reversed* `legend.traceorder` they are on bottom/right side.
          The default legendrank is 1000, so that you can use ranks less
          than 1000 to place certain items before all unranked items, and
          ranks greater than 1000 to go after all unranked items.
      
          The 'legendrank' property is a number and may be specified as:
            - An int or float
  
          Returns
          -------
          int|float
          """
          return self["legendrank"]
  
      @legendrank.setter
      def legendrank(self, val):
          self["legendrank"] = val
  
      # marker
      # ------
      @property
      def marker(self):
          """
          The 'marker' property is an instance of Marker
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Marker`
            - A dict of string/value properties that will be passed
              to the Marker constructor
      
              Supported dict properties:
                  
                  autocolorscale
                      Determines whether the colorscale is a default
                      palette (`autocolorscale: true`) or the palette
                      determined by `marker.colorscale`. Has an
                      effect only if in `marker.color`is set to a
                      numerical array. In case `colorscale` is
                      unspecified or `autocolorscale` is true, the
                      default  palette will be chosen according to
                      whether numbers in the `color` array are all
                      positive, all negative or mixed.
                  cauto
                      Determines whether or not the color domain is
                      computed with respect to the input data (here
                      in `marker.color`) or the bounds set in
                      `marker.cmin` and `marker.cmax`  Has an effect
                      only if in `marker.color`is set to a numerical
                      array. Defaults to `false` when `marker.cmin`
                      and `marker.cmax` are set by the user.
                  cmax
                      Sets the upper bound of the color domain. Has
                      an effect only if in `marker.color`is set to a
                      numerical array. Value should have the same
                      units as in `marker.color` and if set,
                      `marker.cmin` must be set as well.
                  cmid
                      Sets the mid-point of the color domain by
                      scaling `marker.cmin` and/or `marker.cmax` to
                      be equidistant to this point. Has an effect
                      only if in `marker.color`is set to a numerical
                      array. Value should have the same units as in
                      `marker.color`. Has no effect when
                      `marker.cauto` is `false`.
                  cmin
                      Sets the lower bound of the color domain. Has
                      an effect only if in `marker.color`is set to a
                      numerical array. Value should have the same
                      units as in `marker.color` and if set,
                      `marker.cmax` must be set as well.
                  color
                      Sets themarkercolor. It accepts either a
                      specific color or an array of numbers that are
                      mapped to the colorscale relative to the max
                      and min values of the array or relative to
                      `marker.cmin` and `marker.cmax` if set.
                  coloraxis
                      Sets a reference to a shared color axis.
                      References to these shared color axes are
                      "coloraxis", "coloraxis2", "coloraxis3", etc.
                      Settings for these shared color axes are set in
                      the layout, under `layout.coloraxis`,
                      `layout.coloraxis2`, etc. Note that multiple
                      color scales can be linked to the same color
                      axis.
                  colorbar
                      :class:`plotly.graph_objects.splom.marker.Color
                      Bar` instance or dict with compatible
                      properties
                  colorscale
                      Sets the colorscale. Has an effect only if in
                      `marker.color`is set to a numerical array. The
                      colorscale must be an array containing arrays
                      mapping a normalized value to an rgb, rgba,
                      hex, hsl, hsv, or named color string. At
                      minimum, a mapping for the lowest (0) and
                      highest (1) values are required. For example,
                      `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`.
                      To control the bounds of the colorscale in
                      color space, use`marker.cmin` and
                      `marker.cmax`. Alternatively, `colorscale` may
                      be a palette name string of the following list:
                      Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Bl
                      ues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,E
                      arth,Electric,Viridis,Cividis.
                  colorsrc
                      Sets the source reference on Chart Studio Cloud
                      for  color .
                  line
                      :class:`plotly.graph_objects.splom.marker.Line`
                      instance or dict with compatible properties
                  opacity
                      Sets the marker opacity.
                  opacitysrc
                      Sets the source reference on Chart Studio Cloud
                      for  opacity .
                  reversescale
                      Reverses the color mapping if true. Has an
                      effect only if in `marker.color`is set to a
                      numerical array. If true, `marker.cmin` will
                      correspond to the last color in the array and
                      `marker.cmax` will correspond to the first
                      color.
                  showscale
                      Determines whether or not a colorbar is
                      displayed for this trace. Has an effect only if
                      in `marker.color`is set to a numerical array.
                  size
                      Sets the marker size (in px).
                  sizemin
                      Has an effect only if `marker.size` is set to a
                      numerical array. Sets the minimum size (in px)
                      of the rendered marker points.
                  sizemode
                      Has an effect only if `marker.size` is set to a
                      numerical array. Sets the rule for which the
                      data in `size` is converted to pixels.
                  sizeref
                      Has an effect only if `marker.size` is set to a
                      numerical array. Sets the scale factor used to
                      determine the rendered size of marker points.
                      Use with `sizemin` and `sizemode`.
                  sizesrc
                      Sets the source reference on Chart Studio Cloud
                      for  size .
                  symbol
                      Sets the marker symbol type. Adding 100 is
                      equivalent to appending "-open" to a symbol
                      name. Adding 200 is equivalent to appending
                      "-dot" to a symbol name. Adding 300 is
                      equivalent to appending "-open-dot" or "dot-
                      open" to a symbol name.
                  symbolsrc
                      Sets the source reference on Chart Studio Cloud
                      for  symbol .
  
          Returns
          -------
          plotly.graph_objs.splom.Marker
          """
          return self["marker"]
  
      @marker.setter
      def marker(self, val):
          self["marker"] = val
  
      # meta
      # ----
      @property
      def meta(self):
          """
          Assigns extra meta information associated with this trace that
          can be used in various text attributes. Attributes such as
          trace `name`, graph, axis and colorbar `title.text`, annotation
          `text` `rangeselector`, `updatemenues` and `sliders` `label`
          text all support `meta`. To access the trace `meta` values in
          an attribute in the same trace, simply use `%{meta[i]}` where
          `i` is the index or key of the `meta` item in question. To
          access trace `meta` in layout attributes, use
          `%{data[n[.meta[i]}` where `i` is the index or key of the
          `meta` and `n` is the trace index.
      
          The 'meta' property accepts values of any type
  
          Returns
          -------
          Any|numpy.ndarray
          """
          return self["meta"]
  
      @meta.setter
      def meta(self, val):
          self["meta"] = val
  
      # metasrc
      # -------
      @property
      def metasrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  meta .
      
          The 'metasrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["metasrc"]
  
      @metasrc.setter
      def metasrc(self, val):
          self["metasrc"] = val
  
      # name
      # ----
      @property
      def name(self):
          """
          Sets the trace name. The trace name appear as the legend item
          and on hover.
      
          The 'name' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
  
          Returns
          -------
          str
          """
          return self["name"]
  
      @name.setter
      def name(self, val):
          self["name"] = val
  
      # opacity
      # -------
      @property
      def opacity(self):
          """
          Sets the opacity of the trace.
      
          The 'opacity' property is a number and may be specified as:
            - An int or float in the interval [0, 1]
  
          Returns
          -------
          int|float
          """
          return self["opacity"]
  
      @opacity.setter
      def opacity(self, val):
          self["opacity"] = val
  
      # selected
      # --------
      @property
      def selected(self):
          """
          The 'selected' property is an instance of Selected
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Selected`
            - A dict of string/value properties that will be passed
              to the Selected constructor
      
              Supported dict properties:
                  
                  marker
                      :class:`plotly.graph_objects.splom.selected.Mar
                      ker` instance or dict with compatible
                      properties
  
          Returns
          -------
          plotly.graph_objs.splom.Selected
          """
          return self["selected"]
  
      @selected.setter
      def selected(self, val):
          self["selected"] = val
  
      # selectedpoints
      # --------------
      @property
      def selectedpoints(self):
          """
          Array containing integer indices of selected points. Has an
          effect only for traces that support selections. Note that an
          empty array means an empty selection where the `unselected` are
          turned on for all points, whereas, any other non-array values
          means no selection all where the `selected` and `unselected`
          styles have no effect.
      
          The 'selectedpoints' property accepts values of any type
  
          Returns
          -------
          Any
          """
          return self["selectedpoints"]
  
      @selectedpoints.setter
      def selectedpoints(self, val):
          self["selectedpoints"] = val
  
      # showlegend
      # ----------
      @property
      def showlegend(self):
          """
          Determines whether or not an item corresponding to this trace
          is shown in the legend.
      
          The 'showlegend' property must be specified as a bool
          (either True, or False)
  
          Returns
          -------
          bool
          """
          return self["showlegend"]
  
      @showlegend.setter
      def showlegend(self, val):
          self["showlegend"] = val
  
      # showlowerhalf
      # -------------
      @property
      def showlowerhalf(self):
          """
          Determines whether or not subplots on the lower half from the
          diagonal are displayed.
      
          The 'showlowerhalf' property must be specified as a bool
          (either True, or False)
  
          Returns
          -------
          bool
          """
          return self["showlowerhalf"]
  
      @showlowerhalf.setter
      def showlowerhalf(self, val):
          self["showlowerhalf"] = val
  
      # showupperhalf
      # -------------
      @property
      def showupperhalf(self):
          """
          Determines whether or not subplots on the upper half from the
          diagonal are displayed.
      
          The 'showupperhalf' property must be specified as a bool
          (either True, or False)
  
          Returns
          -------
          bool
          """
          return self["showupperhalf"]
  
      @showupperhalf.setter
      def showupperhalf(self, val):
          self["showupperhalf"] = val
  
      # stream
      # ------
      @property
      def stream(self):
          """
          The 'stream' property is an instance of Stream
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Stream`
            - A dict of string/value properties that will be passed
              to the Stream constructor
      
              Supported dict properties:
                  
                  maxpoints
                      Sets the maximum number of points to keep on
                      the plots from an incoming stream. If
                      `maxpoints` is set to 50, only the newest 50
                      points will be displayed on the plot.
                  token
                      The stream id number links a data trace on a
                      plot with a stream. See https://chart-
                      studio.plotly.com/settings for more details.
  
          Returns
          -------
          plotly.graph_objs.splom.Stream
          """
          return self["stream"]
  
      @stream.setter
      def stream(self, val):
          self["stream"] = val
  
      # text
      # ----
      @property
      def text(self):
          """
          Sets text elements associated with each (x,y) pair to appear on
          hover. If a single string, the same string appears over all the
          data points. If an array of string, the items are mapped in
          order to the this trace's (x,y) coordinates.
      
          The 'text' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
            - A tuple, list, or one-dimensional numpy array of the above
  
          Returns
          -------
          str|numpy.ndarray
          """
          return self["text"]
  
      @text.setter
      def text(self, val):
          self["text"] = val
  
      # textsrc
      # -------
      @property
      def textsrc(self):
          """
          Sets the source reference on Chart Studio Cloud for  text .
      
          The 'textsrc' property must be specified as a string or
          as a plotly.grid_objs.Column object
  
          Returns
          -------
          str
          """
          return self["textsrc"]
  
      @textsrc.setter
      def textsrc(self, val):
          self["textsrc"] = val
  
      # uid
      # ---
      @property
      def uid(self):
          """
          Assign an id to this trace, Use this to provide object
          constancy between traces during animations and transitions.
      
          The 'uid' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
  
          Returns
          -------
          str
          """
          return self["uid"]
  
      @uid.setter
      def uid(self, val):
          self["uid"] = val
  
      # uirevision
      # ----------
      @property
      def uirevision(self):
          """
          Controls persistence of some user-driven changes to the trace:
          `constraintrange` in `parcoords` traces, as well as some
          `editable: true` modifications such as `name` and
          `colorbar.title`. Defaults to `layout.uirevision`. Note that
          other user-driven trace attribute changes are controlled by
          `layout` attributes: `trace.visible` is controlled by
          `layout.legend.uirevision`, `selectedpoints` is controlled by
          `layout.selectionrevision`, and `colorbar.(x|y)` (accessible
          with `config: {editable: true}`) is controlled by
          `layout.editrevision`. Trace changes are tracked by `uid`,
          which only falls back on trace index if no `uid` is provided.
          So if your app can add/remove traces before the end of the
          `data` array, such that the same trace has a different index,
          you can still preserve user-driven changes if you give each
          trace a `uid` that stays with it as it moves.
      
          The 'uirevision' property accepts values of any type
  
          Returns
          -------
          Any
          """
          return self["uirevision"]
  
      @uirevision.setter
      def uirevision(self, val):
          self["uirevision"] = val
  
      # unselected
      # ----------
      @property
      def unselected(self):
          """
          The 'unselected' property is an instance of Unselected
          that may be specified as:
            - An instance of :class:`plotly.graph_objs.splom.Unselected`
            - A dict of string/value properties that will be passed
              to the Unselected constructor
      
              Supported dict properties:
                  
                  marker
                      :class:`plotly.graph_objects.splom.unselected.M
                      arker` instance or dict with compatible
                      properties
  
          Returns
          -------
          plotly.graph_objs.splom.Unselected
          """
          return self["unselected"]
  
      @unselected.setter
      def unselected(self, val):
          self["unselected"] = val
  
      # visible
      # -------
      @property
      def visible(self):
          """
          Determines whether or not this trace is visible. If
          "legendonly", the trace is not drawn, but can appear as a
          legend item (provided that the legend itself is visible).
      
          The 'visible' property is an enumeration that may be specified as:
            - One of the following enumeration values:
                  [True, False, 'legendonly']
  
          Returns
          -------
          Any
          """
          return self["visible"]
  
      @visible.setter
      def visible(self, val):
          self["visible"] = val
  
      # xaxes
      # -----
      @property
      def xaxes(self):
          """
          Sets the list of x axes corresponding to dimensions of this
          splom trace. By default, a splom will match the first N xaxes
          where N is the number of input dimensions. Note that, in case
          where `diagonal.visible` is false and `showupperhalf` or
          `showlowerhalf` is false, this splom trace will generate one
          less x-axis and one less y-axis.
      
          The 'xaxes' property is an info array that may be specified as:
          * a list of elements where:
            The 'xaxes[i]' property is an identifier of a particular
          subplot, of type 'x', that may be specified as the string 'x'
          optionally followed by an integer >= 1
          (e.g. 'x', 'x1', 'x2', 'x3', etc.)
  
          Returns
          -------
          list
          """
          return self["xaxes"]
  
      @xaxes.setter
      def xaxes(self, val):
          self["xaxes"] = val
  
      # xhoverformat
      # ------------
      @property
      def xhoverformat(self):
          """
          Sets the hover text formatting rulefor `x`  using d3 formatting
          mini-languages which are very similar to those in Python. For
          numbers, see: https://github.com/d3/d3-3.x-api-
          reference/blob/master/Formatting.md#d3_format. And for dates
          see: https://github.com/d3/d3-time-format#locale_format. We add
          two items to d3's date formatter: "%h" for half of the year as
          a decimal number as well as "%{n}f" for fractional seconds with
          n digits. For example, *2016-10-13 09:15:23.456* with
          tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By default
          the values are formatted using `xaxis.hoverformat`.
      
          The 'xhoverformat' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
  
          Returns
          -------
          str
          """
          return self["xhoverformat"]
  
      @xhoverformat.setter
      def xhoverformat(self, val):
          self["xhoverformat"] = val
  
      # yaxes
      # -----
      @property
      def yaxes(self):
          """
          Sets the list of y axes corresponding to dimensions of this
          splom trace. By default, a splom will match the first N yaxes
          where N is the number of input dimensions. Note that, in case
          where `diagonal.visible` is false and `showupperhalf` or
          `showlowerhalf` is false, this splom trace will generate one
          less x-axis and one less y-axis.
      
          The 'yaxes' property is an info array that may be specified as:
          * a list of elements where:
            The 'yaxes[i]' property is an identifier of a particular
          subplot, of type 'y', that may be specified as the string 'y'
          optionally followed by an integer >= 1
          (e.g. 'y', 'y1', 'y2', 'y3', etc.)
  
          Returns
          -------
          list
          """
          return self["yaxes"]
  
      @yaxes.setter
      def yaxes(self, val):
          self["yaxes"] = val
  
      # yhoverformat
      # ------------
      @property
      def yhoverformat(self):
          """
          Sets the hover text formatting rulefor `y`  using d3 formatting
          mini-languages which are very similar to those in Python. For
          numbers, see: https://github.com/d3/d3-3.x-api-
          reference/blob/master/Formatting.md#d3_format. And for dates
          see: https://github.com/d3/d3-time-format#locale_format. We add
          two items to d3's date formatter: "%h" for half of the year as
          a decimal number as well as "%{n}f" for fractional seconds with
          n digits. For example, *2016-10-13 09:15:23.456* with
          tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By default
          the values are formatted using `yaxis.hoverformat`.
      
          The 'yhoverformat' property is a string and must be specified as:
            - A string
            - A number that will be converted to a string
  
          Returns
          -------
          str
          """
          return self["yhoverformat"]
  
      @yhoverformat.setter
      def yhoverformat(self, val):
          self["yhoverformat"] = val
  
      # type
      # ----
      @property
      def type(self):
          return self._props["type"]
  
      # Self properties description
      # ---------------------------
      @property
      def _prop_descriptions(self):
          return """\
          customdata
              Assigns extra data each datum. This may be useful when
              listening to hover, click and selection events. Note
              that, "scatter" traces also appends customdata items in
              the markers DOM elements
          customdatasrc
              Sets the source reference on Chart Studio Cloud for
              customdata .
          diagonal
              :class:`plotly.graph_objects.splom.Diagonal` instance
              or dict with compatible properties
          dimensions
              A tuple of
              :class:`plotly.graph_objects.splom.Dimension` instances
              or dicts with compatible properties
          dimensiondefaults
              When used in a template (as
              layout.template.data.splom.dimensiondefaults), sets the
              default property values to use for elements of
              splom.dimensions
          hoverinfo
              Determines which trace information appear on hover. If
              `none` or `skip` are set, no information is displayed
              upon hovering. But, if `none` is set, click and hover
              events are still fired.
          hoverinfosrc
              Sets the source reference on Chart Studio Cloud for
              hoverinfo .
          hoverlabel
              :class:`plotly.graph_objects.splom.Hoverlabel` instance
              or dict with compatible properties
          hovertemplate
              Template string used for rendering the information that
              appear on hover box. Note that this will override
              `hoverinfo`. Variables are inserted using %{variable},
              for example "y: %{y}" as well as %{xother}, {%_xother},
              {%_xother_}, {%xother_}. When showing info for several
              points, "xother" will be added to those with different
              x positions from the first point. An underscore before
              or after "(x|y)other" will add a space on that side,
              only when this field is shown. Numbers are formatted
              using d3-format's syntax %{variable:d3-format}, for
              example "Price: %{y:$.2f}".
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format for
              details on the formatting syntax. Dates are formatted
              using d3-time-format's syntax %{variable|d3-time-
              format}, for example "Day: %{2019-01-01|%A}".
              https://github.com/d3/d3-time-format#locale_format for
              details on the date formatting syntax. The variables
              available in `hovertemplate` are the ones emitted as
              event data described at this link
              https://plotly.com/javascript/plotlyjs-events/#event-
              data. Additionally, every attributes that can be
              specified per-point (the ones that are `arrayOk: true`)
              are available.  Anything contained in tag `<extra>` is
              displayed in the secondary box, for example
              "<extra>{fullData.name}</extra>". To hide the secondary
              box completely, use an empty tag `<extra></extra>`.
          hovertemplatesrc
              Sets the source reference on Chart Studio Cloud for
              hovertemplate .
          hovertext
              Same as `text`.
          hovertextsrc
              Sets the source reference on Chart Studio Cloud for
              hovertext .
          ids
              Assigns id labels to each datum. These ids for object
              constancy of data points during animation. Should be an
              array of strings, not numbers or any other type.
          idssrc
              Sets the source reference on Chart Studio Cloud for
              ids .
          legendgroup
              Sets the legend group for this trace. Traces part of
              the same legend group hide/show at the same time when
              toggling legend items.
          legendgrouptitle
              :class:`plotly.graph_objects.splom.Legendgrouptitle`
              instance or dict with compatible properties
          legendrank
              Sets the legend rank for this trace. Items and groups
              with smaller ranks are presented on top/left side while
              with `*reversed* `legend.traceorder` they are on
              bottom/right side. The default legendrank is 1000, so
              that you can use ranks less than 1000 to place certain
              items before all unranked items, and ranks greater than
              1000 to go after all unranked items.
          marker
              :class:`plotly.graph_objects.splom.Marker` instance or
              dict with compatible properties
          meta
              Assigns extra meta information associated with this
              trace that can be used in various text attributes.
              Attributes such as trace `name`, graph, axis and
              colorbar `title.text`, annotation `text`
              `rangeselector`, `updatemenues` and `sliders` `label`
              text all support `meta`. To access the trace `meta`
              values in an attribute in the same trace, simply use
              `%{meta[i]}` where `i` is the index or key of the
              `meta` item in question. To access trace `meta` in
              layout attributes, use `%{data[n[.meta[i]}` where `i`
              is the index or key of the `meta` and `n` is the trace
              index.
          metasrc
              Sets the source reference on Chart Studio Cloud for
              meta .
          name
              Sets the trace name. The trace name appear as the
              legend item and on hover.
          opacity
              Sets the opacity of the trace.
          selected
              :class:`plotly.graph_objects.splom.Selected` instance
              or dict with compatible properties
          selectedpoints
              Array containing integer indices of selected points.
              Has an effect only for traces that support selections.
              Note that an empty array means an empty selection where
              the `unselected` are turned on for all points, whereas,
              any other non-array values means no selection all where
              the `selected` and `unselected` styles have no effect.
          showlegend
              Determines whether or not an item corresponding to this
              trace is shown in the legend.
          showlowerhalf
              Determines whether or not subplots on the lower half
              from the diagonal are displayed.
          showupperhalf
              Determines whether or not subplots on the upper half
              from the diagonal are displayed.
          stream
              :class:`plotly.graph_objects.splom.Stream` instance or
              dict with compatible properties
          text
              Sets text elements associated with each (x,y) pair to
              appear on hover. If a single string, the same string
              appears over all the data points. If an array of
              string, the items are mapped in order to the this
              trace's (x,y) coordinates.
          textsrc
              Sets the source reference on Chart Studio Cloud for
              text .
          uid
              Assign an id to this trace, Use this to provide object
              constancy between traces during animations and
              transitions.
          uirevision
              Controls persistence of some user-driven changes to the
              trace: `constraintrange` in `parcoords` traces, as well
              as some `editable: true` modifications such as `name`
              and `colorbar.title`. Defaults to `layout.uirevision`.
              Note that other user-driven trace attribute changes are
              controlled by `layout` attributes: `trace.visible` is
              controlled by `layout.legend.uirevision`,
              `selectedpoints` is controlled by
              `layout.selectionrevision`, and `colorbar.(x|y)`
              (accessible with `config: {editable: true}`) is
              controlled by `layout.editrevision`. Trace changes are
              tracked by `uid`, which only falls back on trace index
              if no `uid` is provided. So if your app can add/remove
              traces before the end of the `data` array, such that
              the same trace has a different index, you can still
              preserve user-driven changes if you give each trace a
              `uid` that stays with it as it moves.
          unselected
              :class:`plotly.graph_objects.splom.Unselected` instance
              or dict with compatible properties
          visible
              Determines whether or not this trace is visible. If
              "legendonly", the trace is not drawn, but can appear as
              a legend item (provided that the legend itself is
              visible).
          xaxes
              Sets the list of x axes corresponding to dimensions of
              this splom trace. By default, a splom will match the
              first N xaxes where N is the number of input
              dimensions. Note that, in case where `diagonal.visible`
              is false and `showupperhalf` or `showlowerhalf` is
              false, this splom trace will generate one less x-axis
              and one less y-axis.
          xhoverformat
              Sets the hover text formatting rulefor `x`  using d3
              formatting mini-languages which are very similar to
              those in Python. For numbers, see:
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format. And for
              dates see: https://github.com/d3/d3-time-
              format#locale_format. We add two items to d3's date
              formatter: "%h" for half of the year as a decimal
              number as well as "%{n}f" for fractional seconds with n
              digits. For example, *2016-10-13 09:15:23.456* with
              tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By
              default the values are formatted using
              `xaxis.hoverformat`.
          yaxes
              Sets the list of y axes corresponding to dimensions of
              this splom trace. By default, a splom will match the
              first N yaxes where N is the number of input
              dimensions. Note that, in case where `diagonal.visible`
              is false and `showupperhalf` or `showlowerhalf` is
              false, this splom trace will generate one less x-axis
              and one less y-axis.
          yhoverformat
              Sets the hover text formatting rulefor `y`  using d3
              formatting mini-languages which are very similar to
              those in Python. For numbers, see:
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format. And for
              dates see: https://github.com/d3/d3-time-
              format#locale_format. We add two items to d3's date
              formatter: "%h" for half of the year as a decimal
              number as well as "%{n}f" for fractional seconds with n
              digits. For example, *2016-10-13 09:15:23.456* with
              tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By
              default the values are formatted using
              `yaxis.hoverformat`.
          """
  
      def __init__(
          self,
          arg=None,
          customdata=None,
          customdatasrc=None,
          diagonal=None,
          dimensions=None,
          dimensiondefaults=None,
          hoverinfo=None,
          hoverinfosrc=None,
          hoverlabel=None,
          hovertemplate=None,
          hovertemplatesrc=None,
          hovertext=None,
          hovertextsrc=None,
          ids=None,
          idssrc=None,
          legendgroup=None,
          legendgrouptitle=None,
          legendrank=None,
          marker=None,
          meta=None,
          metasrc=None,
          name=None,
          opacity=None,
          selected=None,
          selectedpoints=None,
          showlegend=None,
          showlowerhalf=None,
          showupperhalf=None,
          stream=None,
          text=None,
          textsrc=None,
          uid=None,
          uirevision=None,
          unselected=None,
          visible=None,
          xaxes=None,
          xhoverformat=None,
          yaxes=None,
          yhoverformat=None,
          **kwargs
      ):
          """
          Construct a new Splom object
          
          Splom traces generate scatter plot matrix visualizations. Each
          splom `dimensions` items correspond to a generated axis. Values
          for each of those dimensions are set in `dimensions[i].values`.
          Splom traces support all `scattergl` marker style attributes.
          Specify `layout.grid` attributes and/or layout x-axis and
          y-axis attributes for more control over the axis positioning
          and style.
  
          Parameters
          ----------
          arg
              dict of properties compatible with this constructor or
              an instance of :class:`plotly.graph_objs.Splom`
          customdata
              Assigns extra data each datum. This may be useful when
              listening to hover, click and selection events. Note
              that, "scatter" traces also appends customdata items in
              the markers DOM elements
          customdatasrc
              Sets the source reference on Chart Studio Cloud for
              customdata .
          diagonal
              :class:`plotly.graph_objects.splom.Diagonal` instance
              or dict with compatible properties
          dimensions
              A tuple of
              :class:`plotly.graph_objects.splom.Dimension` instances
              or dicts with compatible properties
          dimensiondefaults
              When used in a template (as
              layout.template.data.splom.dimensiondefaults), sets the
              default property values to use for elements of
              splom.dimensions
          hoverinfo
              Determines which trace information appear on hover. If
              `none` or `skip` are set, no information is displayed
              upon hovering. But, if `none` is set, click and hover
              events are still fired.
          hoverinfosrc
              Sets the source reference on Chart Studio Cloud for
              hoverinfo .
          hoverlabel
              :class:`plotly.graph_objects.splom.Hoverlabel` instance
              or dict with compatible properties
          hovertemplate
              Template string used for rendering the information that
              appear on hover box. Note that this will override
              `hoverinfo`. Variables are inserted using %{variable},
              for example "y: %{y}" as well as %{xother}, {%_xother},
              {%_xother_}, {%xother_}. When showing info for several
              points, "xother" will be added to those with different
              x positions from the first point. An underscore before
              or after "(x|y)other" will add a space on that side,
              only when this field is shown. Numbers are formatted
              using d3-format's syntax %{variable:d3-format}, for
              example "Price: %{y:$.2f}".
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format for
              details on the formatting syntax. Dates are formatted
              using d3-time-format's syntax %{variable|d3-time-
              format}, for example "Day: %{2019-01-01|%A}".
              https://github.com/d3/d3-time-format#locale_format for
              details on the date formatting syntax. The variables
              available in `hovertemplate` are the ones emitted as
              event data described at this link
              https://plotly.com/javascript/plotlyjs-events/#event-
              data. Additionally, every attributes that can be
              specified per-point (the ones that are `arrayOk: true`)
              are available.  Anything contained in tag `<extra>` is
              displayed in the secondary box, for example
              "<extra>{fullData.name}</extra>". To hide the secondary
              box completely, use an empty tag `<extra></extra>`.
          hovertemplatesrc
              Sets the source reference on Chart Studio Cloud for
              hovertemplate .
          hovertext
              Same as `text`.
          hovertextsrc
              Sets the source reference on Chart Studio Cloud for
              hovertext .
          ids
              Assigns id labels to each datum. These ids for object
              constancy of data points during animation. Should be an
              array of strings, not numbers or any other type.
          idssrc
              Sets the source reference on Chart Studio Cloud for
              ids .
          legendgroup
              Sets the legend group for this trace. Traces part of
              the same legend group hide/show at the same time when
              toggling legend items.
          legendgrouptitle
              :class:`plotly.graph_objects.splom.Legendgrouptitle`
              instance or dict with compatible properties
          legendrank
              Sets the legend rank for this trace. Items and groups
              with smaller ranks are presented on top/left side while
              with `*reversed* `legend.traceorder` they are on
              bottom/right side. The default legendrank is 1000, so
              that you can use ranks less than 1000 to place certain
              items before all unranked items, and ranks greater than
              1000 to go after all unranked items.
          marker
              :class:`plotly.graph_objects.splom.Marker` instance or
              dict with compatible properties
          meta
              Assigns extra meta information associated with this
              trace that can be used in various text attributes.
              Attributes such as trace `name`, graph, axis and
              colorbar `title.text`, annotation `text`
              `rangeselector`, `updatemenues` and `sliders` `label`
              text all support `meta`. To access the trace `meta`
              values in an attribute in the same trace, simply use
              `%{meta[i]}` where `i` is the index or key of the
              `meta` item in question. To access trace `meta` in
              layout attributes, use `%{data[n[.meta[i]}` where `i`
              is the index or key of the `meta` and `n` is the trace
              index.
          metasrc
              Sets the source reference on Chart Studio Cloud for
              meta .
          name
              Sets the trace name. The trace name appear as the
              legend item and on hover.
          opacity
              Sets the opacity of the trace.
          selected
              :class:`plotly.graph_objects.splom.Selected` instance
              or dict with compatible properties
          selectedpoints
              Array containing integer indices of selected points.
              Has an effect only for traces that support selections.
              Note that an empty array means an empty selection where
              the `unselected` are turned on for all points, whereas,
              any other non-array values means no selection all where
              the `selected` and `unselected` styles have no effect.
          showlegend
              Determines whether or not an item corresponding to this
              trace is shown in the legend.
          showlowerhalf
              Determines whether or not subplots on the lower half
              from the diagonal are displayed.
          showupperhalf
              Determines whether or not subplots on the upper half
              from the diagonal are displayed.
          stream
              :class:`plotly.graph_objects.splom.Stream` instance or
              dict with compatible properties
          text
              Sets text elements associated with each (x,y) pair to
              appear on hover. If a single string, the same string
              appears over all the data points. If an array of
              string, the items are mapped in order to the this
              trace's (x,y) coordinates.
          textsrc
              Sets the source reference on Chart Studio Cloud for
              text .
          uid
              Assign an id to this trace, Use this to provide object
              constancy between traces during animations and
              transitions.
          uirevision
              Controls persistence of some user-driven changes to the
              trace: `constraintrange` in `parcoords` traces, as well
              as some `editable: true` modifications such as `name`
              and `colorbar.title`. Defaults to `layout.uirevision`.
              Note that other user-driven trace attribute changes are
              controlled by `layout` attributes: `trace.visible` is
              controlled by `layout.legend.uirevision`,
              `selectedpoints` is controlled by
              `layout.selectionrevision`, and `colorbar.(x|y)`
              (accessible with `config: {editable: true}`) is
              controlled by `layout.editrevision`. Trace changes are
              tracked by `uid`, which only falls back on trace index
              if no `uid` is provided. So if your app can add/remove
              traces before the end of the `data` array, such that
              the same trace has a different index, you can still
              preserve user-driven changes if you give each trace a
              `uid` that stays with it as it moves.
          unselected
              :class:`plotly.graph_objects.splom.Unselected` instance
              or dict with compatible properties
          visible
              Determines whether or not this trace is visible. If
              "legendonly", the trace is not drawn, but can appear as
              a legend item (provided that the legend itself is
              visible).
          xaxes
              Sets the list of x axes corresponding to dimensions of
              this splom trace. By default, a splom will match the
              first N xaxes where N is the number of input
              dimensions. Note that, in case where `diagonal.visible`
              is false and `showupperhalf` or `showlowerhalf` is
              false, this splom trace will generate one less x-axis
              and one less y-axis.
          xhoverformat
              Sets the hover text formatting rulefor `x`  using d3
              formatting mini-languages which are very similar to
              those in Python. For numbers, see:
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format. And for
              dates see: https://github.com/d3/d3-time-
              format#locale_format. We add two items to d3's date
              formatter: "%h" for half of the year as a decimal
              number as well as "%{n}f" for fractional seconds with n
              digits. For example, *2016-10-13 09:15:23.456* with
              tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By
              default the values are formatted using
              `xaxis.hoverformat`.
          yaxes
              Sets the list of y axes corresponding to dimensions of
              this splom trace. By default, a splom will match the
              first N yaxes where N is the number of input
              dimensions. Note that, in case where `diagonal.visible`
              is false and `showupperhalf` or `showlowerhalf` is
              false, this splom trace will generate one less x-axis
              and one less y-axis.
          yhoverformat
              Sets the hover text formatting rulefor `y`  using d3
              formatting mini-languages which are very similar to
              those in Python. For numbers, see:
              https://github.com/d3/d3-3.x-api-
              reference/blob/master/Formatting.md#d3_format. And for
              dates see: https://github.com/d3/d3-time-
              format#locale_format. We add two items to d3's date
              formatter: "%h" for half of the year as a decimal
              number as well as "%{n}f" for fractional seconds with n
              digits. For example, *2016-10-13 09:15:23.456* with
              tickformat "%H~%M~%S.%2f" would display *09~15~23.46*By
              default the values are formatted using
              `yaxis.hoverformat`.
  
          Returns
          -------
          Splom
          """
          super(Splom, self).__init__("splom")
  
          if "_parent" in kwargs:
              self._parent = kwargs["_parent"]
              return
  
          # 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.Splom 
  constructor must be a dict or 
  an instance of :class:`plotly.graph_objs.Splom`"""
              )
  
          # Handle skip_invalid
          # -------------------
          self._skip_invalid = kwargs.pop("skip_invalid", False)
          self._validate = kwargs.pop("_validate", True)
  
          # Populate data dict with properties
          # ----------------------------------
          _v = arg.pop("customdata", None)
          _v = customdata if customdata is not None else _v
          if _v is not None:
              self["customdata"] = _v
          _v = arg.pop("customdatasrc", None)
          _v = customdatasrc if customdatasrc is not None else _v
          if _v is not None:
              self["customdatasrc"] = _v
          _v = arg.pop("diagonal", None)
          _v = diagonal if diagonal is not None else _v
          if _v is not None:
              self["diagonal"] = _v
          _v = arg.pop("dimensions", None)
          _v = dimensions if dimensions is not None else _v
          if _v is not None:
              self["dimensions"] = _v
          _v = arg.pop("dimensiondefaults", None)
          _v = dimensiondefaults if dimensiondefaults is not None else _v
          if _v is not None:
              self["dimensiondefaults"] = _v
          _v = arg.pop("hoverinfo", None)
          _v = hoverinfo if hoverinfo is not None else _v
          if _v is not None:
              self["hoverinfo"] = _v
          _v = arg.pop("hoverinfosrc", None)
          _v = hoverinfosrc if hoverinfosrc is not None else _v
          if _v is not None:
              self["hoverinfosrc"] = _v
          _v = arg.pop("hoverlabel", None)
          _v = hoverlabel if hoverlabel is not None else _v
          if _v is not None:
              self["hoverlabel"] = _v
          _v = arg.pop("hovertemplate", None)
          _v = hovertemplate if hovertemplate is not None else _v
          if _v is not None:
              self["hovertemplate"] = _v
          _v = arg.pop("hovertemplatesrc", None)
          _v = hovertemplatesrc if hovertemplatesrc is not None else _v
          if _v is not None:
              self["hovertemplatesrc"] = _v
          _v = arg.pop("hovertext", None)
          _v = hovertext if hovertext is not None else _v
          if _v is not None:
              self["hovertext"] = _v
          _v = arg.pop("hovertextsrc", None)
          _v = hovertextsrc if hovertextsrc is not None else _v
          if _v is not None:
              self["hovertextsrc"] = _v
          _v = arg.pop("ids", None)
          _v = ids if ids is not None else _v
          if _v is not None:
              self["ids"] = _v
          _v = arg.pop("idssrc", None)
          _v = idssrc if idssrc is not None else _v
          if _v is not None:
              self["idssrc"] = _v
          _v = arg.pop("legendgroup", None)
          _v = legendgroup if legendgroup is not None else _v
          if _v is not None:
              self["legendgroup"] = _v
          _v = arg.pop("legendgrouptitle", None)
          _v = legendgrouptitle if legendgrouptitle is not None else _v
          if _v is not None:
              self["legendgrouptitle"] = _v
          _v = arg.pop("legendrank", None)
          _v = legendrank if legendrank is not None else _v
          if _v is not None:
              self["legendrank"] = _v
          _v = arg.pop("marker", None)
          _v = marker if marker is not None else _v
          if _v is not None:
              self["marker"] = _v
          _v = arg.pop("meta", None)
          _v = meta if meta is not None else _v
          if _v is not None:
              self["meta"] = _v
          _v = arg.pop("metasrc", None)
          _v = metasrc if metasrc is not None else _v
          if _v is not None:
              self["metasrc"] = _v
          _v = arg.pop("name", None)
          _v = name if name is not None else _v
          if _v is not None:
              self["name"] = _v
          _v = arg.pop("opacity", None)
          _v = opacity if opacity is not None else _v
          if _v is not None:
              self["opacity"] = _v
          _v = arg.pop("selected", None)
          _v = selected if selected is not None else _v
          if _v is not None:
              self["selected"] = _v
          _v = arg.pop("selectedpoints", None)
          _v = selectedpoints if selectedpoints is not None else _v
          if _v is not None:
              self["selectedpoints"] = _v
          _v = arg.pop("showlegend", None)
          _v = showlegend if showlegend is not None else _v
          if _v is not None:
              self["showlegend"] = _v
          _v = arg.pop("showlowerhalf", None)
          _v = showlowerhalf if showlowerhalf is not None else _v
          if _v is not None:
              self["showlowerhalf"] = _v
          _v = arg.pop("showupperhalf", None)
          _v = showupperhalf if showupperhalf is not None else _v
          if _v is not None:
              self["showupperhalf"] = _v
          _v = arg.pop("stream", None)
          _v = stream if stream is not None else _v
          if _v is not None:
              self["stream"] = _v
          _v = arg.pop("text", None)
          _v = text if text is not None else _v
          if _v is not None:
              self["text"] = _v
          _v = arg.pop("textsrc", None)
          _v = textsrc if textsrc is not None else _v
          if _v is not None:
              self["textsrc"] = _v
          _v = arg.pop("uid", None)
          _v = uid if uid is not None else _v
          if _v is not None:
              self["uid"] = _v
          _v = arg.pop("uirevision", None)
          _v = uirevision if uirevision is not None else _v
          if _v is not None:
              self["uirevision"] = _v
          _v = arg.pop("unselected", None)
          _v = unselected if unselected is not None else _v
          if _v is not None:
              self["unselected"] = _v
          _v = arg.pop("visible", None)
          _v = visible if visible is not None else _v
          if _v is not None:
              self["visible"] = _v
          _v = arg.pop("xaxes", None)
          _v = xaxes if xaxes is not None else _v
          if _v is not None:
              self["xaxes"] = _v
          _v = arg.pop("xhoverformat", None)
          _v = xhoverformat if xhoverformat is not None else _v
          if _v is not None:
              self["xhoverformat"] = _v
          _v = arg.pop("yaxes", None)
          _v = yaxes if yaxes is not None else _v
          if _v is not None:
              self["yaxes"] = _v
          _v = arg.pop("yhoverformat", None)
          _v = yhoverformat if yhoverformat is not None else _v
          if _v is not None:
              self["yhoverformat"] = _v
  
          # Read-only literals
          # ------------------
  
          self._props["type"] = "splom"
          arg.pop("type", None)
  
          # Process unknown kwargs
          # ----------------------
          self._process_kwargs(**dict(arg, **kwargs))
  
          # Reset skip_invalid
          # ------------------
          self._skip_invalid = False
  