§
    ŠŠtjC(  ã                   óª  — 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                     ej        d	         ¦  «         ej        d
k    rAe                     ej        d         ¦  «         e                     ej        d         ¦  «         n e                     ej        d         ¦  «         dej        cxk    rdk     r#n n 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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j!         G d„ d¦  «        ¦   «         Z"ded         dddee         fd„Z#ej!         G d „ d!¦  «        ¦   «         Z$ej!         G d"„ d#¦  «        ¦   «         Z%ded         dee&z  fd$„Z'dS )%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_INTERRUPTc                 ó2   — h | ]}t           j        |         ’ŒS © )ÚdisÚopname)Ú.0Úopcodes     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/bytecode_analysis.pyú	<setcomp>r   .   s   € Ð>Ð>Ð> v•”
˜6Ô"Ð>Ð>Ð>ó    Úinstsr   Úreturnc                 ól   — 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       r   Úget_indexofr&   5   s_   € ð €GÝ˜UÑ#Ô#ð ð ‰ˆˆ4Ø�7ˆ?ˆ?Ý ØI°!ÐIÐIÐIñô ð ð ˆ�‰ˆØ€Nr   Úinstructionsc           
      ó   ‡ ‡‡‡— t          ‰ ¦  «        Št          ¦   «         Šdt          ddfˆˆˆ ˆfd„Š ‰d¦  «         t          j        dk    �r%t          ‰¦  «        }t          ‰ ¦  «        D �]\  }}|‰v rû|j        rô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        _        �Œˆfd„t          ‰ ¦  «        D ¦   «         S )zDead code eliminationÚstartr   Nc                 ó|  •— t          | t          ‰¦  «        ¦  «        D ]œ}|‰v r d S ‰                     |¦  «         ‰|         }|j        r ‰‰|j        j                 ¦  «         |j        t          v r5|j        €t          d|j        › d�¦  «        ‚ ‰‰|j                 ¦  «         |j        t          v r d S Œ�d S )Nújump instruction ú has no target)
ÚrangeÚlenÚaddÚexn_tab_entryÚtargetr   ÚJUMP_OPCODESr"   r   ÚTERMINAL_OPCODES)r)   r$   r%   Úfind_live_coder#   r'   Ú	live_codes      €€€€r   r4   z(remove_dead_code.<locals>.find_live_codeJ   sê   ø€ Ý�u�c ,Ñ/Ô/Ñ0Ô0ð 	ð 	ˆAØ�Iˆ~ˆ~Ø��Ø�MŠM˜!ÑÔÐØ ”?ˆDØÔ!ð CØ�˜w tÔ'9Ô'@ÔAÑBÔBÐBØŒ{�lÐ*Ð*Ø”;Ð&Ý(ØG¨D¬KÐGÐGÐGñô ð ð �˜w t¤{Ô3Ñ4Ô4Ð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, ú]c                 ó"   •— g | ]\  }}|‰v ¯	|‘ŒS r   r   )r   r$   r%   r5   s      €r   ú
<listcomp>z$remove_dead_code.<locals>.<listcomp>}   s"   ø€ ÐJÐJÐJ‘W�Q˜¸1À	¸>¸>ˆD¸>¸>¸>r   )r&   ÚsetÚintÚsysÚversion_infoÚsortedr!   r0   ÚbisectÚbisect_leftr)   r.   r"   Úbisect_rightÚend)	r'   Úlive_idxr$   r%   Ú	start_idxÚend_idxr4   r#   r5   s	   `     @@@r   Úremove_dead_coderE   E   s  øøøø€ å˜,Ñ'Ô'€GÝ‘”€Ið�cð  dð ð ð ð ð ð ð ð ð ð" €N�1ÑÔÐõ Ô˜7Ò"Ñ"Ý˜)Ñ$Ô$ˆÝ  Ñ.Ô.ð 	Iñ 	I‰GˆAˆtØ�Iˆ~ˆ~ $Ô"4ˆ~å"Ô.Ø˜g dÔ&8Ô&>Ô?ñô �	ð ¥ H¡¤Ò-Ð-Ý(ØSñô ð õ
 Ô'¨°'¸$Ô:LÔ:PÔ2QÑRÔRÐUVÑVð ð ˜Q’;�;Ý(ØRñô ð ð ! Ô+¨qÐEÐEÒEÐE°H¸WÔ4EÒEÐEÐEÐEÝ(ðH qð Hð HØ$ YÔ/ðHð HØ3;¸GÔ3DðHð Hð Hñô ð ð ,8¸ÀÔ8KÔ+L�Ô"Ô(Ø)5°h¸wÔ6GÔ)H�Ô"Ô&ùàJÐJÐJÐJ¥	¨,Ñ 7Ô 7ÐJÑJÔJÐJr   c                 ó\   ‡— d„ t          j        | ¦  «        D ¦   «         Šˆfd„| D ¦   «         S )z'Eliminate jumps to the next instructionc                 óZ   — h | ](\  }}|j         d k    ¯|j        |u ¯t          |¦  «        ’Œ)S )r   )r   r1   Úid)r   ÚaÚbs      r   r   z)remove_pointless_jumps.<locals>.<setcomp>‚   sA   € ð ð ð áˆAˆqØŒ8�Ò&Ð&¨1¬8°q¨=¨=õ 	ˆ1‰Œà+8¨=¨=r   c                 ó6   •— g | ]}t          |¦  «        ‰v¯|‘ŒS r   )rH   )r   r%   Úpointless_jumpss     €r   r8   z*remove_pointless_jumps.<locals>.<listcomp>‡   s)   ø€ ÐMÐMÐM�T­R°©X¬X¸_Ð-LÐ-LˆDÐ-LÐ-LÐ-Lr   )Ú	itertoolsÚpairwise)r'   rL   s    @r   Úremove_pointless_jumpsrO   €   sI   ø€ ðð åÔ& |Ñ4Ô4ðñ ô €Oð
 NÐMÐMÐM˜\ÐMÑMÔMÐMr   c                 ó8   ‡— dŠdˆfd„}| D ]} ||¦  «         ŒdS )zEEnsure every instruction has line number set in case some are removedNr%   r   r   c                 ó2   •— | j         r| j         Š‰| _         d S ©N©Ústarts_line©r%   Úcur_line_nos    €r   Úpopulate_line_numz.propagate_line_nums.<locals>.populate_line_numŽ   s$   ø€ àÔð 	+ØÔ*ˆKà&ˆÔÐÐr   ©r%   r   r   Nr   )r'   rW   r%   rV   s      @r   Úpropagate_line_numsrY   Š   sU   ø€ à€Kð'ð 'ð 'ð 'ð 'ð 'ð ð  ð  ˆØÐ˜$ÑÔÐÐð ð  r   c                 ó8   ‡— dŠdˆfd„}| D ]} ||¦  «         ŒdS )z;Remove extra starts line properties before packing bytecodeNr%   r   r   c                 óP   •— | j         €d S | j         ‰k    r	d | _         d S | j         Šd S rR   rS   rU   s    €r   Úremove_line_numz/remove_extra_line_nums.<locals>.remove_line_numž   s9   ø€ àÔÐ#ØˆFØÔ Ò,Ð,Ø#ˆDÔÐÐàÔ*ˆKˆKˆKr   rX   r   )r'   r\   r%   rV   s      @r   Úremove_extra_line_numsr]   ™   sV   ø€ ð €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__r9   r   Ú__annotations__r   r   r   r_   r_   «   s?   € € € € € € àˆsŒ8€O€O�OØ�ŒHÐÐÑØ�ŒXÐÐÑÐÐr   r_   Úinstructionc                 ót  ‡ ‡‡‡‡— 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                 óê  •— || 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 r8|j        €t          d|j        › d�¦  «        ‚ ‰‰‰|j                 ¦  «         ‰} |j        t           v r d S �Œ/d S )NÚLOADÚDELETEÚSTOREÚ	MAKE_CELLz
unhandled r+   r,   )rb   r/   r-   r.   r   ÚHASLOCALÚHASFREEr   Úargvalra   r`   ÚNotImplementedErrorr0   r1   r2   r"   r3   )	ri   r)   r$   r%   r#   r'   ÚmayÚmustÚwalks	       €€€€€r   ru   zlivevars_analysis.<locals>.walk¹   s¡  ø€ Ø�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Ð*Ð*Ø”;Ð&Ý(ØG¨D¬KÐGÐGÐGñô ð ð ��S˜' $¤+Ô.Ñ/Ô/Ð/Ø�ØŒ{Õ.Ð.Ð.Ø��ñ /ð+	ð 	r   )r&   r_   r9   r:   r`   )r'   rg   r#   rs   rt   ru   s   ` @@@@r   Úlivevars_analysisrv   ²   s¿   øøøøø€ õ ˜,Ñ'Ô'€GÝ•s‘u”u�c™eœe¥S¡U¤UÑ+Ô+€DÝ
•c‘e”e�S™UœU¥C¡E¤EÑ
*Ô
*€Cð•Kð ­ð °ð ð ð ð ð ð ð ð ð ð ð: 	€Dˆˆw�{Ô#Ñ$Ô$Ð$ØŒ:˜œ	Ñ!Ð!r   c                   ó   — e Zd ZU dZeed<   dS )ÚFixedPointBoxTÚvalueN)rc   rd   re   ry   Úboolrf   r   r   r   rx   rx   Ú   s"   € € € € € € à€Eˆ4ÐÐÑÐÐr   rx   c                   óf   — 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	dS )Ú	StackSizeÚlowÚhighÚfixed_pointr   Nc                 ó:   — d| _         d| _        d| j        _        d S )Nr   F)r}   r~   r   ry   )Úselfs    r   ÚzerozStackSize.zeroå   s!   € ØˆŒØˆŒ	Ø!&ˆÔÔÐÐr   ÚotherÚnc                 óê   — | j         | j        f}t          | j         |j         |z   ¦  «        | _         t          | j        |j        |z   ¦  «        | _        | j         | j        f|k    rd| j        _        d S d S ©NF©r}   r~   ÚminÚmaxr   ry   )r�   rƒ   r„   Úpriors       r   Ú	offset_ofzStackSize.offset_ofê   so   € Ø”˜4œ9Ð%ˆÝ�t”x ¤¨Q¡Ñ/Ô/ˆŒÝ˜œ	 5¤:°¡>Ñ2Ô2ˆŒ	ØŒH�d”iÐ  EÒ)Ð)Ø%*ˆDÔÔ"Ð"Ð"ð *Ð)r   Údepthc                 óÊ   — | j         | j        f}t          | j         |¦  «        | _         t          | j        |¦  «        | _        | j         | j        f|k    rd| j        _        d S d S r†   r‡   )r�   rŒ   rŠ   s      r   Úexn_tab_jumpzStackSize.exn_tab_jumpñ   sc   € Ø”˜4œ9Ð%ˆÝ�t”x Ñ'Ô'ˆŒÝ˜œ	 5Ñ)Ô)ˆŒ	ØŒH�d”iÐ  EÒ)Ð)Ø%*ˆDÔÔ"Ð"Ð"ð *Ð)r   )r   N)
rc   rd   re   r:   Úfloatrf   rx   r‚   r‹   rŽ   r   r   r   r|   r|   ß   s¡   € € € € € € à	ˆu‰ÐÐÑØ
�‰+ÐÐÑØÐÐÑð'ð 'ð 'ð 'ð
+˜{ð +¨sð +°tð +ð +ð +ð +ð+ #ð +¨$ð +ð +ð +ð +ð +ð +r   r|   c           
      ón  ‡
— | st          d¦  «        ‚t          ¦   «         Š
ˆ
fd„| D ¦   «         }|| d                                       ¦   «          t          d¦  «        D �]Q}‰
j        r �nFd‰
_        t          | | dd …         d gz   ¦  «        D �]\  }}||         }|j        t          vrL|€t          d|› �¦  «        ‚t          |j        |j	        d¬	¦  «        }||          
                    ||¦  «         |j        t          v rT|j        €t          d
|› �¦  «        ‚||j                  
                    |t          |j        |j	        d¬	¦  «        ¦  «         |j        rN|j        j        t          |j        j        ¦  «        z   dz   }||j        j                                      |¦  «         �Œ!�ŒSt%          d„ |                     ¦   «         D ¦   «         ¦  «        }t)          d„ |                     ¦   «         D ¦   «         ¦  «        }	‰
j        st          d¦  «        ‚|dk     rt          d|› �¦  «        ‚|	S )Nz#instructions list must not be emptyc           	      óh   •— i | ].}|t          t          d ¦  «        t          d¦  «        ‰¦  «        “Œ/S )Úinfz-inf)r|   r�   )r   r%   r   s     €r   ú
<dictcomp>z&stacksize_analysis.<locals>.<dictcomp>ý   sC   ø€ ð ð ð àð 	�i�˜e™œ¥e¨F¡m¤m°[ÑAÔAðð ð r   r   éd   Tr   zmissing next inst: F)Újumpzmissing target: c              3   ó$   K  — | ]}|j         V — Œd S rR   )r}   ©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 rR   )r~   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 pointz1stack size analysis produced negative low value: )r"   rx   r‚   r-   ry   Úzipr   r3   Ústack_effectÚargr‹   r2   r1   r0   rŒ   r:   ÚlastirŽ   rˆ   Úvaluesr‰   )r'   Ústack_sizesÚ_r%   Ú	next_instÚ
stack_sizeÚeffrŒ   r}   r~   r   s             @r   Ústacksize_analysisr¥   ù   s~  ø€ Øð DÝÐBÑCÔCÐCÝ‘/”/€Kðð ð ð à ðñ ô €Kð �˜Q”Ô ×%Ò%Ñ'Ô'Ð'å�3‰ZŒZð Kñ KˆØÔð 	Ø‰EØ ˆÔå" <°¸a¸b¸bÔ1AÀTÀFÑ1JÑKÔKð 	Kñ 	K‰OˆD�)Ø$ TÔ*ˆJØŒ{Õ"2Ð2Ð2ØÐ$Ý(Ð)E¸tÐ)EÐ)EÑFÔFÐFÝ" 4¤;°´¸uÐEÑEÔE�Ø˜IÔ&×0Ò0°¸SÑAÔAÐAØŒ{�lÐ*Ð*Ø”;Ð&Ý(Ð)B¸DÐ)BÐ)BÑCÔCÐCØ˜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ùñ#	Kõ& Ð2Ð2˜[×/Ò/Ñ1Ô1Ð2Ñ2Ô2Ñ
2Ô
2€CÝÐ4Ð4˜{×1Ò1Ñ3Ô3Ð4Ñ4Ô4Ñ4Ô4€DàÔð <ÝÐ:Ñ;Ô;Ð;Ø
ˆQ‚w€wÝÐVÐQTÐVÐVÑWÔWÐWØ€Kr   )(Ú__doc__r>   Údataclassesr   rM   r;   Útypingr   r   Úbytecode_transformationr   Úopmapr3   r/   r<   r9   ÚhasjrelÚhasjabsr2   ÚJUMP_OPNAMESÚhaslocalro   Úhasfreerp   rœ   ÚlistÚdictr:   r&   rE   rO   rY   r]   Ú	dataclassr_   rv   rx   r|   r�   r¥   r   r   r   ú<module>r³      s×  ððð ð €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %ð ð 5ð 5Ð4Ð4Ð4Ð4Ð4ð „IˆnÔØ„IˆnÔØ„IˆoÔðÐ ð × Ò �S”Y˜yÔ)Ñ *Ô *Ð *ØÔ�wÒÐØ×Ò˜œ ?Ô3Ñ4Ô4Ð4Ø×Ò˜œ >Ô2Ñ3Ô3Ð3Ð3à×Ò˜œ ?Ô3Ñ4Ô4Ð4à
ˆcÔÐ(Ð(Ò(Ð( Ò(Ð(Ð(Ð(Ð(Ø×Ò˜œ >Ô2Ñ3Ô3Ð3ØÔ�wÒÐØ×Ò˜œÐ#?Ô@ÑAÔAÐAØˆs�3”; ¤Ñ,Ñ-Ô-€Ø>Ð>°Ð>Ñ>Ô>€Øˆ3ˆsŒ|ÑÔ€Ø
ˆ#ˆcŒkÑ
Ô
€àÔ€ð�t˜MÔ*ð ¨t°MÀ3Ð4FÔ/Gð ð ð ð ð 8K 4¨Ô#6ð 8K¸4ÀÔ;Nð 8Kð 8Kð 8Kð 8KðvN¨¨mÔ)<ð NÀÀmÔATð Nð Nð Nð Nð  d¨=Ô&9ð  ¸dð  ð  ð  ð  ð¨¨mÔ)<ð Àð ð ð ð ð$ Ôðð ð ð ð ñ ô ñ Ôðð%"Ø�}Ô%ð%"Ø4Að%"àˆ„Xð%"ð %"ð %"ð %"ðP Ôðð ð ð ð ñ ô ñ Ôðð Ôð+ð +ð +ð +ð +ñ +ô +ñ Ôð+ð2) T¨-Ô%8ð )¸SÀ5¹[ð )ð )ð )ð )ð )ð )r   