class_docstr: Dashboard class for creating interactive dashboard objects.
  
  Dashboards are dicts that contain boxes which hold plot information.
  These boxes can be arranged in various ways. The most basic form of
  a box is:
  
  ```
  {
      'type': 'box',
      'boxType': 'plot'
  }
  ```
  
  where 'fileId' can be set to the 'username:#' of your plot. The other
  parameters a box takes are `shareKey` (default is None) and `title`
  (default is '').
  
  `.get_preview()` should be called quite regularly to get an HTML
  representation of the dashboard in which the boxes in the HTML
  are labelled with on-the-fly-generated numbers or box ids which
  change after each modification to the dashboard.
  
  `.get_box()` returns the box located in the dashboard by calling
  its box id as displayed via `.get_preview()`.
  
  Example 1: Create a simple Dashboard object
  ```
  import plotly.dashboard_objs as dashboard
  
  box_a = {
      'type': 'box',
      'boxType': 'plot',
      'fileId': 'username:some#',
      'title': 'box a'
  }
  
  box_b = {
      'type': 'box',
      'boxType': 'plot',
      'fileId': 'username:some#',
      'title': 'box b'
  }
  
  box_c = {
      'type': 'box',
      'boxType': 'plot',
      'fileId': 'username:some#',
      'title': 'box c'
  }
  
  my_dboard = dashboard.Dashboard()
  my_dboard.insert(box_a)
  # my_dboard.get_preview()
  my_dboard.insert(box_b, 'above', 1)
  # my_dboard.get_preview()
  my_dboard.insert(box_c, 'left', 2)
  # my_dboard.get_preview()
  my_dboard.swap(1, 2)
  # my_dboard.get_preview()
  my_dboard.remove(1)
  # my_dboard.get_preview()
  ```
  
  Example 2: 4 vertical boxes of equal height
  ```
  import plotly.dashboard_objs as dashboard
  
  box_a = {
      'type': 'box',
      'boxType': 'plot',
      'fileId': 'username:some#',
      'title': 'box a'
  }
  
  my_dboard = dashboard.Dashboard()
  my_dboard.insert(box_a)
  my_dboard.insert(box_a, 'below', 1)
  my_dboard.insert(box_a, 'below', 1)
  my_dboard.insert(box_a, 'below', 3)
  # my_dboard.get_preview()
  ```
code: def _compute_box_ids(self):
      from plotly.utils import node_generator
  
      box_ids_to_path = {}
      all_nodes = list(node_generator(self["layout"]))
      all_nodes.sort(key=lambda x: x[1])
      for node in all_nodes:
          if (
              node[1] != ()
              and node[0]["type"] == "box"
              and node[0]["boxType"] != "empty"
          ):
              try:
                  max_id = max(box_ids_to_path.keys())
              except ValueError:
                  max_id = 0
              box_ids_to_path[max_id + 1] = node[1]
  
      return box_ids_to_path
  
imports: import pprint
  import _plotly_utils.exceptions
  from _plotly_utils import optional_imports
  from chart_studio import exceptions
label_desc: Use image node_id 2 for calling the Dashboard obj's underlying member method code with example usage: obj._compute_box_ids() and returns: box_ids_to_path