§
    ŠŠtj£�  ã                   ó.  — U d dl Z d dlZd dlZd dlZd dl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
 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mZ d dlZd dlmc mZ d dlmZ d dlmZ d d	l m!Z! d d
l"m#Z# d dl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 g d¢Z6 ej7        e8¦  «        Z9 e!e8d¦  «        Z:de;de<fd„Z=de>e;df         de?e@e;f         de;fd„ZA e'd¬¦  «         G d„ d¦  «        ¦   «         ZB e'd¬¦  «         G d„ d ¦  «        ¦   «         ZCg d!¢ZD eE¦   «         ZFeEe>e@e@f                  eGd"<   d#edef         ddfd$„ZH e'd%¬¦  «         G d&„ d'¦  «        ¦   «         ZIdFd)e@deJdz  fd*„ZK e'd%¬¦  «         G d+„ d,eI¦  «        ¦   «         ZL e'd¬¦  «        d-e;ddfd.„¦   «         ZM e'd%¬¦  «         G d/„ d0eN¦  «        ¦   «         ZO e'd%¬¦  «         G d1„ d2¦  «        ¦   «         ZP e'd¬¦  «         G d3„ d4eP¦  «        ¦   «         ZQ e'd%¬¦  «         G d5„ d6eP¦  «        ¦   «         ZR e'd¬¦  «         G d7„ d8eP¦  «        ¦   «         ZSe*D ]ZTd9e@ddfd:„ZU eUeT¦  «         Œd;e@ddfd<„ZVe+D ]ZW eVeW¦  «         Œd=e0defd>„ZXd?eId@e?eef         de?ee0f         fdA„ZYdB„ g e1¢ eZd¦  «        ‘ eZd¦  «        ‘ej[        j\        ‘ej[        j]        ‘D ¦   «         Z^dC„ e^eP<   dD„ e^e><   dE„ e^e_<   eYe^e?<   e^e_         e^e.<   e^e?         e^e-<   dS )Gé    N)ÚOrderedDict)ÚCallableÚIterator)ÚfieldsÚis_dataclass)ÚAnyÚcastÚTypeVar)ÚNever)Ú_fx_map_arg)Úis_opaque_value_type)ÚgetArtifactLogger)Ú	tree_map_)ÚCapturedTracebacké   )Úcompatibility)ÚGraphÚmagic_methodsÚreflectable_magic_methods)Úimmutable_dictÚimmutable_list)ÚArgumentÚ
base_typesÚNodeÚTarget)Úcheck_for_mutable_operation)	Ú
TracerBaseÚGraphAppendingTracerÚ
TraceErrorÚProxyÚ	MetaProxyÚ	AttributeÚParameterProxyÚScopeÚScopeContextManagerÚ
annotationÚobjÚreturnc                 ón   — ddl }ddl}t          | |j        |j        |j        |j        |j        f¦  «        S )zÐ
    Returns True if obj is an arbitrary callable (function, lambda, method, etc.)
    that requires special tracing to handle. These cannot be symbolically traced
    using the standard Proxy mechanism.
    r   N)Ú	functoolsÚtypesÚ
isinstanceÚFunctionTypeÚ
MethodTypeÚBuiltinFunctionTypeÚBuiltinMethodTypeÚpartial)r'   r*   r+   s      úL/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/proxy.pyÚ_is_arbitrary_callabler3   1   sQ   € ð ÐÐÐØ€L€L€LåØàÔØÔØÔ%ØÔ#ØÔð	
ñ	ô 	ð 	ó    Úargs.Úkwargsc                 ó~   ‡— dŠt          d¦  «        }d|d|fˆfd„}t          || ¦  «         t          ||¦  «         ‰S )z‘
    Recursively searches args and kwargs for any arbitrary callable.
    Returns the first arbitrary callable found, or None if none exist.
    NÚ_Tr'   r(   c                 ó2   •— ‰�| S t          | ¦  «        r| Š| S ©N)r3   )r'   Úfounds    €r2   Úcheckz'_find_arbitrary_callable.<locals>.checkQ   s(   ø€ àÐØˆJÝ! #Ñ&Ô&ð 	ØˆEØˆ
r4   )r
   r   )r5   r6   r8   r<   r;   s       @r2   Ú_find_arbitrary_callabler=   F   sh   ø€ ð €Eå	�‰Œ€Bð�2ð ˜"ð ð ð ð ð ð õ ˆe�TÑÔÐÝˆe�VÑÔÐØ€Lr4   F©Úis_backward_compatiblec                   ó0   ‡ — e Zd ZdZdededdfˆ fd„Zˆ xZS )r$   a7  Scope object that records the module path and the module type
    of a module. Scope is used to track the information of the module
    that contains a Node in a Graph of GraphModule. For example::

        class Sub(torch.nn.Module):
            def forward(self, x):
                # This will be a call_method Node in GraphModule,
                # scope for this would be (module_path="sub", module_type=Sub)
                return x.transpose(1, 2)


        class M(torch.nn.Module):
            def __init__(self) -> None:
                self.sub = Sub()

            def forward(self, x):
                # This will be a call_method Node as well,
                # scope for this would be (module_path="", None)
                x = x.transpose(1, 2)
                x = self.sub(x)
                return x

    Úmodule_pathÚmodule_typer(   Nc                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S r:   )ÚsuperÚ__init__rA   rB   )ÚselfrA   rB   Ú	__class__s      €r2   rE   zScope.__init__x   s/   ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔØ&ˆÔÐÐr4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   rE   Ú__classcell__©rG   s   @r2   r$   r$   ^   s\   ø€ € € € € ðð ð0' Cð '°cð '¸dð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r4   r$   c                   óL   ‡ — e Zd ZdZdededdfˆ fd„Zdefd„Zdeddfd	„Zˆ xZ	S )
r%   zúA context manager to track the Scope of Node during symbolic tracing.
    When entering a forward function of a Module, we'll update the scope information of
    the current module, and when we exit, we'll restore the previous scope information.
    ÚscopeÚcurrent_scoper(   Nc                 ó¸   •— t          ¦   «                              ¦   «          t          j        |¦  «        | _        |j        |_        |j        |_        || _        d S r:   )rD   rE   ÚcopyÚ_prev_scoperA   rB   Ú_scope)rF   rP   rQ   rG   s      €r2   rE   zScopeContextManager.__init__…   sN   ø€ õ
 	‰Œ×ÒÑÔÐåœ9 UÑ+Ô+ˆÔà)Ô5ˆÔØ)Ô5ˆÔàˆŒˆˆr4   c                 ó   — | j         S r:   )rU   ©rF   s    r2   Ú	__enter__zScopeContextManager.__enter__“   s
   € ØŒ{Ðr4   r5   c                 ó^   — | j         j        | j        _        | j         j        | j        _        d S r:   )rT   rA   rU   rB   )rF   r5   s     r2   Ú__exit__zScopeContextManager.__exit__–   s'   € Ø"&Ô"2Ô">ˆŒÔØ"&Ô"2Ô">ˆŒÔØˆr4   )
rH   rI   rJ   rK   r$   rE   rX   ÚobjectrZ   rM   rN   s   @r2   r%   r%   ~   s    ø€ € € € € ðð ð
àðð ðð 
ð	ð ð ð ð ð ð˜5ð ð ð ð ð˜fð ¨ð ð ð ð ð ð ð ð r4   r%   )Únn_module_stackÚtorch_fnÚsource_fn_stackÚoriginal_atenÚ	recomputeÚac_graph_idÚhas_backward_hookÚ	from_nodeÚquantization_tagÚ_numeric_debug_handleÚcustomÚpartitioner_tagÚ_STACK_TRACE_ANCHORSÚfnc                 ó|   — t          | dd ¦  «        }|�(t                               |j        |j        f¦  «         d S d S )NÚ__code__)Úgetattrrh   ÚaddÚco_filenameÚco_name)ri   Úcodes     r2   Ú_register_stack_trace_anchorrq   ³   sE   € Ý�2�z 4Ñ(Ô(€DØÐÝ× Ò  $Ô"2°D´LÐ!AÑBÔBÐBÐBÐBð Ðr4   Tc                   ó  — e Zd ZU eed<   dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed	<   eed
<   eeeeef         f         ed<   eeeeef         f         ed<    ed¬¦  «        	 	 d'dededeedf         deeef         dedz  dedz  defd„¦   «         Zdej        dej        fd„Z ed¬¦  «        deddfd„¦   «         Z ed¬¦  «        	 	 	 d(dededeedf         deeef         dedz  dedz  deegdf         dz  ddfd„¦   «         Zdej        dz  fd „Z  ed¬¦  «        d!edefd"„¦   «         Z! ed¬¦  «        d#ddefd$„¦   «         Z" ed¬¦  «        d#dde#fd%„¦   «         Z$ ed¬¦  «        d)d&„¦   «         Z%dS )*r   ÚgraphFÚrecord_stack_tracesÚ!_record_forward_stack_traces_onlyÚcheck_mutable_operationsÚtrace_assertsÚproxy_buffer_attributesÚforwardÚtraced_func_namerP   Úmodule_stackÚnode_name_to_scopeTr>   NÚkindÚtargetr5   .r6   ÚnameÚ	type_exprr(   c                 ó~  — |dk    r:| j         r3t          t          dt          f         |¦  «        }t	          |||¦  «         | j                             ||||||¦  «        }| j        j        | j        j	        f| j
        |j        <   t          j        ¦   «         �rWt          j        ¦   «         }	|	                     d¦  «        }
|
r)|
|_        t          j        |
v rd|j        d<   d|j        d<   t&          D ](}||	v r"t)          j        |	|         ¦  «        |j        |<   Œ)t+          |j        ¦  «        }|�+t,                               d||j        ¦  «         ||j        d	<   t          j        ¦   «         }|�]d|j        d
<   d|j        v r"|j                             d¦  «        |j        d<   d|j        v r|j                             d¦  «        |_        |	                     dd¦  «        r
d|j        d<   n(| j        r!t)          j        | j        ¦  «        |j        d<   | j        rƒ|j        s|t7          j        ¦   «                              ¦   «         }|rU|                      |¦  «        }|r>d                     |                      ¦   «         ¦  «         !                    ¦   «         |_        tD                               d|¦  «         |S )a'  
        Inserts a graph node given target, args, kwargs, and name.

        This method can be overridden to do extra checking, validation, or
        modification of values used in node creation. For example, one might
        want to disallow in-place operations from being recorded.
        Úcall_function.Ústack_traceTÚis_gradient_accÚautograd_backwardNzAssigning new_seq_nr %s to %sÚseq_nrÚis_functional_regeneratedrf   Fr\   Ú zcreate_node %s)#rv   r	   r   r   r   rs   Úcreate_noderP   rA   rB   r|   r   Úfx_tracebackÚhas_preserved_node_metaÚget_current_metaÚgetrƒ   ÚGRADIENT_ACC_SPECIAL_STACKÚmetaÚ_COPY_META_FIELDSrS   Ú_get_seq_nrÚannotation_logÚdebugÚget_current_replay_noder{   rt   r   ÚextractÚsummaryÚ_filter_traceback_framesÚjoinÚformatÚstripÚlog)rF   r}   r~   r5   r6   r   r€   Ú	target_fnÚnodeÚcurrent_metarƒ   ÚfieldÚ
new_seq_nrÚreplay_nodeÚuser_stack_summarys                  r2   r‰   zTracerBase.create_nodeÖ   sÐ  € ð$ �?Ò"Ð" tÔ'DÐ"Ý�X c­3 hÔ/°Ñ8Ô8ˆIÝ'¨	°4¸Ñ@Ô@Ð@àŒz×%Ò% d¨F°D¸&À$È	ÑRÔRˆð ŒJÔ"ØŒJÔ"ð.
ˆÔ ¤	Ñ*õ Ô/Ñ1Ô1ñ '	HÝ+7Ô+HÑ+JÔ+JˆLà&×*Ò*¨=Ñ9Ô9ˆKØð :Ø#.�Ô åÔ:¸kÐIÐIØ37�D”IÐ/Ñ0Ø59�D”IÐ1Ñ2õ +ð Fð F�Ø˜LÐ(Ð(Ý'+¤y°¸eÔ1DÑ'EÔ'E�D”I˜eÑ$øå$ T¤YÑ/Ô/ˆJØÐ%Ý×$Ò$Ø3°ZÀÄñô ð ð '1�”	˜(Ñ#õ
 (4Ô'KÑ'MÔ'MˆKØÐ&Ø9=�”	Ð5Ñ6Ø˜{Ô/Ð/Ð/Ø*5Ô*:×*>Ò*>¸xÑ*HÔ*H�D”I˜hÑ'Ø  KÔ$4Ð4Ð4Ø'2Ô'7×';Ò';¸MÑ'JÔ'J�DÔ$à×ÒÐ 3°UÑ;Ô;ð 6Ø15�”	Ð-Ñ.øàÔð 	HÝ+/¬9°TÔ5FÑ+GÔ+GˆDŒIÐ'Ñ(àÔ#ð 	T¨DÔ,<ð 	TÝ!2Ô!:Ñ!<Ô!<×!DÒ!DÑ!FÔ!FÐØ!ð TØ%)×%BÒ%BÐCUÑ%VÔ%VÐ"Ø%ð TØ')§w¢wÐ/A×/HÒ/HÑ/JÔ/JÑ'KÔ'K×'QÒ'QÑ'SÔ'S�DÔ$å�	Š	Ð" DÑ)Ô)Ð)Øˆr4   r¢   c                 ó  ‡— g }| j         rd„ |D ¦   «         }n8d}t          |¦  «        D ]\  }}|j        dk    r||d …         }|} nŒ|dk    rg }ddlmŠ ˆfd„|D ¦   «         }t
          j                             |¦  «        S )Nc                 ó†   — g | ]>}|j         d k    s/|j                             d¦  «        s|j        |j         ft          v ¯<|‘Œ?S )ry   ztorch/__init__.py)r   ÚfilenameÚendswithrh   )Ú.0Úframes     r2   ú
<listcomp>z7TracerBase._filter_traceback_frames.<locals>.<listcomp>/  s`   € ð ð ð àà”J )Ò+Ð+Ø”~×.Ò.Ð/BÑCÔCð ,àœ¨¬
Ð3Õ7KÐKÐKð ð
 LÐKÐKr4   éÿÿÿÿry   r   )Úuninteresting_filesc                 ó6   •— g | ]}|j          ‰¦   «         v¯|‘ŒS © )r¥   )r§   r¨   r«   s     €r2   r©   z7TracerBase._filter_traceback_frames.<locals>.<listcomp>G  s:   ø€ ð 
ð 
ð 
àØŒ~Ð%8Ð%8Ñ%:Ô%:Ð:Ð:ð à:Ð:Ð:r4   )ru   Ú	enumerater   Ú%torch.fx.experimental.symbolic_shapesr«   Ú	tracebackÚStackSummaryÚ	from_list)rF   r¢   Úuser_framesÚfirst_forwardÚir¨   r«   s         @r2   r—   z#TracerBase._filter_traceback_frames(  sç   ø€ ð
 57ˆØÔ1ð 	?ðð à/ðñ ô ˆKˆKð ˆMÝ%Ð&8Ñ9Ô9ð ð ‘��5Ø”: Ò*Ð*Ø"4°Q°R°RÔ"8�KØ$%�MØ�Eð +ð  Ò"Ð"Ø<>�àMÐMÐMÐMÐMÐMð
ð 
ð 
ð 
à$ð
ñ 
ô 
ˆõ Ô%×/Ò/°Ñ<Ô<Ð<r4   r�   r    c                 ó"   — t          || ¦  «        S r:   )r    )rF   r�   s     r2   ÚproxyzTracerBase.proxyO  s   € å�T˜4Ñ Ô Ð r4   Úproxy_factory_fnc                 ó¤  — |                       |¦  «        }|                       |¦  «        }	t          |t          ¦  «        st          dt	          |¦  «        › �¦  «        ‚t          |	t
          ¦  «        st          dt	          |	¦  «        › �¦  «        ‚|                      ||||	||¦  «        }
|s|                      |
¦  «        }n ||
¦  «        }|S )ao  
        Create a Node from the given arguments, then return the Node
        wrapped in a Proxy object.

        If kind = 'placeholder', then we're creating a Node that
        represents the parameter of a function. If we need to encode
        a default parameter, we use the ``args`` tuple. ``args`` is
        otherwise empty for ``placeholder`` Nodes.
        z Expected args_ to be tuple, got z!Expected kwargs_ to be dict, got )Ú
create_argr,   ÚtupleÚAssertionErrorÚtypeÚdictr‰   r·   )rF   r}   r~   r5   r6   r   r€   r¸   Úargs_Úkwargs_r�   r·   s               r2   Úcreate_proxyzTracerBase.create_proxyS  sÓ   € ð* —’ Ñ%Ô%ˆØ—/’/ &Ñ)Ô)ˆÝ˜%¥Ñ'Ô'ð 	SÝ Ð!QÅDÈÁKÄKÐ!QÐ!QÑRÔRÐRÝ˜'¥4Ñ(Ô(ð 	VÝ Ð!TÅTÈ'Á]Ä]Ð!TÐ!TÑUÔUÐUà×Ò  f¨e°W¸dÀIÑNÔNˆàð 	+Ø—J’J˜tÑ$Ô$ˆEˆEà$Ð$ TÑ*Ô*ˆEàˆr4   c                 ó�   ‡— t          j        ¦   «         Šg d¢}‰r'‰j        Š‰rt          ˆfd„|D ¦   «         ¦  «        rn‰°'‰sdS ‰S )zf
        Find the Python stack frame executing the user code during
        symbolic tracing.
        )
ztorch/fx/proxy.pyztorch/fx/_symbolic_trace.pyz%torch/fx/experimental/proxy_tensor.pyztorch/_ops.pyztorch/_tensor.pyztorch/utils/_python_dispatch.pyztorch/_prims_common/wrappers.pyztorch/_refs/__init__.pyz%torch/_refs/nn/functional/__init__.pyztorch/utils/_stats.pyc              3   óX   •K  — | ]$}‰j         j                             |¦  «         V — Œ%d S r:   )Úf_codern   r¦   )r§   Úfiler¨   s     €r2   ú	<genexpr>z.TracerBase._find_user_frame.<locals>.<genexpr>�  sJ   øè è € ð ð Ø@D�E”LÔ,×5Ò5°dÑ;Ô;Ð;ðð ð ð ð ð r4   N)ÚinspectÚcurrentframeÚf_backÚall)rF   Úpt_filesr¨   s     @r2   Ú_find_user_framezTracerBase._find_user_framex  s—   ø€ õ Ô$Ñ&Ô&ˆð
ð 
ð 
ˆð ð 	Ø”LˆEØð �ð ð ð ð ØHPðñ ô ñ ô ð ð ð ð 	ð ð 	Ø�4àˆr4   Úac                 óÒ  ‡ ‡— t                                t          ‰¦  «        ¦  «        }|� |‰ ‰¦  «        S t          ‰t          ¦  «        r‰j        S t          ‰d¦  «        r‰                     ‰ ¦  «        S t          ‰t          ¦  «        rTt          ‰d¦  «        r ˆ fd„‰D ¦   «         } t          ‰¦  «        |Ž S  t          ‰¦  «        ˆ fd„‰D ¦   «         ¦  «        S t          ‰t          ¦  «        rˆ fd„‰D ¦   «         S t          ‰t          ¦  «        rt          ‰ ‰¦  «        S t          ‰t          ¦  «        rYt          ‰                      ‰j        ¦  «        ‰                      ‰j        ¦  «        ‰                      ‰j        ¦  «        ¦  «        S t          ‰t"          ¦  «        rYt#          ‰                      ‰j        ¦  «        ‰                      ‰j        ¦  «        ‰                      ‰j        ¦  «        ¦  «        S t          ‰t$          j        j        t$          j        j        f¦  «        r‰S t-          t          ‰¦  «        ¦  «        r‰S t/          ‰¦  «        r9ˆˆ fd„t1          ‰¦  «        D ¦   «         }‰                      d‰j        d	|¦  «        S t          ‰g t6          ¢t8          j        ‘R ¦  «        s‰�‰d
u r‰S t=          dt          ‰¦  «        › �¦  «        ‚)zÔ
        A method that lowers the objects seen as arguments during symbolic evaluation
        into Argument types that can be stored in IR.

        Can be override to support more trace-specific types.
        NÚ__fx_create_arg__Ú_fieldsc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r­   ©rº   ©r§   ÚelemrF   s     €r2   r©   z)TracerBase.create_arg.<locals>.<listcomp>¾  s%   ø€ Ð<Ð<Ð<°$˜Ÿš¨Ñ-Ô-Ð<Ð<Ð<r4   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r­   rÒ   rÓ   s     €r2   r©   z)TracerBase.create_arg.<locals>.<listcomp>À  s%   ø€ Ð@Ð@Ð@°d˜DŸOšO¨DÑ1Ô1Ð@Ð@Ð@r4   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r­   rÒ   rÓ   s     €r2   r©   z)TracerBase.create_arg.<locals>.<listcomp>Â  s%   ø€ Ð8Ð8Ð8¨d�D—O’O DÑ)Ô)Ð8Ð8Ð8r4   c           	      ól   •— i | ]0}|j         ‰                     t          ‰|j         ¦  «        ¦  «        “Œ1S r­   )r   rº   rl   )r§   rŸ   rÍ   rF   s     €€r2   ú
<dictcomp>z)TracerBase.create_arg.<locals>.<dictcomp>Ú  sE   ø€ ð ð ð àð ”
˜DŸOšO­G°A°u´zÑ,BÔ,BÑCÔCðð ð r4   r‚   r­   .zargument of type: )Ú_create_arg_bypassr�   r½   r,   r    r�   ÚhasattrrÏ   r»   Úlistr¾   Ú_create_arg_dictÚslicerº   ÚstartÚstopÚstepÚrangeÚtorchÚ_opsÚ
OpOverloadÚHigherOrderOperatorr   r   r   r‰   rG   r   ÚenumÚEnumÚNotImplementedError)rF   rÍ   Úhandlerr5   r6   s   ``   r2   rº   zTracerBase.create_argš  så  øø€ õ& %×(Ò(­¨a©¬Ñ1Ô1ˆØÐð �7˜4 Ñ#Ô#Ð#å�a�ÑÔð -	Ø”6ˆMÝ�QÐ+Ñ,Ô,ð +	Ø×&Ò& tÑ,Ô,Ð,å˜�5Ñ!Ô!ð (	Ý�q˜)Ñ$Ô$ð &ð =Ð<Ð<Ð<¸!Ð<Ñ<Ô<�Ø•t˜A‘w”w �~Ð%Ø•4˜‘7”7Ð@Ð@Ð@Ð@¸aÐ@Ñ@Ô@ÑAÔAÐAÝ˜�4Ñ Ô ð  	Ø8Ð8Ð8Ð8°aÐ8Ñ8Ô8Ð8Ý˜�4Ñ Ô ð 	Ý# D¨!Ñ,Ô,Ð,Ý˜�5Ñ!Ô!ð 	ÝØ—’ ¤Ñ(Ô(Ø—’ ¤Ñ'Ô'Ø—’ ¤Ñ'Ô'ñô ð õ ˜�5Ñ!Ô!ð 	ÝØ—’ ¤Ñ(Ô(Ø—’ ¤Ñ'Ô'Ø—’ ¤Ñ'Ô'ñô ð õ ˜�EœJÔ1µ5´:Ô3QÐRÑSÔSð 	ØˆHå!¥$ q¡'¤'Ñ*Ô*ð 	ØˆHå˜!‰_Œ_ð 	ðð ð ð ð å# A™YœYðñ ô ˆFð ×#Ò# O°Q´[À"ÀfÑMÔMÐMå˜Ð3�ZÐ3­¬Ð3Ð3Ñ4Ô4ð 	¸¸	ÀQÈ#ÀXÀXØˆHå!Ð"@µt¸A±w´wÐ"@Ð"@ÑAÔAÐAr4   r'   c                 ó    — t          d¦  «        ‚)aF  Called when a proxy object is being converted to a boolean, such as
        when used in control flow.  Normally we don't know what to do because
        we don't know the value of the proxy, but a custom tracer can attach more
        information to the graph node using create_node and can choose to return a value.
        zFsymbolically traced variables cannot be used as inputs to control flow©r   ©rF   r'   s     r2   Úto_boolzTracerBase.to_boolå  s   € õ ØTñ
ô 
ð 	
r4   c                 ó    — t          d¦  «        ‚)aA  Called when a proxy object is being iterated over, such as
        when used in control flow.  Normally we don't know what to do because
        we don't know the value of the proxy, but a custom tracer can attach more
        information to the graph node using create_node and can choose to return an iterator.
        aH  Proxy object cannot be iterated. This can be attempted when the Proxy is used in a loop or as a *args or **kwargs function argument. See the torch.fx docs on pytorch.org for a more detailed explanation of what types of control flow can be traced, and check out the Proxy docstring for help troubleshooting Proxy iteration errorsrë   rì   s     r2   ÚiterzTracerBase.iterð  s   € õ ð%ñ	
ô 	
ð 		
r4   c                 ó2   —  t          |d¦  «        ¦   «         S )zÖCalled when a proxy object is has the keys() method called.
        This is what happens when ** is called on a proxy. This should return an
        iterator it ** is suppose to work in your custom tracer.
        Úkeys©r"   rì   s     r2   rñ   zTracerBase.keys  s   € ð &�y˜˜fÑ%Ô%Ñ'Ô'Ð'r4   ©NN)NNN)r'   r    r(   r    )&rH   rI   rJ   r   Ú__annotations__rt   Úboolru   rv   rw   rx   rz   rL   r$   r   r»   r   r¾   r½   r   r   r   r   r‰   r°   r±   r—   r·   r   rÁ   r+   Ú	FrameTyperÌ   rº   rí   r   rï   rñ   r­   r4   r2   r   r   ¹   s¨  € € € € € € à€L€L�LØ %Ð˜Ð%Ð%Ñ%ð /4Ð% tÐ3Ð3Ñ3ð &+Ð˜dÐ*Ð*Ñ*à€M�4ÐÐÑà$)Ð˜TÐ)Ð)Ñ)ð &Ð�cÐ%Ð%Ñ%ð €L€L�Lð ˜c 5¨¨c¨¤?Ð2Ô3Ð3Ð3Ñ3ð ˜S %¨¨T¨	Ô"2Ð2Ô3Ð3Ð3Ñ3à€]¨$Ð/Ñ/Ô/ð  Ø $ðOð OàðOð ðOð �H˜c�MÔ"ð	Oð
 �S˜(�]Ô#ðOð �D‰jðOð ˜‘:ðOð 
ðOð Oð Oñ 0Ô/ðOðb%=Ø"+Ô"8ð%=à	Ô	ð%=ð %=ð %=ð %=ðN €]¨$Ð/Ñ/Ô/ð!˜$ð ! 7ð !ð !ð !ñ 0Ô/ð!ð €]¨$Ð/Ñ/Ô/ð  Ø $Ø=Að"ð "àð"ð ð"ð �C˜�HŒoð	"ð
 �S˜#�X”ð"ð �D‰jð"ð ˜‘:ð"ð # D 6¨7 ?Ô3°dÑ:ð"ð 
ð"ð "ð "ñ 0Ô/ð"ðH  %¤/°DÑ"8ð  ð  ð  ð  ðD €]¨$Ð/Ñ/Ô/ðHB˜Cð HB Hð HBð HBð HBñ 0Ô/ðHBðT €]¨$Ð/Ñ/Ô/ð
˜7ð 
 tð 
ð 
ð 
ñ 0Ô/ð
ð €]¨$Ð/Ñ/Ô/ð
˜ð 
 Hð 
ð 
ð 
ñ 0Ô/ð
ð" €]¨$Ð/Ñ/Ô/ð(ð (ð (ñ 0Ô/ð(ð (ð (r4   r   rˆ   Ú	node_namec                 ót  — t          j        ¦   «         }d}|                     dd¦  «        dk    r*t                               d| ¦  «         |d         d         }nut
          j        j                             ¦   «         r1t                               d| ¦  «         |                     d¦  «        }n!t
          j	         
                    ¦   «         d	z
  }t
          j        j                             ¦   «         sFt          j        ¦   «         }|�1d|j        v r(t                               d
| ¦  «         |j        d         }|S )a:  
    Returns the seq_nr node meta for the current proxy node that we're creating.
    The seq_nr number in node meta is related to but not the same as the "sequence number"
    in autograd.
    We use the seq_nr to correlate forward and backward nodes in the traced FX graphs
    (e.g. in copy_fwd_metadata_to_bw_nodes).
    The corresponding forward and backward FX graph nodes should have the same seq_nr.

    The ordering of the seq_nr in the graph does not indicate when the node is executed.
    For example, the nodes in the invoke_subgraph HOP's subgraph may be called multiple
    times by different HOP nodes, but these nodes only have a single seq_nr, which may be
    smaller, the same, or larger than the calling HOP.

    `node_name` is the name of the node that we're creating. It is used for logging only.
    NÚ
in_grad_fnr   z+%s: seq_nr from current_meta grad_fn_seq_nrÚgrad_fn_seq_nrrª   z#%s: seq_nr from current_meta seq_nrr†   r   z%s: seq_nr from replay_node)rŠ   rŒ   r�   r’   r“   râ   Úfxr°   Ú_is_preserving_node_seq_nrÚautogradÚ_get_sequence_nrr”   r�   )r÷   rž   r    r¡   s       r2   r‘   r‘     s%  € õ  $0Ô#@Ñ#BÔ#B€LØ€Jð ×Ò˜ aÑ(Ô(¨1Ò,Ð,å×ÒÐJÈIÑVÔVÐVØ!Ð"2Ô3°BÔ7ˆ
ˆ
å	ŒÔ	×	6Ò	6Ñ	8Ô	8ð 	;õ 	×ÒÐBÀIÑNÔNÐNØ!×%Ò% hÑ/Ô/ˆ
ˆ
õ
 ”^×4Ò4Ñ6Ô6¸Ñ:ˆ
åŒ8Ô×8Ò8Ñ:Ô:ð 8õ $0Ô#GÑ#IÔ#IˆØÐ"Ø˜;Ô+Ð+Ð+Ý×$Ò$Ð%BÀIÑNÔNÐNØ(Ô-¨hÔ7�
àÐr4   c                   ó(   ‡ — e Zd Zdeddfˆ fd„Zˆ xZS )r   rs   r(   Nc                 ó¾   •— t          ¦   «                              ¦   «          || _        t          dd ¦  «        | _        t          j        ¦   «         | _        i | _        d S )Nrˆ   )	rD   rE   rs   r$   rP   Úcollectionsr   r{   r|   )rF   rs   rG   s     €r2   rE   zGraphAppendingTracer.__init__D  sN   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
Ý˜2˜t‘_”_ˆŒ
Ý?JÔ?VÑ?XÔ?XˆÔØ?AˆÔÐÐr4   )rH   rI   rJ   r   rE   rM   rN   s   @r2   r   r   B  sW   ø€ € € € € ðB˜eð B¨ð Bð Bð Bð Bð Bð Bð Bð Bð Bð Br4   r   Úxc                 ó(   — | st          d¦  «        ‚d S )NzAssertion failed)r¼   ©r  s    r2   Ú	assert_fnr  L  s#   € àð 1ÝÐ/Ñ0Ô0Ð0ð1ð 1r4   c                   ó   — e Zd ZdS )r   N)rH   rI   rJ   r­   r4   r2   r   r   R  s   € € € € € à€Dr4   r   c                   óº  — e Zd ZdZ ed¬¦  «        ddeddddfd	„¦   «         Zdefd
„Zdeddfd„Z	de
eef         fd„Zde
eef         dd fd„Zde
eef         ddfd„Zdededd fd„Zded          fd„Zd d„Zdefd„Z ed¬¦  «        d d„¦   «         Zdefd„Ze	 	 d!dedef         deedf         deedf         dz  de
eef         dz  dd f
d„¦   «         ZdS )"r    a�  
    ``Proxy`` objects are ``Node`` wrappers that flow through the
    program during symbolic tracing and record all the operations
    (``torch`` function calls, method calls, operators) that they touch
    into the growing FX Graph.

    If you're doing graph transforms, you can wrap your own ``Proxy``
    method around a raw ``Node`` so that you can use the overloaded
    operators to add additional things to a ``Graph``.

    ``Proxy`` objects cannot be iterated. In other words, the symbolic
    tracer will throw an error if a ``Proxy`` is used in a loop or as
    an ``*args``/``**kwargs`` function argument.

    There are two main ways around this:
    1. Factor out the untraceable logic into a top-level function and
    use ``fx.wrap`` on it.
    2. If the control flow is static (i.e. the loop trip count is
    based on some hyperparameter), the code can be kept in its original
    position and refactored into something like::

        for i in range(self.some_hyperparameter):
            indexed_item = proxied_value[i]

    For a more detailed description into the Proxy internals, check out
    the "Proxy" section in `torch/fx/README.md`
    Tr>   Nr�   ÚtracerúTracerBase | Noner(   c                 óN   — |€t          |j        ¦  «        }|| _        || _        d S r:   )r   rs   r  r�   )rF   r�   r  s      r2   rE   zProxy.__init__u  s(   € àˆ>å)¨$¬*Ñ5Ô5ˆFØˆŒØˆŒ	ˆ	ˆ	r4   c                 ó"   — d| j         j        › d�S )NzProxy(ú)©r�   r   rW   s    r2   Ú__repr__zProxy.__repr__}  s   € Ø)˜œ	œÐ)Ð)Ð)Ð)r4   Úkr"   c                 ó"   — t          | |¦  «        S r:   rò   )rF   r  s     r2   Ú__getattr__zProxy.__getattr__€  s   € õ ˜˜qÑ!Ô!Ð!r4   c                 ó   — | j         S r:   ©Ú__dict__rW   s    r2   Ú__getstate__zProxy.__getstate__…  s
   € ØŒ}Ðr4   Úmemoc                 óØ  — dd l }i }| j                             ¦   «         D ]c\  }}	  |j        ||¦  «        }nF# t          $ r9 t
                               d|| j        j        ¦  «          |j         |¦  «        }Y nw xY w|||<   Œdd|vrt          d¦  «        ‚d|vrt          d¦  «        ‚t          |d         |d         ¦  «        }|                     ¦   «         D ]\  }}||j        |<   Œ|S )Nr   zVShallow copy %s of Proxy because it cannot be deepcopied. Proxy is created for node %sr�   z.'node' not in new_dict during proxy unpicklingr  z0'tracer' not in new_dict during proxy unpickling)rS   r  ÚitemsÚdeepcopyÚ	Exceptionr›   Úwarningr�   r   r¼   r    )rF   r  rS   Únew_dictr  ÚvÚnew_objÚ	new_proxys           r2   Ú__deepcopy__zProxy.__deepcopy__ˆ  s/  € ð 	ˆˆˆà#%ˆØ”M×'Ò'Ñ)Ô)ð 	"ð 	"‰DˆAˆqð	'Ø'˜$œ-¨¨4Ñ0Ô0��øÝð 'ð 'ð 'Ý—’ð3àØ”I”Nñ	ô ð ð $˜$œ) A™,œ,���ð'øøøð "ˆH�Q‰KˆKØ˜Ð!Ð!Ý Ð!QÑRÔRÐRØ˜8Ð#Ð#Ý Ð!SÑTÔTÐTÝ˜( 6Ô*¨H°XÔ,>Ñ?Ô?ˆ	Ø—N’NÑ$Ô$ð 	&ð 	&‰DˆAˆqØ$%ˆIÔ˜qÑ!Ð!ØÐs   ¦8¸A A;Á:A;Údc                 ó   — || _         d S r:   r  )rF   r!  s     r2   Ú__setstate__zProxy.__setstate__¤  s   € àˆŒˆˆr4   r5   r6   c                 óD   — | j                              dd| f|z   |¦  «        S )NÚcall_methodÚ__call__)r  rÁ   ©rF   r5   r6   s      r2   r&  zProxy.__call__¨  s+   € ØŒ{×'Ò'Ø˜:¨ w°¡~°vñ
ô 
ð 	
r4   c                 óÌ  ‡ — t          j        ¦   «         }|€t          d¦  «        ‚|j        }|€t          d¦  «        ‚t	          t          j        |j        ¦  «        ¦  «        }t          j	        dk    rddl
m}  |||j        d„ ¬¦  «        }n
|j        dz  }||         }|j        d	k    r ˆ fd
„t          |j        ¦  «        D ¦   «         S ‰ j                             ‰ ¦  «        S )Nú$inspect.currentframe() returned Noneúframe.f_back is None©é   é   r   ©Úbisect_leftc                 ó   — | j         S r:   ©Úoffsetr  s    r2   ú<lambda>z Proxy.__iter__.<locals>.<lambda>¹  s   € ÀÄ€ r4   ©Úkeyé   ÚUNPACK_SEQUENCEc              3   ó(   •K  — | ]}‰|         V — Œd S r:   r­   )r§   rµ   rF   s     €r2   rÆ   z!Proxy.__iter__.<locals>.<genexpr>¿  s'   øè è € Ð8Ð8 �D˜”GÐ8Ð8Ð8Ð8Ð8Ð8r4   )rÇ   rÈ   r¼   rÉ   rÛ   ÚdisÚget_instructionsrÄ   ÚsysÚversion_infoÚbisectr/  Úf_lastiÚopnamerá   Úargvalr  rï   )rF   r¨   Úcalling_frameÚ	inst_listr/  Úinst_idxÚinsts   `      r2   Ú__iter__zProxy.__iter__­  s  ø€ ÝÔ$Ñ&Ô&ˆØˆ=Ý Ð!GÑHÔHÐHØœˆØÐ Ý Ð!7Ñ8Ô8Ð8Ý�Ô-¨mÔ.BÑCÔCÑDÔDˆ	ÝÔ˜wÒ&Ð&Ø*Ð*Ð*Ð*Ð*Ð*à"�{Ø˜=Ô0Ð6HÐ6Hðñ ô ˆHˆHð %Ô,°Ñ1ˆHØ˜Ô"ˆØŒ;Ð+Ò+Ð+Ø8Ð8Ð8Ð8¥U¨4¬;Ñ%7Ô%7Ð8Ñ8Ô8Ð8àŒ{×Ò Ñ%Ô%Ð%r4   c                 óR   — | j                              dt          j        | fi ¦  «        S ©Nr‚   )r  rÁ   ÚoperatorÚabsrW   s    r2   Ú__abs__zProxy.__abs__Ã  s#   € ØŒ{×'Ò'¨½¼ÈÀwÐPRÑSÔSÐSr4   c                 ó²  — | j         j        �r1t          j        ¦   «         }|€t	          d¦  «        ‚|j        }|€t	          d¦  «        ‚t          t          j        |j	        ¦  «        ¦  «        }t          j        dk    rddlm}  |||j        d„ ¬¦  «        }n
|j        dz  }||         }|j        d	k    r‡||d
z            }|j        €t	          d¦  «        ‚||j        dz  d
z
           }|j        dk    r|j        dk    p
|j        dk    }	|	r0|j        dk    r%| j                              dt&          | fi ¦  «         dS | j                              | ¦  «        S )Nr)  r*  r+  r   r.  c                 ó   — | j         S r:   r1  r  s    r2   r3  z Proxy.__bool__.<locals>.<lambda>Ô  s   € ÈaÌh€ r4   r4  r6  ÚPOP_JUMP_IF_TRUEr   z%inst.arg is None for POP_JUMP_IF_TRUEÚLOAD_GLOBALr¼   ÚLOAD_ASSERTION_ERRORÚRAISE_VARARGSr‚   T)r  rw   rÇ   rÈ   r¼   rÉ   rÛ   r9  r:  rÄ   r;  r<  r=  r/  r>  r?  Úargr@  rÁ   r  rí   )
rF   r¨   rA  Úinstsr/  ÚcurrD  ÚfirstÚlastÚstarts_with_asserts
             r2   Ú__bool__zProxy.__bool__Æ  s…  € ØŒ;Ô$ñ 	 õ Ô(Ñ*Ô*ˆEØˆ}Ý$Ð%KÑLÔLÐLØ!œLˆMØÐ$Ý$Ð%;Ñ<Ô<Ð<Ý�Ô-¨mÔ.BÑCÔCÑDÔDˆEÝÔ 7Ò*Ð*Ø.Ð.Ð.Ð.Ð.Ð.à!�k %¨Ô)>ÐDVÐDVÐWÑWÔW��à#Ô+¨qÑ0�Ø˜”:ˆDàŒ{Ð0Ò0Ð0Ø˜c A™gœ�Ø”8Ð#Ý(Ð)PÑQÔQÐQØ˜TœX¨™]¨QÑ.Ô/�à”L MÒ1ð 9ØœÐ(8Ò8ð>à”|Ð'=Ò=ð #ð
 &ð  ¨$¬+¸Ò*HÐ*HØ”K×,Ò,¨_½iÈ$ÈÐRTÑUÔUÐUØ˜4àŒ{×"Ò" 4Ñ(Ô(Ð(r4   c                 ó6   — | j                              | ¦  «        S r:   )r  rñ   rW   s    r2   rñ   z
Proxy.keysé  s   € àŒ{×Ò Ñ%Ô%Ð%r4   c                 ó    — t          d¦  «        ‚)Nz�'len' is not supported in symbolic tracing by default. If you want this call to be recorded, please call torch.fx.wrap('len') at module scope©ÚRuntimeErrorrW   s    r2   Ú__len__zProxy.__len__í  s   € Ýðñ
ô 
ð 	
r4   Úorig_method.r+   c           	      óx  ‡ ‡— |r|nd}|r|ni }i Šdt           dd fˆ ˆfd„}t          ||¦  «         t          ||¦  «         t          ‰¦  «        dk    r4t          dt	          ‰                     ¦   «         ¦  «        › d|› �¦  «        ‚t          t          ‰                     ¦   «         ¦  «        ¦  «        }t          |t          j
        j        ¦  «        r(|j        f|z   }|                     d|j        ||¦  «        S t          j                             |¦  «        r|                     d|j        ||¦  «        S t          |t          j        j        ¦  «        r-t)          ||¦  «        }|�t          d	|j        › d
|› d�¦  «        ‚|                     d||||j                             |j        ¦  «        ¬¦  «        S )Nr­   rÍ   r(   c                 ó@   •— t          | ‰¦  «        rd ‰| j        <   d S d S r:   )r,   r  )rÍ   ÚclsÚtracerss    €€r2   Úfind_tracerz-Proxy.__torch_function__.<locals>.find_tracer  s1   ø€ Ý˜!˜SÑ!Ô!ð )Ø$(�˜œÑ!Ð!Ð!ð)ð )r4   r   z!Found multiple different tracers z" while trying to trace operations r%  z5Unable to symbolically trace the HigherOrderOperator z4 because it received an arbitrary callable argument z(. Use make_fx or dynamo tracing instead.r‚   ©r   )r   r   Úlenr[  rÛ   rñ   Únextrï   r,   râ   Ú_CÚScriptMethodÚownerrÁ   r   Ú	overridesÚis_tensor_method_or_propertyrH   rã   rå   r=   Ú_namers   Ú_target_to_str)	r`  r]  r+   r5   r6   rb  r  Úbad_callablera  s	   `       @r2   Ú__torch_function__zProxy.__torch_function__ô  s  øø€ ð Ð#ˆtˆt ˆØ!Ð)�� rˆà*,ˆð	)�3ð 	) 4ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)õ 	�+˜tÑ$Ô$Ð$Ý�+˜vÑ&Ô&Ð&åˆw‰<Œ<˜!ÒÐÝð<µD¸¿º¹¼Ñ4HÔ4Hð <ð <Ø.9ð<ð <ñô ð õ •d˜7Ÿ<š<™>œ>Ñ*Ô*Ñ+Ô+ˆå�k¥5¤8Ô#8Ñ9Ô9ð 	VØÔ%Ð'¨$Ñ.ˆDØ×&Ò& }°kÔ6FÈÈfÑUÔUÐUÝŒ?×7Ò7¸ÑDÔDð 	Ø×&Ò&Ø˜{Ô3°T¸6ñô ð õ ˜+¥u¤zÔ'EÑFÔFð Ý7¸¸fÑEÔE�ØÐ+Ý&ð,Ø&Ô,ð,ð ,à-9ð,ð ,ð ,ñô ð ð ×&Ò&ØØØØØ”\×0Ò0°Ô1EÑFÔFð 'ñ ô ð r4   r:   )r(   r    ró   )rH   rI   rJ   rK   r   r   rE   rL   r  r  r¾   r   r  Úintr   r#  r&  r   rE  rJ  rõ   rW  rñ   r\  Úclassmethodr   r»   r½   rn  r­   r4   r2   r    r    W  sj  € € € € € ðð ð8 €]¨$Ð/Ñ/Ô/ðð ˜Tð Ð+>ð È$ð ð ð ñ 0Ô/ðð*˜#ð *ð *ð *ð *ð"˜Sð " [ð "ð "ð "ð "ð
˜d 3¨ 8œnð ð ð ð ð  c¨3 h¤ð °Gð ð ð ð ð8˜d 3¨ 8œnð °ð ð ð ð ð
˜cð 
¨Sð 
°Wð 
ð 
ð 
ð 
ð
&˜( 7Ô+ð &ð &ð &ð &ð,Tð Tð Tð Tð!)˜$ð !)ð !)ð !)ð !)ðF €]¨$Ð/Ñ/Ô/ð&ð &ð &ñ 0Ô/ð&ð
˜ð 
ð 
ð 
ð 
ð ð
 (,Ø(,ð1ð 1à˜c 3˜hÔ'ð1ð �T˜3�YÔð1ð �C˜�HŒo Ñ$ð	1ð
 �S˜#�X” Ñ%ð1ð 
ð1ð 1ð 1ñ „[ð1ð 1ð 1r4   r    c                   óÆ   ‡ — e Zd ZdZ	 ddedddeddfˆ fd„Zdefd	„Ze		 	 dd
e
def         deedf         deedf         dz  deeef         dz  dd f
ˆ fd„¦   «         Zˆ xZS )r!   zW
    A Proxy subclass that propagates metadata (meta['val']) during graph tracing.
    Nr�   r  r	  Ú	fake_moder(   c                 óZ   •— t          ¦   «                              ||¦  «         || _        d S r:   )rD   rE   rr  )rF   r�   r  rr  rG   s       €r2   rE   zMetaProxy.__init__/  s*   ø€ õ 	‰Œ×Ò˜˜vÑ&Ô&Ð&Ø"ˆŒˆˆr4   c                 ó"   — d| j         j        › d�S )Nz
MetaProxy(r  r  rW   s    r2   r  zMetaProxy.__repr__5  s   € Ø-˜DœIœNÐ-Ð-Ð-Ð-r4   r]  .r+   r5   r6   c                 ó‚  •— |r|nd}|r|ni }d }|D ]}t          |t          ¦  «        r|} nŒ|€t          d¦  «        ‚t          ¦   «                              ||||¦  «        }|j        5   |d„ |D ¦   «         i |¤Ž|j        j        d<   d d d ¦  «         n# 1 swxY w Y   t          |j        |j        |j        ¦  «        S )Nr­   z5No MetaProxy found in arguments, but one is expected.c                 ó`   — g | ]+}t          |t          ¦  «        r|j        j        d          n|‘Œ,S )Úval)r,   r    r�   r�   )r§   rÍ   s     r2   r©   z0MetaProxy.__torch_function__.<locals>.<listcomp>Q  s5   € ÐRÐRÐRÈ­
°1µeÑ(<Ô(<ÐC�!”&”+˜eÔ$Ð$À!ÐRÐRÐRr4   rw  )	r,   r!   r¼   rD   rn  rr  r�   r�   r  )	r`  r]  r+   r5   r6   Ú
meta_proxyrQ  r·   rG   s	           €r2   rn  zMetaProxy.__torch_function__8  s>  ø€ ð Ð#ˆtˆt ˆØ!Ð)�� rˆàˆ
Øð 	ð 	ˆCÝ˜#�yÑ)Ô)ð Ø �
Ø�ðð ÐÝ ØGñô ð õ ‘”×*Ò*¨;¸¸tÀVÑLÔLˆØÔ!ð 	ð 	Ø%0 [ØRÐRÈTÐRÑRÔRð&àð&ð &ˆEŒJŒO˜EÑ"ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 ˜œ U¤\°:Ô3GÑHÔHÐHs   Á* BÂBÂBró   )rH   rI   rJ   rK   r   r   rE   rL   r  rp  r   r»   r½   r¾   rn  rM   rN   s   @r2   r!   r!   )  s1  ø€ € € € € ðð ð
 PTð#ð #Øð#Ø"5ð#ØILð#à	ð#ð #ð #ð #ð #ð #ð.˜#ð .ð .ð .ð .ð ð
 (,Ø(,ðIð Ià˜c 3˜hÔ'ðIð �T˜3�YÔðIð �C˜�HŒo Ñ$ð	Ið
 �S˜#�X” Ñ%ðIð 
ðIð Ið Ið Ið Iñ „[ðIð Ið Ið Ið Ir4   r!   c                   óv   — e Zd Z ed¬¦  «        dededdfd„¦   «         Zedefd„¦   «         Z	d	e
d
e
ddfd„ZdS )r"   Tr>   ÚrootÚattrr(   Nc                 óH   — || _         || _        |j        | _        d | _        d S r:   )rz  r{  r  Ú_node)rF   rz  r{  s      r2   rE   zAttribute.__init__Y  s$   € àˆŒ	ØˆŒ	Ø”kˆŒØ"&ˆŒ
ˆ
ˆ
r4   c                 óŽ   — | j         €8| j                             dt          | j        | j        fi ¦  «        j        | _         | j         S rG  )r}  r  rÁ   rl   rz  r{  r�   rW   s    r2   r�   zAttribute.node`  sG   € ð Œ:ÐØœ×1Ò1Ø¥¨4¬9°d´iÐ*@À"ñô äð ŒJð ŒzÐr4   r5   r6   r    c                 óX   — | j                              d| j        | j        f|z   |¦  «        S )Nr%  )r  rÁ   r{  rz  r'  s      r2   r&  zAttribute.__call__j  s0   € ØŒ{×'Ò'Ø˜4œ9 t¤y l°TÑ&9¸6ñ
ô 
ð 	
r4   )rH   rI   rJ   r   r    rL   rE   Úpropertyr   r�   r   r&  r­   r4   r2   r"   r"   W  s¥   € € € € € à€]¨$Ð/Ñ/Ô/ð'˜Uð '¨#ð '°$ð 'ð 'ð 'ñ 0Ô/ð'ð ð�dð ð ð ñ „Xðð
˜cð 
¨Sð 
°Wð 
ð 
ð 
ð 
ð 
ð 
r4   r"   c            
       óÔ   ‡ — e Zd ZdZdedededej        j	        ddf
ˆ fd„Z
defd	„Zedej        fd
„¦   «         Zdej        fd„Zdefd„Zedefd„¦   «         Zdefd„Zdefd„Zˆ xZS )r#   zö
    A special proxy which lets "shape", "size", "dim", and a few other
    attribute accesses pass through to the underlying  module parameter object,
    so that conditional tests on these attributes will not throw exception during tracing
    r  r�   r   Úparamr(   Nc                 óä   •— t          ¦   «                              ||¦  «         t          |t          j        j        ¦  «        st          dt          |¦  «        › �¦  «        ‚|| _        || _	        d S )NzExpected Parameter, got )
rD   rE   r,   râ   ÚnnÚ	Parameterr¼   r½   r‚  r   )rF   r  r�   r   r‚  rG   s        €r2   rE   zParameterProxy.__init__x  sf   ø€ õ 	‰Œ×Ò˜˜vÑ&Ô&Ð&Ý˜%¥¤Ô!3Ñ4Ô4ð 	KÝ Ð!I½DÀ¹K¼KÐ!IÐ!IÑJÔJÐJØˆŒ
ØˆŒ	ˆ	ˆ	r4   c                 ó   — d| j         › d�S )NzParameterProxy(r  rc  rW   s    r2   r  zParameterProxy.__repr__�  s   € Ø- ¤Ð-Ð-Ð-Ð-r4   c                 ó   — | j         j        S r:   )r‚  ÚshaperW   s    r2   rˆ  zParameterProxy.shape„  s   € àŒzÔÐr4   c                 ó4   — | j                              ¦   «         S r:   )r‚  ÚsizerW   s    r2   rŠ  zParameterProxy.sizeˆ  s   € ØŒz�ŠÑ Ô Ð r4   c                 ó4   — | j                              ¦   «         S r:   )r‚  ÚdimrW   s    r2   rŒ  zParameterProxy.dim‹  s   € ØŒz�~Š~ÑÔÐr4   c                 ó   — | j         j        S r:   )r‚  ÚndimrW   s    r2   rŽ  zParameterProxy.ndimŽ  s   € àŒzŒÐr4   c                 ó4   — | j                              ¦   «         S r:   )r‚  ÚnumelrW   s    r2   r�  zParameterProxy.numel’  s   € ØŒz×ÒÑ!Ô!Ð!r4   c                 ó4   — | j                              ¦   «         S r:   )r‚  ÚnelementrW   s    r2   r’  zParameterProxy.nelement•  s   € ØŒz×"Ò"Ñ$Ô$Ð$r4   )rH   rI   rJ   rK   r   r   rL   râ   r„  r…  rE   r  r€  ÚSizerˆ  rŠ  ro  rŒ  rŽ  r�  r’  rM   rN   s   @r2   r#   r#   p  sM  ø€ € € € € ðð ðØ ðØ(,ðØ47ðØ@EÄÔ@Rðà	ðð ð ð ð ð ð.˜#ð .ð .ð .ð .ð ð �u”zð  ð  ð  ñ „Xð ð!�e”jð !ð !ð !ð !ð �Sð  ð  ð  ð  ð ð�cð ð ð ñ „Xðð"�sð "ð "ð "ð "ð%˜#ð %ð %ð %ð %ð %ð %ð %ð %r4   r#   Úmethodc                 ó    ‡ — dt           dt           ddfˆ fd„}‰ |_        d‰                      d¦  «        › d�}t          t          ||¦  «         d S )Nr5   r6   r(   r    c                  óx   •— | d         j         }t          t          ‰¦  «        }|                     d|| |¦  «        S )Nr   r‚   )r  rl   rH  rÁ   )r5   r6   r  r~   r”  s       €r2   Úimplz_scope.<locals>.implœ  s7   ø€ Ø˜!”W”^ˆFÝ�X vÑ.Ô.ˆFØ×&Ò& ¸ÀÀfÑMÔMÐMr4   Ú__Ú_)r   rH   rš   Úsetattrr    )r”  r—  Úas_magics   `  r2   rU   rU   ›  s|   ø€ ð	N�ð 	N¥sð 	N¨wð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð
 ˆŒØ-˜Ÿš SÑ)Ô)Ð-Ð-Ð-ˆÝ•�x Ñ&Ô&Ð&Ð&Ð&r4   Úorig_method_namec                 ó¤   ‡ — d‰                       d¦  «        › d�}dddt          ddfˆ fd„}||_        ||_        t	          t
          ||¦  «         d S )	NÚ__rr™  r˜  rF   r    Úrhsr(   c                 ól   •— t          t          ‰¦  «        }| j                             d||| fi ¦  «        S rG  )rl   rH  r  rÁ   )rF   rŸ  r~   rœ  s      €r2   r—  z!_define_reflectable.<locals>.impl«  s3   ø€ Ý�Ð#3Ñ4Ô4ˆØŒ{×'Ò'¨¸À#ÀtÀÈbÑQÔQÐQr4   )rš   r   rH   rJ   rš  r    )rœ  Úmethod_namer—  s   `  r2   Ú_define_reflectabler¢  ¨  s‡   ø€ Ø7Ð(×.Ò.¨sÑ3Ô3Ð7Ð7Ð7€KðR�7ð R¥ð R¨ð Rð Rð Rð Rð Rð Rð  €D„MØ#€DÔÝ�E�; Ñ%Ô%Ð%Ð%Ð%r4   rQ  c                 ó&   — t          d| › �¦  «        ‚)NzJKeys for dictionaries used as an argument cannot contain a Node. Got key: rZ  )rQ  s    r2   Ú_no_nodes_errorr¤  ¸  s&   € Ý
ð	 Øð	 ð 	 ñô ð r4   rF   rÍ   c                 óì   — i }|                      ¦   «         D ]\\  }}t          |t          ¦  «        s*|                      |¦  «        }t	          |t
          ¦  «         |                      |¦  «        ||<   Œ]|S r:   )r  r,   rL   rº   Úmap_argr¤  )rF   rÍ   Úrr  r  s        r2   rÜ   rÜ   ¿  ss   € Ø€AØ—’‘	”	ð "ð "‰ˆˆ1Ý˜!�SÑ!Ô!ð 	(ð —’ Ñ"Ô"ˆAÝ�A•Ñ'Ô'Ð'Ø�Š˜qÑ!Ô!ˆˆ!‰ˆØ€Hr4   c                 ó   — i | ]}|d „ “ŒS )c                 ó   — |S r:   r­   ©rF   rÍ   s     r2   r3  z<dictcomp>.<lambda>Í  s   € �q€ r4   r­   )r§   Úts     r2   rØ   rØ   Ì  s.   € ð 	ð 	ð 	à	ð ÐÐð	ð 	ð 	r4   c                 ó   — |j         S r:   )r�   rª  s     r2   r3  r3  Ö  s   € ¨A¬F€ r4   c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r:   rÒ   rÓ   s     €r2   rÆ   z<lambda>.<locals>.<genexpr>×  s/   øè è € Ð1VÐ1VÈD°$·/²/À$Ñ2GÔ2GÐ1VÐ1VÐ1VÐ1VÐ1VÐ1Vr4   )r»   rª  s   ` r2   r3  r3  ×  s%   ø€ ­EÐ1VÐ1VÐ1VÐ1VÐTUÐ1VÑ1VÔ1VÑ,VÔ,V€ r4   c                 ó    ‡ — ˆ fd„|D ¦   «         S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r­   rÒ   rÓ   s     €r2   r©   z<lambda>.<locals>.<listcomp>Ø  s%   ø€ Ð+PÐ+PÐ+PÀd¨D¯OªO¸DÑ,AÔ,AÐ+PÐ+PÐ+Pr4   r­   rª  s   ` r2   r3  r3  Ø  s   ø€ Ð+PÐ+PÐ+PÐ+PÈaÐ+PÑ+PÔ+P€ r4   )rˆ   )`r  rS   r9  ræ   rÇ   ÚloggingrH  r;  r°   r+   r   Úcollections.abcr   r   Údataclassesr   r   Útypingr   r	   r
   Útyping_extensionsr   râ   Útorch.fx.tracebackrû   rŠ   Útorch._Cr   r¦  Útorch._library.opaque_objectr   Útorch._loggingr   Útorch.utils._pytreer   Útorch.utils._tracebackr   Ú_compatibilityr   rs   r   r   r   Úimmutable_collectionsr   r   r�   r   r   r   r   Úoperator_schemasr   Ú__all__Ú	getLoggerrH   r›   r’   r[   rõ   r3   r»   r¾   rL   r=   r$   r%   r�   Úsetrh   rô   rq   r   ro  r‘   r   r  Ú
ValueErrorr   r    r!   r"   r#   r”  rU   r¢  rœ  r¤  rÜ   r½   rã   rä   rå   rÙ   rÛ   r­   r4   r2   ú<module>rÃ     sm  ðØ Ð Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø #Ð #Ð #Ð #Ð #Ð #à €€€Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø +Ð +Ð +Ð +Ð +Ð +Ø =Ð =Ð =Ð =Ð =Ð =Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø )Ð )Ð )Ð )Ð )Ð )Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à )Ð )Ð )Ð )Ð )Ð )Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð
ð 
ð 
€ð €gÔ˜Ñ!Ô!€Ø"Ð" 8¨\Ñ:Ô:€ð ð ¨4ð ð ð ð ð*Ø
�˜�Ô
ðØ&*¨3°¨;Ô&7ðàðð ð ð ð0 € eÐ,Ñ,Ô,ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ -Ô,ð'ð> € eÐ,Ñ,Ô,ðð ð ð ð ñ ô ñ -Ô,ðð:ð ð Ð ð( .1¨S©U¬UÐ �c˜%  S œ/Ô*Ð 2Ð 2Ñ 2ðC X¨c°3¨hÔ%7ð C¸Dð Cð Cð Cð Cð € dÐ+Ñ+Ô+ðN(ð N(ð N(ð N(ð N(ñ N(ô N(ñ ,Ô+ðN(ðb
3ð 3˜3ð 3¨¨d©
ð 3ð 3ð 3ð 3ðn € dÐ+Ñ+Ô+ðBð Bð Bð Bð B˜:ñ Bô Bñ ,Ô+ðBð € eÐ,Ñ,Ô,ð1�ð 1˜Dð 1ð 1ð 1ñ -Ô,ð1ð
 € dÐ+Ñ+Ô+ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ñ ,Ô+ð	ð € dÐ+Ñ+Ô+ðNð Nð Nð Nð Nñ Nô Nñ ,Ô+ðNðb € eÐ,Ñ,Ô,ð*Ið *Ið *Ið *Ið *I�ñ *Iô *Iñ -Ô,ð*IðZ € dÐ+Ñ+Ô+ð
ð 
ð 
ð 
ð 
�ñ 
ô 
ñ ,Ô+ð
ð0 € eÐ,Ñ,Ô,ð%%ð %%ð %%ð %%ð %%�Uñ %%ô %%ñ -Ô,ð%%ðP ð ð €Fð'�sð '˜tð 'ð 'ð 'ð 'ð €Fˆ6�N„N€N€Nð	&¨#ð 	&°$ð 	&ð 	&ð 	&ð 	&ð 2ð *ð *ÐØÐÐ(Ñ)Ô)Ð)Ð)ð˜ð  eð ð ð ð ð
˜:ð 
¨$¨s°C¨x¬.ð 
¸TÀ#ÀxÀ-Ô=Pð 
ð 
ð 
ð 
ð	ð 	ðØ	ðàˆˆT‰
Œ
ðð 	ˆˆS‰	Œ	ðð 	Œ
Ôð	ð
 	Œ
Ô&ðð	ñ 	ô 	Ð ð 3Ð2Ð �5Ñ ØVÐVÐ �5Ñ ØPÐPÐ �4Ñ Ø+Ð �4Ñ Ø%7¸Ô%=Ð �>Ñ "Ø%7¸Ô%=Ð �>Ñ "Ð "Ð "r4   