class_docstr: Class that manages communication between a
  :class:`fiftyone.core.session.Session` and one or more
  :class:`fiftyone.core.plots.base.ResponsivePlot` instances.
  
  Each plot can be linked to either the view, samples, frames, or labels of a
  session:
  
  -   **View links:** When a plot has ``link_type == "view"``, then, when the
      session's view changes, the plot is updated based on the content of the
      view
  
  -   **Sample links:** When points are selected in a plot with
      ``link_type == "samples"``, a view containing the corresponding samples
      is loaded in the App. Conversely, when the session's view changes, the
      corresponding points are selected in the plot
  
  -   **Frame links:** When points are selected in a plot with
      ``link_type == "frames"``, a view containing the corresponding frames
      is loaded in the App. Conversely, when the session's view changes, the
      corresponding points are selected in the plot
  
  -   **Label links:** When points are selected in a plot with
      ``link_type == "labels"``, a view containing the corresponding labels
      is loaded in the App. Conversely, when the session's view changes, the
      points in the plot corresponding to all labels in the view are selected
      in the plot
  
  Args:
      session: a :class:`fiftyone.core.session.Session`
class_docstr_tok: ["Class","that","manages","communication","between","a",":","class",":","`","fiftyone.core.session.Session","`","and","one","or","more",":","class",":","`","fiftyone.core.plots.base.ResponsivePlot","`","instances",".","Each","plot","can","be","linked","to","either","the","view",",","samples",",","frames",",","or","labels","of","a","session",":","-","*","*","View","links",":","*","*","When","a","plot","has","``","link_type","==","``","view","''","``",",","then",",","when","the","session","'s","view","changes",",","the","plot","is","updated","based","on","the","content","of","the","view","-","*","*","Sample","links",":","*","*","When","points","are","selected","in","a","plot","with","``","link_type","==","``","samples","''","``",",","a","view","containing","the","corresponding","samples","is","loaded","in","the","App",".","Conversely",",","when","the","session","'s","view","changes",",","the","corresponding","points","are","selected","in","the","plot","-","*","*","Frame","links",":","*","*","When","points","are","selected","in","a","plot","with","``","link_type","==","``","frames","''","``",",","a","view","containing","the","corresponding","frames","is","loaded","in","the","App",".","Conversely",",","when","the","session","'s","view","changes",",","the","corresponding","points","are","selected","in","the","plot","-","*","*","Label","links",":","*","*","When","points","are","selected","in","a","plot","with","``","link_type","==","``","labels","''","``",",","a","view","containing","the","corresponding","labels","is","loaded","in","the","App",".","Conversely",",","when","the","session","'s","view","changes",",","the","points","in","the","plot","corresponding","to","all","labels","in","the","view","are","selected","in","the","plot","Args",":","session",":","a",":","class",":","`","fiftyone.core.session.Session","`"]
code: def _update_view_plots(self, names, view):
      # For efficiency, aggregations for all supported `ViewPlot`s are
      # computed in a single batch
  
      # Build flat list of all aggregations
      aggregations = []
      agg_lengths = []
      for name in names:
          aggs = self._aggs.get(name, None)
          if aggs is not None:
              aggregations.extend(aggs)
              agg_lengths.append(len(aggs))
          else:
              agg_lengths.append(None)
  
      if aggregations:
          # Compute aggregations
          agg_results = view.aggregate(aggregations)
  
          # Partition into per-plot batches
          agg_iter = iter(agg_results)
          agg_results = []
          for agg_len in agg_lengths:
              if agg_len is None:
                  _agg_results = None
              else:
                  _agg_results = [
                      next(agg_iter) for _ in range(agg_len)
                  ]
  
              agg_results.append(_agg_results)
      else:
          agg_results = itertools.repeat(None)
  
      # Finally, update the plots
      for name, _agg_results in zip(names, agg_results):
          plot = self._plots[name]
          plot.update_view(view, agg_results=_agg_results)
  
imports: import datetime
  import itertools
  import logging
  from bson import ObjectId
  import eta.core.utils
  import fiftyone.core.clips
  from fiftyone.core.expressions import ViewField
  import fiftyone.core.patches
  import fiftyone.core.video
  from .base import ResponsivePlot, ViewPlot, InteractivePlot
label_desc: Use image node_id 40 for calling the PlotManager obj's underlying member method code with example usage: obj._update_view_plots(names, view) without return types