docs: def process_edge_search(self, current, neighbor, pred, q, component, algo,
                              **kargs):
          '''
          API: process_edge_search(self, current, neighbor, pred, q, component,
                                   algo, **kargs)
          Description:
          Used by search() method. Processes edges according to the underlying
          algortihm. User does not need to call this method directly.
          Input:
              current: Name of the current node.
              neighbor: Name of the neighbor node.
              pred: Predecessor tree.
              q: Data structure that holds nodes to be processed in a queue.
              component: component number.
              algo: Search algorithm. See search() documentation.
              kwargs: Keyword arguments.
          Post:
              'color', 'distance', 'component' attribute of nodes and edges may
              change.
          '''
          if algo == 'Dijkstra':
              return self.process_edge_dijkstra(current, neighbor, pred, q,
                                                component)
          if algo == 'Prim':
              return self.process_edge_prim(current, neighbor, pred, q,
                                            component)
          neighbor_node = self.get_node(neighbor)
          if current == None:
              neighbor_node.set_attr('distance', 0)
              if isinstance(q, PriorityQueue):
                  q.push(neighbor, 0)
              else:
                  q.push(neighbor)
              if component != None:
                  neighbor_node.set_attr('component', component)
                  neighbor_node.set_attr('label', component)
              else:
                  neighbor_node.set_attr('label', 0)
              return
          if isinstance(q, PriorityQueue):
              current_priority = q.get_priority(neighbor)
              if algo == 'UnweightedSPT' or algo == 'BFS':
                  priority = self.get_node(current).get_attr('distance') + 1
              if algo == 'DFS':
                  priority = -self.get_node(current).get_attr('distance') - 1
              if current_priority is not None and priority >= current_priority:
                  return
              q.push(neighbor, priority)
              if algo == 'UnweightedSPT' or algo == 'BFS':
                  neighbor_node.set_attr('distance', priority)
              if algo == 'DFS':
                  neighbor_node.set_attr('depth', -priority)
          else:
              distance = self.get_node(current).get_attr('distance') + 1
              if ((algo == 'UnweightedSPT' or algo == 'BFS') and
                  neighbor_node.get_attr('distance') is not None):
                  return
              neighbor_node.set_attr('distance', distance)
              neighbor_node.set_attr('label', str(distance))
              q.push(neighbor)
          pred[neighbor] = current
          neighbor_node.set_attr('color', 'red')
          if component != None:
              neighbor_node.set_attr('component', component)
              neighbor_node.set_attr('label', component)
          self.display()