class_docstr: Base class for FigureWidget. The FigureWidget class is code-generated as a
  subclass
docstr: Send Plotly.update message to the frontend
  
  Note: there is no source_view_id parameter because animations
  triggered by the fontend are not currently supported
  
  Parameters
  ----------
  styles_data : list[dict]
      Plotly.animate styles data
  relayout_data : dict
      Plotly.animate relayout data
  trace_indexes : list[int]
      List of trace indexes that the animate operation applies to
docstr_tok: ["Send","Plotly.update","message","to","the","frontend","Note",":","there","is","no","source_view_id","parameter","because","animations","triggered","by","the","fontend","are","not","currently","supported","Parameters","--","--","--","--","--","styles_data",":","list","[","dict","]","Plotly.animate","styles","data","relayout_data",":","dict","Plotly.animate","relayout","data","trace_indexes",":","list","[","int","]","List","of","trace","indexes","that","the","animate","operation","applies","to"]
code: def _send_animate_msg(
      self, styles_data, relayout_data, trace_indexes, animation_opts
  ):
      """
      Send Plotly.update message to the frontend
  
      Note: there is no source_view_id parameter because animations
      triggered by the fontend are not currently supported
  
      Parameters
      ----------
      styles_data : list[dict]
          Plotly.animate styles data
      relayout_data : dict
          Plotly.animate relayout data
      trace_indexes : list[int]
          List of trace indexes that the animate operation applies to
      """
  
      # Validate / normalize inputs
      # ---------------------------
      trace_indexes = self._normalize_trace_indexes(trace_indexes)
  
      # Increment layout/trace edit message IDs
      # ---------------------------------------
      trace_edit_id = self._last_trace_edit_id + 1
      self._last_trace_edit_id = trace_edit_id
      self._trace_edit_in_process = True
  
      layout_edit_id = self._last_layout_edit_id + 1
      self._last_layout_edit_id = layout_edit_id
      self._layout_edit_in_process = True
  
      # Build message
      # -------------
      animate_msg = {
          "style_data": styles_data,
          "layout_data": relayout_data,
          "style_traces": trace_indexes,
          "animation_opts": animation_opts,
          "trace_edit_id": trace_edit_id,
          "layout_edit_id": layout_edit_id,
          "source_view_id": None,
      }
  
      # Send message
      # ------------
      self._py2js_animate = animate_msg
      self._py2js_animate = None
  
imports: import ipywidgets
  from traitlets import List, Unicode, Dict, observe, Integer
  from .basedatatypes import BaseFigure, BasePlotlyType
  from .callbacks import BoxSelector, LassoSelector, InputDeviceState, Points
  from .serializers import custom_serializers
  from .version import __frontend_version__
label_desc: Use image node_id 7 for calling the BaseFigureWidget obj's underlying member method code with example usage: obj._send_animate_msg(styles_data, relayout_data, trace_indexes, animation_opts) without return types