§
    ž²Åj�#  ã                   óÒ  — d dl Z d dlZd dlZd dlZd dlmZmZmZ ej        d         ej        d         ej        d         hZ	ej
        dk    r e	                     ej        d         ¦  «         ej
        dk    rAe	                     ej        d	         ¦  «         e	                     ej        d         ¦  «         n e	                     ej        d
         ¦  «         ej
        dk    r e	                     ej        d         ¦  «         ej
        dk    r e	                     ej        d         ¦  «          eej        ej        z   ¦  «        Zd„ eD ¦   «         Z eej        ¦  «        Z eej        ¦  «        Zej        Zd„ Zd„ Zd„ Zd„ Zd„ Zej         G d„ d¦  «        ¦   «         Zd„ Zej         G d„ d¦  «        ¦   «         Zej         G d„ d¦  «        ¦   «         Zdee e!f         fd„Z"dS )é    N)ÚAnyÚSetÚUnionÚRETURN_VALUEÚJUMP_FORWARDÚRAISE_VARARGS©é   é	   ÚRERAISE©r
   é   ÚJUMP_BACKWARDÚJUMP_ABSOLUTE)r
   é   ÚRETURN_CONST)r
   é   ÚJUMP_BACKWARD_NO_INTERRUPTc                 ó2   — h | ]}t           j        |         ’ŒS © )ÚdisÚopname)Ú.0Úopcodes     úPC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/bytecode_analysis.pyú	<setcomp>r      s   € Ð>Ð>Ð> v•”
˜6Ô"Ð>Ð>Ð>ó    c                 óJ   — 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       r   Úget_indexofr$   "   sE   € ð
 €GÝ˜UÑ#Ô#ð ð ‰ˆˆ4Ø˜7Ð"Ð"Ð"Ð"Øˆ�‰ˆØ€Nr   c                 óŒ  ‡ ‡‡‡— t          ‰ ¦  «        Št          ¦   «         Šˆˆˆ ˆfd„Š ‰d¦  «         t          j        dk    ræt	          ‰¦  «        }t          ‰ ¦  «        D ]Ç\  }}|‰v r¾|j        r·t          j        |‰|j        j	                 ¦  «        }|t          |¦  «        k     sJ ‚t          j        |‰|j        j                 ¦  «        dz
  }|dk    sJ ‚||         |cxk    r||         k    sn J ‚‰ ||                  |j        _	        ‰ ||                  |j        _        ŒÈˆfd„t          ‰ ¦  «        D ¦   «         S )zDead code eliminationc                 ó>  •— t          | t          ‰¦  «        ¦  «        D ]}}|‰v r d S ‰                     |¦  «         ‰|         }|j        r ‰‰|j        j                 ¦  «         |j        t          v r ‰‰|j                 ¦  «         |j        t          v r d S Œ~d S ©N)ÚrangeÚlenÚaddÚexn_tab_entryÚtargetr   ÚJUMP_OPCODESÚTERMINAL_OPCODES)Ústartr"   r#   Úfind_live_coder!   ÚinstructionsÚ	live_codes      €€€€r   r0   z(remove_dead_code.<locals>.find_live_code3   s¾   ø€ Ý�u�c ,Ñ/Ô/Ñ0Ô0ð 
	ð 
	ˆAØ�Iˆ~ˆ~Ø��Ø�MŠM˜!ÑÔÐØ ”?ˆDØÔ!ð CØ�˜w tÔ'9Ô'@ÔAÑBÔBÐBØŒ{�lÐ*Ð*Ø�˜w t¤{Ô3Ñ4Ô4Ð4ØŒ{Õ.Ð.Ð.Ø��ð /ð
	ð 
	r   r   r   é   c                 ó"   •— g | ]\  }}|‰v ¯	|‘ŒS r   r   )r   r"   r#   r2   s      €r   ú
<listcomp>z$remove_dead_code.<locals>.<listcomp>X   s"   ø€ ÐJÐJÐJ‘W�Q˜¸1À	¸>¸>ˆD¸>¸>¸>r   )r$   ÚsetÚsysÚversion_infoÚsortedr   r+   ÚbisectÚbisect_leftr/   r)   Úbisect_rightÚend)	r1   Úlive_idxr"   r#   Ú	start_idxÚend_idxr0   r!   r2   s	   `     @@@r   Úremove_dead_coderA   .   sŽ  øøøø€ å˜,Ñ'Ô'€GÝ‘”€Iðð ð ð ð ð ð ð ð €N�1ÑÔÐõ Ô˜7Ò"Ð"Ý˜)Ñ$Ô$ˆÝ  Ñ.Ô.ð 	Ið 	I‰GˆAˆtØ�Iˆ~ˆ~ $Ô"4ˆ~å"Ô.Ø˜g dÔ&8Ô&>Ô?ñô �	ð !¥3 x¡=¤=Ò0Ð0Ð0Ð0õ Ô'¨°'¸$Ô:LÔ:PÔ2QÑRÔRÐUVÑVð ð  !’|�|�|�|Ø 	Ô*¨aÐDÐDÒDÐD°8¸GÔ3DÒDÐDÐDÐDÐDÐDØ+7¸ÀÔ8KÔ+L�Ô"Ô(Ø)5°h¸wÔ6GÔ)H�Ô"Ô&øàJÐJÐJÐJ¥	¨,Ñ 7Ô 7ÐJÑJÔJÐJr   c                 ód   ‡— d„ t          | | dd…         ¦  «        D ¦   «         Šˆfd„| D ¦   «         S )z'Eliminate jumps to the next instructionc                 óZ   — h | ](\  }}|j         d k    ¯|j        |u ¯t          |¦  «        ’Œ)S )r   )r   r,   Úid)r   ÚaÚbs      r   r   z)remove_pointless_jumps.<locals>.<setcomp>]   sA   € ð ð ð áˆAˆqØŒ8�Ò&Ð&¨1¬8°q¨=¨=õ 	ˆ1‰Œà+8¨=¨=r   r3   Nc                 ó6   •— g | ]}t          |¦  «        ‰v¯|‘ŒS r   )rD   )r   r#   Úpointless_jumpss     €r   r5   z*remove_pointless_jumps.<locals>.<listcomp>b   s)   ø€ ÐMÐMÐM�T­R°©X¬X¸_Ð-LÐ-LˆDÐ-LÐ-LÐ-Lr   )Úzip)r1   rH   s    @r   Úremove_pointless_jumpsrJ   [   sQ   ø€ ðð å˜ l°1°2°2Ô&6Ñ7Ô7ðñ ô €Oð
 NÐMÐMÐM˜\ÐMÑMÔMÐMr   c                 ó6   ‡— dŠˆfd„}| D ]} ||¦  «         ŒdS )zEEnsure every instruction has line number set in case some are removedNc                 ó2   •— | j         r| j         Š‰| _         d S r'   ©Ústarts_line©r#   Úcur_line_nos    €r   Úpopulate_line_numz.propagate_line_nums.<locals>.populate_line_numi   s$   ø€ àÔð 	+ØÔ*ˆKà&ˆÔÐÐr   r   )r1   rQ   r#   rP   s      @r   Úpropagate_line_numsrR   e   sP   ø€ à€Kð'ð 'ð 'ð 'ð 'ð ð  ð  ˆØÐ˜$ÑÔÐÐð ð  r   c                 ó6   ‡— dŠˆfd„}| D ]} ||¦  «         ŒdS )z;Remove extra starts line properties before packing bytecodeNc                 óP   •— | j         €d S | j         ‰k    r	d | _         d S | j         Šd S r'   rM   rO   s    €r   Úremove_line_numz/remove_extra_line_nums.<locals>.remove_line_numy   s9   ø€ àÔÐ#ØˆFØÔ Ò,Ð,Ø#ˆDÔÐÐàÔ*ˆKˆKˆKr   r   )r1   rU   r#   rP   s      @r   Úremove_extra_line_numsrV   t   sQ   ø€ ð €Kð+ð +ð +ð +ð +ð ð ð ˆØˆ˜ÑÔÐÐðð r   c                   óR   — e Zd ZU ee         ed<   ee         ed<   ee         ed<   dS )ÚReadsWritesÚreadsÚwritesÚvisitedN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r   r   rX   rX   †   s?   € € € € € € àˆsŒ8€O€O�OØ�ŒHÐÐÑØ�ŒXÐÐÑÐÐr   rX   c                 óR  ‡ ‡‡‡‡— t          ‰ ¦  «        Št          t          ¦   «         t          ¦   «         t          ¦   «         ¦  «        Št          t          ¦   «         t          ¦   «         t          ¦   «         ¦  «        Šˆˆ ˆˆˆfd„Š ‰‰‰|         ¦  «         ‰j        ‰j        z  S )Nc                 ó¬  •— || j         v rd S | j                              |¦  «         t          |t          ‰¦  «        ¦  «        D �]}‰|         }|j        t
          v s|j        t          v rŒd|j        v s	d|j        v r.|j        ‰j	        vr| j
                             |j        ¦  «         nLd|j        v r | j	                             |j        ¦  «         n#|j        dk    rnt          d|j        › �¦  «        ‚|j        r ‰‰‰|j        j                 ¦  «         |j        t          v r ‰‰‰|j                 ¦  «         ‰} |j        t          v r d S �Œd S )NÚLOADÚDELETEÚSTOREÚ	MAKE_CELLz
unhandled )r[   r*   r(   r)   r   ÚHASLOCALÚHASFREEr   ÚargvalrZ   rY   ÚNotImplementedErrorr+   r,   r-   r.   )	Ústater/   r"   r#   r!   r1   ÚmayÚmustÚwalks	       €€€€€r   rm   zlivevars_analysis.<locals>.walk’   su  ø€ Ø�E”MÐ!Ð!ØˆFØŒ×Ò˜%Ñ Ô Ð å�u�c ,Ñ/Ô/Ñ0Ô0ð 	ñ 	ˆAØ ”?ˆDØŒ{�hÐ&Ð&¨$¬+½Ð*@Ð*@Ø˜Tœ[Ð(Ð(¨H¸¼Ð,CÐ,CØ”{¨$¬+Ð5Ð5ØœŸš¨¬Ñ4Ô4Ð4øØ ¤Ð+Ð+Ø”L×$Ò$ T¤[Ñ1Ô1Ð1Ð1Ø”[ KÒ/Ð/Øå-Ð.H¸4¼;Ð.HÐ.HÑIÔIÐIØÔ!ð >Ø��S˜' $Ô"4Ô";Ô<Ñ=Ô=Ð=ØŒ{�lÐ*Ð*Ø��S˜' $¤+Ô.Ñ/Ô/Ð/Ø�ØŒ{Õ.Ð.Ð.Ø��ñ /ð#	ð 	r   )r$   rX   r6   rY   )r1   Úinstructionr!   rk   rl   rm   s   ` @@@@r   Úlivevars_analysisro   �   s£   øøøøø€ Ý˜,Ñ'Ô'€GÝ•s‘u”u�c™eœe¥S¡U¤UÑ+Ô+€DÝ
•c‘e”e�S™UœU¥C¡E¤EÑ
*Ô
*€Cðð ð ð ð ð ð ð ð ð2 	€Dˆˆw�{Ô#Ñ$Ô$Ð$ØŒ:˜œ	Ñ!Ð!r   c                   ó   — e Zd ZU dZeed<   dS )ÚFixedPointBoxTÚvalueN)r\   r]   r^   rr   Úboolr_   r   r   r   rq   rq   ¯   s"   € € € € € € à€Eˆ4ÐÐÑÐÐr   rq   c                   ó`   — 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
dS )Ú	StackSizeÚlowÚhighÚfixed_pointc                 ó:   — d| _         d| _        d| j        _        d S )Nr   F)rv   rw   rx   rr   )Úselfs    r   ÚzerozStackSize.zeroº   s!   € ØˆŒØˆŒ	Ø!&ˆÔÔÐÐr   c                 óê   — | j         | j        f}t          | j         |j         |z   ¦  «        | _         t          | j        |j        |z   ¦  «        | _        | j         | j        f|k    rd| j        _        d S d S ©NF©rv   rw   ÚminÚmaxrx   rr   )rz   ÚotherÚnÚpriors       r   Ú	offset_ofzStackSize.offset_of¿   so   € Ø”˜4œ9Ð%ˆÝ�t”x ¤¨Q¡Ñ/Ô/ˆŒÝ˜œ	 5¤:°¡>Ñ2Ô2ˆŒ	ØŒH�d”iÐ  EÒ)Ð)Ø%*ˆDÔÔ"Ð"Ð"ð *Ð)r   c                 óÊ   — | j         | j        f}t          | j         |¦  «        | _         t          | j        |¦  «        | _        | j         | j        f|k    rd| j        _        d S d S r}   r~   )rz   Údepthrƒ   s      r   Úexn_tab_jumpzStackSize.exn_tab_jumpÆ   sc   € Ø”˜4œ9Ð%ˆÝ�t”x Ñ'Ô'ˆŒÝ˜œ	 5Ñ)Ô)ˆŒ	ØŒH�d”iÐ  EÒ)Ð)Ø%*ˆDÔÔ"Ð"Ð"ð *Ð)r   N)r\   r]   r^   r   ÚintÚfloatr_   rq   r{   r„   r‡   r   r   r   ru   ru   ´   sy   € € € € € € à	ˆs�EˆzÔ	ÐÐÑØ
��U�
Ô
ÐÐÑØÐÐÑð'ð 'ð 'ð
+ð +ð +ð+ð +ð +ð +ð +r   ru   Úreturnc           
      óR  ‡— | sJ ‚t          ¦   «         Šˆfd„| D ¦   «         }|| d                                       ¦   «          t          d¦  «        D �]d}‰j        r �nYd‰_        t	          | | dd …         d gz   ¦  «        D �]2\  }}||         }t
          j        dk     o|j        t          j	        d         k    }|j        t          vrK|€J d|› �¦   «         ‚|rdnt          |j        |j        d	¬
¦  «        }||                              ||¦  «         |j        t          v r=|s;||j                                      |t          |j        |j        d¬
¦  «        ¦  «         |j        rN|j        j        t%          |j        j        ¦  «        z   dz   }||j        j                                      |¦  «         �Œ4�Œf	 t1          d„ |                     ¦   «         D ¦   «         ¦  «        }	t5          d„ |                     ¦   «         D ¦   «         ¦  «        }
‰j        s
J d¦   «         ‚|	dk    sJ ‚|
S )Nc           	      óh   •— i | ].}|t          t          d ¦  «        t          d¦  «        ‰¦  «        “Œ/S )Úinfz-inf)ru   r‰   )r   r#   rx   s     €r   ú
<dictcomp>z&stacksize_analysis.<locals>.<dictcomp>Ñ   sC   ø€ ð ð ð àð 	�i�˜e™œ¥e¨F¡m¤m°[ÑAÔAðð ð r   r   éd   Tr3   r	   ÚCALL_FINALLYzmissing next inst: F)Újumpc              3   ó$   K  — | ]}|j         V — Œd S r'   )rv   ©r   Úxs     r   ú	<genexpr>z%stacksize_analysis.<locals>.<genexpr>þ   s$   è è € Ð2Ð2˜ˆaŒeÐ2Ð2Ð2Ð2Ð2Ð2r   c              3   ó$   K  — | ]}|j         V — Œd S r'   )rw   r“   s     r   r•   z%stacksize_analysis.<locals>.<genexpr>ÿ   s$   è è € Ð4Ð4˜!ˆqŒvÐ4Ð4Ð4Ð4Ð4Ð4r   zfailed to reach fixed point)rq   r{   r(   rr   rI   r7   r8   r   r   Úopmapr.   Ústack_effectÚargr„   r-   r,   r+   r†   rˆ   Úlastir‡   Úprintrv   rw   r   Úvaluesr€   )r1   Ústack_sizesÚ_r#   Ú	next_instÚ
stack_sizeÚis_call_finallyÚeffr†   rv   rw   rx   s              @r   Ústacksize_analysisr£   Î   s�  ø€ ØÐÐˆ<Ý‘/”/€Kðð ð ð à ðñ ô €Kð �˜Q”Ô ×%Ò%Ñ'Ô'Ð'å�3‰ZŒZð  Kñ  KˆØÔð 	Ø‰EØ ˆÔå" <°¸a¸b¸bÔ1AÀTÀFÑ1JÑKÔKð 	Kñ 	K‰OˆD�)Ø$ TÔ*ˆJõ Ô  6Ò)ÐV¨d¬k½S¼YÀ~Ô=VÒ.Vð ð Œ{Õ"2Ð2Ð2Ø Ð,Ð,Ð.JÀDÐ.JÐ.JÑ,Ô,Ð,ð 'ðI�A�Aå% d¤k°4´8À%ÐHÑHÔHð ð
 ˜IÔ&×0Ò0°¸SÑAÔAÐAØŒ{�lÐ*Ð*°?Ð*Ø˜DœKÔ(×2Ò2Ø¥¨T¬[¸$¼(ÈÐ NÑ NÔ Nñô ð ð Ô!ð Kð Ô*Ô0µ3°tÔ7IÔ7OÑ3PÔ3PÑPÐSTÑT�Ø˜DÔ.Ô5Ô6×CÒCÀEÑJÔJÐJùñ7	Kð:9õ
 Ð2Ð2˜[×/Ò/Ñ1Ô1Ð2Ñ2Ô2Ñ
2Ô
2€CÝÐ4Ð4˜{×1Ò1Ñ3Ô3Ð4Ñ4Ô4Ñ4Ô4€DàÔÐ;Ð;Ð;Ñ;Ô;ÐØ�!Š8ˆ8ˆ8ˆ8Ø€Kr   )#r:   Údataclassesr   r7   Útypingr   r   r   r—   r.   r8   r*   r6   ÚhasjrelÚhasjabsr-   ÚJUMP_OPNAMESÚhaslocalrf   Úhasfreerg   r˜   r$   rA   rJ   rR   rV   Ú	dataclassrX   ro   rq   ru   rˆ   r‰   r£   r   r   r   ú<module>r¬      sß  ðà €€€Ø Ð Ð Ð Ø 
€
€
€
Ø 
€
€
€
Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð „IˆnÔØ„IˆnÔØ„IˆoÔðÐ ð Ô�vÒÐØ×Ò˜œ 9Ô-Ñ.Ô.Ð.ØÔ�wÒÐØ×Ò˜œ ?Ô3Ñ4Ô4Ð4Ø×Ò˜œ >Ô2Ñ3Ô3Ð3Ð3à×Ò˜œ ?Ô3Ñ4Ô4Ð4ØÔ�wÒÐØ×Ò˜œ >Ô2Ñ3Ô3Ð3ØÔ�wÒÐØ×Ò˜œÐ#?Ô@ÑAÔAÐAØˆs�3”; ¤Ñ,Ñ-Ô-€Ø>Ð>°Ð>Ñ>Ô>€Øˆ3ˆsŒ|ÑÔ€Ø
ˆ#ˆcŒkÑ
Ô
€àÔ€ð	ð 	ð 	ð*Kð *Kð *KðZNð Nð Nð ð  ð  ðð ð ð$ Ôðð ð ð ð ñ ô ñ Ôðð"ð "ð "ðD Ôðð ð ð ð ñ ô ñ Ôðð Ôð+ð +ð +ð +ð +ñ +ô +ñ Ôð+ð25¨¨c°5¨jÔ(9ð 5ð 5ð 5ð 5ð 5ð 5r   