class_docstr: A priority queue implementation.
  
  This is an implemented of a priority queue using a heap implemtnation. It
  has O(log n) time for adding and popping elements but constant time
  deletion. It is based off of the implementation that is provided at
  
  https://docs.python.org/2/library/heapq.html
  
  This implementation assumes that the items with the highest priority
  are the ones with the lowest "weight" that gets passed in. If higher
  weights are supposed to correspond to higher priority, consider reversing
  the sign of the weight.
  
  Parameters
  ----------
  None
  
  Attributes
  ----------
  pq : list
      A list containing the heapified priority queue.
  
  lookup : dict
      A dictionary containing links to each of the elements, allowing
      constant time lookups and deletions.
class_docstr_tok: ["A","priority","queue","implementation",".","This","is","an","implemented","of","a","priority","queue","using","a","heap","implemtnation",".","It","has","O","(","log","n",")","time","for","adding","and","popping","elements","but","constant","time","deletion",".","It","is","based","off","of","the","implementation","that","is","provided","at","https",":","\/\/docs.python.org\/2\/library\/heapq.html","This","implementation","assumes","that","the","items","with","the","highest","priority","are","the","ones","with","the","lowest","``","weight","''","that","gets","passed","in",".","If","higher","weights","are","supposed","to","correspond","to","higher","priority",",","consider","reversing","the","sign","of","the","weight",".","Parameters","--","--","--","--","--","None","Attributes","--","--","--","--","--","pq",":","list","A","list","containing","the","heapified","priority","queue",".","lookup",":","dict","A","dictionary","containing","links","to","each","of","the","elements",",","allowing","constant","time","lookups","and","deletions","."]
docstr: Add an element to the priority queue. Runtime is O(log n).
  
  This adds in an element to the priority queue. If that element is
  already there it will automatically delete the previous instance
  and replace it with the new instance.
  
  Parameters
  ----------
  item : object
      The object to be encoded.
  
  weight : double
      The priority of the item. The lower the weight the higher the
      priority when items get dequeued. If a higher weight is supposed
      to correspond to a higher priority, consider reversing the sign of
      the weight.
  
  Returns
  -------
  None
docstr_tok: ["Add","an","element","to","the","priority","queue",".","Runtime","is","O","(","log","n",")",".","This","adds","in","an","element","to","the","priority","queue",".","If","that","element","is","already","there","it","will","automatically","delete","the","previous","instance","and","replace","it","with","the","new","instance",".","Parameters","--","--","--","--","--","item",":","object","The","object","to","be","encoded",".","weight",":","double","The","priority","of","the","item",".","The","lower","the","weight","the","higher","the","priority","when","items","get","dequeued",".","If","a","higher","weight","is","supposed","to","correspond","to","a","higher","priority",",","consider","reversing","the","sign","of","the","weight",".","Returns","--","--","--","-","None"]
code: def add(self, item, weight):
      """Add an element to the priority queue. Runtime is O(log n).
  
      This adds in an element to the priority queue. If that element is
      already there it will automatically delete the previous instance
      and replace it with the new instance.
  
      Parameters
      ----------
      item : object
          The object to be encoded.
  
      weight : double
          The priority of the item. The lower the weight the higher the
          priority when items get dequeued. If a higher weight is supposed
          to correspond to a higher priority, consider reversing the sign of
          the weight.
  
      Returns
      -------
      None
      """
  
      # if item in self.lookup:
      #    self.remove(item)
  
      entry = [weight, next(self.counter), item]
      heappush(self.pq, entry)
  
file_path: apricot/apricot/utils.py
imports: import numbers
  import numpy
  import itertools
  from heapq import heappush
  from heapq import heappop
  from heapq import heapify
  from heapq import heapreplace
  from scipy.sparse import csr_matrix
  from sklearn.metrics import pairwise_distances
  from sklearn.neighbors import KNeighborsTransformer
label_desc: Use image node_id 2 for calling the PriorityQueue obj's underlying member method code with example usage: obj.add(item, weight) without return types