§
    ŠŠtjE€  ã                   óÄ  — 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 ddlm	Z	m
Z
 ddlmZmZmZ ddlZddlmZ ddlmZmZmZ dd	lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddlm,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> erddl?m@Z@ ddlAmBZB ejC         G d„ d¦  «        ¦   «         ZD G d„ d¦  «        ZEdS )aû  
This module provides utilities for generating Python bytecode in PyTorch's Dynamo system.
It includes functionality for:
- Constructing bytecode sequences for Python operations
- Managing stack operations and variable tracking
- Handling graph outputs and their conversions
- Supporting different Python versions (3.11+, 3.12+, 3.13+)
- Converting high-level operations to low-level bytecode instructions
- Managing constant loading and attribute access
- Supporting function creation and closure handling
é    N)ÚCounterÚdeque)ÚCallableÚIterable)ÚAnyÚTYPE_CHECKINGÚUnion)Ú
OrderedSeté   )ÚconfigÚgraph_break_hintsÚutils)Úadd_push_nullÚadd_push_null_call_function_exÚcreate_binary_subscrÚcreate_build_tupleÚcreate_call_functionÚcreate_call_function_exÚcreate_call_methodÚcreate_dup_topÚcreate_instructionÚcreate_load_constÚcreate_load_methodÚcreate_rot_nÚInstruction)Úunimplemented)Ú
AttrSourceÚChainedSourceÚDictGetItemSourceÚSource)Úis_safe_constantÚrot_n_helper)ÚValueMutationExistingÚVariableTracker)Ú4ContextlibContextManagerLocalGeneratorObjectVariableÚLocalGeneratorObjectVariable)ÚNNModuleVariable)ÚTorchScriptObjectVariable)ÚNumpyNdarrayVariableÚSymNodeVariableÚTensorVariableÚUnspecializedPythonVariable)ÚTensorWithTFOverrideVariable)ÚGraphArg)ÚInstructionTranslatorBasec                   ó$   — e Zd ZU eed<   eed<   dS )ÚGraphOutputEntryÚindexÚvariableN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__r$   © ó    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/codegen.pyr1   r1   B   s'   € € € € € € à€J€J�JØÐÐÑÐÐr:   r1   c                   óš  — e Zd ZdZ	 	 	 	 d[dddej        j        dz  dedz  dee	e
z  ef         dz  dee
e
f         dz  d	dfd
„Zdefd„Zddœdee         ded	dfd„Zd	ee	         fd„Zdee	e
df         d	dfd„Z	 d\deg df         ded	dfd„Z	 d]de	e
z  dz  ded	dfd„Zde	d	efd„Zded	dfd„Zde	e
z  d	dfd„Zd^d „Zd!ee	e
z           d	dfd"„Zd	efd#„Zd$eded	ee         fd%„Z d^d&„Z!d'ed	dfd(„Z"d)ee         d	dfd*„Z#d	ee         fd+„Z$d	ee         dz  fd,„Z%d$ed	efd-„Z&d$ed	efd.„Z'd$ed	efd/„Z(d$ed	efd0„Z)d$ed	efd1„Z*d\d$ed2ed	efd3„Z+ded	efd4„Z,ded	efd5„Z-d$ed	dfd6„Z.d7ed	dfd8„Z/d$ed	efd9„Z0d$ed	dfd:„Z1d;ed	ee         fd<„Z2d$ed	efd=„Z3d$ed	dfd>„Z4	 d_d@edAedBed	ee         fdC„Z5dDed	ee         fdE„Z6d	ee         fdF„Z7d^dG„Z8d7edAed	dfdH„Z9d^dI„Z:dJed	dfdK„Z;dJed	dfdL„Z<d@edMe=j>        d	dfdN„Z?dOe=j@        d	efdP„ZAdQe
d	dfdR„ZBd@ed	dfdS„ZCdTed	efdU„ZDdTedVed	dfdW„ZEd7edXee         dAed	ee         fdY„ZFdeGd	efdZ„ZHdS )`Ú	PyCodegenz<
    Helper class uses for constructing Python bytecode
    NÚtxr/   ÚrootÚgraph_output_varÚtempvarsÚoverridden_sourcesÚreturnc                 óD  — || _         d | _        t          j        ¦   «         | _        i | _        g | _        |pi | _        || _        || _	        | j        j
        j        | _        | j        j        | _        | j        j
        j        | _        d| _        |pi | _        g | _        d S )NT)r?   Útop_of_stackÚcollectionsr   ÚusesÚgraph_outputsÚ_outputrA   r>   r@   ÚoutputÚcode_optionsÚcell_and_freevarsÚnew_varÚvalue_from_sourcerB   Úpycodes)Úselfr>   r?   r@   rA   rB   s         r;   Ú__init__zPyCodegen.__init__M   sœ   € ð ˆŒ	Ø=AˆÔÝ7BÔ7JÑ7LÔ7LˆŒ	Ø:<ˆÔØ*,ˆŒð
 >F¸^ÈˆŒØˆŒØ 0ˆÔØ œGœNÔ7ˆÔØ!%¤Ô!:ˆÔØ”w”~Ô-ˆŒØ'+ˆÔð 9KÐ8PÈbˆÔØˆŒˆˆr:   Úpycodec                 óÜ   ‡ — t           j        sd S |D ]+}t          |t          ¦  «        r|                     ¦   «          Œ,‰ j                              |j        ˆ fd„|D ¦   «         Ž ¦  «         d S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r9   )Úreconstruct_pycode)Ú.0ÚarP   s     €r;   ú
<listcomp>z(PyCodegen.add_pycode.<locals>.<listcomp>q   s'   ø€ Ð+UÐ+UÐ+UÈ1¨A×,@Ò,@ÀÑ,FÔ,FÐ+UÐ+UÐ+Ur:   )r   Úgenerate_pycodeÚ
isinstancer$   ÚrealizerO   ÚappendÚformat)rP   rR   ÚargsrW   s   `   r;   Ú
add_pycodezPyCodegen.add_pycodek   s}   ø€ ÝÔ%ð 	ØˆFØð 	ð 	ˆAÝ˜!�_Ñ-Ô-ð Ø—	’	‘”�øØŒ×Ò˜M˜FœMÐ+UÐ+UÐ+UÐ+UÐPTÐ+UÑ+UÔ+UÐVÑWÔWÐWÐWÐWr:   T)rN   Ústack_valuesrN   c                ó(  — | j         }| xj         |z  c_         	 |                      |¦  «         | j                             d¦  «         |D ]3}|                      | j                             d¦  «        › d�|¦  «         Œ4	 || _         d S # || _         w xY w)NÚstackú = {})rN   Úforeachr>   Úreset_pycode_varname_counterr_   Únew_pycode_varname)rP   r`   rN   ÚprevÚvs        r;   Úrestore_stackzPyCodegen.restore_stacks   s¼   € ð Ô%ˆØÐÔÐ"3Ñ3ÐÔð		*Ø�LŠL˜Ñ&Ô&Ð&ð ŒG×0Ò0°Ñ9Ô9Ð9Ø!ð Tð T�Ø—’ 4¤7×#=Ò#=¸gÑ#FÔ#FÐ OÐ OÐ OÐQRÑSÔSÐSÐSðTð &*ˆDÔ"Ð"Ð"ø TˆDÔ"Ð)Ð)Ð)Ð)s   ™A%B Â	Bc                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó   — g | ]	}|j         ‘Œ
S r9   )r3   ©rV   Úxs     r;   rX   z/PyCodegen.graph_output_vars.<locals>.<listcomp>„   s   € Ð@Ð@Ð@˜q�”
Ð@Ð@Ð@r:   )rH   Úvalues©rP   s    r;   Úgraph_output_varszPyCodegen.graph_output_varsƒ   s%   € Ø@Ð@ DÔ$6×$=Ò$=Ñ$?Ô$?Ð@Ñ@Ô@Ð@r:   Úvaluer.   c                 óX   — |                      | ¦  «        }|�t          d|› �¦  «        ‚d S )Nzreconstruct!=None )ÚreconstructÚAssertionError)rP   rq   Úress      r;   Úcall_reconstructzPyCodegen.call_reconstruct†   s:   € ð ×Ò Ñ%Ô%ˆØˆ?Ý Ð!=°eÐ!=Ð!=Ñ>Ô>Ð>ð ˆ?r:   FÚgen_fnÚcall_function_exc                 óª  — t          | j        ¦  «        }t          j        dk     r|                      ¦   «           |¦   «          | j        |d…         }| j        |d…= |r(| j                             t          |¦  «        ¦  «         n'| j                             t          |¦  «        ¦  «         t          j        dk    r|                      ¦   «          dS dS )a˜  
        `gen_fn` generates instructions via PyCodegen methods
        that push a single callable to the stack.

        `add_push_null` pushes a NULL to the stack before or after the
        instructions generated by `gen_fn`, depending on Python version.

        Will attempt to use the NULL push bit for instructions
        with such bits (LOAD_GLOBAL 3.11+, LOAD_ATTR 3.12+, LOAD_SUPER_ATTR).
        ©é   é   N)ÚlenrI   ÚsysÚversion_infoÚ	clear_tosÚextendr   r   )rP   rw   rx   Úold_lenÚadded_instss        r;   r   zPyCodegen.add_push_null�   sÐ   € õ �d”lÑ#Ô#ˆÝÔ˜gÒ%Ð%ð �NŠNÑÔÐØˆ‰Œˆà”l 7 8 8Ô,ˆØŒL˜˜˜Ð"Øð 	<ØŒL×ÒÕ >¸{Ñ KÔ KÑLÔLÐLÐLàŒL×Ò¥¨kÑ :Ô :Ñ;Ô;Ð;ÝÔ˜wÒ&Ð&à�NŠNÑÔÐÐÐð 'Ð&r:   Úallow_cachec           
      óþ  ‡ ‡‡	‡
— |€t          d¦  «        ‚t          |t          ¦  «        �rƒ‰ j                             ||¦  «        }|durt          d¦  «        ‚‰ j        |u r(‰ j                             t          ¦   «         ¦  «         dS ‰ j	                             |¦  «        �A‰ j                             ‰  
                    ‰ j	        |         ¦  «        ¦  «         |‰ _        dS ‰ j        |xx         dz  cc<   	 ‰                      |¦  «         nP# t          $ rC t          dt          |¦  «        dt!          |¦  «        › d|› d	�g t"          j        ¢¬
¦  «         Y nw xY w|‰ j	        v r;‰ j                             t          ¦   «         ¦  «         ‰                      |¦  «         |‰ _        dS t          |t(          ¦  «        st          dt!          |¦  «        › �¦  «        ‚‰ j        Š
‰ j        Š|r‚‰ j        |u r#‰
                     t          ¦   «         ¦  «         dS ‰ j	                             |¦  «        �<‰
                     ‰  
                    ‰ j	        |         ¦  «        ¦  «         |‰ _        dS |                     ¦   «         r7t          |t.          ¦  «        r"t          dd|› �dg t"          j        ¢¬
¦  «         |j        �\|rZ|                     ¦   «         rt          |t4          ¦  «        s1t          |j        t8          ¦  «        s‰ j        r ‰ |j        ¦  «        S |                     ¦   «         r]t?          |                      ¦   «         ¦  «        r<‰
                     ‰  !                    |                      ¦   «         ¦  «        ¦  «         �nbt          |tD          ¦  «        r´‰  #                    |¦  «        Š	‰  $                    ˆ fd„¦  «         ‰  %                    ‰‰	         j&        ¦  «         ‰
                     ‰  '                    | (                    ‰ j)        ¦  «        d¬¦  «        ¦  «         ‰
 *                    tW          dd¦  «        ¦  «         �n™t          |tX          ¦  «        r¢| -                    ¦   «         t\          u r‡‰ j)        j/        s{‰  #                    | 0                    ‰ j)        tb          j2        ¦  «        ¦  «        Š	dˆˆ	ˆ
ˆ fd„}‰  $                    |¦  «         ‰
 *                    tW          dd¦  «        ¦  «         �nât          |tf          tX          th          tj          tl          f¦  «        �r‰  #                    |¦  «        Š	t          |tj          ¦  «        r]‰  $                    ˆ fd„¦  «         ‰  %                    ‰‰	         j&        ¦  «         ‰
 *                    tW          dd¦  «        ¦  «         �n,t          |th          ¦  «        rJ|j7        rCdˆˆ	ˆ
ˆ fd„}‰  $                    |¦  «         ‰
 *                    tW          dd¦  «        ¦  «         �nÍ‰  %                    ‰‰	         j&        ¦  «         �n«t          |tp          ¦  «        rÙ|j9         :                    d	¦  «        }|d         ‰ j;        d         v r9‰
                     ‰  
                    |d         ¦  «        ¦  «         |dd…         }nC‰ j<        €t          d¦  «        ‚‰
                     ‰  =                    ‰ j<        ¦  «        ¦  «         |D ]*}‰
                     ‰  >                    |¦  «        ¦  «         Œ+n½‰ j        |xx         dz  cc<   	 ‰                      |¦  «         nK# t          $ r>}t          dt          |¦  «        d|› d	�dgt"          j?        ¢d‘|¬¦  «         Y d}~nd}~ww xY w|rD|‰ j	        v r;‰ j                             t          ¦   «         ¦  «         ‰                      |¦  «         |‰ _        dS ) aõ  
        Generate code such that top-of-stack (TOS) is set to value.

        `allow_cache` controls the behavior in the following manner. `value` can
        either be a VariableTracker or a Source.

        If `value` is a `Source`, `allow_cache` must be True (invariant asserted
        below). If the source was reconstructed earlier, we will reuse the
        generated code by loading from top of stack or tempvars.

        If `value` is a `VariableTracker`, we have the following cases:

        1) `allow_cache=True`
            a) If the value.source is not None, we will emit the code based on
            `value.source` to handle aliasing.
            b) If value.source is None (example reconstructing a local list
            returned by the compiled function), we will reconstruct the variable
            tracker (w/o any source) to emit bytecode that generates a new
            python object.

            In both cases of value.source being None or not, if the value was
            reconstructed earlier, we will reuse the generated code by loading from
            top of stack or tempvars.

        2) `allow_cache=False` - This is a special case (allow_cache defaults to
        True).
            a) If the value.source is not None, we reconstruct the variable
            tracker and emit a new python object. You might wonder what about
            aliasing? The place where we use this config also has the followup
            code where the original python object is assigned to this new python
            value to handle aliasing (check side_effects.py and search for
            allow_cache=False).

            b) If value.source is None, this is not allowed

        Notable effects:
        1. `self.top_of_stack` will be set to `value`, if we don't codegen
           `value` based on source.
        2. `self.uses[value]` will increment, unless (a). we codegen via
            `top_of_stack` or cached `tempvars`, or (b). `value` has special VT
            types like `NNModuleVariable`, etc.
        Nzvalue must not be NoneTz#allow_cache must be True for Sourcer   z:Reconstruction failure: source.reconstruct not implementedz6Dynamo has no bytecode reconstruction implemented for z
 variable ú.)Úgb_typeÚcontextÚexplanationÚhintszexpected VariableTracker, got z%reconstructing @contextmanager objectzobject: zMReturning a @contextmanager object from a compiled function is not supported.c                  óD   •— ‰                       t          j        d¦  «        S )NÚto_subclass©Úload_import_fromr   r4   ro   s   €r;   ú<lambda>z$PyCodegen.__call__.<locals>.<lambda>9  s   ø€ ˜×-Ò-­e¬n¸mÑLÔL€ r:   ©Úaddé   FrC   c                  ó˜   •— ‰                      ‰ ‰         j        ¦  «         ‰                     ‰                     d¦  «        ¦  «         d S ©NÚitem©Úload_graph_outputr2   r\   Úcreate_load_attr©rH   Úgraph_outputs_keyrJ   rP   s   €€€€r;   rw   z"PyCodegen.__call__.<locals>.gen_fnS  sF   ø€ Ø×&Ò& }Ð5FÔ'GÔ'MÑNÔNÐNØ—’˜d×3Ò3°FÑ;Ô;Ñ<Ô<Ð<Ð<Ð<r:   r   c                  óD   •— ‰                       t          j        d¦  «        S )NÚto_numpy_helperr�   ro   s   €r;   r�   z$PyCodegen.__call__.<locals>.<lambda>g  s   ø€ ˜D×1Ò1µ%´.ÐBSÑTÔT€ r:   c                  ó˜   •— ‰                      ‰ ‰         j        ¦  «         ‰                     ‰                     d¦  «        ¦  «         d S r”   r–   r™   s   €€€€r;   rw   z"PyCodegen.__call__.<locals>.gen_fnm  sF   ø€ Ø×*Ò*¨=Ð9JÔ+KÔ+QÑRÔRÐRØ—M’M $×"7Ò"7¸Ñ"?Ô"?Ñ@Ô@Ð@Ð@Ð@r:   Úco_varnameszself.root must not be NonezReconstruction failurezJDynamo has no bytecode reconstruction implemented for sourceless variable z®If Dynamo is attempting to trace a return statement and your code is attempting to return a variable that Dynamo cannot reconstruct, then remove it from the return statement.zžReport an issue to PyTorch if you need reconstrtuction support. Note that objects that don't have reconstruction rules may be fundamentally unreconstructable.)r‡   rˆ   r‰   rŠ   Úfrom_exc©rC   N)@rt   rZ   r    rB   ÚgetrE   rI   r\   r   rA   Úcreate_loadrG   rv   ÚNotImplementedErrorr   ÚstrÚtyper   Ú
DYNAMO_BUGÚ	add_cacher$   rH   Úis_realizedr%   ÚSUPPORTABLEÚsourcer&   Úmutation_typer#   rN   Úis_python_constantr!   Úas_python_constantr   r-   Úadd_graph_outputr   r—   r2   Úcreate_load_globalÚglobal_mangled_class_namer>   r�   r   r*   Úpython_typeÚfloatÚexportÚ	as_tensorÚtorchÚfloat64r+   r,   r)   r(   Úneed_unwrapr'   Ú
module_keyÚsplitrK   r?   Úcreate_load_const_uncheckedr˜   ÚCAUSED_BY_EARLIER_GRAPH_BREAK)rP   rq   r„   rª   rw   ÚpartsÚpartÚerH   rš   rJ   s   `       @@@r;   Ú__call__zPyCodegen.__call__¬   sÈ  øøøø€ ðZ ˆ=Ý Ð!9Ñ:Ô:Ð:Ý�e�VÑ$Ô$ñ 	àÔ,×0Ò0°¸Ñ>Ô>ˆFØ $Ð&Ð&Ý$Ð%JÑKÔKÐKØÔ  EÐ)Ð)Ø”×#Ò#¥NÑ$4Ô$4Ñ5Ô5Ð5Ø�àŒ}× Ò  Ñ(Ô(Ð4Ø”×#Ò# D×$4Ò$4°T´]À6Ô5JÑ$KÔ$KÑLÔLÐLØ$*�Ô!Ø�àŒI�fÐÐÔ Ñ"ÐÐÑðØ×%Ò% fÑ-Ô-Ð-Ð-øÝ&ð ð ð ÝØXÝ ™KœKØ zÕY]Ð^dÑYeÔYeÐ zÐ zÐqwÐ zÐ zÐ zØ9Õ-Ô8Ð9ð	ñ ô ð ð ð ðøøøð ˜œÐ&Ð&Ø”×#Ò#¥NÑ$4Ô$4Ñ5Ô5Ð5Ø—’˜vÑ&Ô&Ð&Ø &ˆDÔàˆFå˜%¥Ñ1Ô1ð 	QÝ Ð!OÅ$ÀuÁ+Ä+Ð!OÐ!OÑPÔPÐPØ”ˆØÔ*ˆàð 	ØÔ  EÐ)Ð)Ø—’�nÑ.Ô.Ñ/Ô/Ð/Ø�àŒ}× Ò  Ñ'Ô'Ð3Ø—’˜d×.Ò.¨t¬}¸UÔ/CÑDÔDÑEÔEÐEØ$)�Ô!Ø�à×ÒÑÔð 
	¥:ØÕGñ$
ô $
ð 
	õ Ø?Ø* 5Ð*Ð*ØkðÝ&Ô2ðð	ñ ô ð ð ŒLÐ$Øð %ð ×!Ò!Ñ#Ô#ð %õ )3°5Õ:VÑ(WÔ(Wð %õ. ˜5Ô.Õ0EÑFÔFð*àÔ)ð*ð �t˜EœLÑ)Ô)Ð)à×#Ò#Ñ%Ô%ð a	&Õ*:¸5×;SÒ;SÑ;UÔ;UÑ*VÔ*Vð a	&Ø�MŠM˜$×0Ò0°×1IÒ1IÑ1KÔ1KÑLÔLÑMÔMÐMÑMÝ˜Õ;Ñ<Ô<ð _	&Ø $× 5Ò 5°eÑ <Ô <Ðà×ÒØLÐLÐLÐLñô ð ð ×"Ò" =Ð1BÔ#CÔ#IÑJÔJÐJØ�MŠMØ×'Ò'Ø×3Ò3°D´GÑ<Ô<Øð (ñ ô ñô ð ð �MŠMÕ.¨q°%Ñ8Ô8Ñ9Ô9Ð9Ñ9å�u�oÑ.Ô.ðQ	&à×!Ò!Ñ#Ô#¥uÐ,Ð,Ø”G”Nð -ð !%× 5Ò 5Ø—’ ¤­¬Ñ7Ô7ñ!ô !Ðð=ð =ð =ð =ð =ð =ð =ð =ð =ð ×Ò˜vÑ&Ô&Ð&Ø�MŠMÕ.¨q°%Ñ8Ô8Ñ9Ô9Ð9Ñ9ÝØåÝÝ+Ý$Ý)ðñ	
ô 	
ñ ;	&ð !%× 5Ò 5°eÑ <Ô <Ðå˜%Õ!5Ñ6Ô6ð OØ×"Ò"ØTÐTÐTÐTñô ð ð ×&Ò& }Ð5FÔ'GÔ'MÑNÔNÐNØ—’Õ2°1°eÑ<Ô<Ñ=Ô=Ð=Ñ=Ý˜EÕ#>Ñ?Ô?ð 	OÀEÔDUð 	OðAð Að Að Að Að Að Að Að Að ×"Ò" 6Ñ*Ô*Ð*Ø—’Õ2°1°eÑ<Ô<Ñ=Ô=Ð=Ñ=à×&Ò& }Ð5FÔ'GÔ'MÑNÔNÐNÑNÝ˜Õ/Ñ0Ô0ð 	&ØÔ$×*Ò*¨3Ñ/Ô/ˆEØ�QŒx˜4Ô,¨]Ô;Ð;Ð;Ø—’˜d×.Ò.¨u°Q¬xÑ8Ô8Ñ9Ô9Ð9Ø˜a˜b˜bœ	��à”9Ð$Ý(Ð)EÑFÔFÐFØ—’˜d×>Ò>¸t¼yÑIÔIÑJÔJÐJØð ;ð ;�Ø—’˜d×3Ò3°DÑ9Ô9Ñ:Ô:Ð:Ð:ð;ð ŒI�eÐÐÔ Ñ!ÐÐÑðØ×%Ò% eÑ,Ô,Ð,Ð,øÝ&ð ð ð ÝØ4Ý ™JœJØ uÐmrÐ uÐ uÐ uðdðõ +ÔHððWð	ð ðñ ô ð ð ð ð ð ð øøøøðøøøð ð &˜u¨¬Ð5Ð5Ø”×#Ò#¥NÑ$4Ô$4Ñ5Ô5Ð5Ø—’˜uÑ%Ô%Ð%à!ˆÔÐÐs+   Ã<D ÄA
EÅEÝ]% Ý%
^-Ý/4^(Þ(^-c                 ó®   — t          |                     ¦   «         ¦  «        }|| j        vr*t          t	          | j        ¦  «        |¦  «        | j        |<   |S ©N)ÚidÚas_proxyrH   r1   r}   )rP   rq   rš   s      r;   r®   zPyCodegen.add_graph_output˜  sX   € Ý˜uŸ~š~Ñ/Ô/Ñ0Ô0ÐØ DÔ$6Ð6Ð6Ý4DÝ�DÔ&Ñ'Ô'¨ñ5ô 5ˆDÔÐ0Ñ1ð !Ð r:   r2   c                 ó8  — | j         }| j        €t          d¦  «        ‚|                     |                      | j        ¦  «        ¦  «         |                     |                      |¦  «        ¦  «         |                     |                      ¦   «         ¦  «         d S )Nz!graph_output_var must not be None)rI   r@   rt   r\   r¢   r   r   )rP   r2   rJ   s      r;   r—   zPyCodegen.load_graph_output   sˆ   € Ø”ˆØÔ Ð(Ý Ð!DÑEÔEÐEØ�Š�d×&Ò& tÔ'<Ñ=Ô=Ñ>Ô>Ð>Ø�Š�d×,Ò,¨UÑ3Ô3Ñ4Ô4Ð4Ø�Š�d×/Ò/Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2r:   c                 óœ   — |                       ¦   «         }|| j        |<   | j                             |                      |¦  «        ¦  «         d S rÁ   )rM   rA   rI   r\   Úcreate_store)rP   rq   Úvars      r;   r§   zPyCodegen.add_cache¨  sE   € Ø�lŠl‰nŒnˆØ"ˆŒ�eÑØŒ×Ò˜D×-Ò-¨cÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r:   c                 óÚ   — t          | j                             ¦   «         ¦  «        D ]<\  }}|�-| j                             |                      |¦  «        ¦  «         | j        |= Œ=d | _        d S rÁ   )ÚlistrA   ÚitemsrI   r\   Úcreate_deleterE   )rP   ÚkeyrÇ   s      r;   Úclear_tempvarszPyCodegen.clear_tempvars­  so   € Ý˜Tœ]×0Ò0Ñ2Ô2Ñ3Ô3ð 	#ð 	#‰HˆC�ØˆØ”×#Ò# D×$6Ò$6°sÑ$;Ô$;Ñ<Ô<Ð<Ø”˜cÐ"Ð"Ø ˆÔÐÐr:   rÊ   c                 ó&   — |D ]} | |¦  «         Œd S rÁ   r9   )rP   rÊ   Úis      r;   rd   zPyCodegen.foreach´  s*   € Øð 	ð 	ˆAØˆD�‰GŒGˆGˆGð	ð 	r:   c                 ó   — t          ¦   «         S rÁ   )r   ro   s    r;   r   zPyCodegen.create_binary_subscr¸  s   € Ý#Ñ%Ô%Ð%r:   Únamec                 óü   — t          j        dd|¦  «        }| j        j        }||v r:t	          ||         ¦  «        t	          |¦  «        k    rt          d|›d�¦  «        ‚n|||<   |                      |d¬¦  «        gS )zStore value in a new globalz[^a-zA-Z0-9_]+Ú_z
f_globals[z*] already exists with a different identityTr�   )ÚreÚsubr>   Ú	f_globalsrÂ   rt   r¯   )rP   rÑ   rq   rÖ   s       r;   Úsetup_globally_cachedzPyCodegen.setup_globally_cached»  s”   € åŒvÐ'¨¨dÑ3Ô3ˆØ”GÔ%ˆ	Ø�9ÐÐÝ�)˜D”/Ñ"Ô"¥b¨¡i¤iÒ/Ð/Ý$ØS ÐSÐSÐSñô ð ð 0ð
 $ˆI�d‰OØ×'Ò'¨°$Ð'Ñ7Ô7Ð8Ð8r:   c                 ó   — d | _         d S rÁ   )rE   ro   s    r;   r€   zPyCodegen.clear_tosÈ  s   € Ø ˆÔÐÐr:   Úinstc                 óÊ   — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚| j                             |¦  «         |                      ¦   «          d S )Nzexpected Instruction, got )rZ   r   rt   r¥   rI   r\   r€   )rP   rÙ   s     r;   Úappend_outputzPyCodegen.append_outputË  s^   € Ý˜$¥Ñ,Ô,ð 	LÝ Ð!J½dÀ4¹j¼jÐ!JÐ!JÑKÔKÐKØŒ×Ò˜DÑ!Ô!Ð!Ø�ŠÑÔÐÐÐr:   Úinstsc                 ó²   — t          d„ |D ¦   «         ¦  «        st          d¦  «        ‚| j                             |¦  «         |                      ¦   «          d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rÁ   )rZ   r   rl   s     r;   ú	<genexpr>z*PyCodegen.extend_output.<locals>.<genexpr>Ò  s,   è è € Ð=Ð=°!•:˜a¥Ñ-Ô-Ð=Ð=Ð=Ð=Ð=Ð=r:   z3all elements of insts must be Instruction instances)Úallrt   rI   r�   r€   )rP   rÜ   s     r;   Úextend_outputzPyCodegen.extend_outputÑ  s]   € ÝÐ=Ð=°uÐ=Ñ=Ô=Ñ=Ô=ð 	XÝ Ð!VÑWÔWÐWØŒ×Ò˜EÑ"Ô"Ð"Ø�ŠÑÔÐÐÐr:   c                 ó   — | j         S rÁ   )rI   ro   s    r;   Úget_instructionszPyCodegen.get_instructions×  s
   € ØŒ|Ðr:   c                 ó,   — t           j        sd S | j        S rÁ   )r   rY   rO   ro   s    r;   Ú
get_pycodezPyCodegen.get_pycodeÚ  s   € ÝÔ%ð 	Ø�4ØŒ|Ðr:   c                 óf   — || j         d         vrt          |› d�¦  «        ‚t          d|¬¦  «        S )Nrž   ú missingÚ	LOAD_FAST©Úargval©rK   rt   r   ©rP   rÑ   s     r;   r¢   zPyCodegen.create_loadß  s?   € Ø�tÔ(¨Ô7Ð7Ð7Ý  DÐ!2Ð!2Ð!2Ñ3Ô3Ð3Ý! +°dÐ;Ñ;Ô;Ð;r:   c                 óœ   — ||                       ¦   «         vrt          |›d�¦  «        ‚t          j        dk    rdnd}t	          ||¬¦  «        S )Nú not in cell_and_freevarsrz   rè   ÚLOAD_CLOSUREré   )rL   rt   r~   r   r   )rP   rÑ   Ú	inst_names      r;   Úcreate_load_closurezPyCodegen.create_load_closureä  sY   € Ø�t×-Ò-Ñ/Ô/Ð/Ð/Ý  DÐ!EÐ!EÐ!EÑFÔFÐFÝ#&Ô#3°wÒ#>Ð#>�K�KÀNˆ	Ý! )°DÐ9Ñ9Ô9Ð9r:   c                 ót   — ||                       ¦   «         vrt          |›d�¦  «        ‚t          d|¬¦  «        S )Nrî   Ú
LOAD_DEREFré   ©rL   rt   r   rì   s     r;   Úcreate_load_derefzPyCodegen.create_load_derefê  sC   € Ø�t×-Ò-Ñ/Ô/Ð/Ð/Ý  DÐ!EÐ!EÐ!EÑFÔFÐFÝ! ,°tÐ<Ñ<Ô<Ð<r:   c                 óf   — || j         d         vrt          |› d�¦  «        ‚t          d|¬¦  «        S )Nrž   rç   Ú
STORE_FASTré   rë   rì   s     r;   rÆ   zPyCodegen.create_storeï  s?   € Ø�tÔ(¨Ô7Ð7Ð7Ý  DÐ!2Ð!2Ð!2Ñ3Ô3Ð3Ý! ,°tÐ<Ñ<Ô<Ð<r:   c                 ót   — ||                       ¦   «         vrt          |›d�¦  «        ‚t          d|¬¦  «        S )Nrî   ÚSTORE_DEREFré   rô   rì   s     r;   Úcreate_store_derefzPyCodegen.create_store_derefô  sC   € Ø�t×-Ò-Ñ/Ô/Ð/Ð/Ý  DÐ!EÐ!EÐ!EÑFÔFÐFÝ! -¸Ð=Ñ=Ô=Ð=r:   r‘   c                 ó¨   — |r| j         j                             |¦  «         || j        d         vrt	          |› d�¦  «        ‚t          d|¬¦  «        S )NÚco_namesz not in co_namesÚLOAD_GLOBALré   )r>   rJ   Úupdate_co_namesrK   rt   r   )rP   rÑ   r‘   s      r;   r¯   zPyCodegen.create_load_globalù  s_   € Øð 	1ØŒGŒN×*Ò*¨4Ñ0Ô0Ð0Ø�tÔ(¨Ô4Ð4Ð4Ý  DÐ!:Ð!:Ð!:Ñ;Ô;Ð;Ý! -¸Ð=Ñ=Ô=Ð=r:   c                 ó    — t          |¦  «        S rÁ   ©r   ©rP   rq   s     r;   r   zPyCodegen.create_load_const   s   € Ý  Ñ'Ô'Ð'r:   c                 ó$   — t          |d¬¦  «        S )NF)Úcheckedr   r  s     r;   rº   z%PyCodegen.create_load_const_unchecked  s   € Ý  °Ð6Ñ6Ô6Ð6r:   c                 óˆ   — | j         j                             |¦  «         |                      t	          |¦  «        ¦  «         d S rÁ   )r>   rJ   rþ   rÛ   r   rì   s     r;   Úload_methodzPyCodegen.load_method  s=   € ØŒŒ×&Ò& tÑ,Ô,Ð,Ø×ÒÕ-¨dÑ3Ô3Ñ4Ô4Ð4Ð4Ð4r:   Únargsc                 óJ   — |                       t          |¦  «        ¦  «         d S rÁ   )rá   r   )rP   r  s     r;   Úcall_methodzPyCodegen.call_method
  s%   € Ø×ÒÕ-¨eÑ4Ô4Ñ5Ô5Ð5Ð5Ð5r:   c                 ón   — || j         d         vr| j         dxx         |fz  cc<   t          d|¬¦  «        S )Nrü   Ú	LOAD_ATTRré   ©rK   r   rì   s     r;   r˜   zPyCodegen.create_load_attr  sI   € Ø�tÔ(¨Ô4Ð4Ð4ØÔ˜jÐ)Ð)Ô)¨d¨WÑ4Ð)Ð)Ñ)Ý! +°dÐ;Ñ;Ô;Ð;r:   c                 óV   — |                       |                      |¦  «        ¦  «         d S rÁ   )rÛ   r˜   rì   s     r;   Ú	load_attrzPyCodegen.load_attr  s*   € Ø×Ò˜4×0Ò0°Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7r:   Únamesc                 óF   ‡ — ˆ fd„|                      d¦  «        D ¦   «         S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r9   )r˜   )rV   rÑ   rP   s     €r;   rX   z/PyCodegen.create_load_attrs.<locals>.<listcomp>  s'   ø€ ÐIÐIÐI°�×%Ò% dÑ+Ô+ÐIÐIÐIr:   r†   )r¹   )rP   r  s   ` r;   Úcreate_load_attrszPyCodegen.create_load_attrs  s)   ø€ ØIÐIÐIÐI¸¿ºÀCÑ8HÔ8HÐIÑIÔIÐIr:   c                 ón   — || j         d         vr| j         dxx         |fz  cc<   t          d|¬¦  «        S )Nrü   Ú
STORE_ATTRré   r  rì   s     r;   Úcreate_store_attrzPyCodegen.create_store_attr  sI   € Ø�tÔ(¨Ô4Ð4Ð4ØÔ˜jÐ)Ð)Ô)¨d¨WÑ4Ð)Ð)Ñ)Ý! ,°tÐ<Ñ<Ô<Ð<r:   c                 óV   — |                       |                      |¦  «        ¦  «         d S rÁ   )rÛ   r  rì   s     r;   Ú
store_attrzPyCodegen.store_attr  s*   € Ø×Ò˜4×1Ò1°$Ñ7Ô7Ñ8Ô8Ð8Ð8Ð8r:   r   Úfn_nameÚ	push_nullÚnum_on_stackc                 óº  — g }|r“t           j        dk    rƒ|                     t          |                      |d¬¦  «        ¦  «        ¦  «         |dk    rE|                     g |                      |dz   ¦  «        ¢|                      |dz   ¦  «        ¢¦  «         nC|                     |                      |d¬¦  «        g|                      |dz   ¦  «        ¢¦  «         |S )z6Load the global fn_name on the stack num_on_stack down©r{   é   Tr�   r   r’   r   )r~   r   r�   r   r¯   Úrot_n)rP   r  r  r  rJ   s        r;   Úload_function_namezPyCodegen.load_function_name   s÷   € ð ˆØð 	�Ô)¨WÒ4Ð4Ø�MŠM�-¨×(?Ò(?ÀÈTÐ(?Ñ(RÔ(RÑSÔSÑTÔTÐTØ˜aÒÐØ—’ðØŸš L°1Ñ$4Ñ5Ô5ðàŸš L°1Ñ$4Ñ5Ô5ðñô ð øð �MŠMà×+Ò+¨G¸Ð+Ñ>Ô>ðà—Z’Z ¨qÑ 0Ñ1Ô1ðñô ð ð ˆr:   Únc                 ó  — 	 t          |¦  «        S # t          $ rd t          |¦  «        |                      t	          |¦  «        ¦  «        gt          d¦  «        ¢t          dd¦  «        ¢t          d|¬¦  «        ‘cY S w xY w)Nr’   FÚUNPACK_SEQUENCE©Úarg)r   ÚAttributeErrorr   rº   r"   r   r   )rP   r  s     r;   r  zPyCodegen.rot_n7  s¢   € ð
	Ý ‘?”?Ð"øÝð 	ð 	ð 	õ # 1Ñ%Ô%Ø×0Ò0µ¸a±´ÑAÔAðõ ˜a‘”ðõ )¨°Ñ6Ô6ð	õ
 #Ð#4¸!Ð<Ñ<Ô<ðð ð ð ð	øøøs   ‚ ‘A+A?Á>A?c                 óô   — t           j        dk     rt          d¦  «        ‚|                      d„ ¦  «        gt           j        dk    rt	          dd¬¦  «        fnd¢t          d	d
¦  «        ¢t	          d¦  «        ‘S )Nr  zpop_null requires Python 3.11+c                  ó   — d S rÁ   r9   r9   r:   r;   r�   z$PyCodegen.pop_null.<locals>.<lambda>J  s   € °T€ r:   rz   ÚSWAPr’   r"  r9   r   FÚPOP_TOP)r~   r   rt   rº   r   r   ro   s    r;   Úpop_nullzPyCodegen.pop_nullD  s”   € õ Ô˜gÒ%Ð%Ý Ð!AÑBÔBÐBà×,Ò,¨\¨\Ñ:Ô:ð

õ
 Ô# wÒ.Ð.õ $ F°Ð2Ñ2Ô2Ð4Ð4àð

õ " ! UÑ+Ô+ð

õ ˜yÑ)Ô)ð

ð 
	
r:   c                 óJ   — |                       t          d¦  «        ¦  «         d S )Nr(  )rÛ   r   ro   s    r;   Úpop_topzPyCodegen.pop_topU  s%   € Ø×ÒÕ-¨iÑ8Ô8Ñ9Ô9Ð9Ð9Ð9r:   c                 óN   — |                       t          ||¬¦  «        ¦  «         d S )N)r  )rá   r   )rP   r  r  s      r;   Úcall_functionzPyCodegen.call_functionX  s*   € Ø×ÒÕ/°ÀÐKÑKÔKÑLÔLÐLÐLÐLr:   c                 óH   — |                       t          ¦   «         ¦  «         d S rÁ   )rÛ   r   ro   s    r;   Údup_topzPyCodegen.dup_top[  s"   € Ø×Ò�>Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,r:   Úvarnamec                 óV   — |                       |                      |¦  «        ¦  «         d S rÁ   )rÛ   rÆ   ©rP   r0  s     r;   ÚstorezPyCodegen.store^  s*   € Ø×Ò˜4×,Ò,¨WÑ5Ô5Ñ6Ô6Ð6Ð6Ð6r:   c                 óV   — |                       |                      |¦  «        ¦  «         d S rÁ   )rÛ   rõ   r2  s     r;   Ú
load_derefzPyCodegen.load_derefa  s*   € Ø×Ò˜4×1Ò1°'Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r:   Úcodec                 óÌ  — | j         }|                     |                      |¦  «        ¦  «         t          j        dk     r(|                     |                      |¦  «        ¦  «         t          j        dk    r4|                     t          d¦  «        t          dd¬¦  «        g¦  «         n$|                     t          dd¬¦  «        ¦  «         |                      ¦   «          dS )a[  Creates a closure with code object `code`.

        Expects the TOS to be the tuple of cells to use for this closure.
        TOS will be popped to create the closure.
        Args:
            - fn_name: name of the function
            - code: code object of the function
                (does not include the tuple of cells on the TOS)
        r  rz   ÚMAKE_FUNCTIONÚSET_FUNCTION_ATTRIBUTEé   r"  N)rI   r\   r   r~   r   r�   r   r€   )rP   r  r6  rJ   s       r;   Úmake_function_with_closurez$PyCodegen.make_function_with_closured  sÛ   € ð ”ˆà�Š�d×,Ò,¨TÑ2Ô2Ñ3Ô3Ð3ÝÔ˜gÒ%Ð%Ø�MŠM˜$×0Ò0°Ñ9Ô9Ñ:Ô:Ð:ÝÔ˜wÒ&Ð&Ø�MŠMå& Ñ7Ô7Ý&Ð'?ÀTÐJÑJÔJðñô ð ð ð �MŠMÕ,¨_À$ÐGÑGÔGÑHÔHÐHà�ŠÑÔÐÐÐr:   Úmodc                 ó4  — | j         j        }|j        }t          j        dd|j        ¦  «        }|                     |d¦  «        |u r|                      |d¬¦  «        S d|› �}| j         j                             ||¦  «        }|                      |d¬¦  «        S )zT
        Generate a LOAD_GLOBAL instruction to fetch a given python module.
        z^.*[.]Ú NTr�   Ú
___module_)	r>   rJ   Úglobal_scoperÔ   rÕ   r4   r¡   r¯   Úinstall_global_by_id)rP   r<  rJ   r@  rÑ   ÚprefixÚglobal_names          r;   Úcreate_load_python_modulez#PyCodegen.create_load_python_moduleƒ  s�   € ð ””ˆØÔ*ˆÝŒv�i  S¤\Ñ2Ô2ˆØ×Ò˜D $Ñ'Ô'¨3Ð.Ð.Ø×*Ò*¨4°TÐ*Ñ:Ô:Ð:Ø$˜dÐ$Ð$ˆØ”g”n×9Ò9¸&À#ÑFÔFˆØ×&Ò& {¸Ð&Ñ=Ô=Ð=r:   rª   c                 ó0   — || j         vrd| j         |<   dS dS )zM
        Mark a source as a temp variable, so that it can be reused.
        N)rA   )rP   rª   s     r;   Úmark_source_tempzPyCodegen.mark_source_temp�  s+   € ð ˜œÐ&Ð&Ø$(ˆDŒM˜&Ñ!Ð!Ð!ð 'Ð&r:   c                 óþ  ‡ ‡	— ‰                       ‰                      |d¦  «        ¦  «         ‰ j        j        j        }dt
          dt          t
                   fd„Š	dt          t
                   dt          ddfˆ	fd„} |t          d	„ |D ¦   «         ¦  «        ‰ ¦  «         d}t          j
        rd‰                      ˆ fd
„¦  «         ‰                       t          dd¦  «        ¦  «         ‰                      ¦   «         }‰                      |¦  «         g }t          |¦  «        D ]Ó\  }}‰ j                             d¦  «        }|                     |¦  «         |j        rj‰                      ˆ fd„¦  «         ‰                      |¦  «         ‰                       t          dd¦  «        ¦  «         ‰                      |› d�|¦  «         Œ¥‰                      |¦  «         ‰                      |› d�|¦  «         ŒÔt          j
        r‰‰                      ˆ fd„¦  «         |€t+          d¦  «        ‚‰                       ‰                      |¦  «        g¦  «         ‰                       t          dd¦  «        ¦  «         ‰                      ¦   «          ‰                       t          t1          |¦  «        d¦  «        ¦  «         ‰                      ¦   «          ‰                      d|› dd                     |¦  «        › d�¦  «         dS )z2Call the generated code function stored in fn_nameTrª   rC   c                 óú   — g }t          | t          ¦  «        r|                     | j        ¦  «         t          | t          ¦  «        r4t          | j        t          ¦  «        r|                     | j        ¦  «         |S rÁ   )rZ   r   r\   Úbaser   r2   r    )rª   Únested_sourcess     r;   Úextract_nested_sourceszBPyCodegen.make_call_generated_code.<locals>.extract_nested_sources�  sx   € Ø+-ˆNÝ˜&¥-Ñ0Ô0ð 3Ø×%Ò% f¤kÑ2Ô2Ð2Ý˜&Õ"3Ñ4Ô4ð 4½Ø”�fñ:ô :ð 4ð ×%Ò% f¤lÑ3Ô3Ð3Ø!Ð!r:   ÚsourcesÚcodegenNc                 óò   •— t          ¦   «         }| re|                      ¦   «         }||v r|                     |¦  «         Œ0|                     |¦  «         |                       ‰|¦  «        ¦  «         | °cd S d S rÁ   )r
   ÚpopleftrF  r‘   r�   )rL  rM  Úseen_sourcesÚcurrent_sourcerK  s       €r;   Úcollect_temp_sourcesz@PyCodegen.make_call_generated_code.<locals>.collect_temp_sources§  s�   ø€ Ý/9©|¬|ˆLØð 	GØ!(§¢Ñ!2Ô!2�Ø! \Ð1Ð1à×,Ò,¨^Ñ<Ô<Ð<ð Ø× Ò  Ñ0Ô0Ð0Ø—’Ð5Ð5°nÑEÔEÑFÔFÐFð ð 	Gð 	Gð 	Gð 	Gð 	Gr:   c                 ó*   — g | ]}|j         ®	|j         ‘ŒS rÁ   )rª   )rV   r#  s     r;   rX   z6PyCodegen.make_call_generated_code.<locals>.<listcomp>¸  s!   € ÐMÐMÐM #°c´jÐ6L�3”:Ð6LÐ6LÐ6Lr:   c                  óD   •— ‰                       t          j        d¦  «        S )NÚrecord_pregraph_bytecode_enterr�   ro   s   €r;   r�   z4PyCodegen.make_call_generated_code.<locals>.<lambda>¿  s   ø€ ˜×-Ò-Ý”NÐ$Dñô € r:   r   Fr#  c                  óˆ   •— ‰                       ‰                      t          ¦  «        ‰                      d¦  «        g¦  «        S )NÚ_as_tensor_fullprec)rá   rD  rµ   r˜   ro   s   €r;   r�   z4PyCodegen.make_call_generated_code.<locals>.<lambda>Í  s?   ø€ ˜D×.Ò.à ×:Ò:½5ÑAÔAØ ×1Ò1Ð2GÑHÔHðñô € r:   r   z  = torch._as_tensor_fullprec({})rc   c                  óD   •— ‰                       t          j        d¦  «        S )NÚrecord_pregraph_bytecode_exitr�   ro   s   €r;   r�   z4PyCodegen.make_call_generated_code.<locals>.<lambda>Þ  s   ø€ ˜×-Ò-Ý”NÐ$Cñô € r:   zcm_var must not be Nonez__graph_out = ú(z, ú))rá   r  r>   rJ   Ú	graphargsr    rÉ   r   r=   r   Úrecord_runtime_overheadr   r   rM   r3  Ú	enumeraterf   r\   Úpass_arg_as_tensorrv   r_   rt   r¢   r+  r}   rÍ   Újoin)
rP   r  r\  rR  Úcm_varÚarg_varnamesrÏ   r#  Úarg_varnamerK  s
   `        @r;   Úmake_call_generated_codez"PyCodegen.make_call_generated_code—  sn  øø€ à×Ò˜4×2Ò2°7¸DÑAÔAÑBÔBÐBà”G”NÔ,ˆ	ð	"­6ð 	"µd½6´lð 	"ð 	"ð 	"ð 	"ð	G­%µ¬-ð 	GÅ)ð 	GÐPTð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð  	ÐÝÐMÐM¨ÐMÑMÔMÑNÔNÐPTñ	
ô 	
ð 	
ð ˆÝÔ)ð 		à×Òðð ð ð ñô ð ð
 ×ÒÕ3°A°uÑ=Ô=Ñ>Ô>Ð>Ø—\’\‘^”^ˆFØ�JŠJ�vÑÔÐàˆÝ 	Ñ*Ô*ð 	>ð 	>‰FˆAˆsØœ'×4Ò4°UÑ;Ô;ˆKØ×Ò Ñ,Ô,Ð,ØÔ%ð >Ø×"Ò"ðð ð ð ñô ð ð ×%Ò% cÑ*Ô*Ð*Ø×"Ò"Õ#7¸¸5Ñ#AÔ#AÑBÔBÐBØ—’ ;Ð RÐ RÐ RÐTWÑXÔXÐXÐXà×%Ò% cÑ*Ô*Ð*Ø—’ ;Ð 7Ð 7Ð 7¸Ñ=Ô=Ð=Ð=åÔ)ð 	à×Òðð ð ð ñô ð ð
 ˆ~Ý$Ð%>Ñ?Ô?Ð?Ø×Ò × 0Ò 0°Ñ 8Ô 8Ð9Ñ:Ô:Ð:Ø×ÒÕ3°A°uÑ=Ô=Ñ>Ô>Ð>Ø�LŠL‰NŒNˆNà×ÒÕ/µ°I±´ÀÑFÔFÑGÔGÐGØ×ÒÑÔÐØ�ŠØA˜WÐAÐA t§y¢y°Ñ'>Ô'>ÐAÐAÐAñ	
ô 	
ð 	
ð 	
ð 	
r:   Úmodule_namec                 ó$   — t          d|¬¦  «        S )NÚIMPORT_NAMEré   ©r   )rP   re  s     r;   Úcreate_import_namezPyCodegen.create_import_nameî  s   € Ý! -¸ÐDÑDÔDÐDr:   Úobject_namec                 ó–   — t          | j                             |¦  «        |¦  «        }|                      |¦  «          | |¦  «         d S rÁ   )r   r>   Úimport_sourcerF  )rP   re  rj  rª   s       r;   rŽ   zPyCodegen.load_import_fromñ  sH   € Ý˜DœG×1Ò1°+Ñ>Ô>ÀÑLÔLˆð
 	×Ò˜fÑ%Ô%Ð%ØˆˆV‰Œˆˆˆr:   Úkw_namesc           	      ó”  — t           j        dk    r}t          ||¦  «        }|d         j        dk    rt	          d|d         j        › �¦  «        ‚|                     d|                      |¦  «        ¦  «         t          d|¬¦  «        |d<   |S t           j        dk    r†t          ||¦  «        }t           j        dk    rd}d}nd	}d
}||         j        |k    r#t	          d|› d|› d||         j        › �¦  «        ‚t          d|¬¦  «        }|                     ||¦  «         |S |                      |¦  «        t          d|¬¦  «        gS )Nrz   éÿÿÿÿÚCALLz*expected last instruction to be CALL, got ÚCALL_KWr"  r  )r{   é   éþÿÿÿÚPRECALLzexpected instruction at index z to be z, got ÚKW_NAMESré   ÚCALL_FUNCTION_KW)r~   r   r   Úopnamert   Úinsertr   r   )rP   r  rm  r  rJ   ÚidxÚexpected_instÚkw_names_insts           r;   Úcreate_call_function_kwz!PyCodegen.create_call_function_kwú  s…  € õ Ô˜wÒ&Ð&Ý)¨%°Ñ;Ô;ˆFØ�bŒzÔ  FÒ*Ð*Ý$ØTÀÈÄÔARÐTÐTñô ð ð �MŠM˜"˜d×4Ò4°XÑ>Ô>Ñ?Ô?Ð?Ý+¨I¸5ÐAÑAÔAˆF�2‰JØˆMÝÔ Ò(Ð(Ý)¨%°Ñ;Ô;ˆFÝÔ 7Ò*Ð*Ø�Ø &��à�Ø )�Ø�cŒ{Ô! ]Ò2Ð2Ý$ð0°Sð 0ð 0Àð 0ð 0Ø! #œ;Ô-ð0ð 0ñô ð õ /¨zÀ(ÐKÑKÔKˆMØ�MŠM˜#˜}Ñ-Ô-Ð-ØˆMà×"Ò" 8Ñ,Ô,ÝÐ1°uÐ=Ñ=Ô=ð
ð 	
r:   c                 ó$   — t          d|¬¦  «        S )NÚDELETE_FASTré   rh  r  s     r;   rË   zPyCodegen.create_delete  s   € Ý! -¸Ð>Ñ>Ô>Ð>r:   )NNNN)F)Tr    )r   )Ir4   r5   r6   Ú__doc__rµ   ÚnnÚModuler¤   Údictr$   r    r   rQ   r_   rÉ   Úboolri   rp   r	   rv   r   r   r¿   r7   r®   r—   r§   rÍ   r   rd   r   r   r×   r€   rÛ   rá   rã   rå   r¢   rñ   rõ   rÆ   rú   r¯   r   rº   r  r  r˜   r  r  r  r  r  r  r)  r+  r-  r/  r3  r5  ÚtypesÚCodeTyper;  Ú
ModuleTyperD  rF  rd  ri  rŽ   r|  ÚobjectrË   r9   r:   r;   r=   r=   H   s  € € € € € ðð ð (,Ø'+Ø?CØ:>ðð à'ðð ŒhŒo Ñ$ðð  ™*ð	ð
 �¨Ñ/°Ð4Ô5¸Ñ<ðð ! ¨ Ô0°4Ñ7ðð 
ðð ð ð ð<X ð Xð Xð Xð Xð EIð*ð *ð *Ø  œIð*Ø=Að*à	ð*ð *ð *ð *ð A 4¨Ô#8ð Að Að Að Að?Ø˜?¨F°JÐ>Ô?ð?à	ð?ð ?ð ?ð ?ð DIðð Ø˜r 4˜xÔ(ðØ<@ðà	ðð ð ð ð@ KOðj"ð j"Ø$ vÑ-°Ñ4ðj"ØCGðj"à	ðj"ð j"ð j"ð j"ðX! oð !¸#ð !ð !ð !ð !ð3 sð 3¨tð 3ð 3ð 3ð 3ð4˜°Ñ7ð 4¸Dð 4ð 4ð 4ð 4ð
!ð !ð !ð !ð˜X o¸Ñ&>Ô?ð ÀDð ð ð ð ð& kð &ð &ð &ð &ð9¨#ð 9°cð 9¸dÀ;Ô>Oð 9ð 9ð 9ð 9ð!ð !ð !ð !ð +ð °$ð ð ð ð ð 4¨Ô#4ð ¸ð ð ð ð ð $ {Ô"3ð ð ð ð ð˜D œI¨Ñ,ð ð ð ð ð
< ð <¨ð <ð <ð <ð <ð
:¨ð :°ð :ð :ð :ð :ð= cð =¨kð =ð =ð =ð =ð
= ð =¨ð =ð =ð =ð =ð
> sð >¨{ð >ð >ð >ð >ð
>ð > sð >°ð >À+ð >ð >ð >ð >ð( sð (¨{ð (ð (ð (ð (ð7°ð 7¸ð 7ð 7ð 7ð 7ð5 ð 5¨ð 5ð 5ð 5ð 5ð6 ð 6¨ð 6ð 6ð 6ð 6ð< Sð <¨[ð <ð <ð <ð <ð
8˜cð 8 dð 8ð 8ð 8ð 8ðJ sð J¨t°KÔ/@ð Jð Jð Jð Jð= cð =¨kð =ð =ð =ð =ð
9˜sð 9 tð 9ð 9ð 9ð 9ð BCðð ØðØ'+ðØ;>ðà	ˆkÔ	ðð ð ð ð.�sð ˜t KÔ0ð ð ð ð ð
˜$˜{Ô+ð 
ð 
ð 
ð 
ð":ð :ð :ð :ðM 3ð M°4ð M¸Dð Mð Mð Mð Mð-ð -ð -ð -ð7˜Sð 7 Tð 7ð 7ð 7ð 7ð< #ð <¨$ð <ð <ð <ð <ðàðð Œnðð 
ð	ð ð ð ð>>¨UÔ-=ð >À+ð >ð >ð >ð >ð) vð )°$ð )ð )ð )ð )ðU
°ð U
¸ð U
ð U
ð U
ð U
ðnE¨cð E°kð Eð Eð Eð Eð¨Cð ¸cð Àdð ð ð ð ð
Øð
Ø$,¨S¤Mð
Ø>Bð
à	ˆkÔ	ð
ð 
ð 
ð 
ðB? 6ð ?¨kð ?ð ?ð ?ð ?ð ?ð ?r:   r=   )Fr  rF   ÚdataclassesrÔ   r~   r„  r   r   Úcollections.abcr   r   Útypingr   r   r	   Útorch.nnrµ   Útorch.utils._ordered_setr
   r>  r   r   r   Úbytecode_transformationr   r   r   r   r   r   r   r   r   r   r   r   r   Úexcr   rª   r   r   r   r    r!   r"   Úvariables.baser#   r$   Úvariables.functionsr%   r&   Úvariables.nn_moduler'   Úvariables.script_objectr(   Úvariables.tensorr)   r*   r+   r,   Úvariables.torch_functionr-   Útorch._dynamo.variables.builderr.   Úsymbolic_convertr/   Ú	dataclassr1   r=   r9   r:   r;   ú<module>r˜     s
  ðð
ð 
ð Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø /Ð /Ð /Ð /Ð /Ð /à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð 2Ð 1Ð 1Ð 1Ð 1Ð 1Ø >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ Bð ð <Ø8Ð8Ð8Ð8Ð8Ð8à;Ð;Ð;Ð;Ð;Ð;ð Ôðð ð ð ð ñ ô ñ Ôðð
T?ð T?ð T?ð T?ð T?ñ T?ô T?ð T?ð T?ð T?r:   