§
    ŠŠ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m	Z	 d dl
mZmZmZ d dlmZ d dlmZmZmZ d dlmZ erd dl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,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZKmLZL d dlMmNZNmOZO d dlPmQZQmRZRmSZS d dlTmUZUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z\ d dl]m^Z^m_Z_ d dl`maZa d dlbmcZc d dldmeZemfZfmgZgmhZhmiZi d dljmkZk d d llmmZm d d!lnmoZompZpmqZqmrZr d d"lsmtZtmuZumvZvmwZw d d#lxmyZy d d$lmzZz d d%l{m|Z| d&d'l}m~Z~mZm€Z€m�Z�m‚Z‚ d&d(lƒm„Z„m…Z…  ej†        e‡¦  «        Zˆe‰eŠef         e‹ed)f         z  eŒe         z  Z�eeŽd*<   e j�         G d+„ d,¦  «        ¦   «         Z�e j�         G d-„ d.¦  «        ¦   «         Z‘ e j�        d/¬0¦  «         G d1„ d2¦  «        ¦   «         Z’ e�¦   «         Z“ej”        ej•        ej–        ej—        ej˜        ejˆ        ej™        ešej›        h	e“_œ        ed3„ ¦   «         Z�ed4„ ¦   «         Zžd5„ ZŸd6„ Z d7„ Z¡d8eŠfd9„Z¢d:ej£        j¤        fd;„Z¥džd<efd=„Z¦d>„ Z§d?„ Z¨d@„ Z©dA„ ZªdBej«        j¬        dCej«        j¬        dDe‰eŠeŠf         fdE„Z­d:ej£        j¤        dFe…dGe‰eŠej®        f         dHe‰eŠemf         dIeŒe         f
dJ„Z¯dKe3dLe…dHe‰eŠemf         dDdfdM„Z°d:ej£        j¤        dDdfdN„Z±d/dOœd:ej£        j¤        dDe‘fdP„Z²d:ej£        j¤        dLe…dDdfdQ„Z³dBej«        j¬        dCej£        j¤        dDdfdR„Z´dSej«        j¬        dDe‰eŠeŠf         fdT„Zµ	 dždUezdVezdWe‰eŠe‚f         dXeŒeŠ         dz  dDeŒe�         f
dY„Z¶ G dZ„ d[e‰¦  «        Z·	 	 dŸd\d]d]d/d/d/d^œd_e	d`e‹ed)f         dae‰eŠef         dz  dbe‰eŠef         e‹e         z  eŒe         z  dz  dce‹eŠd)f         dde¸dee¸dfe¸dge¸dhe¸dDej£        j¤        fdi„Z¹d/djœdk„Zº	 dždl„ d]dd/d]dmœdSej«        j¬        dne3doe¸dpe¸dDe‘f
dq„Z»	 dždSej«        j¬        d`e‹ed)f         dae‰eŠef         dz  dDeŒeŠ         fdr„Z¼dSej«        j¬        dDe½eŠ         fds„Z¾dte½ej®                 due‰eŠej®        f         dLe…dHe‰eŠemf         dDdf
dv„Z¿dwej«        j¬        dLe…dHe‰eŠemf         dDdfdx„ZÀdyej£        j¤        dDdfdz„ZÁdyej£        j¤        dDdfd{„ZÂd:ej£        j¤        dFe…dDdfd|„ZÃd}edDe‰eŠef         fd~„ZÄdaÅe½eŠ         dz  eŽd<   daÆe‰eŠeŠf         dz  eŽd€<   d�„ ZÇd‚„ ZÈdSej«        j¬        dDe‰eŠef         fdƒ„ZÉdSej«        j¬        d`e‹eÊd)f         dae‰eŠeÊf         dz  dbe�ejË        jÌ        z  ejË        jÍ        z  dz  dDe‹e‹eÊd)f         e‰eŠeÊf         eze�dz  e	egdf         f         f
d„„ZÎ	 džd…e’dce‹eŠd)f         d†e¸dXeŒeŠ         dz  dDe‹ej£        j¤        eŒe�         f         f
d‡„ZÏdSej«        j¬        d…e’fdˆ„ZÐd‰e\fdŠ„ZÑed‹ej«        j¬        fdŒ„¦   «         ZÒed�„ ¦   «         ZÓdSej«        j¬        d`e‹ed)f         dae‰eŠef         dbe‰eŠef         e‹e         z  eŒe         z  dz  dce‹eŠd)f         dŽezdee¸d�e	dDe’fd�„ZÔdd‘„ fdSej«        j¬        dne3dDe‘fd’„ZÕd“„ ZÖd:ej£        j¤        d8eŠdDej£        j×        fd”„ZØdSej«        j¬        d`e‹ed)f         dae‰eŠef         dbe‰eŠef         e‹e         z  eŒe         z  dz  dce‹eŠd)f         dŽezdee¸d�e	dDe’fd•„ZÙeÇe~	 	 dŸd/d\d]d–œdSej«        j¬        d`e‹ed)f         dae‰eŠef         dz  dbe‰eŠef         e‹e         z  eŒe         z  dz  d—e¸dce‹eŠd)f         dee¸dDefd˜„¦   «         ¦   «         ZÚeÇe~ e^d™¬š¦  «        	 	 dŸd/d\d]d]d›œdSej«        j¬        d`e‹ed)f         dae‰eŠef         dz  dbe‰eŠef         e‹e         z  eŒe         z  dz  d—e¸dce‹eŠd)f         dœe¸dee¸dDefd�„¦   «         ¦   «         ¦   «         ZÛdS ) é    N)ÚCallable)ÚcontextmanagerÚ	ExitStackÚnullcontext)Úchain)ÚAnyÚTYPE_CHECKINGÚ	TypeAlias)Úmock)Úenable_python_dispatcher)Ú	UserErrorÚUserErrorType)Úexportdb_error_messageÚget_class_if_classified_error)Ú_fakify_module_inputsÚ_fakify_script_objectsÚ_gather_constant_attrsÚ_NonStrictTorchFunctionHandlerÚ_override_builtin_opsÚmake_constraintsÚmake_fake_inputsÚ$produce_guards_and_solve_constraints)ÚCollectTracepointsPass)Ú_materialize_and_lift_constantsÚConstantAttrMap)Ú_collect_param_buffer_metadataÚ_compiling_state_contextÚ_fakify_params_buffersÚ)_populate_param_buffer_metadata_to_new_gmÚ_update_gm_meta_if_possibleÚapply_runtime_assertion_passÚplaceholder_naming_passÚplaceholder_prefixes)ÚSpecViolationError)Ú_wrap_submodules)Úcreate_functional_call)Ú_graph_input_namesÚ_graph_output_names)ÚGraphSignature)Úget_subclass_typing_container)Úcreate_tree_flattened_fnÚregister_buffer_assignment_hook)Ú_detect_attribute_assignmentÚ!aot_export_joint_with_descriptors)Údetect_fake_modeÚtracingÚTracingContext)ÚFakeScriptObjectÚmaybe_to_fake_obj)Úis_opaque_type)Údtrace_structured)ÚFakeTensorMode)Úcompile_time_strobelight_metaÚlog_export_usage)Úfind_legit_leaks_from_referrers)Ú!_check_input_constraints_pre_hook)Ú_check_dynamic_shapesÚ_combine_argsÚ_DimHintTypeÚ_IntWrapperÚ_process_dynamic_shapes)Ú
OutputKind)Ú_ConstantAttributeType)Úget_proxy_slotÚmake_fxÚPreDispatchTorchFunctionModeÚtrack_tensor_tree)ÚConstraintViolationErrorÚfree_unbacked_symbolsÚGuardOnDataDependentSymNodeÚShapeEnv)Ú_PyTreeInfo)ÚTreeSpec)ÚValueRangeErroré   )Ú_disable_prexisiting_fake_modeÚExportedProgramÚ	InputKindÚModuleCallEntryÚModuleCallSignature)Ú"_convert_to_export_graph_signatureÚExportGraphSignature.Ú_DynamicShapesSpecc                   óæ   — e Zd ZU dZdZeed<    ej        e	¬¦  «        Z
e	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<   dZeed<   d	Zeed<   d	Zeed<   dZeed<   dS )ÚExportDynamoConfigz:
    Manage Export-specific configurations of Dynamo.
    TÚ	allow_rnn)Údefault_factoryÚreorderable_logging_functionsÚdo_not_emit_runtime_assertsÚspecialize_intÚspecialize_floatFÚassume_static_by_defaultÚautomatic_dynamic_shapesÚ capture_dynamic_output_shape_opsÚcapture_scalar_outputsÚ+prefer_deferred_runtime_asserts_over_guardsÚreplay_side_effectsÚwarnÚside_effect_replay_policyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   ÚboolÚ__annotations__ÚdataclassesÚfieldÚsetrZ   r   r[   r\   r]   r^   r_   r`   ra   rb   rc   re   Ústr© ó    úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/export/_trace.pyrW   rW   z   s  € € € € € € ðð ð €IˆtÐÐÑØ3D°;Ô3DØð4ñ 4ô 4Ð! 3 x¤=ð ð ñ ð )-Ð Ð,Ð,Ñ,Ø€N�DÐÐÑØ!Ð�dÐ!Ð!Ñ!Ø%*Ð˜dÐ*Ð*Ñ*Ø%*Ð˜dÐ*Ð*Ñ*Ø-1Ð$ dÐ1Ð1Ñ1Ø#'Ð˜DÐ'Ð'Ñ'Ø8=Ð/°Ð=Ð=Ñ=Ø %Ð˜Ð%Ð%Ñ%Ø%+Ð˜sÐ+Ð+Ñ+Ð+Ð+rq   rW   c                   ó\   — e Zd ZU ej        j        ed<   eed<   ee	e
f         ed<   eed<   dS )ÚATenExportArtifactÚgmÚsigÚ	constantsÚinferred_out_specN)rf   rg   rh   ÚtorchÚfxÚGraphModulerk   rT   Údictro   rA   rK   rp   rq   rr   rt   rt   ”   sR   € € € € € € àŒÔÐÐÑØ	ÐÐÑØ�CÐ/Ð/Ô0Ð0Ð0Ñ0ØÐÐÑÐÐrq   rt   T)Úfrozenc                   ól   — e Zd ZU eed<   eed<   eed<   eed<   eeeee	j        f         f         ed<   dS )ÚExportArtifactÚatenÚin_specÚout_specÚ	fake_modeÚmodule_call_specsN)
rf   rg   rh   rt   rk   rK   r6   r|   ro   Úpytreerp   rq   rr   r   r   œ   sd   € € € € € € à
ÐÐÑØÐÐÑØÐÐÑØÐÐÑØ˜C  c¨6¬?Ð&:Ô!;Ð;Ô<Ð<Ð<Ñ<Ð<Ð<rq   r   c               #   ó  K  — t           j        j                             d¦  «        } t           j        j                             d¦  «        }t           j        j                             d¦  «        }	 d V — t          j        j        j        | Ž  t          j        j        j        |Ž  t          j        j        j        |Ž  d S # t          j        j        j        | Ž  t          j        j        j        |Ž  t          j        j        j        |Ž  w xY w©NF)ry   ÚbackendsÚmkldnnÚ	set_flagsÚnnpackÚcudnn)Úorig_mkldnn_flagÚorig_nnpack_flagÚorig_cudnn_flags      rr   Ú_ignore_backend_decompsr�   ³   sã   è è € å”~Ô,×6Ò6°uÑ=Ô=ÐÝ”~Ô,×6Ò6°uÑ=Ô=ÐÝ”nÔ*×4Ò4°UÑ;Ô;€Oð9ØˆˆˆåŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ&¨Ð8Ð8Ð8Ð8øõ 	ŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ'Ð)9Ð:Ð:ÝŒÔÔ&¨Ð8Ð8Ð8øøøs   Á0B> Â>A
Dc               #   óö   K  — t           j        j        j        } 	 dt           j        j        _        t           j        j        j        V — | t           j        j        _        d S # | t           j        j        _        w xY wr‡   ©ry   Ú
_functorchÚconfigÚdecompose_custom_triton_ops)Úolds    rr   Ú2_disable_custom_triton_op_functional_decompositionr—   Á   sk   è è € å
Ô
Ô
!Ô
=€CðBà>C�ÔÔÔ;ÝÔÔ%ÔAÐAÐAÐAà>A�ÔÔÔ;Ð;Ð;ø¸c�ÔÔÔ;ÐAÐAÐAÐAs   š.A  Á A8c                  ó0   — t           j        j        j         S ©Nr’   rp   rq   rr   Ú(custom_triton_ops_decomposition_disabledrš   Ì   s   € ÝÔÔ&ÔBÐBÐBrq   c                 ó&   — dt          | ¦  «        z   S )NÚ	L__self__)Ú_strip_root©Úxs    rr   Ú
_fixup_keyr    Ð   s   € Ø� Q™œÑ'Ð'rq   c                 ó²   — t          | t          ¦  «        rA|                      d¦  «        r,| t          d¦  «        d …         }|                     d¦  «        S | S )NÚ_export_rootú.)Ú
isinstancero   Ú
startswithÚlenÚremoveprefix)rŸ   Ústrippeds     rr   r�   r�   Ô   sX   € Ý�!•SÑÔð *˜aŸlšl¨>Ñ:Ô:ð *Ø•S˜Ñ(Ô(Ð*Ð*Ô+ˆØ×$Ò$ SÑ)Ô)Ð)Ø€Hrq   Únamec                 óŒ   — |                       d¦  «        }t          |¦  «        dk     rdS |d                              d¦  «        S )Nr£   rM   TéÿÿÿÿÚlifted_tensor)Úsplitr¦   r¥   )r©   Úsplitted_namess     rr   Ú_is_bogus_const_namer¯   Û   sB   € Ø—Z’Z ‘_”_€NÝ
ˆ>ÑÔ˜QÒÐØˆtà˜"Ô×(Ò(¨Ñ9Ô9Ð9rq   ru   c           
      ó  — | j         j        D ]ô}|j        t          j        j        j        u 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 modify 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Útargetry   ÚopsÚhigher_orderÚ_export_tracepointrµ   r�   Úinserting_beforeÚcreate_noder´   ÚmetaÚreplace_all_uses_withÚ
erase_node)ru   Únoder±   Únew_nodes       rr   Ú_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C6Ã6C:	Ã=C:	Úinputsc                 óp  — g }t          | ¦  «        D ]A\  }}t          |t          j        ¦  «        r"|                     |j        j        d|f¦  «         ŒB|r`|d         \  }}}|dd …         D ]G\  }}}	||ur=t          d|› d|› d|› d|› d|› d|	› d|› d|› d	|j        › d
|› d|	› d	|j        › �¦  «        ‚ŒH|S d S )Nzsymint inputr   rM   zshape env (z) from ú z doesn't match mode (z

shape env from z allocated at:
z
shape env from )	Ú	enumerater¤   ry   ÚSymIntÚappendrÁ   Ú	shape_envÚAssertionErrorÚstack)
rÄ   Ú
shape_envsÚiÚ
flat_inputrÊ   Údesc1Úi1ÚmÚdesc2Úi2s
             rr   Údetect_shape_envrÕ   û   sy  € Ø€Jå" 6Ñ*Ô*ð Nð N‰ˆˆ:Ý�j¥%¤,Ñ/Ô/ð 	NØ×Ò˜zœÔ8¸.È!ÐLÑMÔMÐMøàð Ø)¨!œ}Ñˆ	�5˜"Ø& q r rœNð 	ð 	‰LˆAˆu�bØ Ð!Ð!Ý$ðL )ð Lð L°Eð Lð L¸Bð Lð LÐUVð Lð LÐ_dð Lð LÐgið Lð LØ&+ðLð LØ.0ðLð LØBKÄ/ðLð Là&+ðLð Là.0ðLð LàBCÄ'ðLð Lñô ð ð "ð Ðàˆtrq   c                 óê  ‡‡‡‡— g Šg }| j         j        D ]h}|j        dk    r.‰                     |j                             d¦  «        ¦  «         Œ;|                     |j                             d¦  «        ¦  «         Œit          | dd¦  «        x}r¹g Ši ŠdŠˆˆˆfd„}t          j        ||t          | 
                    ¦   «         ¦  «        z   ¦  «        } ||Ž }t          | j                              d¬¦  «        |¦  «        D ]F\  }}	t          |	¦  «        ‰v r0|j                             d¦  «        ‰‰t          |	¦  «                 <   ŒGt          ‰|z   ¦  «        }
t          ‰|z   ¦  «        }|
r|r||
j        urt#          d	¦  «        ‚|
}n1|rt%          |d
¬¦  «        }nt%          t'          ¦   «         d
¬¦  «        }dŠˆˆfd„}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ÚvalÚexample_valueÚ_dynamo_bytecode_flattenNr   c                 óØ   •— ‰                      | ¦  «         t          | t          j        ¦  «        r| }nt	          ¦   «         }t          |¦  «        ‰vr‰‰t          |¦  «        <   ‰dz  Š|S ©NrM   )rÉ   r¤   ry   ÚTensorÚobjectÚid)rŸ   ÚretÚ	fake_inpsÚidxÚ	positionss     €€€rr   Úmark_inputsz)_extract_fake_inputs.<locals>.mark_inputs-  sl   ø€ ð ×Ò˜QÑÔÐÝ˜!�Uœ\Ñ*Ô*ð Ø��å‘h”h�Ý�#‰wŒw˜iÐ'Ð'Ø%(�	�"˜S™'œ'Ñ"Ø�1‰HˆCØˆJrq   ©Úopz7Detected shape env does not match fake mode's shape envT)rÊ   Úexportc                 óh   •— t          | t          t          j        f¦  «        r‰‰         n| }‰dz  Š|S rÜ   )r¤   Úintry   rÝ   )rŸ   rØ   Úcountrá   s     €€rr   Úlookup_fakez)_extract_fake_inputs.<locals>.lookup_fakeX  s6   ø€ å",¨Qµµe´lÐ0CÑ"DÔ"DÐKˆi˜ÔÐÈ!ˆØ�‰
ˆØˆ
rq   )r¶   r·   ræ   rÉ   r¾   ÚgetÚgetattrr…   Útree_mapÚtupleÚvaluesÚzipÚ
find_nodesrß   r/   rÕ   rÊ   rË   r6   rI   )ru   r´   rµ   Ú	fake_valsrÁ   Údynamo_bytecode_flattenrä   Ú
dummy_argsÚshuffled_argsÚshuffled_argÚdetected_fake_modeÚdetected_shape_envrƒ   rë   Ú	fake_argsÚfake_kwargsrê   rá   râ   rã   s                   @@@@rr   Ú_extract_fake_inputsrü     sb  øøøø€ ð €IØ€IØ””ð =ð =ˆØŒ7�mÒ#Ð#Ø×Ò˜TœYŸ]š]¨5Ñ1Ô1Ñ2Ô2Ð2Ð2à×Ò˜TœYŸ]š]¨?Ñ;Ô;Ñ<Ô<Ð<Ð<å")¨"Ð.HÈ$Ñ"OÔ"OÐOÐð #Nð ˆ	Øˆ	Øˆð	ð 	ð 	ð 	ð 	ð 	ð 	õ ”_ [°$½¸v¿}º}¹¼Ñ9OÔ9OÑ2OÑPÔPˆ
Ø/Ð/°Ð<ˆå"%ØŒH×Ò =ÐÑ1Ô1°=ñ#
ô #
ð 	Nð 	NÑˆD�,õ �,ÑÔ 9Ð,Ð,Ø9=¼¿ºÀuÑ9MÔ9M�	˜)¥B |Ñ$4Ô$4Ô5Ñ6øõ *¨)°iÑ*?Ñ@Ô@ÐÝ)¨)°iÑ*?Ñ@Ô@Ðàð 
FØð 	Ø!Ð);Ô)EÐEÐEÝ$ØMñô ð ð 'ˆ	ˆ	Ø	ð FÝ"Ð-?ÈÐMÑMÔMˆ	ˆ	å"­X©Z¬ZÀÐEÑEÔEˆ	à€Eðð ð ð ð ð õ ” ¨TÑ2Ô2€IÝ”/ +¨vÑ6Ô6€Kà�k 9Ð,Ð,rq   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 r™   )
Úinput_specsr³   rP   Ú	PARAMETERÚBUFFERr¸   Úoutput_specsr@   ÚBUFFER_MUTATIONÚGRADIENT_TO_PARAMETER)Úparam_buffer_tablerv   Úspecs      rr   Ú_replace_param_buffer_namesr  d  s‘   € Ø”ð :ð :ˆØŒ9ÝÔÝÔð
ð 
ð 
ð -¨T¬[Ô9ˆDŒKøØÔ ð :ð :ˆØŒ9ÝÔ&ÝÔ,ð
ð 
ð 
ð -¨T¬[Ô9ˆDŒKøð:ð :rq   c           
      ó8  ‡— t          | ¦  «        t          |¦  «        t          ‰¦  «        z   k    r@t          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 rp   rp   )Ú.0Úkw_namerµ   s     €rr   ú
<listcomp>z/_convert_to_positional_args.<locals>.<listcomp>y  s   ø€ ÐSÐSÐS¨G˜˜wœÐSÐSÐSrq   )r¦   rË   )Úorig_arg_namesr´   rµ   Úreordered_kwargss     ` rr   Ú_convert_to_positional_argsr  s  sÐ   ø€ Ý
ˆ>ÑÔ�c $™iœi­#¨f©+¬+Ñ5Ò5Ð5ÝðJ½3¸~Ñ;NÔ;Nð Jð JÝ˜4‘y”yðJð JÝ47¸±K´KðJð Jð Jñ
ô 
ð 	
ð TÐSÐSÐS°~ÅcÈ$ÁiÄiÀkÀkÔ7RÐSÑSÔSÐðØ	ðà	ðð ð rq   c                 óò  ‡
— d}t          j        dd|¦  «        }|                      ¦   «         D �]G}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}n4t          |	t(          ¦  «        st+          dt-          |	¦  «        › �¦  «        ‚|rCd	„ Š
|||j        d
z   |j        z   fi|¥}ˆ
fd„|                     ¦   «         D ¦   «         |j
        d<   �Œ�ŒId S )Nú	L['self']z[^a-zA-Z0-9]Ú_©r×   ÚoutputTÚnn_module_stackFzexpected ty to be str, got c                 ón   — | dk    rdS |                       d¦  «        r| t          d¦  «        d …         S | S )Nr  Ú z
L['self'].)r¥   r¦   )r±   s    rr   Únormalize_pathz2_normalize_nn_module_stack.<locals>.normalize_path˜  sD   € Ø˜{Ò*Ð*Ø!˜rØ—’ |Ñ4Ô4ð 9Ø#¥C¨Ñ$5Ô$5Ð$7Ð$7Ô8Ð8Ø�Krq   r£   c                 ó8   •— i | ]\  }\  }}| ‰|¦  «        |f“ŒS rp   rp   )r	  Úkeyr±   Útyr  s       €rr   ú
<dictcomp>z._normalize_nn_module_stack.<locals>.<dictcomp>¤  sB   ø€ ð 0ð 0ð 0á'˜™Z˜d Bð ˜.˜.¨Ñ.Ô.°Ð3ð0ð 0ð 0rq   )ÚreÚsubÚmodulesr¤   ry   rz   r{   r¶   r·   ræ   r¾   rì   ÚnextÚiterrð   ÚinspectÚisclassÚ
issubclassÚnnÚModulero   rË   Útyperg   rh   Úitems)Úgm_torch_levelÚroot_clsÚrootÚroot_keyru   rÁ   Úadd_rootr  r±   r  r  s             @rr   Ú_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ˆð 
WÝ¥ _×%;Ò%;Ñ%=Ô%=Ñ >Ô >Ñ?Ô?‘��bõ ”? 2Ñ&Ô&ð W­:°b½%¼(¼/Ñ+JÔ+Jð Wà˜t’|�|¨¨h¨¨Ø#(˜øå% b­#Ñ.Ô.ð WÝ,Ð-UÍ4ÐPRÉ8Ì8Ð-UÐ-UÑVÔVÐVØð ð ð  ð  ð ˜t XÔ%8¸3Ñ%>ÀÔAVÑ%VÐWð#ð &ð#�ð
0ð 0ð 0ð 0à+:×+@Ò+@Ñ+BÔ+Bð0ñ 0ô 0�”	Ð+Ñ,ùñ; 	ð#ð #rq   Úoriginal_moduleÚtraced_moduleÚreturnc                 ó~  — i }i }|                       d¬¦  «        D ]9\  }}|                     t          |¦  «        ¦  «        €||t          |¦  «        <   Œ:|                      d¬¦  «        D ]\  }}||t          |¦  «        <   Œi }|                      d¬¦  «        D ]E\  }}	||v rt	          d|›d�¦  «        ‚t          |	¦  «        |v r|t          |	¦  «                 ||<   ŒF|                     d¬¦  «        D ]E\  }}
||v rt	          d|›d�¦  «        ‚t          |
¦  «        |v r|t          |
¦  «                 ||<   ŒF|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_duplicateNzdynamo_name z% already exists in param_buffer_tablez0 already exists in param_buffer_table for buffer)Únamed_parametersrì   rß   Únamed_buffersrË   )r.  r/  Úparam_lookupÚbuffer_lookupr©   ÚparamÚbufferr  Údynamo_nameÚdynamo_paramÚdynamo_buffers              rr   Ú_get_param_buffer_mappingr=  ª  s¶  € ð $&€LØ$&€MØ&×7Ò7ÈÐ7ÑOÔOð +ð +‰ˆˆeØ×Ò�B˜u™IœIÑ&Ô&Ð.à&*ˆL�˜E™œÑ#øØ'×5Ò5ÀuÐ5ÑMÔMð )ð )‰ˆˆfØ$(ˆ•b˜‘j”jÑ!Ð!à)+ÐØ%2×%CÒ%CØð &Dñ &ô &ð Mð MÑ!ˆ�\ð Ð,Ð,Ð,Ý ØS˜{ÐSÐSÐSñô ð õ ˆlÑÔ˜|Ð+Ð+Ø.:½2¸lÑ;KÔ;KÔ.LÐ˜{Ñ+øà&3×&AÒ&AØð 'Bñ 'ô 'ð Oð OÑ"ˆ�]ð Ð,Ð,Ð,Ý Ø^˜{Ð^Ð^Ð^ñô ð õ ˆmÑÔ Ð-Ð-Ø.;½B¸}Ñ<MÔ<MÔ.NÐ˜{Ñ+øàÐrq   rv   Úfake_params_buffersrw   Úflat_fake_argsc                 óx  — d„ | j         j        D ¦   «         }t          |j        ¦  «        t          |¦  «        k    r4t	          dt          |j        ¦  «        › dt          |¦  «        › �¦  «        ‚d}t          ||j        ¦  «        D �]±\  }}|j        t          j        t          j	        fv rA|j
        €t	          d|j        › �¦  «        ‚||j
                 j        |j        d         _        Œf|j        t          j        k    r?||         }	t          |	t          j        ¦  «        r|	j        |j        d         _        |dz  }Œº|j        t          j        k    r¯|j
        €t	          d¦  «        ‚||j
                 }
t          |
t          j        ¦  «        rp|j        d         j        r|
j        |j        d         _        �Œ7|j        d         j        |
j        k    r*t	          d	|j        d         j        › d
|
j        › �¦  «        ‚�Œ~|j        t          j        t          j        fv r�ŒŸt	          |j        ¦  «        ‚d S )Nc                 ó(   — g | ]}|j         d k    ¯|‘ŒS )r×   rå   ©r	  rÁ   s     rr   r  z0_preserve_requires_grad_pass.<locals>.<listcomp>Ü  s$   € ÐPÐPÐP˜T°t´wÀ-Ò7OÐ7O�DÐ7OÐ7OÐ7Orq   zinput_specs length z$ does not match placeholders length r   ú&spec.target must not be None for kind rØ   rM   z5spec.target must not be None for CONSTANT_TENSOR kindznode requires_grad z' does not match constant requires_grad )r¶   r·   r¦   rþ   rË   rñ   r³   rP   rÿ   r   r¸   Úrequires_gradr¾   Ú
USER_INPUTr¤   ry   rÝ   ÚCONSTANT_TENSORÚis_leafÚ
CUSTOM_OBJÚTOKEN)ru   rv   r>  rw   r?  ÚplaceholdersrÎ   rÁ   r  Úfake_argÚconstants              rr   Ú_preserve_requires_grad_passrM  Õ  s\  € ð QÐP R¤X¤^ÐPÑPÔP€LÝ
ˆ3Œ?ÑÔ�s <Ñ0Ô0Ò0Ð0ÝØo¥# c¤oÑ"6Ô"6ÐoÐoÕ\_Ð`lÑ\mÔ\mÐoÐoñ
ô 
ð 	
ð 	
€AÝ˜,¨¬Ñ8Ô8ð $,ñ $,‰
ˆˆdØŒ9ÝÔÝÔð
ð 
ð 
ð Œ{Ð"Ý$ØH¸T¼YÐHÐHñô ð ð .AØ”ô.äð ŒI�eÔÔ*Ð*ð ŒY�)Ô.Ò.Ð.Ø% aÔ(ˆHÝ˜(¥E¤LÑ1Ô1ð HØ19Ô1G�”	˜%Ô Ô.Ø�‰FˆAˆAØŒY�)Ô3Ò3Ð3ØŒ{Ð"Ý$ØKñô ð ð ! ¤Ô-ˆHÝ˜(¥E¤LÑ1Ô1ð 	à”9˜UÔ#Ô+ð Ø5=Ô5K�D”I˜eÔ$Ô2Ñ2à”y Ô'Ô5¸Ô9OÒOÐOÝ,ðO°$´)¸EÔ2BÔ2Pð Oð OØ6>Ô6LðOð Oñô ð ùð ŒY�9Ô/µ´ÐAÐAÐAÙå  ¤Ñ+Ô+Ð+ðI$,ð $,rq   Úorig_constant_attrsÚgraph_signaturec                 ó`  — i }|                      ¦   «         D ]\  }}|| v r| |         ||<   Œ|j        D ]z}|j        t          j        t          j        fv rY|j        }|€t          d|j        › �¦  «        ‚|                     ||g¦  «        }|d         |_        ||         }	||= |D ]}
|	||
<   ŒŒ{dS )zXRewrite the graph signature and constants table to use the FQN from the original module.NrC  r   )	r'  rþ   r³   rP   rF  rH  r¸   rË   rì   )rN  rO  rw   Úremap_tabler©   Úvaluer  Úorig_targetÚtargetsrL  r¸   s              rr   Ú_remap_constantsrU  	  sý   € ð )+€KØ —’Ñ(Ô(ð ;ð ;‰ˆˆeØÐ'Ð'Ð'Ø 3°EÔ :ˆK˜ÑøàÔ+ð -ð -ˆØŒ9ÝÔ%ÝÔ ð
ð 
ð 
ð œ+ˆKØÐ"Ý$ØH¸T¼YÐHÐHñô ð ð "—o’o k°K°=ÑAÔAˆGØ! !œ*ˆDŒKà  Ô-ˆHØ˜+Ð&Ø!ð -ð -�Ø$,�	˜&Ñ!Ð!øð!-ð -rq   c                 ó@  ‡‡‡	— ddl m} ddlm} ddlmŠ	mŠ  || ¦  «        xŠ€dS ˆˆˆ	fd„‰j        D ¦   «         }| j        j	        D ]U}|j
                             dd¦  «         |j
                             d¦  «        x}� ||d	‰|d
¬¦  «        x}r
||j
        d<   ŒVdS )aë  
    When we run an interpreter-based pass over a GraphModule, execution of data-dependent operators
    will produce example values with new unbacked symbols. To track that the new/old symbols are equivalent,
    we used to rely on the unbacked_renamings mapping. This led to problematic metadata where the unbacked_bindings
    keys mapped new symbols (u2) to paths containing old symbols (u0) in the example values, or worse, backed symbols
    or constants (e.g. if the original unbacked was replaced/specialized). Additionally this created problems with
    de/serialized programs, since we didn't comprehensively serialize ShapeEnv/unbacked renamings/node bindings.

    This pass attempts a simpler way of handling these for export, by throwing away the previously computed bindings, and re-running
    the pattern match used in compute_unbacked_bindings. This ensures we keep the original symbols contained in the example values,
    or delete bindings if they've been replaced/specialized.
    r   )Ú_get_shape_env_from_gm)Ú _free_unbacked_symbols_with_path)Úsymbol_is_typeÚSymTNc                 óV   •— h | ]%} ‰|‰j         ‰j        f¦  «        r|‰j        v¯#|’Œ&S rp   )ÚUNBACKED_INTÚUNBACKED_FLOATÚunbacked_renamings)r	  ÚsymbolrZ  rÊ   rY  s     €€€rr   ú	<setcomp>z-_replace_unbacked_bindings.<locals>.<setcomp>;  sT   ø€ ð ð ð àØˆ>˜& 4Ô#4°dÔ6IÐ"JÑKÔKðð ˜)Ô6Ð6Ð6ð 	ð 7Ð6Ð6rq   Úunbacked_bindingsrØ   rp   T)rÊ   ÚpendingÚsimplify)Útorch._export.utilsrW  Ú%torch.fx.experimental.symbolic_shapesrX  Útorch.utils._sympy.symbolrY  rZ  Úvar_to_ranger¶   r·   r¾   Úpoprì   )
ru   rW  rX  Úbase_unbacked_symbolsrÁ   rØ   ra  rZ  rÊ   rY  s
          @@@rr   Ú_replace_unbacked_bindingsrj  '  s$  øøø€ ð ;Ð:Ð:Ð:Ð:Ð:ØVÐVÐVÐVÐVÐVØ>Ð>Ð>Ð>Ð>Ð>Ð>Ð>à+Ð+¨BÑ/Ô/Ð/ˆ	Ð8Øˆðð ð ð ð ð àÔ,ðñ ô Ðð ””ð ?ð ?ˆØŒ	�ŠÐ)¨4Ñ0Ô0Ð0Ø”9—=’= Ñ'Ô'Ð'ˆCÐ4Ø!AÐ!AØØØ#Ø-Øð"ñ "ô "ð Ðð 5ð .?ˆDŒIÐ)Ñ*øð?ð ?rq   )Ú_prettify_placeholder_namesc        	   	      óv  — t          j        ||f¦  «        }	t          | |¦  «        \  } }t          | ¦  «         t	          |j        ¦  «        t	          |j        ¦  «        z   t	          |j        ¦  «        z   }
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|€t5          d¦  «        ‚|rt7          | ||||||¦  «         t9          | ||||	¦  «         t;          | |||j        ¬	¦  «        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. Recompute unbacked_bindings pass
    3. Populate meta val when missing
    4. Lift constants as placeholders
    5. Replace raw autograd and autocast ops with HOPs
    6. Prettify names for placeholders
    7. Preserve requires_grad value on node meta val
    r   )Úreplace_autocast_with_hop_pass)Úreplace_set_grad_with_hop_passr  r  NÚstack_tracez'export_graph_signature must not be None)rx   )r…   Útree_leavesr!   rj  r¦   Ú
parametersÚbuffersÚinput_tokensÚset_missing_meta_valsrS   Ú_get_non_persistent_buffersr   Ú3torch._export.passes.replace_autocast_with_hop_passrm  Ú3torch._export.passes.replace_set_grad_with_hop_passrn  r  r¤   ry   rz   r{   r¶   r·   ræ   r¾   rh  rË   r"   rM  rt   r‚   )ru   ÚmodÚconstant_attrsrO  Úpre_dispatchrú   rû   r>  rk  r?  Útotal_non_user_inputsÚexport_graph_signaturerw   rm  rn  Ú_modrÁ   s                    rr   Ú_produce_aten_artifactr~  O  sh  € õ6 Ô'¨°KÐ(@ÑAÔA€NÝ6°r¸?ÑKÔKÑ€Bˆõ
 ˜rÑ"Ô"Ð"õ 	ˆOÔ&Ñ'Ô'Ý
ˆoÔ%Ñ
&Ô
&ñ	'å
ˆoÔ*Ñ
+Ô
+ñ	,ð õ
 ˜"˜nÐ.CÑDÔDÐDõ @Ø˜Õ8¸Ñ=Ô=ñô Ðõ 0Ø
Ð" Nñô €Ið ð 
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð &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ð Ð%ÝÐFÑGÔGÐGØ"ð 	
ÝØØ"ØØØØØñ	
ô 	
ð 	
õ !Ø
Ð"Ð$7¸ÀNñô ð õ Ø
ØØØ)Ô2ð	ñ ô ð rq   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 rp   ©r©   rB  s     rr   r`  z*_rename_constants_nodes.<locals>.<setcomp>Ä  s   € Ð7Ð7Ð7 �$”)Ð7Ð7Ð7rq   c                 óx   •— | ‰v rd}| › d|› �x}‰v r|dz  }| › d|› �x}‰v °|} ‰                      | ¦  «         | S )NrM   r  )Úadd)r©   ÚnÚdup_nameÚ
node_namess      €rr   Úrename_constantz0_rename_constants_nodes.<locals>.rename_constantÆ  sp   ø€ Ø�:ÐÐØˆAØ"&˜}˜}¨˜}˜}Ð,�8°Ð;Ð;Ø�Q‘�ð #'˜}˜}¨˜}˜}Ð,�8°Ð;Ð;ð ˆDØ�Š�tÑÔÐØˆrq   N)r¶   r·   r#   rP   r   rF  rþ   r³   Úargr©   r¥   r¦   r  r  r¤   ry   rz   r{   r¸   Ú	recompile)ru   rO  r‡  Úbuffer_prefixÚconst_prefixÚbuffer_to_constantr  Úc_namerx  rÁ   r†  s             @rr   Ú_rename_constants_nodesrŽ  ¼  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øØ�Š‰Œˆˆðð rq   c                 ó|  — t          | |¦  «        }d„ |                     ¦   «         D ¦   «         }t          t          |                      d¬¦  «        |                      d¬¦  «        ¦  «        ¦  «        D ]�\  }}||v rx||         }t          j        j         	                    ||¦  «        }t          j        j         
                    |||¦  «         t          j        j                             ||¦  «         Œ‚|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.
    c                 ó   — i | ]\  }}||“Œ	S rp   rp   ©r	  ÚkÚvs      rr   r  z'_restore_state_dict.<locals>.<dictcomp>ö  s   € Ð!NÐ!NÐ!N©4¨1¨a ! QÐ!NÐ!NÐ!Nrq   Fr2  Úget_attrN)r=  r'  Úlistr   r4  r5  ry   rz   Úgraph_moduleÚ	_get_attrÚ_assign_attrÚ	_del_attrr¶   r·   ræ   r¸   r‰  )
r.  r/  r  Úparam_buffer_table_reverser©   r  r:  r8  rÁ   Ú	attr_names
             rr   Ú_restore_state_dictrœ  î  sR  € õ 3°?ÀMÑRÔRÐà!NÐ!NÐ3E×3KÒ3KÑ3MÔ3MÐ!NÑ!NÔ!NÐõ ÝØ×,Ò,¸eÐ,ÑDÔDà×)Ò)¸5Ð)ÑAÔAñ	
ô 	
ñô ð Hð H‰ˆˆað Ð-Ð-Ð-Ø4°TÔ:ˆKÝ”HÔ)×3Ò3°MÀ;ÑOÔOˆEÝŒHÔ!×.Ò.¨u°mÀTÑJÔJÐJÝŒHÔ!×+Ò+¨M¸;ÑGÔGÐGøð Ô#Ô)ð <ð <ˆØŒ7�jÒ Ð ØœˆIØÐ.Ð.Ð.Ø0°Ô;�”øà×ÒÑÔÐÐÐrq   rx  c                 óB   — d„ |                       d¬¦  «        D ¦   «         S )Nc                 ó>   — i | ]\  }}|t          |¦  «        j        “ŒS rp   )r&  rf   )r	  r©   rÒ   s      rr   r  z)_get_module_hierarchy.<locals>.<dictcomp>  s4   € ð ð ð Ù#* 4¨ˆ�d�1‰gŒgÔðð ð rq   Fr2  )Únamed_modules)rx  s    rr   Ú_get_module_hierarchyr     s5   € ðð Ø.1×.?Ò.?ÐQVÐ.?Ñ.WÔ.Wðñ ô ð rq   r�   r‚   Úmodule_call_signaturesÚforward_arg_namesc                 ó  ‡— ˆfd„t           D ¦   «         }|d         j        dk    rt          d|d         j        ›�¦  «        ‚t          g g | ||¬¦  «        |d         _        d„ ‰                     ¦   «         D ¦   «         }g |¢|¢S )Nc                 óX   •— g | ]&}t          |‰                     |¦  «        ¬ ¦  «        ‘Œ'S ©)ÚfqnÚ	signature)rQ   rì   )r	  r¦  r¡  s     €rr   r  z+_make_module_call_graph.<locals>.<listcomp>  sE   ø€ ð ð ð àõ 	˜CÐ+A×+EÒ+EÀcÑ+JÔ+JÐKÑKÔKðð ð rq   r   r  z+expected first fqn to be empty string, got ©rÄ   Úoutputsr�   r‚   r¢  c                 óH   — g | ]\  }}|t           v¯t          ||¬ ¦  «        ‘Œ S r¥  )Ú_EXPORT_MODULE_HIERARCHYrQ   )r	  r¦  r§  s      rr   r  z+_make_module_call_graph.<locals>.<listcomp>+  s?   € ð ð ð áˆC�ØÕ.Ð.Ð.õ 	˜C¨9Ð5Ñ5Ô5à.Ð.Ð.rq   )r«  r¦  rË   rR   r§  r'  )r�   r‚   r¡  r¢  ÚoriginalÚ
additionals     `   rr   Ú_make_module_call_graphr®    sÉ   ø€ ðð ð ð å+ðñ ô €Hð �„{„˜"ÒÐÝØM¸(À1¼+¼/ÐMÐMñ
ô 
ð 	
õ 0ØØØØØ+ðñ ô €HˆQ„KÔðð à4×:Ò:Ñ<Ô<ðñ ô €Jð
 $ˆXÐ#˜
Ð#Ð#rq   c                   ó   — e Zd ZdS )Ú_ExportModuleSpecTrackerDictN)rf   rg   rh   rp   rq   rr   r°  r°  3  s   € € € € € Ø€Drq   r°  rp   F)Úpreserve_module_call_signatureÚdisable_constraint_solverrb   Úrestore_fqnÚ_log_export_usageÚsame_signatureÚfr´   rµ   Údynamic_shapesr±  r²  rb   r³  r´  rµ  c                ó|  ‡ ‡‡‡— |rt          ddh¬¦  «         t          |t          ¦  «        s*t          t          j        dt          |¦  «        › �¦  «        ‚|pi }t          j        t          t          ||f¦  «        \  }}t          ‰ ||¦  «        }
t          |
‰¦  «         t          |
‰¦  «        Št          j        t          d„ ||f¦  «        \  }}t          j        t           |¬¦  «        }dt"          fˆˆˆ ˆfd„}t$          j        j                             t          j        |¦  «        ¦  «        5  	 t/          ¦   «         }t1          ¦   «         }t          ‰ t$          j        j        ¦  «        st7          ‰ ‰|¦  «        }|5  t9          ¦   «         5  t$          j        j        j        rhd	d
lm }m!}  |¦   «         r |‰ ‰‰¬¦  «        }n6t%          j        j                             d¬¦  «         |‰ ¦  «        ¦  «        } ||i |¤Ž}|j"        d= n:t%          j         #                    ‰ ‰‰dd||||	¬¦	  «	        |i |¤Ž\  }}||j"        d<   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ny# tH          tJ          f$ r,}t          t          j&        tO          |¦  «        ¦  «        ‚d}~wtP          $ r1}t          t          j)        dtO          |¦  «        › �d¬¦  «        ‚d}~ww xY wddd¦  «         n# 1 swxY w Y   t          ‰ t$          j*        j+        ¦  «        r|rtY          ‰ |¦  «         |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 c                 óV   — | j         �| j         j        t          j        k    r| j        n| S r™   )Údynamismr&  r=   ÚSTATICrØ   )Úas    rr   ú<lambda>z%_export_to_torch_ir.<locals>.<lambda>c  s,   € ØŒ:Ð ¤¤µLÔ4GÒ!GÐ!Gð ”%�%àð rq   ©rb   r0  c                  óÀ   •— t          ‰ pN‰pLt          ‰t          j        j        ¦  «        p-‰p+t          j        j        j        pt          j        j        j	        ¦  «        S r™   )
rj   r¤   ry   rz   r{   r“   r”   Ú"fake_tensor_propagate_real_tensorsÚ_exportÚuse_legacy_dynamo_graph_capture)Úconstraintsr·  r¶  r±  s   €€€€rr   rÇ  z<_export_to_torch_ir.<locals>.use_legacy_dynamo_graph_capturen  sk   ø€ ÝØð DØðDå˜!�UœXÔ1Ñ2Ô2ðDð .ðDõ ÔÔ&ÔIð	Dõ
 Œ}Ô#ÔCñ
ô 
ð 	
rq   r   )Ú _dynamo_graph_capture_for_exportÚdynamo_graph_capture_for_export)rÈ  r·  F)rc   rƒ   TÚsymbolic)r·  rÈ  r^   Útracing_moder²  rb   r´  rµ  r„   Nz5Consider annotating your code using torch._check*(). Úconstrain_as_size_example)Ú	case_name)-r8   r¤   rï   r   r   ÚINVALID_INPUTr&  r…   Útree_map_onlyré   r>   r<   r;   r?   rl   ÚreplaceÚDEFAULT_EXPORT_DYNAMO_CONFIGrj   ry   Ú_dynamor”   ÚpatchÚasdictr°  r   rz   r{   r%   r�   rÆ  Úuse_new_tracer_experimentalÚtorch._dynamo.functional_exportrÉ  rÊ  r¾   rç   rF   rL   ÚCONSTRAINT_VIOLATIONro   rH   ÚANTI_PATTERNr$  r%  rœ  )r¶  r´   rµ   r·  r±  r²  rb   r³  r´  rµ  Úcombined_argsÚ
dynamo_cfgrÇ  r„   ÚctxrÉ  rÊ  Údynamo_graph_capturer(  r  ÚerÈ  s   `  ``                @rr   r¹  r¹  7  sé  øøøø€ ð$ ð TÝÐ3Ð<QÐ;RÐSÑSÔSÐSå�d�EÑ"Ô"ð 
ÝÝÔ'Ø\ÕPTÐUYÑPZÔPZÐ\Ð\ñ
ô 
ð 	
ð
 ˆ\�r€Fõ Ô'­­[¸4À¸.ÑIÔI�L€Dˆ&å! ! T¨6Ñ2Ô2€MÝ˜-¨Ñ8Ô8Ð8Ý)¨-¸ÑHÔH€Kõ Ô'Ýð	ð 	ð 
ˆvˆñô �L€Dˆ&õ Ô$Ý$Ø4_ðñ ô €Jð

­Tð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ 
ŒÔ	×	#Ò	#¥KÔ$6°zÑ$BÔ$BÑ	CÔ	Cð <ð <ð;	å,Ñ.Ô.ð õ ‘-”-ˆCÝ˜a¥¤Ô!5Ñ6Ô6ð Ý&ØÐ5Ð7Hñô �ð ð *Qð *QÕ-Ñ/Ô/ð *Qð *QÝ”=Ô'ÔCð )Qðð ð ð ð ð ð ð ð
 7Ð6Ñ8Ô8ð >Ø/OÐ/OØ¨;À~ð0ñ 0ô 0Ð,Ð,õ 05¬}Ô/C×/IÒ/IØ05ð 0Jñ 0ô 0à9Ð9¸!Ñ<Ô<ñ0>ô 0>Ð,ð &:Ð%9¸4Ð%JÀ6Ð%JÐ%J�Nð 'Ô+¨KÐ8Ð8õ ).¬×(<Ò(<ØØ'5Ø$/Ø15Ø%/Ø2KØDoØ*;Ø'5ð )=ñ 
)ô 
)ð ð)ð !ð)ð )Ñ%�N Að @Q�NÔ'Ð(;Ñ<ðU*Qð *Qð *Qñ *Qô *Qð *Qð *Qð *Qð *Qð *Qð *Qøøøð *Qð *Qð *Qð *Qð *Qð *Qð *Qñ *Qô *Qð *Qð *Qð *Qð *Qð *Qð *Qøøøð *Qð *Qð *Qð *QøøõV )­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøÝ*ð 	ð 	ð 	ÝÝÔ*ØPÍÈAÉÌÐPÐPØ5ðñ ô ð øøøøð	øøøðo<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <õ| �!•U”X”_Ñ%Ô%ð /¨+ð /Ý˜A˜~Ñ.Ô.Ð.àÐsŒ   Ä4L Ä6AI;ÆI/ÆB9IÉI/ÉIÉI/ÉIÉ I/É#I;É/I3	É3I;É6I3	É7I;É:L É;K1Ê'J3Ê3K1Ë ,K,Ë,K1Ë1L Ì LÌL)Ú_record_nn_module_stackc                ó´  — ddl m} ddlm} t	          | |||||¬¦  «        }	 ||	j        |	j        ¦  «        \  }
}t          |
t          j	        j
        ¦  «        st          dt          |
¦  «        › �¦  «        ‚ ||
||	j        |	j        t          j        ||f¦  «        t#          |                     ¦   «         ¦  «        |	j        |	j        dd d ¬¦  «        }|
|fS )Nr   )Úaot_stage2_export)Úcreate_graph_signature)rµ   Údecompositionsrß  z,expected gm to be torch.fx.GraphModule, got F)Úuser_args_flatÚparams_and_buffers_flatÚparam_namesÚbuffer_namesÚtrace_jointÚnum_user_fw_outsÚ
loss_index)Ú,torch._functorch._aot_autograd.graph_compilerá  Ú4torch._functorch._aot_autograd.input_output_analysisrâ  r.   Ú
_aot_stateÚ_aot_graph_capturer¤   ry   rz   r{   rË   r&  r�   r‚   r…   rp  r•  rð   Úparams_specÚbuffers_spec)rÌ   rx  r´   rµ   rã  r>  rß  rá  râ  Újoint_with_descriptorsru   Úfw_metadatarO  s                rr   Ú"_aot_export_joint_with_descriptorsró  ¼  s1  € ð OÐNÐNÐNÐNÐNðð ð ð ð ð õ ?ØØØØØ%Ø 7ðñ ô Ðð (Ð'ØÔ)ØÔ1ñô �O€Bˆõ
 �b�%œ(Ô.Ñ/Ô/ð XÝÐVÍDÐQSÉHÌHÐVÐVÑWÔWÐWð -Ð,Ø
ØØÔ&ØÔ'ÝÔ)¨4°¨.Ñ9Ô9Ý $Ð%8×%?Ò%?Ñ%AÔ%AÑ BÔ BØ*Ô6Ø+Ô8ØØØðñ ô €Oð ˆÐÐrq   c                 ó   — | S r™   rp   rž   s    rr   rÂ  rÂ  õ  ó   € ˜€ rq   )Ú	transformrz  Údecomp_tablerk  r•   ry  rk  r•   c                ó,  — |
rt           nt          }t          ¦   «         5 }|                     t          j        j        j                             | |ddd¬¦  «        ¦  «         |                     t          ¦   «         ¦  «         |                     t          ¦   «         ¦  «         |                      |¦   «         ¦  «         |                     t	          j        ¦   «         ¦  «           |t          ¦  «        || ||||d¬¦  «        \  }}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 )NT©Útie_weightsÚstrictÚstack_weights)rµ   rã  r>  rß  c                 óì  — t          | t          j        j        ¦  «        rÔt	          | d¦  «        r|j                             | j        ¦  «         t          | j        j	        ¦  «        d         }t          |j        j	        ¦  «        d         }|j
        dk    s|j
        dk    rt          d|j
        ›d|j
        ›�¦  «        ‚d|j        v r|j        d= |j                             |j        ¦  «         d S d S )Nr¾   r«   r  z8expected both output nodes to have op='output', got old=z, new=Údesc)r¤   ry   rz   r{   Úhasattrr¾   Úupdater•  r¶   r·   ræ   rË   )Úold_gmÚnew_gmÚold_output_nodeÚnew_output_nodes       rr   Ú$_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ØÔ! XÒ-Ð-°Ô1CÀxÒ1OÐ1OÝ$ð BÈÔOað  Bð  BÐkzÔk}ð  Bð  Bñô ð ð ˜Ô-Ð-Ð-Ø#Ô(¨Ð0ØÔ ×'Ò'¨Ô(<Ñ=Ô=Ð=Ð=Ð=ð	>ð 	>rq   )	ru   rx  ry  rO  rz  rú   rû   r>  rk  )r   r—   r   Úenter_contextry   r$  ÚutilsÚ	statelessÚ_reparametrize_moduler�   r   Úno_gradró  rF   rL   r   r   rØ  ro   r~  )rx  rú   rû   r>  ry  Úproduce_guards_callbackrö  rz  r÷  rk  r•   Ú#custom_triton_ops_decomposition_ctxrÌ   ru   rO  r  rÞ  s                    rr   Ú_export_to_aten_irr  í  s&  € ð  'ð	@�ˆå?ð (õ 
‰Œð 
˜Ø×ÒÝŒHŒNÔ$×:Ò:ØØ#Ø ØØ"ð ;ñ ô ñ	
ô 	
ð 	
ð 	×ÒÕ3Ñ5Ô5Ñ6Ô6Ð6Ø×ÒÕ4Ñ6Ô6Ñ7Ô7Ð7Ø×ÒÐ?Ð?ÑAÔAÑBÔBÐBØ×Ò�EœM™OœOÑ,Ô,Ð,àK˜i˜iÕ(JÑKÔKØØØØØ'Ø 3Ø$(ð
ñ 
ô 
ÑˆˆOð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð2>ð >ð >ð$ )Ð(¨¨bÑ1Ô1Ð1ð ð Hð	HØ#Ð# BÑ'Ô'Ð'Ð'øÝ(­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøð	Høøøõ "ØØØ%Ø'Ø!ØØØ/Ø$?ð
ñ 
ô 
ð 
s*   ŸC*DÄDÄDÄ2D> Ä>E;Å'E6Å6E;c                 ó´  ‡— t          j        | j        ¦  «        } |j        |Ž j        }g }|                     ¦   «         D ]n\  Š}|j        ‰         j        t           j        j	        k    r/| 
                    ˆfd„t          |¦  «        D ¦   «         ¦  «         ŒY|                     ‰¦  «         Œo|r'| 
                    |                     ¦   «         ¦  «         |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  rp   )r	  rÎ   r  r©   s      €rr   r  z*_get_forward_arg_names.<locals>.<listcomp>^  s'   ø€ ÐEÐEÐE©D¨A¨q˜T˜-˜- A˜-˜-ÐEÐEÐErq   )r!  r§  ÚforwardÚbind_partialÚ	argumentsr'  rq  r³   Ú_ParameterKindÚVAR_POSITIONALÚextendrÇ   rÉ   Úkeys)rx  r´   rµ   rv   Ú_argsÚnamesrR  r©   s          @rr   Ú_get_forward_arg_namesr  I  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˜ÑÔÐÐàð $Ø�Š�V—[’[‘]”]Ñ#Ô#Ð#à€Lrq   c                 óâ   ‡— t          ¦   «         }|                      d¬¦  «        D ]H\  Š}‰r'|                     ˆfd„|j        D ¦   «         ¦  «         Œ.|                     |j        ¦  «         ŒI|S )zO
    Returns set of non-persistent buffers in a module and its submodules.
    Fr2  c              3   ó&   •K  — | ]}‰› d |› �V — ŒdS )r£   Nrp   )r	  Úbr©   s     €rr   ú	<genexpr>z._get_non_persistent_buffers.<locals>.<genexpr>o  s-   øè è € ÐOÐO¨A˜T˜-˜- A˜-˜-ÐOÐOÐOÐOÐOÐOrq   )rn   rŸ  r   Ú_non_persistent_buffers_set)rx  ÚresultrÒ   r©   s      @rr   ru  ru  h  s„   ø€ õ ‘u”u€FØ×$Ò$°eÐ$Ñ<Ô<ð 9ð 9‰ˆˆaØð 	9Ø�MŠMÐOÐOÐOÐO°Ô1NÐOÑOÔOÑOÔOÐOÐOà�MŠM˜!Ô7Ñ8Ô8Ð8Ð8Ø€Mrq   Úorig_mod_buffersÚtraced_mod_buffersc                 óÈ   — |j         D ]Y}|j        t          j        k    rB|j        €t          d¦  «        ‚||j                 }|| vrt          j        |_        |||j        <   ŒZdS )zt
    Dynamo erroneously marks tensor attributes on modules as buffers.
    Rewrite them to be tensor constants.
    Nz,spec.target must not be None for BUFFER kind)rþ   r³   rP   r   r¸   rË   rF  )r   r!  rO  rw   r  rR  s         rr   Ú _rewrite_dynamo_tensor_constantsr#  u  sx   € ð  Ô+ð 
/ð 
/ˆØŒ9�	Ô(Ò(Ð(ØŒ{Ð"Ý$Ð%SÑTÔTÐTØ& t¤{Ô3ˆEØÐ,Ð,Ð,õ &Ô5�”	Ø).�	˜$œ+Ñ&øð
/ð 
/rq   Úorig_modc                 ó  — |j         D ]w}|j        t          j        k    r`|j        sY|j        €t          d¦  «        ‚|j        |v rt          d|j        ›d�¦  «        ‚|                      |j        ¦  «        ||j        <   ŒxdS )z;
    Moves non-persistent buffers to tensor constants.
    Nz;spec.target must not be None for non-persistent BUFFER kindzspec.target z# should not already be in constants)rþ   r³   rP   r   Ú
persistentr¸   rË   Ú
get_buffer)r$  rO  rw   r  s       rr   Ú0_move_non_persistent_buffers_to_tensor_constantsr(  Œ  s¨   € ð  Ô+ð 
Fð 
FˆØŒ9�	Ô(Ò(Ð(°´Ð(ØŒ{Ð"Ý$ØQñô ð ð Œ{˜iÐ'Ð'Ý$ØU 4¤;ÐUÐUÐUñô ð ð &.×%8Ò%8¸¼Ñ%EÔ%EˆI�d”kÑ"øð
Fð 
Frq   r–  c           
      ó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¤   ro   )r	  rŸ   s     rr   r  z4_verify_nn_module_stack.<locals>.<genexpr>.<genexpr>¾  s,   è è € Ð>Ð>°q¥
¨1­cÑ 2Ô 2Ð>Ð>Ð>Ð>Ð>Ð>rq   N)r¤   ro   rï   r¦   Úallr‘  s      rr   r  z*_verify_nn_module_stack.<locals>.<genexpr>º  s‹   è è € ð ð ñ
 !˜A˜qõ	 # 1¥cÑ*Ô*ð ?Ý& q­%Ñ0Ô0ð?å ™FœF ašKð?õ  Ð>Ð>¸AÐ>Ñ>Ô>Ñ>Ô>ð	ð ð ð ð ð rq   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¤   ry   rz   r{   r¶   r·   ræ   r¾   rì   r$   r0  r'  )r–  rÎ   rx  rÁ   r  s        rr   Ú_verify_nn_module_stackr1  ¡  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ñô ð øñ-	ðð rq   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'
    ro  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¤   ry   rz   r{   r¶   r·   r¾   rì   ræ   ro   r$   )r–  rx  rÁ   ro  s       rr   Ú_verify_stack_tracer3  Ì  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ñô ð øð	ðð rq   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 rp   )rˆ  r©   r³   )r	  r  s     rr   r  z-_verify_placeholder_names.<locals>.<dictcomp>î  s    € ÐIÐIÐI°�D”H”M 4¤9ÐIÐIÐIrq   r×   zPlaceholder node name z does not follow spec for z, name should have prefix: N)rþ   r  r¤   ry   rz   r{   r¶   r·   ræ   r©   r#   r¥   r$   )ru   rv   Úname_to_kindrx  rÁ   Ú	node_kindÚprefixs          rr   Ú_verify_placeholder_namesr9  æ  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ñô ð øð		ðð rq   Úepc                 óô  — d}t          ¦   «         }| j                             ¦   «         D ]Ê}t          |t          j        j        ¦  «        sŒ"|j        j        D ]›}|j	        dk    rŒ|dz  }t          |j        d¦  «        st          d|j        › d�¦  «        ‚t          |j        d¦  «        st          d|j        › d�¦  «        ‚|                     |j        j        › d	|j        j        › �¦  «         ŒœŒË||d
œS )Nr   r²   rM   rg   znode.target z must have __module__ attributerf   z must have __name__ attributer£   )Úop_countÚop_set)rn   r–  r  r¤   ry   rz   r{   r¶   r·   ræ   rÿ  r¸   rË   rƒ  rg   rf   )r:  r<  r=  rÒ   rÁ   s        rr   Ú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ð Ý$ØO 4¤;ÐOÐOÐOñô ð õ ˜4œ;¨
Ñ3Ô3ð Ý$ØM 4¤;ÐMÐMÐMñô ð ð �JŠJ˜$œ+Ô0ÐIÐI°4´;Ô3GÐIÐIÑJÔJÐJÐJð	Kð !¨FÐ3Ð3Ð3rq   Ú_EXPORT_FLAGSr«  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          ¬¦  «         t          |d¦  «        r t          |j        t           j        ¬¦  «         |‚d }~ww xY w	 d ad an	# d ad aw xY w|S )
Nzexport.time)r»  Úmetricsr¼  r£   zexport.error.classified)r»  r&  Úmessager¼  zexport.error.unclassifiedÚpartial_fx_graph)Úfilerp   )Útimer8   r?  r>  Ú	Exceptionr&  rg   rh   r   ÚlogÚerrorr   ro   rÿ  ÚprintrD  ÚsysÚstderrr«  )
r´   rµ   Ústartr:  ÚendrÞ  ÚtÚ
error_typerÎ  Úfns
            €rr   Úwrapperz$_log_export_wrapper.<locals>.wrapper  s«  ø€ ð'	,Ý”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Ý'ð	ñ ô ð õ �qÐ,Ñ-Ô-ð ÝØÔ&Ýœðñ ô ð ð
 ˆGøøøøð5	øøøððD !ˆMØ'+Ð$Ð$øð !ˆMØ'+Ð$Ð+Ð+Ð+Ð+àˆ	s+   ƒAA ÁE Á
D<Á!CD7Ä7D<Ä<E ÅE)Ú	functoolsÚwraps)rQ  rR  s   ` rr   Ú_log_export_wrapperrU    s9   ø€ Ý„_�RÑÔð+ð +ð +ð +ñ Ôð+ðZ €Nrq   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¤   rï   r•  r|   ry   rÝ   )Úexample_inputsÚexample_kwarg_inputss     rr   Ú$_process_jit_trace_inputs_for_exportrY  J  s‡   € Ý�n¥u­dµDÐ&9Ñ:Ô:ð 
+Ø(Ð*ˆˆå	�N¥DÑ	)Ô	)ð +Ý˜~Ñ.Ô.ˆˆõ 	�>¥E¤Lµ$Ð#7Ñ8Ô8ð+à Ð(à(Ð*ˆàÐ#Ø!ÐØÐ/Ð/Ð/rq   c                 óð   — t          |                      d¬¦  «        ¦  «        }t          |                      d¬¦  «        ¦  «        }||z  }t          | ¦  «        }|D ]}|                     |d ¦  «         Œ|S )NFr2  )r|   r4  r5  ru  rh  )rx  r4  r5  Úoriginal_state_dictÚnon_persistent_buffersr’  s         rr   Ú_get_original_state_dictr]  \  sˆ   € õ ˜C×0Ò0À%Ð0ÑHÔHÑIÔIÐÝ˜×*Ò*¸EÐ*ÑBÔBÑCÔC€MØ*¨]Ñ:Ðå8¸Ñ=Ô=ÐØ#ð )ð )ˆØ×Ò  4Ñ(Ô(Ð(Ð(àÐrq   c                 ó  — t          |t          ¦  «        s*t          t          j        dt          |¦  «        › �¦  «        ‚|�|ni }t          j        |¦  «        rt          |¦  «        }t          j        ||f¦  «        \  }}t          |t          j
        j        ¦  «        r|j        }|                     | ||¦  «        }n<d„ }t          |t          j
        j        ¦  «        r|                     | ||¦  «        }n|}|||||fS )aõ  
    Process and validate export inputs for the torch.export API.

    This function validates the input arguments, normalizes kwargs, computes input tree specs,
    and handles special dynamic shapes cases like AdditionalInputs and ShapesCollection.

    Args:
        mod: The PyTorch module to be exported.
        args: Tuple of example positional inputs for the module.
        kwargs: Optional dictionary of example keyword inputs.
        dynamic_shapes: Optional specification for dynamic shapes. Can be:
            - dict mapping argument names to dynamic shape specifications
            - tuple/list specifying dynamic shapes for each input in order
            - torch.export.AdditionalInputs object with verification callback
            - torch.export.ShapesCollection object

    Returns:
        A tuple containing:
        - args: Validated tuple of positional inputs
        - kwargs: Normalized dictionary of keyword inputs (empty dict if None was passed)
        - original_in_spec: TreeSpec representing the flattened input structure
        - dynamic_shapes: Processed dynamic shapes specification
        - verify_additional_inputs: Callback function for additional input verification

    Raises:
        UserError: If args is not a tuple.
    r½  Nc                 ó   — d S r™   rp   ©r:  s    rr   rÂ  z(_process_export_inputs.<locals>.<lambda>¥  s   € ¨d€ rq   )r¤   rï   r   r   rÏ  r&  r…   Úis_namedtuple_instanceÚtree_flattenry   rç   ÚAdditionalInputsÚverifyr·  ÚShapesCollection)rx  r´   rµ   r·  r  Úoriginal_in_specÚverify_additional_inputsÚout_dynamic_shapess           rr   Ú_process_export_inputsri  j  s  € õT �d�EÑ"Ô"ð 
ÝÝÔ'Ø\ÕPTÐUYÑPZÔPZÐ\Ð\ñ
ô 
ð 	
ð Ð)ˆVˆV¨r€FÝÔ$ TÑ*Ô*ð Ý�T‰{Œ{ˆå Ô-¨t°V¨nÑ=Ô=Ñ€AÐõ �.¥%¤,Ô"?Ñ@Ô@ð 0Ø#1Ô#8Ð Ø+×:Ò:¸3ÀÀfÑMÔMÐÐà#2 ?Ð Ý�n¥e¤lÔ&CÑDÔDð 	0Ø!/×!>Ò!>¸sÀDÈ&Ñ!QÔ!QÐÐà!/Ðà�Ð)Ð+=Ð?WÐWÐWrq   Úexport_artifactÚstrict_mode_exportc                 ó  — | j         j        }| j         j        }| j        }| j        }| j        }i }	|                     ¦   «         D ];\  }
}|st          |
¦  «        n|
}t          g g |d         |d         d¬¦  «        |	|<   Œ<t          |¦  «        dk    rB|st          |¦  «          t          |	|¦  «        |¦  «        }|€t          d¦  «        ‚|j        }t          €t          d¦  «        ‚t          |||	|¦  «        }||fS )z€
    In-place modify the graph module in export_artifact, remove _export_tracepoint nodes and
    return module_call_graph.
    r�   r‚   Nr¨  r   z$CollectTracepointsPass returned Nonez)_EXPORT_MODULE_HIERARCHY must not be None)r€   ru   rv   r„   r�   r‚   r'  r�   rR   r¦   rÃ   r   rË   r–  r«  r®  )rj  r±  rk  r¢  ru   r|  r„   r�   r‚   r¡  r¦  ÚspecsÚmod_fqnÚresÚmodule_call_graphs                  rr   Ú_get_module_call_graphrq  ®  sQ  € ð  /Ô3Ô6€BØ3BÔ3GÔ3KÐàÔ)ð ð (Ô/€GØ(Ô1€Hð >@ÐØ'×-Ò-Ñ/Ô/ð 
ð 
‰
ˆˆUØ*<ÐE•+˜cÑ"Ô"Ð"À#ˆÝ*=ØØØ˜)Ô$Ø˜:Ô&Ø"ð+
ñ +
ô +
Ð˜wÑ'Ð'õ Ð)Ñ*Ô*¨QÒ.Ð.Ø!ð 	)Ý$ RÑ(Ô(Ð(ØTÕ$Ð%;Ð=SÑTÔTÐUWÑXÔXˆØˆ;Ý Ð!GÑHÔHÐHØÔˆåÐ'ÝÐHÑIÔIÐIÝ/ØØØØñ	ô Ðð Ð Ð Ð rq   c                 óX  — |j         j        }|j         j        }|j        }t	          d„ t          |j        ¦  «        D ¦   «         t          |j        ¦  «        ¦  «        }t          | ||¦  «        }	i }
|	D ]}||vr|	|         |
|<   Œ|D ]}||         |
|<   Œ|
}	t          |||	||¦  «        }|S )Nc              3   óJ   K  — | ]\  }}|j         t          j        k    ¯|V — Œd S r™   )r³   rP   rE  )r	  rÎ   Úss      rr   r  z)_get_range_constraints.<locals>.<genexpr>ê  sB   è è € ð 	
ð 	
á��1ØŒv�Ô-Ò-Ð-ð à-Ð-Ð-Ð-ð	
ð 	
rq   )
r€   ru   rv   rƒ   r  rÇ   rþ   r¦   r<   r   )rx  rj  r´   rµ   r·  ru   r|  rƒ   Ú
num_liftedrÚ  Úcombined_args_traced_orderrˆ  r  Úrange_constraintss                 rr   Ú_get_range_constraintsrx  ß  s   € ð  /Ô3Ô6€BØ3BÔ3GÔ3KÐØ /Ô 9€IÝð	
ð 	
å!Ð"8Ô"DÑEÔEð	
ñ 	
ô 	
õ
 	Ð"Ô.Ñ/Ô/ñô €Jõ " # t¨VÑ4Ô4€Mð "$ÐØð Að AˆØ�fÐÐØ.;¸CÔ.@Ð& sÑ+øàð 6ð 6ˆØ*0°¬+Ð" 3Ñ'Ð'à.€Må(ØØ
ØØØñô Ðð Ðrq   rƒ   c                 ó~   — | j         €t          d¦  «        ‚d„ | j         j                             ¦   «         D ¦   «         S )Nz$fake_mode.shape_env must not be Nonec                 ó8   — i | ]\  }}t          |¦  «        ¯||“ŒS rp   )rG   r‘  s      rr   r  z+_get_inline_constraints.<locals>.<dictcomp>  s<   € ð ð ð áˆAˆqÝ  Ñ#Ô#ðØ	ˆ1ðð ð rq   )rÊ   rË   rg  r'  )rƒ   s    rr   Ú_get_inline_constraintsr{    sM   € ØÔÐ"ÝÐCÑDÔDÐDðð àÔ'Ô4×:Ò:Ñ<Ô<ðñ ô ð rq   Ú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      rr   Ú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r‡   )ry   Ú_CÚ_jit_texpr_fuser_enabledÚ_jit_set_texpr_fuser_enabled)Úoriginal_states    rr   Ú_temp_disable_texpr_fuserrˆ  '  su   è è € å”X×6Ò6Ñ8Ô8€NÝ	„H×)Ò)¨%Ñ0Ô0Ð0ð>ØˆˆˆåŒ×-Ò-¨nÑ=Ô=Ð=Ð=Ð=ø�Œ×-Ò-¨nÑ=Ô=Ð=Ð=øøøs   ÁA& Á&!BÚorig_in_specÚ_to_aten_funcc                 óè  ‡— t          | ||||d|d¬¦  «        }t          |||¦  «        \  }	}
}t          ||¦  «        }|j        j        D ]¯}|j        dk    r¢d|j        vr™t          ||j        ¦  «        }t          |t          j        j        ¦  «        se|€t          d¦  «        ‚t          t          |¦  «        ¦  «        rt!          ||¦  «        |j        d<   Œ�|                     |d¬¦  «        |j        d<   Œ°d}t          |j        j        t          j        j        j        ¦  «        r‘|j        j        j        j        x}}|j        j        j        j        }|€t          d	¦  «        ‚|j        t0          t2          fvrt5          j        |g¦  «        }d}t9          ||j        |¦  «        |j        j        _        nst          |j        j        t          j        j        j         ¦  «        r)|j        j        j!        }dx}}dx}|j        j        _"        ntG          d
|j        j        › �¦  «        ‚| $                    ¦   «          tK          |t          | ¦  «        ¦  «         tM          |¦  «        }tO          | ¦  «        }tQ          | |¦  «        }tS          | ¦  «        }d„ | *                    ¦   «         D ¦   «         Šˆfd„|D ¦   «         |_+        tY          |¦  «        }|5  t[          |¦  «        5  t\          j/         0                    |dd¦  «        5   ||tc          ||	|
¦  «        i ||¦  «        }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   |j2        }|j3        }|j4        }tk          |||¦  «         tm          to          |  8                    ¦   «         ¦  «        ts          | :                    ¦   «         ¦  «        ||¬¦  «         tw          ||¦  «         ty          | ||¦  «         t{          |||¦  «         t}          ||¦  «         |€$|j?        }|r| @                    ¦   «         d         }n|}tƒ          |||||j        d         ¬¦  «        S )úZ
    _to_aten_func can either be `_export_to_aten_ir_make_fx` or `_export_to_aten_ir`
    F)r±  r³  rb   r´  r”  rØ   NzbCannot find dynamo_fake_mode. This could be due to the exported graph module have no placeholders.T)Ústatic_shapesúout_spec must not be NonezUnknown codegen type: c                 ó   — i | ]\  }}||“Œ	S rp   rp   )r	  ÚtracedÚorigs      rr   r  z"_strict_export.<locals>.<dictcomp>›  s   € ÐWÐWÐW©L¨F°D˜4 ÐWÐWÐWrq   c                 ó(   •— h | ]}|‰v ¯‰|         ’ŒS rp   rp   )r	  r©   Úreverse_name_lookups     €rr   r`  z!_strict_export.<locals>.<setcomp>œ  s4   ø€ ð 2ð 2ð 2àØÐ&Ð&Ð&ð 	˜DÔ!à&Ð&Ð&rq   Úallow_non_fake_inputs)r   r!  rO  rw   r   r„   ©r€   r�   r‚   rƒ   r„   )Br¹  rü   r   r¶   r·   ræ   r¾   rí   r¸   r¤   ry   r$  r%  rË   r4   r&  r3   Úfrom_tensorÚ_codegenrz   Ú_PyTreeCodeGenÚpytree_infor‚   Ú	orig_argsr•  rï   r…   Útreespec_tuplerJ   Ú_in_specrÓ  Úfunctional_exportÚ_DynamoBytecodeCodeGenr  Ú
wrap_tupleÚRuntimeErrorr‰  r-  r   r   r=  ru  r'  r  r1   r0   r   rÔ  rÞ   r  ru   rv   rw   r   r#  rn   rr  r|   r5  r  r(  rU  rŽ  rx   Úchildrenr   )rx  r´   rµ   r·  r±  r‰  rb   rŠ  r(  rú   rû   Údynamo_fake_moder>  rÁ   ÚattrrŸ  r‚   Úorig_out_specr  Úparams_buffers_to_node_metary  r  r\  ÚtxÚaten_export_artifactru   r|  rw   r“  s                               @rr   Ú_strict_exportr¨  1  s±  ø€ õ )àØØØØ'EØØ4_Øð
ñ 
ô 
€Nõ" 	˜^¨T°6Ñ:Ô:ñ	ØØØõ 1Ð1AÀ>ÑRÔRÐð Ô$Ô*ð ð ˆØŒ7�jÒ Ð  U°$´)Ð%;Ð%;Ý˜>¨4¬;Ñ7Ô7ˆDå˜d¥E¤H¤OÑ4Ô4ð 
Ø#Ð+Ý(Ø|ñô ð õ "¥$ t¡*¤*Ñ-Ô-ð Ý'8Ð9IÈ4Ñ'PÔ'P�D”I˜eÑ$Ð$à'7×'CÒ'CØ¨Dð (Dñ (ô (�D”I˜eÑ$øð
 €Jõ �.Ô&Ô/µ´´Ô1NÑOÔOð UØ#1Ô#7Ô#@Ô#LÔ#UÐUˆ�=Ø'Ô-Ô6ÔBÔLˆð ÐÝ Ð!<Ñ=Ô=Ð=ØŒ=¥¥u Ð-Ð-åÔ,¨h¨ZÑ8Ô8ˆHØˆJÝ4?ØØÔ#Øñ5
ô 5
ˆÔÔ%Ô1Ð1õ
 
ØÔÔ%ÝŒÔ'Ô>ñ
ô 
ð 
Uð (Ô-Ô6ÔEˆØ#'Ð'ˆ�=Ø@DÐDˆ
�^Ô)Ô2Ô=Ð=åÐS°NÔ4HÔ4QÐSÐSÑTÔTÐTà×ÒÑÔÐå˜~­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Ô.õ 
Ð(Ñ	)Ô	)€Bàð
ð 
å�‰Œð
ð 
õ 	Œ
×ÒÐ*Ð,CÀTÑJÔJð
ð 
ð
  -˜}Øå'¨¸	À;ÑOÔOØØØñ 
ô  
Ðð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
Ô	 €BØ1Ô5ÐØ$Ô.€Iå-Ø# RÐ)?ñô ð õ %Ý˜SŸ[š[™]œ]Ñ+Ô+Ý × <Ò <Ñ >Ô >Ñ?Ô?Ø.Øð	ñ ô ð õ  Ð 2Ð4JÑKÔKÐKõ 5ØÐ# Yñô ð õ
 �^Ð%;¸YÑGÔGÐGõ ˜BÐ 6Ñ7Ô7Ð7àÐØ'Ô9ˆØð 	.Ø×(Ò(Ñ*Ô*¨1Ô-ˆHøà ˆÝØ!ØØØ"Ø(Ô-Ð.AÔBðñ ô ð sZ   ËM)Ë."MÌL;Ì/MÌ;L?Ì?MÍL?ÍMÍM)ÍM	ÍM)ÍM	ÍM)Í)M-Í0M-c                 ó   — | S r™   rp   rž   s    rr   rÂ  rÂ  ç  rõ  rq   c           
      ó„  — d„ }t          ¦   «         5 }|                     t          j        j        j                             | |ddd¬¦  «        ¦  «         |                     t          ¦   «         ¦  «         |                     t          ¦   «         ¦  «           ||¦  «        || |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   |rM	  ||	¦  «         n@# t(          t*          f$ r,}t-          t.          j        t3          |¦  «        ¦  «        ‚d }~ww xY wt5          |	| ||
d|||¬
¦  «        S )Nc                 óÒ  ‡#‡$‡%‡&— |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 ¦  «        }i }d }|�t          |¦  «        }t!          ||¦  «        }d„ Š#t"          ˆ#fd„¦   «         }t"          d	„ ¦   «         }	 |5   ||¦  «        5   |¦   «         5   t%          |d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 }n# |�|                     ¦   «          d }w xY w|��t)          |¦  «        Š%ˆ%ˆ&fd„t+          |j                             ¦   «         ¦  «        D ¦   «         }t1          |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   |j%        €tM          d¦  «        ‚t)          |¦  «        Š%tO          |¦  «        }!tQ          t1          |¦  «        t1          |¦  «        ‰%|d …         |!t          tS          ‰%d‰&…         |¦  «        ¦  «        t          tS          ‰%‰&‰&|
z   …         |¦  «        ¦  «        i i i ||j%        d g g ¬¦  «        }"||"fS )NFr2  T)Ústore_orig_modc                  ó(   •— t           ‰| Ž ¦  «        S r™   )rï   )r´   Úflat_fns    €rr   Ú
wrapped_fnzG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.wrapped_fn  s   ø€ å˜˜ $˜Ñ(Ô(Ð(rq   r¢   c                óÊ  —  || |¦  «        }||v rÒt           j                             ¦   «         r´t          |t           j        ¦  «        ršt           j                             ¦   «         }|D ]y}t          |t          ¦  «        rb|j        }t          | |¦  «        j
        }|                     dt           j        j        j        j        ||fi ¦  «        }	t!          ||	d|¬¦  «         Œz|S )a7  
                The idea here is that we override subclass getattr methods to proxy
                inner tensors and metadata. Because of infinite loop shenanigans, we have
                to manually construct the getattr proxy nodes without relying on torch function
                system.
                r²   N)rL  Útracer)ry   r„  Ú_is_torch_function_mode_enabledr¤   rÝ   Ú	overridesÚ _get_current_function_mode_stackrD   r±  rB   ÚproxyÚcreate_proxyr¹   rç   Úaccess_subclass_inner_tensorÚdefaultrE   )
Úselfr£  Úoriginal_getattrÚattrs_to_proxyÚoutÚtorch_function_mode_stackÚmoder±  rµ  Úinner_proxys
             rr   Úcustom_getattributezP_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.custom_getattribute  sü   € ð 'Ð& t¨TÑ2Ô2�Ø˜>Ð)Ð)Ý”x×?Ò?ÑAÔAð &Ý% c­5¬<Ñ8Ô8ð &õ !&¤× PÒ PÑ RÔ Rð 6ð )Bð &ð & Ý#-¨dÕ4PÑ#QÔ#Qð !&Ø-1¬[ FÝ,:¸4ÀÑ,HÔ,HÔ,N EØ28×2EÒ2EØ(7Ý(-¬	Ô(8Ô(UÔ(]Ø).°¨Ø(*ñ	3&ô 3& Kõ %6Ø(+¨[À4ÐPVð%&ñ %&ô %&ð %&øð �
rq   c              3   óv  •K  — i }| D ]£}t          |¦  «        }|D ]�}||vr‰t          ||         ¦  «        dk    rt          d|› d�¦  «        ‚||         d         }t          t	          |¦  «        ¦  «        t          t	          t
          j        ¦  «        ¦  «        z
  }|j        |f||<   Œ�Œ¤	 |                     ¦   «         D ]&\  }\  }}t          j
        ‰||¬¦  «        }	|	|_        Œ'dV — |                     ¦   «         D ]\  }\  }}
||_        ŒdS # |                     ¦   «         D ]\  }\  }}
||_        Œw xY w)z¾
                Context manager that temporarily monkey patches
                tensor.__getattribute__ so that we can intercept it at
                torch_function layer.
                r   zsubclass_types_to_instances[z] must not be empty)rº  r»  N)r*   r¦   rË   rn   Údirry   rÝ   Ú__getattribute__r'  rS  Úpartialmethod)r´   Útensor_type_to_old_getattributerˆ  Úsubclass_types_to_instancesÚsubclass_typeÚinstancer»  r’  Úold_getattrÚcustomr  rÀ  s              €rr   Ú$override_getattribute_for_subclassesza_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.override_getattribute_for_subclasses:  sÁ  øè è € ð ð 0ð  ð ð �Cõ 6°cÑ:Ô:ð 0ð *Eð ð ˜Ø(Ð0OÐOÐOÝ"Ð#>¸}Ô#MÑNÔNÐRSÒSÐSÝ&4Ø$eÀ=Ð$eÐ$eÐ$eñ'"ô '"ð !"ð (CÀ=Ô'QÐRSÔ'T˜Hå-0µ°X±´Ñ-?Ô-?Å#ÅcÍ%Ì,ÑFWÔFWÑBXÔBXÑ-X˜Nà -Ô >Ø .ðNÐ;¸MÑJøðð9ð 9×>Ò>Ñ@Ô@ð	4ð 	4ñ ˜ñ Ø#Ø&å!*Ô!8Ø/Ø-8Ø+9ð"ñ "ô "˜ð
 .4˜Ô*Ð*Ø�E�E�Eà/N×/TÒ/TÑ/VÔ/Vð 9ð 9Ñ+˜Ñ+˜K¨Ø-8˜Ô*Ð*ð9ð 9øÐ/N×/TÒ/TÑ/VÔ/Vð 9ð 9Ñ+˜Ñ+˜K¨Ø-8˜Ô*Ð*ð9øøøs   Â-?D Ä&D8c               3   óÀ   K  — t          j        ¦   «         } 	 dV — t           j                             | ¦  «         dS # t           j                             | ¦  «         w xY w)zæ
                When pre-dispatch export accidentally change grad state, we restore it back.
                This can happen when we are calling torch._C._set_grad_enabled directly in the
                forward.
                N)ry   Úis_grad_enabledr„  Ú_set_grad_enabled)Ú	old_states    rr   Ú_maybe_restore_grad_statezV_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>._maybe_restore_grad_statei  s\   è è € õ "Ô1Ñ3Ô3�	ð:Ø�E�E�Eå”H×.Ò.¨yÑ9Ô9Ð9Ð9Ð9ø•E”H×.Ò.¨yÑ9Ô9Ð9Ð9øøøs	   —< ¼!A)Úrecord_module_stackrz  c                 ó8   •— i | ]\  }\  }}|®
|‰‰|z            “ŒS r™   rp   )r	  rÎ   r©   ÚbufÚinput_namesÚ	param_lens       €€rr   r  zG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>.<dictcomp>ˆ  s9   ø€ ð &ð &ð &á&˜™;˜D #Ø�ð ˜+ i°!¡mÔ4à&��rq   r«   r²   )r´   c                 ó6  — | j         dk    r�| j        t          j        j        j        j        t          j        j        j        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¸   ry   r¹   ÚprofilerÚ_record_function_enterr¸  Ú_record_function_enter_newÚ_record_function_exitÚ_RecordFunctionr€   Údetachrç   r·  )rÁ   s    rr   Ú
_is_impurezG_export_to_aten_ir_make_fx.<locals>._make_fx_helper.<locals>._is_impureš  sx   € Ø”7˜oÒ-Ð-°$´+õ ”IÔ&Ô=ÔEÝ”IÔ&ÔAÔIÝ”IÔ&Ô<ÔLõ ”I”NÔ)Ô1Ý”IÔ$ÔAÔIðBð 3ð 3ð !˜5Ø�trq   zout_spec.spec is None!r   )rq  rr  Úuser_inputsÚuser_outputsÚinputs_to_parametersÚinputs_to_buffersÚbuffers_to_mutateÚparameters_to_mutateÚuser_inputs_to_mutater�   r‚   Úbackward_signaturers  Úoutput_tokens)*r|   r4  r5  r…   rb  rï   r¦   r&   r  r+   rS  rT  r   r   rí   r-   r,   r   rC   Úremover'   rÇ   Ú_buffersr'  r•  r¶   r·   Ú
_find_noder¼   r½   ry   r¹   r€   Úcopy_r¸  r¾   Úeliminate_dead_coder  rË   r(   r)   rñ   )'rÌ   rx  r´   rµ   r¼  r4  r5  Úparams_and_buffersrå  rï  Ú
buffer_lenÚ
params_lenÚfunctional_callÚparams_buffers_argsr‚   Ú	flat_argsr�   r¯  rÜ  Únon_strict_rootÚassigned_buffersÚhookrË  rÐ  ru   Úbuffer_input_namesÚoutput_noderÓ  r©   Úbuf_nodeÚ	name_noderÂ   rÝ  Úoutput_namesrv   rÀ  r®  rÔ  rÕ  s'                                      @@@@rr   Ú_make_fx_helperz3_export_to_aten_ir_make_fx.<locals>._make_fx_helperé  sm  øøøø€ Ø�˜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å	Œ˜Ñ	!Ô	!ð	)ð 	)ð 	)ð 	)ñ 
"Ô	!ð	)õ &Ñ'Ô'ð e	5ð e	5Ý‘-”-ˆCÝ% c¨>¸4Ñ@Ô@ˆOØ/1ÐØˆDØÐ*Ý2°?ÑCÔC�õ 7Ø#Ð%5ñô �ð"ð "ð "õH ð,9ð ,9ð ,9ð ,9ñ Œ^ð,9õ\ ð
:ð 
:ñ Œ^ð
:ð àð	"ð 	"à8Ð8¸ÑCÔCð	"ð 	"ð .Ð-Ñ/Ô/ð	"ð 	"ð
�Ø"Ø,0Ø%)ðñ ô ð !ð	"�Bð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð Ð#Ø—K’K‘M”M�MØ�Døøð Ð#Ø—K’K‘M”M�MØ�D�K�K�K�KàÑ*Ý0°Ñ4Ô4�ð&ð &ð &ð &ð &å*3°OÔ4L×4RÒ4RÑ4TÔ4TÑ*UÔ*Uð&ñ &ô &Ð"õ
 # 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ðKe	5ð e	5ð e	5ñ e	5ô e	5ð e	5ð e	5ð e	5ð e	5ð e	5ð e	5øøøð e	5ð e	5ð e	5ð e	5ðP Œ=Ð Ý Ð!9Ñ:Ô:Ð:Ý(¨Ñ,Ô,ˆÝ*¨2Ñ.Ô.ˆÝÝÐ,Ñ-Ô-Ý˜Ñ'Ô'à# J K KÔ0Ø%å!%¥c¨+°a¸	°kÔ*BÐDTÑ&UÔ&UÑ!VÔ!Vå"Ý�K 	¨I¸
Ñ,BÐ BÔCÀ]ÑSÔSñô ð !Ø!#Ø"$ØØ”]Ø#ØØð'
ñ 
ô 
ˆð* �3ˆwˆs½   ÅA*NÆ,H9Æ.HÆ:G>ÇG'	ÇG>Ç'G+Ç+G>Ç.G+Ç/G>Ç2HÇ>HÈHÈHÈHÈ	H9ÈH	ÈH9ÈH	ÈH9È NÈ9IÉC NÌAM$ÍNÍ$M(Í(NÍ+M(Í,!NÎNÎ NTrù  F)rè  rµ   r²   r   rØ   r¾   )ru   rx  ry  rO  rz  rú   rû   r>  )r   r  ry   r$  r  r  r	  r�   r   r¶   r·   ræ   r¦   Úusersr¾   r¤   rz   r{   rÿ  r   rF   rL   r   r   rØ  ro   r~  )rx  rú   rû   r>  ry  r  rö  rú  rÌ   ru   rO  rÁ   rÞ  s                rr   Ú_export_to_aten_ir_make_fxrü  à  sK  € ð`ð `ð `õJ 
‰Œð $%˜Ø×ÒÝŒHŒNÔ$×:Ò:ØØ#Ø ØØ"ð ;ñ ô ñ	
ô 	
ð 	
ð 	×ÒÕ3Ñ5Ô5Ñ6Ô6Ð6Ø×ÒÕ4Ñ6Ô6Ñ7Ô7Ð7Ø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Ñ$Ô$Ð$ðI$%ð $%ð $%ñ $%ô $%ð $%ð $%ð $%ð $%ð $%ð $%øøøð $%ð $%ð $%ð $%ðN ð Hð	HØ#Ð# BÑ'Ô'Ð'Ð'øÝ(­/Ð:ð 	Hð 	Hð 	HÝ�MÔ>ÅÀAÁÄÑGÔGÐGøøøøð	Høøøõ "ØØØ%Ø'ØØØØ/ð	ñ 	ô 	ð 	s*   ’D3EÅEÅEÅE+ Å+F(Å<'F#Æ#F(c                 ó²   — d}| j         j        D ]G}|j        dk    r:||k    r/|||z
           }t          |t          j        ¦  «        s
||j        d<   |dz  }ŒHd S )Nr   r×   rØ   rM   )r¶   r·   ræ   r¤   ry   rÝ   r¾   )ru   rñ  Únum_params_buffersÚindexrÁ   Úuser_args         rr   rt  rt    sy   € ð €EØ””ð ð ˆØŒ7�mÒ#Ð#ØÐ*Ò*Ð*Ø$ UÐ-?Ñ%?Ô@�Ý! (­E¬LÑ9Ô9ð 0Ø'/�D”I˜eÑ$Ø�Q‰JˆEøðð rq   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     €rr   r  z_find_node.<locals>.<genexpr>  s/   øè è € ÐJÐJ˜d¸¼	ÀTÒ8IÐ8I�TÐ8IÐ8IÐ8IÐ8IÐJÐJrq   )r  r   r¶   r·   )ru   r©   s    `rr   ré  ré    s2   ø€ Ý•ÐJÐJÐJÐJ b¤h¤nÐJÑJÔJÑJÔJÑKÔKÐKrq   c                 óæ  ‡‡‡‡‡‡‡‡‡— dŠdŠi Šˆˆˆˆfd„}t           j        j        j        rt	          ¦   «         nt          ¦   «         }	|	5  t          | ||‰|¬¦  «        \  Š}
}ŠŠŠt          ‰| ¦  «        }ddd¦  «         n# 1 swxY w Y   ˆˆˆˆfd„}t          ‰¦  «        }t          j
        t          ¦  «        }d|d<   ‰5  t          ¦   «         5  t          |¦  «        5  t           j        j                             |¦  «        5  t!          | |
|‰¦  «        5 \  }}}}Št#          |
|‰¦  «        5  t%          ¦   «         5   ||||||||¬¦  «        }ˆ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   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   t+          | |j        |j        ¦  «         ‰€t/          d	¦  «        ‚‰€t/          d
¦  «        ‚t1          |‰‰‰‰¬¦  «        S )rŒ  Nc                 ó"   •‡ — d dœˆ ˆˆˆˆfd„
}|S )N)rµ   c                óþ  •— |pi } G ˆˆfd„dt           j        j        ¦  «        } ||¦  «        }d„ ‰D ¦   «         }t          ¦   «         }t	          |t           j        j        ¦  «        st          ||‰¦  «        }|5   ‰| ||fd|i|¤Ž\  }	}
d d d ¦  «         n# 1 swxY w Y   t           	                    d|	¦  «         t          j        t          |
j        ¦  «        |
_        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™   )ÚsuperÚ__init__r¢   )r¹  rx  r  s     €rr   r
  zf_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.Wrapper.__init__4  s'   ø€ Ý‘G”G×$Ò$Ñ&Ô&Ð&Ø(+�DÔ%Ð%Ð%rq   c                 ó6  •— | j         }t          j        ||f¦  «        \  }Š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…   rb  r¤   ry   rz   r{   r:   Ú_forward_pre_hooksrð   Ú	tracebackÚpreserve_node_metaÚInterpreterÚrunrï   )	r¹  r´   rµ   rx  r  Útree_outÚ	flat_outsr�   r‚   s	          €€rr   r  ze_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.Wrapper.forward8  s_  ø€ ð Ô+�CÝ!'Ô!4°d¸F°^Ñ!DÔ!D‘J�A�wÝ! #¥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%)rf   rg   rh   r
  r  Ú__classcell__)r  r�   r‚   s   @€€rr   ÚWrapperr  3  sW   øø€ € € € € ð,ð ,ð ,ð ,ð ,ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,rq   r  c                 ó   — g | ]}d |z   ‘ŒS )z_export_root.rp   )r	  rÎ   s     rr   r  z`_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.<listcomp>S  s*   € ð -ð -ð -Ø()� !Ñ#ð-ð -ð -rq   rµ   z%Exported program from AOTAutograd:
%sr  c                 ó4   — i | ]\  }}t          |¦  «        |“ŒS rp   )r    )r	  r  rØ   s      rr   r  z`_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict.<locals>.<dictcomp>m  s4   € ð 4ð 4ð 4á$˜C õ # 3™œ¨ð4ð 4ð 4rq   )ry   r$  r%  r   r¤   rz   r{   r%   rH  Údebugr…   rî   r�   rq  rr  rá  rà  râ  rã  r¶   r·   r¾   r'  )rÌ   rx  r´   rµ   r¼  r  Úwrapped_modÚnew_preserved_call_signaturesrÜ  ru   rv   rÁ   r  Ú
aot_exportr�   r„   r‚   r±  s                €€€€€rr   Ú_aot_export_non_strictzL_non_strict_export.<locals>._tuplify_outputs.<locals>._aot_export_non_strict0  sf  ø€ Ø�\˜rˆFð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,�%œ(œ/ñ ,ô ,ð ,ð: "˜' #™,œ,ˆKð-ð -Ø-Kð-ñ -ô -Ð)õ ‘-”-ˆCÝ˜c¥5¤8Ô#7Ñ8Ô8ð Ý&ØÐ!>Ð@Qñô �ð ð Wð WØ$˜* U¨K¸ÐVÐVÀfÐVÐPUÐVÐV‘��CðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wå�IŠIÐ>ÀÑCÔCÐCå#œ_­[¸#¼.ÑIÔIˆCŒNÝ œ/­+°s´{ÑCÔCˆCŒKÝ$*¤OµKÀÔAVÑ$WÔ$WˆCÔ!Ý'-¤Ý˜SÔ5ñ(ô (ˆCÔ$õ %+¤OµKÀÔAVÑ$WÔ$WˆCÔ!Ý'-¤Ý˜SÔ5ñ(ô (ˆCÔ$ð œœð ð �Ø$¨¬	Ð1Ð1Ø&*¤iÐ0AÔ&B�Oð4ð 4å(.¬Ý'¨ñ)ô )çš%™'œ'ð	4ñ 4ô 4�D”IÐ/Ñ0øð �s�7ˆNs   Á=BÂBÂ!Brp   )r  r  r�   r„   r‚   r±  s   ` €€€€rr   Ú_tuplify_outputsz,_non_strict_export.<locals>._tuplify_outputs/  sR   øø€ Ø?Cð D	ð D	ð D	ð D	ð D	ð D	ð D	ð D	ð D	ð D	ð D	ðL &Ð%rq   rÃ  c                 ó,   •— t          ‰| ‰‰‰¬¦  «        S )N)rƒ   ru   r·  Úequalities_inputsÚoriginal_signature)r   )ru   r·  r  rƒ   r  s    €€€€rr   Ú_produce_guards_callbackz4_non_strict_export.<locals>._produce_guards_callback”  s)   ø€ Ý3ØØØ)Ø/Ø1ð
ñ 
ô 
ð 	
rq   Fr[   )r  rö  c                 óV   •— i | ]%\  }}|t          |t          ¦  «        r‰|         n|“Œ&S rp   )r¤   r2   )r	  r¦  r|  Úmap_fake_to_reals      €rr   r  z&_non_strict_export.<locals>.<dictcomp>Ã  sK   ø€ ð .ð .ð .á�C˜ð ­j¸Õ>NÑ.OÔ.OÐXÐ% cÔ*Ð*ÐUXð.ð .ð .rq   rŽ  zin_spec must not be Noner•  )ry   rÆ  r”   Ú#detect_non_strict_fake_tensor_leaksr   r   r   r   r1   rl   rÕ  rÒ  r   r0   rÓ  rÔ  r   r   r   rw   r'  r(  rv   rË   r   )rx  r´   rµ   r·  r±  r‰  rb   rŠ  r  Ú_fakify_ctxrú   rû   r>  r   r¦  Údynamo_configÚpatched_modÚnew_fake_argsÚnew_fake_kwargsÚnew_fake_constant_attrsr§  r  rƒ   r�   r"  r„   r  r‚   s      ``                @@@@@@@rr   Ú_non_strict_exportr*    s>  øøøøøøøøø€ ð !%€HØ#€Gà?AÐðG&ð G&ð G&ð G&ð G&ð G&ð G&ð G&õ` Œ=ÔÔCð	Õ Ñ"Ô"Ð"å‰]Œ]ð ð
 
ð Eð Eõ ØØØØØ8cð
ñ 
ô 
ñ	
ØØØØØØõ 5°YÀÑDÔDÐð!Eð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð$
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ 
˜	Ñ	"Ô	"€Bõ  Ô&Õ'CÑDÔD€Màð Ð/Ñ0ð
 	ð ð  å&Ñ(Ô(ð ð  õ 	�‰Œð ð  õ 	ŒÔ×"Ò" =Ñ1Ô1ð	 ð  õ # 3¨	°;À	ÑJÔJð	ñOØØØØ'Ø å! )¨[¸)ÑDÔDð	ð 	õ "Ñ#Ô#ð	ð 	ð $1 =ØØØØ#Ø'Ø(@Ø*ð$ñ $ô $Ð ð.ð .ð .ð .à 4Ô >× DÒ DÑ FÔ Fð.ñ .ô .Ð Ô*ð/	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õD 5ØÐ!Ô%Ð';Ô'Eñô ð ð ÐÝÐ8Ñ9Ô9Ð9Ø€ÝÐ7Ñ8Ô8Ð8åØ!ØØØØ+ðñ ô ð sü   Á,BÂBÂBÃHÃH Ã%%G)Ä
G	ÄF;Ä5F$Å=FÆF$ÆFÆF$ÆFÆF$ÆF;Æ$F(Æ(F;Æ+F(Æ,F;Æ/G	Æ;F?Æ?G	ÇF?ÇG	ÇG)ÇGÇG)ÇGÇG)ÇH Ç)G-Ç-H Ç0G-Ç1H Ç4HÈ H	ÈHÈH	ÈHÈHÈH©rû  r±  rb   rû  c                ó¦  — t          | ¦  «        at          | |||¦  «        \  }}}}}t          | ¦  «        }	d}
|s:t	          j        ||f¦  «        \  }}t          j                             |¦  «        d u}
|rt          nt          }|s5t          j        j        j        rddlm} |j                             ¦   «           || ||||||t$          ¬¦  «        }|sš|
s˜|j        j                             ¦   «         D ]y\  }}t-          |t          j        j        j        ¦  «        rPt5          |¦  «        rAd|› d�}t          j        j        j        rt9          |¦  «        ‚t;          j        |d¬¦  «         Œz|j        j        }tA          | ||¦  «        }tC          |j"        ¦  «        }||j        j#        j$        d	<   tK          | ||||¦  «        }tM          ||||¦  «        \  }}tO          |¦  «         tQ          |¦  «         tS          ||¦  «         tU          || ¦  «         dd
l+m,} t[          ||j.        ||	||||f|j        j        |g¬¦	  «	        } ||¦  «         |�sxt          j        j        j        �raddlm} ddl/m0} |j        }tc          |¦  «        }g }te          |¦  «        dk    �r)|D ]æ}tg          |¦  «        |v r¦|tg          |¦  «                 } | j$         4                    d¦  «        }!| j5        }"|!€5| j6        D ]-}#|#j$         4                    d¦  «        }$|$�d|#j5        › d|$› �}! nŒ.|!€dn|!}!d|j7        › d|j8        › �}%d|%› d|"› d|!› �}&| 9                    |&¦  «         Œ¹d|j7        › d|j8        › �}%d|%› d�}&| 9                    |&¦  «         Œçd :                    |¦  «        }'t;          j        dte          |¦  «        › d|'› d�d¬¦  «         ~|S )NFr   )Úfake_tensor_tls©rx  r´   rµ   r·  r±  r‰  rb   rŠ  zÝWe found a fake tensor in the exported program constant's list. This typically means our tracing system encountered an op that we can't trace through. For the potential source, you can refer to following model attribute: z". Please file an issue on github. r.  )Ú
stacklevelÚinline_constraints)ÚTrainingIRVerifier©	r*  r¶   rO  Ú
state_dictrw  rp  rW  rw   Ú	verifiers)Ú'_FAKE_TENSOR_ID_TO_PROXY_MAP_FOR_EXPORTro  z	Used by 'z':
z<no stack trace available>zshape=z, dtype=zFakeTensor(z) from node 'z): <no proxy mapping found>z
  z	Detected zÀ fake tensors that are still alive after export.
This is likely result of torch.export.export not being able to track side effects that is happening outside of model scope.

Leaked tensors:
  zU

Alternatively, please file a bug report to PyTorch team for further debugging help.);r   r«  ri  r]  r…   rb  ry   Ú_guardsr/   r¨  r*  rÆ  r”   r#  Útorch._subclasses.fake_tensorr-  Ú%non_strict_export_fake_tensor_trackerÚclearrü  r€   rw   r'  r¤   Ú_subclassesÚfake_tensorÚ
FakeTensorr¯   Ú error_on_lifted_constant_tensorsr   Úwarningsrd   rv   r  r{  rƒ   ru   r¾   rx  rq  r1  r3  r9  r    Útorch._export.verifierr1  rO   r¶   Ú"torch.fx.experimental.proxy_tensorr5  r9   r¦   rß   rì   r©   rû  ÚshapeÚdtyperÉ   Újoin)(rx  r´   rµ   r·  rû  r±  rb   r‰  rg  r[  Úhas_ambient_moderñ  r  Úexport_funcr-  rj  ÚconstrØ   Ú	error_msgr|  r¢  r0  rw  ru   rp  r1  Úexported_programr5  Úactive_fakesÚ
legit_leakÚleak_sourcesÚfake_valrÁ   ro  Ú	node_nameÚuserÚ
user_stackÚ
shape_infoÚ	leak_infoÚleak_detailss(                                           rr   Ú_export_for_trainingrS  Ú  s  € õ  5°SÑ9Ô9Ðõ 	˜s D¨&°.ÑAÔAñØØØØØ õ 3°3Ñ7Ô7ÐàÐØð QÝÔ*¨D°&¨>Ñ:Ô:‰ˆ	�1Ý œ=×9Ò9¸)ÑDÔDÈDÐPÐð %+ÐB•.�.Õ0B€Kàð F•e”mÔ*ÔNð FØAÐAÐAÐAÐAÐAàÔ=×CÒCÑEÔEÐEà!�kØØØØ%Ø'EØ!Ø4_Ý0ð	ñ 	ô 	€Oð ð ;Ð*ð ;Ø)Ô.Ô8×>Ò>Ñ@Ô@ð 	;ð 	;‰JˆE�3ÝØ•UÔ&Ô2Ô=ñô ð ;å& uÑ-Ô-ð;ð8ð 38ð8ð 8ð 8ð õ ”=Ô'ÔHð ;Ý& yÑ1Ô1Ð1å”M )¸Ð:Ñ:Ô:Ð:øà,Ô1Ô5Ðå.¨s°D¸&ÑAÔAÐÝ0°Ô1JÑKÔKÐð :L€OÔÔÔ Ð!5Ñ6Ý.ØØØØØñô Ðõ 3ØØ&ØØñ	ô Ñ€BÐõ ˜BÑÔÐÝ˜ÑÔÐÝ˜bÐ"8Ñ9Ô9Ð9å  CÑ(Ô(Ð(à9Ð9Ð9Ð9Ð9Ð9å&ØØŒhØ.Ø&Ø+Ø+Ø˜f�~Ø!Ô&Ô0Ø%Ð&ð
ñ 
ô 
Ðð ÐÐ-Ñ.Ô.Ð.àñ 4•e”mÔ*ÔNñ 4àAÐAÐAÐAÐAÐAð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 'ÔLˆÝ&EÀlÑ&SÔ&Sˆ
Ø"$ˆÝˆz‰?Œ?˜QÒÑØ&ð 3ð 3�Ý�h‘<”<Ð#JÐJÐJØBÅ2ÀhÁ<Ä<ÔP�DØ"&¤)§-¢-°Ñ">Ô">�KØ $¤	�Ið #Ð*Ø$(¤Jð &ð &˜DØ)-¬¯ª°}Ñ)EÔ)E˜JØ)Ð5Ø.U¸$¼)Ð.UÐ.UÈÐ.UÐ.U Ø % ð  6ð 'Ð.ð 5Ð4à(ð  ð "S¨(¬.Ð!RÐ!RÀ(Ä.Ð!RÐ!R�JØ c¨jÐ cÐ cÀyÐ cÐ cÐVaÐ cÐ c�IØ ×'Ò'¨	Ñ2Ô2Ð2Ð2ð "S¨(¬.Ð!RÐ!RÀ(Ä.Ð!RÐ!R�JØ U¨jÐ UÐ UÐ U�IØ ×'Ò'¨	Ñ2Ô2Ð2Ð2ð "Ÿ;š; |Ñ4Ô4ˆLÝŒMðg�C 
™OœOð gð gð '3ðgð gð gð
 ðñ ô ð ð àÐrq   rç   )Ú
phase_name)rû  r±  rz  rb   rz  c                ó~  ‡‡— ddl m} t          | ¦  «        at	          ¦   «         }	|	                     |rdnd¦  «         |	                     |rdnd¦  «         |	at          dt          ¬¦  «         t          d	d
„ ¬¦  «         |r6 |¦   «         r,t          | ||||||¬¦  «        Št          dˆfd„¬¦  «         ‰S t          | |||¦  «        \  }}}
}}t          | ¦  «        }|rt          nt          } || |||||
|t          j        t           |¬¦  «        ¬¦  «        }|j        j        }t'          | ||¦  «        }t)          |j        ¦  «        }||j        j        j        d<   t1          | ||||¦  «        }t3          ||||¦  «        \  }}t5          |¦  «         t7          |¦  «         t9          ||¦  «         t:          j        j                              |d¬¦  «         ddl!m"} tG          || ¦  «         tI          ||j%        ||||||f|j        j&        |g¬¦	  «	        Št          dˆfd„¬¦  «          |‰¦  «         ‰S )a"
  
    Traces either an nn.Module's forward function or just a callable with PyTorch
    operations inside and produce a ExportedProgram.

    Args:
        mod: 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.

        prefer_deferred_runtime_asserts_over_guards:
         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 module.
    r   )Ú export_training_ir_rollout_checkrû  Ú
non_strictrz  Úaot_dispatchzexport.enterrº  rç   c                  ó   — dS )Nzstart!rp   rp   rq   rr   rÂ  z_export.<locals>.<lambda>Ê	  s   € °8€ rq   )Ú
payload_fnr+  rH  c                  ó"   •— t          ‰ ¦  «        S r™   ©ro   r`  s   €rr   rÂ  z_export.<locals>.<lambda>Ý	  s   ø€ ÅÀRÁÄ€ rq   )rz  r.  r0  T)Úin_place)ÚVerifierr2  c                  ó"   •— t          ‰ ¦  «        S r™   r\  )rH  s   €rr   rÂ  z_export.<locals>.<lambda>'
  s   ø€ ½SÐAQÑ=RÔ=R€ rq   )'Útorch._utils_internalrV  r   r«  rn   rƒ  r?  r8   r5   rS  ri  r]  r¨  r*  rS  Úpartialr  r€   rv   r  r{  rƒ   ru   r¾   rx  rq  r1  r3  r9  ry   rÆ  r  Úremove_proxy_from_state_dictr?  r^  r    rO   r¶   rw   )rx  r´   rµ   r·  rû  r±  rz  rb   rV  r¼  rf  rg  r[  rE  rj  r|  r¢  r0  rw  ru   rp  r^  r:  rH  s                         @@rr   rÆ  rÆ  „	  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å˜>µÐ?Ñ?Ô?Ð?å�hÐ+;Ð+;Ð<Ñ<Ô<Ð<ð ð Ð8Ð8Ñ:Ô:ð Ý!ØØØØØØ+IØ8cð
ñ 
ô 
ˆõ 	Ð,¸¸¸¸ÐIÑIÔIÐIØˆ	õ 	˜s D¨&°.ÑAÔAñØØØØØ õ 3°3Ñ7Ô7Ðð %+ÐB•.�.Õ0B€Kà!�kØØØØ%Ø'EØ%Ø4_ÝÔ'ÝØ%ð
ñ 
ô 
ðñ ô €Oð 4CÔ3GÔ3KÐå.¨s°D¸&ÑAÔAÐÝ0°Ô1JÑKÔKÐð :L€OÔÔÔ Ð!5Ñ6Ý.ØØØØØñô Ðõ 3ØØ&ØØñ	ô Ñ€BÐõ ˜BÑÔÐÝ˜ÑÔÐÝ˜bÐ"8Ñ9Ô9Ð9õ 
„MÔ×4Ò4Ð5HÐSWÐ4ÑXÔXÐXà/Ð/Ð/Ð/Ð/Ð/å  CÑ(Ô(Ð(å&ØØŒhØ.Ø&Ø+Ø+Ø˜f�~Ø!Ô&Ô0Ø�*ð
ñ 
ô 
Ðõ Ð(Ð5RÐ5RÐ5RÐ5RÐSÑSÔSÐSàÐÐ-Ñ.Ô.Ð.ØÐrq   r™   )NN)Ürl   rS  r!  Úloggingr  rK  rF  r>  Úcollections.abcr   Ú
contextlibr   r   r   Ú	itertoolsr   Útypingr   r	   r
   Úunittestr   Úweakrefry   Útorch._dynamoÚtorch.fxÚtorch.utils._pytreer  Ú_pytreer…   Útorch._dispatch.pythonr   Útorch._dynamo.excr   r   Útorch._export.db.loggingr   r   Útorch._export.non_strict_utilsr   r   r   r   r   r   r   r   Ú-torch._export.passes.collect_tracepoints_passr   Ú(torch._export.passes.lift_constants_passr   r   rd  r   r   r   r   r    r!   r"   r#   r?  r$   Útorch._export.wrappersr%   Ú5torch._functorch._aot_autograd.graph_capture_wrappersr&   rì  r'   r(   Ú&torch._functorch._aot_autograd.schemasr)   Ú-torch._functorch._aot_autograd.subclass_utilsr*   Ú$torch._functorch._aot_autograd.utilsr+   r,   Útorch._functorch.aot_autogradr-   r.   Útorch._guardsr/   r0   r1   Ú"torch._library.fake_class_registryr2   r3   Útorch._library.opaque_objectr4   Útorch._loggingr5   r7  r6   r`  r7   r8   Ú%torch.export._leakage_detection_utilsr9   Útorch.export._unliftr:   Útorch.export.dynamic_shapesr;   r<   r=   r>   r?   Útorch.export.exported_programr@   Útorch.fx._symbolic_tracerA   r@  rB   rC   rD   rE   re  rF   rG   rH   rI   Útorch.fx.graphrJ   rK   Útorch.utils._sympy.value_rangesrL   rH  rN   rO   rP   rQ   rR   rO  rS   rT   Ú	getLoggerrf   rH  r|   ro   rï   r•  rU   rk   Ú	dataclassrW   rt   r   rÒ  Úcriticalr  rI  Ú	exceptionÚinfoÚwarningrJ  rd   rZ   r�   r—   rš   r    r�   r¯   rz   r{   rÃ   rÕ   rü   r  r  r-  r$  r%  r=  rÝ   rM  rU  rj  r~  rŽ  rœ  r   r®  r°  rj   r¹  ró  r  r  rn   ru  r#  r(  r1  r3  r9  r>  r?  r«  rU  rY  r]  rÞ   rç   rc  re  ri  rq  rx  r{  r‚  rˆ  r¨  rü  rt  ÚNoderé  r*  rS  rÆ  rp   rq   rr   ú<module>rŒ     s÷  ðð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð ð ð Ø€N€N€Nà €€€Ø Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 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Ø XÐ XÐ XÐ XÐ XÐ Xðð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AØ WÐ WÐ WÐ WÐ WÐ Wðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð DÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ QÐ QÐ QÐ QÐ QÐ QØ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð VÐ UÐ UÐ UÐ UÐ UÐ UÐ Uð €gÔ˜Ñ!Ô!€ð !% S¨# X¤°°s¸C°x´Ñ @À4ÈÄ9Ñ LÐ �IÐ LÐ LÑ Lð Ôð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ Ôð,ð2 Ôð ð  ð  ð  ð  ñ  ô  ñ Ôð ð €Ô˜dÐ#Ñ#Ô#ð=ð =ð =ð =ð =ñ =ô =ñ $Ô#ð=ð  2Ð1Ñ3Ô3Ð àÔØ„MØ„MØÔØ„LØ„KØ„OØ	Ø„Mð
>Ð Ô :ð ð
9ð 
9ñ „ð
9ð ðBð Bñ „ðBðCð Cð Cð(ð (ð (ðð ð ð:˜sð :ð :ð :ð :ð. ¤Ô!5ð .ð .ð .ð .ð0ð ˜Sð ð ð ð ð*Q-ð Q-ð Q-ðh:ð :ð :ð
ð 
ð 
ð'ð 'ð 'ðT(Ø”X”_ð(à”8”?ð(ð 
ˆ#ˆsˆ(„^ð(ð (ð (ð (ðV1,ØŒÔð1,à	ð1,ð ˜c 5¤<Ð/Ô0ð1,ð �CÐ/Ð/Ô0ð	1,ð
 ˜”Ið1,ð 1,ð 1,ð 1,ðh-Ø(ð-à)ð-ð �CÐ/Ð/Ô0ð-ð 
ð	-ð -ð -ð -ð<%? 5¤8Ô#7ð %?¸Dð %?ð %?ð %?ð %?ðd !%ðjð jð jàŒÔðjð ðjð jð jð jðZ/ØŒÔð/à)ð/ð 
ð/ð /ð /ð /ðdØ”X”_ðØ5:´XÔ5Iðà	ðð ð ð ðD˜uœxœð °4¸¸S¸´>ð ð ð ð ð +/ð	$ð $Øð$àð$ð ! Ð&9Ð!9Ô:ð$ð ˜C”y 4Ñ'ð	$ð
 
ˆ/Ôð$ð $ð $ð $ð:	ð 	ð 	ð 	ð 	 4ñ 	ô 	ð 	ð %)ØEIð	Bð 79Ø&+Ø8=ØØ"ØðBð Bð BØðBà
��S�Œ/ðBð ��c�ŒN˜TÑ!ðBð ˜˜c˜”N U¨3¤ZÑ/°$°s´)Ñ;¸dÑBð	Bð %*¨#¨s¨(¤OðBð  $ðBð 26ðBð ðBð ðBð ðBð „XÔðBð Bð Bð BðZ !ð.ð .ð .ð .ð .ðn !ðYð ˆkØØØ(,Ø(-ðYð Yð YØ	ŒŒðYð
 $ðYð "&ðYð "&ðYð ðYð Yð Yð Yð~ %)ðð Ø	ŒŒðà
��S�Œ/ðð ��c�ŒN˜TÑ!ðð 
ˆ#„Yð	ð ð ð ð>
 U¤X¤_ð 
¸¸S¼ð 
ð 
ð 
ð 
ð/Ø˜%œ,Ô'ð/à˜S %¤,Ð.Ô/ð/ð *ð/ð �CÐ/Ð/Ô0ð	/ð
 
ð/ð /ð /ð /ð.FØŒhŒoðFà)ðFð �CÐ/Ð/Ô0ðFð 
ð	Fð Fð Fð Fð*(¨%¬(Ô*>ð (À4ð (ð (ð (ð (ðV e¤hÔ&:ð ¸tð ð ð ð ð4ØŒÔðØ#7ðà	ðð ð ð ð04�_ð 4¨¨c°3¨h¬ð 4ð 4ð 4ð 4ð, "&€ˆs�3Œx˜$‰Ð %Ð %Ñ %Ø26Ð ˜$˜s C˜xœ.¨4Ñ/Ð 6Ð 6Ñ 6ð/ð /ð /ðd0ð 0ð 0ð$ %¤(¤/ð °d¸3À¸8´nð ð ð ð ðAXØ	ŒŒðAXà
�˜�Ô
ðAXð ��f�Ô Ñ$ðAXð 'Ø„lÔ#ñ$à„lÔ#ñ$ð ñð	AXð Ø	ˆ&�#ˆ+ÔØˆˆfˆÔØØ˜ÑØˆoÐ Ð$Ô%ð	'ôðAXð AXð AXð AXðP +/ð	.!ð .!Ø#ð.!à$)¨#¨s¨(¤Oð.!ð ð.!ð ˜C”y 4Ñ'ð	.!ð
 ˆ5Œ8Ô  oÔ!6Ð6Ô7ð.!ð .!ð .!ð .!ðb)Ø	ŒŒð)à#ð)ð )ð )ð )ðX ~ð ð ð ð ð ð&�u”x”ð &ð &ð &ñ „ð&ð" ð>ð >ñ „ð>ðlØ	ŒŒðlà
��S�Œ/ðlð ��c�ŒNðlð ˜˜c˜”N U¨3¤ZÑ/°$°s´)Ñ;¸dÑBð	lð
 %*¨#¨s¨(¤Oðlð ðlð 26ðlð ðlð ðlð lð lð lðj !Øˆkðdð dØ	ŒŒðdð
 $ðdð ðdð dð dð dðN	ð ð ð"L�5”8Ô'ð L¨sð L°u´x´}ð Lð Lð Lð Lð{Ø	ŒŒð{à
��S�Œ/ð{ð ��c�ŒNð{ð ˜˜c˜”N U¨3¤ZÑ/°$°s´)Ñ;¸dÑBð	{ð
 %*¨#¨s¨(¤Oð{ð ð{ð 26ð{ð ð{ð ð{ð {ð {ð {ð| Øð %)ØEIð	eð Ø68Ø8=ðeð eð eØ	ŒŒðeà
��S�Œ/ðeð ��c�ŒN˜TÑ!ðeð ˜˜c˜”N U¨3¤ZÑ/°$°s´)Ñ;¸dÑBð	eð ðeð %*¨#¨s¨(¤Oðeð 26ðeð ðeð eð eñ  Ôñ ÔðeðP ØØÐ¨(Ð3Ñ3Ô3ð %)ØEIð	cð Ø68ØØ8=ðcð cð cØ	ŒŒðcà
��S�Œ/ðcð ��c�ŒN˜TÑ!ðcð ˜˜c˜”N U¨3¤ZÑ/°$°s´)Ñ;¸dÑBð	cð ðcð %*¨#¨s¨(¤Oðcð ðcð 26ðcð ðcð cð cñ 4Ô3ñ  Ôñ Ôðcð cð crq   