ó
    „ñ:iþ!  ã                   óÎ   • S r  SSKJr  SSKJr  SrS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS r " S S5      rS rS r\S:X  a  \" 5         gg! \ a     NYf = f)zc
Contains tests and a prototype implementation for the fanout algorithm in
the LLVM refprune pass.
é    )ÚDigraph)ÚdefaultdictÚAc                  óä   • 0 SS/_SSS/_S/ _SSS/_SS/_S/ _SSS	/_S	SS/_SS
S/_S
SS/_S/ _SS/_S/ SQ_SS/_SS/_S/ _n [        [        5      nS/US'   S/US'   SS/US'   SSS10nXU4$ )Nr   ÚBÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚZ)r   ÚOÚPr   r   ÚincrefÚdecref©r   Úlist©ÚedgesÚnodesÚexpecteds      Ú`/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/llvmlite/tests/refprune_proto.pyÚcase1r      s0  € ðØˆcˆUðàˆc�3ˆZðð 	ˆRðð 	ˆc�3ˆZð	ð
 	ˆcˆUðð 	ˆRðð 	ˆc�3ˆZðð 	ˆc�3ˆZðð 	ˆc�3ˆZðð 	ˆc�3ˆZðð 	ˆRðð 	ˆcˆUðð 	Š_ðð 	ˆcˆUðð 	ˆcˆUðð  	ˆRð!€Eô$ œÓ€EØ�€Eˆ#�JØ�€Eˆ#�JØ˜HÐ%€Eˆ#�JØ�c˜3�ZÐ €HØ˜Ð!Ð!ó    c                  óf   • SS/S// S.n [        [        5      nS/US'   S/US'   S/US'   SS 0nXU4$ )Nr   r   )r   r   r   r   r   r   r   r   s      r   Úcase2r"   2   sY   € à�3ˆZØˆUØñ€Eô
 œÓ€EØ�€Eˆ#�JØ�€Eˆ#�JØ�€Eˆ#�JØ�Tˆ{€HØ˜Ð!Ð!r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r   r	   ©r   Úappend©r   r   Ú_r   s       r   Úcase3r(   @   ó3   € Ü“g�O€E�!à	ˆ#�J×Ñ�cÔØ�Tˆ{€HØ˜Ð!Ð!r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r
   r	   r$   r&   s       r   Úcase4r+   H   r)   r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r   r	   r$   r&   s       r   Úcase5r-   P   r)   r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r   r	   r$   r&   s       r   Úcase6r/   X   r)   r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r   r	   r$   r&   s       r   Úcase7r1   `   r)   r    c                  ó`   • S/SS/S// S.n [        [        5      nS/US'   S/US'   SS10nXU4$ )Nr   r   r   )zentry:r   r   r   r   r   r   r   s      r   Úcase8r3   h   sU   € à�%Ø�3ˆZØˆUØñ	€Eô œÓ€EØ�€Eˆ#�JØ�€Eˆ#�JØ�c�Uˆ|€HØ˜Ð!Ð!r    c                  óT   • [        5       u  pnUS   R                  S5        SS 0nXU4$ )Nr   r   r   ©r3   r%   r&   s       r   Úcase9r6   v   r)   r    c                  óV   • [        5       u  pnUS   R                  S5        SS10nXU4$ )Nr   r   r5   r&   s       r   Úcase10r8   ~   s5   € Ü“g�O€E�!à	ˆ#�J×Ñ�cÔØ�c�Uˆ|€HØ˜Ð!Ð!r    c                  ó`   • [        5       u  pnUS   R                  S5        / US'   SS10nXU4$ ©Nr   r	   r   r5   r&   s       r   Úcase11r;   †   s>   € Ü“g�O€E�!Ø	ˆ#�J×Ñ�cÔØ€Eˆ#�JØ�c�Uˆ|€HØ˜Ð!Ð!r    c                  ób   • [        5       u  pnUS   R                  S5        S/US'   SS10nXU4$ r:   r5   r&   s       r   Úcase12r=   Ž   s@   € Ü“g�O€E�!Ø	ˆ#�J×Ñ�cÔØ�€Eˆ#�JØ�c�Uˆ|€HØ˜Ð!Ð!r    c                  ó`   • [        5       u  pnUS   R                  S5        S/US'   SS 0nXU4$ )Nr   r	   r   r   r5   r&   s       r   Úcase13r?   –   s>   € Ü“g�O€E�!Ø	ˆ#�J×Ñ�cÔØ�€Eˆ#�JØ�Tˆ{€HØ˜Ð!Ð!r    c                 óŽ   • [        [        5      nU R                  5        H!  u  p#U H  nX   R                  U5        M     M#     U$ ©N)r   ÚsetÚitemsÚadd)r   ÚdÚsrcÚ	outgoingsÚdsts        r   Úmake_predecessor_maprI   ž   s<   € Ü”CÓ€AØŸ+™+ž-‰ˆÛˆCØ‰F�J‰J�sŽOó ñ (ð €Hr    c                   ó`   • \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 r SS jrS rSrg)ÚFanoutAlgorithmé¦   c                 ó„   • Xl         X l        [        U5      U l        U(       a  [        U l        g U R
                  U l        g rA   )r   r   rI   Ú	rev_edgesÚprintÚ_null_print)Úselfr   r   Úverboses       r   Ú__init__ÚFanoutAlgorithm.__init__§   s-   € ØŒ
ØŒ
Ü-¨eÓ4ˆŒÞ%”Uˆ�
¨4×+;Ñ+;ˆ�
r    c                 ó"   • U R                  5       $ rA   )Úfind_fanout_in_function)rQ   s    r   ÚrunÚFanoutAlgorithm.run­   s   € Ø×+Ñ+Ó-Ð-r    c                 ó   • g rA   © )rQ   ÚargsÚkwargss      r   rP   ÚFanoutAlgorithm._null_print°   s   € Ør    c                 ó¼   • 0 nU R                    HI  nS U R                  U    5        H,  nU R                  U5      nU R                  SUSU5        XAU'   M.     MK     U$ )Nc              3   ó4   #   • U  H  oS :X  d  M
  Uv •  M     g7f)r   NrZ   )Ú.0Úxs     r   Ú	<genexpr>Ú:FanoutAlgorithm.find_fanout_in_function.<locals>.<genexpr>¶   s   é € ÐLÒ&: À8¹mŸ1™1Ò&:ùs   ‚	�	z>>z===)r   r   Úfind_fanoutrO   )rQ   ÚgotÚcur_noder   Údecref_blockss        r   rV   Ú'FanoutAlgorithm.find_fanout_in_function³   s^   € ØˆØŸ
œ
ˆHÙL d§j¡j°Ò&:ÖL�Ø $× 0Ñ 0°Ó :�Ø—
‘
˜4 ¨5°-Ô@Ø -�H“ó Mñ #ð
 ˆ
r    c                 ó¢   • U R                  U5      nU R                  SU5        U(       d  g U R                  X[        S9(       d  g [	        U5      $ )NÚ
candidates)Úentry)Úfind_decref_candidatesrO   Úverify_non_overlappingÚENTRYrB   )rQ   Ú	head_noderg   s      r   rd   ÚFanoutAlgorithm.find_fanout¼   sN   € Ø×3Ñ3°IÓ>ˆØ�
‰
�< Ô/ÞØØ×*Ñ*Ø¬Eð +ö 
ð Ü�=Ó!Ð!r    c                 ó\  • U R                  SR                  SS5      5        [        U5      nU(       aù  UR                  5       n[	        5       nU/nAU(       aË  UR                  5       nU R                  SUSU5        XV;   a  M2  XS:X  a  U R                  SU5        gUR                  U5        U R                  SU S	U R                  U5       35        U R                  U5       H3  nX‚;   a  U R                  S
5          gX�:w  d  M"  UR                  U5        M5     U(       a  MË  U(       a  Mù  g)Nrm   éP   Ú-rf   Ú|z%!! failed because we arrived at entryFz   z preds z.!! reject because predecessor in decref_blocksT)rO   Úcenterr   ÚpoprB   rD   Úget_predecessorsr%   )	rQ   ro   rg   rk   Útodorf   ÚvisitedÚ	workstackÚpreds	            r   rm   Ú&FanoutAlgorithm.verify_non_overlappingÇ   s  € Ø�
‰
Ð+×2Ñ2°2°sÓ;Ô<ô �MÓ"ˆÞØ—x‘x“zˆHÜ“eˆGà!˜
ˆIØÞØ$Ÿ=™=›?�Ø—
‘
˜: x°°iÔ@ØÓ&ÙØÓ$à—J‘JØ?Àôð !Ø—‘˜HÔ%à—
‘
Ø˜(˜ 7¨4×+@Ñ+@ÀÓ+JÐ*KÐLôð !×1Ñ1°(Ö;�DØÓ,àŸ
™
ØLôñ  %ØÕ(à!×(Ñ(¨Ö.ñ <÷! �)÷ ˆdðB r    c                 ó2   • [        U R                  U   5      $ rA   )Útupler   ©rQ   Únodes     r   Úget_successorsÚFanoutAlgorithm.get_successorsï   s   € Ü�T—Z‘Z Ñ%Ó&Ð&r    c                 ó2   • [        U R                  U   5      $ rA   )r~   rN   r   s     r   rw   Ú FanoutAlgorithm.get_predecessorsò   s   € Ü�T—^‘^ DÑ)Ó*Ð*r    c                 ó&   • SU R                   U   ;   $ )Nr   )r   r   s     r   Ú
has_decrefÚFanoutAlgorithm.has_decrefõ   s   € Ø˜4Ÿ:™: dÑ+Ñ+Ð+r    c                 ó”  • S[        U5      -  nU R                  USX!5        US::  a  gX;   a
  XS   :X  a  ggU R                  U5      (       a$  UR                  U5        U R                  US5        gUS-  nX!4-  nSnU R	                  U5       H   nU R                  XrU5      (       d  Sn  OSnM"     U R                  USU 35        U$ )	NÚ Úwalkr   FTzfound decrefé   zret )ÚlenrO   r†   rD   r�   Úwalk_child_for_decref)rQ   rf   Ú
path_stackrg   ÚdepthÚindentÚfoundÚchilds           r   r�   Ú%FanoutAlgorithm.walk_child_for_decrefø   sß   € ð ”s˜:“Ñ&ˆØ�
‰
�6˜6 :Ô8Ø�A‹:ØØÓ!Ø a™=Ó(ØØØ�?‰?˜8×$Ñ$Ø×Ñ˜hÔ'Ø�J‰J�v˜~Ô.Øà�‰
ˆØ�kÑ!ˆ
ØˆØ×(Ñ(¨Ö2ˆEØ×-Ñ-Ø =÷ñ ð �Ùà’ñ 3ð 	�
‰
�6˜T % ˜>Ô*Øˆr    c                 óò   • U R                  SR                  SS5      5        U4nSn[        5       nU R                  U5       H   nU R	                  XRU5      (       d  Sn  OSnM"     U(       d
  [        5       $ U$ )Nrl   rr   rs   FT)rO   ru   rB   r�   r�   )rQ   rf   rŽ   r‘   rg   r’   s         r   rl   Ú&FanoutAlgorithm.find_decref_candidates  s}   € à�
‰
Ð+×2Ñ2°2°sÓ;Ô<Ø�[ˆ
ØˆÜ›ˆØ×(Ñ(¨Ö2ˆEØ×-Ñ-Ø =÷ñ ð �Ùà’ñ 3ö Ü“5ˆLà Ð r    )r   r   rO   rN   N)F)é
   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rS   rW   rP   rV   rd   rm   r�   rw   r†   r�   rl   Ú__static_attributes__rZ   r    r   rK   rK   ¦   s?   † ô<ò.òòò	"ò&òP'ò+ò,ð :<ôõ>!r    rK   c            
      ó\  • [        5       u  pn[        5       nU H+  nUR                  USU S3SR                  X   5      -   S9  M-     UR	                  5        H  u  pEU H  nUR                  XF5        M     M!     UR                  5         [        XSS9nUR                  5       nX(:X  d   eg )NÚrectÚ
z\l)ÚshapeÚlabelT)rR   )	r?   r   r€   ÚjoinrC   ÚedgeÚviewrK   rW   )	r   r   r   r   r€   Úchildrenr’   Úalgore   s	            r   Ú
check_oncer¦   +  s�   € Ü#›XÑ€E�(ô 	‹	€AÛˆØ	�‰ˆt˜6¨D¨6°¨°u·z±zÀ%Á+Ó7NÑ)NˆÓOñ àŸ+™+ž-‰ˆÛˆEØ�F‰F�4Öó ñ (ð ‡F�F„Hä˜5°Ñ6€DØ
�(‰(‹*€CØ‹?Ð‰?r    c                  ó.  • [        [        5       R                  5       5       He  u  pU R                  S5      (       d  M  [	        U R                  SS5      5        U" 5       u  p#n[        X#5      nUR                  5       nXF:X  a  Me   e   [	        S5        g )NÚcaserr   rs   z
ALL PASSED)r   ÚglobalsrC   Ú
startswithrO   ru   rK   rW   )ÚkÚfnr   r   r   r¥   re   s          r   Ú	check_allr­   =  su   € Ü”g“i—o‘oÓ'Ö(‰ˆØ�<‰<˜×ÓÜ�R�D—.‘.  SÓ)Ô*Ù%'£TÑ"ˆE˜(Ü" 5Ó0ˆDØ—(‘(“*ˆCØ•?Ð"�?ñ )ô 
ˆ,Õr    Ú__main__N)Ú__doc__Úgraphvizr   ÚImportErrorÚcollectionsr   rn   r   r"   r(   r+   r-   r/   r1   r3   r6   r8   r;   r=   r?   rI   rK   r¦   r­   r—   rZ   r    r   Ú<module>r³      s¤   ðñð
	Ý õ $ð 	€ò"ò6"ò"ò"ò"ò"ò"ò"ò"ò"ò"ò"ò"ò÷B!ñ B!òJò$ð ˆzÓá…Kð øðA
 ó 	Ùð	ús   „A ÁA$Á#A$