ó
    †~is(  ã                   ót   • S r SSKJrJr  SSKJr  SSKr/ SQr " S S5      r	 " S S	\	5      r
 " S
 S\	5      rg)z
Min-heaps.
é    )ÚheappopÚheappush)ÚcountN)ÚMinHeapÚPairingHeapÚ
BinaryHeapc                   ój   • \ rS rSrSr " S S5      rS rS rS rSS	 jr	SS
 jr
S rS rS rS rSrg)r   é   zê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.
c                   ó(   • \ rS rSrSrSrS rS rSrg)ÚMinHeap._Itemé   z2Used by subclassess to represent a key-value pair.©ÚkeyÚvaluec                 ó   • Xl         X l        g ©Nr   )Úselfr   r   s      ÚQ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/networkx/utils/heaps.pyÚ__init__ÚMinHeap._Item.__init__   s   € ØŒHØ�Jó    c                 óD   • [        U R                  U R                  45      $ r   )Úreprr   r   ©r   s    r   Ú__repr__ÚMinHeap._Item.__repr__   s   € Ü˜Ÿ™ 4§:¡:Ð.Ó/Ð/r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r   r   Ú__static_attributes__© r   r   Ú_Itemr      s   † Ù@à$ˆ	ò	õ	0r   r%   c                 ó   • 0 U l         g)zInitialize a new min-heap.N©Ú_dictr   s    r   r   ÚMinHeap.__init__!   s	   € àˆ�
r   c                 ó   • [         e)z¸Query 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.
©ÚNotImplementedErrorr   s    r   ÚminÚMinHeap.min%   ó
   € ô "Ð!r   c                 ó   • [         e)z»Delete 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.
r+   r   s    r   ÚpopÚMinHeap.pop4   r/   r   Nc                 ó   • [         e)a)  Returns 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.
r+   ©r   r   Údefaults      r   ÚgetÚMinHeap.getC   s
   € ô" "Ð!r   c                 ó   • [         e)aÄ  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.
r+   )r   r   r   Úallow_increases       r   ÚinsertÚMinHeap.insertV   s
   € ô* "Ð!r   c                 ó,   • [        U R                  5      $ ©z"Returns whether the heap if empty.©Úboolr(   r   s    r   Ú__nonzero__ÚMinHeap.__nonzero__m   ó   € ä�D—J‘JÓÐr   c                 ó,   • [        U R                  5      $ r=   r>   r   s    r   Ú__bool__ÚMinHeap.__bool__q   rB   r   c                 ó,   • [        U R                  5      $ )z2Returns the number of key-value pairs in the heap.)Úlenr(   r   s    r   Ú__len__ÚMinHeap.__len__u   s   € ä�4—:‘:‹Ðr   c                 ó   • XR                   ;   $ )zyReturns whether a key exists in the heap.

Parameters
----------
key : any hashable object.
    The key to be looked up.
r'   )r   r   s     r   Ú__contains__ÚMinHeap.__contains__y   s   € ð —j‘jÑ Ð r   r'   r   ©F)r   r   r   r    r!   r%   r   r-   r1   r6   r:   r@   rD   rH   rK   r#   r$   r   r   r   r      s>   † ñ÷
0ñ 
0òò"ò"ô"ô&"ò. ò òõ!r   r   c                   óˆ   ^ • \ rS rSrSr " S S\R                  5      rU 4S jrS r	S r
SS jrSS	 jrS
 rS rS rSrU =r$ )r   é„   zA pairing heap.c                   ó0   ^ • \ rS rSrSrSrU 4S jrSrU =r$ )ÚPairingHeap._Nodeé‡   zrA node in a pairing heap.

A tree in a pairing heap is stored using the left-child, right-sibling
representation.
)ÚleftÚnextÚprevÚparentc                 ó\   >• [         TU ]  X5        S U l        S U l        S U l        S U l        g r   )Úsuperr   rS   rT   rU   rV   )r   r   r   Ú	__class__s      €r   r   ÚPairingHeap._Node.__init__�   s,   ø€ Ü‰GÑ˜SÔ(àˆDŒIàˆDŒIàˆDŒIàˆD�Kr   )rS   rT   rV   rU   )	r   r   r   r    r!   r"   r   r#   Ú__classcell__©rY   s   @r   Ú_NoderQ   ‡   s   ø† ñ	ð 7ˆ	÷		ó 		r   r]   c                 ó0   >• [         TU ]  5         SU l        g)zInitialize a pairing heap.N)rX   r   Ú_root©r   rY   s    €r   r   ÚPairingHeap.__init__›   s   ø€ ä‰ÑÔØˆ�
r   c                 ó    • U R                   c  [        R                  " S5      eU R                   R                  U R                   R                  4$ ©Nzheap is empty.)r_   ÚnxÚNetworkXErrorr   r   r   s    r   r-   ÚPairingHeap.min    s;   € Ø�:‰:ÑÜ×"Ò"Ð#3Ó4Ð4Ø—
‘
—‘ §
¡
× 0Ñ 0Ð1Ð1r   c                 óþ   • U R                   c  [        R                  " S5      eU R                   nU R                  U R                   5      U l         U R                  UR
                  	 UR
                  UR                  4$ rc   )r_   rd   re   Ú_merge_childrenr(   r   r   )r   Úmin_nodes     r   r1   ÚPairingHeap.pop¥   s`   € Ø�:‰:ÑÜ×"Ò"Ð#3Ó4Ð4Ø—:‘:ˆØ×)Ñ)¨$¯*©*Ó5ˆŒ
Ø�J‰J�x—|‘|Ð$Ø—‘˜hŸn™nÐ-Ð-r   c                 óZ   • U R                   R                  U5      nUb  UR                  $ U$ r   )r(   r6   r   )r   r   r5   Únodes       r   r6   ÚPairingHeap.get­   s(   € Ø�z‰z�~‰~˜cÓ"ˆØ!Ñ-ˆt�z‰zÐ:°7Ð:r   c                 ó$  • U R                   R                  U5      nU R                  nUb¬  X$R                  :  aK  X$l        XELa@  X$R                  R                  :  a'  U R                  U5        U R                  XT5      U l        gU(       aJ  X$R                  :”  a;  X$l        U R                  U5      nUb!  U R                  U R                  U5      U l        gU R                  X5      nX@R                   U'   Ub  U R                  XT5      OUU l        g)NTF)	r(   r6   r_   r   rV   Ú_cutÚ_linkrh   r]   )r   r   r   r9   rl   ÚrootÚchilds          r   r:   ÚPairingHeap.insert±   sÞ   € Ø�z‰z�~‰~˜cÓ"ˆØ�z‰zˆØÑØ—z‘zÓ!Ø"”
ØÒ#¨·±×0AÑ0AÓ(AØ—I‘I˜d”OØ!%§¡¨DÓ!7�D”JØÞ E¯J©JÓ$6Ø"”
Ø×,Ñ,¨TÓ2�ð Ñ$Ø!%§¡¨D¯J©J¸Ó!>�D”Jð ð —:‘:˜cÓ)ˆDØ"�J‰J�s‰OØ37Ñ3C˜Ÿ™ DÔ/ÈˆDŒJØr   c                 óš   • UR                   UR                   :  a  X!p!UR                  nX2l        Ub  X#l        SUl        X!l        Xl        U$ )zOLink two nodes, making the one with the smaller value the parent of
the other.
N)r   rS   rT   rU   rV   )r   rq   ÚotherrT   s       r   rp   ÚPairingHeap._linkÕ   sH   € ð �;‰;˜Ÿ™Ó#Ø�%Ø�y‰yˆØŒ
ØÑØŒIØˆŒ
ØŒ	ØŒØˆr   c                 óB  • UR                   nSUl         Ubˆ  U R                  nSn UR                  nUc  XBl        O$UR                  nU" X%5      nXBl        UnUc  OUnM:  UR                  nUb  UR                  nU" XB5      nUnUb  M  SUl        SUl        SUl        U$ )ztMerge the subtrees of the root using the standard two-pass method.
The resulting subtree is detached from the root.
N)rS   rp   rT   rU   rV   )r   rq   rl   ÚlinkrU   rT   Ú	next_nextÚ	prev_prevs           r   rh   ÚPairingHeap._merge_childrenä   sÀ   € ð �y‰yˆØˆŒ	ØÑØ—:‘:ˆDð
 ˆDØØ—y‘y�Ø‘<Ø $”IØØ ŸI™I�	Ù˜DÓ'�Ø ”	Ø�ØÑ$ØØ �ñ ð —9‘9ˆDØÑ"Ø ŸI™I�	Ù˜DÓ'�Ø �ð Ó"ð
 ˆDŒIØˆDŒIØˆDŒKØˆr   c                 ó¤   • UR                   nUR                  nUb  X2l        OX1R                  l        SUl         Ub  X#l         SUl        SUl        g)zCut a node from its parent.N)rU   rT   rV   rS   )r   rl   rU   rT   s       r   ro   ÚPairingHeap._cut
  sI   € à�y‰yˆØ�y‰yˆØÑØ�Ià#�K‰KÔØˆŒ	ØÑØŒIØˆDŒIØˆ�r   )r_   r   rM   )r   r   r   r    r!   r   r%   r]   r   r-   r1   r6   r:   rp   rh   ro   r#   r[   r\   s   @r   r   r   „   sE   ø† Ùô�—‘ô õ(ò
2ò
.ô;ô"òHò$÷Lð r   r   c                   óL   ^ • \ rS rSrSrU 4S jrS rS rS	S jrS
S jr	Sr
U =r$ )r   i  zA binary heap.c                 óN   >• [         TU ]  5         / U l        [        5       U l        g)zInitialize a binary heap.N)rX   r   Ú_heapr   Ú_countr`   s    €r   r   ÚBinaryHeap.__init__  s   ø€ ä‰ÑÔØˆŒ
Ü“gˆ�r   c                 óº   • U R                   nU(       d  [        R                  " S5      eU R                  n US   u  p4nXQ;   a  X1U   :X  a   XS4$ [	        U5        M&  ©Nzheap is emptyr   ©r(   rd   re   r€   r   ©r   ÚdictÚheapr   Ú_r   s         r   r-   ÚBinaryHeap.min"  sa   € Ø�z‰zˆÞÜ×"Ò" ?Ó3Ð3Ø�z‰zˆð Ø  ™G‰MˆE�cØ‹{˜u¨S©	Ó1Øàˆ|Ðô �DŒMñ	 r   c                 ó¾   • U R                   nU(       d  [        R                  " S5      eU R                  n US   u  p4n[	        U5        XQ;   a	  X1U   :X  a  OM#  X	 XS4$ r„   r…   r†   s         r   r1   ÚBinaryHeap.pop0  sf   € Ø�z‰zˆÞÜ×"Ò" ?Ó3Ð3Ø�z‰zˆð Ø  ™G‰MˆE�cÜ�DŒMØ‹{˜u¨S©	Ó1Øñ	 ð
 ˆIØˆ|Ðr   c                 ó8   • U R                   R                  X5      $ r   )r(   r6   r4   s      r   r6   ÚBinaryHeap.get?  s   € Ø�z‰z�~‰~˜cÓ+Ð+r   c                 ó  • U R                   nX;   aJ  XA   nX%:  d  U(       a9  X%:”  a4  X$U'   [        U R                  U[        U R                  5      U45        X%:  $ gX$U'   [        U R                  U[        U R                  5      U45        g)NFT)r(   r   r€   rT   r�   )r   r   r   r9   r‡   Ú	old_values         r   r:   ÚBinaryHeap.insertB  s   € Ø�z‰zˆØ‹;Ø™	ˆIØÓ ¦^¸Ó8Ið
 "�S‘	Ü˜Ÿ™ e¬T°$·+±+Ó->ÀÐ%DÔEØÑ(Ð(Øà�‰IÜ�T—Z‘Z %¬¨d¯k©kÓ):¸CÐ!@ÔAØr   )r�   r€   r   rM   )r   r   r   r    r!   r   r-   r1   r6   r:   r#   r[   r\   s   @r   r   r     s$   ø† Ùõòòô,÷ò r   r   )r!   Úheapqr   r   Ú	itertoolsr   Únetworkxrd   Ú__all__r   r   r   r$   r   r   Ú<module>r–      sB   ðñ÷ $Ý ã â
2€÷t!ñ t!ônR�'ô Rôj9�õ 9r   