Ë
    g^(hM!  ã                   ó  — d 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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
   «       ej                  dk\  r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j,                  Zd„ Zd„ Zd„ Zd„ Zd„ Zej8                   G d„ d«      «       Zd„ Zej8                   G d„ d«      «       Zej8                   G d„ d«      «       Z dee!e"f   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ÚUnionÚRETURN_VALUEÚJUMP_FORWARDÚRAISE_VARARGSÚRERAISE©é   é   ÚJUMP_BACKWARDÚJUMP_ABSOLUTE)r
   é   ÚRETURN_CONST)r
   é   ÚJUMP_BACKWARD_NO_INTERRUPTc                 óF   — i }t        | «      D ]  \  }}||vsJ ‚|||<   Œ |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.
    )Ú	enumerate)ÚinstsÚindexofÚiÚinsts       ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/bytecode_analysis.pyÚget_indexofr   0   s?   € ð
 €GÜ˜UÓ#ò ‰ˆˆ4Ø˜7Ñ"Ð"Ð"Øˆ�Šðð €Nó    c                 óœ  ‡ ‡‡‡— t        ‰ «      Št        «       Šˆˆˆ ˆfd„Š ‰d«       t        j                  dk\  rèt	        ‰«      }t        ‰ «      D ]Ï  \  }}|‰v sŒ|j                  sŒt        j                  |‰|j                  j                     «      }|t        |«      k  sJ ‚t        j                  |‰|j                  j                     «      dz
  }|dk\  sJ ‚||   |cxk  r	||   k  sJ ‚ J ‚‰ ||      |j                  _	        ‰ ||      |j                  _        ŒÑ t        ‰ «      D ��cg c]  \  }}|‰v sŒ|‘Œ c}}S c c}}w )zDead code eliminationc                 ó>  •— t        | t        ‰«      «      D ]„  }|‰v r y ‰j                  |«       ‰|   }|j                  r ‰‰|j                  j                     «       |j
                  t        v r ‰‰|j                     «       |j
                  t        v sŒ„ y  y ©N)ÚrangeÚlenÚaddÚexn_tab_entryÚtargetÚopcodeÚJUMP_OPCODESÚTERMINAL_OPCODES)Ústartr   r   Úfind_live_coder   ÚinstructionsÚ	live_codes      €€€€r   r'   z(remove_dead_code.<locals>.find_live_codeA   sŒ   ø€ Ü�uœc ,Ó/Ó0ò 
	ˆAØ�I‰~ÙØ�M‰M˜!ÔØ ‘?ˆDØ×!Ò!Ù˜w t×'9Ñ'9×'@Ñ'@ÑAÔBØ�{‰{œlÑ*Ù˜w t§{¡{Ñ3Ô4Ø�{‰{Ô.Ò.Ùñ
	r   r   r	   é   )r   ÚsetÚsysÚversion_infoÚsortedr   r!   ÚbisectÚbisect_leftr&   r   Úbisect_rightÚend)	r(   Úlive_idxr   r   Ú	start_idxÚend_idxr'   r   r)   s	   `     @@@r   Úremove_dead_coder6   <   sT  û€ ä˜,Ó'€GÜ“€I÷ñ �1Ôô ×Ñ˜7Ò"Ü˜)Ó$ˆÜ  Ó.ò 	I‰GˆAˆtØ�IŠ~ $×"4Ó"4ä"×.Ñ.Ø˜g d×&8Ñ&8×&>Ñ&>Ñ?ó�	ð !¤3 x£=Ò0Ð0Ð0ô ×'Ñ'¨°'¸$×:LÑ:L×:PÑ:PÑ2QÓRÐUVÑVð ð  !’|Ð#�|Ø 	Ñ*¨aÔD°8¸GÑ3DÒDÐDÑDÐDÐDØ+7¸ÀÑ8KÑ+L�×"Ñ"Ô(Ø)5°h¸wÑ6GÑ)H�×"Ñ"Õ&ð	Iô  !*¨,Ó 7×J‘W�Q˜¸1À	º>ŠDÓJÐJùÓJs   Ä3EÅ Ec                 óâ   — t        | | dd «      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*   Nr   )ÚzipÚopnamer"   Úid)r(   ÚaÚbÚpointless_jumpsr   s        r   Úremove_pointless_jumpsr>   i   sv   € ô ˜ l°1°2Ð&6Ó7÷áˆAˆqØ�8‰8�Ò&¨1¯8©8°q©=ô 	ˆ1�ð€Oñ ð
 *ÖM�T¬R°«X¸_Ò-LŠDÒMÐMùóùò
 Ns   “2A&ÁA,ÁA,c                 ó2   ‡— dŠˆfd„}| D ]
  } ||«       Œ y)zEEnsure every instruction has line number set in case some are removedNc                 óD   •— | j                   r| j                   Š‰| _         y r   ©Ústarts_line©r   Úcur_line_nos    €r   Úpopulate_line_numz.propagate_line_nums.<locals>.populate_line_numw   s   ø€ à×ÒØ×*Ñ*ˆKà&ˆÕr   © )r(   rE   r   rD   s      @r   Úpropagate_line_numsrG   s   s&   ø€ à€Kô'ð ò  ˆÙ˜$Õñ r   c                 ó2   ‡— dŠˆfd„}| D ]
  } ||«       Œ y)z;Remove extra starts line properties before packing bytecodeNc                 óf   •— | j                   €y | j                   ‰k(  rd | _         y | j                   Šy r   rA   rC   s    €r   Úremove_line_numz/remove_extra_line_nums.<locals>.remove_line_num‡   s3   ø€ à×ÑÐ#ØØ×Ñ Ò,Ø#ˆDÕà×*Ñ*‰Kr   rF   )r(   rJ   r   rD   s      @r   Úremove_extra_line_numsrK   ‚   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__r+   r   Ú__annotations__rF   r   r   rM   rM   ”   s   … àˆs‰8ƒOØ�‰HÓØ�‰XÔr   rM   c                 ó  ‡ ‡‡‡‡— t        ‰ «      Št        t        «       t        «       t        «       «      Št        t        «       t        «       t        «       «      Šˆˆ ˆˆˆfd„Š ‰‰‰|   «       ‰j                  ‰j                  z  S )Nc                 ó$  •— || j                   v ry | j                   j                  |«       t        |t        ‰«      «      D �]L  }‰|   }|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                     «       ‰} |j                  t        v s�ŒM y  y )NÚLOADÚDELETEÚSTOREÚ	MAKE_CELLz
unhandled )rP   r    r   r   r#   ÚHASLOCALÚHASFREEr9   ÚargvalrO   rN   ÚNotImplementedErrorr!   r"   r$   r%   )	Ústater&   r   r   r   r(   ÚmayÚmustÚwalks	       €€€€€r   rb   zlivevars_analysis.<locals>.walk    s9  ø€ Ø�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Ñ*Ù�S˜' $§+¡+Ñ.Ô/Ø�Ø�{‰{Ô.Ó.Ùñ%	r   )r   rM   r+   rN   )r(   Úinstructionr   r`   ra   rb   s   ` @@@@r   Úlivevars_analysisrd   ›   sc   ü€ Ü˜,Ó'€GÜ”s“uœc›e¤S£UÓ+€DÜ
”c“eœS›U¤C£EÓ
*€C÷ð ñ2 	ˆˆw�{Ñ#Ô$Ø�:‰:˜Ÿ	™	Ñ!Ð!r   c                   ó   — e Zd ZU dZeed<   y)ÚFixedPointBoxTÚvalueN)rQ   rR   rS   rg   ÚboolrT   rF   r   r   rf   rf   ½   s   … à€Eˆ4Ôr   rf   c                   óR   — e Zd ZU eeef   ed<   eeef   ed<   eed<   d„ Zd„ Z	d„ Z
y)Ú	StackSizeÚlowÚhighÚfixed_pointc                 óB   — d| _         d| _        d| j                  _        y )Nr   F)rk   rl   rm   rg   )Úselfs    r   ÚzerozStackSize.zeroÈ   s   € ØˆŒØˆŒ	Ø!&ˆ×ÑÕr   c                 ó.  — | j                   | j                  f}t        | j                   |j                   |z   «      | _         t        | j                  |j                  |z   «      | _        | j                   | j                  f|k7  rd| j                  _        y y ©NF©rk   rl   ÚminÚmaxrm   rg   )ro   ÚotherÚnÚ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   c                 óú   — | j                   | j                  f}t        | j                   |«      | _         t        | j                  |«      | _        | j                   | j                  f|k7  rd| j                  _        y y rr   rs   )ro   Údepthrx   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   N)rQ   rR   rS   r   ÚintÚfloatrT   rf   rp   ry   r|   rF   r   r   rj   rj   Â   s5   … à	ˆs�EˆzÑ	ÓØ
��U�
Ñ
ÓØÓò'ò
+ó+r   rj   Úreturnc           
      ó$  — | sJ ‚t        «       }| D �ci c]"  }|t        t        d«      t        d«      |«      “Œ$ }}|| d      j                  «        t	        d«      D �]O  }|j
                  r �n@d|_        t        | | dd  d gz   «      D �]  \  }}||   }|j                  t        vrC|€
J d|› �«       ‚t        |j                  |j                  d¬	«      }||   j                  ||«       |j                  t        v r?||j                     j                  |t        |j                  |j                  d¬	«      «       |j                  sŒ¿|j                  j                  t!        |j                  j"                  «      z   dz   }||j                  j                     j%                  |«       �Œ" �ŒR 	 t-        d
„ |j/                  «       D «       «      }	t1        d„ |j/                  «       D «       «      }
|j
                  sJ d«       ‚|	dk\  sJ ‚|
S c c}w )NÚinfz-infr   éd   Tr*   zmissing next inst: F)Újumpc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )rk   ©Ú.0Úxs     r   ú	<genexpr>z%stacksize_analysis.<locals>.<genexpr>ÿ   s   è ø€ Ò2˜ˆa�e�eÑ2ùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )rl   r…   s     r   rˆ   z%stacksize_analysis.<locals>.<genexpr>   s   è ø€ Ò4˜!ˆq�v�vÑ4ùr‰   zfailed to reach fixed point)rf   rj   r~   rp   r   rg   r8   r#   r%   Ústack_effectÚargry   r$   r"   r!   r{   r}   Úlastir|   Úprintrk   rl   rt   Úvaluesru   )r(   rm   r   Ústack_sizesÚ_Ú	next_instÚ
stack_sizeÚeffr{   rk   rl   s              r   Ústacksize_analysisr•   Ü   s  € ÙÐˆ<Ü“/€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Ø Ð,ÐJÐ0CÀDÀ6Ð.JÓJÐ,Ü" 4§;¡;°·±¸uÔE�Ø˜IÑ&×0Ñ0°¸SÔAØ�{‰{œlÑ*Ø˜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ð* ô
 Ñ2˜[×/Ñ/Ó1Ô2Ó
2€CÜÑ4˜{×1Ñ1Ó3Ô4Ó4€Dà×ÒÐ;Ð;Ó;ÐØ�!Š8€Oˆ8Ø€KùòKs   “'H)$Ú__doc__r/   ÚdataclassesÚdisr,   Útypingr   r   Úopmapr%   r    r-   r+   ÚhasjrelÚhasjabsr$   r9   ÚJUMP_OPNAMESÚhaslocalr[   Úhasfreer\   r‹   r   r6   r>   rG   rK   Ú	dataclassrM   rd   rf   rj   r}   r~   r•   )r#   s   0r   ú<module>r¡      sñ  ðñó Û Û 
Û 
ß ð ‡I�IˆnÑØ‡I�IˆnÑØ‡I�IˆoÑðÐ ð × Ñ �S—Y‘Y˜yÑ)Ô *Ø×Ñ�wÒØ×Ñ˜Ÿ™ ?Ñ3Ô4Ø×Ñ˜Ÿ™ >Ñ2Õ3à×Ñ˜Ÿ™ ?Ñ3Ô4Ø×Ñ�wÒØ×Ñ˜Ÿ™ >Ñ2Ô3Ø×Ñ�wÒØ×Ñ˜Ÿ™Ð#?Ñ@ÔAÙ�3—;‘; §¡Ñ,Ó-€Ø1=Ö> v�—
‘
˜6Ó"Ò>€Ùˆs�|‰|Ó€Ù
ˆc�k‰kÓ
€à×Ñ€ò	ò*KòZNò òð$ ×Ñ÷ð ó ðò"ðD ×Ñ÷ð ó ðð ×Ñ÷+ð +ó ð+ð2(¨¨c°5¨jÑ(9ô (ùòg ?s   ÅG>