+
    –°³jô÷  ã                   óº  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHtHtHtHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ RIt^ RIHt ^ RIHtHtHt ^ R	IH t  ^ R
I!H"t" ^ RI#H$t$ ^ RI%H&t& ]'       d/   ^ RI't'^ RI(H)t) ^ RI*H+t+ ^ RI,H-t- ^ RI.H/t/ ^ RI0H1t1 ^ RI2H3t3 ^ RI4H5t5 ^ RI0H6t6H7t7H8t8 ^ RI9H:t:H;t; ^ RI4H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtH ]7P’                  R]7P”                  R]7P–                  R]7P˜                  R]7Pš                  R]7Pœ                  R/tORsPR R ltQR  R! ltRR" R# ltSR$ R% ltTR& R' ltUR( R) ltVR* R+ ltWR, R- ltXR—R. R/ lltYR0 R1 ltZR˜R2 R3 llt[R4 R5 lt\R™R6RR7RR8RR9R/R: R; lllt]R< R= lt^R> R? lt_R@ RA lt`RB RC ltaRD RE ltbRF RG ltcRH RI ltdRJ RK lte]RL RM l4       tfRN RO ltgRP RQ lthR˜RR RS lltiRT RU ltjRV RW ltkRX RY ltlRZ R[ ltmR\ R] ltnR^ R_ ltoR` Ra ltpRb Rc ltqRd Re ltrRf Rg ltsRh Ri lttRj Rk ltuRl Rm ltv]Rn Ro l4       twRp Rq ltxRr Rs ltyRt Ru ltzRv Rw lt{Rx Ry lt|Rz R{ lt}R| R} lt~]Pþ                  ! ^R~7      R R€ l4       t€R� R‚ lt�Rƒ R„ lt‚R… R† ltƒ]R‡ Rˆ l4       t„R‰ RŠ lt…R‹ RŒ lt†R� RŽ lt‡R� R� ltˆR‘ R’ lt‰ ! R“ R”]EP                  EP                  4      tŒR• R– lt�R# )šé    N)Údefaultdict)ÚCallableÚ
CollectionÚ	GeneratorÚIterableÚSequence)Úcontextmanager)ÚismethodÚ	Parameter)ÚAnyÚTYPE_CHECKING)Údetect_fake_mode)Ú
FakeTensorÚFakeTensorModeÚis_fake_tensor)ÚFunctionalTensor)Ú#first_call_function_nn_module_stack©ÚPreDispatchTorchFunctionMode)Úinsert_deferred_runtime_asserts©ÚConstantAttrMap)ÚGraphSignature)ÚOperatorBase)ÚExportedProgram)ÚExportGraphSignature)ÚShapeEnv)ÚTreeSpec)ÚCustomObjArgumentÚ	InputKindÚ
OutputKind)Ú_deregister_pytree_flatten_specÚregister_pytree_flatten_spec)Ú_deregister_pytree_nodeÚ_register_pytree_nodeÚContextÚ	FlattenFnÚFromDumpableContextFnÚ
GetAttrKeyÚKeyPathÚkeystrÚ
MappingKeyÚSequenceKeyÚToDumpableContextFnÚtree_flatten_with_pathÚUnflattenFnÚ Úp_Úb_Úc_Úobj_ÚtokenFc                ó‚   € V ^8„  d   QhRRR\         \        \        3,          R\        P                  P
                  RR/# )é   Úgraph_signaturer   Ú	constantsÚmodÚreturnr   )ÚdictÚstrr   ÚtorchÚnnÚModule)Úformats   "ÚT/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_export/utils.pyÚ__annotate__rD   F   s@   € ÷ ñ Ø+ðä”Cœ�H�~ðô 
�‰�‰ðð ñ	ó    c                 óä  € ^ RI Hp V! 4       pV P                   Uu0 uFD  pVP                  \        P
                  8X  g   K$  VP                  '       d   K8  VP                  kKF  	  ppVP                  4        Fo  w  rxWv9   d   K  Tp	VP                  R4      Ev r«V
 F  p\        Wœ4      p	K  	  V	P                  P                  VR4       \        W›V4       VP                  W‡4       Kq  	  V# u upi )r   r   Ú.N)Ú(torch._export.passes.lift_constants_passr   Úinput_specsÚkindr    ÚBUFFERÚ
persistentÚtargetÚitemsÚsplitÚgetattrÚ_buffersÚpopÚsetattrÚadd)r9   r:   r;   r   Úconstant_attrsÚspecÚnon_persistent_buffersÚnameÚvalueÚ_modÚatomsÚattrÚatoms   &&&          rC   Ú_collect_and_set_constant_attrsr^   F   sÝ   € õ Iá$Ó&€Nð $×/Ò/óá/ˆDØ�9‰9œ	×(Ñ(Ñ(ô 	à15·µô 	ˆ�ŒÙ/ð ð ð
 !—‘Ö(‰ˆØÔ)ÙàˆØ—z‘z #“‰ˆÛˆDÜ˜4Ó&ŠDñ ð 	�‰×Ñ˜$ Ô%Ü�˜EÔ"Ø×Ñ˜5Ö'ñ )ð Ðùò#s   œ!C-ÁC-ÁC-c          	      ó¾   € V ^8„  d   QhR\         P                  P                  R\        \        \
        3,          R\        \        ,          R\        \        ,          /# )r8   r;   Ú
state_dictrW   r<   )r?   ÚfxÚGraphModuler=   r>   r   r   Úset)rB   s   "rC   rD   rD   f   sJ   € ÷ %ñ %Ü	�‰×	Ñ	ð%ä”Sœ#�X•ð%ô '¤s�Oð%ô 	Œ…Xñ	%rE   c                 ó|  € ^ RI HpHp \        4       pV P                  P
                   Fÿ  pVP                  R8X  g   K  \        P                  P                  P                  WP                  4      p\        V\        P                  4      '       g   Kk  VP                  V9  g   K~  VP                  V9  g   K‘  \        P                  P                  P                  WP                  4       V! WpVP                  VP                  R4       VP!                  VP                  4       EK  	  V P#                  4        V# )r   )Ú_assign_attrÚ	_AttrKindÚget_attrF)Útorch.export.unflattenre   rf   rc   ÚgraphÚnodesÚopr?   ra   Úgraph_moduleÚ	_get_attrrM   Ú
isinstanceÚTensorÚ	_del_attrrK   rT   Ú	recompile)r;   r`   rW   re   rf   Útemp_registered_constantsÚnoderM   s   &&&     rC   Ú_register_constants_as_buffersrt   f   sÎ   € ÷ ?ä #£Ðà—	‘	—”ˆØ�7‰7�jÖ Ü—X‘X×*Ñ*×4Ñ4°S¿+¹+ÓFˆFÜ˜&¤%§,¡,×/Ô/ð —K‘K zÖ1Ø—K‘KÐ'=Ö=ä—H‘H×)Ñ)×3Ñ3°C¿¹ÔEÙ  ¨d¯k©k¸9×;KÑ;KÈUÔSØ-×1Ñ1°$·+±+×>ñ  ð ‡M�M„Oà$Ð$rE   c                óB   € V ^8„  d   QhRRR\         \        ,          RR/# )r8   Úsigr   rr   r<   )rc   r>   )rB   s   "rC   rD   rD   ‚   s(   € ÷ ñ Ø	ðÜ<?Ä½HðàñrE   c                 óF  € V P                    F2  pVP                  V9   g   K  \        P                  Vn        R Vn        K4  	  V P                   FN  pVP                  \        P                  8X  g   K$  VP                  V9   g   K7  \        RVP                   R24      h	  V # )Nz	Constant z< is mutated in the forward method. Pls register it as buffer)
rI   rM   r    ÚCONSTANT_TENSORrJ   rL   Úoutput_specsr!   ÚBUFFER_MUTATIONÚRuntimeError)rv   rr   rV   s   && rC   Ú7_override_graph_signature_for_temp_registered_constantsr|   ‚   s‰   € ð —”ˆØ�;‰;Ð3Ö3Ü!×1Ñ1ˆDŒIØ"ˆDŽOñ  ð
 × Ô ˆà�I‰Iœ×3Ñ3Ö3Ø—‘Ð8Ö8äØ˜DŸK™K˜=Ð(dÐeóð ñ !ð €JrE   c                ó$   € V ^8„  d   QhRRRRRR/# )r8   Úold_sigr   Únew_sigr<   © )rB   s   "rC   rD   rD   –   s$   € ÷ ñ Ø#ðØ.DðàñrE   c                 ó`  € V P                    Uu0 uFD  pVP                  \        P                  8X  g   K$  VP                  '       d   K8  VP
                  kKF  	  ppVP                    F>  pVP                  \        P                  8X  g   K$  VP
                  V9   g   K7  R Vn        K@  	  V# u upi ©F)rI   rJ   r    rK   rL   rM   )r~   r   rV   rW   s   &&  rC   Ú/_overwrite_signature_for_non_persistent_buffersrƒ   –   s‘   € ð ×'Ò'óá'ˆDØ�9‰9œ	×(Ñ(Ñ(ô 	à15·µô 	ˆ�ŒÙ'ð ð ð ×#Ô#ˆØ�9‰9œ	×(Ñ(Ö(¨T¯[©[Ð<RÖ-RØ#ˆDŽOñ $ð €Nùòs   �!B+µB+Á	B+c                óz   € V ^8„  d   QhR\         P                  P                  R\        \        \
        3,          /# ©r8   r;   r<   ©r?   ra   rb   r=   r>   r   )rB   s   "rC   rD   rD   ¦   s,   € ÷ 7'ñ 7'¬¯©×(<Ñ(<ð 7'ÄÄcÌ3ÀhÅñ 7'rE   c                óà  € / pR R lpV P                   P                   EFÊ  pVP                  pVP                  pVP                  R8X  d�   V! W4      p\        V\        P                  P                  4      '       d]   VP                  RRR7       F  w  rxWQVR,           V,           &   K  	  VP                  RRR7       F  w  rxWQVR,           V,           &   K  	  VP                  R8X  d7   V! W4      p\        V\        P                  P                  4      '       g   WQV&   VP                  R	8X  g   EK  \        VP                  \        P                  P                  4      '       d   EKM  VP                   Fm  p	V	P                  R8X  g   K  \        P                  P                   P"                   F/  p
V
R
8X  d   K  W¥9   g   K  WZ,          WP                  ,          V
&   K1  	  Ko  	  EKÍ  	  V# )a  
Param/buffer metadata needs to be saved before lowering to aten IR
because aten IR lifts them, as a result, automatic preservation doesn't work.
This is intended to be called on the strict mode tracing right before lowering to
aten IR OR run_decomposition pass.
c                ód   € V ^8„  d   QhR\         P                  P                  R\        R\        /# )r8   ÚmodelÚ	attr_namer<   )r?   ra   rb   r>   r   )rB   s   "rC   rD   Ú4_collect_param_buffer_metadata.<locals>.__annotate__¯   s+   € ÷ !ñ !œŸ™×,Ñ,ð !¼ð !Äñ !rE   c                 ó”   € VP                  R 4      Ev r#T pV F#  p\        WER4      pVe   K  \        RV: R24      h	  \        WC4      # )rG   Nz
attribute z not found in path)rO   rP   ÚAssertionError)r‰   rŠ   ÚprefixÚfieldÚtÚitems   &&    rC   Ú_getattrÚ0_collect_param_buffer_metadata.<locals>._getattr¯   sT   € Ø"Ÿ™¨Ó-‰ˆØˆÛˆDÜ˜ Ó&ˆAØŒyÜ$ z°$±Ð9KÐ%LÓMÐMñ ô
 �qÓ Ð rE   Úcall_moduleTF)ÚrecurseÚremove_duplicaterG   rg   Úcall_functionÚcustom)ri   rj   rM   Úmetark   rn   r?   r@   rA   Únamed_parametersÚnamed_buffersra   rb   Ú_opsÚHigherOrderOperatorÚ_input_nodesÚproxyÚ_COPY_META_FIELDS)r;   Úparams_buffers_to_node_metar’   rs   rM   r™   Ú	submodulerX   Ú_ÚargÚentrys   &          rC   Ú_collect_param_buffer_metadatar¦   ¦   s–  € ð #%Ðõ!ð —	‘	—•ˆØ—‘ˆØ�y‰yˆØ�7‰7�mÔ#Ù  Ó-ˆIÜ˜)¤U§X¡X§_¡_×5Ò5Ø(×9Ñ9Ø °5ð  :ö  ‘G�Dð HL°¸µ¸tÕ0CÓDñ ð
  )×6Ñ6Ø °5ð  7ö  ‘G�Dð HL°¸µ¸tÕ0CÓDñ ð
 �7‰7�jÔ Ù  Ó-ˆIÜ˜i¬¯©×)=Ñ)=×>Ò>Ø6:¨FÑ3ð
 �7‰7�o×%¬jØ�K‰KœŸ™×7Ñ7÷/
õ /
ð ×(Ô(�Ø—6‘6˜ZÖ'Ü!&§¡§¡×!AÔ!A˜à  HÔ,Ù$Ø ž=ØMQÍ[Ð7¿
¹
ÕCÀEÓJó "Bô )ñ7  ðH 'Ð&rE   c                ó2   € V ^8„  d   QhR\         R,          /# ©r8   r<   Nr   )rB   s   "rC   rD   rD   à   s   € ÷ ñ Ü  4Õ'ñrE   c                  óº  € \         P                  P                  4       '       g   R # \         P                  P	                  4       '       g   R # \         P
                  P                  4       p V  Uu. uF  p\        V\        4      '       g   K  VNK  	  pp\        V4      ^8”  d   \        R\        V4       24      h\        V4      ^ 8X  d   R # V^ ,          pV# u upi )Nz6Expected only one PreDispatchTorchFunctionMode, found )r?   ÚcompilerÚis_exportingÚ_CÚ_is_torch_function_mode_enabledÚ	overridesÚ _get_current_function_mode_stackrn   r   Úlenr�   )Útorch_function_mode_stackÚmodeÚpre_dispatch_tf_modess      rC   Ú+_maybe_find_pre_dispatch_tf_mode_for_exportr´   à   sÇ   € ô �>‰>×&Ñ&×(Ò(Ùä�8‰8×3Ñ3×5Ò5Ùä %§¡× PÑ PÓ RÐñ .óá-ˆDÜ�dÔ8×9÷ 	ˆÙ-ð ð ô Ð Ó! AÔ%ÜØDÄSÐI^ÓE_ÐD`Ðaó
ð 	
ô Ð Ó! QÔ&Ùà  Õ#€DØ€Kùòs   Á/CÂCc                ó‚   € V ^8„  d   QhR\         \        \        3,          R\        P                  P
                  RRRR/# )r8   r¡   Úgmr   r   r<   N)r=   r>   r   r?   ra   rb   )rB   s   "rC   rD   rD   ý   sB   € ÷ )ñ )Ü!%¤c¬3 h¥ð)ä�‰×Ñð)ð $ð)ð 
ñ	)rE   c                ól  € V P                  4        F'  pVP                  RR4       VP                  RR4       K)  	  VP                  pVP                  pVP                  P
                   FÆ  pVP                  R8X  g   K  VP                  V9   dF   WFP                  ,          pWp9   d.   W,          P                  4        F  w  r‰W–P                  V&   K  	  VP                  V9   g   K  WVP                  ,          p
W 9   g   K™  W
,          P                  4        F  w  r‰W–P                  V&   K  	  KÈ  	  R# )ze
Given that we collected param'buffer metadata before, we put them back in
newly traced graph module
Únn_module_stackNÚstack_traceÚplaceholder)
ÚvaluesrR   Úinputs_to_parametersÚinputs_to_buffersri   rj   rk   rM   rN   r™   )r¡   r¶   r   Úmetadatar¼   r½   rs   Ú
param_nameÚkÚvÚbuffer_names   &&&        rC   Ú)_populate_param_buffer_metadata_to_new_gmrÃ   ý   sò   € ð 0×6Ñ6Ö8ˆØ�‰Ð&¨Ô-Ø�‰�] DÖ)ñ 9ð #×7Ñ7ÐØ×1Ñ1ÐØ—‘—”ˆØ�7‰7�mÖ#Ø�{‰{Ð2Ô2Ø1·+±+Õ>�
ØÔ<Ø ;Õ G× MÑ MÖ O™˜Ø'(Ÿ	™	 !›ñ !Pà�{‰{Ð/Ö/Ø/·±Õ<�ØÖ=Ø ;Õ H× NÑ NÖ P™˜Ø'(Ÿ	™	 !›ó !Qó rE   c                óP   € V ^8„  d   QhR\         P                  P                  RR/# )r8   r¶   r<   zShapeEnv | None©r?   ra   rb   )rB   s   "rC   rD   rD     s%   € ÷ $ñ $œuŸx™x×3Ñ3ð $Ð8Iñ $rE   c                 ót  € V P                   P                   Uu. uF6  pVP                  P                  R R4      f   K#  VP                  R ,          NK8  	  pp\	        V 4      pVe   VP
                  # V F;  p\        V\        P                  4      '       g   K%  VP                  P
                  u # 	  R# u upi )ÚvalN)
ri   rj   r™   ÚgetÚ_detect_fake_mode_from_gmÚ	shape_envrn   r?   ÚSymIntrs   )r¶   rs   ÚvalsÚ	fake_moderÁ   s   &    rC   Ú_get_shape_env_from_gmrÎ     sš   € ð —H‘H—N’Nóá"ˆDØ�9‰9�=‰=˜ Ó%ô 	ˆ�	‰	�%×ÐÙ"ð 	ð ô *¨"Ó-€IØÒØ×"Ñ"Ð"ÛˆÜ�aœŸ™×&Ô&Ø—6‘6×#Ñ#Ò#ó ùòs
   ™ B5¾B5c                óÆ   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          R\        \        ,          R\        R\        R\        R\        /# )r8   Úname_mapÚfind_availableÚ
used_namesÚ	orig_namerX   Úis_placeholderr<   )r=   r>   Úintrc   Úbool)rB   s   "rC   rD   rD   *  sb   € ÷ %ñ %Ü”3œ�8�nð%äœœc˜•Nð%ô ”C•ð%ô ð	%ô
 ð%ô ð%ô 	ñ%rE   c                óÒ  € \         P                  ! RV4      pTpV'       d,   V'       g$   VP                  ^4      VP                  ^4      r˜TpTp
W¢9   d   V RW,          ^,            2p
\         P                  ! RV
4      pV'       dE   VP                  ^4      VP                  ^4      r˜\        V	4      W,          8”  d   \        V	4      W&   W V&   VP	                  V
4       W,          # )aI  
Renames nodes to avoid name collisions, with suffixing.
name_map: map from original name to new name
find_available: map prefix to available suffix
used_names: cache of used names
orig_name: mapping key
name: candidate name (potentially suffixed, e.g. mul_2)
is_placeholder: if the node is a placeholder, avoid detecting suffix
ú
(.*)_(\d+)r£   )ÚreÚmatchÚgrouprÕ   rT   )rÐ   rÑ   rÒ   rÓ   rX   rÔ   rÚ   ÚkeyrŽ   ÚnÚnew_names   &&&&&&     rC   Ú_rename_without_collisionsrß   *  sÀ   € ô" �HŠH�] DÓ)€EØ
€Cç—^Ø—K‘K “N E§K¡K°£N�Øˆà€HØÔØ�U˜!˜NÕ/°!Õ3Ð4Ð5ˆä�HŠH�] HÓ-€EßØ—K‘K “N E§K¡K°£N�Üˆq‹6�NÕ*Ô*Ü%(¨£VˆNÑ"à"ˆYÑØ‡N�N�8ÔàÕÐrE   c                ó0   € V ^8„  d   QhR\         R\        /# )r8   Úkey_pathr<   )r*   r>   )rB   s   "rC   rD   rD   R  s   € ÷ /ñ /œð /¤Sñ /rE   c                ó¢  € V ^ ,          p\        V\        4      '       g"   \        R\        V4      P                   24      hVP
                  ^ 8X  d   R\        V R,          4       2# V ^,          p\        V\        \        34      '       g"   \        R\        V4      P                   24      h\        V4      ^R pV \        V R,          4       2# )z}For a given index into the flat_args, return a human readable string
describing how to access it, e.g. "*args["foo"][0].bar"
zexpected SequenceKey, got z*args:é   NNz'expected GetAttrKey or MappingKey, got ºr8   NNéÿÿÿÿ)
rn   r-   r�   ÚtypeÚ__name__Úidxr+   r)   r,   r>   )rá   Úargs_kwargs_key_pathÚ	kwarg_keyrX   s   &   rC   Ú
get_keystrrë   R  sÏ   € ð $ A�;ÐÜÐ*¬K×8Ò8ÜØ(¬Ð.BÓ)C×)LÑ)LÐ(MÐNó
ð 	
ð ×Ñ 1Ô$Ø”v˜h r�lÓ+Ð,Ð-Ð-à˜Q•Kˆ	Ü˜)¤j´*Ð%=×>Ò>Ü Ø9¼$¸y»/×:RÑ:RÐ9SÐTóð ô �9‹~˜a Ð#ˆØ�œ˜x¨�|Ó,Ð-Ð.Ð.rE   c                óÐ   € V ^8„  d   QhR\         \        P                  ,          R\         R\        R\        3,          R\        R\        3,          R\
        R\         R	,          R
R	/# )r8   Úsymintr¤   Úrange_constraintsú
sympy.ExprÚunification_mapzsympy.SymbolÚkeypathÚiNr<   )rÕ   r?   rË   r=   r   r*   )rB   s   "rC   rD   rD   j  sx   € ÷ [
ñ [
Ü”%—,‘,Õð[
ä	ð[
ô ˜L¬#Ð-Õ.ð[
ô ˜.¬#Ð-Õ.ð	[
ô
 ð[
ô ˆT…zð[
ð 
ñ[
rE   c                 óð  € ^ RI Hp \        V\        P                  4      '       d'   VP
                  P                  P                  '       d   \        W4      '       d   R# ^ RIp^ RI	H
p ^ RIHp	 \        V \        P                  4      '       Ed]   \        V P
                  P                  P                  4      ^8X  Ed.   \        \!        V P
                  P                  P                  4      4      p
W£9   d]   V P
                  P                  P#                  V4      pW8w  d1   \%        V4      pVe   VRV R2,          p\'        RV RV R	V 24      hMÌ\        V P
                  P                  VP(                  4      '       d   \+        V4      W:&   MŽV	! VP,                  ! V P
                  P                  V4      V
4      pVfI   \%        V4      pVe   VRV R2,          p\'        R
V RV RV P
                  P                   RV
 R2	4      h\+        V^,          4      W:&   V P
                  P                  V9   d±   V! W P
                  P                  ,          4      w  rïV^8”  d7   W8  d1   \%        V4      pVe   VRV R2,          p\'        RV RV R	V 24      hV\.        P0                  8  d9   W8”  d1   \%        V4      pVe   VRV R2,          p\'        RV RV R	V 24      hR# R# R# \        V \        P                  4      '       d)   V P
                  P                  P                  '       g   R# V\+        V 4      8w  d2   \%        V4      pVe   VRV R2,          p\'        RV RV  R	V R24      hR# )r   )Ú_IntWrapperN)Ú_convert_range_to_int)Ú	try_solvez.shape[Ú]úExpected input at ú to be equal to ú
, but got zExpected input z = z to be of the form z, where z is an integerz
 to be >= z
 to be <= zt. If you meant for this dimension to be dynamic, please re-export and specify dynamic_shapes (e.g. with Dim.DYNAMIC))Útorch.export.dynamic_shapesrô   rn   r?   rË   rs   ÚexprÚ	is_numberÚsympyÚ@torch._export.passes.add_runtime_assertions_for_constraints_passrõ   Útorch.utils._sympy.solverö   r°   Úfree_symbolsÚnextÚiterÚsubsrë   r{   ÚSymbolrÕ   ÚEqÚmathÚinf)rí   r¤   rî   rð   rñ   rò   rô   rþ   rõ   rö   ÚsymbolÚexisting_dimÚpathÚsolutionÚmin_valÚmax_vals   &&&&&&          rC   Ú_check_symintr  j  sB  € õ 8ô 	�3œŸ™×%Ò%Ø—‘—‘×'×'Ð'Ü�c×'Ò'ñ
 	ãõõ 3ä�&œ%Ÿ,™,×'Ó'¬C°·±×0@Ñ0@×0MÑ0MÓ,NÐRSÕ,SÜ”d˜6Ÿ;™;×+Ñ+×8Ñ8Ó9Ó:ˆØÔ$Ø!Ÿ;™;×+Ñ+×0Ñ0°ÓAˆLØÔ"Ü! 'Ó*�Ø’=Ø˜g a S¨˜NÕ*�DÜ"Ø(¨¨Ð.>¸|¸nÈJÐWZÐV[Ð\óð ð	 #ô ˜&Ÿ+™+×*Ñ*¨E¯L©L×9Ò9ô
 +.¨c«(�Ò'á$ U§X¢X¨f¯k©k×.>Ñ.>ÀÓ%DÀfÓM�ØÒ#Ü% gÓ.�DØ’}Ø '¨!¨¨A Õ.˜Ü&Ø)¨$¨¨s°3°%ð 8'Ø'-§{¡{×'7Ñ'7Ð&8¸ÀÀÈðXóð ô
 /2°(¸1µ+Ó.>�OÑ+à�;‰;×ÑÐ0Ô0Ù4Ø!§+¡+×"2Ñ"2Õ3ó ÑˆGð ˜Œ{Ø”=Ü% gÓ.�DØ’}Ø '¨!¨¨A Õ.˜Ü&Ø,¨T¨F°*¸W¸IÀZÐPSÈuÐUóð ð œŸ™Ô!Ø”=Ü% gÓ.�DØ’}Ø '¨!¨¨A Õ.˜Ü&Ø,¨T¨F°*¸W¸IÀZÐPSÈuÐUóð ñ	 !ñ "ñ 1ô* 
�FœEŸL™L×	)Ò	)°&·+±+×2BÑ2B×2L×2LÐ2Lñ 	Ø	”�F“Ô	Ü˜'Ó"ˆØŠ=Ø�g˜a˜S �NÕ"ˆDÜØ   Ð&6°v°h¸jÈÈð N&ð &ó
ð 	
ñ	 
rE   c                óê   € V ^8„  d   QhR\         \        P                  P                  ,          R\        \
        \
        \        R3,          \        3,          ,          R\        R\        3,          RR/# )r8   Úinput_placeholdersÚflat_args_with_path.rî   rï   r<   N)Úlistr?   ra   ÚNoder   Útupler   r=   )rB   s   "rC   rD   rD   È  s^   € ÷ 8ñ 8ÜœUŸX™XŸ]™]Õ+ð8ä!¤%¬¬c°3¨h­¼Ð(<Õ"=Õ>ð8ô ˜L¬#Ð-Õ.ð8ð 
ñ	8rE   c           
      ó<  € \        V4      \        V 4      8w  d%   \        R \        V 4       R\        V4       R24      h/ p\        W4       EFL  w  w  rEpVP                  P	                  R4      p\        V4      '       dè   \        V\        P                  4      '       g$   \        R\        V4       R\        V4       24      h\        VP                  4      \        VP                  4      8w  d3   \        R\        V4       RVP                   RVP                   R24      h\        \        VP                  VP                  4      4       F  w  pw  rš\        W©W#WH4       K  	  EK  \        V\        \        \         34      '       dÝ   \        V4      \        V4      Jd   \        R\        V4       RV R	V 24      h\        V\        4      '       dl   \"        P$                  ! V4      '       dP   \        V\        4      '       d   \"        P$                  ! V4      '       g   \        R\        V4       R
V 24      hEKó  WW8w  d   \        R\        V4       RV R	V 24      hEK  \        V\        P&                  4      '       g   EK<  \        VVVVVR4       EKO  	  R# )z&Unexpected number of inputs (expected z, got Ú)rÇ   rø   z to be a tensor, but got z,Unexpected number of dimensions in input at z.shape (expected rù   rú   z to be nan, but got N)r°   r{   Úzipr™   rÈ   r   rn   r?   ro   rë   ræ   ÚshapeÚ	enumerater  rÕ   Úfloatr>   r  ÚisnanrË   )r  r  rî   rð   rá   r¤   rs   Únode_valÚjÚarg_dimÚnode_dims   &&&        rC   Ú"_check_input_constraints_for_graphr!  È  sq  € ô
 ÐÓ¤3Ð'9Ó#:Ô:ÜðÜÐ/Ó0Ð1°¼Ð<OÓ8PÐ7QÐQRðTó
ð 	
ð 02€OÜ!$Ð%8×!MÑ‰ˆ˜Ø—9‘9—=‘= Ó'ˆÜ˜(×#Ò#Ü˜c¤5§<¡<×0Ò0Ü"Ø(¬°HÓ)=Ð(>Ð>WÔX\Ð]`ÓXaÐWbÐcóð ô �8—>‘>Ó"¤c¨#¯)©)£nÔ4Ü"ØBÄ:ÈhÓCWÐBXð Y!Ø!)§¡Ð 0°°s·y±y°kÀðDóð ô
 +4´C¸¿	¹	À8Ç>Á>Ó4RÖ*SÑ&�Ñ&�GÜØÐ'8È8öô +Tô
 ˜¤3¬¬sÐ"3×4Ò4Ü�C‹y¤ X£Ó.Ü"Ø(¬°HÓ)=Ð(>Ð>NÈxÈjÐXbÐcfÐbgÐhóð ô ˜(¤E×*Ò*¬t¯zªz¸(×/CÒ/CÜ! #¤u×-Ò-´T·Z²ZÀ·_²_Ü&Ø,¬Z¸Ó-AÐ,BÐBVÐWZÐV[Ð\óð ò 6Eð ”Ü"Ø(¬°HÓ)=Ð(>Ð>NÈxÈjÐXbÐcfÐbgÐhóð ò !ô ˜¤%§,¡,×/Õ/ÜØØØ!ØØØ÷óG "NrE   Úserialized_type_nameÚto_dumpable_contextÚfrom_dumpable_contextÚreturn_none_fieldsc                óÌ   € V ^8„  d   QhR\         \        ,          R\        R,          R\        R,          R\        R,          R\
        R,          R\        R,          R\        R	R/# )
r8   ÚclsÚ
flatten_fnNÚunflatten_fnr"  r#  r$  r%  r<   )ræ   r   r'   r0   r>   r.   r(   rÖ   )rB   s   "rC   rD   rD     st   € ÷ 8ñ 8Ü	Œc�ð8ä˜DÕ ð8ô  Õ$ð8ô
  �*ð8ô -¨tÕ3ð8ô 1°4Õ7ð8ô ð8ð 
ñ8rE   c          
      óÌ  a aa€ \         P                  ! S 4      '       g   \        R S  24      h\        P                  P
                  R V3R ll4       p\        P                  P
                  R V 3R ll4       p\        P                  P
                  R V3R ll4       p	Se   SMToVe   TMTpVRJ VRJ ,          '       d   \        RS  R	24      h\        S SVVV	VVR
7       R# )z7Only dataclasses can be registered with this function: c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# ©r8   Úobjr<   ©r   r  r  r&   )rB   s   "rC   rD   Ú7register_dataclass_as_pytree_node.<locals>.__annotate__  s(   € ÷ 3ñ 3¤ð 3¬¬d´3­i¼Ð.@Õ(Añ 3rE   c                 ó  <€ . p. p. p\         P                  ! V 4       Fd  pVP                  \        WP                  4      reVf	   S'       d%   VP	                  V4       VP	                  V4       KS  VP	                  V4       Kf  	  WV.3# ©N)ÚdataclassesÚfieldsrX   rP   Úappend)r-  Ú	flattenedÚ
flat_namesÚ
none_namesÚfrX   rÇ   r%  s   &      €rC   Údefault_flatten_fnÚ=register_dataclass_as_pytree_node.<locals>.default_flatten_fn  s}   ø€ àˆ	Øˆ
Øˆ
Ü×#Ò# CÖ(ˆAØŸ™¤¨¯V©VÓ 4�#ØŠ×"4Ø× Ñ  Ô%Ø×!Ñ! $Ö'à×!Ñ! $Ö'ñ )ð  zÐ2Ð2Ð2rE   c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# ©r8   r»   Úcontextr<   ©r   r   r&   )rB   s   "rC   rD   r/  !  s*   € ÷ Qñ Q¤X¬c¥]ð Q¼Wð QÌñ QrE   c           
      ój   <€ Vw  r#S! R/ \        \        W 4      4      B\         P                  V4      B # )Nr€   )r=   r  Úfromkeys)r»   r=  r6  r7  r'  s   &&  €rC   Údefault_unflatten_fnÚ?register_dataclass_as_pytree_node.<locals>.default_unflatten_fn   s1   ø€ à!(Ñˆ
ÙÑP”Tœ#˜jÓ1Ó2ÐP´d·m±mÀJÓ6OÑPÐPrE   c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# r,  r.  )rB   s   "rC   rD   r/  &  s,   € ÷ Wñ W¬#ð W´%¼¼S½	Ä7Ð8JÕ2Kñ WrE   c                 ó‚   <€ S! V 4      w  pw  r#\        W!4       UUu. uF  w  rE\        V4      V3NK  	  uppV3# u uppi r1  ©r  r,   )r-  r5  r6  Ú_none_namesrÀ   rÁ   r(  s   &     €rC   Údefault_flatten_fn_with_keysÚGregister_dataclass_as_pytree_node.<locals>.default_flatten_fn_with_keys%  sC   ø€ á/9¸#«Ñ,ˆ	Ñ,�JÜ/2°:Ô/IÔJÑ/I¡t q”˜A“ Ó"Ñ/IÒJÈJÐVÐVùÓJs   �;Nz7Both to_dumpable_context and from_dumpable_context for z must be None or registered.©r"  Úflatten_with_keys_fnr#  r$  )r2  Úis_dataclassr�   r?   Ú_dynamoÚdont_skip_tracingÚ
ValueErrorr%   )
r'  r(  r)  r"  r#  r$  r%  r9  rA  rG  s
   ff&$$$d   rC   Ú!register_dataclass_as_pytree_noderO    sû   ú€ ô ×#Ò# C×(Ò(ÜØEÀcÀUÐKó
ð 	
ô ‡]�]×$Ñ$÷3ó %ð3ô ‡]�]×$Ñ$÷Qó %ðQô ‡]�]×$Ñ$÷Wó %ðWð  *Ò5‘Ð;M€JØ#/Ò#;‘<ÐAU€Là˜tÐ#Ð(=ÀÐ(E×FÔFÜØEÀcÀUð K%ð %ó
ð 	
ô
 ØØØØ1Ø9Ø/Ø3÷rE   c                ó\   € V ^8„  d   QhRRR\         P                  P                  R\        /# ©r8   Úprogramr   rs   r<   ©r?   ra   r  rÖ   )rB   s   "rC   rD   rD   >  s/   € ÷ Eñ EÐ'ð E¬u¯x©x¯}©}ð EÄñ ErE   c                óH   € VP                   V P                  P                  9   # )zE
Checks if the given node is a parameter within the exported program
)rX   r9   r¼   ©rR  rs   s   &&rC   Úis_paramrV  >  s   € ð
 �9‰9˜×/Ñ/×DÑDÑDÐDrE   c                ó’   € V ^8„  d   QhRRR\         P                  P                  R\         P                  P                  R,          /# ©r8   rR  r   rs   r<   N)r?   ra   r  r@   r   )rB   s   "rC   rD   rD   F  s=   € ÷ ñ Øðä
�(‰(�-‰-ðô ‡X�X×Ñ˜$ÕñrE   c                óœ   € \        W4      '       d;   V P                  P                  VP                  ,          pV P                  V,          # R# )z—
Returns the parameter associated with the given node in the exported program.
Returns None if the node is not a parameter within the exported program
N)rV  r9   r¼   rX   r`   )rR  rs   Úparameter_names   && rC   Ú	get_paramr[  F  s=   € ô �×ÒØ ×0Ñ0×EÑEÀdÇiÁiÕPˆØ×!Ñ! .Õ1Ð1árE   c                ó\   € V ^8„  d   QhRRR\         P                  P                  R\        /# rQ  rS  )rB   s   "rC   rD   rD   V  s/   € ÷ Bñ BÐ(ð B´·±·±ð BÄ$ñ BrE   c                óH   € VP                   V P                  P                  9   # )zB
Checks if the given node is a buffer within the exported program
)rX   r9   r½   rU  s   &&rC   Ú	is_bufferr^  V  s   € ð
 �9‰9˜×/Ñ/×AÑAÑAÐArE   c                ó~   € V ^8„  d   QhRRR\         P                  P                  R\         P                  R,          /# rX  ©r?   ra   r  ro   )rB   s   "rC   rD   rD   ^  s7   € ÷ ñ Øðä
�(‰(�-‰-ðô ‡\�\�DÕñrE   c                óö   € \        W4      '       dh   V P                  P                  VP                  ,          pW P                  P                  9   d   V P
                  V,          # V P                  V,          # R# )z‘
Returns the buffer associated with the given node in the exported program.
Returns None if the node is not a buffer within the exported program
N)r^  r9   r½   rX   rW   r:   r`   )rR  rs   rÂ   s   && rC   Ú
get_bufferrb  ^  s`   € ô �×ÒØ×-Ñ-×?Ñ?ÀÇ	Á	ÕJˆØ×1Ñ1×HÑHÔHØ×$Ñ$ [Õ1Ð1à×%Ñ% kÕ2Ð2árE   c                ó\   € V ^8„  d   QhRRR\         P                  P                  R\        /# rQ  rS  )rB   s   "rC   rD   rD   q  s3   € ÷ Rñ RØðRä
�(‰(�-‰-ðRô 
ñRrE   c                óH   € VP                   V P                  P                  9   # )zR
Checks if the given node is a lifted tensor constant within the exported program
)rX   r9   Ú!inputs_to_lifted_tensor_constantsrU  s   &&rC   Úis_lifted_tensor_constantrf  q  s   € ð �9‰9˜×/Ñ/×QÑQÑQÐQrE   c                ó~   € V ^8„  d   QhRRR\         P                  P                  R\         P                  R,          /# rX  r`  )rB   s   "rC   rD   rD   |  s7   € ÷ ñ Øðä
�(‰(�-‰-ðô ‡\�\�DÕñrE   c                óœ   € \        W4      '       d;   V P                  P                  VP                  ,          pV P                  V,          # R# )z±
Returns the lifted tensor constant associated with the given node in the exported program.
Returns None if the node is not a lifted tensor constant within the exported program
N)rf  r9   re  rX   r:   )rR  rs   Úlifted_tensor_names   && rC   Úget_lifted_tensor_constantrj  |  sD   € ô ! ×/Ò/Ø$×4Ñ4×VÑVØ�I‰Iõ
Ðð × Ñ Ð!3Õ4Ð4árE   c                ó  € V ^8„  d   QhR\         P                  P                  R\        \         P                  P                  .\         P                  P                  \
        ,          3,          R\         P                  P                  /# )r8   r¶   Únode_call_backr<   )r?   ra   rb   r   r  rÖ   )rB   s   "rC   rD   rD   Ž  s[   € ÷ ñ Ü�‰×ÑðäœeŸh™hŸm™m˜_¬e¯h©h¯m©m¼dÕ.BÐBÕCðô ‡X�X×ÑñrE   c                ó  a€ ^ RI Hp / o^ pV P                  P                   F  pV! V4      '       d
   V^,          pVSV&   K!  	  V! V V V3R lRRR7      pV P                  P                  VP                  n        VP                  4        V# )a+  
sequential_split creates a new graph module that splits the input graph module into multiple submodules
based on the node_call_back. It doesn't mutate the input graph module. The node_call_back should return
True if the node is a delimiter.  Delimiter will be the first node in the next submodule.
)Úsplit_modulec                 ó   <€ SV ,          # r1  r€   )rs   Ú	split_maps   &€rC   Ú<lambda>Ú"sequential_split.<locals>.<lambda>£  s	   ø€ �Y˜t–_rE   T)Úkeep_original_orderÚkeep_original_node_name)Útorch.fx.passes.split_modulern  ri   rj   Ú_codegenrq   )r¶   rl  rn  Úsplit_idrs   Únew_gmrp  s   &&    @rC   Úsequential_splitry  Ž  s…   ø€ õ :à€IØ€HØ—‘—”ˆÙ˜$×ÒØ˜�MˆHØ"ˆ	�$‹ñ ñ
 Ø
Ø
Ü$Ø Ø $ô€Fð ŸH™H×-Ñ-€F‡L�LÔØ
×ÑÔØ€MrE   c                ó  € V ^8„  d   QhR\         \        P                  P                  ,          R\        \        P                  P                  .\
        3,          R\         \        P                  P                  ,          /# ©r8   rj   rl  r<   ©r  r?   ra   r  r   Úobject)rB   s   "rC   rD   rD   ­  sR   € ÷ <ñ <Ü”—‘—‘Õð<Ü08¼%¿(¹(¿-¹-¸Ì&Ð9PÕ0Qð<ä	Œ%�(‰(�-‰-Õñ<rE   c                óN   € V  Uu. uF  q!! V4      '       g   K  VNK  	  up# u upi )z:Returns the nodes that match the node_call_back as a list.r€   ©rj   rl  rs   s   && rC   Únodes_filterr€  ­  s%   € ñ #Ó;™U�T n°T×&:�DˆD™UÑ;Ð;ùÒ;s   …"™"c                ó2   € V ^8„  d   QhR\         R,          /# ©r8   r<   ©NNN©r   )rB   s   "rC   rD   rD   µ  s   € ÷ 3ñ 3¬iÐ8HÕ.Iñ 3rE   c               #   ó:   "  € \         p R s  Rx € V s R#   T s i ; i5i©TN)Ú_DISABLE_ATEN_TO_ASSERTION_PASS)Úorig_vals    rC   Ú$_disable_aten_to_metadata_assertionsr‰  ´  s&   é € ô /€HØ&*Ð#ð3Ûà*2Ò'ø¨(Ñ'üs   ‚	Œ �”˜c                óP   € V ^8„  d   QhR\         P                  P                  RR/# ©r8   r¶   r<   NrÅ   )rB   s   "rC   rD   rD   ¿  s$   € ÷ -ñ -¬U¯X©X×-AÑ-Að -Àdñ -rE   c                 óv  € ^ RI HpHp \        '       d   R# \        P
                  P                  P                  P                  \        P
                  P                  P                  P                  \        P
                  P                  P                  P                  .pV P                  P                   EFÖ  pVP                  V9   g   K  VP                  P                  \        P
                  P                  P                  P                   J d6   VP"                  ^ ,          VP                  P"                  ^ ,          8X  d   K’  VP"                  ^ ,          P$                  P'                  R4      ;pf   KÄ  V P                  P)                  V4      ;_uu_ 4        V! V \*        P,                  ! VRVP$                  P'                  R4      RVP$                  P'                  R4      /R7      4      ;_uu_ 4        V P                  P/                  \        P
                  P                  P                  P                   VP"                  ^ ,          3RVP                  RVP                  R	VP0                  /R
7       RRR4       RRR4       EKÙ  	  R#   + '       g   i     L; i  + '       g   i     EK  ; i)r   ©Ú_node_metadata_hookÚ_set_node_metadata_hookNrÇ   r¹   r¸   ©r¾   ÚdtypeÚdeviceÚlayout©ÚargsÚkwargs)Ú(torch._export.passes._node_metadata_hookrŽ  r�  r‡  r?   ÚopsÚatenÚtor’  r‘  Údtype_layoutri   rj   rM   ÚprevÚ_assert_tensor_metadataÚdefaultr•  r™   rÈ   Úinserting_beforeÚ	functoolsÚpartialr—   r“  )r¶   rŽ  r�  Úaten_to_variantsrs   Ú
tensor_vals   &     rC   Ú$_insert_aten_to_metadata_assert_passr¤  ¿  sÕ  € ÷÷
 'Ó&Ùô 	�	‰	�‰×Ñ× Ñ Ü�	‰	�‰×Ñ×ÑÜ�	‰	�‰×Ñ×&Ñ&ðÐð
 —‘—•ˆØ�;‰;Ð*Ö*à—	‘	× Ñ ¤E§I¡I§N¡N×$JÑ$J×$RÑ$RÓRØ—I‘I˜a•L D§I¡I§N¡N°1Õ$5Ô5ñ à"Ÿi™i¨�l×/Ñ/×3Ñ3°EÓ:Ð:�
ÔGà—H‘H×-Ñ-¨d×3Õ3Ù+ØÜ!×)Ò)Ø/à -¨t¯y©y¯}©}¸]Ó/KØ 1°4·9±9·=±=ÐARÓ3Sð&ô÷	õ 	ð —H‘H×*Ñ*ÜŸ	™	Ÿ™×>Ñ>×FÑFØ"Ÿi™i¨�l˜_à# Z×%5Ñ%5Ø$ j×&7Ñ&7Ø$ j×&7Ñ&7ð ð +ô ÷	÷ 4Ò3ó ÷	÷ 	ú÷ 4×3Ñ3ús&   ÆAJ&Ç;BJÉ<J&ÊJ#ÊJ&Ê&J8c                óž   € V ^8„  d   QhR\         P                  P                  RRR\        \         P                  P                  R3,          /# )r8   r¶   r9   r   r<   )r?   ra   rb   r  )rB   s   "rC   rD   rD   ï  sC   € ÷ #ñ #Ü�‰×Ñð#Ø/?ð#ä
Œ5�8‰8×ÑÐ!1Ð1Õ2ñ#rE   c           
      óÆ  € ^ RI HpHp ^ RIHp \
        P                  P                  P                  '       gx   RpV! V \        P                  ! VRV/R7      4      ;_uu_ 4        \        V 4      pV'       d&   \        V VR\        V P                  4       2RR7       R	R	R	4       \        V 4       V P!                  4        V! V 4      Vn        W3#   + '       g   i     L;; i)
r   r�  )Ú_graph_output_nameszUFile "torch/fx/passes/runtime_assert.py", line 24, in insert_deferred_runtime_assertsr¹   r�  zexported program: T)ÚexportN)r—  rŽ  r�  Ú4torch._functorch._aot_autograd.input_output_analysisr§  r?   rL  ÚconfigÚdo_not_emit_runtime_assertsr   r¡  rÎ   r   r   ri   r¤  rq   Úuser_outputs)r¶   r9   rŽ  r�  r§  r¹   rÊ   s   &&     rC   Úapply_runtime_assertion_passr­  ï  sÇ   € ÷õ Yä�=‰=×Ñ×;×;Ð;ð1ð 	ñ %ØÜ×ÒØ#¨}¸kÐ.Jô÷
õ 
ô /¨rÓ2ˆIßÜ/ØØØ(Ô)LÈRÏXÉXÓ)VÐ(WÐXØõ	÷
ô  	-¨RÔ0ð ‡L�L„NÙ#6°rÓ#:€OÔ ØÐÐ÷+
÷ 
ús   Á$9CÃC 	c                ó
  € V ^8„  d   QhR\         \        P                  P                  ,          R\        \        P                  P                  .\
        3,          R,          R\        P                  P                  R,          /# )r8   rj   rl  Nr<   r|  )rB   s   "rC   rD   rD     sY   € ÷ ñ Ü”—‘—‘ÕðäœeŸh™hŸm™m˜_¬fÐ4Õ5¸Õ<ðô ‡X�X‡]�]�TÕñrE   c                ód   € \        Y'       d   TMR 4      p\        V4      ^ 8”  d
   V^ ,          # R# )z¡
Returns the first node that matches the node_call_back. If no node matches, returns None.
When node_call_back is None, returns the first node in the node list.
c                 ó   € R # )Tr€   ©rs   s   &rC   rq  Únodes_first.<locals>.<lambda>  s   € ÑQUrE   N)r€  r°   )rj   rl  Úrets   && rC   Únodes_firstr´    s,   € ô �u¶™nÑDUÓ
V€CÜ
ˆ3ƒx�!„|Ø�1�vˆÙrE   c                óÆ   € V ^8„  d   QhR\         \        P                  P                  ,          R\        \        P                  P                  .\
        3,          R\        /# r{  )r  r?   ra   r  r   r}  rÕ   )rB   s   "rC   rD   rD   #  sE   € ÷ 4ñ 4Ü”—‘—‘Õð4Ü08¼%¿(¹(¿-¹-¸Ì&Ð9PÕ0Qð4äñ4rE   c                ó*   € \        \        W4      4      # )z:Returns the number of nodes that match the node_call_back.)r°   r€  )rj   rl  s   &&rC   Únodes_countr·  #  s   € ô Œ|˜EÓ2Ó3Ð3rE   c                ó  € V ^8„  d   QhR\         \        P                  P                  ,          R\        \        P                  P                  .\
        3,          R\         \        P                  P                  ,          /# r{  r|  )rB   s   "rC   rD   rD   *  sR   € ÷ 	ñ 	Ü”—‘—‘Õð	Ü08¼%¿(¹(¿-¹-¸Ì&Ð9PÕ0Qð	ä	Œ%�(‰(�-‰-Õñ	rE   c                ó(   € V  F  pV! V4       K  	  V # )zš
Sequentially visit the nodes list and invoke node_call_back on each element.
Returns the nodes list after the node_call_back is invoked on each element.
r€   r  s   && rC   Ú	nodes_maprº  *  s   € ó ˆÙ�tÖñ à€LrE   c                ó„   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  RR/# )r8   Úold_nodeÚnew_noder<   N)r?   ra   r  )rB   s   "rC   rD   rD   6  s1   € ÷ (ñ (œEŸH™HŸM™Mð (´U·X±X·]±]ð (Àtñ (rE   c                ó’   € V P                  V4       V P                  P                  4        V P                  P	                  V 4       R# )z-
Replace all uses of old_node with new_node.
N)Úreplace_all_uses_withÚusersÚclearri   Ú
erase_node)r¼  r½  s   &&rC   Únode_replace_rÃ  6  s4   € ð ×"Ñ" 8Ô,Ø‡N�N×ÑÔØ‡N�N×Ñ˜hÖ'rE   c                ó„   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  RR/# )r8   r¶   r;   r<   N)r?   ra   rb   r@   rA   )rB   s   "rC   rD   rD   ?  s4   € ÷ 7ñ 7¤E§H¡H×$8Ñ$8ð 7¼u¿x¹x¿¹ð 7ÐSWñ 7rE   c                 ó  € \        V\        P                  P                  4      '       dX   \	        VR 4      '       dD   RVP
                  9   d1   V P
                  P                  RVP
                  R,          /4       R# R# R# R# )r™   r˜   N)rn   r?   ra   rb   Úhasattrr™   Úupdate)r¶   r;   s   &&rC   Ú_update_gm_meta_if_possiblerÈ  ?  s_   € ä�3œŸ™×,Ñ,×-Ò-Ü�C˜× Ò Ø˜Ÿ™Ô à
�‰�‰˜ #§(¡(¨8Õ"4Ð5Ö6ñ !ñ !ñ 	.rE   c                óŽ   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  R,          /# )r8   Úcall_mod_noder<   N)r?   ra   r  rb   )rB   s   "rC   rD   rD   H  s5   € ÷ ^ñ ^¤§¡§¡ð ^´%·(±(×2FÑ2FÈÕ2Mñ ^rE   c                ó„	  a€ V P                   R8w  d   \        RV P                    24      hV P                  P                  pVf   \        R4      h\	        V P
                  \        4      '       g,   \        R\        V P
                  4      P                   24      h\        WP
                  4      pR VP                  P                   4       pR VP                  P                   4       pVP                  P                   Uu. uF  qUP                   R8X  g   K  VNK  	  pp\        W0P                  4       FQ  w  rx\	        V\        P                  P                  4      '       g   \        R	\        V4       24      h\!        Wx4       KS  	  VP                  P#                  V 4      ;_uu_ 4        V EF1  pVP                  P%                  V4      p	VP                   R
8X  d÷   \	        V	P
                  \        4      '       g"   \        R\        V	P
                  4       24      h\	        VP
                  \        4      '       g"   \        R\        VP
                  4       24      hV	P
                  p
\'        W4      '       d)   ^pRV 2p
\'        W4      '       d   V^,          pRV 2p
K!  W©n        \)        WP
                  \        W%P
                  4      4       \!        WY4       EK4  	  \+        V4      ^ 8”  Edn   \+        V4      ^8w  g"   \+        V^ ,          P                  4      ^8w  d   \        R\+        V4       R24      hV^ ,          P                  ^ ,          o\	        S\        P                  P                  4      '       d(   SP,                  P/                  4        \!        V S4       MÔ\	        S\0        \2        34      '       d†   S F%  pVP,                  P5                  V^ ,          4       K'  	  \7        \1        V P,                  P9                  4       4      R 4      p\;        VV3R l4       V P                  P=                  V 4       M3\?        R\        S4       R24      hV P                  P=                  V 4       RRR4       VPA                  4        VPC                  4        V# u upi   + '       g   i     L7; i)z…
Inline the submodule of the given node into the parent module.
Note: we only support the case where submodule takes tensors inputs.
r”   zexpected call_module op, got Nz owning_module should not be Nonezexpected target to be str, got c              3   óJ   "  € T F  qP                   R 8X  g   K  Vx € K  	  R# 5i)rº   N©rk   ©Ú.0rs   s   & rC   Ú	<genexpr>Únode_inline_.<locals>.<genexpr>Y  s   é € Ð
KÑ.�D·'±'¸]Ñ2J�4Š4Ó.ùó   ‚#™
#c              3   óJ   "  € T F  qP                   R9  g   K  Vx € K  	  R# 5i)rº   N)rº   ÚoutputrÍ  rÎ  s   & rC   rÐ  rÑ  Z  s    é € ð Ù+�¯w©wÐ>WÑ/W�ŠÓ+ùrÒ  rÔ  zexpected fx.Node, got rg   z&Expected str target for get_attr, got Úsubmod_z*expected exactly 1 output with 1 arg, got z outputsc                 óh   € V P                   R 8H  ;'       d    V P                  \        P                  J # )r—   )rk   rM   ÚoperatorÚgetitemr±  s   &rC   rq  Únode_inline_.<locals>.<lambda>�  s.   €  §¡¨OÑ!;÷ "8ð "8ØŸ™¤x×'7Ñ'7Ð7ð"8rE   c                 óL   <€ \        V SV P                  ^,          ,          4      # ©rã   )rÃ  r•  )Úget_item_nodeÚ
new_outputs   &€rC   rq  rÙ  –  s    ø€ ¬-Ø%à" =×#5Ñ#5°aÕ#8Õ9ô+rE   zUnsupported output type z2. Expect it to be a Node or a list/tuple of Nodes.)"rk   r�   ri   Úowning_modulern   rM   r>   ræ   rç   rP   rj   r  r•  r?   ra   r  rÃ  rŸ  Ú	node_copyrÆ  rS   r°   rÀ  rÁ  r  r  rR   r€  Úkeysrº  rÂ  ÚNotImplementedErrorÚdelete_all_unused_submodulesrq   )rÊ  r¶   Úsub_gmÚphsÚbodyrs   rÔ  Úphr¤   r½  Únew_target_namerò   Úget_item_usersrÝ  s   &            @rC   Únode_inline_ré  H  sË  ø€ ð
 ×Ñ˜=Ô(ÜÐ<¸]×=MÑ=MÐ<NÐOÓPÐPØ	×	Ñ	×	*Ñ	*€BØ	‚zÜÐ?Ó@Ð@ä�m×*Ñ*¬C×0Ò0ÜØ-¬d°=×3GÑ3GÓ.H×.QÑ.QÐ-RÐSó
ð 	
ô �R×-Ñ-Ó.€Fá
K˜FŸL™L×.Ò.Ó
K€CñØŸ™×+Ò+ó€Dð  &Ÿ|™|×1Ò1ÓIÑ1�t·W±WÀÑ5H�dˆdÑ1€FÐIä�s×.Ñ.Ö/‰ˆÜ˜#œuŸx™xŸ}™}×-Ò-Ü Ð#9¼$¸s»)¸Ð!EÓFÐFÜ�bÖñ 0ð
 
�‰×	"Ñ	" =×	1Õ	1ÜˆDØ—x‘x×)Ñ)¨$Ó/ˆHØ�w‰w˜*Ô$Ü! (§/¡/´3×7Ò7Ü(Ø@ÄÀhÇoÁoÓAVÐ@WÐXóð ô " $§+¡+¬s×3Ò3Ü(Ø@ÄÀdÇkÁkÓARÐ@SÐTóð ð #+§/¡/�Ü˜2×/Ò/à�AØ(/°¨s m�OÜ! "×6Ò6Ø˜Q�˜Ø,3°A°3¨-šØ"1”Ü˜ŸO™O¬W°V¿[¹[Ó-IÔJÜ˜$×)ñ+ ô. ˆv‹;˜�?Ü�6‹{˜aÔ¤3 v¨a¥y§~¡~Ó#6¸!Ô#;Ü$Ø@ÄÀVÃÀÈXÐVóð ð   �Ÿ™¨Õ*ˆJä˜*¤e§h¡h§m¡m×4Ò4ð × Ñ ×&Ñ&Ô(Ü˜m¨ZÕ8Ü˜J¬¬u¨×6Ò6ã&�DØ—J‘J—N‘N 6¨!¥9Ö-ñ 'ô ".Ü˜×,Ñ,×1Ñ1Ó3Ó4ñ8ó"�ô Ø"ôôð ×#Ñ#×.Ñ.¨}Õ=ä)Ø.¬t°JÓ/?Ð.@Ð@rÐsóð ð ×Ñ×*Ñ*¨=Ô9÷} 
2ð@ ×#Ñ#Ô%Ø‡L�L„NØ€IùòS J÷ 
2×	1ús   ÄR*ÄR*Æ.KR/Ò/R?	c                ól   € V ^8„  d   QhR\         P                  P                  R\        P                  /# r…   )r?   r@   rA   ÚinspectÚ	Signature)rB   s   "rC   rD   rD   ©  s(   € ÷ 4ñ 4´·±·±ð 4ÄG×DUÑDUñ 4rE   c                óÄ  € \         P                  ! V P                  4      pVP                  ^ ,          pR\        P
                  /p. pVP                  4        Fj  w  rV\        VP                  V4       Uu. uF  qwP                  NK  	  ppV F1  p	V	R8X  d   K  VP                  \        P                  ! W–4      4       K3  	  Kl  	  \        P                  ! VR7      # u upi )zµ
Get source code and parse argument names using AST. The function returns
a signature of the forward() function.

# TODO: Directly provide inspect.signature compatible TS-d module.
r•  Úself)Ú
parameters)ÚastÚparseÚcoderå  r   ÚPOSITIONAL_OR_KEYWORDrN   rP   r•  r¤   r4  rë  rì  )
r;   Úast_modÚast_func_defÚarg_type_mapÚ
param_listÚarg_typeÚ
param_typeÚaÚarg_name_listÚarg_names
   &         rC   Ú&_get_torch_jit_trace_forward_signaturerý  ©  s¾   € ô �iŠi˜Ÿ™Ó!€GØ$+§L¡L°¥O€Lð œI×;Ñ;Ð<€Lð €JØ ,× 2Ñ 2Ö 4ÑˆÜ(/°×0AÑ0AÀ8Ô(LÓMÑ(L 1ŸœÑ(LˆÐMÛ%ˆHØ˜6Ô!ÙØ×Ñœg×/Ò/°ÓEÖFó &ñ !5ô ×Ò¨
Ô3Ð3ùò Ns   Á5Cc          
      óÎ   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\
        \        \        3,          /# )r8   r;   Ú	fake_args.Úfake_kwargsr<   )r?   r@   rA   r  r   r=   r>   )rB   s   "rC   rD   rD   Â  sR   € ÷ Eñ EÜ	�‰�‰ðEÜ%*¬3°¨8¥_ðEÜCGÌÌSÈÅ>ðEä	Œ#Œsˆ(…^ñErE   c                 óš  € \        V \        P                  P                  \        P                  P                  34      '       dK   \        V 4      p\        VP                  4      \        V4      \        V4      ,           8w  d   \        R 4      hM \        P                  ! V P                  4      p/ VP                  ! V!  P                  CVC# )zyArguments other than POSITIONAL_OR_KEYWORD kinds in forward() are not supported in _get_torch_jit_trace_forward_signature)rn   r?   ÚjitÚScriptModuleÚTracedModulerý  r°   rï  r�   rë  Ú	signatureÚforwardÚbind_partialÚ	arguments)r;   rÿ  r   rv   s   &&& rC   Ú_bind_signature_to_inputsr	  Â  s¨   € ô �#œŸ	™	×.Ñ.´·	±	×0FÑ0FÐG×HÒHÜ4°SÓ9ˆô ˆs�~‰~Ó¤# i£.´3°{Ó3CÕ"CÔCÜ ðNóð ð Dô ×Ò §¡Ó,ˆð Eˆc×Ò 	Ñ*×4Ñ4ÐD¸ÐDÐDrE   c                óx   € V ^8„  d   QhR\         R\        \         \        3,          R\        \         ,          RR/# )r8   rX   rÑ   rÒ   r<   N)r>   r=   rÕ   rc   )rB   s   "rC   rD   rD   Ø  s8   € ÷ ,ñ ,Ü
ð,Ü#¤C¬ H�~ð,Ü;>¼s½8ð,à	ñ,rE   c                 óö   € VP                  V 4       \        P                  ! R V 4      pV'       dI   VP                  ^4      VP                  ^4      rT\	        V4      W,          8”  d   \	        V4      W&   R# R# R# )rØ   N)rT   rÙ   rÚ   rÛ   rÕ   )rX   rÑ   rÒ   rÚ   rŽ   rÝ   s   &&&   rC   Ú_build_cacher  Ø  s_   € ð ‡N�N�4ÔÜ�HŠH�] DÓ)€EßØ—K‘K “N E§K¡K°£N�Üˆq‹6�NÕ*Ô*Ü%(¨£VˆNÓ"ñ +ñ rE   c                óP   € V ^8„  d   QhR\         P                  P                  RR/# r‹  rÅ   )rB   s   "rC   rD   rD   ã  s$   € ÷ -ñ -¬¯©×(<Ñ(<ð -Àñ -rE   c           	     ó:  € . pV P                   P                   EF‡  pVP                  R8X  g   K  \        VP                  \
        P                  P                  4      '       g   KM  VP                  P                  R8X  d^   VP                  w  r4rVVP                  \        WP                  4      V34       VP                  \        WP                  4      V34       KÅ  VP                  P                  R8X  dO   VP                  ^,          VP                  R,          r‡VP                  \        WP                  4      V34       EK.  VP                  P                  R8X  g   EKL  VP                  w  ršpVP                  \        W	P                  4      W«,           34       EKŠ  	  V Fð  w  r|/ p\        \        4      p\        4       p\        VP                   P                  4       F’  w  ppV\!        V4      8  dW   VV,          P"                  WÒP"                  &   VV,          P"                  ;Vn        Vn        \%        VP"                  Wï4       Kl  \'        WÞWòP"                  VP"                  4      Vn        K”  	  \)        V4       VP+                  4        Kò  	  R# )a  
Propagate placeholder names from the top-level graph into HigherOrderOp subgraphs,
and handle collisions with non-placeholders by count suffixing.
Different HOO subgraph types have different input schemas, so we first enumerate them
and gather the top-level named placeholder nodes.
r—   ÚcondÚwrap_with_set_grad_enabledrä   Úmap_implN)ri   rj   rk   rn   rM   r?   rœ   r�   Ú_nameÚ_argsr4  rP   r   rÕ   rc   r  r°   rX   r  rß   Ú_name_hoo_subgraph_placeholdersrq   )r¶   Úsubgraph_ph_tuplesrs   r£   Ú
true_graphÚfalse_graphÚ	cond_argsÚsubgraphrä  Ú
body_graphÚarrayr•  Úhoo_phsrÐ   rÑ   rÒ   rò   s   &                rC   r  r  ã  sç  € ð RTÐØ—‘—•ˆØ�7‰7�oÖ%¬*Ø�K‰KœŸ™×7Ñ7÷+
ô +
ð �{‰{× Ñ  FÔ*Ø8<¿
¹
Ñ5�˜{Ø"×)Ñ)¬7°2×7HÑ7HÓ+IÈ9Ð*UÔVØ"×)Ñ)¬7°2×7IÑ7IÓ+JÈIÐ*VÖWØ—‘×"Ñ"Ð&BÔBØ $§
¡
¨1¥¨t¯z©z¸"­~˜#Ø"×)Ñ)¬7°2·±Ó+GÈÐ*M×NØ—‘×"Ñ" j×0Ø*.¯*©*Ñ'�
 4Ø"×)Ñ)Ü˜R×!2Ñ!2Ó3°Uµ\ÐB÷ñ ó& 0ÑˆØ#%ˆÜ)4´SÓ)9ˆÜ"›uˆ
Ü  §¡×!5Ñ!5Ö6‰GˆAˆtØ”3�w“<ÔØ&-¨a¥j§o¡o�Ÿ™Ñ#Ø*1°!­*¯/©/Ð9�”	˜DœKÜ˜TŸY™Y¨ÖCä6Ø¨j¿)¹)ÀTÇYÁYó�–	ñ 7ô 	(¨Ô1Ø×ÑÖó! 0rE   c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        \        3,          R\        \        \
        3,          RR/# )r8   r¶   rÐ   Úcustom_metar<   Nr†   )rB   s   "rC   rD   rD     sJ   € ÷ ",ñ ",Ü�‰×Ñð",ä”3œ�8�nð",ô ”cœ3�h•ð",ð 
ñ	",rE   c                óê  € V P                   P                   EF×  pVP                  R8X  Ed—   VP                  V9  d   \	        RVP                  : R24      hWP                  ,          ;Vn        Vn        VP                  V9   dî   VP                  P                  R4      f   / pWCP                  R&   M�VP                  R,          P                  4        Fh  w  rVWRVP                  ,          9   g   K  WbVP                  ,          V,          8w  g   K>  \	        RV RV RW#P                  ,          V,           R	24      h	  VP                  R,          P                  W#P                  ,          4       \        VP                  R
,          \        4      '       d&   VP                  VP                  R
,          n        EK©  EK¬  VP                  V9   g   EKÀ  WP                  ,          Vn        EKÚ  	  R# )zD
Assign new names to all nodes, in the graph module, from name map.
rº   zplaceholder node ú not in name_mapr˜   Nz$Mismatch in custom metadata for key z. Value in node.meta is z and value in custom_meta is rG   rÇ   )ri   rj   rk   rX   r�   rM   r™   rÈ   rN   rÇ  rn   r   )r¶   rÐ   r  rs   Úempty_customrÀ   rÁ   s   &&&    rC   Ú_assign_new_node_namesr"    s}  € ð —‘—•ˆØ�7‰7�mÕ#Ø�y‰y Ô(Ü$Ð'8¸¿¹¹ÐEUÐ%VÓWÐWØ&.¯y©yÕ&9Ð9ˆDŒI˜œØ�y‰y˜KÔ'Ø—9‘9—=‘= Ó*Ò2Ø35�LØ*6—I‘I˜hÒ'ð !%§	¡	¨(Õ 3× 9Ñ 9Ö ;™˜à¨T¯Y©YÕ!7Ö7Ø !°·±Õ%;¸AÕ%>Ö >ä"0Ø"FÀqÀcð J0Ø01¨sÐ2OÐP[×\eÑ\eÕPfÐghÕPiÐOjÐjkð!mó#ð ñ !<ð —	‘	˜(Õ#×*Ñ*¨;·y±yÕ+AÔBô ˜$Ÿ)™) EÕ*Ô,=×>Ò>Ø(,¯	©	�—	‘	˜%Õ ×%ò ?à�Y‰Y˜(×"Ø §¡Õ+ˆD�Ió5 rE   c                óŠ  € V ^8„  d   QhR\         P                  P                  RRR\         P                  P                  R\
        \        R3,          R\        \        \        3,          R\        \        \         P                  \         P                  P                  ,          3,          R	\        \        \        3,          R
R/# )r8   r¶   Úexport_graph_signaturer   r;   rÿ  .r   Úfake_params_buffersr:   r<   N)r?   ra   rb   r@   rA   r  r   r=   r>   ro   r   )rB   s   "rC   rD   rD   8  s©   € ÷ ]$ñ ]$Ü�‰×Ñð]$à2ð]$ô 
�‰�‰ð]$ô ”S˜#�X�ð	]$ô
 ”cœ3�h•ð]$ô œc¤5§<¡<´%·(±(×2DÑ2DÕ#DÐDÕEð]$ô ”Cœ�H�~ð]$ð 
ñ]$rE   c                óN
  a€ / p\        V\        P                  P                  4      '       dP   VP                  P
                   F5  pRVP                  9   g   K  VP                  R,          WxP                  &   K7  	  R R lp	R R lo/ p
\        \        4      p\        4       p\        W#V4      p\        V4      w  rïVP                   Uu. uF:  pVP                  \        P                   8X  g   K$  VP"                  P                  NK<  	  pp\%        VV4       F]  w  w  pppV'       g   K  \'        V
VVV\(        \        P                   ,          RP+                  V3R lV 4       4      ,           RR	7       K_  	  VP                   Fñ  pVP                  \        P                   8X  d   K$  VP                  \        P,                  8X  d   R
pM V	! VP.                  4      P1                  4       p\2        P4                  ! RRV4      p\'        V
VVVP"                  P                  \(        VP                  ,          V,           RR	7       VV9   g   KÈ  VV,          WzVP"                  P                  ,          &   VV Kó  	  V P                  P
                   F7  pVP6                  R8X  d   K  \'        W«WÈP                  VP                  4       K9  	  \9        W
V4       \;        V 4       V P=                  4        VP                   FÁ  pVP"                  P                  V
9  d%   \?        RVP"                  P                  : R24      hV
VP"                  P                  ,          VP"                  n        VP                  \        P@                  8X  g   K�  VP.                  V
9   g   K¢  V
VP.                  ,          R,          Vn        KÃ  	  VPB                   F–  pVP"                  P                  V
9   d-   V
VP"                  P                  ,          VP"                  n        VP                  \D        PF                  8X  g   Kk  VP.                  V
9   g   K~  V
VP.                  ,          Vn        K˜  	  \I        VPK                  4       4       F™  pVV,          pVV
9   g   K  \        V\        PL                  4      '       d   K7  V
V,          pVV8w  g   KI  \2        PN                  ! RV4      '       g   Kh  V\(        \        P@                  ,          V,           8w  g   K‘  VVV&   VV K›  	  R# u upi )a  
This pass is run at the end of _export_non_strict() to assign better placeholder node names:
    - User inputs:
        These follow the signature of mod.forward(), e.g. forward(x, y) produces nodes x, y.
        For nested inputs from dictionaries, lists, tuples, or dataclasses,
        the names are a concatenation of the path to the tensor.
            e.g. x = {
                'a': torch.randn(),
                'b': [torch.randn(), torch.randn()]
            }
        produces nodes x_a, x_b_0, x_b_1.
    - Parameters/buffers/constants/custom objects:
        These follow the FQN of the object, prefixed by "p", "b", "c", "obj" respectively.
            e.g. self.bar.l0.weight produces "p_bar_l0_weight".
    - Effect tokens:
        These are named token, token_1, ...
r˜   c                ó0   € V ^8„  d   QhR\         R\         /# ©r8   Úxr<   )r>   )rB   s   "rC   rD   Ú-placeholder_naming_pass.<locals>.__annotate__Y  s   € ÷ ñ ”sð œsñ rE   c                 óÌ   € V P                  R 4      '       d   V \        R 4      R p M%V P                  R4      '       d   V \        R4      R p \        P                  ! RRV 4      p V # )Ú
L__self___NÚself_ú[^a-zA-Z0-9]r£   )Ú
startswithr°   rÙ   Úsub©r)  s   &rC   Ú_strip_nameÚ,placeholder_naming_pass.<locals>._strip_nameY  sY   € Ø�<‰<˜×%Ò%Ø”#�lÓ#Ð%Ð&‰AØ�\‰\˜'×"Ò"Ø”#�g“,�.Ð!ˆAÜ�FŠF�? C¨Ó+ˆØˆrE   c                ó0   € V ^8„  d   QhR\         R\        /# r(  )r}  r>   )rB   s   "rC   rD   r*  a  s   € ÷ 	Tñ 	Tœvð 	T¬#ñ 	TrE   c                 óV  € \        V \        4      '       d.   \        P                  ! R R\	        V P
                  4      4      p V # \        V \        4      '       d   \	        V P                  4      # \        V \        4      '       d   V P                  # \        R\        V 4       RV  24      h)r.  r£   zPytree key of type z not handled for )rn   r,   rÙ   r0  r>   rÜ   r-   rè   r)   rX   r{   ræ   r1  s   &rC   Ú_extract_pytree_keyÚ4placeholder_naming_pass.<locals>._extract_pytree_keya  s}   € Ü�aœ×$Ò$Ü—’�¨¬S°·±«ZÓ8ˆAØˆHÜ˜œ;×'Ò'Ü�q—u‘u“:ÐÜ˜œ:×&Ò&Ø—6‘6ˆMäÐ!4´T¸!³W°IÐ=NÈqÈcÐRÓSÐSrE   r£   c              3   óP   <"  € T F  pS! V4      P                  4       x € K  	  R # 5ir1  )Úlower)rÏ  r)  r6  s   & €rC   rÐ  Ú*placeholder_naming_pass.<locals>.<genexpr>ƒ  s#   øé € ÐLÁ8¸aÑ.¨qÓ1×7Ñ7×9Ð9Ã8ùs   ƒ#&T)rÔ   r1   r.  rº   zinput spec arg r   :é   NNz
arg(\d+)_1N)(rn   r?   ra   rb   ri   rj   r™   rX   r   rÕ   rc   r	  r/   rI   rJ   r    Ú
USER_INPUTr¤   r  rß   Úplaceholder_prefixesÚjoinÚTOKENrM   r9  rÙ   r0  rk   r"  r  rq   r�   Ú
CUSTOM_OBJry   r!   ÚUSER_INPUT_MUTATIONr  rà  ro   rÚ   )r¶   r$  r;   rÿ  r   r%  r:   r  rs   r2  rÐ   rÑ   rÒ   Úcombined_argsr  r£   rV   Úuser_input_namesÚarg_pathÚ_argÚuser_input_nameÚ	base_namerX   ÚconstantrÞ   r6  s   &&&&&&&                  @rC   Úplaceholder_naming_passrI  8  sÞ  ø€ ð6 #%€KÜ�#”u—x‘x×+Ñ+×,Ò,Ø—I‘I—O”OˆDØ˜4Ÿ9™9Ö$Ø)-¯©°8Õ)<�ŸI™IÓ&ñ $õõ	Tð  "€HÜ%0´Ó%5€NÜ›5€Jô .¨c¸kÓJ€Mä3°MÓBÑÐð +×6Ò6óá6ˆDØ�9‰9œ	×,Ñ,Ñ,ô 	ˆ�‰�ŒÙ6ð ð ô .1Ð1DÐFVÖ-WÑ)Ñˆ�4˜/ß‰?Ü&ØØØØÜ$¤Y×%9Ñ%9Õ:Ø—(‘(ÔLÁ8ÓLÓLõMà#÷ñ .Xð '×2Ô2ˆØ�9‰9œ	×,Ñ,Ô,ÙØ�9‰9œ	Ÿ™Ô'Ø‰Iñ $ D§K¡KÓ0×6Ñ6Ó8ˆIÜ—F’F˜?¨C°Ó;ˆ	ä"ØØØØ�H‰H�M‰MÜ  §¡Õ+¨iÕ7Øõ	
ð ˜Ö#ð 4?¸yÕ3IˆK §¡§¡Õ/Ñ0Ø˜IÒ&ñ/ 3ð: —‘—”ˆØ�7‰7�mÔ#ÙÜ"Ø j·)±)¸T¿Y¹Yö	
ñ ô ˜2¨Ô5ô $ BÔ'ð ‡L�L„Nð '×2Ô2ˆØ�8‰8�=‰= Ô(Ü  ?°4·8±8·=±=Ñ2CÐCSÐ!TÓUÐUØ  §¡§¡Õ/ˆ�‰Œà�I‰Iœ×-Ñ-Ö-°$·+±+ÀÖ2Ið # 4§;¡;Õ/°Õ3ˆDŽKñ 3ð '×3Ô3ˆØ�8‰8�=‰=˜HÔ$Ø$ T§X¡X§]¡]Õ3ˆD�H‰HŒMØ�9‰9œ
×6Ñ6Ö6¸4¿;¹;È(Ö;Rà" 4§;¡;Õ/ˆDŽKñ 4ô �Y—^‘^Ó%Ö&ˆØ˜T•?ˆØ�8Ö¤JØ”e—l‘l÷%
ô %
ð   •~ˆHà˜DÖ Ü—H’H˜]¨D×1Ô1ØÔ 4´Y×5IÑ5IÕ JÈTÕ QÖQà&.�	˜(Ñ#Ø˜d’Oó 'ùòks   Ã!T"Ã1T"c                ó€   € V ^8„  d   QhR\         \        \        3,          R\        R\         \        \        3,          /# )r8   r`   Úin_placer<   )r=   r>   r   rÖ   )rB   s   "rC   rD   rD   Ø  s4   € ÷ ñ Ü”Sœ#�X•ðÜ*.ðä	Œ#Œsˆ(…^ñrE   c                ó>  € V'       dB   V P                  4        F+  w  r#\        VR4      '       g   K  \        W,          R4       K-  	  V # / pV P                  4        F=  w  r#\        VR4      '       d#   VP                  4       P	                  4       WB&   K9  W4V&   K?  	  V# )z½
If `in_place` is false, return a new copy of `state_dict` with "proxy" removed from `v.__dict__`.
`v` is the values in the dictionary.
If `in_place` is true, modify `state_dict` in place.
rŸ   )rN   rÆ  ÚdelattrÚdetachÚclone)r`   rK  rÀ   rÁ   Únew_state_dicts   &&   rC   Úremove_proxy_from_state_dictrQ  Ø  s‹   € ÷ Ø×$Ñ$Ö&‰DˆAÜ�q˜'×"Ô"Ü˜
� wÖ/ñ 'ð ÐàˆØ×$Ñ$Ö&‰DˆAÜ�q˜'×"Ò"Ø$%§H¡H£J×$4Ñ$4Ó$6�Ó!à$%˜qÓ!ñ	 'ð
 ÐrE   c                ó¢   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  P
                  R,          /# r‹  )r?   ra   rb   Ú_subclassesÚfake_tensorr   )rB   s   "rC   rD   rD   ï  s=   € ÷ 3ñ 3Ü�‰×Ñð3ä
×Ñ×"Ñ"×1Ñ1°DÕ8ñ3rE   c                óÀ  € . p. pV P                   P                   EF/  pVP                  R8X  d`   RVP                  9   dO   VP                  R,          pVe6   \	        V\
        P                  4      '       d   VP                  V4       Kp  Kr  Kt  \        V4      ^ 8X  g   K†  RVP                  9   g   RVP                  9   g   Kª  RpRVP                  9   d   VP                  R,          pM$RVP                  9   d   VP                  R,          pVf   Kû  \	        V\
        P                  4      '       g   EK  VP                  V4       EK2  	  \        W,           4      # )a  
For a given graph module, we look at the "val" of placeholder nodes to find the fake inputs.
Additionally, if gm doesn't have placeholders, we further look at the "example_value" or "val" of other nodes.
If no fake mode is found, we return None for fake_mode.
rº   rÇ   NÚexample_value)
ri   rj   rk   r™   rn   r?   ro   r4  r°   r   )r¶   Ú	fake_inpsÚ	fake_valsrs   Úfake_vals   &    rC   rÉ   rÉ   ï  s  € ð %'€IØ$&€IØ—‘—•ˆØ�7‰7�mÔ#¨°·±Ô(:Ø—y‘y Õ'ˆHØÒ#¬
°8¼U¿\¹\×(JÒ(JØ× Ñ  Ö*ñ )KÑ#ä�‹^˜qÖ Ø˜tŸy™yÔ(¨E°T·Y±YÖ,>àˆHØ $§)¡)Ô+ØŸ9™9 _Õ5‘Ø˜$Ÿ)™)Ô#ØŸ9™9 UÕ+�ØÔ#¬
°8¼U¿\¹\×(JÕ(JØ× Ñ  ×*ñ ô  ˜IÕ1Ó2Ð2rE   c                óf   € V ^8„  d   QhR\         P                  P                  R\        R,          /# )r8   r;   r<   rƒ  )r?   r@   rA   r   )rB   s   "rC   rD   rD     s*   € ÷ 9ñ 9Ü	�‰�‰ð9äÐÕ ñ9rE   c              #   ó  "  € \        V P                  4      p\        V P                  4      pV P                  P                  4        V P                  P                  4         R x € Wn        W n        R #   Yn        Y n        i ; i5ir1  )r=   Ú_state_dict_hooksÚ_state_dict_pre_hooksrÁ  )r;   Ústate_dict_hooksÚstate_dict_pre_hookss   &  rC   Ú_disable_load_state_dict_hooksr`    su   é € ô :>¸c×>SÑ>SÓ9TÐÜ=AØ×!Ñ!ó>Ðð ×Ñ×ÑÔ!Ø×Ñ×#Ñ#Ô%ð9Ûà 0ÔØ$8Ö!øð !1ÔØ$8Õ!üs   ‚ABÁ"A4 Á&BÁ4BÂBc                ó(   € V ^8„  d   QhRRR\         /# ©r8   rk   r   r<   ©rÖ   )rB   s   "rC   rD   rD     s   € ÷ ñ �>ð ¤dñ rE   c                 ó  € \         P                  P                  V P                  4       \         P                  P                  P
                  4      ;'       g2    \         P                  P                  P
                  V P                  9   # r1  )r?   r¬   Ú%_dispatch_has_kernel_for_dispatch_keyrX   ÚDispatchKeyÚCompositeImplicitAutogradÚ
py_kernelsrÍ  s   &rC   Ú
_is_cia_opri    s^   € ä�‰×6Ñ6Ø�G‰G‹I”u—x‘x×+Ñ+×EÑEó	
÷ 	Kð 	Kô �8‰8×Ñ×9Ñ9¸R¿]¹]ÑJð	rE   c                ó(   € V ^8„  d   QhRRR\         /# rb  rc  )rB   s   "rC   rD   rD   '  s   € ÷ ;ñ ;˜~ð ;´$ñ ;rE   c                 ó>   € \        V 4      ;'       d    \        V 4      # r1  )Ú_check_valid_to_preserveri  rÍ  s   &rC   Ú_is_preservable_cia_oprm  '  s   € Ü# BÓ'×:Ð:¬J°r«NÐ:rE   c                ó(   € V ^8„  d   QhRRR\         /# rb  rc  )rB   s   "rC   rD   rD   +  s   € ÷ .ñ .�Nð .¤tñ .rE   c                 óT   € V P                  4       P                  R 4      ^ ,          R8H  # )ú::r™  )rX   rO   rÍ  s   &rC   Ú_is_aten_oprq  +  s!   € Ø�7‰7‹9�?‰?˜4Ó  Õ# vÑ-Ð-rE   c                ó(   € V ^8„  d   QhRRR\         /# rb  rc  )rB   s   "rC   rD   rD   /  s   € ÷ ñ �nð ¬ñ rE   c                 ó"   € \        V 4      '       * # r1  )rq  rÍ  s   &rC   Ú_is_custom_oprt  /  s   € Ü˜2‹ÔÐrE   c                ó   € V ^8„  d   QhRR/# r¨   r€   )rB   s   "rC   rD   rD   5  s   € ÷ Wñ W $ñ WrE   c            	     ó¢  € \         P                  P                  R4      p V  F©  p\        VP	                  R4      4      w  r#VP	                  R4      p\        V4      R9  d   \        R\        V4       24      hV^ ,          pRp\        V4      ^8X  d
   V^,          p\        \        \        \         P                  V4      V4      V4      pK«  	  R# )zu
Utility function to query C++ dispatcher to get the all
possible CIA ops and populate them into torch.ops namespace
rg  rp  rG   zexpected 1 or 2 parts, got rž  N)rã   r8   )	r?   r¬   Ú,_dispatch_get_registrations_for_dispatch_keyr  rO   r°   r�   rP   r˜  )Úcia_opsrk   Ú	namespaceÚop_nameÚ
split_listÚop_overload_namer£   s          rC   Ú_materialize_cpp_cia_opsr}  5  s²   € ô
 �h‰h×CÑCØ#ó€Gó
 ˆÜ" 2§8¡8¨D£>Ó2Ñˆ	Ø—]‘] 3Ó'ˆ
äˆz‹? &Ô(Ü Ð#>¼sÀ:»Ð>OÐ!PÓQÐQØ˜Q•-ˆØ$ÐÜˆz‹?˜aÔØ)¨!�}Ðä”GœG¤E§I¡I¨yÓ9¸7ÓCÐEUÓVŠó rE   c                ó<   € V ^8„  d   QhR\         R\         R\         /# ©r8   r•  r–  r<   ©r   )rB   s   "rC   rD   rD   M  s!   € ÷ ñ ¤sð ´cð ¼cñ rE   c                 ó   € \         # )zT
This is a special marker that tells our infra that we shouldn't decompose this op.
)ÚNotImplementedr”  s   *,rC   Ú_special_op_to_preserve_ciarƒ  M  s
   € ô ÐrE   c                ó(   € V ^8„  d   QhRRR\         /# )r8   Úop_overloadr   r<   rc  )rB   s   "rC   rD   rD   X  s   € ÷ ñ ¨.ð ¼Tñ rE   c                 óÒ  € ^ RI Hp V! V 4      '       d   R# V \        P                  9   d   R# \	        V R4      '       g   R# \        V P                  P                   Uu. uF  q"P                  f   K  VNK  	  up4      pV^ 8g  ;'       g    V P                  P                  pV'       d   R# \        P                  P                  V P                  4       4      '       g   R# R# u upi )r   )Ú#_should_decompose_because_unsafe_opFÚ_schemaT)Útorch._decompr‡  r   Úmetadata_fnsrÆ  r°   rˆ  r  Ú
alias_infoÚ
is_mutabler?   r¬   Ú_dispatch_has_kernelrX   )r…  r‡  rò   r‹  Úis_mutating_or_aliasings   &    rC   rl  rl  X  sµ   € ÝAá*¨;×7Ò7ÙØÔ&×3Ñ3Ô3Ùä�; 	×*Ò*ÙäØ×'Ñ'×1Ò1ÓNÑ1ˆq·\±\�ˆÑ1ÑNó€Jð )¨A™o×OÐO°×1DÑ1D×1OÑ1OÐçÙä�8‰8×(Ñ(¨×)9Ñ)9Ó);×<Ò<Ùáùò 	Os   ÁC$Á3C$)Úmaxsizec                ó2   € V ^8„  d   QhR\         R,          /# ©r8   r<   r   ©rc   )rB   s   "rC   rD   rD   s  s   € ÷ Dñ D´s¸>Õ7Jñ DrE   c                  óH   € \        \        P                  P                  4      # r1  )Ú(_collect_all_valid_cia_ops_for_namespacer?   r˜  r™  r€   rE   rC   Ú-_collect_all_valid_cia_ops_for_aten_namespacer•  r  s   € ä3´E·I±I·N±NÓCÐCrE   c                óf   € V ^8„  d   QhR\         P                  P                  R\        R,          /# )r8   Úop_namespacer<   r   )r?   rœ   Ú_OpNamespacerc   )rB   s   "rC   rD   rD   w  s+   € ÷ ñ Ü—*‘*×)Ñ)ðäˆÕñrE   c                 óÌ   € \        4        \        4       pV  FI  p\        W4      pVP                  4        F'  p\	        V4      '       g   K  VP                  V4       K)  	  KK  	  V# r1  )r}  rc   rP   Úop_overloadsrm  rT   )r—  rx  rk   Ú	op_packetr…  s   &    rC   r”  r”  w  sX   € ô Ôô ‹e€GÛˆÜ˜LÓ-ˆ	Ø$×1Ñ1Ö3ˆKÜ% k×2Ô2Ø—‘˜KÖ(ó 4ñ ð
 €NrE   c                ó2   € V ^8„  d   QhR\         R,          /# r‘  r’  )rB   s   "rC   rD   rD   ‡  s   € ÷ ñ ¤C¨Õ$7ñ rE   c                 óž  € \        4       p \        P                  P                   F¤  pVR8w  dŠ   \	        \        P                  V4      '       g   \        RV: 24      h\        \        P                  V4      p\        V\        P                  P                  4      '       d   V \        V4      ,          p K‘  K“  V \        4       ,          p K¦  	  V # )aç  
This is an util function that gets the all CIA functional ops.

The algorithm is in 2 steps:
  1. We first query C++ dispatcher to get the list of CIA ops
     and then we call getattr on torch.ops.aten to lazily populate
     them.

  2. Sometimes, handful of ops have CIA registered in python dispatcher
     but not on the C++ side, these can't be caught at the first step.
     So we walk again to get the final list.

Note that the output of this function should never be modified
r™  z"torch.ops does not have attribute )rc   r?   r˜  Ú_dirrÆ  r�   rP   rn   rœ   r˜  r”  r•  )rx  Úop_namespace_namer—  s      rC   Ú_collect_all_valid_cia_opsr   ‡  s¨   € ô ‹e€GÜ"ŸY™YŸ^œ^Ðà Ô&Üœ5Ÿ9™9Ð&7×8Ò8Ü$Ø8Ð9JÑ8MÐNóð ô #¤5§9¡9Ð.?Ó@ˆLÜ˜,¬¯
©
×(?Ñ(?×@Ò@ØÔCÀLÓQÕQ’ñ Að ÔDÓFÕFŠGñ ,ð €NrE   c                óB   € V ^8„  d   QhRRR\         R\        3,          /# )r8   rk   r   r<   .©r   r}  )rB   s   "rC   rD   rD   ¦  s'   € ÷ Fñ F˜Nð F¬x¸¼V¸Õ/Dñ FrE   c                 ó@  € \         P                  P                  P                  pWP                  9   dO   \        V P                  V,          \         P                  P                  4      '       g   V P                  V,          # R  R lp\        P                  ! W R7      # )c                ó<   € V ^8„  d   QhR\         R\         R\         /# r  r€  )rB   s   "rC   rD   Ú)_get_decomp_for_cia.<locals>.__annotate__±  s!   € ÷ ñ ¬Cð ¼3ð Ä3ñ rE   c                  óX  € VR ,          pVR  \         P                  P                  P                  p\         P                  P	                  VP                  4       \         P                  P                  P                  4      '       d   VP                  ! V.V O5/ VB # \        RV R24      h)Úkernelú	Expected z) to have CompositeImplicitAutograd kernel)r?   r¬   rf  rg  re  rX   Ú_op_dkr�   )r•  r–  r§  Údks   *,  rC   Ú_special_op_to_decompose_ciaÚ9_get_decomp_for_cia.<locals>._special_op_to_decompose_cia±  s’   € Ø˜Õ!ˆØ�8Ðô �X‰X×!Ñ!×;Ñ;ˆÜ�8‰8×9Ñ9Ø�K‰K‹Mœ5Ÿ8™8×/Ñ/×IÑI÷
ò 
ð —=’= Ð5 dÒ5¨fÑ5Ð5ä Ø˜F˜8Ð#LÐMóð rE   )r§  )r?   r¬   rf  rg  rh  rn   r   r¡  )rk   rª  r«  s   &  rC   Ú_get_decomp_for_ciar­  ¦  sj   € ô 
�‰×	Ñ	×	7Ñ	7€BØ	�]‰]Ô¤:¨b¯m©m¸BÕ.?ÄÇÁ×AUÑAU×#VÒ#VØ�}‰}˜RÕ Ð õô ×ÒÐ9ÔEÐErE   c                ó2   € V ^8„  d   QhR\         R,          /# r‚  r„  )rB   s   "rC   rD   rD   Ä  s   € ÷ 	?ñ 	?¤)Ð,<Õ"=ñ 	?rE   c               #   ó†  "  € \         P                  P                  p \         P                  P                  p R \         P                  n        R \         P                  n        Rx € V \         P                  n        V\         P                  n        R#   T \         P                  n        T\         P                  n        i ; i5ir†  )r?   rª   Ú_is_compiling_flagÚ_is_exporting_flag)Úold_compiling_flagÚold_exporting_flags     rC   Ú_compiling_state_contextr´  Ã  sx   é € äŸ™×:Ñ:ÐÜŸ™×:Ñ:Ðð?Ø,0Œ�‰Ô)Ø,0Œ�‰Ô)Ûà,>Œ�‰Ô)Ø,>Œ�‰Ö)øð -?Œ�‰Ô)Ø,>Œ�‰Õ)üs   ‚5C¸.B Á&,CÂ,B>Â>Cc          	      óØ   € V ^8„  d   QhR\         R\        P                  P                  R\        \
        \        P                  \        P                  P                  ,          3,          /# )r8   rÍ   r;   r<   )r   r?   r@   rA   r=   r>   ro   r   )rB   s   "rC   rD   rD   Ð  sK   € ÷  ñ  Üð ä	�‰�‰ð ô 
Œ#Œu�|‰|œeŸh™h×0Ñ0Õ0Ð
0Õ1ñ rE   c                 ó>  € / \        VP                  R R7      4      C\        VP                  R R7      4      Cp/ p/ pVP                  4        FL  w  rV\	        V4      V9   d   V\	        V4      ,          pM V P                  VRR7      pWt\	        V4      &   WsV&   KN  	  V# )F)r–   T)Ústatic_shapes)r=   rš   r›   rN   ÚidÚfrom_tensor)rÍ   r;   Úparams_buffersÚfaked_params_buffersÚmemorÜ   rY   rT  s   &&      rC   Ú_fakify_params_buffersr½  Ð  sª   € ðÜ
ˆs×#Ñ#°UÐ#Ó;Ó
<ðä
ˆs× Ñ °%Ð Ó8Ó
9ð€Nð
 ÐØ"$€DØ$×*Ñ*Ö,‰
ˆÜˆe‹9˜ÔØœr %›y�/‰Kà#×/Ñ/°ÀTÐ/ÓJˆKØ)”�E“‰OØ$/˜SÓ!ñ -ð  ÐrE   c                óf   € V ^8„  d   QhR\         \        P                  P                  ,          RR/# ©r8   r'  r<   N©ræ   r?   r@   rA   )rB   s   "rC   rD   rD   å  s+   € ÷ Gñ G¬d´5·8±8·?±?Õ.Cð GÈñ GrE   c           
     óæ  a a
a€ \        S \        P                  P                  4      '       g   \	        RS  24      h^ RIp ! V
V 3R lRVP                  \        P                  P                  ,          4      o
R V
3R llpR V3R llpR	 V3R
 llpVoTpS P                  R,           S P                  ,           pR R lpR V
3R llp\        S SVVVVVR7       R V3R llp	\        S V	4       R# )aò  
Registers a module as a valid input type for :func:`torch.export.export`.

Args:
    mod: the module instance
    serialized_type_name: The serialized name for the module. This is
    required if you want to serialize the pytree TreeSpec containing this
    module.

Example::

    import torch


    class Module(torch.nn.Module):
        def __init__(self):
            super().__init__()
            self.linear = torch.nn.Linear(3, 3)

        def forward(self, x):
            return self.linear(x)


    torch._export.utils.register_module_as_pytree_node(InputDataClass)


    class Mod(torch.nn.Module):
        def forward(self, x, m):
            return m(x) + x


    ep = torch.export.export(Mod(), (torch.randn(3), Module()))
    print(ep)

z!expected nn.Module subclass, got Nc                   ól   <a a€ ] tR tRt oV3R lV V3R lltV3R lR ltV3R lV3R lltRtVtV ;t	# )	Ú=register_module_as_pytree_input_node.<locals>.PrototypeModulei  c                óX   <€ V ^8„  d   QhRS[ P                  P                  RS[RS[RR/# )r8   Úmr•  r–  r<   N)r?   r@   rA   r   )rB   Ú__classdict__s   "€rC   rD   ÚJregister_module_as_pytree_input_node.<locals>.PrototypeModule.__annotate__  s1   ø€ ÷ 	"ñ 	"™eŸh™hŸo™oð 	"±cð 	"ÁSð 	"ÈTñ 	"rE   c                ó  <€ \         SV `  ! V.VO5/ VB  \        V\        P                  P
                  4      '       g"   \        R \        V4      P                   24      h\        V R4      '       d   \        R4      hSV n
        R# )zexpected nn.Module, got Ú
_proto_clsz_proto_cls should not be setN)ÚsuperÚ__init__rn   r?   r@   rA   r�   ræ   rç   rÆ  rÉ  )rî  rÅ  r•  r–  Ú	__class__r'  s   &&*,€€rC   rË  ÚFregister_module_as_pytree_input_node.<locals>.PrototypeModule.__init__  sm   ø€ Ü‰GÒ˜QÐ0 Ò0¨Ò0Ü˜a¤§¡§¡×1Ò1Ü$Ð'?ÄÀQÃ×@PÑ@PÐ?QÐ%RÓSÐSÜ�t˜\×*Ò*Ü$Ð%CÓDÐDØ!ˆDŽOrE   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r8   Úotherr<   )r}  rÖ   )rB   rÆ  s   "€rC   rD   rÇ    s   ø€ ÷ 	7ñ 	7¡ð 	7©4ñ 	7rE   c                ó4   € V P                   VP                   8H  # r1  ©rÉ  )rî  rÏ  s   &&rC   Ú__eq__ÚDregister_module_as_pytree_input_node.<locals>.PrototypeModule.__eq__  s   € Ø—?‘? e×&6Ñ&6Ñ6Ð6rE   c                ó:   <€ V ^8„  d   QhRS[ S[S[3,          RR/# )r8   r¼  r<   ÚPrototypeModule)r=   r   )rB   rÆ  s   "€rC   rD   rÇ    s$   ø€ ÷ 	+ñ 	+¡T©#©s¨(¥^ð 	+Ð8Iñ 	+rE   c                ó   <€ S! V ! 4       4      # r1  r€   )rî  r¼  rÕ  s   &&€rC   Ú__deepcopy__ÚJregister_module_as_pytree_input_node.<locals>.PrototypeModule.__deepcopy__  s   ø€ á"¡4£6Ó*Ð*rE   rÑ  )
rç   Ú
__module__Ú__qualname__Ú__firstlineno__rË  rÒ  r×  Ú__static_attributes__Ú__classdictcell__Ú__classcell__)rÌ  rÆ  rÕ  r'  s   @@€€rC   rÕ  rÃ    s(   ú‡ € ÷	"ô 	"÷	7ð 	7÷	+÷ 	+ó 	+rE   rÕ  c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# r,  r.  )rB   s   "rC   rD   Ú:register_module_as_pytree_input_node.<locals>.__annotate__  s(   € ÷ 
ñ 
¤ð 
¬¬d´3­i¼Ð.@Õ(Añ 
rE   c                 óè   <€ \        V P                  4       4      p\        V P                  4       4      p/ VCVCp\        VP	                  4       4      \        VP                  4       4      S! V 4      .3# r1  )r=   rš   r›   r  r»   rà  )r-  rš   r›   rº  rÕ  s   &   €rC   r9  Ú@register_module_as_pytree_input_node.<locals>.default_flatten_fn  ss   ø€ Ü × 4Ñ 4Ó 6Ó7ÐÜ˜S×.Ñ.Ó0Ó1ˆØ>Ð,Ð>°Ð>ˆÜ�N×)Ñ)Ó+Ó,Ü�×$Ñ$Ó&Ó'Ù˜CÓ ð/
ð 
ð 	
rE   c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# r<  r>  )rB   s   "rC   rD   rà  '  s%   € ÷ ñ ¤X¬c¥]ð ¼Wð Ìñ rE   c           	      ó   <a€ Vw  r#Ve
   V! 4       f   \        R4      hV! 4       pS	f   \        R4      hS	! V4      w  rVR V3R llo\        ;QJ d%    R \        W4       4       F  '       g   K   RM	  RM! R \        W4       4       4      '       de   \        P
                  P                  P                  P                  V\        \        W 4      4      RRR7      ;_uu_ 4        S! V4      pR R R 4       V# TpV#   + '       g   i     X# ; i)	Nz!Module has been garbage collectedzflatten_fn should not be Nonec                ó€   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  /# r…   ©r?   r@   rA   )rB   s   "rC   rD   ÚXregister_module_as_pytree_input_node.<locals>.default_unflatten_fn.<locals>.__annotate__4  s*   € ÷ 	ñ 	œUŸX™XŸ_™_ð 	´·±·±ñ 	rE   c                 óN  <€ \         P                   ! V 4      pV P                  P                  4        UUu/ uF0  w  r#\         P                   ! V4      \         P                   ! V4      bK2  	  uppVn        VP                  4        F  w  rE\	        WS! V4      4       K  	  V# u uppi r1  )ÚcopyÚ__dict__rN   Únamed_childrenrS   )r;   r³  rÀ   rÁ   rX   ÚchildÚcopy_modules   &     €rC   rí  ÚWregister_module_as_pytree_input_node.<locals>.default_unflatten_fn.<locals>.copy_module4  s{   ø€ Ü—)’)˜C“.ˆCØCFÇ<Á<×CUÑCUÔCWÔXÑCW¹4¸1œDŸIšI a›L¬$¯)ª)°A«,Ò6ÑCWÒXˆCŒLØ"×1Ñ1Ö3‘�Ü˜¡;¨uÓ#5Ö6ñ  4àˆJùó Ys   µ6B!c              3   ó,   "  € T F
  w  rWJx € K  	  R # 5ir1  r€   )rÏ  rÁ   Úos   &  rC   rÐ  ÚUregister_module_as_pytree_input_node.<locals>.default_unflatten_fn.<locals>.<genexpr>;  s   é € Ð=Ñ&<™d˜aˆq�zÓ&<ùs   ‚TF)Útie_weightsÚstrict)
r{   r�   Úanyr  r?   r@   ÚutilsÚ	statelessÚ_reparametrize_moduler=   )
r»   r=  r6  Úrefr-  r5  r£   r³  rí  r(  s
   &&      @€rC   rA  ÚBregister_module_as_pytree_input_node.<locals>.default_unflatten_fn'  sì   ù€ Ø!‰ˆ
ØŠ;™#›%š-ÜÐBÓCÐCÙ‹eˆØÒÜ Ð!@ÓAÐAÙ! #“‰ˆ	÷	ð 	÷ ‹3Ñ=¤c¨&Ô&<Ó=�3�3Š3Ñ=¤c¨&Ô&<Ó=×=Ò=Ü—‘—‘×)Ñ)×?Ñ?Ø”Tœ#˜jÓ1Ó2ÀÈTð @÷ õ ñ " #Ó&�÷ð ˆ
ð ˆCØˆ
÷ö ð ˆ
ús   Ã%	C<Ã<D	c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# r,  r.  )rB   s   "rC   rD   rà  D  s(   € ÷ 
ñ 
¬#ð 
´%¼¼S½	Ä7Ð8JÕ2Kñ 
rE   c                 ó†   <€ S! V 4      w  pvr#\        W!4       UUu. uF  w  rE\        V4      V3NK  	  uppV.VO3# u uppi r1  rE  )r-  r5  r6  r•  rÀ   rÁ   r(  s   &     €rC   rG  ÚJregister_module_as_pytree_input_node.<locals>.default_flatten_fn_with_keysD  sW   ø€ Ù)3°C«Ñ&ˆ	Ð&�JÜ/2°:Ô/IÔJÑ/I¡t q”˜A“ Ó"Ñ/IÒJØðM
àðM
ð 
ð 	
ùÓJs   œ=rG   c                ó0   € V ^8„  d   QhR\         R\        /# )r8   r=  r<   )r&   r>   )rB   s   "rC   rD   rà  P  s   € ÷ 6ñ 6¤Wð 6´ñ 6rE   c                 ó\   € V vr\         P                  ! V.R .\        V4      ,          O4      # r1  )ÚjsonÚdumpsr°   )r=  rà  r£   s   &  rC   r#  ÚAregister_module_as_pytree_input_node.<locals>.to_dumpable_contextP  s*   € ØˆˆÜ�zŠz˜4Ð4 D 6¬C°«F¥?Ð4Ó5Ð5rE   c                ó0   € V ^8„  d   QhR\         R\        /# )r8   Údumpabler<   )r>   r   )rB   s   "rC   rD   rà  T  s   € ÷ ñ ¬ð ´ñ rE   c                 ó‚   <€ \         P                  ! V 4      pS! \        P                  P	                  4       4      V^&   V# rÛ  )rÿ  Úloadsr?   r@   rA   )r  ÚsrÕ  s   & €rC   r$  ÚCregister_module_as_pytree_input_node.<locals>.from_dumpable_contextT  s/   ø€ Ü�JŠJ�xÓ ˆÙœuŸx™xŸ™Ó0Ó1ˆˆ!‰ØˆrE   rI  c                óJ   € V ^8„  d   QhR\         RRR\        \         ,          /# )r8   r-  rV   r   r<   )r   r  )rB   s   "rC   rD   rà  c  s%   € ÷ ñ ¤Sð °
ð ¼tÄC½yñ rE   c                 ór   <€ S! V 4      w  r#W1P                   8w  d   \        R V RVP                    24      hV# )zcontext mismatch: z != )r=  r�   )r-  rV   Úflatsr=  r(  s   &&  €rC   Údefault_flatten_fn_specÚEregister_module_as_pytree_input_node.<locals>.default_flatten_fn_specc  s:   ø€ Ù# C›‰ˆØ—l‘lÔ"Ü Ð#5°g°Y¸dÀ4Ç<Á<À.Ð!QÓRÐRØˆrE   )Ú
issubclassr?   r@   rA   r�   Úweakrefrø  rÙ  rÚ  r%   r#   )r'  r  r9  rA  rG  r)  r"  r#  r$  r  rÕ  r(  s   f         @@rC   Ú$register_module_as_pytree_input_noder  å  sß   ú€ ôH �cœ5Ÿ8™8Ÿ?™?×+Ò+ÜÐ@ÀÀÐFÓGÐGã÷+ð +˜'Ÿ+™+¤e§h¡h§o¡oÕ6ô +÷ 
ð 
÷ð ÷:
ð 
ð $€JØ'€LàŸ>™>¨CÕ/°#×2BÑ2BÕBÐõ6÷ð ô
 ØØØØ1Ø9Ø/Ø3õ÷ð ô !ØØörE   c                óf   € V ^8„  d   QhR\         \        P                  P                  ,          RR/# r¿  rÀ  )rB   s   "rC   rD   rD   o  s'   € ÷ )ñ )´´U·X±X·_±_Õ0Eð )È$ñ )rE   c                 ó2   € \        V 4       \        V 4       R # r1  )r$   r"   )r'  s   &rC   Ú&deregister_module_as_pytree_input_noder  o  s   € Ü˜CÔ Ü# CÖ(rE   c                ó„   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  RR/# )r8   ÚsrcÚdstr<   Nræ  )rB   s   "rC   rD   rD   t  s1   € ÷ 
 ñ 
 ”U—X‘X—_‘_ð 
 ¬5¯8©8¯?©?ð 
 ¸tñ 
 rE   c                 ó.  € \        V \        P                  P                  4      '       g   \	        R V  R24      h\        V\        P                  P                  4      '       g   \	        R V R24      hV P
                  Vn        V P                  Vn        R# )r¨  z to be a nn.ModuleN)rn   r?   r@   rA   r�   Ú_parametersrQ   )r  r  s   &&rC   Ú_sync_stater  t  sn   € Ü�cœ5Ÿ8™8Ÿ?™?×+Ò+Ü˜y¨¨Ð-?Ð@ÓAÐAÜ�cœ5Ÿ8™8Ÿ?™?×+Ò+Ü˜y¨¨Ð-?Ð@ÓAÐAð
 —o‘o€C„OØ—<‘<€C†LrE   c                óP   € V ^8„  d   QhR\         P                  P                  RR/# )r8   Úwrapped_method_modulesr<   Nræ  )rB   s   "rC   rD   rD   �  s"   € ÷ $ñ $¬¯©¯©ð $¸Dñ $rE   c                 óH   € V '       d   V vrV F  p\        W4       K  	  R# R# )z�
Sync state between exported modules corresponding to wrapped methods.
This might be necessary after serializing/deserializing due to copying.
N)r  )r  rÅ  Úother_msÚother_ms   *   rC   Ú
sync_stater  �  s%   € ÷
 Ø-ˆˆÛˆGÜ˜Ö#ó  ñ rE   c                   ó>   a a€ ] tR tRt oV3R lV 3R lltRtVtV ;t# )Ú_WrappedMethodiŒ  c                ó8   <€ V ^8„  d   QhRS[ RS[3,          RR/# )r8   Úmethod.r<   Nr¢  )rB   rÆ  s   "€rC   rD   Ú_WrappedMethod.__annotate__�  s$   ø€ ÷ ñ ™x¨©V¨Õ4ð ¸ñ rE   c                ó\   <€ \         SV `  4        \        VP                  V 4       Wn        R # r1  )rÊ  rË  r  Ú__self__r  )rî  r"  rÌ  s   &&€rC   rË  Ú_WrappedMethod.__init__�  s!   ø€ Ü‰ÑÔä�F—O‘O TÔ*àŽrE   )r  )rç   rÙ  rÚ  rÛ  rË  rÜ  rÝ  rÞ  )rÌ  rÆ  s   @@rC   r   r   Œ  s   ù‡ € ÷÷ ó rE   r   c                óJ   € V ^8„  d   QhR\         R\        3,          R\        /# )r8   r"  .r<   )r   r}  r   )rB   s   "rC   rD   rD   •  s#   € ÷ "ñ "œ ¤f Õ-ð "´.ñ "rE   c                óX   € \        V 4      '       g   \        RV  R24      h\        V 4      # )zœ
Wrap a method as a module so that it can be exported.
The wrapped module's forward points to the method, and
the method's original module state is shared.
r¨  z to be a method)r
   r�   r   )r"  s   &rC   Úwrap_methodr)  •  s.   € ô �F×ÒÜ˜y¨¨°Ð@ÓAÐAÜ˜&Ó!Ð!rE   r‚   r1  )NN)Žrð  ré  r2  r   rë  rÿ  r  r×  rÙ   Úcollectionsr   Úcollections.abcr   r   r   r   r   Ú
contextlibr	   r
   r   Útypingr   r   r?   Útorch._guardsr   Útorch._subclasses.fake_tensorr   r   r   Ú#torch._subclasses.functional_tensorr   Útorch.fx._utilsr   Ú"torch.fx.experimental.proxy_tensorr   Útorch.fx.passes.runtime_assertr   rþ   rH   r   Ú&torch._functorch._aot_autograd.schemasr   Ú
torch._opsr   Útorch.exportr   Útorch.export.graph_signaturer   Ú%torch.fx.experimental.symbolic_shapesr   Útorch.utils._pytreer   r   r    r!   Útorch.fx._pytreer"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r<  Ú	PARAMETERrK   rx   r@  r?  r=  r‡  r^   rt   r|   rƒ   r¦   r´   rÃ   rÎ   rß   rë   r  r!  rO  rV  r[  r^  rb  rf  rj  ry  r€  r‰  r¤  r­  r´  r·  rº  rÃ  rÈ  ré  rý  r	  r  r  r"  rI  rQ  rÉ   r`  ri  rm  rq  rt  r}  rƒ  rl  Ú	lru_cacher•  r”  r   r­  r´  r½  r  r  r  r  r@   rA   r   r)  r€   rE   rC   Ú<module>r=     s–  ðÛ 
Û Û Û Û Û Û Û Û 	Ý #ß OÕ OÝ %ß 'ß %ã Ý *ß TÑ TÝ @Ý ?Ý KÝ J÷ ÛåHÝEÝ'Ý,ÝAÝ>Ý,ç QÑ Q÷÷÷ ÷ õ ð$ ×Ñ˜"Ø×Ñ˜Ø×Ñ�dØ×Ñ˜tØ×Ñ˜&Ø‡O�O�WðÐ ð #(Ð õõ@%õ8õ(õ 7'õtõ:)õ<$÷%õP/÷0[
õ|8ñv8ð
 (,ð8ð 7;ð8ð ;?ð8ð  %÷8ð 8õvEõõ Bõõ&Rõõ$õ><ð ô3ó ð3õ-õ`#÷Lõ4õ	õ(õ7õ^õB4õ2Eõ,,õ-õ`",õJ]$õ@õ.3ð< ô9ó ð9õ õ;õ.õõWõ0õð4 ×Ò˜QÔôDó  ðDõõ õ>Fð: ô	?ó ð	?õ õ*GõT)õ

 õ$ô�U—X’X—_’_ô ÷"rE   