§
    C�’j^®  ã                  ó:  — d dl m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mZ d dlZd dlZd dlZd dlmc mZ d dlmZmZmZ d dlmZ d dlmZmZ d dlm Z  d d	l!m"Z" d d
l#m$Z$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/m0Z0m1Z1 d dl2m3Z3m4Z4 er$d dl5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dlm=Z= d dl>m?Z?m@Z@  ed¦  «        ZA ejB        eC¦  «        ZDdVd„ZEg d¢ZFdWd"„ZG	 dXdYd(„ZHdZd*„ZI G d+„ d,ejJ        jK        ¦  «        ZL ed-d.d/g¦  «        ZM G d0„ d1ejN        jO        ¦  «        ZPd[d;„ZQd\d=„ZRd]d?„ZS G d@„ dA¦  «        ZT G dB„ dCeU¦  «        ZV G dD„ dE¦  «        ZW G dF„ dG¦  «        ZXd^dL„ZY G dM„ dNejN        jZ        j[        ¦  «        Z\	 d_d`dR„Z]dddSœdadU„Z^dS )bé    )ÚannotationsN)Ú
namedtuple)ÚAnyÚcastÚTYPE_CHECKINGÚTypeVar)ÚCaptureOutputÚfullgraph_captureÚget_traced_fn)Údisable)Úargument_namesÚcheck_user_input_output)ÚUserErrorType)ÚGetItemSource)Údynamo_timedÚget_metrics_context)Ú_compiling_state_context)Údetect_fake_modeÚTracingContext)Ú_RelaxedConstraintÚ
Constraint)ÚConstraintViolationErrorÚ
DimDynamicÚStatelessSymbolicContext)Ú_PyTreeCodeGenÚ_PyTreeInfo)ÚCallableÚIterableÚSequence)ÚOutputReturnInfo)ÚFakeTensorMode)ÚNode)ÚArgumentÚTargetÚTÚconstraint_violation_errorr   ÚfuncúCallable[..., Any]Úargsr   ÚkwargsÚreturnc                ó¢   — ddl m}m} t          j        |¦  «        } |||f|¦  «        }| j        r || j        d         |¦  «        f| _        | S )z‹
    Because we trace a different callable, the sources are all messed up.
    Manually patch them so the error message looks correct.
    r   )Ú_get_input_pathsÚ_replace_sources)Útorch.export._unliftr-   r.   ÚinspectÚ	signaturer)   )r&   r'   r)   r*   r-   r.   Úorig_sigÚflat_input_pathss           úMC:\Projects\DSCons\.venv\Lib\site-packages\torch\_dynamo\functional_export.pyÚpost_process_error_msgr5   -   s|   € ð HÐGÐGÐGÐGÐGÐGÐGåÔ  Ñ&Ô&€HØ'Ð'¨¨v¨¸ÑAÔAÐØ!Ô&ð 
àÐÐ7Ô<¸QÔ?ÐAQÑRÔRð+
Ð"Ô'ð &Ð%ó    ))Ú__export_root_Ú_)z_export_root.Ú )z._export_rootr9   ÚtextÚstrc                óP   — | }t           D ]\  }}|                     ||¦  «        }Œ|S )z;Generic utility to clean export_root patterns from strings.)ÚEXPORT_ROOT_REPLACEMENTSÚreplace)r:   ÚresultÚpatternÚreplacements       r4   Úclean_export_root_stringrB   I   s5   € à€FÝ 8ð 6ð 6Ñˆ�Ø—’ ¨Ñ5Ô5ˆˆØ€Mr6   FÚgraph_moduleútorch.fx.GraphModuleÚis_inline_builtinÚboolc                óâ  ‡— d
ˆfd„}dd„}| j         j        D ]}}d|j        v r0 ||j        d                              ¦   «         ¦  «        |j        d<   |j                             dd¦  «        }|r% ||                     ¦   «         ¦  «        |j        d<   Œ~d	| j        v rPi }| j        d	                              ¦   «         D ]$\  }}t          |¦  «        |t          |¦  «        <   Œ%|| j        d	<   | S )a  
    Clean up nn_module_stack metadata by removing export_root references.

    Removes the _export_root module references from nn_module_stack metadata
    in graph nodes, which are artifacts from the export process. Fixes two patterns:

    1. Keys: Removes "__export_root_" and "__modules['_export_root']_" prefixes
       - Normal case: "L__self____export_root_child" -> "L__self__child"
       - inline_builtin case: Uses numeric ID strings like "140468831433840"

    2. Values: Removes "._export_root" and "._modules['_export_root']" from child names
       e.g., "L['self']._export_root.child" -> "L['self'].child"
       e.g., "L['self']._modules['_export_root'].child" -> "L['self'].child"

    Also removes the root export entry "L__self____export_root" entirely.

    Args:
        graph_module: The GraphModule to clean up
        is_inline_builtin: If True, keys are numeric ID strings and self references
                          (L['self']) are filtered out

    Returns:
        The cleaned GraphModule (modified in-place)
    Únn_module_stackúdict[str, tuple[str, T]]r+   c                ó°   •— d| v r| d= i }|                       ¦   «         D ]6\  }\  }}t          |¦  «        }t          |¦  «        }‰r|dk    rŒ/||f||<   Œ7|S )NÚL__self____export_rootz	L['self'])ÚitemsrB   )rH   Úcleaned_stackÚkeyÚ
child_nameÚchild_classÚ	clean_keyÚ
clean_namerE   s          €r4   Ú_process_nn_module_stackzEclean_nn_module_stack_and_source_fn.<locals>._process_nn_module_stackm   s’   ø€ ð $ Ð6Ð6ØÐ 8Ð9ð ˆØ.=×.CÒ.CÑ.EÔ.Eð 	Að 	AÑ*ˆCÑ*�*˜kå0°Ñ5Ô5ˆIõ 2°*Ñ=Ô=ˆJð !ð  Z°;Ò%>Ð%>Øà(2°KÐ'@ˆM˜)Ñ$Ð$ØÐr6   Úsource_fn_stackúIterable[T]c                ó<  — g }| D ]–}t          |t          ¦  «        rjt          |¦  «        dk    rW|\  }}t          |t          ¦  «        r't	          |¦  «        }|                     ||f¦  «         Œk|                     |¦  «         Œ�|                     |¦  «         Œ—|S )Né   )Ú
isinstanceÚtupleÚlenr;   rB   Úappend)rT   rM   ÚitemÚnameÚclsrR   s         r4   Ú_process_source_fnz?clean_nn_module_stack_and_source_fn.<locals>._process_source_fnƒ   s°   € ØˆØ#ð 
	+ð 
	+ˆDÝ˜$¥Ñ&Ô&ð 	+­3¨t©9¬9¸ª>¨>Ø ‘	��cÝ˜d¥CÑ(Ô(ð /Ý!9¸$Ñ!?Ô!?�JØ!×(Ò(¨*°cÐ):Ñ;Ô;Ð;Ð;à!×(Ò(¨Ñ.Ô.Ð.Ð.ð ×$Ò$ TÑ*Ô*Ð*Ð*àÐr6   NÚ dynamo_flat_name_to_original_fqn)rH   rI   r+   rI   )rT   rU   r+   rU   )ÚgraphÚnodesÚmetaÚcopyÚgetrL   rB   )	rC   rE   rS   r_   ÚnoderT   Úclean_name_to_original_fqnÚ	flat_nameÚoriginal_fqns	    `       r4   Ú#clean_nn_module_stack_and_source_fnrj   Q   sL  ø€ ð8ð ð ð ð ð ð,ð ð ð ð  Ô"Ô(ð Vð VˆØ ¤	Ð)Ð)Ø+CÐ+CØ”	Ð+Ô,×1Ò1Ñ3Ô3ñ,ô ,ˆDŒIÐ'Ñ(ð œ)Ÿ-š-Ð(9¸4Ñ@Ô@ˆØð 	VØ+=Ð+=¸o×>RÒ>RÑ>TÔ>TÑ+UÔ+UˆDŒIÐ'Ñ(øà)¨\Ô->Ð>Ð>à%'Ð"Ø'3Ô'8Ø.ô(
ç
Š%‰'Œ'ð	ð 	Ñ#ˆI�|õ )¨Ñ6Ô6ð 'Õ'?À	Ñ'JÔ'JÑKÐKð 'ð 	ÔÐ<Ñ=ð Ðr6   ÚNonec                óÒ  — i }| j         j        D �]Ö}|j        dk    rµ|j        }t	          |¦  «        }||k    r™||_        t          | |¦  «        st          d|›�¦  «        ‚t          j        j	         
                    | |¦  «        }t          j        j	                             || |¦  «         t          j        j	                             | |¦  «         |j        dk    �r|j        }t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t	          |¦  «        }t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t	          |j        ¦  «        }||k    r�Œi||v r||         |_        ||_        �Œƒ|                      |¦  «        }|                      |¦  «         |                      ||¦  «         ||_        ||_        |||<   �ŒØdS )z3Remove export_root artifacts from FX graph in-placeÚget_attrzgraph_module missing attribute Úcall_modulez#expected old_target to be str, got z#expected new_target to be str, got N)ra   rb   ÚopÚtargetrB   ÚhasattrÚAssertionErrorÚtorchÚfxrC   Ú	_get_attrÚ_assign_attrÚ	_del_attrrX   r;   Útyper]   Úget_submoduleÚdelete_submoduleÚadd_submodule)rC   Úclean_named_module_maprf   Ú
old_targetÚ
new_targetÚparamÚnew_namerp   s           r4   Úclean_export_rootr�   ­   s  € ð
 .0Ðð Ô"Ô(ð (<ñ (<ˆØŒ7�jÒ Ð ØœˆJÝ1°*Ñ=Ô=ˆJØ˜ZÒ'Ð'Ø(�”Ý˜|¨ZÑ8Ô8ð Ý(ØH¸*ÐHÐHñô ð õ œÔ-×7Ò7¸ÀjÑQÔQ�Ý”Ô%×2Ò2°5¸,È
ÑSÔSÐSÝ”Ô%×/Ò/°¸jÑIÔIÐIàŒ7�mÒ#Ñ#ØœˆJÝ˜j­#Ñ.Ô.ð Ý$ØL½$¸zÑ:JÔ:JÐLÐLñô ð õ 2°*Ñ=Ô=ˆJÝ˜j­#Ñ.Ô.ð Ý$ØL½$¸zÑ:JÔ:JÐLÐLñô ð õ 0°´	Ñ:Ô:ˆHØ˜ZÒ'Ð'Ùð Ð3Ð3Ð3Ø4°ZÔ@�”Ø$�”	ÙØ!×/Ò/°
Ñ;Ô;ˆFØ×)Ò)¨*Ñ5Ô5Ð5Ø×&Ò& z°6Ñ:Ô:Ð:Ø$ˆDŒKØ ˆDŒIØ1;Ð" :Ñ.ùðQ(<ð (<r6   c                  ó(   ‡ — e Zd Zd
ˆ fd„Zdd	„Zˆ xZS )ÚModuleToTraceÚfoor   Úin_specr+   rk   c                ód   •— t          ¦   «                              ¦   «          || _        || _        d S ©N)ÚsuperÚ__init__Ú_export_rootr…   )Úselfr„   r…   Ú	__class__s      €r4   r‰   zModuleToTrace.__init__á   s,   ø€ Ý‰Œ×ÒÑÔÐØˆÔØˆŒˆˆr6   Ú	flat_argsÚExportTracerOutputc                ó¤   — t          j        || j        ¦  «        \  }} | j        |i |¤Ž}t          j        |¦  «        \  }}t          ||¦  «        S r‡   )ÚpytreeÚtree_unflattenr…   rŠ   Útree_flattenrŽ   )r‹   r�   r)   r*   ÚresÚout_flatÚout_specs          r4   ÚforwardzModuleToTrace.forwardæ   sV   € ÝÔ,¨Y¸¼ÑEÔE‰ˆˆfØˆdÔ Ð0¨Ð0Ð0ˆÝ#Ô0°Ñ5Ô5Ñˆ�(Ý! (¨HÑ5Ô5Ð5r6   )r„   r   r…   r   r+   rk   )r�   r   r+   rŽ   )Ú__name__Ú
__module__Ú__qualname__r‰   r–   Ú__classcell__©rŒ   s   @r4   rƒ   rƒ   à   sQ   ø€ € € € € ðð ð ð ð ð ð
6ð 6ð 6ð 6ð 6ð 6ð 6ð 6r6   rƒ   rŽ   r�   r•   c                  ón   ‡ — e Zd ZdZ	 	 d$d%ˆ fd„Zd&ˆ fd„Zd&d„Zd'ˆ fd„Zd(ˆ fd„Zd)ˆ fd"„Z	d*ˆ fd#„Z
ˆ xZS )+ÚDynamoGraphTransformerzZGraph transformer for dynamo export that flattens inputs/outputs without complex matching.NÚmodulerD   Úflat_inputsú	list[Any]Úflat_args_dynamic_dimsúlist[set[int]]Úgraph_input_orderúdict[int, int]Úgraph_output_mapúdict[int, OutputReturnInfo]Ú	fake_modeú
Any | NoneÚgraph_inputsúdict[int, Any] | Noner+   rk   c                ó4  •— t          ¦   «                              |¦  «         t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚|| _        || _        || _        || _        || _        |pi | _	        d„ |j
        j        D ¦   «         | _        t          d„ |j
        j        D ¦   «         ¦  «        | _        i | _        |                      ¦   «          i | _        |                      ¦   «          d S )Nzflat_args_dynamic_dims length (z!) must match flat_inputs length (ú)c                ó(   — g | ]}|j         d k    ¯|‘ŒS )Úplaceholder©ro   ©Ú.0Úns     r4   ú
<listcomp>z3DynamoGraphTransformer.__init__.<locals>.<listcomp>  s$   € ÐTÐTÐT 1¸a¼dÀmÒ>SÐ>S˜QÐ>SÐ>SÐ>Sr6   c              3  ó0   K  — | ]}|j         d k    ¯|V — ŒdS )ÚoutputNr¯   r°   s     r4   ú	<genexpr>z2DynamoGraphTransformer.__init__.<locals>.<genexpr>  s.   è è € ÐRÐR aÀÄÈÒAQÐAQ ÐAQÐAQÐAQÐAQÐRÐRr6   )rˆ   r‰   rZ   rr   rŸ   r¡   r£   r¥   r§   r©   ra   rb   ÚplaceholdersÚnextÚoutput_nodeÚnew_input_nodesÚ_create_flattened_inputsÚold_to_new_mappingÚ_create_placeholder_mapping)	r‹   rž   rŸ   r¡   r£   r¥   r§   r©   rŒ   s	           €r4   r‰   zDynamoGraphTransformer.__init__ô   s;  ø€ õ 	‰Œ×Ò˜Ñ Ô Ð åÐ%Ñ&Ô&­#¨kÑ*:Ô*:Ò:Ð:Ý ðFµ#Ð6LÑ2MÔ2Mð Fð FÝ25°kÑ2BÔ2BðFð Fð Fñô ð ð
 'ˆÔØ&<ˆÔ#Ø!2ˆÔØ 0ˆÔØ"ˆŒØ(Ð.¨BˆÔð UÐT¨¬Ô(:ÐTÑTÔTˆÔÝÐRÐR¨6¬<Ô+=ÐRÑRÔRÑRÔRˆÔð :<ˆÔØ×%Ò%Ñ'Ô'Ð'ð #%ˆÔØ×(Ò(Ñ*Ô*Ð*Ð*Ð*r6   c                óÐ  •‡ ‡— t          t          ‰ j        ¦  «        ¦  «        D �]¿Št          ¦   «                              d‰› �di ¦  «        }‰‰ j        v rf‰ j        ‰         }|t          ‰ j        ¦  «        k     rA‰ j        |         }|j                             ¦   «         D ]\  }}|dk    r||j	        j        |<   Œ‰ j
        �Át          ‰ j        ‰         t          j        ¦  «        rœ‰ j
                             ‰ j        ‰         t          ˆˆ fd„t          t          ‰ j        ‰         j        ¦  «        ¦  «        D ¦   «         dgt          ‰ j        ‰         j        ¦  «        z  ¬¦  «        ¬¦  «        |j	        j        d<   nUt#          ‰ j        ‰         d¦  «        r ‰ j        ‰         j        |j	        j        d<   n‰ j        ‰         |j	        j        d<   |‰ j        ‰<   �ŒÁdS )zKCreate new placeholder nodes for flattened inputs with proper fake tensors.Úarg_© ÚvalNc                ó^   •— g | ])}|‰j         ‰         v rt          j        nt          j        ‘Œ*S rÀ   )r¡   r   ÚDYNAMICÚSTATIC)r±   ÚdÚir‹   s     €€r4   r³   zCDynamoGraphTransformer._create_flattened_inputs.<locals>.<listcomp>0  sL   ø€ ð 'ð 'ð 'ð !"ð $%¨Ô(CÀAÔ(FÐ#FÐ#Fõ !+Ô 2Ð 2å%/Ô%6ð	'ð 'ð 'r6   )Údynamic_sizesÚconstraint_sizes)Úsymbolic_context)ÚrangerZ   rŸ   rˆ   r®   r£   r·   rc   rL   rf   r§   rX   rs   ÚTensorÚfrom_tensorr   Úshaperq   rÁ   rº   )r‹   r®   Úgraph_placeholder_idxÚorig_placeholderrN   ÚvaluerÆ   rŒ   s   `     @€r4   r»   z/DynamoGraphTransformer._create_flattened_inputs  s  øøø€ å•s˜4Ô+Ñ,Ô,Ñ-Ô-ð &	2ñ &	2ˆAÝ™'œ'×-Ò-¨j°Q¨j¨j¸"¸bÑAÔAˆKð �DÔ*Ð*Ð*à(,Ô(>¸qÔ(AÐ%Ø(­3¨tÔ/@Ñ+AÔ+AÒAÐAØ'+Ô'8Ð9NÔ'OÐ$à&6Ô&;×&AÒ&AÑ&CÔ&Cð ?ð ?™
˜˜UØ %š<˜<Ø9>˜KÔ,Ô1°#Ñ6øð Œ~Ð)­jØÔ  Ô#¥U¤\ñ/ô /Ð)ð 04¬~×/IÒ/IØÔ$ QÔ'Ý%=ð'ð 'ð 'ð 'ð 'õ &+­3¨tÔ/?ÀÔ/BÔ/HÑ+IÔ+IÑ%JÔ%Jð'ñ 'ô 'ð +/¨µ#°dÔ6FÀqÔ6IÔ6OÑ2PÔ2PÑ)Pð
&ñ 
&ô 
&ð 0Jñ 0ô 0�Ô Ô% eÑ,Ð,õ ˜Ô)¨!Ô,¨eÑ4Ô4ð CØ/3Ô/?ÀÔ/BÔ/F�Ô Ô% eÑ,Ð,à/3Ô/?ÀÔ/B�Ô Ô% eÑ,ð '2ˆDÔ  Ñ#Ñ#ðM&	2ð &	2r6   c                ó¼   — | j                              ¦   «         D ]A\  }}|t          | j        ¦  «        k     r$| j        |         }| j        |         }|| j        |<   ŒBdS )z1Create mapping from old placeholders to new ones.N)r£   rL   rZ   r·   rº   r¼   )r‹   Úuser_input_idxrÎ   Úold_placeholderÚnew_placeholders        r4   r½   z2DynamoGraphTransformer._create_placeholder_mappingC  su   € ð 6:Ô5K×5QÒ5QÑ5SÔ5Sð 	Kð 	KÑ1ˆNÐ1Ø$¥s¨4Ô+<Ñ'=Ô'=Ò=Ð=Ø"&Ô"3Ð4IÔ"J�Ø"&Ô"6°~Ô"F�Ø;J�Ô'¨Ñ8øð		Kð 	Kr6   rp   r$   r)   útuple[Argument, ...]r*   údict[str, Any]r   c                óÌ  •— | j         | j        v r�| j        | j                  }dD ]/}|| j         j        v r| j         j        |         |j        j        |<   Œ0d| j         j        v r-d|j        j        vr| j         j        d         |j        j        d<   |S | j                             | j         ¦  «        }|| j        v �r	| j        |         }t          |t          ¦  «        sç| j         j         	                    d¦  «        p| j         j         	                    d¦  «        }|�§d|› �}	t          |t          j        ¦  «        r| j                             |	|¦  «         nt          | j        |	|¦  «         | j                             d|	di ¦  «        }
| j         j                             ¦   «         |
j        _        ||
j        j        d<   |
S t%          ¦   «                              |||¦  «        S )z1Replace old placeholders with new flattened ones.)Útensor_dictÚexample_valueÚunbacked_bindingsrÁ   rÙ   NÚ
_captured_rm   rÀ   )Úcurrent_noder¼   rc   rf   r·   Úindexr©   rX   r   re   rs   rË   rž   Úregister_bufferÚsetattrÚtracerÚcreate_proxyrd   rˆ   r®   )r‹   rp   r)   r*   Únew_argrN   Úplaceholder_idxÚsourceÚexample_valÚ	attr_namer?   rŒ   s              €r4   r®   z"DynamoGraphTransformer.placeholderM  sï  ø€ ð
 Ô Ô 7Ð7Ð7ØÔ-¨dÔ.?Ô@ˆGð Mð Ið I�Ø˜$Ô+Ô0Ð0Ð0Ø-1Ô->Ô-CÀCÔ-H�G”LÔ% cÑ*øð ˜Ô)Ô.Ð.Ð.°5ÀÄÔ@QÐ3QÐ3QØ+/Ô+<Ô+AÀ%Ô+H�”Ô! %Ñ(àˆNð #Ô/×5Ò5°dÔ6GÑHÔHˆOØ $Ô"3Ð3Ñ3ØÔ*¨?Ô;�Ý! &­-Ñ8Ô8ð &Ø"&Ô"3Ô"8×"<Ò"<Øñ#ô #ð #EàÔ*Ô/×3Ò3°OÑDÔDð  ð #Ð.Ø$B°Ð$BÐ$B˜	Ý% kµ5´<Ñ@Ô@ð IØ œK×7Ò7¸	À;ÑOÔOÐOÐOå# D¤K°¸KÑHÔHÐHØ!%¤×!9Ò!9¸*ÀiÐQSÐUWÑ!XÔ!X˜Ø+/Ô+<Ô+A×+FÒ+FÑ+HÔ+H˜œÔ(Ø2=˜œÔ(¨Ñ/Ø%˜Ý‘7”7×&Ò& v¨t°VÑ<Ô<Ð<r6   úSequence[Any]c                ó  •— |d         }g }t          | j                             ¦   «         ¦  «        D ]£}| j        |         \  }}|dk    r/|                     |t	          t
          |¦  «                 ¦  «         ŒG|dk    r;t	          t          |¦  «        j        }	|                     | j        |	         ¦  «         Œˆ|dk    r|                     |¦  «         Œ¤t          ¦   «          
                    |t          |¦  «        fi ¦  «        S )z/Transform output according to graph_output_map.r   Ú	graph_outÚinputÚconstant)Úsortedr¥   Úkeysr[   r   Úintr   rÝ   rº   rˆ   rµ   rY   )r‹   rp   r)   r*   Úoriginal_outputsÚnew_outputsrÆ   Úoutput_typerÁ   Ú	input_idxrŒ   s             €r4   rµ   zDynamoGraphTransformer.outputu  sÿ   ø€ ð   œ7Ðð ˆÝ˜Ô-×2Ò2Ñ4Ô4Ñ5Ô5ð 		(ð 		(ˆAØ#Ô4°QÔ7ÑˆK˜à˜kÒ)Ð)Ø×"Ò"Ð#3µD½¸c±N´NÔ#CÑDÔDÐDÐDØ Ò'Ð'Ý ¥°Ñ4Ô4Ô:�	Ø×"Ò" 4Ô#7¸	Ô#BÑCÔCÐCÐCØ 
Ò*Ð*Ø×"Ò" 3Ñ'Ô'Ð'øå‰wŒw�~Š~˜f¥u¨[Ñ'9Ô'9Ð&;¸RÑ@Ô@Ð@r6   r²   r"   c                óN  •— || _         t          ¦   «                              |¦  «        }t          |d¦  «        rk|j        |urbdD ]%}||j        v r|j        |         |j        j        |<   Œ&|j        dk    r/t          |d¦  «        r|j                             |j        ¦  «         |S )z.Run node transformation and preserve metadata.rf   )rÁ   rÙ   rÚ   rµ   r]   )	rÜ   rˆ   Úrun_noderq   rf   rc   ro   Ú_renamer]   )r‹   r²   r?   rN   rŒ   s       €r4   rô   zDynamoGraphTransformer.run_nodeŠ  s­   ø€ àˆÔÝ‘”×!Ò! !Ñ$Ô$ˆõ �6˜6Ñ"Ô"ð 	, v¤{¸!Ð';Ð';ØDð 8ð 8�Ø˜!œ&�=�=Ø,-¬F°3¬K�F”KÔ$ SÑ)øð Œt�xÒÐ¥G¨A¨vÑ$6Ô$6ÐØ”×#Ò# A¤FÑ+Ô+Ð+àˆr6   c                ó  •— t          ¦   «                              ¦   «         }t          | j        d¦  «        rPd| j        j        v r| j        j        d         |j        d<   d| j        j        v r| j        j        d         |j        d<   |S )z:Perform the graph transformation and copy module metadata.rc   r`   Údynamo_compile_id)rˆ   Ú	transformrq   rž   rc   )r‹   Ú	result_gmrŒ   s     €r4   rø   z DynamoGraphTransformer.transform›  s�   ø€ å‘G”G×%Ò%Ñ'Ô'ˆ	õ �4”; Ñ'Ô'ð 	à1°T´[Ô5EÐEÐEàEIÄ[ÔEUà6ôF�	”ÐAÑBð
 # d¤kÔ&6Ð6Ð6à6:´kÔ6Fà'ô7�	”Ð2Ñ3ð
 Ðr6   )NN)rž   rD   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r+   rk   )r+   rk   )rp   r$   r)   rÕ   r*   rÖ   r+   r   )rp   r$   r)   rç   r*   rÖ   r+   r   )r²   r"   r+   r   )r+   rD   )r—   r˜   r™   Ú__doc__r‰   r»   r½   r®   rµ   rô   rø   rš   r›   s   @r4   r�   r�   ñ   s  ø€ € € € € ØdÐdð !%Ø.2ð#+ð #+ð #+ð #+ð #+ð #+ð #+ðJ(2ð (2ð (2ð (2ð (2ð (2ðTKð Kð Kð Kð&=ð &=ð &=ð &=ð &=ð &=ðPAð Að Að Að Að Að*ð ð ð ð ð ð"ð ð ð ð ð ð ð ð ð r6   r�   Úmodule_to_traceútorch.nn.ModuleÚorig_callabler§   úFakeTensorMode | NoneÚgraph_capture_outputr	   Údynamic_shapesú.dict[str, Any] | tuple[Any] | list[Any] | Nonec           	     óš  — d }	 t          | ¦  «        \  }}	|j                             |j        ¦  «         n# t          $ r}
|
}Y d }
~
nd }
~
ww xY wt          |dd ¦  «        x}��R|j        x}��Ht          | j        t          j
        j        t          j
        j        z  ¦  «        �s|                     ¦   «          |                     ¦   «         }|                     t!          j        |¦  «        |||¦  «        }|r'|j        r|j        d         |z   f|_        n6|f|_        n-|rt	          |¦  «        }nt&                               d|¦  «         |j        D ]a}t          |t,          j        ¦  «        rEt	          d                     t3          j        |j        |         ¦  «        ¦  «        › d|› d�¦  «        }Œb|rt9          ||||¦  «        }|‚d S )NÚ	shape_envr   z#Summary of dimension constraints:%sr9   zk
It appears that you're trying to set a constraint on a value which we evaluated to have a static value of z0. Set TORCH_LOGS="+export" for more information.)r   rÿ   Úbuild_guardsÚ__code__r   ÚgetattrÚdim_constraintsrX   r–   rs   Ú_opsÚOpOverloadPacketÚ
OpOverloadÚsolveÚforced_specializationsÚprettify_resultsr0   r1   r)   ÚlogÚinfoÚvar_to_rangeÚsympyÚIntegerÚjoinÚ	tracebackÚformat_listÚvar_to_stackr5   )rû   rý   r§   rÿ   r)   r*   r   r&   Úfnr8   Úer  r  r  ÚmsgÚks                   r4   Ú&_suggest_or_raise_constraint_violationr  ³  s=  € ð "&Ðð'å˜oÑ.Ô.‰ˆˆAØÔ1×>Ò>¸r¼{ÑKÔKÐKÐKøÝ#ð 'ð 'ð 'Ø%&Ð"Ð"Ð"Ð"Ð"Ð"øøøøð'øøøõ ˜i¨°dÑ;Ô;Ð	;ˆÑHØ )Ô 9Ð9ˆ_ÑFÝØÔ#ÝŒJÔ'­%¬*Ô*?Ñ?ñ
ô 
ñ Gð 	×ÒÑÔÐà!0×!GÒ!GÑ!IÔ!IÐà×.Ò.ÝÔ˜mÑ,Ô,ØØ&Ø"ñ	
ô 
ˆð &ð 	Ø)Ô.ð 9à.Ô3°AÔ6¸Ñ<ð3Ð*Ô/Ð/ð 47°&Ð*Ô/Ð/à%ð Ý-EÀcÑ-JÔ-JÐ*Ð*å—’Ø9Øñô ð ð Ô'ð 	ð 	ˆAÝ˜!�Uœ]Ñ+Ô+ð Ý-EØ—w’w�yÔ4°YÔ5KÈAÔ5NÑOÔOÑPÔPð Eð EàJKðEð Eð Eñ.ô .Ð*øð "ð )Ý%;Ø&¨°t¸Vñ&
ô &
Ð"ð )Ð(ð	)ð )s   „16 ¶
AÁ AÁAÚ
shuffle_gmc                óð   — | j                              ¦   «          |                      ¦   «          t          |                      ¦   «         ¦  «        D ]&\  }}t          | |¦  «         t          | ||¦  «         Œ'd S r‡   )ra   Úeliminate_dead_codeÚ	recompileÚlistÚnamed_buffersÚdelattrrß   )r  r]   Úbuffers      r4   Ú_normalize_shuffle_graphr$  ÷  s   € ØÔ×(Ò(Ñ*Ô*Ð*Ø×ÒÑÔÐÝ˜Z×5Ò5Ñ7Ô7Ñ8Ô8ð *ð *‰ˆˆfÝ�
˜DÑ!Ô!Ð!Ý�
˜D &Ñ)Ô)Ð)Ð)ð*ð *r6   Úgmc                ód   — | j         j        D ]"}|j        dk    r|j        d         |j        d<   Œ#d S )Nr®   rÙ   rÁ   )ra   rb   ro   rc   )r%  rf   s     r4   Únormalize_graph_moduler'  ÿ  s@   € Ø””ð :ð :ˆØŒ7�mÒ#Ð#Ø#œy¨Ô9ˆDŒI�eÑøð:ð :r6   c                  ó   — e Zd Zdd	„Zdd„ZdS )ÚInputProcessorÚrootÚobjectÚnum_argsrî   Úkwarg_namesú	list[str]r+   rk   c                ó0   — || _         || _        || _        d S r‡   )r*  r,  r-  )r‹   r*  r,  r-  s       r4   r‰   zInputProcessor.__init__  s    € ð ˆŒ	Ø ˆŒØ&ˆÔÐÐr6   Úinputsútuple[object, ...]ú,tuple[tuple[object, ...], dict[str, object]]c                óŒ  — |}i }t          |¦  «        | j        k    r>t          t          | j        || j        d …         ¦  «        ¦  «        }|d | j        …         }| j        �àt          | j        t          j        j	        ¦  «        r±t          | j        j
        j        t          ¦  «        s.t          dt          | j        j
        j        ¦  «        › �¦  «        ‚t          | j        j
        j        j        d¦  «        st          d¦  «        ‚| j        j
        j        j        j        | urt          d¦  «        ‚| j        g|¢R }||fS )Nz%expected _DynamoBytecodeCodeGen, got Úinput_processorz9dynamo_bytecode_flatten missing input_processor attributez3dynamo_bytecode_flatten.input_processor is not self)rZ   r,  ÚdictÚzipr-  r*  rX   rs   rt   ÚGraphModulera   Ú_codegenÚ_DynamoBytecodeCodeGenrr   rx   rq   Údynamo_bytecode_flattenr4  )r‹   r0  r)   r*   s       r4   Ú__call__zInputProcessor.__call__  sL  € ð ˆàˆÝˆt‰9Œ9�t”}Ò$Ð$Ý�#˜dÔ.°°T´]°_°_Ô0EÑFÔFÑGÔGˆFØ˜˜$œ-˜Ô(ˆDØŒ9Ð Ý˜$œ)¥U¤XÔ%9Ñ:Ô:ð Ý! $¤)¤/Ô":Õ<RÑSÔSð Ý(Ø`ÅÀTÄYÄ_ÔE]Ñ@^Ô@^Ð`Ð`ñô ð õ Ø”I”OÔ,ÔDÐFWñô ð õ )ØSñô ð ð ”I”OÔ,ÔDÔTØð ð  õ )ØMñô ð ð ”IÐ% Ð%Ð%ˆDØ�Vˆ|Ðr6   N)r*  r+  r,  rî   r-  r.  r+   rk   )r0  r1  r+   r2  )r—   r˜   r™   r‰   r;  rÀ   r6   r4   r)  r)    s<   € € € € € ð'ð 'ð 'ð 'ðð ð ð ð ð r6   r)  c                  ó   — e Zd ZdS )ÚYieldN)r—   r˜   r™   rÀ   r6   r4   r=  r=  0  s   € € € € € Ø€Dr6   r=  c                  óB   — e Zd Zdd	„Z ed
¬¦  «        dd„¦   «         ZdS )ÚDynamoBytecodeFlattenr4  r)  Úoutr	   Ú	f_globalsúdict[str, object]r+   rk   c                ó>   — || _         || _        || _        d | _        d S r‡   )r4  r@  rA  Ú	gm_inputs©r‹   r4  r@  rA  s       r4   r‰   zDynamoBytecodeFlatten.__init__5  s%   € ð  /ˆÔØˆŒØ"ˆŒØ15ˆŒˆˆr6   ú*do not trace internal dynamo graph capture©Úreasonr0  r+  c                óü   ‡ — dˆ fd„}‰                       |¦  «        \  }}	  ‰ j                             |‰ j        ¬¦  «        |i |¤Ž n.# t          $ r! ‰ j        €t          d¦  «        d ‚‰ j        cY S w xY wt          ‚)	NÚexample_inputsr+  r+   rk   c                 ó    •— | ‰_         t          ‚r‡   )rD  r=  )rJ  r‹   s    €r4   Úbackend_dummyz5DynamoBytecodeFlatten.__call__.<locals>.backend_dummyB  s   ø€ Ø+ˆDŒNÝˆKr6   ©Úcompiled_fnÚextra_globalsz&gm_inputs must not be None after Yield)rJ  r+  r+   rk   )r4  r@  Úforward_callablerA  r=  rD  rr   ÚRuntimeError)r‹   r0  rL  r)   r*   s   `    r4   r;  zDynamoBytecodeFlatten.__call__@  sÐ   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð ×+Ò+¨FÑ3Ô3‰ˆˆfð	"ðˆDŒH×%Ò%Ø)¸¼ð &ñ ô àðàðð ð ð øõ ð 	"ð 	"ð 	"ØŒ~Ð%Ý$Ð%MÑNÔNÐTXÐXØ”>Ð!Ð!Ð!ð	"øøøõ Ðs   ¡'A	 Á	(A4Á3A4N©r4  r)  r@  r	   rA  rB  r+   rk   )r0  r+  r+   r+  ©r—   r˜   r™   r‰   Údynamo_disabler;  rÀ   r6   r4   r?  r?  4  sX   € € € € € ð	6ð 	6ð 	6ð 	6ð €^ÐGÐHÑHÔHðð ð ñ IÔHðð ð r6   r?  c                  óB   — e Zd Zdd	„Z ed
¬¦  «        dd„¦   «         ZdS )ÚDynamoBytecodeUnflattenr4  r)  r@  r	   rA  rB  r+   rk   c                ó0   — || _         || _        || _        d S r‡   )r4  r@  rA  rE  s       r4   r‰   z DynamoBytecodeUnflatten.__init__S  s   € ð  /ˆÔØˆŒØ"ˆŒˆˆr6   rF  rG  Ú	flat_outsúSequence[object]r0  r1  r+  c                óþ   ‡— dˆfd„}|                       |¦  «        \  }}t          j                             ¦   «         5   | j                             || j        ¬¦  «        |i |¤Ž}d d d ¦  «         n# 1 swxY w Y   |S )NrJ  r+  r+   rY  c                 ó   •— ‰S r‡   rÀ   )rJ  rX  s    €r4   rL  z7DynamoBytecodeUnflatten.__call__.<locals>.backend_dummya  s	   ø€ ØÐr6   rM  )rJ  r+  r+   rY  )r4  rs   Ú_CÚ_DisableTorchDispatchr@  rP  rA  )r‹   rX  r0  rL  r)   r*   Úresultss    `     r4   r;  z DynamoBytecodeUnflatten.__call__]  sæ   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð ×+Ò+¨FÑ3Ô3‰ˆˆfÝŒX×+Ò+Ñ-Ô-ð 	ð 	ð�d”h×/Ò/Ø)¸¼ð 0ñ ô àðàðð ˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆs   ¾(A2Á2A6Á9A6NrR  )rX  rY  r0  r1  r+   r+  rS  rÀ   r6   r4   rV  rV  R  sX   € € € € € ð#ð #ð #ð #ð €^ÐGÐHÑHÔHðð ð ñ IÔHðð ð r6   rV  r@  Úmodútuple[Any, ...]rÖ   c                óH	  ‡— | j         €t          d¦  «        ‚| j         }t          j        j                             |¦  «        \  }}t          j        ||f¦  «        }t          j        j         	                    |t          j        ¦  «         | j        j        }|j        Št          |t          j        j        ¦  «        �r|j        ‰_        |j        ‰_        t)          ˆfd„|j        D ¦   «         ¦  «        st          d¦  «        ‚‰j                             |j        ¦  «         |j        ‰_        t0          j        dk    r)dd l}	|	                     t          j        j        ¦  «        }
n t9          t          j        j        dd ¦  «        }
|j                             ¦   «         D ]\  }}|
r||
vr
|‰j        |<   Œ|j                              ¦   «         ‰_        |j!                              ¦   «         ‰_!        |j"                              ¦   «         ‰_"        |j#                              ¦   «         ‰_#        ‰j        s‰j!        r˜t9          ‰dd ¦  «        €t          d¦  «        ‚t          ‰j$        t          j%        j        j&        ¦  «        s$t          d	tO          ‰j$        ¦  «        › �¦  «        ‚‰j$        j(        �t          d
¦  «        ‚dd„}|‰j$        _(        t          |t          j        j        ¦  «        r‰n|}tS          |tU          |¦  «        tW          | ,                    ¦   «         ¦  «        ¦  «        }t[          || |¦  «        }t]          || |¦  «        }t_          ta          tc          j2        |¦  «        ||¦  «        ||¦  «        ‰j3        _4        tk          ‰¦  «         tm          ‰d¦  «        rt          d¦  «        ‚tm          ‰d¦  «        rt          d¦  «        ‚|‰_7        |‰_8        ts          ‰d¦  «         ‰ :                    ¦   «          | j        j;        j<        j=        ‰j>        d<   | j         €t          d¦  «        ‚| j         j?        ‰j>        d<   d‰j>        d         _@        tƒ          ‰j>        d         ¦  «        }| j         jB        |_B        |‰j>        d<   ‰S )Nz"out.backend_input must not be Nonec              3  ó:   •K  — | ]}t          ‰|¦  «         V — Œd S r‡   )rq   )r±   ÚmrC   s     €r4   r¶   z7create_fx_graph_from_captured_output.<locals>.<genexpr>  s0   øè è € ÐGÐG°A•w˜|¨QÑ/Ô/Ð/ÐGÐGÐGÐGÐGÐGr6   zBgraph_module already has attributes conflicting with root._modules)é   é   r   Ú__annotations__Ú_wrapped_callz+graph_module._wrapped_call must not be Nonezexpected _WrappedCall, got z0graph_module._wrapped_call.cls_call must be Noner)   r+  r*   r+   c                óØ  ‡‡‡— d| j         v rt          d¦  «        ‚| j        Š| j        Št	          | ¦  «        j        Šdˆˆˆfd„}	 t          j        || ¦  «        | _        i | _        i | _         t          t	          | ¦  «        | ¦  «        j	        |i |¤Ž| j          
                    d¦  «         ‰| _        ‰| _        S # | j          
                    d¦  «         ‰| _        ‰| _        w xY w)	Nr–   z('forward' should not be in self.__dict__r)   r+  r*   r+   c                ó8   •— ‰| _         ‰| _         ‰| g|¢R i |¤ŽS r‡   )Ú_forward_hooksÚ_forward_pre_hooks)r‹   r)   r*   Ú	fwd_hooksÚfwd_pre_hooksÚoriginal_forwards      €€€r4   Úpatched_forwardzZcreate_fx_graph_from_captured_output.<locals>.dynamo_wrapped_call.<locals>.patched_forwardª  s4   ø€ Ø*3�DÔ'Ø.;�DÔ+Ø+Ð+¨DÐB°4ÐBÐBÐB¸6ÐBÐBÐBr6   ©r)   r+  r*   r+  r+   r+  )Ú__dict__rr   rj  rk  rx   r–   ÚtypesÚ
MethodTyperˆ   r;  Úpop)r‹   r)   r*   ro  rl  rm  rn  s       @@@r4   Údynamo_wrapped_callzAcreate_fx_graph_from_captured_output.<locals>.dynamo_wrapped_call¢  s  øøø€ Ø ¤Ð-Ð-Ý(Ð)SÑTÔTÐTà Ô/�	Ø $Ô 7�Ý#'¨¡:¤:Ô#5Ð ðCð Cð Cð Cð Cð Cð Cð Cð
<Ý#(Ô#3°OÀTÑ#JÔ#J�D”Là*,�DÔ'à.0�DÔ+à;�5¥ d¡¤¨TÑ2Ô2Ô;¸TÐLÀVÐLÐLà”M×%Ò% iÑ0Ô0Ð0Ø*3�DÔ'Ø.;�DÔ+Ð+øð ”M×%Ò% iÑ0Ô0Ð0Ø*3�DÔ'Ø.;�DÔ+Ð;Ð;Ð;Ð;s   ÁAB? Â?*C)Ú_dynamo_bytecode_flattenz;graph_module already has _dynamo_bytecode_flatten attributeÚ_dynamo_bytecode_unflattenz=graph_module already has _dynamo_bytecode_unflatten attributeÚ_param_name_to_sourceÚmodule_call_specsz0out.backend_input must not be None for fake_moder§   TÚtracing_contextrp  )CÚbackend_inputrr   rs   Ú_dynamoÚconvert_framer   r�   Útree_leavesÚ
eval_framer   r   ÚINVALID_INPUTrÿ   rA  rC   rX   ÚnnÚModuleÚ_parametersÚ_buffersÚallÚ_modulesÚupdateÚ_non_persistent_buffers_setÚsysÚversion_infoÚannotationlibÚget_annotationsr  rq  rL   rj  rd   rk  Ú_backward_hooksÚ_backward_pre_hooksrg  rt   Ú_WrappedCallrx   Úcls_callr)  rZ   r   rí   r?  rV  r9  r   r0   r1   ra   r8  r'  rq   rv  rw  r"  r  Úoutput_graphÚexport_metadataÚmodule_call_specrc   r§   Úallow_non_fake_inputsr   Útensor_to_context)r@  r_  r)   r*   r{  r8   r*  Úflat_real_argsrA  r‹  r   r]   rÐ   ru  r4  r:  Údynamo_bytecode_unflattenrz  rC   s                     @r4   Ú$create_fx_graph_from_captured_outputr˜  l  sŽ  ø€ ð ÔÐ ÝÐAÑBÔBÐBØÔ%€MåŒmÔ)×7Ò7¸Ñ<Ô<�G€A€tåÔ'¨¨v¨Ñ7Ô7€NÝ	„MÔ×4Ò4Ø�Ô3ñô ð ð Ô(Ô2€Ià Ô-€LÝ�$�œœÑ(Ô(ñ AFØ#'Ô#3ˆÔ Ø $¤ˆÔÝÐGÐGÐGÐG¸¼ÐGÑGÔGÑGÔGð 	Ý ØTñô ð ð 	Ô×$Ò$ T¤]Ñ3Ô3Ð3Ø37Ô3SˆÔ0ÝÔ˜wÒ&Ð&Ø Ð Ð Ð à'×7Ò7½¼¼ÑHÔHˆKˆKå!¥%¤(¤/Ð3DÀdÑKÔKˆKØœ=×.Ò.Ñ0Ô0ð 	4ð 	4‰KˆD�%Øð 4˜t¨;Ð6Ð6Ø.3�Ô% dÑ+øØ&*Ô&9×&>Ò&>Ñ&@Ô&@ˆÔ#Ø*.Ô*A×*FÒ*FÑ*HÔ*HˆÔ'Ø'+Ô';×'@Ò'@Ñ'BÔ'BˆÔ$Ø+/Ô+C×+HÒ+HÑ+JÔ+JˆÔ(ØÔ&ð +	F¨,Ô*Ið +	Fõ
 �| _°dÑ;Ô;ÐCÝ$Ð%RÑSÔSÐSÝØÔ*­E¬HÔ,AÔ,Nñô ð õ %ØTµ$°|Ô7QÑ2RÔ2RÐTÐTñô ð ð Ô)Ô2Ð>Ý$Ð%WÑXÔXÐXð<ð <ð <ð <ð6 3FˆLÔ&Ô/å% d­E¬H¬OÑ<Ô<ÐFˆ<ˆ<À$€DÝ$ T­3¨t©9¬9µd¸6¿;º;¹=¼=Ñ6IÔ6IÑJÔJ€OÝ3°OÀSÈ)ÑTÔTÐÝ 7¸ÈÈiÑ XÔ XÐå"8Ý•wÔ(¨Ñ-Ô-¨t°VÑ<Ô<ØØ!ñ#ô #€LÔÔõ
 ˜<Ñ(Ô(Ð(Ýˆ|Ð7Ñ8Ô8ð 
ÝØIñ
ô 
ð 	
õ ˆ|Ð9Ñ:Ô:ð 
ÝØKñ
ô 
ð 	
ð -D€LÔ)à.G€LÔ+ÝˆLÐ1Ñ2Ô2Ð2Ø×ÒÑÔÐàÔ Ô-Ô=ÔNð ÔÐ)Ñ*ð ÔÐ ÝÐOÑPÔPÐPØ%(Ô%6Ô%@€LÔ�kÑ"Ø;?€LÔ�kÔ"Ô8Ý$ \Ô%6°{Ô%CÑDÔD€OØ(+Ô(9Ô(K€OÔ%Ø+:€LÔÐ'Ñ(ØÐr6   c                  óZ   ‡ — e Zd Zd!ˆ fd„Zd"d„Zd#d„Zddœd$ˆ fd„Zd%d„Zdddœd&d „Zˆ xZ	S )'r9  Úorig_arg_namesr.  r:  r   r—  r+   rk   c                óŽ   •— t          ¦   «                              ¦   «          || _        || _        || _        d| _        d | _        d S )NF)rˆ   r‰   rš  r:  r—  Ú
wrap_tupleÚ_inputs)r‹   rš  r:  r—  rŒ   s       €r4   r‰   z_DynamoBytecodeCodeGen.__init__æ  sE   ø€ õ 	‰Œ×ÒÑÔÐØ,ˆÔØ'>ˆÔ$Ø)BˆÔ&ØˆŒØ/3ˆŒˆˆr6   r0  r   c                óˆ   ‡— || _          | j        |Ž }t          ¦   «         Š‰�t          j        ˆfd„|¦  «        rd‰_        |S )Nc                ód   •— t          | t          j        ¦  «        o‰                     | ¦  «         S r‡   )rX   rs   rË   Úis_our_fake)Úxr§   s    €r4   ú<lambda>z7_DynamoBytecodeCodeGen.process_inputs.<locals>.<lambda>ú  s*   ø€ •j ¥E¤LÑ1Ô1ÐR¸)×:OÒ:OÐPQÑ:RÔ:RÐ6R€ r6   T)r�  r:  r   r�   Útree_anyr”  )r‹   r0  r^  r§   s      @r4   Úprocess_inputsz%_DynamoBytecodeCodeGen.process_inputsõ  sY   ø€ ØˆŒØ.�$Ô.°Ð7ˆÝ$Ñ&Ô&ˆ	ØÐ ¥V¤_ØRÐRÐRÐRØñ&
ô &
Ð ð /3ˆIÔ+Øˆr6   Úoutputsc                ó^   — |                       || j        ¦  «        }| j        r|f}d | _        |S r‡   )r—  r�  rœ  )r‹   r¥  r^  s      r4   Úprocess_outputsz&_DynamoBytecodeCodeGen.process_outputs  s6   € Ø×0Ò0°¸$¼,ÑGÔGˆØŒ?ð 	!Ø�jˆGØˆŒØˆr6   F©Úexpanded_defÚ	free_varsÚmaybe_return_annotationr;   r©  rF   c               óä  •— | j         }t          |¦  «        dk    r|d         dk    nd}|r|                     dd¦  «         t          |¦  «        }|rdnd}t	          |t          |¦  «        ¦  «        D ]"}||         dk    rd}||v r	|dz  }||v °	|||<   Œ#t          ¦   «                              |d d …         ||¬¦  «        }	t          |¦  «        dk    r|	|                      |||¦  «        z  }	|	S )Nr   r‹   Fé   Úself_r8   r¨  )rš  rZ   Úinsertr   rÊ   rˆ   Ú
gen_fn_defÚgen_var_bindings)r‹   rª  r«  r©  Úfn_argsÚhas_orig_selfÚ	first_posrÆ   r€   Úfn_definitionrŒ   s             €r4   r°  z!_DynamoBytecodeCodeGen.gen_fn_def  s*  ø€ ð Ô%ˆÝ25°g±,´,ÀÒ2BÐ2B˜ œ vÒ-Ð-ÈˆØð 	(Ø×Ò˜Q Ñ'Ô'Ð'õ �w‘-”-ˆØ&Ð-�A�A¨Aˆ	Ý�y¥# g¡,¤,Ñ/Ô/ð 	&ð 	&ˆAØ�qŒz˜VÒ#Ð#Ø"�Ø 'Ð)Ð)Ø ‘O�Hð  'Ð)Ð)à%�˜‘
øÝ™œ×*Ò*Ø�A�A�AŒJÐ/¸lð +ñ 
ô 
ˆõ ˆy‰>Œ>˜AÒÐØ˜T×2Ò2°7¸IÀ|ÑTÔTÑTˆMØÐr6   r²  c                óè   — d„ |D ¦   «         }t          |¦  «        dk    rd}n5t          |¦  «        dk    r|d         › d�}nd                     |¦  «        › }d|› dd                     |¦  «        › d�S )	Nc                óv   — g | ]6}|                      d ¦  «        d                               d¦  «        d         ‘Œ7S )ú:r   ú#)Úsplit)r±   r¡  s     r4   r³   z;_DynamoBytecodeCodeGen.gen_var_bindings.<locals>.<listcomp>4  s9   € ÐOÐOÐOÀ˜aŸgšg c™lœl¨1œo×3Ò3°CÑ8Ô8¸Ô;ÐOÐOÐOr6   r   r9   r­  ú, z
    _fn_args = (z)
    z,, = self._dynamo_bytecode_flatten(*_fn_args))rZ   r  )r‹   r²  rª  r©  Úwithout_annotationÚfn_signatures         r4   r±  z'_DynamoBytecodeCodeGen.gen_var_bindings1  s§   € ð PÐOÀYÐOÑOÔOÐÝˆw‰<Œ<˜1ÒÐØˆLˆLÝ�‰\Œ\˜QÒÐØ% aœjÐ,Ð,Ð,ˆLˆLà"Ÿiši¨Ñ0Ô0Ð2ˆLðSØðSð Sà	‡Y‚YÐ!Ñ"Ô"ðSð Sð Sð 	Sr6   N)ÚdescsÚrepr_fnÚoutput_argsútorch.fx.node.Argumentr¾  úobject | Noner¿  r¨   c               ó„   ‡— ‰€t           Šdd                     ˆfd„|D ¦   «         ¦  «        › d�}| j        rd|› d�}d|› �S )Nz!self._dynamo_bytecode_unflatten((r»  c                ó&   •— g | ]} ‰|¦  «        ‘ŒS rÀ   rÀ   )r±   Úar¿  s     €r4   r³   z:_DynamoBytecodeCodeGen.generate_output.<locals>.<listcomp>I  s"   ø€ ÐAbÐAbÐAbÐQRÀ'À'È!Á*Ä*ÐAbÐAbÐAbr6   z,), _fn_args)ú(z,)zreturn )Úreprr  rœ  )r‹   rÀ  r¾  r¿  Úreturneds      ` r4   Úgenerate_outputz&_DynamoBytecodeCodeGen.generate_output?  si   ø€ ð ˆ?ÝˆGàr°t·y²yÐAbÐAbÐAbÐAbÐVaÐAbÑAbÔAbÑ7cÔ7cÐrÐrÐrˆØŒ?ð 	(Ø'˜8Ð'Ð'Ð'ˆHØ#˜Ð#Ð#Ð#r6   )rš  r.  r:  r   r—  r   r+   rk   )r0  r   r+   r   )r¥  r   r+   r   )rª  r.  r«  r;   r©  rF   r+   r;   )r²  r.  rª  r.  r©  rF   r+   r;   )rÀ  rÁ  r¾  rÂ  r¿  r¨   r+   r;   )
r—   r˜   r™   r‰   r¤  r§  r°  r±  rÉ  rš   r›   s   @r4   r9  r9  å  sÑ   ø€ € € € € ð4ð 4ð 4ð 4ð 4ð 4ðð ð ð ð"ð ð ð ð #ð"ð "ð "ð "ð "ð "ð "ð "ðHSð Sð Sð Sð$  $Ø"ð$ð $ð $ð $ð $ð $ð $ð $ð $ð $r6   r9  r  Úconstraintsúlist[Constraint] | Nonec                óÐ  ‡ ‡— t          ‰ t          j        j        ¦  «        r½dd„}d}g }‰ j        j        D ]H}|j        r|sd}|                     d¦  «         |                     |j         ||¦  «        z   ¦  «         ŒId	d
 	                    |¦  «        › dd
 	                    d„ ‰ j        j        D ¦   «         ¦  «        › d�}i }t          |d‰ i|¦  «         |d         Š dˆˆ fd„}|S )NÚargútorch.Argumentr+   r;   c                óB   — |                       ¦   «         r
d| j        ›�S dS )Nú=r9   )Úhas_default_valueÚdefault_value)rÍ  s    r4   Údefault_annotationz;dynamo_graph_capture_for_export.<locals>.default_annotationU  s,   € Ø×$Ò$Ñ&Ô&ð 1Ø0˜3Ô,Ð0Ð0Ð0Ø�2r6   FTÚ*z
def op_overload_wrapper(r»  z):
    return op(c                ó0   — g | ]}|j         › d |j         › �‘ŒS )rÐ  )r]   )r±   rÍ  s     r4   r³   z3dynamo_graph_capture_for_export.<locals>.<listcomp>c  s*   € ÐSÐSÐS°s˜SœXÐ2Ð2¨¬Ð2Ð2ÐSÐSÐSr6   z)
ro   Úop_overload_wrapperr)   r   r*   c            
     óþ  •— t           j        j        j        rt	          d¦  «        ‚t          ¦   «         5  t           j        j                             dd¬¦  «        5  t          ¦   «         5  t          d¦  «        5  t          ‰| |‰¬¦  «        }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          |‰| |¦  «        }|S )Nz"install_free_tensors must be FalseFÚwarn)Úreplay_side_effectsÚside_effect_replay_policyr
   )rÊ  )rs   r|  ÚconfigÚinstall_free_tensorsrr   r   Úpatchr   r   r
   r˜  )r)   r*   r@  rC   rÊ  r  s       €€r4   Úinnerz.dynamo_graph_capture_for_export.<locals>.inneri  s  ø€ ÝŒ=ÔÔ4ð 	GÝ Ð!EÑFÔFÐFå$Ñ&Ô&ð	ð 	åŒMÔ ×&Ò&Ø$)ÀVð 'ñ ô ð	ð 	õ
  Ñ!Ô!ð	ð 	õ Ð,Ñ-Ô-ð	ð 	õ $ØØØØ'ð	ñ ô ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ <¸CÀÀTÈ6ÑRÔRˆØÐs}   µ'C ÁC	Á+B2Á;B	ÂB2ÂBÂB2Â"BÂ#B2Â&C	Â2B6Â6C	Â9B6Â:C	Â=C Ã	C	ÃC ÃC	ÃC Ã C$Ã'C$)rÍ  rÎ  r+   r;   )r)   r   r*   r   r+   r   )rX   rs   r  r
  Ú_schemaÚ	argumentsÚ
kwarg_onlyr[   r]   r  Úexec)	r  rÊ  rÓ  Úhas_kwarg_onlyÚarg_listrÍ  Úfunc_strr@  rÞ  s	   ``       r4   Údynamo_graph_capture_for_exportræ  O  sG  øø€ õ �"•e”jÔ+Ñ,Ô,ð (ð	ð 	ð 	ð 	ð
 ˆØˆØ”:Ô'ð 	@ð 	@ˆCØŒ~ð % nð %Ø!%�Ø—’ Ñ$Ô$Ð$Ø�OŠO˜CœHÐ'9Ð'9¸#Ñ'>Ô'>Ñ>Ñ?Ô?Ð?Ð?ðØŸš 8Ñ,Ô,ðð à�yŠyÐSÐS¸b¼jÔ>RÐSÑSÔSÑTÔTðð ð ˆð ˆÝˆX˜˜b�z 3Ñ'Ô'Ð'ØÐ&Ô'ˆðð ð ð ð ð ð ð( €Lr6   )rÊ  r   ú#Callable[..., torch.fx.GraphModule]c               ó$   ‡ ‡‡— |Š|Šdˆˆˆ fd„}|S )a  
    Improved dynamo graph capture using transformer approach with proper fake tensor handling.

    This function creates a capture instance that handles:
    1. PyTree flattening/unflattening with proper input ordering
    2. Dynamo graph capture with export-specific context
    3. FX graph transformation for export compatibility
    4. Proper fake tensor metadata preservation
    5. Dynamic dimension constraint handling

    Notable improvements over manual approach:
    - Uses FX Transformer for cleaner graph manipulation
    - Properly handles fake tensor metadata and dynamic dimensions
    - Preserves all necessary metadata for export
    - More robust error handling and edge case management

    TODO:
    1. Are we actually gonna run the bytecode?
    2. Need to attach guards
    r)   r   r*   r+   rD   c                 óv  •‡— t          ¦   «         5  t          j        | |f¦  «        \  }}t          |t          j        ¦  «         t          ‰|¦  «        }t          ‰t          j	        j
        ¦  «        r‰j        n‰}‰Š‰}ddlm}  |¦   «          t          j        j                             ddddddddt          j        j        j        ¬¦	  «	        }t%          ¦   «         5  t'          d¦  «        5  |5  t)          |t+          |¦  «        ‰d¬¦  «        }	|	j        j        €t1          d¦  «        ‚g }
|	j        �%|	j        j        }|	j        j        }|	j        j        }
nˆt          j                             t          j	         
                    ¦   «         t          j                             ¦   «         ¦  «        }|j          !                    d ¦  «         | "                    ¦   «          d }tG          ||||	| ||¦  «         |	j        j        j$        }|j%        }|j&        }|j'        }|j(        }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   ˆfd	„|D ¦   «         }i }|D ]E}||         }t          |t          j        j)        j*        ¦  «        rtW          |¦  «        ||j,        <   ŒF| -                    ¦   «         D ]\  }}|
|         ||<   Œt]          |||||||¦  «         /                    ¦   «         }ta          tc          te          tg          j4        |¦  «        | |¦  «        ||¦  «        ¦  «        |j         _5        | "                    ¦   «          tm          |d¦  «         to          |¦  «         ||j8        d
<   ||j8        d<   |cd d d ¦  «         S # 1 swxY w Y   d S )Nr­  )ÚresetTF)	Úspecialize_intÚspecialize_floatÚassume_static_by_defaultÚautomatic_dynamic_shapesÚ capture_dynamic_output_shape_opsÚcapture_scalar_outputsÚ'constant_fold_autograd_profiler_enabledÚlog_graph_in_out_metadatarÜ  r
   )rÊ  Ú _is_export_deprecated_do_not_usez5output_graph must not be None after fullgraph_capturec                ó2   •‡— g | ]Šˆfd „‰pdD ¦   «         ‘ŒS )c                óÀ   •— h | ]Z}|j         t          ‰¦  «        k    r@t          |t          ¦  «        s+|j        j        j        |j        j        j        k    ¯S|j        ’Œ[S rÀ   )	Út_idÚidrX   r   Úconstraint_rangeÚvrÚlowerÚupperÚdim)r±   Úcr¡  s     €r4   ú	<setcomp>zM_dynamo_graph_capture_for_export.<locals>.inner.<locals>.<listcomp>.<setcomp>ï  si   ø€ ð ð ð ààœ¥" Q¡%¤%š˜Ý *¨1Õ.@Ñ AÔ Að (àÔ.Ô1Ô7¸1Ô;MÔ;PÔ;VÒVÐVð ”Eð
 WÐVÐVr6   rÀ   rÀ   )r±   r¡  rÊ  s    @€r4   r³   zC_dynamo_graph_capture_for_export.<locals>.inner.<locals>.<listcomp>î  sR   øø€ ð &ð &ð &ð ðð ð ð à)Ð/¨Rðñ ô ð&ð &ð &r6   ry  r§   )9r   r�   r’   r   r   r€  rƒ   rX   rs   r�  r‚  r–   r9   rê  r|  rÛ  rÝ  Úinstall_free_tensors_for_exportr   r   r
   rY   rÿ   r‘  rr   r{  rC   r§   rJ  rt   r7  ÚGraphra   rµ   r  r  r’  Úgraph_input_idx_to_local_sourceÚoutput_return_typer•   r“  rä   r   rZ   rÝ   rL   r�   rø   r   r   r   r0   r1   r8  rj   r�   rc   )r)   r*   rŸ   r…   rû   rý   r   rê  Údynamo_config_ctxr@  rJ  ra   r§   r’  r©   r¥   r•   r“  r¡   r£   Úinprä   Úreal_idxÚ	graph_idxÚtransformed_graphrÊ  Ú_constraintsÚ_dynamic_shapesr_  s                            @€€€r4   rÞ  z/_dynamo_graph_capture_for_export.<locals>.innerž  sa  øø€ å%Ñ'Ô'ð C	%ð C	%Ý#)Ô#6¸¸f°~Ñ#FÔ#FÑ ˆK˜Ý# KµÔ1LÑMÔMÐMÝ+¨C°Ñ9Ô9ˆOÝ+5°c½5¼8¼?Ñ+KÔ+KÐT˜CœK˜KÐQTˆMà3?ˆKàð ð  ÐÐÐÐÐàˆE‰GŒGˆGå %¤Ô 4× :Ò :Ø#Ø!%Ø)-Ø).Ø15Ø'+Ø8<Ø*.õ &+¤]Ô%9Ô%Yð !;ñ !ô !Ðõ$ $Ñ%Ô%ð+Dð +DåÐ0Ñ1Ô1ð+Dð +Dð "ð+Dð +Dõ
 (Ø#Ý˜+Ñ&Ô&Ø ,Ø59ð	ñ ô �ð Ô+Ô8Ð@Ý(ØOñô ð ð -/�ØÔ$Ð0ØÔ-Ô:�EØ #Ô 1Ô ;�IØ%(Ô%6Ô%E�N�Nå!œH×0Ò0µ´·²Ñ1BÔ1BÅEÄHÇNÂNÑDTÔDTÑUÔU�EØ”K×&Ò& tÑ,Ô,Ð,Ø—O’OÑ%Ô%Ð%Ø $�Iå6Ø#Ø!ØØØØØ"ñô ð ð #&Ô":Ô"GÔ"W�Ø.ÔN�Ø#2Ô#EÐ Ø*Ô3�Ø#2Ô#CÐ ðW+Dð +Dð +Dñ +Dô +Dð +Dð +Dð +Dð +Dð +Dð +Døøøð +Dð +Dð +Dð +Dð +Dð +Dð +Dñ +Dô +Dð +Dð +Dð +Dð +Dð +Dð +Døøøð +Dð +Dð +Dð +Dð +Dð +Dð +Dñ +Dô +Dð +Dð +Dð +Dð +Dð +Dð +Døøøð +Dð +Dð +Dð +Dð\&ð &ð &ð &ð %ð&ñ &ô &Ð"ð" 13ÐØ#ð Mð M�Ø% cÔ*�Ý˜f¥e¤mÔ&:Ô&HÑIÔIð MÝ69Ð:KÑ6LÔ6LÐ% f¤lÑ3øà'8×'>Ò'>Ñ'@Ô'@ð Bð BÑ#�˜)Ø(6°yÔ(A�˜HÑ%Ð%õ !7ØØØ&Ø!Ø ØØñ!ô !÷ Ši‰kŒkð õ 0>ÝÝ"¥7Ô#4°]Ñ#CÔ#CÀTÈ6ÑRÔRØØñô ñ0ô 0ÐÔ#Ô,ð ×'Ò'Ñ)Ô)Ð)å/Ð0AÀ4ÑHÔHÐHÝÐ/Ñ0Ô0Ð0à:JÐÔ"Ð#6Ñ7Ø2;ÐÔ" ;Ñ/à$ðGC	%ð C	%ð C	%ð C	%ñ C	%ô C	%ð C	%ð C	%ð C	%ð C	%ð C	%ð C	%øøøð C	%ð C	%ð C	%ð C	%ð C	%ð C	%s€   ‘CN.Ã I!Ã0I
Ã3D4H3	È'I
È3H7È7I
È:H7È;I
È>I!É
IÉI!ÉIÉI!ÉN.É!I%	É%N.É(I%	É)D8N.Î.N2Î5N2)r)   r   r*   r   r+   rD   rÀ   )r_  rÊ  r   rÞ  r  r	  s   `   @@r4   Ú _dynamo_graph_capture_for_exportr
  €  sI   øøø€ ð6 %€OØ€LðE%ð E%ð E%ð E%ð E%ð E%ð E%ð E%ðN €Lr6   )
r&   r   r'   r(   r)   r   r*   r   r+   r   )r:   r;   r+   r;   )F)rC   rD   rE   rF   r+   rD   )rC   rD   r+   rk   )rû   rü   rý   r(   r§   rþ   rÿ   r	   r)   r   r*   r   r   r  r+   rk   )r  rD   r+   rk   )r%  rD   r+   rk   )
r@  r	   r_  r   r)   r`  r*   rÖ   r+   rD   r‡   )r  r(   rÊ  rË  r+   r(   )r_  r(   rÊ  rË  r   r  r+   rç  )_Ú
__future__r   r0   Úloggingr‰  r  rr  Úcollectionsr   Útypingr   r   r   r   r  rs   Útorch.fxÚtorch.utils._pytreeÚutilsÚ_pytreer�   Útorch._dynamo.convert_framer	   r
   r   Útorch._dynamo.decoratorsr   rT  Útorch._dynamo.eval_framer   r   Útorch._dynamo.excr   Útorch._dynamo.sourcer   Útorch._dynamo.utilsr   r   Útorch._export.utilsr   Útorch._guardsr   r   Útorch.export.dynamic_shapesr   r   Ú%torch.fx.experimental.symbolic_shapesr   r   r   Útorch.fx.graphr   r   Úcollections.abcr   r   r   Útorch._dynamo.output_graphr    Útorch._subclasses.fake_tensorr!   r"   Útorch.fx.noder#   r$   r%   Ú	getLoggerr—   r  r5   r=   rB   rj   r�   r�  r‚  rƒ   rŽ   rt   ÚTransformerr�   r  r$  r'  r)  Ú	Exceptionr=  r?  rV  r˜  ra   ÚCodeGenr9  ræ  r
  rÀ   r6   r4   ú<module>r&     sÝ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à €€€à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ >Ð >Ð >Ð >Ð >Ð >Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ +Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ð ð ð ð ð ð
 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð ð /Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à;Ð;Ð;Ð;Ð;Ð;Ø<Ð<Ð<Ð<Ð<Ð<ØÐÐÐÐÐØ.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à€GˆC�L„L€Ø€gÔ˜Ñ!Ô!€ð&ð &ð &ð &ð*ð ð Ð ðð ð ð ð CHðYð Yð Yð Yð Yðx0<ð 0<ð 0<ð 0<ðf
6ð 
6ð 
6ð 
6ð 
6�E”H”Oñ 
6ô 
6ð 
6ð  �ZÐ 4°{ÀJÐ6OÑPÔPÐ ðð ð ð ð ˜UœXÔ1ñ ô ð ðDA)ð A)ð A)ð A)ðH*ð *ð *ð *ð:ð :ð :ð :ð(ð (ð (ð (ð (ñ (ô (ð (ðV	ð 	ð 	ð 	ð 	ˆIñ 	ô 	ð 	ðð ð ð ð ñ ô ð ð<ð ð ð ð ñ ô ð ð4vð vð vð vðrg$ð g$ð g$ð g$ð g$˜UœXœ^Ô3ñ g$ô g$ð g$ðX ,0ð.ð .ð .ð .ð .ðh ,0ØEIð	eð eð eð eð eð eð eð er6   