Ë
    ÃÓ^j9ª  ã                  ó¶  — 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j„                  eC«      ZD	 	 	 	 	 	 	 	 	 	 d3d„ZEg d¢ZFd4d„ZG	 d5	 	 	 	 	 d6d„ZHd7d„ZI G d„ dej”                  j–                  «      ZL edddg«      ZM G d „ d!ejœ                  jž                  «      ZP	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d8d"„ZQd9d#„ZRd:d$„ZS G d%„ d&«      ZT G d'„ d(eU«      ZV G d)„ d*«      ZW G d+„ d,«      ZX	 	 	 	 	 	 	 	 	 	 d;d-„ZY G d.„ d/ejœ                  j´                  j¶                  «      Z\	 d<	 	 	 	 	 d=d0„Z]ddd1œ	 	 	 	 	 	 	 d>d2„Z^y)?é    )Ú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ÚTc                ó¦   — 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Ú	signatureÚargs)Úconstraint_violation_errorÚfuncr,   Úkwargsr'   r(   Úorig_sigÚflat_input_pathss           új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/functional_export.pyÚpost_process_error_msgr3   -   s\   € ÷ Hä× Ñ  Ó&€HÙ'¨¨v¨¸ÓAÐØ!×&Ò&áÐ7×<Ñ<¸QÑ?ÐAQÓRð+
Ð"Ô'ð &Ð%ó    ))Ú__export_root_Ú_)z_export_root.Ú )z._export_rootr7   c                óJ   — | }t         D ]  \  }}|j                  ||«      }Œ |S )z;Generic utility to clean export_root patterns from strings.)ÚEXPORT_ROOT_REPLACEMENTSÚreplace)ÚtextÚresultÚpatternÚreplacements       r2   Úclean_export_root_stringr?   I   s0   € à€FÜ 8ò 6Ñˆ�Ø—‘ ¨Ó5‰ð6à€Mr4   c                ó  ‡— 	 	 	 	 dˆfd„}dd„}| j                   j                  D ]‚  }d|j                  v r0 ||j                  d   j                  «       «      |j                  d<   |j                  j	                  dd«      }|sŒ` ||j                  «       «      |j                  d<   Œ„ d| j                  v rMi }| j                  d   j                  «       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_stackc                óš   •— d| v r| d= i }| j                  «       D ]-  \  }\  }}t        |«      }t        |«      }‰r|dk(  rŒ'||f||<   Œ/ |S )NÚL__self____export_rootz	L['self'])Úitemsr?   )rA   Úcleaned_stackÚkeyÚ
child_nameÚchild_classÚ	clean_keyÚ
clean_nameÚis_inline_builtins          €r2   Ú_process_nn_module_stackzEclean_nn_module_stack_and_source_fn.<locals>._process_nn_module_stackm   s}   ø€ ð $ Ñ6ØÐ 8Ð9ð ˆØ.=×.CÑ.CÓ.Eò 	AÑ*ˆCÑ*�*˜kä0°Ó5ˆIô 2°*Ó=ˆJñ ! Z°;Ò%>Øà(2°KÐ'@ˆM˜)Ò$ð	Að Ðr4   Úsource_fn_stackc                ó  — g }| D ]w  }t        |t        «      rTt        |«      dk(  rF|\  }}t        |t        «      rt	        |«      }|j                  ||f«       ŒU|j                  |«       Œg|j                  |«       Œy |S )Né   )Ú
isinstanceÚtupleÚlenÚstrr?   Úappend)rM   rE   ÚitemÚnameÚclsrJ   s         r2   Ú_process_source_fnz?clean_nn_module_stack_and_source_fn.<locals>._process_source_fnƒ   s€   € ØˆØ#ò 
	+ˆDÜ˜$¤Ô&¬3¨t«9¸ª>Ø ‘	��cÜ˜d¤CÔ(Ü!9¸$Ó!?�JØ!×(Ñ(¨*°cÐ):Õ;à!×(Ñ(¨Õ.ð ×$Ñ$ TÕ*ð
	+ð Ðr4   NÚ dynamo_flat_name_to_original_fqn)rA   údict[str, tuple[str, T]]ÚreturnrZ   )rM   úIterable[T]r[   r\   )ÚgraphÚnodesÚmetaÚcopyÚgetrD   r?   )	Úgraph_modulerK   rL   rX   ÚnoderM   Úclean_name_to_original_fqnÚ	flat_nameÚoriginal_fqns	    `       r2   Ú#clean_nn_module_stack_and_source_fnrg   Q   s   ø€ ð8Ø1ðà	!õó,ð  ×"Ñ"×(Ñ(ò VˆØ §	¡	Ñ)Ù+CØ—	‘	Ð+Ñ,×1Ñ1Ó3ó,ˆD�I‰IÐ'Ñ(ð Ÿ)™)Ÿ-™-Ð(9¸4Ó@ˆÚÙ+=¸o×>RÑ>RÓ>TÓ+UˆD�I‰IÐ'Ò(ðVð *¨\×->Ñ->Ñ>à%'Ð"Ø'3×'8Ñ'8Ø.ñ(
ç
‰%‹'ò	Ñ#ˆI�|ô )¨Ó6ð 'Ô'?À	Ó'JÒKð	ð 'ð 	×ÑÐ<Ñ=ð Ðr4   c                ó¶  — i }| j                   j                  D �]½  }|j                  dk(  r¼|j                  }t	        |«      }||k7  r ||_        t        | |«      st        d|›�«      ‚t        j                  j                  j                  | |«      }t        j                  j                  j                  || |«       t        j                  j                  j                  | |«       |j                  dk(  sŒß|j                  }t        |t        «      st        dt        |«      › �«      ‚t	        |«      }t        |t        «      st        dt        |«      › �«      ‚t	        |j                   «      }||k(  r�Œ`||v r||   |_        ||_        �Œw| j#                  |«      }| j%                  |«       | j'                  ||«       ||_        ||_        |||<   �ŒÀ y)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)r]   r^   ÚopÚtargetr?   ÚhasattrÚAssertionErrorÚtorchÚfxrb   Ú	_get_attrÚ_assign_attrÚ	_del_attrrP   rS   ÚtyperV   Úget_submoduleÚdelete_submoduleÚadd_submodule)rb   Úclean_named_module_maprc   Ú
old_targetÚ
new_targetÚparamÚnew_namerl   s           r2   Úclean_export_rootr}   ­   s½  € ð
 .0Ðð ×"Ñ"×(Ñ(ó (<ˆØ�7‰7�jÒ ØŸ™ˆJÜ1°*Ó=ˆJØ˜ZÒ'Ø(�”Ü˜|¨ZÔ8Ü(Ø9¸*¸ÐHóð ô Ÿ™×-Ñ-×7Ñ7¸ÀjÓQ�Ü—‘×%Ñ%×2Ñ2°5¸,È
ÔSÜ—‘×%Ñ%×/Ñ/°¸jÔIà�7‰7�mÓ#ØŸ™ˆJÜ˜j¬#Ô.Ü$Ø9¼$¸zÓ:JÐ9KÐLóð ô 2°*Ó=ˆJÜ˜j¬#Ô.Ü$Ø9¼$¸zÓ:JÐ9KÐLóð ô 0°·	±	Ó:ˆHØ˜ZÒ'Ùð Ð3Ñ3Ø4°ZÑ@�”Ø$�”	ÙØ!×/Ñ/°
Ó;ˆFØ×)Ñ)¨*Ô5Ø×&Ñ& z°6Ô:Ø$ˆDŒKØ ˆDŒIØ1;Ð" :Ó.ñQ(<r4   c                  ó(   ‡ — e Zd Zdˆ fd„Zdd„Zˆ xZS )ÚModuleToTracec                ó>   •— t         ‰| �  «        || _        || _        y ©N)ÚsuperÚ__init__Ú_export_rootÚin_spec)ÚselfÚfoor…   Ú	__class__s      €r2   rƒ   zModuleToTrace.__init__á   s   ø€ Ü‰ÑÔØˆÔØˆ�r4   c                ó´   — t        j                  || j                  «      \  }} | j                  |i |¤Ž}t        j                  |«      \  }}t        ||«      S r�   )ÚpytreeÚtree_unflattenr…   r„   Útree_flattenÚExportTracerOutput)r†   Ú	flat_argsr,   r/   ÚresÚout_flatÚout_specs          r2   ÚforwardzModuleToTrace.forwardæ   sU   € Ü×,Ñ,¨Y¸¿¹ÓE‰ˆˆfØˆd×Ñ Ð0¨Ñ0ˆÜ#×0Ñ0°Ó5Ñˆ�(Ü! (¨HÓ5Ð5r4   )r‡   r   r…   r   r[   ÚNone)rŽ   r   r[   r�   )Ú__name__Ú
__module__Ú__qualname__rƒ   r’   Ú__classcell__©rˆ   s   @r2   r   r   à   s   ø„ õ÷
6r4   r   r�   rŽ   r‘   c                  ó¬   ‡ — 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.c                ó$  •— t         ‰	| �  |«       t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚|| _        || _        || _        || _        || _        |xs i | _	        |j                  j                  D �cg c]  }|j                  dk(  sŒ|‘Œ c}| _        t        d„ |j                  j                  D «       «      | _        i | _        | j#                  «        i | _        | j'                  «        y c c}w )Nzflat_args_dynamic_dims length (z!) must match flat_inputs length (ú)Úplaceholderc              3  ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)ÚoutputN)rk   )Ú.0Úns     r2   ú	<genexpr>z2DynamoGraphTransformer.__init__.<locals>.<genexpr>  s   è ø€ ÒR aÀÇÁÈÓAQ¤ÑRùs   ‚—)r‚   rƒ   rR   rn   Úflat_inputsÚflat_args_dynamic_dimsÚgraph_input_orderÚgraph_output_mapÚ	fake_modeÚgraph_inputsr]   r^   rk   ÚplaceholdersÚnextÚoutput_nodeÚnew_input_nodesÚ_create_flattened_inputsÚold_to_new_mappingÚ_create_placeholder_mapping)
r†   Úmoduler£   r¤   r¥   r¦   r§   r¨   r¡   rˆ   s
            €r2   rƒ   zDynamoGraphTransformer.__init__ô   s  ø€ ô 	‰Ñ˜Ô äÐ%Ó&¬#¨kÓ*:Ò:Ü Ø1´#Ð6LÓ2MÐ1Nð O2Ü25°kÓ2BÐ1CÀ1ðFóð ð
 'ˆÔØ&<ˆÔ#Ø!2ˆÔØ 0ˆÔØ"ˆŒØ(Ò.¨BˆÔð )/¯©×(:Ñ(:ÖT 1¸a¿d¹dÀmÓ>SšQÒTˆÔÜÑR¨6¯<©<×+=Ñ+=ÔRÓRˆÔð :<ˆÔØ×%Ñ%Ô'ð #%ˆÔØ×(Ñ(Õ*ùò Us   ÂDÂ'Dc                óž  •— t        t        | j                  «      «      D �]%  }t        ‰| �  d|› �di «      }|| j
                  v rw| j
                  |   }|t        | j                  «      k  rP| j                  |   }|j                  j                  «       D ]$  \  }}|dk7  sŒ||j                  j                  |<   Œ& | j                  �þt        | j                  |   t        j                  «      r×| j                  j                  | j                  |   t        t        t        | j                  |   j                   «      «      D �cg c]3  }|| j"                  |   v rt$        j&                  nt$        j(                  ‘Œ5 c}dgt        | j                  |   j                   «      z  ¬«      ¬«      |j                  j                  d<   npt+        | j                  |   d«      r1| j                  |   j,                  |j                  j                  d<   n&| j                  |   |j                  j                  d<   || j.                  |<   �Œ( yc c}w )zKCreate new placeholder nodes for flattened inputs with proper fake tensors.Úarg_© ÚvalN)Údynamic_sizesÚconstraint_sizes)Úsymbolic_context)ÚrangerR   r£   r‚   r�   r¥   r©   r_   rD   rc   r§   rP   ro   ÚTensorÚfrom_tensorr   Úshaper¤   r   ÚDYNAMICÚSTATICrm   r´   r¬   )	r†   Úir�   Úgraph_placeholder_idxÚorig_placeholderrF   ÚvalueÚdrˆ   s	           €r2   r­   z/DynamoGraphTransformer._create_flattened_inputs  s!  ø€ ä”s˜4×+Ñ+Ó,Ó-ó &	2ˆAÜ™'Ñ-°°Q°C¨j¸"¸bÓAˆKð �D×*Ñ*Ñ*à(,×(>Ñ(>¸qÑ(AÐ%Ø(¬3¨t×/@Ñ/@Ó+AÒAØ'+×'8Ñ'8Ð9NÑ'OÐ$à&6×&;Ñ&;×&AÑ&AÓ&Cò ?™
˜˜UØ %›<Ø9>˜K×,Ñ,×1Ñ1°#Ò6ð?ð
 �~‰~Ð)¬jØ× Ñ  Ñ#¤U§\¡\ô/ð 04¯~©~×/IÑ/IØ×$Ñ$ QÑ'Ü%=ô &+¬3¨t×/?Ñ/?ÀÑ/B×/HÑ/HÓ+IÓ%Jö'ð !"ð $%¨×(CÑ(CÀAÑ(FÑ#Fô !+× 2Ò 2ä%/×%6Ñ%6ñ!7ò'ð +/¨´#°d×6FÑ6FÀqÑ6I×6OÑ6OÓ2PÑ)Pô
&ð 0Jó 0�× Ñ ×%Ñ% eÒ,ô ˜×)Ñ)¨!Ñ,¨eÔ4Ø/3×/?Ñ/?ÀÑ/B×/FÑ/F�× Ñ ×%Ñ% eÒ,à/3×/?Ñ/?ÀÑ/B�× Ñ ×%Ñ% eÑ,ð '2ˆD× Ñ  Ó#ñM&	2ùò*'s   Å8I
c                óÔ   — | j                   j                  «       D ]K  \  }}|t        | j                  «      k  sŒ| j                  |   }| j                  |   }|| j
                  |<   ŒM y)z1Create mapping from old placeholders to new ones.N)r¥   rD   rR   r©   r¬   r®   )r†   Úuser_input_idxr¿   Úold_placeholderÚnew_placeholders        r2   r¯   z2DynamoGraphTransformer._create_placeholder_mappingC  sn   € ð 6:×5KÑ5K×5QÑ5QÓ5Sò 	KÑ1ˆNÐ1Ø$¤s¨4×+<Ñ+<Ó'=Ó=Ø"&×"3Ñ"3Ð4IÑ"J�Ø"&×"6Ñ"6°~Ñ"F�Ø;J�×'Ñ'¨Ò8ñ		Kr4   c                ó®  •— | j                   | j                  v rË| j                  | j                      }dD ]K  }|| j                   j                  v sŒ| j                   j                  |   |j                  j                  |<   ŒM d| j                   j                  v rHd|j                  j                  vr0| j                   j                  d   |j                  j                  d<   |S | j                  j                  | j                   «      }|| j                  v �r-| j                  |   }t        |t        «      �s| j                   j                  j                  d«      xs% | j                   j                  j                  d«      }|�¿d|› �}	t        |t        j                  «      r| j                  j                  |	|«       nt        | j                  |	|«       | j                  j!                  d|	di «      }
| j                   j                  j#                  «       |
j                  _        ||
j                  j                  d<   |
S t$        ‰| �M  |||«      S )z1Replace old placeholders with new flattened ones.)Útensor_dictÚexample_valueÚunbacked_bindingsr´   rÉ   Ú
_captured_ri   r³   )Úcurrent_noder®   r_   rc   r©   Úindexr¨   rP   r   ra   ro   r¹   r°   Úregister_bufferÚsetattrÚtracerÚcreate_proxyr`   r‚   r�   )r†   rl   r,   r/   Únew_argrF   Úplaceholder_idxÚsourceÚexample_valÚ	attr_namer<   rˆ   s              €r2   r�   z"DynamoGraphTransformer.placeholderM  s  ø€ ð
 ×Ñ × 7Ñ 7Ñ7Ø×-Ñ-¨d×.?Ñ.?Ñ@ˆGð Mò I�Ø˜$×+Ñ+×0Ñ0Ò0Ø-1×->Ñ->×-CÑ-CÀCÑ-H�G—L‘L×%Ñ% cÒ*ðIð
 ˜×)Ñ)×.Ñ.Ñ.°5ÀÇÁ×@QÑ@QÑ3QØ+/×+<Ñ+<×+AÑ+AÀ%Ñ+H�—‘×!Ñ! %Ñ(àˆNð #×/Ñ/×5Ñ5°d×6GÑ6GÓHˆOØ $×"3Ñ"3Ò3Ø×*Ñ*¨?Ñ;�Ü! &¬-Õ8Ø"&×"3Ñ"3×"8Ñ"8×"<Ñ"<Øó#ò #Eà×*Ñ*×/Ñ/×3Ñ3°OÓDð  ð #Ð.Ø&0°Ð0AÐ$B˜	Ü% k´5·<±<Ô@Ø ŸK™K×7Ñ7¸	À;ÕOä# D§K¡K°¸KÔHØ!%§¡×!9Ñ!9¸*ÀiÐQSÐUWÓ!X˜Ø+/×+<Ñ+<×+AÑ+A×+FÑ+FÓ+H˜Ÿ™Ô(Ø2=˜Ÿ™×(Ñ(¨Ñ/Ø%˜Ü‘7Ñ& v¨t°VÓ<Ð<r4   c                ó¶  •— |d   }g }t        | j                  j                  «       «      D ]‘  }| j                  |   \  }}|dk(  r#|j                  |t	        t
        |«         «       Œ=|dk(  r9t	        t        |«      j                  }	|j                  | j                  |	   «       Œ{|dk(  sŒ�|j                  |«       Œ“ t        ‰
| �)  |t        |«      fi «      S )z/Transform output according to graph_output_map.r   Ú	graph_outÚinputÚconstant)Úsortedr¦   ÚkeysrT   r   Úintr   rÍ   r¬   r‚   rŸ   rQ   )r†   rl   r,   r/   Úoriginal_outputsÚnew_outputsr¾   Úoutput_typer´   Ú	input_idxrˆ   s             €r2   rŸ   zDynamoGraphTransformer.outputu  sÖ   ø€ ð   ™7Ðð ˆÜ˜×-Ñ-×2Ñ2Ó4Ó5ò 		(ˆAØ#×4Ñ4°QÑ7ÑˆK˜à˜kÒ)Ø×"Ñ"Ð#3´D¼¸c³NÑ#CÕDØ Ò'Ü ¤°Ó4×:Ñ:�	Ø×"Ñ" 4×#7Ñ#7¸	Ñ#BÕCØ 
Ó*Ø×"Ñ" 3Õ'ð		(ô ‰w‰~˜f¤u¨[Ó'9Ð&;¸RÓ@Ð@r4   c                ó`  •— || _         t        ‰| �	  |«      }t        |d«      rŠ|j                  |ur|dD ]7  }||j
                  v sŒ|j
                  |   |j                  j
                  |<   Œ9 |j                  dk7  r1t        |d«      r%|j                  j                  |j                  «       |S )z.Run node transformation and preserve metadata.rc   )r´   rÉ   rÊ   rŸ   rV   )	rÌ   r‚   Úrun_noderm   rc   r_   rk   Ú_renamerV   )r†   r¡   r<   rF   rˆ   s       €r2   rã   zDynamoGraphTransformer.run_nodeŠ  s™   ø€ àˆÔÜ‘Ñ! !Ó$ˆô �6˜6Ô" v§{¡{¸!Ñ';ØDò 8�Ø˜!Ÿ&™&’=Ø,-¯F©F°3©K�F—K‘K×$Ñ$ SÒ)ð8ð
 �t‰t�xÒ¤G¨A¨vÔ$6Ø—‘×#Ñ# A§F¡FÔ+àˆr4   c                óH  •— t         ‰| �  «       }t        | j                  d«      r|d| 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.r_   rY   Údynamo_compile_id)r‚   Ú	transformrm   r°   r_   )r†   Ú	result_gmrˆ   s     €r2   rç   z DynamoGraphTransformer.transform›  s‘   ø€ ä‘GÑ%Ó'ˆ	ô �4—;‘; Ô'à1°T·[±[×5EÑ5EÑEàEIÇ[Á[×EUÑEUà6ñF�	—‘ÐAÑBð
 # d§k¡k×&6Ñ&6Ñ6à6:·k±k×6FÑ6Fà'ñ7�	—‘Ð2Ñ3ð
 Ðr4   )NN)r°   útorch.fx.GraphModuler£   z	list[Any]r¤   zlist[set[int]]r¥   zdict[int, int]r¦   zdict[int, OutputReturnInfo]r§   ú
Any | Noner¨   zdict[int, Any] | Noner[   r“   )r[   r“   )rl   r$   r,   ztuple[Argument, ...]r/   údict[str, Any]r[   r   )rl   r$   r,   zSequence[Any]r/   rë   r[   r   )r¡   r"   r[   r   )r[   ré   )r”   r•   r–   Ú__doc__rƒ   r­   r¯   r�   rŸ   rã   rç   r—   r˜   s   @r2   rš   rš   ñ   sÍ   ø„ Ùdð !%Ø.2ð#+à$ð#+ð ð#+ð !/ð	#+ð
 *ð#+ð 6ð#+ð ð#+ð ,ð#+ð 
õ#+õJ(2óTKð&=Øð&=Ø$8ð&=ØBPð&=à	õ&=ðPAØðAØ$1ðAØ;IðAà	õAõ*÷"ñ r4   rš   c           	     ó¦  — d }	 t        | «      \  }}	|j                  j                  |j                  «       t        |dd «      x}��`|j                  x}��Qt        | j                  t        j                  j                  t        j                  j                  z  «      �s|j                  «        |j                  «       }|j                  t!        j"                  |«      |||«      }|r.|j$                  r|j$                  d   |z   f|_        n-|f|_        n$|rt	        |«      }nt&        j)                  d|«       |j*                  D ]]  }t        |t,        j.                  «      sŒt	        dj1                  t3        j4                  |j6                  |   «      «      › d|› d�«      }Œ_ |rt9        ||||«      }|‚y # t        $ r}
|
}Y d }
~
�Œ”d }
~
ww xY w)NÚ	shape_envr   z#Summary of dimension constraints:%sr7   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   Úgraph_capture_outputÚbuild_guardsÚ__code__r   ÚgetattrÚdim_constraintsrP   r’   ro   Ú_opsÚOpOverloadPacketÚ
OpOverloadÚsolveÚforced_specializationsÚprettify_resultsr*   r+   r,   ÚlogÚinfoÚvar_to_rangeÚsympyÚIntegerÚjoinÚ	tracebackÚformat_listÚvar_to_stackr3   )Úmodule_to_traceÚorig_callabler§   rï   r,   r/   Údynamic_shapesr-   Úfnr6   Úerî   ró   rø   ÚmsgÚks                   r2   Ú&_suggest_or_raise_constraint_violationr
  ³  sÓ  € ð "&Ðð'ä˜oÓ.‰ˆˆAØ×1Ñ1×>Ñ>¸r¿{¹{ÔKô
 ˜i¨°dÓ;Ð	;ˆÑHØ )× 9Ñ 9Ð9ˆ_ÑFÜØ×#Ñ#Ü�J‰J×'Ñ'¬%¯*©*×*?Ñ*?Ñ?õ
ð
 	×ÑÔà!0×!GÑ!GÓ!IÐà×.Ñ.Ü×Ñ˜mÓ,ØØ&Ø"ó	
ˆñ &Ø)×.Ò.à.×3Ñ3°AÑ6¸Ñ<ð3Ð*Õ/ð 47°&Ð*Õ/á%Ü-EÀcÓ-JÑ*ä—‘Ø9Øôð ×'Ñ'ò 	ˆAÜ˜!œUŸ]™]Õ+Ü-EØ—w‘wœy×4Ñ4°Y×5KÑ5KÈAÑ5NÓOÓPÐQð RJàJKÈð MEðEó.Ñ*ð	ñ "Ü%;Ø&¨°t¸Vó&
Ð"ð )Ð(ð	 "øô_ $ò 'Ø%&Ö"ûð'ús   „3F: Æ:	GÇGÇGc                óÌ   — | j                   j                  «        | j                  «        t        | j	                  «       «      D ]  \  }}t        | |«       t        | ||«       Œ  y r�   )r]   Úeliminate_dead_codeÚ	recompileÚlistÚnamed_buffersÚdelattrrÏ   )Ú
shuffle_gmrV   Úbuffers      r2   Ú_normalize_shuffle_graphr  ÷  sW   € Ø×Ñ×(Ñ(Ô*Ø×ÑÔÜ˜Z×5Ñ5Ó7Ó8ò *‰ˆˆfÜ�
˜DÔ!Ü�
˜D &Õ)ñ*r4   c                ó’   — | j                   j                  D ].  }|j                  dk(  sŒ|j                  d   |j                  d<   Œ0 y )Nr�   rÉ   r´   )r]   r^   rk   r_   )Úgmrc   s     r2   Únormalize_graph_moduler  ÿ  s<   € Ø—‘—‘ò :ˆØ�7‰7�mÓ#Ø#Ÿy™y¨Ñ9ˆD�I‰I�eÒñ:r4   c                  ó4   — e Zd Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd„Zy)ÚInputProcessorc                ó.   — || _         || _        || _        y r�   )ÚrootÚnum_argsÚkwarg_names)r†   r  r  r  s       r2   rƒ   zInputProcessor.__init__  s   € ð ˆŒ	Ø ˆŒØ&ˆÕr4   c                ó  — |}i }t        |«      | j                  kD  r;t        t        | j                  || j                  d  «      «      }|d | j                   }| j
                  ��!t        | j
                  t        j                  j                  «      rãt        | j
                  j                  j                  t        «      s5t        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|¢­}||fS )Nz%expected _DynamoBytecodeCodeGen, got Úinput_processorz9dynamo_bytecode_flatten missing input_processor attributez3dynamo_bytecode_flatten.input_processor is not self)rR   r  ÚdictÚzipr  r  rP   ro   rp   ÚGraphModuler]   Ú_codegenÚ_DynamoBytecodeCodeGenrn   rt   rm   Údynamo_bytecode_flattenr  )r†   Úinputsr,   r/   s       r2   Ú__call__zInputProcessor.__call__  sB  € ð ˆàˆÜˆt‹9�t—}‘}Ò$Üœ#˜d×.Ñ.°°T·]±]°_Ð0EÓFÓGˆFØ˜˜$Ÿ-™-Ð(ˆDØ�9‰9Ñ Ü˜$Ÿ)™)¤U§X¡X×%9Ñ%9Ô:Ü! $§)¡)§/¡/×":Ñ":Ô<RÔSÜ(Ø?ÄÀTÇYÁYÇ_Á_×E]ÑE]Ó@^Ð?_Ð`óð ô Ø—I‘I—O‘O×,Ñ,×DÑDÐFWôô )ØSóð ð —I‘I—O‘O×,Ñ,×DÑD×TÑTØñ ô )ØMóð ð —I‘IÐ% Ñ%ˆDØ�Vˆ|Ðr4   N)r  Úobjectr  rÝ   r  ú	list[str]r[   r“   )r%  útuple[object, ...]r[   z,tuple[tuple[object, ...], dict[str, object]])r”   r•   r–   rƒ   r&  r³   r4   r2   r  r    sB   „ ð'àð'ð ð'ð ð	'ð
 
ó'ðØ(ðà	5ôr4   r  c                  ó   — e Zd Zy)ÚYieldN)r”   r•   r–   r³   r4   r2   r+  r+  0  s   „ Ør4   r+  c                  óD   — e Zd Z	 	 	 	 	 	 	 	 dd„Z ed¬«      dd„«       Zy)ÚDynamoBytecodeFlattenc                ó<   — || _         || _        || _        d | _        y r�   )r  ÚoutÚ	f_globalsÚ	gm_inputs©r†   r  r/  r0  s       r2   rƒ   zDynamoBytecodeFlatten.__init__5  s!   € ð  /ˆÔØˆŒØ"ˆŒØ15ˆ�r4   ú*do not trace internal dynamo graph capture©Úreasonc                ó  ‡ — dˆ fd„}‰ j                  |«      \  }}	  ‰ j                  j                  |‰ j                  ¬«      |i |¤Ž t        ‚# t        $ r' ‰ j
                  €t        d«      d ‚‰ j
                  cY S w xY w)Nc                 ó   •— | ‰_         t        ‚r�   )r1  r+  )Úexample_inputsr†   s    €r2   Úbackend_dummyz5DynamoBytecodeFlatten.__call__.<locals>.backend_dummyB  s   ø€ Ø+ˆDŒNÜˆKr4   ©Úcompiled_fnÚextra_globalsz&gm_inputs must not be None after Yield)r8  r'  r[   r“   )r  r/  Úforward_callabler0  r+  r1  rn   ÚRuntimeError)r†   r%  r9  r,   r/   s   `    r2   r&  zDynamoBytecodeFlatten.__call__@  s“   ø€ õ	ð ×+Ñ+¨FÓ3‰ˆˆfð	"ðˆD�H‰H×%Ñ%Ø)¸¿¹ð &ó àðàòô Ðøô	 ò 	"Ø�~‰~Ð%Ü$Ð%MÓNÐTXÐXØ—>‘>Ò!ð	"ús   �-A Á-B Á?B N©r  r  r/  r	   r0  zdict[str, object]r[   r“   )r%  r'  r[   r'  ©r”   r•   r–   rƒ   Údynamo_disabler&  r³   r4   r2   r-  r-  4  sH   „ ð	6à'ð	6ð ð	6ð %ð		6ð
 
ó	6ñ ÐGÔHòó Iñr4   r-  c                  óP   — e Zd Z	 	 	 	 	 	 	 	 dd„Z ed¬«      	 	 	 	 	 	 dd„«       Zy)ÚDynamoBytecodeUnflattenc                ó.   — || _         || _        || _        y r�   )r  r/  r0  r2  s       r2   rƒ   z DynamoBytecodeUnflatten.__init__S  s   € ð  /ˆÔØˆŒØ"ˆ�r4   r3  r4  c                óþ   ‡— dˆfd„}| j                  |«      \  }}t        j                  j                  «       5   | j                  j                  || j                  ¬«      |i |¤Ž}d d d «       |S # 1 sw Y   S xY w)Nc                 ó   •— ‰S r�   r³   )r8  Ú	flat_outss    €r2   r9  z7DynamoBytecodeUnflatten.__call__.<locals>.backend_dummya  s	   ø€ ØÐr4   r:  )r8  r'  r[   úSequence[object])r  ro   Ú_CÚ_DisableTorchDispatchr/  r=  r0  )r†   rG  r%  r9  r,   r/   Úresultss    `     r2   r&  z DynamoBytecodeUnflatten.__call__]  s‚   ø€ õ	ð ×+Ñ+¨FÓ3‰ˆˆfÜ�X‰X×+Ñ+Ó-ñ 	ð�d—h‘h×/Ñ/Ø)¸¿¹ð 0ó àðàñˆG÷	ð ˆ÷		ð ˆús   º.A2Á2A<Nr?  )rG  rH  r%  r)  r[   r'  r@  r³   r4   r2   rC  rC  R  s`   „ ð#à'ð#ð ð#ð %ð	#ð
 
ó#ñ ÐGÔHðØ)ðØ3Eðà	òó Iñr4   rC  c                ó.
  ‡— | j                   €t        d«      ‚| j                   }t        j                  j                  j                  |«      \  }}t        j                  ||f«      }t        j                  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*                  «       |j.                  ‰_        t0        j2                  dk\  r.dd l}	|	j7                  t        j                   j"                  «      }
n%t9        t        j                   j"                  dd «      }
|j:                  j=                  «       D ]  \  }}|
sŒ	||
vsŒ|‰j:                  |<   Œ |j>                  jA                  «       ‰_        |jB                  jA                  «       ‰_!        |jD                  jA                  «       ‰_"        |jF                  jA                  «       ‰_#        ‰j>                  s‰jB                  r§t9        ‰dd «      €t        d«      ‚t        ‰jH                  t        jJ                  j                  jL                  «      s!t        d	tO        ‰jH                  «      › �«      ‚‰jH                  jP                  �t        d
«      ‚dd„}|‰jH                  _(        t        |t        j                   j"                  «      r‰n|}tS        |tU        |«      tW        |jY                  «       «      «      }t[        || |«      }t]        || |«      }t_        ta        tc        jd                  |«      ||«      ||«      ‰jf                  _4        tk        ‰«       tm        ‰d«      rt        d«      ‚tm        ‰d«      rt        d«      ‚|‰_7        |‰_8        ts        ‰d«       ‰ju                  «        | j                  jv                  jx                  jz                  ‰j|                  d<   | j                   €t        d«      ‚| j                   j~                  ‰j|                  d<   d‰j|                  d   _@        tƒ        ‰j|                  d   «      }| j                   j„                  |_B        |‰j|                  d<   ‰S )Nz"out.backend_input must not be Nonec              3  ó8   •K  — | ]  }t        ‰|«       –— Œ y ­wr�   )rm   )r    Úmrb   s     €r2   r¢   z7create_fx_graph_from_captured_output.<locals>.<genexpr>  s   øè ø€ ÒG°A”w˜|¨QÓ/Ô/ÑGùs   ƒ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 Nonec                óÖ  ‡‡‡— d| j                   v rt        d«      ‚| j                  Š| j                  Št	        | «      j
                  Šdˆˆˆfd„}	 t        j                  || «      | _        i | _        i | _        t        t	        | «      | �&  |i |¤Ž| j                   j                  d«       ‰| _        ‰| _        S # | j                   j                  d«       ‰| _        ‰| _        w xY w)Nr’   z('forward' should not be in self.__dict__c                ó8   •— ‰| _         ‰| _         ‰| g|¢­i |¤ŽS r�   )Ú_forward_hooksÚ_forward_pre_hooks)r†   r,   r/   Ú	fwd_hooksÚfwd_pre_hooksÚoriginal_forwards      €€€r2   Úpatched_forwardzZcreate_fx_graph_from_captured_output.<locals>.dynamo_wrapped_call.<locals>.patched_forwardª  s(   ø€ Ø*3�DÔ'Ø.;�DÔ+Ù+¨DÐB°4ÒB¸6ÑBÐBr4   ©r,   r'  r/   r'  r[   r'  )Ú__dict__rn   rU  rV  rt   r’   ÚtypesÚ
MethodTyper‚   r&  Úpop)r†   r,   r/   rZ  rW  rX  rY  s       @@@r2   Údynamo_wrapped_callzAcreate_fx_graph_from_captured_output.<locals>.dynamo_wrapped_call¢  sÐ   ú€ Ø §¡Ñ-Ü(Ð)SÓTÐTà ×/Ñ/�	Ø $× 7Ñ 7�Ü#'¨£:×#5Ñ#5Ð ÷Cð
<Ü#(×#3Ñ#3°OÀTÓ#J�D”Là*,�DÔ'à.0�DÔ+ä ¤ d£¨TÑ;¸TÐLÀVÑLà—M‘M×%Ñ% iÔ0Ø*3�DÔ'Ø.;�DÕ+øð —M‘M×%Ñ% iÔ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_contextr[  )CÚbackend_inputrn   ro   Ú_dynamoÚconvert_framer   rŠ   Útree_leavesÚ
eval_framer   r   ÚINVALID_INPUTrï   r0  rb   rP   ÚnnÚModuleÚ_parametersÚ_buffersÚallÚ_modulesÚupdateÚ_non_persistent_buffers_setÚsysÚversion_infoÚannotationlibÚget_annotationsrò   r\  rD   rU  r`   rV  Ú_backward_hooksÚ_backward_pre_hooksrR  rp   Ú_WrappedCallrt   Úcls_callr  rR   r  rÜ   r-  rC  r#  r   r*   r+   r]   r"  r  rm   ra  rb  r  r  Úoutput_graphÚexport_metadataÚmodule_call_specr_   r§   Úallow_non_fake_inputsr   Útensor_to_context)r/  Úmodr,   r/   rf  r6   r  Úflat_real_argsr0  rv  r   rV   rÁ   r`  r  r$  Údynamo_bytecode_unflattenre  rb   s                     @r2   Ú$create_fx_graph_from_captured_outputr„  l  s9  ø€ ð ×ÑÐ ÜÐAÓBÐBØ×%Ñ%€Mä�m‰m×)Ñ)×7Ñ7¸Ó<�G€A€tä×'Ñ'¨¨v¨Ó7€NÜ	‡M�M×Ñ×4Ñ4Øœ×3Ñ3ôð ×(Ñ(×2Ñ2€Ià ×-Ñ-€LÜ�$œŸ™Ÿ™Õ(Ø#'×#3Ñ#3ˆÔ Ø $§¡ˆÔÜÓG¸¿¹ÔGÔGÜ ØTóð ð 	×Ñ×$Ñ$ T§]¡]Ô3Ø37×3SÑ3SˆÔ0Ü×Ñ˜wÒ&Û à'×7Ñ7¼¿¹¿¹ÓH‰Kä!¤%§(¡(§/¡/Ð3DÀdÓKˆKØŸ=™=×.Ñ.Ó0ò 	4‰KˆD�%Ú˜t¨;Ò6Ø.3�×%Ñ% dÒ+ð	4ð '+×&9Ñ&9×&>Ñ&>Ó&@ˆÔ#Ø*.×*AÑ*A×*FÑ*FÓ*HˆÔ'Ø'+×';Ñ';×'@Ñ'@Ó'BˆÔ$Ø+/×+CÑ+C×+HÑ+HÓ+JˆÔ(Ø×&Ò&¨,×*IÒ*Iô
 �| _°dÓ;ÐCÜ$Ð%RÓSÐSÜØ×*Ñ*¬E¯H©H×,AÑ,A×,NÑ,Nôô %Ø1´$°|×7QÑ7QÓ2RÐ1SÐTóð ð ×)Ñ)×2Ñ2Ð>Ü$Ð%WÓXÐXó<ð6 3FˆL×&Ñ&Ô/ä% d¬E¯H©H¯O©OÔ<‰<À$€DÜ$ T¬3¨t«9´d¸6¿;¹;»=Ó6IÓJ€OÜ3°OÀSÈ)ÓTÐÜ 7¸ÈÈiÓ XÐä"8Ü”w×(Ñ(¨Ó-¨t°VÓ<ØØ!ó#€L×ÑÔô
 ˜<Ô(Üˆ|Ð7Ô8ÜØIó
ð 	
ô ˆ|Ð9Ô:ÜØKó
ð 	
ð -D€LÔ)à.G€LÔ+ÜˆLÐ1Ô2Ø×ÑÔà× Ñ ×-Ñ-×=Ñ=×NÑNð ×ÑÐ)Ñ*ð ×ÑÐ ÜÐOÓPÐPØ%(×%6Ñ%6×%@Ñ%@€L×Ñ�kÑ"Ø;?€L×Ñ�kÑ"Ô8Ü$ \×%6Ñ%6°{Ñ%CÓD€OØ(+×(9Ñ(9×(KÑ(K€OÔ%Ø+:€L×ÑÐ'Ñ(ØÐr4   c                  ó–   ‡ — 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 )r#  c                óh   •— t         ‰| �  «        || _        || _        || _        d| _        d | _        y )NF)r‚   rƒ   Úorig_arg_namesr$  rƒ  Ú
wrap_tupleÚ_inputs)r†   r‡  r$  rƒ  rˆ   s       €r2   rƒ   z_DynamoBytecodeCodeGen.__init__æ  s6   ø€ ô 	‰ÑÔØ,ˆÔØ'>ˆÔ$Ø)BˆÔ&ØˆŒØ/3ˆ�r4   c                óŒ   ‡— || _          | j                  |Ž }t        «       Š‰� t        j                  ˆfd„|«      rd‰_        |S )Nc                ó`   •— t        | t        j                  «      xr ‰j                  | «       S r�   )rP   ro   r¹   Úis_our_fake)Úxr§   s    €r2   ú<lambda>z7_DynamoBytecodeCodeGen.process_inputs.<locals>.<lambda>ú  s&   ø€ ”j ¤E§L¡LÓ1ÒR¸)×:OÑ:OÐPQÓ:RÐ6R€ r4   T)r‰  r$  r   rŠ   Útree_anyr  )r†   r%  rK  r§   s      @r2   Úprocess_inputsz%_DynamoBytecodeCodeGen.process_inputsõ  sJ   ø€ ØˆŒØ.�$×.Ñ.°Ð7ˆÜ$Ó&ˆ	ØÐ ¤V§_¡_ÛRØô&
ð /3ˆIÔ+Øˆr4   c                ój   — | j                  || j                  «      }| j                  r|f}d | _        |S r�   )rƒ  r‰  rˆ  )r†   ÚoutputsrK  s      r2   Úprocess_outputsz&_DynamoBytecodeCodeGen.process_outputs  s2   € Ø×0Ñ0°¸$¿,¹,ÓGˆØ�?Š?Ø�jˆGØˆŒØˆr4   F©Úexpanded_defc               ó|  •— | j                   }t        |«      dkD  r|d   dk(  nd}|r|j                  dd«       t        |«      }|rdnd}t	        |t        |«      «      D ]   }||   dk(  sŒd}||v r
|dz  }||v rŒ
|||<   Œ" t
        ‰
| �  |d d  ||¬«      }	t        |«      dkD  r|	| j                  |||«      z  }	|	S )Nr   r†   Fé   Úself_r6   r”  )r‡  rR   Úinsertr  r¸   r‚   Ú
gen_fn_defÚgen_var_bindings)r†   Ú	free_varsÚmaybe_return_annotationr•  Úfn_argsÚhas_orig_selfÚ	first_posr¾   r|   Úfn_definitionrˆ   s             €r2   rš  z!_DynamoBytecodeCodeGen.gen_fn_def  sð   ø€ ð ×%Ñ%ˆÜ25°g³,ÀÒ2B˜ ™ vÒ-ÈˆÙØ×Ñ˜Q Ô'ô �w“-ˆÙ&‘A¨Aˆ	Ü�y¤# g£,Ó/ò 	&ˆAØ�q‰z˜VÓ#Ø"�Ø 'Ñ)Ø ‘O�Hð  'Ò)à%�˜’
ð	&ô ™Ñ*Ø‘AˆJÐ/¸lð +ó 
ˆô ˆy‹>˜AÒØ˜T×2Ñ2°7¸IÀ|ÓTÑTˆMØÐr4   c                ó  — |D �cg c](  }|j                  d«      d   j                  d«      d   ‘Œ* }}t        |«      dk(  rd}n)t        |«      dk(  r	|d   › d�}ndj                  |«      › }d|› ddj                  |«      › d	�S c c}w )
Nú:r   ú#r7   r—  ú, z
    _fn_args = (z)
    z,, = self._dynamo_bytecode_flatten(*_fn_args))ÚsplitrR   rÿ   )r†   rž  rœ  r•  r�  Úwithout_annotationÚfn_signatures          r2   r›  z'_DynamoBytecodeCodeGen.gen_var_bindings1  s¨   € ð FOÖOÀ˜aŸg™g c›l¨1™o×3Ñ3°CÓ8¸Ó;ÐOÐÐOÜˆw‹<˜1ÒØ‰LÜ�‹\˜QÒØ% a™j˜\¨Ð,‰Là"Ÿi™i¨Ó0Ð1ˆLðØ�ð Ø	‡Y�YÐ!Ó"Ð#Ð#OðSð 	Sùò Ps   …-BN)ÚdescsÚrepr_fnc          	     óœ   — |€t         }ddj                  |D �cg c]
  } ||«      ‘Œ c}«      › d�}| j                  rd|› d�}d|› �S c c}w )Nz!self._dynamo_bytecode_unflatten((r¥  z,), _fn_args)ú(z,)zreturn )Úreprrÿ   rˆ  )r†   Úoutput_argsr©  rª  ÚaÚreturneds         r2   Úgenerate_outputz&_DynamoBytecodeCodeGen.generate_output?  sa   € ð ˆ?ÜˆGà6°t·y±yÐVaÖAbÐQRÁ'È!Å*ÒAbÓ7cÐ6dÐdqÐrˆØ�?Š?Ø˜8˜* BÐ'ˆHØ˜˜
Ð#Ð#ùò Bcs   ™A	
)r‡  r(  r$  r   rƒ  r   r[   r“   )r%  r   r[   r   )r’  r   r[   r   )rœ  r(  r�  rS   r•  Úboolr[   rS   )rž  r(  rœ  r(  r•  r²  r[   rS   )r®  ztorch.fx.node.Argumentr©  zobject | Nonerª  rê   r[   rS   )
r”   r•   r–   rƒ   r�  r“  rš  r›  r±  r—   r˜   s   @r2   r#  r#  å  sÆ   ø„ ð4à!ð4ð "*ð	4ð $,ð4ð 
õ4óó"ð #ñ"àð"ð "%ð"ð
 ð"ð 
õ"ðHSØ ðSØ-6ðSØFJðSà	óSð$  $Ø"ñ$à+ð$ð ð	$ð
 ð$ð 
÷$r4   r#  c                ó*  ‡ ‡— t        ‰ t        j                  j                  «      ràdd„}d}g }‰ j                  j
                  D ]G  }|j                  r|sd}|j                  d«       |j                  |j                   ||«      z   «       ŒI ddj                  |«      › ddj                  ‰ j                  j
                  D �cg c]  }|j                  › d|j                  › �‘Œ c}«      › d	�}i }t        |d
‰ i|«       |d   Š dˆˆ fd„}|S c c}w )Nc                óB   — | j                  «       rd| j                  ›�S y)Nú=r7   )Úhas_default_valueÚdefault_value)Úargs    r2   Údefault_annotationz;dynamo_graph_capture_for_export.<locals>.default_annotationU  s%   € Ø×$Ñ$Ô&Ø˜3×,Ñ,Ð/Ð0Ð0Ør4   FTÚ*z
def op_overload_wrapper(r¥  z):
    return op(rµ  z)
rk   Úop_overload_wrapperc            
     óÜ  •— t         j                  j                  j                  rt	        d«      ‚t        «       5  t         j                  j                  j                  dd¬«      5  t        «       5  t        d«      5  t        ‰| |‰¬«      }d d d «       d d d «       d d d «       d d d «       t        ‰| |«      }|S # 1 sw Y   Œ1xY w# 1 sw Y   Œ5xY w# 1 sw Y   Œ9xY w# 1 sw Y   Œ=xY w)Nz"install_free_tensors must be FalseFÚwarn)Úreplay_side_effectsÚside_effect_replay_policyr
   )Úconstraints)ro   rg  ÚconfigÚinstall_free_tensorsrn   r   Úpatchr   r   r
   r„  )r,   r/   r/  rb   rÀ  r  s       €€r2   Úinnerz.dynamo_graph_capture_for_export.<locals>.inneri  sá   ø€ Ü�=‰=×Ñ×4Ò4Ü Ð!EÓFÐFä$Ó&ñ	ä�M‰M× Ñ ×&Ñ&Ø$)ÀVð 'ó ñ	ô
  Ó!ñ	ô Ð,Ó-ñ	ô $ØØØØ'ô	ˆC÷	÷ 	÷ 	÷ 	ô <¸CÀÀTÈ6ÓRˆØÐ÷	ð 	ú÷ 	ð 	ú÷ 	ð 	ú÷ 	ð 	úsS   »,C"Á'CÁ2C
Á>B>	ÂC
ÂCÂC"Â>CÃC
Ã
CÃCÃC	ÃC"Ã"C+)r¸  ztorch.Argumentr[   rS   )r,   r   r/   r   r[   r   )rP   ro   rô   rö   Ú_schemaÚ	argumentsÚ
kwarg_onlyrT   rV   rÿ   Úexec)	r  rÀ  r¹  Úhas_kwarg_onlyÚarg_listr¸  Úfunc_strr/  rÄ  s	   ``       r2   Údynamo_graph_capture_for_exportrÌ  O  s  ù€ ô �"”e—j‘j×+Ñ+Ô,ó	ð
 ˆØˆØ—:‘:×'Ñ'ò 	@ˆCØ�~Š~¡nØ!%�Ø—‘ Ô$Ø�O‰O˜CŸH™HÑ'9¸#Ó'>Ñ>Õ?ð		@ð
ØŸ™ 8Ó,Ð-ð .Ø�y‰y¸b¿j¹j×>RÑ>RÖS°s˜SŸX™X˜J a¨¯© zÒ2ÒSÓTÐUð Vðˆð ˆÜˆX˜˜b�z 3Ô'ØÐ&Ñ'ˆöð( €Lùò5 Ts   Ã"D)rÀ  r  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
    c                 ó	  •— t        «       5  t        j                  | |f«      \  }}t        |t        j
                  «       t        ‰|«      }t        ‰t        j                  j                  «      r‰j                  n‰}‰}‰}ddlm}  |«        t        j                  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 }|
j2                  �C|
j2                  j4                  }|
j2                  j6                  }|
j2                  j8                  }n…t        j:                  j=                  t        j                  j                  «       t        j:                  j?                  «       «      }|j@                  jC                  d «       |jE                  «        d }tG        ||||
| ||«       |
j,                  j.                  jH                  }|jJ                  }|jL                  }|jN                  }|jP                  }d d d «       d d d «       d d d «       |D ��cg c]‰  }|xs d	D �ch c]w  }|jR                  tU        |«      k(  r]t        |tV        «      sM|jX                  jZ                  j\                  |jX                  jZ                  j^                  k7  r|j`                  ’Œy c}‘Œ‹ }}}i }D ]N  }||   }t        |t        j                  jb                  jd                  «      sŒ7tg        |«      ||jh                  <   ŒP |jk                  «       D ]  \  }}|   ||<   Œ tm        ||||«      jo                  «       }tq        ts        tu        tw        jx                  |«      | |«      |«      «      |j@                  _=        |jE                  «        t}        |d«       t        |«       |j€                  d
<   ||j€                  d<   |cd d d «       S # 1 sw Y   �Œ×xY w# 1 sw Y   �ŒÜxY w# 1 sw Y   �ŒáxY wc c}w c c}}w # 1 sw Y   y xY w)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_capturer³   rd  r§   )Ar   rŠ   rŒ   r   r   rk  r   rP   ro   rl  rm  r’   r7   rÏ  rg  rÁ  rÃ  Úinstall_free_tensors_for_exportr   r   r
   rQ   rï   r|  rn   rf  rb   r§   r8  rp   r!  ÚGraphr]   rŸ   r  r
  r}  Úgraph_input_idx_to_local_sourceÚoutput_return_typer‘   r~  Út_idÚidr   Úconstraint_rangeÚvrÚlowerÚupperÚdimrÔ   r   rR   rÍ   rD   rš   rç   r   r   r   r*   r+   r"  rg   r}   r_   )r,   r/   r£   r…   r  r  rÀ  r  rÏ  Údynamo_config_ctxr/  r8  r]   r§   r}  r¨   r¦   r‘   r~  r�  Úcr¤   r¥   ÚinprÔ   Úreal_idxÚ	graph_idxÚtransformed_graphÚ_constraintsÚ_dynamic_shapesr�  s                               €€€r2   rÄ  z/_dynamo_graph_capture_for_export.<locals>.innerž  s<  ø€ ä%Ó'ñ C	%Ü#)×#6Ñ#6¸¸f°~Ó#FÑ ˆK˜Ü# K´×1LÑ1LÔMÜ+¨C°Ó9ˆOÜ+5°c¼5¿8¹8¿?¹?Ô+K˜CŸKšKÐQTˆMà3?ˆKàð õ  áŒGä %§¡× 4Ñ 4× :Ñ :Ø#Ø!%Ø)-Ø).Ø15Ø'+Ø8<Ø*.ô &+§]¡]×%9Ñ%9×%YÑ%Yð !;ó !Ðô$ $Ó%ñ+DäÐ0Ó1ñ+Dð "ñ+Dô
 (Ø#Ü˜+Ó&Ø ,Ø59ô	�ð ×+Ñ+×8Ñ8Ð@Ü(ØOóð ð -/�Ø×$Ñ$Ð0Ø×-Ñ-×:Ñ:�EØ #× 1Ñ 1× ;Ñ ;�IØ%(×%6Ñ%6×%EÑ%E‘Nä!ŸH™H×0Ñ0´·±·±Ó1BÄEÇHÁHÇNÁNÓDTÓU�EØ—K‘K×&Ñ& tÔ,Ø—O‘OÔ%Ø $�Iä6Ø#Ø!ØØØØØ"ôð #&×":Ñ":×"GÑ"G×"WÑ"W�Ø.×NÑN�Ø#2×#EÑ#EÐ Ø*×3Ñ3�Ø#2×#CÑ#CÐ ÷W+D÷ +D÷ +Dðp %÷&ð ð *Ò/¨RöààŸ™¤" Q£%šÜ *¨1Ô.@Ô AØ×.Ñ.×1Ñ1×7Ñ7¸1×;MÑ;M×;PÑ;P×;VÑ;VÒVð —E“Eôð&Ð"ñ &ð" 13ÐØ#ò M�Ø% cÑ*�Ü˜f¤e§m¡m×&:Ñ&:×&HÑ&HÕIÜ69Ð:KÓ6LÐ% f§l¡lÒ3ðMð
 (9×'>Ñ'>Ó'@ò BÑ#�˜)Ø(6°yÑ(A�˜HÒ%ðBô !7ØØØ&Ø!Ø ØØó!÷ ‰i‹kð ô 0>ÜÜ"¤7×#4Ñ#4°]Ó#CÀTÈ6ÓRØØóó0Ð×#Ñ#Ô,ð ×'Ñ'Ô)ä/Ð0AÀ4ÔHÜÐ/Ô0à:JÐ×"Ñ"Ð#6Ñ7Ø2;Ð×"Ñ" ;Ñ/à$÷GC	%ñ C	%÷@+Dñ +Dú÷ +Dñ +Dú÷ +Dñ +Düò^ùó&÷]C	%ð C	%ús�   ŒC"Q5Ã.QÃ:QÃ=E1Q	É.QÉ6QÉ>Q5ÊQ/ÊA<Q*ÌQ/Ì=Q5ÍC"Q5ÑQÑQÑQÑQÑQ'	Ñ"Q5Ñ*Q/Ñ/Q5Ñ5Q>)r,   r   r/   r   r[   ré   r³   )r�  rÀ  r  rÄ  rê  rë  s   `   @@r2   Ú _dynamo_graph_capture_for_exportrì  €  s   ú€ ð6 %€OØ€L÷E%ðN €Lr4   )
r-   r   r.   úCallable[..., Any]r,   r   r/   r   r[   r   )r;   rS   r[   rS   )F)rb   ré   rK   r²  r[   ré   )rb   ré   r[   r“   )r  ztorch.nn.Moduler  rí  r§   zFakeTensorMode | Nonerï   r	   r,   r   r/   r   r  ú.dict[str, Any] | tuple[Any] | list[Any] | Noner[   r“   )r  ré   r[   r“   )r  ré   r[   r“   )
r/  r	   r�  r   r,   ztuple[Any, ...]r/   rë   r[   ré   r�   )r  rí  rÀ  úlist[Constraint] | Noner[   rí  )r�  rí  rÀ  rï  r  rî  r[   z#Callable[..., torch.fx.GraphModule])_Ú
__future__r   r*   Úloggingrt  r   r]  Úcollectionsr   Útypingr   r   r   r   rý   ro   Útorch.fxÚtorch.utils._pytreeÚutilsÚ_pytreerŠ   Útorch._dynamo.convert_framer	   r
   r   Útorch._dynamo.decoratorsr   rA  Ú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ú   r3   r9   r?   rg   r}   rl  rm  r   r�   rp   ÚTransformerrš   r
  r  r  r  Ú	Exceptionr+  r-  rC  r„  r]   ÚCodeGenr#  rÌ  rì  r³   r4   r2   ú<module>r     s  ðÝ "ã Û Û 
Û Û Ý "ß 4Ó 4ã ã Û ß $Ð $ß WÑ WÝ >ß LÝ +Ý .ß AÝ 8ß :ß F÷ñ ÷
 7ñ ß<Ñ<å;Ý<Ýß.áˆCƒL€Ø€g×Ñ˜Ó!€ð&Ø 8ð&à
ð&ð ð&ð ð	&ð
 ó&ò*Ð óð CHðYØ&ðYØ;?ðYàóYóx0<ôf
6�E—H‘H—O‘Oô 
6ñ  Ð 4°{ÀJÐ6OÓPÐ ô˜UŸX™X×1Ñ1ô ðDA)Ø$ðA)à%ðA)ð %ðA)ð (ð	A)ð
 ðA)ð ðA)ð CðA)ð 
óA)óH*ó:÷(ñ (ôV	ˆIô 	÷ñ ÷<ñ ð4vØ	ðvØ ðvØ(7ðvØAOðvàóvôrg$˜UŸX™XŸ^™^×3Ñ3ô g$ðX ,0ð.Øð.à(ð.ð ó.ðh ,0ØEIñ	eØ	ðeð )ðeð Cð	eð
 )ôer4   