code: def _init_tools(self, element, callbacks=[]):
          
          tooltips, hover_opts = self._hover_opts(element)
          tooltips = [(ttp.pprint_label, '@{%s}' % util.dimension_sanitizer(ttp.name))
                      if isinstance(ttp, Dimension) else ttp for ttp in tooltips]
          if not tooltips: tooltips = None
  
          callbacks = callbacks+self.callbacks
          cb_tools, tool_names = [], []
          hover = False
          for cb in callbacks:
              for handle in cb.models+cb.extra_models:
                  if handle and handle in known_tools:
                      tool_names.append(handle)
                      if handle == 'hover':
                          tool = tools.HoverTool(
                              tooltips=tooltips, tags=['hv_created'],
                              **hover_opts)
                          hover = tool
                      else:
                          tool = known_tools[handle]()
                      cb_tools.append(tool)
                      self.handles[handle] = tool
  
          tool_list = [
              t for t in cb_tools + self.default_tools + self.tools
              if t not in tool_names]
  
          copied_tools = []
          for tool in tool_list:
              if isinstance(tool, tools.Tool):
                  properties = tool.properties_with_values(include_defaults=False)
                  tool = type(tool)(**properties)
              copied_tools.append(tool)
  
          hover_tools = [t for t in copied_tools if isinstance(t, tools.HoverTool)]
          if 'hover' in copied_tools:
              hover = tools.HoverTool(tooltips=tooltips, tags=['hv_created'], **hover_opts)
              copied_tools[copied_tools.index('hover')] = hover
          elif any(hover_tools):
              hover = hover_tools[0]
          if hover:
              self.handles['hover'] = hover
          return copied_tools
docs: Processes the list of tools to be supplied to the plot.