Ë
    ÃÓ^jC(  ã                   ó¶  — d Z ddlZddlZddlZddlZddlZddlmZmZ erddl	m
Z
 ej                  d   ej                  d   ej                  d   hZej                  ej                  d	   «       ej                  d
k\  r=ej                  ej                  d   «       ej                  ej                  d   «       nej                  ej                  d   «       dej                  cxk  rdk  r!n nej                  ej                  d   «       ej                  dk\  rej                  ej                  d   «        eej                   ej"                  z   «      ZeD � ch c]  } ej&                  |    ’Œ c} Z eej*                  «      Z eej.                  «      Zej2                  Zded   dedef   fd„Zded   ded   fd„Zded   ded   fd„Zded   ddfd„Z ded   ddfd„Z!ejD                   G d„ d«      «       Z#ded   dddee   fd„Z$ejD                   G d„ d «      «       Z%ejD                   G d!„ d"«      «       Z&ded   dee'z  fd#„Z(yc c} w )$a¹  
This module provides utilities for analyzing and optimizing Python bytecode.
Key functionality includes:
- Dead code elimination
- Jump instruction optimization
- Stack size analysis and verification
- Live variable analysis
- Line number propagation and cleanup
- Exception table handling for Python 3.11+

The utilities in this module are used to analyze and transform bytecode
for better performance while maintaining correct semantics.
é    N)ÚAnyÚTYPE_CHECKINGé   )ÚInstructionÚRETURN_VALUEÚJUMP_FORWARDÚRAISE_VARARGSÚRERAISE©é   é   ÚJUMP_BACKWARDÚJUMP_ABSOLUTE)r   é   )r   é   ÚRETURN_CONST)r   é   ÚJUMP_BACKWARD_NO_INTERRUPTÚinstsr   Úreturnc                 ó`   — i }t        | «      D ]  \  }}||v rt        d|› d�«      ‚|||<   Œ |S )z¢
    Get a mapping from instruction memory address to index in instruction list.
    Additionally checks that each instruction only appears once in the list.
    zduplicate instruction at index z in instruction list)Ú	enumerateÚAssertionError)r   ÚindexofÚiÚinsts       új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/bytecode_analysis.pyÚget_indexofr   5   sT   € ð €GÜ˜UÓ#ò ‰ˆˆ4Ø�7‰?Ü Ø1°!°Ð4HÐIóð ð ˆ�Šðð €Nó    Úinstructionsc           
      ó  ‡ ‡‡‡— t        ‰ «      Št        «       Šdt        ddfˆˆˆ ˆfd„Š ‰d«       t        j                  dk\  �rt        ‰«      }t        ‰ «      D ]ù  \  }}|‰v sŒ|j                  sŒt        j                  |‰|j                  j                     «      }|t        |«      k\  rt        d«      ‚t        j                  |‰|j                  j                     «      dz
  }|dk  rt        d	«      ‚||   |cxk  r||   k  sn t        d
|› d||   › d||   › d�«      ‚‰ ||      |j                  _
        ‰ ||      |j                  _        Œû t        ‰ «      D ��cg c]  \  }}|‰v sŒ|‘Œ c}}S c c}}w )zDead code eliminationÚstartr   Nc                 óˆ  •— t        | t        ‰«      «      D ]©  }|‰v r y ‰j                  |«       ‰|   }|j                  r ‰‰|j                  j                     «       |j
                  t        v r:|j                  €t        d|j                  › d�«      ‚ ‰‰|j                     «       |j
                  t        v sŒ© y  y )Nújump instruction ú has no target)
ÚrangeÚlenÚaddÚexn_tab_entryÚtargetÚopcodeÚJUMP_OPCODESr   ÚopnameÚTERMINAL_OPCODES)r"   r   r   Úfind_live_coder   r    Ú	live_codes      €€€€r   r/   z(remove_dead_code.<locals>.find_live_codeJ   sµ   ø€ Ü�uœc ,Ó/Ó0ò 	ˆAØ�I‰~ÙØ�M‰M˜!ÔØ ‘?ˆDØ×!Ò!Ù˜w t×'9Ñ'9×'@Ñ'@ÑAÔBØ�{‰{œlÑ*Ø—;‘;Ð&Ü(Ø+¨D¯K©K¨=¸ÐGóð ñ ˜w t§{¡{Ñ3Ô4Ø�{‰{Ô.Ò.Ùñ	r   r   r   z9no live instruction found at or after exn_tab_entry startr   z8no live instruction found at or before exn_tab_entry endzinstruction z not within live range [z, ú])r   ÚsetÚintÚsysÚversion_infoÚsortedr   r)   ÚbisectÚbisect_leftr"   r'   r   Úbisect_rightÚend)	r    Úlive_idxr   r   Ú	start_idxÚend_idxr/   r   r0   s	   `     @@@r   Úremove_dead_coder>   E   s¬  û€ ä˜,Ó'€GÜ“€Iðœcð  d÷ ð ñ" �1Ôô ×Ñ˜7Ó"Ü˜)Ó$ˆÜ  Ó.ò 	I‰GˆAˆtØ�IŠ~ $×"4Ó"4ä"×.Ñ.Ø˜g d×&8Ñ&8×&>Ñ&>Ñ?ó�	ð ¤ H£Ò-Ü(ØSóð ô
 ×'Ñ'¨°'¸$×:LÑ:L×:PÑ:PÑ2QÓRÐUVÑVð ð ˜Q’;Ü(ØRóð ð ! Ñ+¨qÔE°H¸WÑ4EÔEÜ(Ø& q cð *Ø$ YÑ/Ð0°°8¸GÑ3DÐ2EÀQðHóð ð ,8¸ÀÑ8KÑ+L�×"Ñ"Ô(Ø)5°h¸wÑ6GÑ)H�×"Ñ"Õ&ð1	Iô4 !*¨,Ó 7×J‘W�Q˜¸1À	º>ŠDÓJÐJùÓJs   Å'E<Å4E<c                 óî   — t        j                  | «      D ��ch c]-  \  }}|j                  dk(  r|j                  |u rt	        |«      ’Œ/ }}}| D �cg c]  }t	        |«      |vsŒ|‘Œ c}S c c}}w c c}w )z'Eliminate jumps to the next instructionr   )Ú	itertoolsÚpairwiser-   r*   Úid)r    ÚaÚbÚpointless_jumpsr   s        r   Úremove_pointless_jumpsrF   €   ss   € ô ×&Ñ& |Ó4÷áˆAˆqØ�8‰8�Ò&¨1¯8©8°q©=ô 	ˆ1�ð€Oñ ð
 *ÖM�T¬R°«X¸_Ò-LŠDÒMÐMùóùò
 Ns   ™2A,ÁA2Á%A2c                 ó4   ‡— dŠdˆfd„}| D ]
  } ||«       Œ y)zEEnsure every instruction has line number set in case some are removedNc                 óD   •— | j                   r| j                   Š‰| _         y ©N©Ústarts_line©r   Úcur_line_nos    €r   Úpopulate_line_numz.propagate_line_nums.<locals>.populate_line_numŽ   s   ø€ à×ÒØ×*Ñ*ˆKà&ˆÕr   ©r   r   r   N© )r    rN   r   rM   s      @r   Úpropagate_line_numsrQ   Š   s&   ø€ à€Kõ'ð ò  ˆÙ˜$Õñ r   c                 ó4   ‡— dŠdˆfd„}| D ]
  } ||«       Œ y)z;Remove extra starts line properties before packing bytecodeNc                 óf   •— | j                   €y | j                   ‰k(  rd | _         y | j                   Šy rI   rJ   rL   s    €r   Úremove_line_numz/remove_extra_line_nums.<locals>.remove_line_numž   s3   ø€ à×ÑÐ#ØØ×Ñ Ò,Ø#ˆDÕà×*Ñ*‰Kr   rO   rP   )r    rT   r   rM   s      @r   Úremove_extra_line_numsrU   ™   s(   ø€ ð €Kõ+ð ò ˆÙ˜Õñr   c                   ó>   — e Zd ZU ee   ed<   ee   ed<   ee   ed<   y)ÚReadsWritesÚreadsÚwritesÚvisitedN)Ú__name__Ú
__module__Ú__qualname__r2   r   Ú__annotations__rP   r   r   rW   rW   «   s   … àˆs‰8ƒOØ�‰HÓØ�‰XÔr   rW   Úinstructionc                 ó0  ‡ ‡‡‡‡— t        ‰ «      Št        t        «       t        «       t        «       «      Št        t        «       t        «       t        «       «      Šdt        dt        dd fˆˆ ˆˆˆfd„Š ‰‰‰|   «       ‰j                  ‰j                  z  S )NÚstater"   r   c                 ón  •— || j                   v ry | j                   j                  |«       t        |t        ‰«      «      D �]q  }‰|   }|j                  t
        v s|j                  t        v r¶d|j                  v sd|j                  v r>|j                  ‰j                  vr‚| j                  j                  |j                  «       n\d|j                  v r&| j                  j                  |j                  «       n(|j                  dk(  rnt        d|j                  › �«      ‚|j                  r  ‰‰‰|j                  j                     «       |j                  t        v r=|j                  €t        d|j                  › d�«      ‚ ‰‰‰|j                     «       ‰} |j                  t         v s�Œr y  y )NÚLOADÚDELETEÚSTOREÚ	MAKE_CELLz
unhandled r$   r%   )rZ   r(   r&   r'   r+   ÚHASLOCALÚHASFREEr-   ÚargvalrY   rX   ÚNotImplementedErrorr)   r*   r,   r   r.   )	ra   r"   r   r   r   r    ÚmayÚmustÚwalks	       €€€€€r   rm   zlivevars_analysis.<locals>.walk¹   sb  ø€ Ø�E—M‘MÑ!ØØ�‰×Ñ˜%Ô ä�uœc ,Ó/Ó0ó 	ˆAØ ‘?ˆDØ�{‰{œhÑ&¨$¯+©+¼Ñ*@Ø˜TŸ[™[Ñ(¨H¸¿¹Ñ,CØ—{‘{¨$¯+©+Ñ5ØŸ™Ÿ™¨¯©Õ4Ø §¡Ñ+Ø—L‘L×$Ñ$ T§[¡[Õ1Ø—[‘[ KÒ/Øä-°
¸4¿;¹;¸-Ð.HÓIÐIØ×!Ò!Ù�S˜' $×"4Ñ"4×";Ñ";Ñ<Ô=Ø�{‰{œlÑ*Ø—;‘;Ð&Ü(Ø+¨D¯K©K¨=¸ÐGóð ñ �S˜' $§+¡+Ñ.Ô/Ø�Ø�{‰{Ô.Ó.Ùñ-	r   )r   rW   r2   r3   rX   )r    r_   r   rk   rl   rm   s   ` @@@@r   Úlivevars_analysisrn   ²   sz   ü€ ô ˜,Ó'€GÜ”s“uœc›e¤S£UÓ+€DÜ
”c“eœS›U¤C£EÓ
*€Cð”Kð ¬ð °÷ ñ ñ: 	ˆˆw�{Ñ#Ô$Ø�:‰:˜Ÿ	™	Ñ!Ð!r   c                   ó   — e Zd ZU dZeed<   y)ÚFixedPointBoxTÚvalueN)r[   r\   r]   rq   Úboolr^   rP   r   r   rp   rp   Ú   s   … à€Eˆ4Ôr   rp   c                   ód   — e Zd ZU eez  ed<   eez  ed<   eed<   dd„Zdd deddfd	„Zd
eddfd„Z	y)Ú	StackSizeÚlowÚhighÚfixed_pointr   Nc                 óB   — d| _         d| _        d| j                  _        y )Nr   F)ru   rv   rw   rq   )Úselfs    r   ÚzerozStackSize.zeroå   s   € ØˆŒØˆŒ	Ø!&ˆ×ÑÕr   ÚotherÚnc                 ó.  — | j                   | j                  f}t        | j                   |j                   |z   «      | _         t        | j                  |j                  |z   «      | _        | j                   | j                  f|k7  rd| j                  _        y y ©NF©ru   rv   ÚminÚmaxrw   rq   )ry   r{   r|   Úpriors       r   Ú	offset_ofzStackSize.offset_ofê   sp   € Ø—‘˜4Ÿ9™9Ð%ˆÜ�t—x‘x §¡¨Q¡Ó/ˆŒÜ˜Ÿ	™	 5§:¡:°¡>Ó2ˆŒ	Ø�H‰H�d—i‘iÐ  EÒ)Ø%*ˆD×ÑÕ"ð *r   Údepthc                 óú   — | j                   | j                  f}t        | j                   |«      | _         t        | j                  |«      | _        | j                   | j                  f|k7  rd| j                  _        y y r~   r   )ry   r„   r‚   s      r   Úexn_tab_jumpzStackSize.exn_tab_jumpñ   s`   € Ø—‘˜4Ÿ9™9Ð%ˆÜ�t—x‘x Ó'ˆŒÜ˜Ÿ	™	 5Ó)ˆŒ	Ø�H‰H�d—i‘iÐ  EÒ)Ø%*ˆD×ÑÕ"ð *r   )r   N)
r[   r\   r]   r3   Úfloatr^   rp   rz   rƒ   r†   rP   r   r   rt   rt   ß   sN   … à	ˆu‰ÓØ
�‰+ÓØÓó'ð
+˜{ð +¨sð +°tó +ð+ #ð +¨$ô +r   rt   c           
      ó�  — | st        d«      ‚t        «       }| D �ci c]"  }|t        t        d«      t        d«      |«      “Œ$ }}|| d      j	                  «        t        d«      D �]m  }|j                  r �n^d|_        t        | | dd  d gz   «      D �]=  \  }}||   }|j                  t        vrG|€t        d|› �«      ‚t        |j                  |j                  d	¬
«      }||   j                  ||«       |j                  t        v rY|j                  €t        d|› �«      ‚||j                     j                  |t        |j                  |j                  d¬
«      «       |j                  sŒÝ|j                  j                   t#        |j                  j$                  «      z   dz   }||j                  j                     j'                  |«       �Œ@ �Œp t)        d„ |j+                  «       D «       «      }	t-        d„ |j+                  «       D «       «      }
|j                  st        d«      ‚|	dk  rt        d|	› �«      ‚|
S c c}w )Nz#instructions list must not be emptyÚinfz-infr   éd   Tr   zmissing next inst: F)Újumpzmissing target: c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrI   )ru   ©Ú.0Úxs     r   ú	<genexpr>z%stacksize_analysis.<locals>.<genexpr>  s   è ø€ Ò2˜ˆa�e�eÑ2ùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrI   )rv   r�   s     r   r�   z%stacksize_analysis.<locals>.<genexpr>  s   è ø€ Ò4˜!ˆq�v�vÑ4ùr‘   zfailed to reach fixed pointz1stack size analysis produced negative low value: )r   rp   rt   r‡   rz   r&   rq   Úzipr+   r.   Ústack_effectÚargrƒ   r,   r*   r)   r„   r3   Úlastir†   r€   Úvaluesr�   )r    rw   r   Ústack_sizesÚ_Ú	next_instÚ
stack_sizeÚeffr„   ru   rv   s              r   Ústacksize_analysisr�   ù   s1  € ÙÜÐBÓCÐCÜ“/€Kð !öàð 	Œiœ˜e›¤e¨F£m°[ÓAÑAð€Kð ð �˜Q‘Ñ ×%Ñ%Ô'ä�3‹Zó KˆØ×ÒÚØ ˆÔä" <°¸a¸bÐ1AÀTÀFÑ1JÓKó 	K‰OˆD�)Ø$ TÑ*ˆJØ�{‰{Ô"2Ñ2ØÐ$Ü(Ð+>¸t¸fÐ)EÓFÐFÜ" 4§;¡;°·±¸uÔE�Ø˜IÑ&×0Ñ0°¸SÔAØ�{‰{œlÑ*Ø—;‘;Ð&Ü(Ð+;¸D¸6Ð)BÓCÐCØ˜DŸK™KÑ(×2Ñ2Ø¤¨T¯[©[¸$¿(¹(ÈÔ Nôð ×!Ó!ð ×*Ñ*×0Ñ0´3°t×7IÑ7I×7OÑ7OÓ3PÑPÐSTÑT�Ø˜D×.Ñ.×5Ñ5Ñ6×CÑCÀEÖJò#	KðKô0 Ñ2˜[×/Ñ/Ó1Ô2Ó
2€CÜÑ4˜{×1Ñ1Ó3Ô4Ó4€Dà×ÒÜÐ:Ó;Ð;Ø
ˆQ‚wÜÐPÐQTÐPUÐVÓWÐWØ€KùòKs   œ'I))Ú__doc__r7   ÚdataclassesÚdisr@   r4   Útypingr   r   Úbytecode_transformationr   Úopmapr.   r(   r5   r2   ÚhasjrelÚhasjabsr,   r-   ÚJUMP_OPNAMESÚhaslocalrg   Úhasfreerh   r”   ÚlistÚdictr3   r   r>   rF   rQ   rU   Ú	dataclassrW   rn   rp   rt   r‡   r�   )r+   s   0r   ú<module>r¬      s¢  ðñó Û Û 
Û Û 
ß %ñ õ 5ð ‡I�IˆnÑØ‡I�IˆnÑØ‡I�IˆoÑðÐ ð × Ñ �S—Y‘Y˜yÑ)Ô *Ø×Ñ�wÒØ×Ñ˜Ÿ™ ?Ñ3Ô4Ø×Ñ˜Ÿ™ >Ñ2Õ3à×Ñ˜Ÿ™ ?Ñ3Ô4à
ˆc×ÑÔ( Õ(Ø×Ñ˜Ÿ™ >Ñ2Ô3Ø×Ñ�wÒØ×Ñ˜Ÿ™Ð#?Ñ@ÔAÙ�3—;‘; §¡Ñ,Ó-€Ø1=Ö> v�—
‘
˜6Ó"Ò>€Ùˆs�|‰|Ó€Ù
ˆc�k‰kÓ
€à×Ñ€ð�t˜MÑ*ð ¨t°MÀ3Ð4FÑ/Gó ð 8K 4¨Ñ#6ð 8K¸4ÀÑ;Nó 8KðvN¨¨mÑ)<ð NÀÀmÑATó Nð  d¨=Ñ&9ð  ¸dó  ð¨¨mÑ)<ð Àó ð$ ×Ñ÷ð ó ðð%"Ø�}Ñ%ð%"Ø4Að%"àˆ�Xó%"ðP ×Ñ÷ð ó ðð ×Ñ÷+ð +ó ð+ð2) T¨-Ñ%8ð )¸SÀ5¹[ô )ùòW ?s   Å!I