§
    Ÿ²Åj�9 ã                   ó:  — 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mZm	Z	 d dl
mZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlmc m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%m&Z&m'Z'm(Z( d dl)m*Z* d d	l+m,Z,m-Z-m.Z. d d
l/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZR d dlSmTZT d dlUmVZV d dlWmXZXmYZYmZZZm[Z[ d dl\m]Z]m^Z^ d dl_m`Z` d dlmaZa d dlbmcZc ddldmeZe dd lfmgZgmhZhmiZimjZjmkZk dd!llmmZmmnZn  ejo        ep¦  «        Zqe jr         G d"„ d#¦  «        ¦   «         Zse jr         G d$„ d%¦  «        ¦   «         Zt e jr        d&¬'¦  «         G d(„ d)¦  «        ¦   «         Zu es¦   «         Zvejw        ejx        ejy        ejz        ej{        ejq        ej|        e}ej~        h	ev_        ed*„ ¦   «         Z€d+„ Z�d,„ Z‚d-ejƒ        j„        fd.„Z…d/„ Z†d0„ Z‡d1„ Zˆd2„ Z‰d3ejŠ        j‹        d4ejŠ        j‹        d5eeŒeŒf         fd6„Z�d-ejƒ        j„        d7end8eeŒejŽ        f         d9eeŒeejŽ        eHej�        f         f         d:ee         f
d;„Z�d<e,d=end9eeŒeejŽ        eHej�        f         f         d5dfd>„Z‘d-ejƒ        j„        d5etfd?„Z’d-ejƒ        j„        d=end5dfd@„Z“d3ejŠ        j‹        d4ejƒ        j„        d5dfdA„Z”dBejŠ        j‹        d5eeŒeŒf         fdC„Z•	 d’dDeadEeadFeeŒekf         dGeeeŒ                  d5eej         f
dH„Z–	 	 d“dIdJdJd&d&d&dKœdLedMeedNf         dOeeeŒef                  dPeeeeŒef         ee         ee         f                  dQeeŒdNf         dRe—dSe—dTe—dUe—dVe—d5ejƒ        j„        fdW„Z˜	 d’dX„ dJdd&dJdYœdBejŠ        j‹        dZe,d[e—d\e—d5etf
d]„Z™d^eKdBejŠ        j‹        d5eeŒeejŽ        ejŠ        jš        f         f         fd_„Z›	 d’dBejŠ        j‹        dMeedNf         dOeeeŒef                  d5eeŒ         fd`„ZœdBejŠ        j‹        d5eeŒ         fda„Z�dbeejŽ                 dceeŒejŽ        f         d=end9eeŒeejŽ        eHej�        f         f         d5df
dd„ZždeejŠ        j‹        d=end9eeŒeejŽ        eHej�        f         f         d5dfdf„ZŸdgejƒ        j„        d5dfdh„Z dgejƒ        j„        d5dfdi„Z¡d-ejƒ        j„        d7end5dfdj„Z¢dkehd5eeŒef         fdl„Z£da¤eeeŒ                  e¥dm<   da¦eeeŒeŒf                  e¥dn<   do„ Z§dp„ Z¨dq„ Z©	 d’dreudseadQeeŒdNf         dte—dGeeeŒ                  d5eejƒ        j„        eej         f         fdu„ZªdreudveeŒef         fdw„Z«d^eKfdx„Z¬edyejŠ        j‹        fdz„¦   «         Z­ed{„ ¦   «         Z® G d|„ d}ejŠ        j‹        ¦  «        Z¯d’d~„Z°dBejŠ        j‹        dMeedNf         dOeeŒef         dPeeeeŒef         ee         ee         f                  dQeeŒdNf         de—d€eeŒef         d�eadSe—d\e—d5eufd‚„Z±dBejŠ        j‹        dMeedNf         dOeeŒef         dPeeeeŒef         ee         ee         f                  dQeeŒdNf         de—d€eeŒef         d�eadSe—d\e—dƒed5eufd„„Z²dd…„ fdBejŠ        j‹        dZe,d5etfd†„Z³d‡„ Z´d-ejƒ        j„        dˆeŒd5ejƒ        jµ        fd‰„Z¶	 d”dBejŠ        j‹        dMeedNf         dOeeŒef         dPeeeeŒef         ee         ee         f                  dQeeŒdNf         de—d€eeŒef         d�eadSe—d\e—d‹eŒd5eufdŒ„Z·e§eg	 	 d“d&dId�œdBejŠ        j‹        dMeedNf         dOeeeŒef                  dPeeeeŒef         ee         ee         f                  dŽe—dQeeŒdNf         d5ehfd�„¦   «         ¦   «         Z¸e§eg	 	 d“d&dIdJdJdJd�œdBejŠ        j‹        dMeedNf         dOeeeŒef                  dPeeeeŒef         ee         ee         f                  dŽe—dQeeŒdNf         de—dSe—d\e—d5ehfd‘„¦   «         ¦   «         Z¹dS )•é    N)ÚcontextmanagerÚnullcontext)ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTupleÚUnion)Úenable_python_dispatcher)Ú	UserErrorÚUserErrorType)Úexportdb_error_messageÚget_class_if_classified_error)Ú_fakify_script_objectsÚ_gather_constant_attrsÚ_NonStrictTorchFunctionHandlerÚmake_constraintsÚmake_fake_inputsÚ$produce_guards_and_solve_constraints)ÚCollectTracepointsPass)ÚConstantAttrMapÚlift_constants_passÚrewrite_script_object_meta)Ú_collect_param_buffer_metadataÚ)_populate_param_buffer_metadata_to_new_gmÚ_update_gm_meta_if_possibleÚapply_runtime_assertion_passÚplaceholder_naming_passÚplaceholder_prefixes)ÚSpecViolationError)Ú_wrap_submodules)Ú_graph_input_namesÚ_graph_output_names)Úcreate_functional_call)Úcreate_tree_flattened_fnÚregister_buffer_assignment_hook)Ú_detect_attribute_assignmentÚaot_export_module)Údetect_fake_mode)ÚFakeScriptObject)Ú
FakeTensorÚFakeTensorMode)Úlog_export_usage)Ú!_check_input_constraints_pre_hook)Ú_check_dynamic_shapesÚ_combine_args)Ú
OutputKind)Úmake_fx)ÚConstraintViolationErrorÚfree_unbacked_symbolsÚGuardOnDataDependentSymNodeÚShapeEnv)Ú_PyTreeCodeGenÚ_PyTreeInfo)Ú	_get_attr)ÚTreeSpec)ÚValueRangeErroré   )ÚAutogradStateOpsFailSafeguard)Ú_disable_prexisiting_fake_modeÚExportedProgramÚ	InputKindÚModuleCallEntryÚModuleCallSignature)Ú"_convert_to_export_graph_signatureÚExportGraphSignaturec                   ó^   — e Zd ZU dZdZeed<    ej        e	¬¦  «        Z
ee         ed<   dZdS )ÚExportDynamoConfigz:
    Manage Export-specific configurations of Dynamo.
    TÚ	allow_rnn)Údefault_factoryÚreorderable_logging_functionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rI   ÚboolÚ__annotations__ÚdataclassesÚfieldÚsetrK   r
   r   Údo_not_emit_runtime_asserts© ó    úDC:\Projects\Historical\venv\Lib\site-packages\torch/export/_trace.pyrH   rH   _   sh   € € € € € € ðð ð €IˆtÐÐÑØ3D°;Ô3DØð4ñ 4ô 4Ð! 3 x¤=ð ð ñ ð #'ÐÐÐrW   rH   c                   óx   — e Zd ZU ej        j        ed<   eed<   ee	e
ej        eej        f         f         ed<   dS )ÚATenExportArtifactÚgmÚsigÚ	constantsN)rL   rM   rN   ÚtorchÚfxÚGraphModulerQ   rF   r   Ústrr   ÚTensorr,   ÚScriptObjectrV   rW   rX   rZ   rZ   p   sm   € € € € € € àŒÔÐÐÑØ	ÐÐÑØØØØŒLØØÔð ô	
ð	ôð ð ñ ð ð rW   rZ   T)Úfrozenc                   ób   — e Zd ZU eed<   eed<   eed<   eeeee	j        f         f         ed<   dS )ÚExportArtifactÚatenÚout_specÚ	fake_modeÚmodule_call_specsN)
rL   rM   rN   rZ   rQ   r<   r.   r   ra   ÚpytreerV   rW   rX   rf   rf   ~   sX   € € € € € € à
ÐÐÑØÐÐÑØÐÐÑØ˜C  c¨6¬?Ð&:Ô!;Ð;Ô<Ð<Ð<Ñ<Ð<Ð<rW   rf   c               #   ón  K  — t           j        j                             d¦  «        } t           j        j                             d¦  «        }	 d V — t          j        j        j        | Ž  t          j        j        j        |Ž  d S # t          j        j        j        | Ž  t          j        j        j        |Ž  w xY w©NF)r^   ÚbackendsÚmkldnnÚ	set_flagsÚnnpack)Úorig_mkldnn_flagÚorig_nnpack_flags     rX   Ú_ignore_backend_decompsrt   ”   s¥   è è € å”~Ô,×6Ò6°uÑ=Ô=ÐÝ”~Ô,×6Ò6°uÑ=Ô=Ðð;ØˆˆˆåŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ'Ð)9Ð:Ð:Ð:Ð:øõ 	ŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ'Ð)9Ð:Ð:Ð:øøøs   ÁB Â2B4c                 ó&   — dt          | ¦  «        z   S )NÚ	L__self__)Ú_strip_root©Úxs    rX   Ú
_fixup_keyrz   Ÿ   s   € Ø� Q™œÑ'Ð'rW   c                 óÊ   — t          | t          ¦  «        rM|                      d¦  «        r8| t          d¦  «        d …         }|                     d¦  «        r
|dd …         n|S | S )NÚ_export_rootú.r>   )Ú
isinstancera   Ú
startswithÚlen)ry   Ústrippeds     rX   rw   rw   £   sk   € Ý�!•SÑÔð F˜aŸlšl¨>Ñ:Ô:ð FØ•S˜Ñ(Ô(Ð*Ð*Ô+ˆØ'×2Ò2°3Ñ7Ô7ÐEˆx˜˜˜Œ|ˆ|¸XÐEØ€HrW   r[   c           
      ó  — | j         j        D ]ö}|j        t          j        j        j        k    rÕd|j        v rÌt          |j        d         ¦  «        }| j          	                    |¦  «        5  | j          
                    dt          j        j        j        |j        ||j        d         dœ¬¦  «        }|j        |_        |                     |¦  «         | j                              |¦  «         ddd¦  «         n# 1 swxY w Y   Œ÷dS )zµ
    In-place modifiy input graph module by replacing the export tracepoint with a new node
    that has the same target and args, but with the _export_root stripped from path.
    ÚpathÚcall_functionÚkind)rƒ   r…   )ÚargsÚkwargsN)ÚgraphÚnodesÚtargetr^   ÚopsÚhigher_orderÚ_export_tracepointr‡   rw   Úinserting_beforeÚcreate_noder†   ÚmetaÚreplace_all_uses_withÚ
erase_node)r[   Únoderƒ   Únew_nodes       rX   Ú_rewrite_tracepoint_noder•   ª   s>  € ð
 ””ð .ð .ˆØŒ;�%œ)Ô0ÔCÒCÐCØ˜œÐ$Ð$Ý" 4¤;¨vÔ#6Ñ7Ô7�Ø”X×.Ò.¨tÑ4Ô4ð .ð .Ø!œx×3Ò3Ø'Ýœ	Ô.ÔAØ!œYà$(Ø$(¤K°Ô$7ð ð  ð	  4ñ  ô  �Hð %)¤I�H”MØ×.Ò.¨xÑ8Ô8Ð8Ø”H×'Ò'¨Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .øð	.ð .s   Á+BC8Ã8C<	Ã?C<	c                 ób  ‡‡— g Šg }| j         j        D ]œ}|j        dk    rHd|j        v r?|j        d         }|�/t	          |t
          j        ¦  «        r‰                     |¦  «         ŒUd|j        v r>|j        d         }|�/t	          |t
          j        ¦  «        r|                     |¦  «         Œ�t          ‰|z   ¦  «        x}r|}nt          t          ¦   «         d¬¦  «        }dŠˆˆfd„}t          j        t
          j        ||¦  «        }	t          j        t
          j        ||¦  «        }
|	|
|fS )	zÜ
    Given a graph module, extract fakified input tensors from the metadata of
    its placeholders, and map them to the structure of given args and kwargs.
    Also return the fake mode used to fakify those inputs.
    ÚplaceholderÚvalNÚexample_valueT)Ú	shape_envÚexportr   c                 ó"   •— ‰‰         }‰dz  Š|S )Nr>   rV   )ry   r˜   ÚcountÚ	fake_inpss     €€rX   Úlookup_fakez)_extract_fake_inputs.<locals>.lookup_fakeÜ   s   ø€ à˜ÔˆØ�‰
ˆØˆ
rW   )rˆ   r‰   Úopr�   r~   r^   rb   Úappendr+   r.   r8   rk   Útree_map_only)r[   r†   r‡   Ú	fake_valsr“   Úfake_valÚdetected_fake_moderi   rŸ   Ú	fake_argsÚfake_kwargsr�   rž   s              @@rX   Ú_extract_fake_inputsr¨   Â   sP  øø€ ð %'€IØ$&€IØ””ð +ð +ˆØŒ7�mÒ#Ð#¨°´Ð(:Ð(:Ø”y Ô'ˆHØÐ#­
°8½U¼\Ñ(JÔ(JÐ#Ø× Ò  Ñ*Ô*Ð*øØ ¤	Ð)Ð)Ø”y Ô1ˆHØÐ#­
°8½U¼\Ñ(JÔ(JÐ#Ø× Ò  Ñ*Ô*Ð*øå-¨i¸)Ñ.CÑDÔDÐDÐð FØ&ˆ	ˆ	å"­X©Z¬ZÀÐEÑEÔEˆ	à€Eðð ð ð ð ð õ Ô$¥U¤\°;ÀÑEÔE€IÝÔ&¥u¤|°[À&ÑIÔI€Kà�k 9Ð,Ð,rW   c                 óò   — |j         D ]3}|j        t          j        t          j        fv r| |j                 |_        Œ4|j        D ]3}|j        t          j        t          j	        fv r| |j                 |_        Œ4d S ©N)
Úinput_specsr…   rB   Ú	PARAMETERÚBUFFERrŠ   Úoutput_specsr3   ÚBUFFER_MUTATIONÚGRADIENT_TO_PARAMETER)Úparam_buffer_tabler\   Úspecs      rX   Ú_replace_param_buffer_namesr³   è   s‘   € Ø”ð :ð :ˆØŒ9ÝÔÝÔð
ð 
ð 
ð -¨T¬[Ô9ˆDŒKøØÔ ð :ð :ˆØŒ9ÝÔ&ÝÔ,ð
ð 
ð 
ð -¨T¬[Ô9ˆDŒKøð:ð :rW   c           	      ó.  ‡— t          | ¦  «        t          |¦  «        t          ‰¦  «        z   k    s;J dt          | ¦  «        › dt          |¦  «        › dt          ‰¦  «        › d�¦   «         ‚ˆfd„| t          |¦  «        d …         D ¦   «         }g |¢|¢R S )Nz,Total number of arg names is expected to be z	 but got z positional args, z kwargs.c                 ó    •— g | ]
}‰|         ‘ŒS rV   rV   )Ú.0Úkw_namer‡   s     €rX   ú
<listcomp>z/_convert_to_positional_args.<locals>.<listcomp>ü   s   ø€ ÐSÐSÐS¨G˜˜wœÐSÐSÐSrW   )r€   )Úorig_arg_namesr†   r‡   Úreordered_kwargss     ` rX   Ú_convert_to_positional_argsr»   ÷   sÌ   ø€ Ýˆ~ÑÔ¥# d¡)¤)­c°&©k¬kÑ"9Ò9Ð9Ð9ð	Fµs¸>Ñ7JÔ7Jð 	Fð 	FÝ�t‘9”9ð	Fð 	FÝ03°F±´ð	Fð 	Fð 	Fñ :Ô9Ð9ð TÐSÐSÐS°~ÅcÈ$ÁiÄiÀkÀkÔ7RÐSÑSÔSÐðØ	ðà	ðð ð rW   c                 ó´  ‡
— d}t          j        dd|¦  «        }|                      ¦   «         D �](}t          |t          j        j        ¦  «        sŒ#|j        j        D ]ø}|j	        dv rŒd}|j
                             di ¦  «        x}rˆt          t          |                     ¦   «         ¦  «        ¦  «        \  }}	t          j        |	¦  «        r,t#          |	t          j        j        ¦  «        r||k    r|	|u rd}nt          |	t(          ¦  «        sJ ‚|rCd„ Š
|||j        d	z   |j        z   fi|¥}ˆ
fd
„|                     ¦   «         D ¦   «         |j
        d<   Œù�Œ*d S )Nz	L['self']z[^a-zA-Z0-9]Ú_©r—   ÚoutputTÚnn_module_stackFc                 ó®   ‡— 	 g Š G ˆfd„d¦  «        }t          | dd |¦   «         ii¦  «         d                     ‰¦  «        S # t          $ r | cY S w xY w)Nc                   ó$   •— e Zd Zˆ fd„Zˆ fd„ZdS )ú@_normalize_nn_module_stack.<locals>.normalize_path.<locals>.Pathc                 ó2   •— ‰                      |¦  «         | S rª   )r¡   )ÚselfÚnameÚpartss     €rX   Ú__getattr__zL_normalize_nn_module_stack.<locals>.normalize_path.<locals>.Path.__getattr__  s   ø€ Ø %§¢¨TÑ 2Ô 2Ð 2Ø'+ rW   c                 óL   •— ‰                      t          |¦  «        ¦  «         | S rª   )r¡   ra   )rÅ   ÚidxrÇ   s     €rX   Ú__getitem__zL_normalize_nn_module_stack.<locals>.normalize_path.<locals>.Path.__getitem__#  s    ø€ Ø %§¢­S°©X¬XÑ 6Ô 6Ð 6Ø'+ rW   N)rL   rM   rN   rÈ   rË   )rÇ   s   €rX   ÚPathrÃ     sG   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð,ð ,ð ,ð ,ð ,ð ,ð ,rW   rÌ   ÚLrÅ   r}   )ÚevalÚjoinÚ	Exception)rƒ   rÌ   rÇ   s     @rX   Únormalize_pathz2_normalize_nn_module_stack.<locals>.normalize_path  s•   ø€ ð$Ø "˜ð,ð ,ð ,ð ,ð ,ð ,ð ,ñ ,ô ,ð ,õ ˜T C¨&°$°$±&´&Ð)9Ð#:Ñ;Ô;Ð;Ø"Ÿxšx¨™œÐ.øÝ$ð $ð $ð $Ø#˜˜˜ð$øøøs   ƒAA ÁAÁAr}   c                 ó8   •— i | ]\  }\  }}| ‰|¦  «        |f“ŒS rV   rV   )r¶   Úkeyrƒ   ÚtyrÑ   s       €rX   ú
<dictcomp>z._normalize_nn_module_stack.<locals>.<dictcomp>0  sB   ø€ ð 0ð 0ð 0á'˜™Z˜d Bð ˜.˜.¨Ñ.Ô.°Ð3ð0ð 0ð 0rW   )ÚreÚsubÚmodulesr~   r^   r_   r`   rˆ   r‰   r    r�   ÚgetÚnextÚiterÚvaluesÚinspectÚisclassÚ
issubclassÚnnÚModulera   rM   rN   Úitems)Úgm_torch_levelÚroot_clsÚrootÚroot_keyr[   r“   Úadd_rootrÀ   rƒ   rÔ   rÑ   s             @rX   Ú_normalize_nn_module_stackrè     s¡  ø€ à€DÝŒv�o s¨DÑ1Ô1€HØ×$Ò$Ñ&Ô&ð ,ñ ,ˆÝ˜"�eœhÔ2Ñ3Ô3ð 	ØØ”H”Nð )	ð )	ˆDØŒwÐ3Ð3Ð3ØØˆHØ"&¤)§-¢-Ð0AÀ2Ñ"FÔ"FÐFˆð 	/Ý¥ _×%;Ò%;Ñ%=Ô%=Ñ >Ô >Ñ?Ô?‘��bõ ”? 2Ñ&Ô&ð /­:°b½%¼(¼/Ñ+JÔ+Jð /à˜t’|�|¨¨h¨¨Ø#(˜øå% b­#Ñ.Ô.Ð.Ð.Ð.Øð ð$ð $ð $ð& ˜t XÔ%8¸3Ñ%>ÀÔAVÑ%VÐWð#à%ð#�ð0ð 0ð 0ð 0à+:×+@Ò+@Ñ+BÔ+Bð0ñ 0ô 0�”	Ð+Ñ,øñM)	ð,ð ,rW   Úoriginal_moduleÚtraced_moduleÚreturnc                 óö  — i }i }|                       d¬¦  «        D ]\  }}||t          |¦  «        <   Œ|                      d¬¦  «        D ]\  }}||t          |¦  «        <   Œi }|                      d¬¦  «        D ]4\  }}	||vsJ ‚t          |	¦  «        |v r|t          |	¦  «                 ||<   Œ5|                     d¬¦  «        D ]4\  }}
||vsJ ‚t          |
¦  «        |v r|t          |
¦  «                 ||<   Œ5|S )zÞ
    Returns a mapping of parameter/buffer names from the new module to the
    original model. This is to help with restoring the FQN for parameter/buffers
    of a traced module to what the original module contains.
    F©Úremove_duplicate)Únamed_parametersÚidÚnamed_buffers)ré   rê   Úparam_lookupÚbuffer_lookuprÆ   ÚparamÚbufferr±   Údynamo_nameÚdynamo_paramÚdynamo_buffers              rX   Ú_get_param_buffer_mappingrù   6  sf  € ð $&€LØ$&€MØ&×7Ò7ÈÐ7ÑOÔOð 'ð '‰ˆˆeØ"&ˆ•R˜‘Y”YÑÐØ'×5Ò5ÀuÐ5ÑMÔMð )ð )‰ˆˆfØ$(ˆ•b˜‘j”jÑ!Ð!à)+ÐØ%2×%CÒ%CØð &Dñ &ô &ð Mð MÑ!ˆ�\ð Ð"4Ð4Ð4Ð4Ð4ÝˆlÑÔ˜|Ð+Ð+Ø.:½2¸lÑ;KÔ;KÔ.LÐ˜{Ñ+øà&3×&AÒ&AØð 'Bñ 'ô 'ð Oð OÑ"ˆ�]ð Ð"4Ð4Ð4Ð4Ð4ÝˆmÑÔ Ð-Ð-Ø.;½B¸}Ñ<MÔ<MÔ.NÐ˜{Ñ+øàÐrW   r\   Úfake_params_buffersr]   Úflat_fake_argsc                 ó€  — d„ | j         j        D ¦   «         }t          |j        ¦  «        t          |¦  «        k    sJ ‚d}t	          ||j        ¦  «        D �]g\  }}|j        t          j        t          j        fv r,|j	        €J ‚||j	                 j
        |j        d         _
        ŒQ|j        t          j        k    r?||         }	t          |	t          j        ¦  «        r|	j
        |j        d         _
        |dz  }Œ¥|j        t          j        k    rz|j	        €J ‚||j	                 }
t          |
t          j        ¦  «        rH|j        d         j        r|
j
        |j        d         _
        �Œ|j        d         j
        |
j
        k    sJ ‚�Œ4|j        t          j        t          j        fv r�ŒUt)          |j        ¦  «        ‚d S )Nc                 ó(   — g | ]}|j         d k    ¯|‘ŒS )r—   )r    ©r¶   r“   s     rX   r¸   z0_preserve_requires_grad_pass.<locals>.<listcomp>`  s$   € ÐPÐPÐP˜T°t´wÀ-Ò7OÐ7O�DÐ7OÐ7OÐ7OrW   r   r˜   r>   )rˆ   r‰   r€   r«   Úzipr…   rB   r¬   r­   rŠ   Úrequires_gradr�   Ú
USER_INPUTr~   r^   rb   ÚCONSTANT_TENSORÚis_leafÚ
CUSTOM_OBJÚTOKENÚAssertionError)r[   r\   rú   r]   rû   ÚplaceholdersÚir“   r²   Úfake_argÚconstants              rX   Ú_preserve_requires_grad_passr  Y  s½  € ð QÐP R¤X¤^ÐPÑPÔP€LÝˆsŒÑÔ¥3 |Ñ#4Ô#4Ò4Ð4Ð4Ð4Ø	€AÝ˜,¨¬Ñ8Ô8ð ,ñ ,‰
ˆˆdØŒ9ÝÔÝÔð
ð 
ð 
ð ”;Ð*Ð*Ð*Ø-@Ø”ô.äð ŒI�eÔÔ*Ð*ð ŒY�)Ô.Ò.Ð.Ø% aÔ(ˆHÝ˜(¥E¤LÑ1Ô1ð HØ19Ô1G�”	˜%Ô Ô.Ø�‰FˆAˆAØŒY�)Ô3Ò3Ð3Ø”;Ð*Ð*Ð*Ø  ¤Ô-ˆHÝ˜(¥E¤LÑ1Ô1ð Tà”9˜UÔ#Ô+ð TØ5=Ô5K�D”I˜eÔ$Ô2Ñ2àœ9 UÔ+Ô9¸XÔ=SÒSÐSÐSÐSùØŒY�9Ô/µ´ÐAÐAÐAÙå  ¤Ñ+Ô+Ð+ð5,ð ,rW   Úorig_constant_attrsÚgraph_signaturec                 ó6  — i }|                      ¦   «         D ]\  }}|| v r| |         ||<   Œ|j        D ]e}|j        t          j        t          j        fv rD|j        }|€J ‚|                     ||g¦  «        }|d         |_        ||         }	||= |D ]}
|	||
<   ŒŒfdS )zXRewrite the graph signature and constants table to use the FQN from the original module.Nr   )râ   r«   r…   rB   r  r  rŠ   rÙ   )r  r  r]   Úremap_tablerÆ   Úvaluer²   Úorig_targetÚtargetsr
  rŠ   s              rX   Ú_remap_constantsr  €  sâ   € ð )+€KØ —’Ñ(Ô(ð ;ð ;‰ˆˆeØÐ'Ð'Ð'Ø 3°EÔ :ˆK˜ÑøàÔ+ð -ð -ˆØŒ9ÝÔ%ÝÔ ð
ð 
ð 
ð œ+ˆKØÐ*Ð*Ð*Ø!—o’o k°K°=ÑAÔAˆGØ! !œ*ˆDŒKà  Ô-ˆHØ˜+Ð&Ø!ð -ð -�Ø$,�	˜&Ñ!Ð!øð-ð -rW   c           	      óp  — t          j        ||f¦  «        }t          | |¦  «        \  } }t          |j        ¦  «        t          |j        ¦  «        z   t          |j        ¦  «        z   }	t          | ||	¦  «         t          || t          |¦  «        ¦  «        }
t          | ¦  «        }|                     t          | |
|¦  «        ¦  «         |r*ddlm} ddlm}  || |
¦  «        \  } }
 || |
¦  «        \  } }
|                      ¦   «         D ]p}t%          |t&          j        j        ¦  «        sŒ"|j        j        D ]A}|j        dv r6|j                             dd¦  «         |j                             dd¦  «         ŒBŒq|
€J ‚t7          | |
|||||¦  «         t9          | |
|||¦  «         t;          | |
|¦  «        S )aÌ  
    This is a helper function that is shared between export_to_aten_ir and export_to_aten_ir_make_fx
    to produce the aten artifact. (export compatible graph module + signature)

    It does:
    1. Applies runtime assertion pass
    2. Populate meta val when missing
    3. Lift constants as placeholders
    4. Replace raw autograd and autocast ops with HOPs
    5. Prettify names for placeholders
    6. Preserve requires_grad value on node meta val
    r   )Úreplace_autocast_with_hop_pass)Úreplace_set_grad_with_hop_passr¾   rÀ   NÚstack_trace)rk   Útree_leavesr   r€   Ú
parametersÚbuffersÚinput_tokensÚset_missing_meta_valsrE   Ú_get_non_persistent_buffersr   Úupdater   Ú3torch._export.passes.replace_autocast_with_hop_passr  Ú3torch._export.passes.replace_set_grad_with_hop_passr  rØ   r~   r^   r_   r`   rˆ   r‰   r    r�   Úpopr    r  rZ   )r[   ÚmodÚconstant_attrsr  Úpre_dispatchr¦   r§   rú   rû   Útotal_non_user_inputsÚexport_graph_signaturer]   r  r  Ú_modr“   s                   rX   Ú_produce_aten_artifactr(  ›  sR  € õ2 Ô'¨°KÐ(@ÑAÔA€NÝ6°r¸?ÑKÔKÑ€Bˆõ 	ˆOÔ&Ñ'Ô'Ý
ˆoÔ%Ñ
&Ô
&ñ	'å
ˆoÔ*Ñ
+Ô
+ñ	,ð õ
 ˜"˜nÐ.CÑDÔDÐDõ @Ø˜Õ8¸Ñ=Ô=ñô Ðõ +¨2Ñ.Ô.€IØ×ÒÕ(¨Ð-CÀ^ÑTÔTÑUÔUÐUàð 
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð &DÐ%CØÐ&ñ&
ô &
Ñ"ˆÐ"ð &DÐ%CØÐ&ñ&
ô &
Ñ"ˆÐ"ð
 —
’
‘”ð 3ð 3ˆÝ˜$¥¤Ô 4Ñ5Ô5ð 	ØØ”JÔ$ð 	3ð 	3ˆDØŒwÐ3Ð3Ð3Ø”	—’Ð/°Ñ6Ô6Ð6Ø”	—’˜m¨TÑ2Ô2Ð2øð	3ð "Ð-Ð-Ð-ÝØ
ØØØØØØñô ð õ !Ø
Ð"Ð$7¸ÀNñô ð õ Ø
ØØñô ð rW   c                 óz  ‡
— d„ | j         j        D ¦   «         Š
ˆ
fd„}t          t          j                 }t          t          j                 }i }|j        D ]¶}|j        t          j        k    rŸ|j        j	         
                    |¦  «        s€|j        j	         
                    |¦  «        r. |||j        j	        t          |¦  «        d…         z   ¦  «        }n |||j        j	        z   ¦  «        }|||j        j	        <   ||j        _	        Œ·|j        D ],}|j        j	        |v r||j        j	                 |j        _	        Œ-|                      ¦   «         D ]g}t          |t          j        j        ¦  «        sŒ"|j         j        D ]$}	|	j	        |v r||	j	                 x|	_	        |	_        Œ%|                     ¦   «          ŒhdS )z\
    For strict mode, rename constants nodes that were previously annotated as buffers.
    c                 ó   — h | ]	}|j         ’Œ
S rV   ©rÆ   rþ   s     rX   ú	<setcomp>z*_rename_constants_nodes.<locals>.<setcomp>  s   € Ð7Ð7Ð7 �$”)Ð7Ð7Ð7rW   c                 óx   •— | ‰v rd}| › d|› �x}‰v r|dz  }| › d|› �x}‰v °|} ‰                      | ¦  «         | S )Nr>   r½   )Úadd)rÆ   ÚnÚdup_nameÚ
node_namess      €rX   Úrename_constantz0_rename_constants_nodes.<locals>.rename_constant  sn   ø€ Ø�:ÐÐØˆAØ"&˜}˜}¨˜}˜}Ð,�8°Ð;Ð;Ø�Q‘�ð #'˜}˜}¨˜}˜}Ð,�8°Ð;Ð;àˆDØ�Š�tÑÔÐØˆrW   N)rˆ   r‰   r!   rB   r­   r  r«   r…   ÚargrÆ   r   r€   r®   rØ   r~   r^   r_   r`   rŠ   Ú	recompile)r[   r  r2  Úbuffer_prefixÚconst_prefixÚbuffer_to_constantr²   Úc_namer"  r“   r1  s             @rX   Ú_rename_constants_nodesr9  ý  sÑ  ø€ ð 8Ð7¨¬¬Ð7Ñ7Ô7€Jðð ð ð ð õ )­Ô)9Ô:€MÝ'­	Ô(AÔB€LØÐØÔ+ð #ð #ˆØŒ9�	Ô1Ò1Ð1¸$¼(¼-×:RÒ:RØñ;
ô ;
Ð1ð ŒxŒ}×'Ò'¨Ñ6Ô6ð GØ(˜Ø  4¤8¤=µ°]Ñ1CÔ1CÐ1EÐ1EÔ#FÑFñô ��ð )˜¨¸¼¼Ñ)EÑFÔF�Ø06Ð˜tœxœ}Ñ-Ø"ˆDŒHŒMøØÔ,ð >ð >ˆØŒ8Œ=Ð.Ð.Ð.Ø.¨t¬x¬}Ô=ˆDŒHŒMøð �zŠz‰|Œ|ð ð ˆÝ˜#�uœxÔ3Ñ4Ô4ð 	ØØ”I”Oð 	Hð 	HˆDØŒyÐ.Ð.Ð.Ø*<¸T¼YÔ*GÐG�”	˜DœKøØ�Š‰Œˆˆðð rW   c                 óp  — t          | |¦  «        }|                     ¦   «         D ]\  }}|                     dd¦  «        ||<   Œ|                     ¦   «         D ]—\  }}t          ||¦  «        sŒt	          ||¦  «        }t          |t          j        ¦  «        r6t          |t          j        j	        ¦  «        s| 
                    ||¦  «         nt          |||¦  «         t          ||¦  «         Œ˜|j        j        D ]%}|j        dk    r|j        }||v r||         |_        Œ&|                     ¦   «          dS )zV
    Restores the state dict of the traced module to that of the original module.
    r}   r½   Úget_attrN)rù   râ   ÚreplaceÚhasattrÚgetattrr~   r^   rb   rà   Ú	ParameterÚregister_bufferÚsetattrÚdelattrrˆ   r‰   r    rŠ   r4  )ré   rê   r±   rÆ   ÚfqnÚattrr“   Ú	attr_names           rX   Ú_restore_state_dictrF  .  sZ  € õ 3°?ÀMÑRÔRÐð
 (×-Ò-Ñ/Ô/ð 9ð 9‰	ˆˆcØ#&§;¢;¨s°CÑ#8Ô#8Ð˜4Ñ Ð ð (×-Ò-Ñ/Ô/ð 	%ð 	%‰	ˆˆcÝ�} dÑ+Ô+ð 	Øå�} dÑ+Ô+ˆÝ�d�EœLÑ)Ô)ð 	.µ*¸TÅ5Ä8ÔCUÑ2VÔ2Vð 	.Ø×)Ò)¨#¨tÑ4Ô4Ð4Ð4å�M 3¨Ñ-Ô-Ð-Ý�˜tÑ$Ô$Ð$Ð$ð Ô#Ô)ð <ð <ˆØŒ7�jÒ Ð ØœˆIØÐ.Ð.Ð.Ø0°Ô;�”øà×ÒÑÔÐÐÐrW   r"  c                 óB   — d„ |                       d¬¦  «        D ¦   «         S )Nc                 ó>   — i | ]\  }}|t          |¦  «        j        “ŒS rV   )ÚtyperL   )r¶   rÆ   Úms      rX   rÕ   z)_get_module_hierarchy.<locals>.<dictcomp>S  s4   € ð ð ð Ù#* 4¨ˆ�d�1‰gŒgÔðð ð rW   Frí   )Únamed_modules)r"  s    rX   Ú_get_module_hierarchyrL  R  s5   € ðð Ø.1×.?Ò.?ÐQVÐ.?Ñ.WÔ.Wðñ ô ð rW   Úin_specrh   Úmodule_call_signaturesÚforward_arg_namesc                 óÖ   ‡— ˆfd„t           D ¦   «         }|d         j        dk    sJ ‚t          g g | ||¬¦  «        |d         _        d„ ‰                     ¦   «         D ¦   «         }g |¢|¢S )Nc                 óX   •— g | ]&}t          |‰                     |¦  «        ¬ ¦  «        ‘Œ'S ©)rC  Ú	signature)rC   rÙ   )r¶   rC  rN  s     €rX   r¸   z+_make_module_call_graph.<locals>.<listcomp>^  sE   ø€ ð ð ð àõ 	˜CÐ+A×+EÒ+EÀcÑ+JÔ+JÐKÑKÔKðð ð rW   r   Ú ©ÚinputsÚoutputsrM  rh   rO  c                 óH   — g | ]\  }}|t           v¯t          ||¬ ¦  «        ‘Œ S rR  )Ú_EXPORT_MODULE_HIERARCHYrC   )r¶   rC  rS  s      rX   r¸   z+_make_module_call_graph.<locals>.<listcomp>j  s?   € ð ð ð áˆC�ØÕ.Ð.Ð.õ 	˜C¨9Ð5Ñ5Ô5à.Ð.Ð.rW   )rY  rC  rD   rS  râ   )rM  rh   rN  rO  ÚoriginalÚ
additionals     `   rX   Ú_make_module_call_graphr\  X  sª   ø€ ðð ð ð å+ðñ ô €Hð �AŒ;Œ?˜bÒ Ð Ð Ð Ý/ØØØØØ+ðñ ô €HˆQ„KÔðð à4×:Ò:Ñ<Ô<ðñ ô €Jð
 $ˆXÐ#˜
Ð#Ð#rW   rV   F)Úpreserve_module_call_signatureÚdisable_constraint_solverÚ'allow_complex_guards_as_runtime_assertsÚrestore_fqnÚ_log_export_usageÚsame_signatureÚfr†   .r‡   Údynamic_shapesr]  r^  r_  r`  ra  rb  c                ó
  — |rt          ddh¬¦  «         t          |t          ¦  «        s*t          t          j        dt          |¦  «        › �¦  «        ‚|pi }t          | ||¦  «        }
t          |
|¦  «         t          j
        j                             t          j        t          ¦  «        ¦  «        5  	 i }t!          | ||¦  «        5  t#          ¦   «         5  t          j
                             | |dd|d|||	¬¦	  «	        |i |¤Ž\  }}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ny# t&          t(          f$ r,}t          t          j        t-          |¦  «        ¦  «        ‚d}~wt.          $ r1}t          t          j        d	t-          |¦  «        › �d
¬¦  «        ‚d}~ww xY wddd¦  «         n# 1 swxY w Y   ||j        d<   t          | t          j        j        ¦  «        r|rt9          | |¦  «         |S )z�
    Traces either an nn.Module's forward function or just a callable with PyTorch
    operations inside and produce a torch.fx.GraphModule in torch IR.
    zexport.private_apiÚ_export_to_torch_ir©ÚeventÚflagsúAExpecting `args` to be a tuple of example positional inputs, got TÚsymbolic)rd  Úassume_static_by_defaultÚtracing_moder^  Ú+prefer_deferred_runtime_asserts_over_guardsr_  ra  rb  Nz5Consider annotating your code using torch._check*(). Úconstrain_as_size_example)Ú	case_namerj   )r/   r~   Útupler   r   ÚINVALID_INPUTrI  r2   r1   r^   Ú_dynamoÚconfigÚpatchrR   ÚasdictÚDEFAULT_EXPORT_DYNAMO_CONFIGr#   rt   r›   r5   r=   ÚCONSTRAINT_VIOLATIONra   r7   ÚANTI_PATTERNr�   rà   rá   rF  )rc  r†   r‡   rd  r]  r^  r_  r`  ra  rb  Úcombined_argsrj   rã   r½   Úes                  rX   rf  rf  r  s  € ð$ ð TÝÐ3Ð<QÐ;RÐSÑSÔSÐSå�d�EÑ"Ô"ð 
ÝÝÔ'Ø\ÕPTÐUYÑPZÔPZÐ\Ð\ñ
ô 
ð 	
ð
 ˆ\�r€FÝ! ! T¨6Ñ2Ô2€MÝ˜-¨Ñ8Ô8Ð8Ý	ŒÔ	×	#Ò	#¥KÔ$6Õ7SÑ$TÔ$TÑ	UÔ	Uð ð ð	ØGIÐÝ!ØÐ1Ð3Dñô ð ð å&Ñ(Ô(ðð õ %*¤M×$8Ò$8ØØ#1Ø-1Ø!+Ø.Gð AEØ<cØ&7Ø#1ð %9ñ %ô %ð ð%ð ð%ð %Ñ!� ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øøõ& )­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøÝ*ð 	ð 	ð 	ÝÝÔ*ØPÍÈAÉÌÐPÐPØ5ðñ ô ð øøøøð	øøøð1ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð> 0A€NÔÐ+Ñ,å�!•U”X”_Ñ%Ô%ð /¨+ð /Ý˜A˜~Ñ.Ô.Ð.àÐsŠ   Â4F=Â6D8Ã	D,Ã1DÄ	D,ÄDÄD,ÄDÄD,Ä D8Ä,D0	Ä0D8Ä3D0	Ä4D8Ä7F=Ä8F.Å	'E0Å0F.Å=,F)Æ)F.Æ.F=Æ=GÇGc                 ó   — | S rª   rV   rx   s    rX   ú<lambda>r}  ¿  ó   € ˜€ rW   )Ú	transformr$  Údecomp_tableÚ_check_autograd_stateÚ_is_torch_jit_tracer#  r�  r‚  c                ó   — t           j                             ¦   «         }t          ¦   «         }|	r|s|rt	          ¦   «         }t
          d„ ¦   «         }t           j        j        j         	                    | |ddd¬¦  «        5  |5  t          ¦   «         5   |¦   «         5    |t          ¦  «        | |d|||¬¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d„ } || |¦  «         |rM	  ||¦  «         n@# t          t          f$ r,}t          t          j        t#          |¦  «        ¦  «        ‚d }~ww xY wt%          || ||||||¬¦  «        S )Nc               3   ó¦   K  — t           j        j        } 	 dt           j        _        d V — | t           j        _        d S # | t           j        _        w xY w©NT©r^   ÚcompilerÚ_is_compiling_flag©Ú	old_values    rX   Ú_compiling_state_contextz4_export_to_aten_ir.<locals>._compiling_state_contextÑ  óN   è è € å”NÔ5ˆ	ð	:Ø04�EŒNÔ-ØˆEˆEˆEà09�EŒNÔ-Ð-Ð-ø°	�EŒNÔ-Ð9Ð9Ð9Ð9ó	   •= ½AT©Útie_weightsÚstrictÚstack_weightsF)Útrace_jointr$  Údecompositionsr‡   c                 óÄ  — t          | t          j        j        ¦  «        rÀt	          | d¦  «        r|j                             | j        ¦  «         t          | j        j	        ¦  «        d         }t          |j        j	        ¦  «        d         }|j
        dk    r|j
        dk    sJ ‚t          |j        ¦  «        dk    sJ ‚|j                             |j        ¦  «         d S d S )Nr�   éÿÿÿÿr¿   r   )r~   r^   r_   r`   r=  r�   r  Úlistrˆ   r‰   r    r€   )Úold_gmÚnew_gmÚold_output_nodeÚnew_output_nodes       rX   Ú$_maybe_fixup_gm_and_output_node_metaz@_export_to_aten_ir.<locals>._maybe_fixup_gm_and_output_node_metaí  sØ   € Ý�f�eœhÔ2Ñ3Ô3ð 	>Ý�v˜vÑ&Ô&ð 0Ø”×"Ò" 6¤;Ñ/Ô/Ð/Ý" 6¤<Ô#5Ñ6Ô6°rÔ:ˆOÝ" 6¤<Ô#5Ñ6Ô6°rÔ:ˆOØ"Ô%¨Ò1Ð1°oÔ6HÈHÒ6TÐ6TÐ6TÐTå�Ô+Ñ,Ô,°Ò1Ð1Ð1Ð1ØÔ ×'Ò'¨Ô(<Ñ=Ô=Ð=Ð=Ð=ð	>ð 	>rW   ©r[   r"  r#  r  r$  r¦   r§   rú   )r^   Ú_CÚis_grad_enabledr   r?   r   rà   ÚutilsÚ	statelessÚ_reparametrize_modulert   r*   r5   r=   r   r   rx  ra   r(  )r"  r¦   r§   rú   r#  Úproduce_guards_callbackr  r$  r€  r�  r‚  rž  Úgrad_safe_guardr‹  r[   r  r›  r{  s                     rX   Ú_export_to_aten_irr¤  ·  s  € õ" ”h×.Ò.Ñ0Ô0€OÝ!‘m”m€Oð ð >Øð 	> ð 	>Ý;Ñ=Ô=ˆOåð:ð :ñ „^ð:õ 
ŒŒÔ	!×	7Ò	7ØØØØØð 
8ñ 
ô 
ð 
ð 
ð ð
ð 
õ 0Ñ1Ô1ð
ð 
ð 4LÐ3KÑ3MÔ3Mð
ð 
ð ;˜i˜iÕ(9Ñ:Ô:ØØØØ%Ø'Øð
ñ 
ô 
ÑˆˆOð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 	>ð 	>ð 	>ð )Ð(¨¨bÑ1Ô1Ð1ð ð Hð	HØ#Ð# BÑ'Ô'Ð'Ð'øÝ(­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøð	Høøøõ "ØØØ%Ø'Ø!ØØØ/ð	ñ 	ô 	ð 	s–   Á?DÂC9ÂC"Â#C	Â?C"ÃCÃC"ÃCÃC"ÃC9Ã"C&Ã&C9Ã)C&Ã*C9Ã-DÃ9C=	Ã=DÄ C=	ÄDÄDÄDÄ-D9 Ä9E6Å
'E1Å1E6ri   c                 ó|  — i t          |                     d¬¦  «        ¦  «        ¥t          |                     d¬¦  «        ¦  «        ¥}i }i }|                     ¦   «         D ]Z\  }}t	          |¦  «        |v r|t	          |¦  «                 }n)|                      |d¬¦  «        }||t	          |¦  «        <   |||<   Œ[|S )NFrí   T©Ústatic_shapes)Údictrï   rñ   râ   rð   Úfrom_tensor)ri   r"  Úparams_buffersÚfaked_params_buffersÚmemorÓ   r  Úfake_tensors           rX   Ú_fakify_params_buffersr®    sÔ   € ðÝ
ˆs×#Ò#°UÐ#Ñ;Ô;Ñ
<Ô
<ðå
ˆs× Ò °%Ð Ñ8Ô8Ñ
9Ô
9ð€Nð
 ÐØ"$€DØ$×*Ò*Ñ,Ô,ð 0ð 0‰
ˆˆUÝˆe‰9Œ9˜ÐÐØ�r %™yœyœ/ˆKˆKà#×/Ò/°ÀTÐ/ÑJÔJˆKØ)ˆD•�E‘”‰OØ$/Ð˜SÑ!Ð!ØÐrW   c                 óÈ  ‡— t          j        | j        ¦  «        } |j        |Ž j        }g }|                     ¦   «         D ]n\  Š}|j        ‰         j        t           j        j	        k    r/| 
                    ˆfd„t          |¦  «        D ¦   «         ¦  «         ŒY|                     ‰¦  «         Œo|r1| 
                    d„ |                     ¦   «         D ¦   «         ¦  «         |S )a±  
    Gets the argument names to forward that are used, for restoring the
    original signature when unlifting the exported program module.
    - Positional args: retain the original argument names, and enumerate
        *args as args_0, args_1, ...
    - Keyword args: retain the original kwarg names in the order specified
        by the user. This order seems to matter for the current state of
        export lifted modules.
    c                 ó$   •— g | ]\  }}‰› d |› �‘ŒS )r½   rV   )r¶   r  r½   rÆ   s      €rX   r¸   z*_get_forward_arg_names.<locals>.<listcomp>?  s'   ø€ ÐEÐEÐE©D¨A¨q˜T˜-˜- A˜-˜-ÐEÐEÐErW   c                 ó   — g | ]\  }}|‘ŒS rV   rV   )r¶   Úkwargr½   s      rX   r¸   z*_get_forward_arg_names.<locals>.<listcomp>D  s   € Ð;Ð;Ð;¡  q�eÐ;Ð;Ð;rW   )rÝ   rS  ÚforwardÚbind_partialÚ	argumentsrâ   r  r…   Ú_ParameterKindÚVAR_POSITIONALÚextendÚ	enumerater¡   )r"  r†   r‡   r\   Ú_argsÚnamesr  rÆ   s          @rX   Ú_get_forward_arg_namesr¼  *  sá   ø€ õ Ô
˜CœKÑ
(Ô
(€CØˆCÔ˜dÐ#Ô-€Eà€EØ—{’{‘}”}ð ð ‰ˆˆeàŒ>˜$ÔÔ$­Ô(>Ô(MÒMÐMØ�LŠLÐEÐEÐEÐEµI¸eÑ4DÔ4DÐEÑEÔEÑFÔFÐFÐFà�LŠL˜ÑÔÐÐàð =Ø�ŠÐ;Ð;¨F¯LªL©N¬NÐ;Ñ;Ô;Ñ<Ô<Ð<à€LrW   c                 óª   — t          ¦   «         }|                      d¬¦  «        D ]-\  }}|j        D ] }|                     |r|› d|› �n|¦  «         Œ!Œ.|S )zO
    Returns set of non-persistent buffers in a module and its submodules.
    Frí   r}   )rT   rK  Ú_non_persistent_buffers_setr.  )r"  ÚresultrÆ   rJ  Úbs        rX   r  r  I  su   € õ ‰UŒU€FØ×$Ò$°eÐ$Ñ<Ô<ð 5ð 5‰ˆˆaØÔ.ð 	5ð 	5ˆAØ�JŠJ¨Ð3˜$�}�} �}�}�}°!Ñ4Ô4Ð4Ð4ð	5à€MrW   Úorig_mod_buffersÚtraced_mod_buffersc                 ó®   — |j         D ]L}|j        t          j        k    r5|j        €J ‚||j                 }|| vrt          j        |_        |||j        <   ŒMdS )zt
    Dynamo erroneously marks tensor attributes on modules as buffers.
    Rewrite them to be tensor constants.
    N)r«   r…   rB   r­   rŠ   r  )rÁ  rÂ  r  r]   r²   r  s         rX   Ú _rewrite_dynamo_tensor_constantsrÄ  T  so   € ð  Ô+ð 	/ð 	/ˆØŒ9�	Ô(Ò(Ð(Ø”;Ð*Ð*Ð*Ø& t¤{Ô3ˆEØÐ,Ð,Ð,õ &Ô5�”	Ø).�	˜$œ+Ñ&øð	/ð 	/rW   Úorig_modc                 ó¾   — |j         D ]T}|j        t          j        k    r=|j        s6|j        €J ‚|j        |vsJ ‚|                      |j        ¦  «        ||j        <   ŒUdS )z;
    Moves non-persistent buffers to tensor constants.
    N)r«   r…   rB   r­   Ú
persistentrŠ   Ú
get_buffer)rÅ  r  r]   r²   s       rX   Ú0_move_non_persistent_buffers_to_tensor_constantsrÉ  j  sy   € ð  Ô+ð Fð FˆØŒ9�	Ô(Ò(Ð(°´Ð(Ø”;Ð*Ð*Ð*Ø”; iÐ/Ð/Ð/Ð/Ø%-×%8Ò%8¸¼Ñ%EÔ%EˆI�d”kÑ"øð	Fð FrW   Úgraph_modulec           
      óx  — t          | gt          |                      ¦   «         ¦  «        z   ¦  «        D �]\  }}t          |t          j        j        ¦  «        sŒ&|j        j        D ]Ò}|j	        dv rˆ|dk    r�|j
                             dd¦  «        x}	 €t          d|› d|j	        › d�¦  «        ‚t          d„ |                     ¦   «         D ¦   «         ¦  «        st          d|› d|j	        › d	|› �¦  «        ‚Œ“|j	        d
v r6|j
                             dd¦  «        rt          d|› d|j	        › d�¦  «        ‚ŒÓ�ŒdS )aŠ  
    Perform nn_module_stack checks on the graph.
    Current constraints:
        For the top level graph:
        - populated for 'call_function', 'get_attr'
        - None for 'placeholder', 'output'
        For submodule graphs:
        - None for 'placeholder', output'

    TODO(pianpwk): make this a consistent node-level check once nn_module_stack is populated for cond submodules.
    ©r„   r;  r   rÀ   NúNode ú	 of type z$ is missing nn_module_stack metadatac              3   óÈ   K  — | ]]\  }}t          |t          ¦  «        o@t          |t          ¦  «        o+t          |¦  «        d k    ot	          d„ |D ¦   «         ¦  «        V — Œ^dS )é   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rª   )r~   ra   )r¶   ry   s     rX   ú	<genexpr>z4_verify_nn_module_stack.<locals>.<genexpr>.<genexpr>–  s,   è è € Ð>Ð>°q¥
¨1­cÑ 2Ô 2Ð>Ð>Ð>Ð>Ð>Ð>rW   N)r~   ra   rq  r€   Úall©r¶   ÚkÚvs      rX   rÒ  z*_verify_nn_module_stack.<locals>.<genexpr>’  s‹   è è € ð ð ñ
 !˜A˜qõ	 # 1¥cÑ*Ô*ð ?Ý& q­%Ñ0Ô0ð?å ™FœF ašKð?õ  Ð>Ð>¸AÐ>Ñ>Ô>Ñ>Ô>ð	ð ð ð ð ð rW   z[ has incorrect nn_module_stack metadata formatexpected Dict[str, Tuple[str, str]], but got r¾   z7 contains nn_module_stack metadata, this should be None)r¹  r–  rØ   r~   r^   r_   r`   rˆ   r‰   r    r�   rÙ   r"   rÓ  râ   )rÊ  r  r"  r“   rÀ   s        rX   Ú_verify_nn_module_stackr×  y  s´  € õ ˜\˜N­T°,×2FÒ2FÑ2HÔ2HÑ-IÔ-IÑIÑJÔJð ñ ‰ˆˆ3Ý˜#�uœxÔ3Ñ4Ô4ð 	ØØ”I”Oð 	ð 	ˆDØŒwÐ7Ð7Ð7Ø˜’6�6à+/¬9¯=ª=Ð9JÈDÑ+QÔ+QÐQ˜Øðõ 1Ø` DÐ`Ð`°4´7Ð`Ð`Ð`ñô ð õ ð ð ð
 %4×$9Ò$9Ñ$;Ô$;ðñ ô ñ ô ð 
õ 1ð^ Dð ^ð ^°4´7ð ^ð ^ØL[ð^ð ^ñô ð øð ”Ð5Ð5Ð5Ø”9—=’=Ð!2°DÑ9Ô9ð Ý,Øo ÐoÐo¨t¬wÐoÐoÐoñô ð øñ-	ðð rW   c           
      óš  — | g|                       ¦   «         ¢D ]²}t          |t          j        j        ¦  «        sŒ"| j        j        D ]ƒ}|j                             dd¦  «        }|j	        dv r5|�2t          |t          ¦  «        st          d|› d|j	        › d|› �¦  «        ‚Œ[|j	        dv r|rt          d|› d|j	        › d|› �¦  «        ‚Œ„Œ³dS )	z®
    Perform stack trace checks on the graph.
    Constraints:
        - None or non-empty str for 'call_function', 'get_attr'
        - None for 'placeholder', 'output'
    r  NrÌ  rÍ  rÎ  zP has invalid stack_trace metadata, expected a string or None but instead found: r¾   zA contains stack_trace metadata, expected None but instead found: )rØ   r~   r^   r_   r`   rˆ   r‰   r�   rÙ   r    ra   r"   )rÊ  r"  r“   r  s       rX   Ú_verify_stack_tracerÙ  ¤  sA  € ð Ð6˜|×3Ò3Ñ5Ô5Ð6ð ð ˆÝ˜#�uœxÔ3Ñ4Ô4ð 	ØØ Ô&Ô,ð 	ð 	ˆDØœ)Ÿ-š-¨°tÑ<Ô<ˆKØŒwÐ7Ð7Ð7Ø#Ð+­z¸+ÅsÑ/KÔ/KÐ+Ý,ðV ð Vð V¨t¬wð Vð VØHSðVð Vñô ð øð ”Ð5Ð5Ð5Øð Ý,ðJ ð Jð J¨t¬wð Jð JØ<GðJð Jñô ð øð	ðð rW   c           
      ó€  — d„ |j         D ¦   «         }|                      ¦   «         D ]—}t          |t          j        j        ¦  «        sŒ"|j        j        D ]h}|j        dk    r[|j	        |vrŒ||j	                 }t          |         }|j	                             |¦  «        st          d|j	        › d|› d|› �¦  «        ‚ŒiŒ˜dS )a  
    Performs a sanity check on the placeholder node names.
    - User input nodes: no restrictions, should match the original forward() signature
    - Params/buffers/constants/custom_obj/token nodes: should start with prefixes defined in <placeholder_prefixes>
    c                 ó2   — i | ]}|j         j        |j        “ŒS rV   )r3  rÆ   r…   )r¶   r²   s     rX   rÕ   z-_verify_placeholder_names.<locals>.<dictcomp>Æ  s    € ÐIÐIÐI°�D”H”M 4¤9ÐIÐIÐIrW   r—   zPlaceholder node name z does not follow spec for z, name should have prefix: N)r«   rØ   r~   r^   r_   r`   rˆ   r‰   r    rÆ   r!   r   r"   )r[   r\   Úname_to_kindr"  r“   Ú	node_kindÚprefixs          rX   Ú_verify_placeholder_namesrß  ¾  s  € ð JÐI¸¼ÐIÑIÔI€LØ�zŠz‰|Œ|ð ð ˆÝ˜#�uœxÔ3Ñ4Ô4ð 	ØØ”I”Oð 		ð 		ˆDØŒw˜-Ò'Ð'Ø”9 LÐ0Ð0ØØ(¨¬Ô3�	Ý-¨iÔ8�Ø”y×+Ò+¨FÑ3Ô3ð Ý,ð E°´ð  Eð  EÐV_ð  Eð  Eð  }Cð  Eð  Eñô ð øð		ðð rW   Úepc                 óœ  — d}t          ¦   «         }| j                             ¦   «         D ]ž}t          |t          j        j        ¦  «        sŒ"|j        j        D ]o}|j	        dk    rŒ|dz  }t          |j        d¦  «        sJ ‚t          |j        d¦  «        sJ ‚|                     |j        j        › d|j        j        › �¦  «         ŒpŒŸ||dœS )Nr   r„   r>   rM   rL   r}   )Úop_countÚop_set)rT   rÊ  rØ   r~   r^   r_   r`   rˆ   r‰   r    r=  rŠ   r.  rM   rL   )rà  râ  rã  rJ  r“   s        rX   Úget_ep_statsrä  Ö  sê   € Ø€HÝ‰UŒU€FØŒ_×$Ò$Ñ&Ô&ð 	Kð 	KˆÝ˜!�UœXÔ1Ñ2Ô2ð 	ØØ”G”Mð 	Kð 	KˆDØŒw˜/Ò)Ð)ØØ˜‰MˆHÝ˜4œ;¨Ñ5Ô5Ð5Ð5Ð5Ý˜4œ;¨
Ñ3Ô3Ð3Ð3Ð3Ø�JŠJ˜$œ+Ô0ÐIÐI°4´;Ô3GÐIÐIÑJÔJÐJÐJð	Kð !¨FÐ3Ð3Ð3rW   Ú_EXPORT_FLAGSrY  c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                  ó@  •— 	 t          j         ¦   «         } ‰	| i |¤Ž}t          j         ¦   «         }t          dd||z
  t          dœt          |¦  «        ¤Ž n¸# t          $ r«}t          |¦  «        }|j        dz   |j        z   }t          |¦  «        }|�Mt           
                    t          |¦  «        ¦  «         t          d|t          |¦  «        t          ¬¦  «         n%t          d|t          |¦  «        t          ¬¦  «         |‚d }~ww xY w	 d ad an	# d ad aw xY w|S )Nzexport.time)rh  Úmetricsri  r}   zexport.error.classified)rh  rI  Úmessageri  zexport.error.unclassifiedrV   )Útimer/   rå  rä  rÐ   rI  rM   rN   r   ÚlogÚerrorr   ra   rY  )
r†   r‡   Ústartrà  Úendr{  ÚtÚ
error_typerp  Úfns
            €rX   Úwrapperz$_log_export_wrapper.<locals>.wrapperë  ss  ø€ ð 	,Ý”I‘K”KˆEØ��TÐ$˜VÐ$Ð$ˆBÝ”)‘+”+ˆCÝð Ø#Ø˜e™Ý#ðð õ ˜rÑ"Ô"ð	ð ð ð øõ ð 	ð 	ð 	Ý�Q‘”ˆAØœ¨Ñ+¨a¬nÑ<ˆJÝ5°aÑ8Ô8ˆIØÐ$Ý—	’	Õ0°Ñ;Ô;Ñ<Ô<Ð<Ý Ø3Ø#Ý ™FœFÝ'ð	ñ ô ð ð õ !Ø5Ø#Ý ™FœFÝ'ð	ñ ô ð ð ˆGøøøøð'	øøøðð6 !ˆMØ'+Ð$Ð$øð !ˆMØ'+Ð$Ð+Ð+Ð+Ð+àˆ	s+   ƒAA ÁD Á
DÁ!B&DÄDÄD ÄD)Ú	functoolsÚwraps)rñ  rò  s   ` rX   Ú_log_export_wrapperrõ  ê  s9   ø€ Ý„_�RÑÔð$ð $ð $ð $ñ Ôð$ðL €NrW   c                 óô   — t          | t          t          t          f¦  «        s| f} nKt          | t          ¦  «        rt          | ¦  «        } n&t          | t          j        t          f¦  «        r|€| f} |€i }| |fS rª   )r~   rq  r–  r¨  r^   rb   )Úexample_inputsÚexample_kwarg_inputss     rX   Ú$_process_jit_trace_inputs_for_exportrù    s‡   € Ý�n¥u­dµDÐ&9Ñ:Ô:ð 
+Ø(Ð*ˆˆå	�N¥DÑ	)Ô	)ð +Ý˜~Ñ.Ô.ˆˆõ 	�>¥E¤Lµ$Ð#7Ñ8Ô8ð+à Ð(à(Ð*ˆàÐ#Ø!ÐØÐ/Ð/Ð/rW   c                 ó"  — t          |                      d¬¦  «        ¦  «        }t          |                      d¬¦  «        ¦  «        }||z  }t          | ¦  «        }|D ]}|                     |d ¦  «         Œt          |t          ¦  «        s*t          t          j	        dt          |¦  «        › �¦  «        ‚|�|ni }t          j        ||f¦  «        \  }	}
t          |t          j        j        ¦  «        r|                     | ||¦  «        }|||
||fS )NFrí   rj  )r¨  rï   rñ   r  r!  r~   rq  r   r   rr  rI  rk   Útree_flattenr^   r›   ÚShapesCollectionrd  )r"  r†   r‡   rd  rï   rñ   Úoriginal_state_dictÚnon_persistent_buffersrÕ  r½   Úoriginal_in_specs              rX   Ú_process_export_inputsr   '  s-  € õ ˜C×0Ò0À%Ð0ÑHÔHÑIÔIÐÝ˜×*Ò*¸EÐ*ÑBÔBÑCÔC€MØ*¨]Ñ:Ðå8¸Ñ=Ô=ÐØ#ð )ð )ˆØ×Ò  4Ñ(Ô(Ð(Ð(å�d�EÑ"Ô"ð 
ÝÝÔ'Ø\ÕPTÐUYÑPZÔPZÐ\Ð\ñ
ô 
ð 	
ð Ð)ˆVˆV¨r€FÝ Ô-¨t°V¨nÑ=Ô=Ñ€AÐå�.¥%¤,Ô"?Ñ@Ô@ð JØ'×6Ò6°s¸DÀ&ÑIÔIˆà�Ð)Ð+>ÀÐNÐNrW   Úexport_artifactrÿ  Ústrict_mode_exportc                 óÀ  — | j         j        }| j         j        }| j        }| j        }i }	|                     ¦   «         D ];\  }
}|st          |
¦  «        n|
}t          g g |d         |d         d¬¦  «        |	|<   Œ<t          |¦  «        dk    r5|st          |¦  «          t          |	|¦  «        |¦  «        }|€J ‚|j        }t          €J ‚t          |||	|¦  «        }||fS )z€
    In-place modify the graph module in export_artifact, remove _export_tracepoint nodes and
    return module_call_graph.
    rM  rh   NrU  r   )rg   r[   r\   rj   rh   râ   rw   rD   r€   r•   r   rÊ  rY  r\  )r  rÿ  r]  r  rO  r[   r&  rj   rh   rN  rC  ÚspecsÚmod_fqnÚresÚmodule_call_graphs                  rX   Ú_get_module_call_graphr  @  s7  € ð  /Ô3Ô6€BØ3BÔ3GÔ3KÐð 	Ô)ð ð )Ô1€Hð >@ÐØ'×-Ò-Ñ/Ô/ð 
ð 
‰
ˆˆUØ*<ÐE•+˜cÑ"Ô"Ð"À#ˆÝ*=ØØØ˜)Ô$Ø˜:Ô&Ø"ð+
ñ +
ô +
Ð˜wÑ'Ð'õ Ð)Ñ*Ô*¨QÒ.Ð.Ø!ð 	)Ý$ RÑ(Ô(Ð(ØTÕ$Ð%;Ð=SÑTÔTÐUWÑXÔXˆØˆˆˆØÔˆå#Ð/Ð/Ð/Ý/ØØØØñ	ô Ðð Ð Ð Ð rW   rz  c                 óæ   — | j         j        }| j         j        }| j        }t	          d„ t          |j        ¦  «        D ¦   «         t          |j        ¦  «        ¦  «        }t          |||||¦  «        }|S )Nc              3   óJ   K  — | ]\  }}|j         t          j        k    ¯|V — Œd S rª   )r…   rB   r  )r¶   r  Úss      rX   rÒ  z)_get_range_constraints.<locals>.<genexpr>v  sB   è è € ð 	
ð 	
á��1ØŒv�Ô-Ò-Ð-ð à-Ð-Ð-Ð-ð	
ð 	
rW   )	rg   r[   r\   ri   rÚ   r¹  r«   r€   r   )r  rz  rd  r[   r&  ri   Ú
num_liftedÚrange_constraintss           rX   Ú_get_range_constraintsr  o  s”   € ð  /Ô3Ô6€BØ3BÔ3GÔ3KÐØ /Ô 9€IÝð	
ð 	
å!Ð"8Ô"DÑEÔEð	
ñ 	
ô 	
õ
 	Ð"Ô.Ñ/Ô/ñô €Jõ )ØØ
ØØØñô Ðð ÐrW   c                 ód   — | j         €J ‚d„ | j         j                             ¦   «         D ¦   «         S )Nc                 ó8   — i | ]\  }}t          |¦  «        ¯||“ŒS rV   )r6   rÔ  s      rX   rÕ   z+_get_inline_constraints.<locals>.<dictcomp>‰  s<   € ð ð ð áˆAˆqÝ  Ñ#Ô#ðØ	ˆ1ðð ð rW   )rš   Úvar_to_rangerâ   )ri   s    rX   Ú_get_inline_constraintsr  ‡  sD   € ØÔÐ*Ð*Ð*ðð àÔ'Ô4×:Ò:Ñ<Ô<ðñ ô ð rW   Úobjc              #   óˆ   K  — | j         }|                     | | j        ¦  «        | _         	 dV — || _         dS # || _         w xY w)znHelper method to make it easier to cleanly torch.export() a method on a
    module that is not `forward`.
    N)r³  Ú__get__Ú	__class__)r  Ú
new_methodÚoriginal_methods      rX   Úpatch_forwardr  �  sX   è è € ð ”k€Oð ×$Ò$ S¨#¬-Ñ8Ô8€C„Kð&Øˆˆˆð &ˆŒˆˆø�oˆŒÐ%Ð%Ð%Ð%s	   «8 ¸	Ac               #   ó  K  — t           j                             ¦   «         } t           j                             d¦  «         	 d V — t           j                             | ¦  «         d S # t           j                             | ¦  «         w xY wrm   )r^   r�  Ú_jit_texpr_fuser_enabledÚ_jit_set_texpr_fuser_enabled)Úoriginal_states    rX   Ú_temp_disable_texpr_fuserr  ¢  su   è è € å”X×6Ò6Ñ8Ô8€NÝ	„H×)Ò)¨%Ñ0Ô0Ð0ð>ØˆˆˆåŒ×-Ò-¨nÑ=Ô=Ð=Ð=Ð=ø�Œ×-Ò-¨nÑ=Ô=Ð=Ð=øøøs   ÁA& Á&!Bc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú_WrapperModulec                 óV   •— t          ¦   «                              ¦   «          || _        d S rª   )ÚsuperÚ__init__rc  )rÅ   rc  r  s     €rX   r#  z_WrapperModule.__init__­  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒˆˆrW   c                 ó   —  | j         |i |¤ŽS rª   )rc  )rÅ   r†   r‡   s      rX   r³  z_WrapperModule.forward±  s   € ØˆtŒv�tÐ&˜vÐ&Ð&Ð&rW   ©rL   rM   rN   r#  r³  Ú__classcell__)r  s   @rX   r   r   ¬  sG   ø€ € € € € ðð ð ð ð ð'ð 'ð 'ð 'ð 'ð 'ð 'rW   r   c           	      ób  — t          ¦   «         5  ddlm} t          ||¦  «        \  }}t	          | |t
          j        j        f¦  «        r2t          | ||dd¬¦  «         	                    ¦   «         cd d d ¦  «         S t	          | t
          j
        ¦  «        rÁt	          |                      ¦   «         t
          j        j        t
          j        j        f¦  «        rt          |                      ¦   «         | ¦  «        5  t          |                      ¦   «         ||dd¬¦  «         	                    ¦   «         cd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   n?t          t          | ¦  «        ||dd¬¦  «         	                    ¦   «         cd d d ¦  «         S 	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )ÚTopLevelTracedModuleFT)r�  r‚  )r  Útorch.jit._tracer(  rù  r~   r^   r�  ÚScriptModuleÚ_exportÚmoduleÚScriptMethodÚownerrà   rá   r  r   )Útraced_callabler†   r‡   r(  Úexport_argsÚexport_kwargss         rX   Ú"_convert_ts_to_export_experimentalr2  µ  s�  € Ý	"Ñ	$Ô	$ð !ð !Ø9Ð9Ð9Ð9Ð9Ð9å%IÈ$ÐPVÑ%WÔ%WÑ"ˆ�]å�oÐ(<½e¼hÔ>SÐ'TÑUÔUð 	ÝØØØØØ$(ðñ ô ÷ Šf‰hŒhð!ð !ð !ð !ñ !ô !ð !ð !õ ˜­Ô);Ñ<Ô<ð 	ÅØ×!Ò!Ñ#Ô#¥e¤hÔ&;½U¼X¼_Ð%MñB
ô B
ð 	õ ˜×4Ò4Ñ6Ô6¸ÑHÔHð ð ÝØ#×)Ò)Ñ+Ô+ØØ!Ø Ø(,ðñ ô ÷ ’&‘(”(ðð ð ð ñ ô ð ð#!ð !ð !ð !ñ !ô !ð !ð !ð"ð ð ð øøøð ð ð ð ð õ Ý˜Ñ/Ô/ØØØØ$(ðñ ô ÷ Šf‰hŒhðC!ð !ð !ð !ñ !ô !ð !ð !ð"ð#!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð !ð !s=   �A F$Á<A>F$Ã:8EÄ2F$ÅE	ÅF$ÅE	Å6F$Æ$F(Æ+F(r$  rý  Úorig_in_specc
                 ól   — t          j        t          |¬¦  «        }
t          | |||||||||	|
¬¦  «        S )N)r$  )r"  r†   r‡   rd  r]  r$  rý  r3  r_  r‚  Úlower_to_aten_callback)ró  Úpartialr¤  Ú_strict_export_lower_to_aten_ir)r"  r†   r‡   rd  r]  r$  rý  r3  r_  r‚  Úlower_to_atens              rX   Ú_strict_exportr9  Ú  sR   € õ Ô%Õ&8À|ÐTÑTÔT€MÝ*ØØØØ%Ø'EØ!Ø/Ø!Ø0WØ/Ø,ðñ ô ð rW   r5  c           
      ód  ‡— t          | ||||d|d¬¦  «        }t          |||¦  «        \  }}}t          ||¦  «        }|j        j        D ]u}|j        dk    rhd|j        vr_t          ||j        ¦  «        }t          |t          j        j        ¦  «        s+|€
J d¦   «         ‚|                     |d¬¦  «        |j        d<   Œvt          |j        j        t          j        j        j        ¦  «        sJ ‚|j        j        j        j        x}}|€J ‚|€J ‚|j        t(          t*          fvrt-          j        t*          d |g¦  «        }|j        j        j        j        }t!          t3          ||j        |¦  «        ¦  «        |j        _        |                     ¦   «          t9          |t'          | ¦  «        ¦  «         t;          |¦  «        }t=          | ¦  «        }t?          | |¦  «        }tA          | ¦  «        }d„ | !                    ¦   «         D ¦   «         Šˆfd	„|D ¦   «         |_"        |5   |
|tG          |||¦  «        i ||¦  «        }d d d ¦  «         n# 1 swxY w Y   |j$        }|j%        }|j&        }tO          |||¦  «         tQ          tS          |  *                    ¦   «         ¦  «        tW          | ,                    ¦   «         ¦  «        ||¬
¦  «         t[          ||¦  «         t]          | ||¦  «         t_          |||¦  «         ta          ||¦  «         tc          ||||j        d         ¬¦  «        S )NF)r]  r`  r_  ra  r;  r˜   zbCannot find dynamo_fake_mode. This could be due to the exported graph module have no placeholders.Tr¦  c                 ó   — i | ]\  }}||“Œ	S rV   rV   )r¶   ÚtracedÚorigs      rX   rÕ   z3_strict_export_lower_to_aten_ir.<locals>.<dictcomp>T  s   € ÐWÐWÐW©L¨F°D˜4 ÐWÐWÐWrW   c                 ó(   •— h | ]}|‰v ¯‰|         ’ŒS rV   rV   )r¶   rÆ   Úreverse_name_lookups     €rX   r,  z2_strict_export_lower_to_aten_ir.<locals>.<setcomp>U  s4   ø€ ð 2ð 2ð 2àØÐ&Ð&Ð&ð 	˜DÔ!à&Ð&Ð&rW   )rÁ  rÂ  r  r]   rj   ©rg   rh   ri   rj   )2rf  r¨   r®  rˆ   r‰   r    r�   r>  rŠ   r~   r^   rà   rá   r©  Ú_codegenr_   r9   Úpytree_inforh   rI  r–  rq  rk   r<   Ú	orig_argsr:   Ú_in_specr4  rè   r   r   rù   r  râ   r¾  r»   r[   r\   r]   r   rÄ  rT   r  r¨  rñ   r³   rÉ  r  r9  rf   )r"  r†   r‡   rd  r]  r$  rý  r3  r_  r‚  r5  rã   r¦   r§   Údynamo_fake_moderú   r“   rD  rh   Úorig_out_specr¹   Úparams_buffers_to_node_metar#  r±   rþ  Úaten_export_artifactr[   r&  r]   r?  s                                @rX   r7  r7  ö  s÷  ø€ õ )ØØØØØ'EØØ0WØð	ñ 	ô 	€Nõ  	˜^¨T°6Ñ:Ô:ñ	ØØØõ 1Ð1AÀ>ÑRÔRÐð Ô$Ô*ð 
ð 
ˆØŒ7�jÒ Ð  U°$´)Ð%;Ð%;Ý˜>¨4¬;Ñ7Ô7ˆDå˜d¥E¤H¤OÑ4Ô4ð à$Ð0Ð0Øwñ 1Ô0Ð0à#3×#?Ò#?Ø¨ð $@ñ $ô $�”	˜%Ñ øõ �nÔ*Ô3µU´X´^Ô5RÑSÔSÐSÐSÐSð
  .Ô3Ô<ÔHÔQÐQ€Hˆ}ð ÐÐÐØÐ$Ð$Ð$ð „}�T¥5˜MÐ)Ð)Ý”?¥5¨$°°
Ñ;Ô;ˆà#Ô)Ô2Ô>ÔH€Nå$2ÝØØÔ#Øñ	
ô 	
ñ%ô %€NÔÔ!ð ×ÒÑÔÐå˜~­t°C©y¬yÑ9Ô9Ð9å"@ÀÑ"PÔ"PÐõ ,¨CÑ0Ô0€NÝ)BÀ3ÈÑ)WÔ)WÐõ
 9¸Ñ=Ô=ÐØWÐWÐ<N×<TÒ<TÑ<VÔ<VÐWÑWÔWÐð2ð 2ð 2ð 2à*ð2ñ 2ô 2€NÔ.ð
 
ð 
ð 
Ø5Ð5Øå'¨¸	À;ÑOÔOØØØñ 
ô  
Ðð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
Ô	 €BØ1Ô5ÐØ$Ô.€Iå-Ø# RÐ)?ñô ð õ %Ý˜SŸ[š[™]œ]Ñ+Ô+Ý × <Ò <Ñ >Ô >Ñ?Ô?Ø.Øð	ñ ô ð õ  Ð 2Ð4JÑKÔKÐKõ 5ØÐ# Yñô ð õ
 �^Ð%;¸YÑGÔGÐGõ ˜BÐ 6Ñ7Ô7Ð7åØ!ØØ"Ø(Ô-Ð.AÔBð	ñ ô ð s   È%IÉIÉIc                 ó   — | S rª   rV   rx   s    rX   r}  r}  “  r~  rW   c           
      ó6  — t           d„ ¦   «         }d„ }t          j        j        j                             | |ddd¬¦  «        5  t          ¦   «         5   |¦   «         5  t          t          |  	                    d¬¦  «        ¦  «        ¦  «        }	t          t          |  
                    d¬¦  «        ¦  «        ¦  «        }
|	|
z   }  ||¦  «        | |d|¬¦  «        \  }}|j        j        D ]8}|j        dk    r+t          |j        ¦  «        d	k    rd
|j        vr
d |j        d
<   Œ9t!          | t          j        j        ¦  «        r/t'          | d¦  «        r|j                             | j        ¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |rM	  ||¦  «         n@# t*          t,          f$ r,}t/          t0          j        t5          |¦  «        ¦  «        ‚d }~ww xY wt7          || ||d|||¬¦  «        S )Nc               3   ó¦   K  — t           j        j        } 	 dt           j        _        d V — | t           j        _        d S # | t           j        _        w xY wr…  r†  r‰  s    rX   r‹  z<_export_to_aten_ir_make_fx.<locals>._compiling_state_context•  rŒ  r�  c                 óZ  ‡!‡"‡#— ddl m} |pi }t          |                      d¬¦  «        ¦  «        }t          |                      d¬¦  «        ¦  «        }i |¥|¥}t          j        |¦  «        \  }}	t          |¦  «        }t          |¦  «        Š#t          |¦  «        }
t          |¦  «        }t          | |	|d¬¦  «        }g }| 
                    |¦  «         | 
                    |¦  «         t          |||¦  «        \  Š!}t          j        ||f¦  «        \  }}t          j        ‰!¦  «        ˆ!fd„¦   «         }t          ¦   «         5  t          ¦   «         }t!          | dd ¦  «        }|�!t#          |¦  «        }i }t%          ||¦  «        }|5   t'          |dd¬	¦  «        |Ž }d d d ¦  «         n# 1 swxY w Y   |��t)          |¦  «        Š"ˆ"ˆ#fd
„t+          |j        ¦  «        D ¦   «         }t/          |j        j        ¦  «        d         }|                     ¦   «         D ]¡\  }}t7          |||         ¦  «        }t7          ||¦  «        }|j                             |¦  «        5  |j                             dt<          j        j         j!        j"        ||f¬¦  «        }|j#        |_#        d d d ¦  «         n# 1 swxY w Y   Œ¢| $                    ¦   «          d„ }|j         %                    |¦  «         d d d ¦  «         n# 1 swxY w Y   t)          |¦  «        Š"tM          |¦  «        } |t/          |¦  «        t/          |¦  «        ‰"|d …         |t          tO          ‰"d‰#…         |¦  «        ¦  «        t          tO          ‰"‰#‰#|
z   …         |¦  «        ¦  «        i i ||d g g ¬¦  «        } || fS )Nr   )ÚGraphSignatureFrí   T)Ústore_orig_modc                  ó(   •— t           ‰| Ž ¦  «        S rª   )rq  )r†   Úflat_fns    €rX   Ú
wrapped_fnzG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.wrapped_fn»  s   ø€ å˜˜ $˜Ñ(Ô(Ð(rW   r|   )Úrecord_module_stackr$  c                 ó.   •— i | ]\  }}|‰‰|z            “ŒS rV   rV   )r¶   r  ÚbufÚinput_namesÚ	param_lens      €€rX   rÕ   zG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.<dictcomp>Õ  s8   ø€ ð &ð &ð &á˜˜3ð ˜ Y°¡]Ô3ð&ð &ð &rW   r•  r„   )r†   c                 óÎ   — | j         dk    rY| j        t          j        j        j        j        t          j        j        j        j        t          j        j        j        j	        fv rdS dS )Nr„   FT)
r    rŠ   r^   r‹   ÚprofilerÚ_record_function_enterÚdefaultÚ_record_function_enter_newÚ_record_function_exitÚ_RecordFunction)r“   s    rX   Ú
_is_impurezG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>._is_impureí  sY   € Ø”7˜oÒ-Ð-°$´+Ý”IÔ&Ô=ÔEÝ”IÔ&ÔAÔIÝ”IÔ&Ô<ÔLðBð 3ð 3ð
 !˜5Ø�trW   )r  r  Úuser_inputsÚuser_outputsÚinputs_to_parametersÚinputs_to_buffersÚbuffers_to_mutateÚuser_inputs_to_mutaterM  rh   Úbackward_signaturer  Úoutput_tokens)(Ú&torch._functorch._aot_autograd.schemasrM  r¨  rï   rñ   rk   rû  rq  r€   r&   r¸  r'   ró  rô  r   r   r>  r)   r(   r4   r$   r¹  Ú_buffersr–  rˆ   r‰   râ   Ú
_find_noderŽ   r�   r^   r‹   rg   Úcopy_rZ  r�   ÚremoveÚeliminate_dead_coder%   rÿ   )$r"  r†   r‡   ri  rM  rï   rñ   Úparams_and_buffersÚparams_and_buffers_flatÚparams_specÚ
buffer_lenÚ
params_lenÚfunctional_callÚparams_buffers_argsrh   Ú	flat_argsrM  rQ  ÚctxÚnon_strict_rootÚassigned_buffersÚhookr[   Úbuffer_input_namesÚoutput_noderT  rÆ   Úbuf_nodeÚ	name_noder”   r^  Úoutput_namesr\   rP  rU  rV  s$                                    @@@rX   Ú_make_fx_helperz3_export_to_aten_ir_make_fx.<locals>._make_fx_helperž  sõ  øøø€ ØIÐIÐIÐIÐIÐIà�˜2ˆå × 4Ò 4ÀeÐ 4Ñ LÔ LÑMÔMÐÝ˜S×.Ò.ÀÐ.ÑFÔFÑGÔGˆàBÐ 0ÐB°MÐBÐÝ/5Ô/BÐCUÑ/VÔ/VÑ,Ð Ý"'Ð(?Ñ"@Ô"@ÐåÐ(Ñ)Ô)ˆ	Ý˜Ñ'Ô'ˆ
ÝÐ+Ñ,Ô,ˆ
å0Ø�˜j¸ð
ñ 
ô 
ˆð *,ÐØ×"Ò"Ð#:Ñ;Ô;Ð;Ø×"Ò" 4Ñ(Ô(Ð(å4ØÐ0°&ñ
ô 
Ñˆ�õ $Ô0Ð2EÀvÐ1NÑOÔOÑˆ	�7å	Œ˜Ñ	!Ô	!ð	)ð 	)ð 	)ð 	)ñ 
"Ô	!ð	)õ &Ñ'Ô'ð 7	5ð 7	5Ý‘-”-ˆCÝ% c¨>¸4Ñ@Ô@ˆOØÐ*Ý2°?ÑCÔC�ð 46Ð Ý6Ø#Ð%5ñô �ð ð ð ð•WØØ(,Ø!%ðñ ô ð ð	�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ñ*Ý0°Ñ4Ô4�ð&ð &ð &ð &ð &å"+¨OÔ,DÑ"EÔ"Eð&ñ &ô &Ð"õ # 2¤8¤>Ñ2Ô2°2Ô6�à!1×!7Ò!7Ñ!9Ô!9ð 	7ð 	7‘I�C˜Ý)¨"Ð.@ÀÔ.EÑFÔF�HÝ *¨2¨tÑ 4Ô 4�IØœ×2Ò2°;Ñ?Ô?ð 7ð 7Ø#%¤8×#7Ò#7Ø+Ý!œIœNÔ0Ô8Ø"*¨IÐ!6ð $8ñ $ô $˜ð
 )2¬˜œð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7øð —’‘”�ðð ð ð ŒH×(Ò(¨Ñ4Ô4Ð4ðo7	5ð 7	5ð 7	5ñ 7	5ô 7	5ð 7	5ð 7	5ð 7	5ð 7	5ð 7	5ð 7	5øøøð 7	5ð 7	5ð 7	5ð 7	5õt )¨Ñ,Ô,ˆÝ*¨2Ñ.Ô.ˆØˆnÝÐ,Ñ-Ô-Ý˜Ñ'Ô'Ø# J K KÔ0Ø%Ý!%¥c¨+°a¸	°kÔ*BÐDTÑ&UÔ&UÑ!VÔ!VÝ"Ý�K 	¨I¸
Ñ,BÐ BÔCÀ]ÑSÔSñô ð !Ø"$ØØØ#ØØð
ñ 
ô 
ˆð" �3ˆwˆs]   ÅAK=ÆF-Æ!K=Æ-F1	Æ1K=Æ4F1	Æ5B.K=É#AJ4Ê(K=Ê4J8Ê8K=Ê;J8Ê<5K=Ë=LÌLTrŽ  Frí   )r’  r‡   r„   r   r˜   r�   rœ  )r   r^   rà   rŸ  r   r¡  rt   r€   r¨  rï   rñ   rˆ   r‰   r    Úusersr�   r~   r_   r`   r=  r  r5   r=   r   r   rx  ra   r(  )r"  r¦   r§   rú   r#  r¢  r  r‹  r~  rV  rp  rq  r[   r  r“   r{  s                   rX   Ú_export_to_aten_ir_make_fxr€  Œ  s0  € õ ð:ð :ñ „^ð:ðnð nð nõf 
ŒŒÔ	!×	7Ò	7ØØØØØð 
8ñ 
ô 
ð "%ð "%õ Ñ Ô ð"%ð "%ð #;Ð":Ñ"<Ô"<ð"%ð "%õ �˜S×1Ò1À5Ð1ÑIÔIÑJÔJÑKÔKˆ	Ý�˜c×/Ò/ÀÐ/ÑGÔGÑHÔHÑIÔIˆ
Ø Ñ+ˆ
à8˜i˜i¨Ñ8Ô8ØØØØð	
ñ 
ô 
ÑˆˆOð ”H”Nð 	(ð 	(ˆDà”˜?Ò*Ð*Ý˜œ
‘O”O qÒ(Ð(Ø ¤Ð*Ð*à#'�”	˜%Ñ øå�c�5œ8Ô/Ñ0Ô0ð 	%µW¸SÀ&Ñ5IÔ5Ið 	%ØŒG�NŠN˜3œ8Ñ$Ô$Ð$ðE"%ð "%ð "%ñ "%ô "%ð "%ð "%ð "%ð "%ð "%ð "%øøøð "%ð "%ð "%ð "%ð "%ð "%ð "%ñ "%ô "%ð "%ð "%ð "%ð "%ð "%ð "%øøøð "%ð "%ð "%ð "%ð "%ð "%ð "%ñ "%ô "%ð "%ð "%ð "%ð "%ð "%ð "%øøøð "%ð "%ð "%ð "%ðJ ð Hð	HØ#Ð# BÑ'Ô'Ð'Ð'øÝ(­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøð	Høøøõ "ØØØ%Ø'ØØØØ/ð	ñ 	ô 	ð 	ss   ÁF*ÁFÁDE<Å0FÅ<F Æ FÆF ÆFÆF*ÆF	ÆF*ÆF	ÆF*Æ*F.Æ1F.Æ8G ÇHÇ'G<Ç<Hc                 óº  — d}t          |¦  «        }| j        j        D ]¼}|j        dk    r:||k    r/|||z
           }t	          |t
          j        ¦  «        s
||j        d<   |dz  }|j        dk    rjt          | |j	        ¦  «        }t	          |t
          j        ¦  «        r;d|j        vsJ d|j	        › d�¦   «         ‚| 
                    |d¬	¦  «        |j        d<   Œ½d S )
Nr   r—   r˜   r>   r;  zFound attribute zà that has already been fakified but not yet lifted as an input. This should be impossible because (1) we should have already fakified AND lifted params/buffers (2) we should have NOT yet fakified OR lifted tensor constants. Tr¦  )r+   rˆ   r‰   r    r~   r^   rb   r�   r;   rŠ   r©  )r[   rt  Únum_params_buffersÚindexri   r“   Úuser_argr˜   s           rX   r  r  H  s  € ð €EÝ  Ñ+Ô+€IØ””ð Rð RˆØŒ7�mÒ#Ð#ØÐ*Ò*Ð*Ø$ UÐ-?Ñ%?Ô@�Ý! (­E¬LÑ9Ô9ð 0Ø'/�D”I˜eÑ$Ø�Q‰JˆEØŒ7�jÒ Ð Ý˜B ¤Ñ,Ô,ˆCÝ˜#�uœ|Ñ,Ô,ð RØ D¤IÐ-Ð-Ð-ðW t¤{ð Wð Wð Wñ .Ô-Ð-ð $-×#8Ò#8¸ÈDÐ#8Ñ#QÔ#Q�”	˜%Ñ øð!Rð RrW   rÆ   c                 óh   ‡— t          t          ˆfd„| j        j        D ¦   «         ¦  «        ¦  «        S )Nc              3   ó2   •K  — | ]}|j         ‰k    ¯|V — Œd S rª   r+  )r¶   r“   rÆ   s     €rX   rÒ  z_find_node.<locals>.<genexpr>e  s/   øè è € ÐJÐJ˜d¸¼	ÀTÒ8IÐ8I�TÐ8IÐ8IÐ8IÐ8IÐJÐJrW   )rÚ   rÛ   rˆ   r‰   )r[   rÆ   s    `rX   ri  ri  d  s2   ø€ Ý•ÐJÐJÐJÐJ b¤h¤nÐJÑJÔJÑJÔJÑKÔKÐKrW   Ú
aot_exportÚdispatch_tracing_modec                 ó®  ‡‡‡	‡‡‡‡‡‡— |
dv sJ ‚dŠi Šˆˆˆfd„}t          | ||‰‰	|¬¦  «        \  Š}}ŠŠŠt          ‰| ¦  «        }ˆ	ˆˆˆˆfd„}‰5  t          ¦   «         5  t          | ||‰¦  «        5 \  }}}}Š|
dk    rt          nt          j        t          |‰	¬¦  «        } ||||||||¬¦  «        }ˆfd	„|j         	                    ¦   «         D ¦   «         |_        ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          | |j        |j        ¦  «         ‰€J ‚t          |‰‰‰¬
¦  «        S )u¨   
    ``dispatch_tracing_mode`` can be either "make_fxâ€� or â€œaot_exportâ€�, corresponding to
    _export_to_aten_ir_make_fx and _export_to_aten_ir, respectively.
    )r4   r‡  Nc                 ó   •‡ — dˆ ˆˆˆfd„	}|S )Nc                 óT  •— |pi } G ˆfd„dt           j        j        ¦  «        } || ¦  «        }d„ ‰D ¦   «         }t          ||‰¦  «        5   ‰||fd|i|¤Ž\  }}t                               d|¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          |j	        ¦  «        |_	        t          j        t          |j
        ¦  «        |_
        t          j        t          |j        ¦  «        |_        t          j        t          |j        ¦  «        |_        t          j        t          |j        ¦  «        |_        |j        j        D ]V}	d|	j        v rK|	j        d         }
d„ t          j        t          |
¦  «                             ¦   «         D ¦   «         |	j        d<   ŒW||fS )Nc                   ó*   •‡ — e Zd Zˆ fd„Zˆfd„Zˆ xZS )ú]_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.Wrapperc                 óV   •— t          ¦   «                              ¦   «          || _        d S rª   )r"  r#  r|   )rÅ   r"  r  s     €rX   r#  zf_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.Wrapper.__init__ƒ  s'   ø€ Ý‘G”G×$Ò$Ñ&Ô&Ð&Ø(+�DÔ%Ð%Ð%rW   c                 ó  •— | j         }t          |t          j        j        ¦  «        r¬t
          |j                             ¦   «         v rt          |||¦  «         t          j        j         	                    ¦   «         5  g |¢|                     ¦   «         ¢R }t          j         
                    |¦  «        j        |Ž }d d d ¦  «         n# 1 swxY w Y   n ||i |¤Ž}t          j        |¦  «        \  }Št          |¦  «        S rª   )r|   r~   r^   r_   r`   r0   Ú_forward_pre_hooksrÜ   Ú	tracebackÚpreserve_node_metaÚInterpreterÚrunrk   rû  rq  )rÅ   r†   r‡   r"  Útree_outÚ	flat_outsrh   s         €rX   r³  ze_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.Wrapper.forward‡  sE  ø€ àÔ+�CÝ! #¥u¤xÔ';Ñ<Ô<ð 8õ >Ø"Ô5×<Ò<Ñ>Ô>ð?ð ?õ >¸cÀ4ÈÑPÔPÐPÝ"œXÔ/×BÒBÑDÔDð Lð LØ#< TÐ#<¨F¯MªM©O¬OÐ#<Ð#<˜DÝ',¤x×';Ò';¸CÑ'@Ô'@Ô'DÀdÐ'K˜HðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð Løð $' 3¨Ð#7°Ð#7Ð#7˜Ý*0Ô*=¸hÑ*GÔ*GÑ'�I˜xÝ  Ñ+Ô+Ð+s   Á<A CÃCÃCr%  )r  rh   s   @€rX   ÚWrapperr�  ‚  sR   øø€ € € € € ð,ð ,ð ,ð ,ð ,ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,rW   r—  c                 ó   — g | ]}d |z   ‘ŒS )z_export_root.rV   )r¶   r  s     rX   r¸   z`_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.<listcomp>   s*   € ð -ð -ð -Ø()� !Ñ#ð-ð -ð -rW   r‡   z%Exported program from AOTAutograd:
%srÀ   c                 ó4   — i | ]\  }}t          |¦  «        |“ŒS rV   )rz   )r¶   rÓ   r˜   s      rX   rÕ   z`_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.<dictcomp>´  s4   € ð 4ð 4ð 4á$˜C õ # 3™œ¨ð4ð 4ð 4rW   )r^   rà   rá   r#   rë  Údebugrk   Útree_maprw   r  r  rb  ra  rc  rˆ   r‰   r�   râ   )r"  r†   r‡   ri  r—  Úwrapped_modÚnew_preserved_call_signaturesr[   r\   r“   rÀ   r‡  rj   rh   r]  s              €€€€rX   Ú_aot_export_non_strictzL_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict  s  ø€ Ø�\˜rˆFð,ð ,ð ,ð ,ð ,ð ,ð ,�%œ(œ/ñ ,ô ,ð ,ð6 "˜' #™,œ,ˆKð-ð -Ø-Kð-ñ -ô -Ð)õ "ØÐ:Ð<Mñô ð Hð Hð %˜* [°$ÐOÐO¸vÐOÈÐOÐO‘��CÝ—	’	ÐBÀBÑGÔGÐGð	Hð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hõ $œ_­[¸#¼.ÑIÔIˆCŒNÝ œ/­+°s´{ÑCÔCˆCŒKÝ$*¤OµKÀÔAVÑ$WÔ$WˆCÔ!Ý'-¤Ý˜SÔ5ñ(ô (ˆCÔ$õ %+¤OµKÀÔAVÑ$WÔ$WˆCÔ!àœœð ð �Ø$¨¬	Ð1Ð1Ø&*¤iÐ0AÔ&B�Oð4ð 4å(.¬Ý'¨ñ)ô )çš%™'œ'ð	4ñ 4ô 4�D”IÐ/Ñ0øð �s�7ˆNs   Á+BÂBÂBrª   rV   )r‡  rž  rj   rh   r]  s   ` €€€rX   Ú_tuplify_outputsz,_non_strict_export.<locals>._tuplify_outputs~  s:   øø€ ð<	ð <	ð <	ð <	ð <	ð <	ð <	ð <	ð <	ð| &Ð%rW   )r‚  r_  c                 ó.   •— t          ‰| ‰‰‰‰¬¦  «        S )N)ri   r[   rd  Úequalities_inputsÚoriginal_signaturer‚  )r   )r[   r‚  rd  r¡  ri   r¢  s    €€€€€rX   Ú_produce_guards_callbackz4_non_strict_export.<locals>._produce_guards_callbackÑ  s,   ø€ Ý3ØØØ)Ø/Ø1Ø 3ð
ñ 
ô 
ð 	
rW   r4   )r$  r‚  )r¢  r  c                 óV   •— i | ]%\  }}|t          |t          ¦  «        r‰|         n|“Œ&S rV   )r~   r,   )r¶   rC  r  Úmap_fake_to_reals      €rX   rÕ   z&_non_strict_export.<locals>.<dictcomp>ö  sK   ø€ ð .ð .ð .á�C˜ð ­j¸Õ>NÑ.OÔ.OÐXÐ% cÔ*Ð*ÐUXð.ð .ð .rW   r@  )r   r®  r   r   r€  ró  r6  r¤  r]   râ   rÉ  r\   rf   )r"  r†   r‡   rd  r]  r$  rý  r3  r_  r‚  rˆ  rŸ  r¦   r§   rú   r£  Úpatched_modÚnew_fake_argsÚnew_fake_kwargsÚnew_fake_constant_attrsÚ_to_aten_funcrH  r¡  ri   r¥  rj   r¢  rh   s      ``    `            @@@@@@rX   Ú_non_strict_exportr«  h  s÷  øøøøøøøøø€ ð" !Ð$=Ð=Ð=Ð=Ð=Ø#'€Hà?AÐð?&ð ?&ð ?&ð ?&ð ?&ð ?&ð ?&õP 	ØØØØØ/Ø0Wð	ñ 	ô 	ñØØØØØØõ 1°¸CÑ@Ô@Ðð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ð Õ2Ñ4Ô4ð ð Ý# C¨°KÀÑKÔKð 	ñ P
ØØØØ#Øð )¨IÒ5Ð5õ +Ð*åÔ&Ý&Ø!-Ø(;ðñ ô ð ð $1 =ØØØØ#Ø'Ø(@Ø*ð$ñ $ô $Ð ð.ð .ð .ð .à 4Ô >× DÒ DÑ FÔ Fð.ñ .ô .Ð Ô*ð5	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ@ 5ØÐ!Ô%Ð';Ô'Eñô ð ð ÐÐÐåØ!ØØØ+ð	ñ ô ð s[   ÁDÁ!DÁ4A,C,Ã DÃ,C0Ã0DÃ3C0Ã4DÃ7DÄD	ÄDÄ
D	ÄDÄDÄ!D©r�  r]  r�  c                óÎ  — t          | ¦  «        at          | |||¦  «        \  }}}}}|r t          j        t
          t          ¬¦  «        nt          j        t          d¬¦  «        } || ||||d||dd¬¦
  «
        }	|	j        j	        }
t          | ||¦  «        }t          |	j        ¦  «        }||	j        j        j        d<   t          |	t!          | ||d¬¦  «        |¦  «        }t#          |	||||¦  «        \  }}t%          |¦  «         t'          |¦  «         t)          ||
¦  «         t+          || ¦  «         dd	lm} t1          ||j        |
|||||f|	j        j        |g¬
¦	  «	        }|S )N)r5  r4   )rˆ  F)
r"  r†   r‡   rd  r]  r$  rý  r3  r_  r‚  Úinline_constraints©r‚  r   )ÚTrainingIRVerifier©	rå   rˆ   r  Ú
state_dictr  r  r÷  r]   Ú	verifiers)rL  rY  r   ró  r6  r7  r€  r«  rg   r\   r¼  r  ri   r[   r�   r  r2   r  r×  rÙ  rß  r   Útorch._export.verifierr°  rA   rˆ   r]   )r"  r†   r‡   rd  r�  r]  r3  rý  Úexport_funcr  r&  rO  r®  r  r[   r  r°  Úexported_programs                     rX   Ú_export_for_trainingr·  	  sê  € õ  5°SÑ9Ô9Ðõ 	˜s D¨&°.ÑAÔAñØØØØØð ð		
�	ÔÝ+Ý#=ð	
ñ 	
ô 	
ð 	
õ
 ÔÝØ"+ð
ñ 
ô 
ð ð "�kØØØØ%Ø'EØØ/Ø!Ø05Ø!ðñ ô €Oð -Ô1Ô5Ðå.¨s°D¸&ÑAÔAÐÝ0°Ô1JÑKÔKÐð :L€OÔÔÔ Ð!5Ñ6Ý.ØÝ�c˜4 ¸UÐCÑCÔCØñô Ðõ 3ØØØ&ØØñô Ñ€BÐõ ˜BÑÔÐÝ˜ÑÔÐÝ˜bÐ"8Ñ9Ô9Ð9å  CÑ(Ô(Ð(à9Ð9Ð9Ð9Ð9Ð9å&ØØŒhØ.Ø&Ø+Ø+Ø˜f�~Ø!Ô&Ô0Ø%Ð&ð
ñ 
ô 
Ðð ÐrW   )r�  r]  r$  r_  r‚  c                óÈ  — ddl m}	 t          | ¦  «        at	          ¦   «         }
|
                     |rdnd¦  «         |
                     |rdnd¦  «         |
at          dt          ¬¦  «         |r |	¦   «         rt          | |||||¬	¦  «        S t          | |||¦  «        \  }}}}}|rt          nt          } || |||||||||¦
  «
        }|j        j        }|st          | ||¦  «        nd
}t          |j        ¦  «        }||j        j        j        d<   t'          |t)          | |||¬¦  «        |¦  «        }t+          |||||¦  «        \  }}t-          |¦  «         t/          |¦  «         |st1          ||¦  «         t2          j        j                             |d¬¦  «         ddlm} t?          || ¦  «         tA          ||j!        ||||||f|j        j"        |g¬¦	  «	        }|S )a
  
    Traces either an nn.Module's forward function or just a callable with PyTorch
    operations inside and produce a ExportedProgram.

    Args:
        f: the `nn.Module` to trace.

        args: example positional inputs.

        kwargs: optional example keyword inputs.

        dynamic_shapes:
         An optional argument where the type should either be:
         1) a dict from argument names of ``f`` to their dynamic shape specifications,
         2) a tuple that specifies dynamic shape specifications for each input in original order.
         If you are specifying dynamism on keyword args, you will need to pass them in the order that
         is defined in the original function signature.

         The dynamic shape of a tensor argument can be specified as either
         (1) a dict from dynamic dimension indices to :func:`Dim` types, where it is
         not required to include static dimension indices in this dict, but when they are,
         they should be mapped to None; or (2) a tuple / list of :func:`Dim` types or None,
         where the :func:`Dim` types correspond to dynamic dimensions, and static dimensions
         are denoted by None. Arguments that are dicts or tuples / lists of tensors are
         recursively specified by using mappings or sequences of contained specifications.

        preserve_module_call_signature: A list of submodule paths for which the original
            calling conventions are preserved as metadata.

        allow_complex_guards_as_runtime_asserts:
         With the current dynamic shapes language for dims and derived dims, we can run into constraints
         that are not expressible with the language. For example, flattening a matrix and adding to a vector,
         both fully dynamic (i.e. x.reshape([-1]) + y) emits a guard s0 * s1 = s2, which is not expressible.
         By default, we either raise a constraint violation error or specialize to static values.
         If this flag is set to True, we avoid erroring out and instead allow complex constraints to exist as runtime
         assertions in the graph. The sympy interpreter (torch/utils/_sympy/interp.py) will produce the math ops
         required to compute and assert the value of the guard (e.g. sym_size_int, eq, _assert_scalar).
         Additionally, if TORCH_DYNAMO_DO_NOT_EMIT_RUNTIME_ASSERTS=1 is specified, we will allow complex constraints
         while not emitting runtime asserts, returning a cleaner graph with lesser guarantees around dynamic shapes.

    Returns:
        An ExportedProgram containing the traced method.
    r   )Ú export_training_ir_rollout_checkr�  Ú
non_strictr$  Úaot_dispatchzexport.enterrg  r¬  Nr®  r¯  T)Úin_place)ÚVerifierr±  )#Útorch._utils_internalr¹  rL  rY  rT   r.  rå  r/   r·  r   r9  r«  rg   r\   r¼  r  ri   r[   r�   r  r2   r  r×  rÙ  rß  r^   r+  rŸ  Úremove_proxy_from_state_dictr´  r½  r   rA   rˆ   r]   )r"  r†   r‡   rd  r�  r]  r$  r_  r‚  r¹  ri  rÿ  rý  rµ  r  r&  rO  r®  r  r[   r  r½  r¶  s                          rX   r+  r+  d  s˜  € ðt GÐFÐFÐFÐFÐFõ  5°SÑ9Ô9Ðå‰EŒE€EØ	‡I‚I˜&Ð2ˆhˆh lÑ3Ô3Ð3Ø	‡I‚I Ð@ˆnˆn°.ÑAÔAÐAØ€Må˜>µÐ?Ñ?Ô?Ð?ð ð 
Ð8Ð8Ñ:Ô:ð 
Ý#ØØØØØØ+Ið
ñ 
ô 
ð 	
õ 	˜s D¨&°.ÑAÔAñØØØØØð %+ÐB•.�.Õ0B€Kà!�kØØØØØ&ØØØØ/Øñô €Oð 4CÔ3GÔ3KÐð :MÐVÕ˜s D¨&Ñ1Ô1Ð1ÐRVð õ 1°Ô1JÑKÔKÐð :L€OÔÔÔ Ð!5Ñ6Ý.ØÝ�c˜4 Ð=PÐQÑQÔQØñô Ðõ
 3ØØØ&ØØñô Ñ€BÐõ ˜BÑÔÐÝ˜ÑÔÐØð >Ý! "Ð&<Ñ=Ô=Ð=õ 
„MÔ×4Ò4Ð5HÐSWÐ4ÑXÔXÐXà/Ð/Ð/Ð/Ð/Ð/å  CÑ(Ô(Ð(å&ØØŒhØ.Ø&Ø+Ø+Ø˜f�~Ø!Ô&Ô0Ø�*ð
ñ 
ô 
Ðð ÐrW   rª   )NN)r‡  )ºrR   ró  rÝ   ÚloggingrÖ   rê  ÚwarningsÚ
contextlibr   r   Útypingr   r   r   r   r	   r
   r   r   r^   Útorch._dynamoÚtorch.fxÚtorch.utils._pytreerŸ  Ú_pytreerk   Útorch._dispatch.pythonr   Útorch._dynamo.excr   r   Útorch._export.db.loggingr   r   Útorch._export.non_strict_utilsr   r   r   r   r   r   Ú-torch._export.passes.collect_tracepoints_passr   Ú(torch._export.passes.lift_constants_passr   r   r   Útorch._export.utilsr   r   r   r   r    r!   r´  r"   Útorch._export.wrappersr#   Ú4torch._functorch._aot_autograd.input_output_analysisr$   r%   Ú9torch._functorch._aot_autograd.traced_function_transformsr&   Ú$torch._functorch._aot_autograd.utilsr'   r(   Útorch._functorch.aot_autogradr)   r*   Útorch._guardsr+   Ú"torch._library.fake_class_registryr,   Útorch._subclasses.fake_tensorr-   r.   r¾  r/   Útorch.export._unliftr0   Útorch.export.dynamic_shapesr1   r2   Útorch.export.exported_programr3   Ú"torch.fx.experimental.proxy_tensorr4   Ú%torch.fx.experimental.symbolic_shapesr5   r6   r7   r8   Útorch.fx.graphr9   r:   Útorch.fx.graph_moduler;   r<   Útorch.utils._sympy.value_rangesr=   Ú
_safeguardr?   r¶  r@   rA   rB   rC   rD   r  rE   rF   Ú	getLoggerrL   rë  Ú	dataclassrH   rZ   rf   rw  Úcriticalrš  rì  Ú	exceptionÚinfoÚwarningÚprintÚwarnrK   rt   rz   rw   r_   r`   r•   r¨   r³   r»   rè   rà   rá   ra   rù   rb   rc   r  r  r(  r9  rF  rL  r\  rP   rf  r¤  r?  r®  r¼  r  rÄ  rÉ  r×  rÙ  rß  rä  rå  rQ   rY  rõ  rù  r   r  r  r  r  r  r   r2  r9  r7  r€  r  ÚNoderi  r«  r·  r+  rV   rW   rX   ú<module>ré     sá  ðð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià €€€Ø Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð QÐ PÐ PÐ PÐ PÐ Pðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø BÐ BÐ BÐ BÐ BÐ BØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø +Ð +Ð +Ð +Ð +Ð +Ø (Ð (Ð (Ð (Ð (Ð (Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;à 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð VÐ UÐ UÐ UÐ UÐ UÐ UÐ Uð €gÔ˜Ñ!Ô!€ð Ôð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ Ôð'ð  Ôð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ Ôð
ð €Ô˜dÐ#Ñ#Ô#ð=ð =ð =ð =ð =ñ =ô =ñ $Ô#ð=ð  2Ð1Ñ3Ô3Ð àÔØ„MØ„MØÔØ„LØ„KØ„OØ	Ø„Mð
>Ð Ô :ð ð;ð ;ñ „ð;ð(ð (ð (ðð ð ð. ¤Ô!5ð .ð .ð .ð .ð0#-ð #-ð #-ðL:ð :ð :ð	ð 	ð 	ð0ð 0ð 0ðf Ø”X”_ð à”8”?ð ð 
ˆ#ˆsˆ(„^ð ð  ð  ð  ðF$,ØŒÔð$,à	ð$,ð ˜c 5¤<Ð/Ô0ð$,ð �C˜˜uœ|Ð-=¸uÔ?QÐQÔRÐRÔSð	$,ð
 ˜”Ið$,ð $,ð $,ð $,ðN-Ø(ð-à)ð-ð �C˜˜uœ|Ð-=¸uÔ?QÐQÔRÐRÔSð-ð 
ð	-ð -ð -ð -ð6_àŒÔð_ð ð_ð _ð _ð _ðD.ØŒÔð.à)ð.ð 
ð.ð .ð .ð .ðb!Ø”X”_ð!Ø5:´XÔ5Ið!à	ð!ð !ð !ð !ðH˜uœxœð °4¸¸S¸´>ð ð ð ð ð .2ð	$ð $Øð$àð$ð ! Ð&9Ð!9Ô:ð$ð    S¤	Ô*ð	$ð
 
ˆ/Ôð$ð $ð $ð $ð: (,ØMQð	Bð 79Ø&+Ø49ØØ"ØðBð Bð BØðBà
��S�Œ/ðBð �T˜#˜s˜(”^Ô$ðBð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	Bð %*¨#¨s¨(¤OðBð  $ðBð .2ðBð ðBð ðBð ðBð „XÔðBð Bð Bð BðV !ð[ð ˆkØØØ"&Ø %ð[ð [ð [Ø	ŒŒð[ð
 $ð[ð  ð[ð ð[ð ð[ð [ð [ð [ð| Øð à	ŒŒð ð 
ˆ#ˆu�U”\ 5¤8Ô#5Ð5Ô6Ð
6Ô7ð ð  ð  ð  ð0 (,ðð Ø	ŒŒðà
��S�Œ/ðð �T˜#˜s˜(”^Ô$ðð 
ˆ#„Yð	ð ð ð ð> U¤X¤_ð ¸¸S¼ð ð ð ð ð/Ø˜%œ,Ô'ð/à˜S %¤,Ð.Ô/ð/ð *ð/ð �C˜˜uœ|Ð-=¸uÔ?QÐQÔRÐRÔSð	/ð
 
ð/ð /ð /ð /ð,FØŒhŒoðFà)ðFð �C˜˜uœ|Ð-=¸uÔ?QÐQÔRÐRÔSðFð 
ð	Fð Fð Fð Fð(¨%¬(Ô*>ð (À4ð (ð (ð (ð (ðV e¤hÔ&:ð ¸tð ð ð ð ð4ØŒÔðØ#7ðà	ðð ð ð ð04�_ð 4¨¨c°3¨h¬ð 4ð 4ð 4ð 4ð  %)€ˆx˜˜CœÔ!Ð (Ð (Ñ (Ø59Ð ˜( 4¨¨S¨¤>Ô2Ð 9Ð 9Ñ 9ð(ð (ð (ðV0ð 0ð 0ð$Oð Oð Oð< .2ð,!ð ,!Ø#ð,!àð,!ð %*¨#¨s¨(¤Oð,!ð ð	,!ð
    S¤	Ô*ð,!ð ˆ5Œ8Ô  oÔ!6Ð6Ô7ð,!ð ,!ð ,!ð ,!ð^Ø#ðØ48¸¸c¸´Nðð ð ð ð0 ~ð ð ð ð ð ð&�u”x”ð &ð &ð &ñ „ð&ð" ð>ð >ñ „ð>ð'ð 'ð 'ð 'ð '�U”X”_ñ 'ô 'ð 'ð"ð "ð "ð "ðJØ	ŒŒðà
��S�Œ/ðð ��c�ŒNðð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	ð
 %*¨#¨s¨(¤Oðð ðð ˜c 3˜hœðð ðð .2ðð ðð ðð ð ð ð8SØ	ŒŒðSà
��S�Œ/ðSð ��c�ŒNðSð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	Sð
 %*¨#¨s¨(¤OðSð ðSð ˜c 3˜hœðSð ðSð .2ðSð ðSð %ðSð ðSð Sð Sð Sðx !Øˆkðyð yØ	ŒŒðyð
 $ðyð ðyð yð yð yðxRð Rð Rð8L�5”8Ô'ð L¨sð L°u´x´}ð Lð Lð Lð Lð ".ð^ð ^Ø	ŒŒð^à
��S�Œ/ð^ð ��c�ŒNð^ð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	^ð
 %*¨#¨s¨(¤Oð^ð ð^ð ˜c 3˜hœð^ð ð^ð .2ð^ð ð^ð ð^ð ð^ð ^ð ^ð ^ðB Øð (,ØMQð	Vð Ø68ðVð Vð VØ	ŒŒðVà
��S�Œ/ðVð �T˜#˜s˜(”^Ô$ðVð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	Vð ðVð %*¨#¨s¨(¤OðVð ðVð Vð Vñ  Ôñ ÔðVðr Øð (,ØMQð	[ð Ø68ØØ49Ø %ð[ð [ð [Ø	ŒŒð[à
��S�Œ/ð[ð �T˜#˜s˜(”^Ô$ð[ð ˜U 4¨¨S¨¤>°5¸´:¸tÀC¼yÐ#HÔIÔJð	[ð ð[ð %*¨#¨s¨(¤Oð[ð ð[ð .2ð[ð ð[ð ð[ð [ð [ñ  Ôñ Ôð[ð [ð [rW   