ó ŸÃÒYc@sœdZdZddlmZmZddlmZddlZdddgZ de fd „ƒYZ d „Z de fd „ƒYZ de fd „ƒYZdS( s Min-heaps. s&ysitu iÿÿÿÿ(theappoptheappush(tcountNtMinHeapt PairingHeapt BinaryHeapcBs{eZdZdefd„ƒYZd„Zd„Zd„Zd d„Z e d„Z d„Z d „Z d „Zd „ZRS( súBase class for min-heaps. A MinHeap stores a collection of key-value pairs ordered by their values. It supports querying the minimum pair, inserting a new pair, decreasing the value in an existing pair and deleting the minimum pair. t_ItemcBs&eZdZdZd„Zd„ZRS(s;Used by subclassess to represent a key-value pair. tkeytvaluecCs||_||_dS(N(RR(tselfRR((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt__init__s cCst|j|jfƒS(N(treprRR(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt__repr__"s(skeysvalue(t__name__t __module__t__doc__t __slots__R R (((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyRs cCs i|_dS(s#Initialize a new min-heap. N(t_dict(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR %scCs t‚dS(sQuery the minimum key-value pair. Returns ------- key, value : tuple The key-value pair with the minimum value in the heap. Raises ------ NetworkXError If the heap is empty. N(tNotImplementedError(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pytmin*s cCs t‚dS(sDelete the minimum pair in the heap. Returns ------- key, value : tuple The key-value pair with the minimum value in the heap. Raises ------ NetworkXError If the heap is empty. N(R(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pytpop9s cCs t‚dS(sˆReturn the value associated with a key. Parameters ---------- key : hashable object The key to be looked up. default : object Default value to return if the key is not present in the heap. Default value: None. Returns ------- value : object. The value associated with the key. N(R(R Rtdefault((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pytgetHscCs t‚dS(s<Insert a new key-value pair or modify the value in an existing pair. Parameters ---------- key : hashable object The key. value : object comparable with existing values. The value. allow_increase : bool Whether the value is allowed to increase. If False, attempts to increase an existing value have no effect. Default value: False. Returns ------- decreased : bool True if a pair is inserted or the existing value is decreased. N(R(R RRtallow_increase((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pytinsert[scCs t|jƒS(s*Return whether the heap if empty. (tboolR(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt __nonzero__rscCs t|jƒS(s*Return whether the heap if empty. (RR(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt__bool__wscCs t|jƒS(s:Return the number of key-value pairs in the heap. (tlenR(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt__len__|scCs ||jkS(s Return whether a key exists in the heap. Parameters ---------- key : any hashable object. The key to be looked up. (R(R R((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt __contains__sN(R RRtobjectRR RRtNoneRtFalseRRRRR(((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyRs        cs‡fd†}|S(s;Decorator for inheriting docstrings from base classes. csˆj|jj|_|S(N(t__dict__R R(tfn(tcls(sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pytfuncs((R$R%((R$sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyt _inherit_docŒscBs¥eZdZdejfd„ƒYZd„Zeeƒd„ƒZeeƒd„ƒZ eeƒd d„ƒZ eeƒe d„ƒZ d„Zd „Zd „ZRS( sA pairing heap. t_NodecBseZdZdZd„ZRS(sŠA node in a pairing heap. A tree in a pairing heap is stored using the left-child, right-sibling representation. tlefttnexttprevtparentcCsDttj|ƒj||ƒd|_d|_d|_d|_dS(N( tsuperRR'R R R(R)R*R+(R RR((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR ¡s    (sleftsnextsprevsparent(R RRRR (((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR'™scCs tt|ƒjƒd|_dS(s#Initialize a pairing heap. N(R,RR R t_root(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR ¬scCs7|jdkr!tjdƒ‚n|jj|jjfS(Nsheap is empty.(R-R tnxt NetworkXErrorRR(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR²scCs\|jdkr!tjdƒ‚n|j}|j|jƒ|_|j|j=|j|jfS(Nsheap is empty.(R-R R.R/t_merge_childrenRRR(R tmin_node((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR¸s   cCs)|jj|ƒ}|dk r%|jS|S(N(RRR R(R RRtnode((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyRÁscCs/|jj|ƒ}|j}|dk rá||jkr†||_||k r‚||jjkr‚|j|ƒ|j||ƒ|_ntS|rÝ||jkrÝ||_|j |ƒ}|dk rÝ|j|j|ƒ|_qÝnt S|j ||ƒ}||j|<|dk r|j||ƒn||_tSdS(N( RRR-R RR+t_cutt_linktTrueR0R!R'(R RRRR2troottchild((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyRÆs&        'cCsk|j|jkr"||}}n|j}||_|dk rL||_nd|_||_||_|S(s_Link two nodes, making the one with the smaller value the parent of the other. N(RR(R)R R*R+(R R6totherR)((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR4ës       cCsõ|j}d|_|dk rñ|j}d}xitr˜|j}|dkrX||_Pn|j}|||ƒ}||_|}|dkrPn|}q0W|j}x.|dk rÒ|j}|||ƒ}|}q¥Wd|_d|_d|_n|S(s„Merge the subtrees of the root using the standard two-pass method. The resulting subtree is detached from the root. N(R(R R4R5R)R*R+(R R6R2tlinkR*R)t next_nextt prev_prev((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR0ús4                  cCsm|j}|j}|dk r*||_n ||j_d|_|dk r`||_d|_nd|_dS(s$Cut a node from its parent. N(R*R)R R+R((R R2R*R)((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR3 s         N(R RRRRR'R R&RRR RR!RR4R0R3(((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR•s   $  &cBsqeZdZd„Zeeƒd„ƒZeeƒd„ƒZeeƒdd„ƒZ eeƒe d„ƒZ RS(sA binary heap. cCs,tt|ƒjƒg|_tƒ|_dS(s"Initialize a binary heap. N(R,RR t_heapRt_count(R ((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR 3s cCs„|j}|s!tjdƒ‚n|j}t}xGtry|d\}}}||krl|||krlPn||ƒq3W||fS(Ns heap is emptyi(RR.R/R<RR5(R tdicttheapRRt_R((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR:s   cCs‹|j}|s!tjdƒ‚n|j}t}xGtry|d\}}}||ƒ||kr3|||kr3Pq3q3W||=||fS(Ns heap is emptyi(RR.R/R<RR5(R R>R?RRR@R((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyRJs    cCs|jj||ƒS(N(RR(R RR((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR[scCs«|j}||krw||}||ks=|rs||krs|||t old_value((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR_s    "  "N( R RRR R&RRRR RR!R(((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyR0s   (Rt __author__theapqRRt itertoolsRtnetworkxR.t__all__RRR&RR(((sj/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/utils/heaps.pyts { ›