+
    –°³j•  ã                   óæ  € ^ 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
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ R	IHt ^ R
IHt ^ RIHtHtH t H!t! ^ RI"H#t$ ^ RI%H&t& ^ RI'H(t( ^ RI)H*t* ^ RI+H,t, ^RI-H.t. R R lt/RRRRRRRR/R R llt0R R lt1]! RR7       ! R R4      4       t2 ! R  R!4      t3R" R# lt4R$ R% lt5R& R' lt6R0R( R) llt7R* R+ lt8R, R- lt9R. R/ lt:R# )1é    N)Údefaultdict)ÚCallableÚ
CollectionÚ	ContainerÚ	GeneratorÚIterableÚMapping)Ú	dataclass)Úpartial)Úchain©ÚAny)Úenable_python_dispatcher)Úcontrol_deps)ÚFakeTensorMode)Úcompute_unbacked_bindingsÚrebind_unbackedÚstatically_known_trueÚsym_eq)Ú_pytree)Ú
OrderedSet)Útree_map)Únot_none)Úflop_registry)ÚVc                ó\  € V ^8„  d   QhR\         \        \        P                  P                  P
                  ,          \        R\        3,          3,          R\        P                  P                  R\        \        \        P                  P                  P
                  3,          R\        /# )é   Úpattern.ÚnodeÚmodulesÚreturn)ÚtupleÚtypeÚtorchÚnnr    ÚModuler   r   ÚfxÚNodeÚdictÚstrÚbool)Úformats   "ÚY/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/fx_utils.pyÚ__annotate__r.   +   sz   € ÷ ñ Ü”4œŸ™×(Ñ(×/Ñ/Õ0´(¸3Ä¸8Õ2DÐDÕEðä
�(‰(�-‰-ðô ”#”u—x‘x×'Ñ'×.Ñ.Ð.Õ/ðô 
ñ	ó    c                 óJ  € \        VP                  4      ^ 8X  d   R# \        VP                  ^ ,          \        P                  P
                  4      '       d+   \        V\        P                  P
                  4      '       g   R# VP                  ^ ,          P                  R8w  d   R# \        VP                  ^ ,          P                  \        4      '       g   R# VP                  ^ ,          P                  V9  d   R# \        W!P                  ^ ,          P                  ,          4      V ^ ,          Jd   R# VP                  R8w  d   VP                  R8w  d   R# VP                  V ^,          8w  d   R# \        VP                  ^ ,          P                  4      ^8”  d   R# R# )r   FÚcall_moduleÚcall_functionÚcall_methodT)ÚlenÚargsÚ
isinstancer$   r'   r(   ÚopÚtargetr*   r#   Úusers)r   r   r    s   &&&r-   Úmatches_module_function_patternr:   +   s  € ô
 ˆ4�9‰9ƒ~˜ÔÙÜ�d—i‘i •l¤E§H¡H§M¡M×2Ò2¼*ØŒe�h‰h�m‰m÷;ò ;ñ à‡y�y�…|‡�˜-Ô'ÙÜ�d—i‘i •l×)Ñ)¬3×/Ò/ÙØ‡y�y�…|×Ñ 'Ô)ÙÜˆG—I‘I˜a•L×'Ñ'Õ(Ó)°¸µÓ;Ùà‡w�w�/Ô! d§g¡g°Ô&>ÙØ‡{�{�g˜a•jÔ Ùä
ˆ4�9‰9�Q�<×ÑÓ Ô"ÙÙr/   Úcheck_stridesTÚcheck_storager   Úrecursive_idsc                ó  € V ^8„  d   QhR\         R\         R\        \        \        3,          R\        R\        R\        P
                  P                  R,          R\        \        \        \        3,          ,          R,          R	\        /# )
r   ÚnewÚoldÚexisting_storagesr;   r<   r   Nr=   r!   )	r   r	   Úintr+   r$   r'   r(   r   r"   )r,   s   "r-   r.   r.   J   sŠ   € ÷ `ñ `Ü	ð`ä	ð`ô œs¤C˜xÕ(ð`ô
 ð`ô ð`ô �(‰(�-‰-˜$Õ
ð`ô œe¤C¬ H�oÕ.°Õ5ð`ô 
ñ`r/   c               ó@  aaaaa€ R p\        V 4      \        V4      Jd   R# \        V \        P                  4      '       Eg€   V f   VRJ # \        V \        4      '       d¸   Sf   \        4       o\        V 4      \        V4      3pVS9   p	SP                  V4       T	;'       gt    \        V 4      \        V4      8H  ;'       dU    \        ;QJ d,    VVVVV3R l\        W4       4       F  '       d   K   R# 	  R# ! VVVVV3R l\        W4       4       4      # \        V \        P                  P                  4      '       d}   \        V P                  P                  4      P!                  \"        P$                  ! V P                  P&                  VP                  P&                  4      4      \"        P(                  8H  # W8H  # V P*                  VP*                  8w  g?   V P,                  VP,                  8w  g$   V! V P.                  VP.                  4      '       g   R# V P0                  VP0                  8w  d   R# S'       dM   V P*                  \        P2                  8X  d.   V! V P5                  4       VP5                  4       4      '       g   R# S'       g   R# \7        V P9                  4       VP9                  4       8H  4      '       d   \;        V 4      \;        V4      8w  d   R# R p
S\;        V4      ,          ^8X  d!   \;        V 4      S9  d   V
! S4      '       g   R# R# )a  Validate that two FakeTensors (or iterables thereof) are the same, including
storage locations if enabled.

check_strides: disabling this flag will remove checks for striding.
check_storage: disabling this flag will remove checks for storage offset and
location.  This is useful for subgraph argument and output updating, where storage
location can change without invalidating the subgraph.
recursive_ids: This is only for use when recursing through collections, and must not
be supplied by users of this function.c                 óø   € \        V 4      \        V4      8X  dO   \        ;QJ d%    R  \        W4       4       F  '       d   K   RM	  RM! R  \        W4       4       4      '       d   R# \        \	        W4      4      # )c              3   ó¨   "  € T FH  w  rWJ ;'       g7    \        V4      \        J ;'       d    \        V4      \        J ;'       d    W8H  x € KJ  	  R # 5i©N)r#   rB   )Ú.0ÚaÚbs   &  r-   Ú	<genexpr>Ú@_is_fake_tensor_same.<locals>.is_intlist_same.<locals>.<genexpr>c   sH   é € ð (
á%‘�ð ˆF×DÐD”t˜A“w¤#�~×CÐC¬$¨q«'´S¨.×CÐC¸Q¹VÔDÛ%ùs   ‚A“A¬AÁAFT)r4   ÚallÚzipr   r   )r?   r@   s   &&r-   Úis_intlist_sameÚ-_is_fake_tensor_same.<locals>.is_intlist_same^   s_   € ô
 ˆs‹8”s˜3“xÔ§C£Cñ (
ä˜Cœó(
§C§C¢Cñ (
ä˜Cœó(
÷ %
ò %
ñ Ü$¤V¨CÓ%5Ó6Ð6r/   FNc              3   óL   <"  € T F  w  r\        VVSSSSSR 7      x € K  	  R# 5i))r;   r<   r   r=   N)Ú_is_fake_tensor_same)rG   Únew_iÚold_ir<   r;   rA   r   r=   s   &  €€€€€r-   rJ   Ú'_is_fake_tensor_same.<locals>.<genexpr>~   s=   øé € ð ñ )6™˜ô )ØØØ)Ø&3Ø&3Ø!Ø&3÷ñ ó )6ùs   ƒ!$Tc                 óŽ  € \        V P                  R ,          \        P                  4      '       g   R# V P                   EFÇ  p\        VP
                  \        P                  P                  4      '       g@   VP
                  \        P                  P                  P                  P                  J g    R# \        VP
                  \        P                  P                  4      '       d   K­  \        V4      w  r#pV'       g    R# \        P                  ;_uu_ 4        \!        4       ;_uu_ 4        \"        P$                  ! 4       ;_uu_ 4       p\        P                  P&                  ;pe    VP)                  VP+                  4       4       VP
                  ! V/ VB pRRR4       RRR4       RRR4       \        X\        P                  4      '       g    R# \-        V4      \-        V P                  R ,          4      8X  g   EKÇ   R# 	  R#   + '       g   i     Lw; i  + '       g   i     L‚; i  + '       g   i     L�; i)ÚvalTNF)r6   Úmetar$   ÚTensorr9   r8   Ú_opsÚOperatorBaseÚ	_inductorÚ	fx_passesÚ	reinplaceÚ_generalized_scatterÚHigherOrderOperatorÚget_fake_args_kwargsr   Ú	fake_moder   Ú
contextlibÚ	ExitStackÚ	shape_envÚenter_contextÚignore_fresh_unbacked_symbolsÚget_storage)r   ÚuserÚis_validr5   ÚkwargsÚstackrd   Únew_fake_tensors   &       r-   Úany_user_may_aliasÚ0_is_fake_tensor_same.<locals>.any_user_may_alias²   st  € Ü˜$Ÿ)™) EÕ*¬E¯L©L×9Ò9áà—J•JˆDä˜4Ÿ;™;¬¯
©
×(?Ñ(?×@Ò@Ø—;‘;Ü—?‘?×,Ñ,×6Ñ6×KÑKóLò ä˜$Ÿ+™+¤u§z¡z×'EÑ'E×FÒFñ ô &:¸$Ó%?Ñ"ˆH˜FßÚô ——“Ü(×*Õ*Ü×$Ò$×&Ô&¨%ô "#§¡×!6Ñ!6Ð6�IÒCØ×'Ñ'¨	×(OÑ(OÓ(QÔRØ"&§+¢+¨tÐ">°vÑ">�÷ '÷ +÷ ô ˜o¬u¯|©|×<Ò<âä˜?Ó+¬{¸4¿9¹9ÀUÕ;KÓ/L×LÚñK ñN ÷ '×&ú÷ +×*ú÷ —ús=   ÄH4Ä1H!ÅAHÆH!Æ'H4ÈHÈH!È!H1È,H4È4I)r#   r6   r$   rX   r   r   ÚidÚaddr4   rL   rM   ÚtypesÚpy_sym_typesr   r   rd   Ú_maybe_evaluate_staticÚsympyÚEqÚexprÚtrueÚlayoutÚdtypeÚshapeÚdeviceÚstridedÚstrider   Ústorage_offsetrg   )r?   r@   rA   r;   r<   r   r=   rN   Úid_pairÚvisitedrm   s   &&fdddd    r-   rQ   rQ   J   sg  ü€ ò(
7ô ˆCƒyœ˜S›	Ó!Ùä�cœ5Ÿ<™<×(Ó(ØŠ;Ø˜$�;Ðä�cœ:×&Ò&ØÒ$Ü *£�ä˜#“w¤ 3£Ð(ˆGØ Ñ.ˆGØ×Ñ˜gÔ&ð
 ÷ ð Ü�C“œC ›HÑ$÷ ð ß“C÷ ð ô ),¨C¬ó—C”Cðâðà÷ ð ô ),¨C¬óó ðô  �cœ5Ÿ;™;×3Ñ3×4Ò4ä˜Ÿ™×+Ñ+Ó,×CÑCÜ—H’H˜SŸX™XŸ]™]¨C¯H©H¯M©MÓ:óô —:‘:ñðð ‰zÐð 	�
‰
�c—j‘jÔ Ø�9‰9˜Ÿ	™	Ô!Ù˜sŸy™y¨#¯)©)×4Ò4áà
‡z�z�S—Z‘ZÔÙ÷ 	Ø�J‰Jœ%Ÿ-™-Ô'Ù §
¡
£¨c¯j©j«l×;Ò;áçÙä Ø×ÑÓ × 2Ñ 2Ó 4Ñ4÷ò ä	�SÓ	œ[¨Ó-Ô	-Ùò,ðd 	œ+ cÓ*Õ+¨qÔ0Ü˜ÓÐ$5Ô5Ù" 4×(Ò(áár/   c                óB  € V ^8„  d   QhR\         P                  P                  R\        \         P                  P                  ,          R\
        R\
        R\        \        \         P                  P                  \        \
        R3,          R,          3,          ,          /# )r   r   Úvalid_subgraphsr5   rj   r!   .N)r$   r'   r(   r   ÚGraphModuler   r   r"   )r,   s   "r-   r.   r.   í   s~   € ÷ C
ñ C
Ü
�(‰(�-‰-ðC
äœuŸx™x×3Ñ3Õ4ðC
ô ðC
ô ð	C
ô
 Œu”U—X‘X×)Ñ)¬5´°c°­?¸TÕ+AÐAÕBÕCñC
r/   c           	   /  ó2  aaa"  € R R lpR R lpV P                   \        P                  P                  P                  J dB   ^ RIHo V^,           Uu. uF  pS! V4      NK  	  ppV^ ,          . VOVOV^,          O53x € R# V P                   \        P                  P                  P                  J d/   \        V^,          4      pV^,          V3x € V^,          V3x € R# V P                   \        P                  P                  P                  J Edv   V^,          p	V! V	4      p
V^,          R#,          pV! V4      p\        \        P                  ,          ! R \        V
R,          VR,          4       4       4      pV
^ ,          P                  V^ ,          P                  8X  d—   \        V4      ^8X  d‡   V! VP                  4       4      '       dk   \        ;QJ d4    R	 \        V
R
,          VR,          4       4       F  '       d   K   RM)	  RM%! R	 \        V
R
,          VR,          4       4       4      '       g   \!        R4      hV	. V
R
,          OV^,          O53x € V^,          R#,          . VR,          OV^,          O53x € R# V P                   \        P                  P                  P"                  J Edê   V^,          pV! V4      pV^,          pV! V4      pV^	,          R#,          pV! V4      p\        \        P                  ,          ! R \        VR,          VR,          VR,          4       4       4      pV^ ,          P                  V^ ,          P                  8X  dÐ   V^ ,          P                  V^ ,          P                  8X  d§   \        V4      ^8X  d—   V! VP                  4       4      '       d{   \        ;QJ d<    R \        VR
,          VR,          VR,          4       4       F  '       d   K   RM1	  RM-! R \        VR
,          VR,          VR,          4       4       4      '       g   \!        R4      hVS9   d   V. VR
,          OV^,          O53x € VS9   d   V. VR,          OV^,          O53x € VS9   d   V. VR,          OV^,          O53x € R# R# V P                   \        P                  P                  P$                  \        P                  P                  P&                  \        P                  P                  P(                  39   d    V^ ,          \        VR,          4      3x € R# V P                   \        P                  P                  P*                  J d    V^ ,          \        VR,          4      3x € R# V P                   \        P                  P                  P,                  J d*   V^ ,          . R V^,           4       OV^,          O53x € R# V P                   \        P                  P                  P.                  J d<   ^ RIHo V^ ,          . V^,          OV3R lV^,           4       OV^,          O53x € R# V P                   \        P                  P                  P0                  \        P                  P                  P2                  39   d2   . V^,          OV^,          O5pV^ ,          V3x € V^,          V3x € R# V P                   \        P                  P                  P4                  J d+   \        V^,          4      pV^,           F	  pVV3x € K  	  R# V P                   \6        J Ed‘   V'       d   \!        R4      hV^,          p\        VR,          4      pVS9   d   VV3x € \9        V\        P:                  P<                  4      '       Ed)   \>        P@                  ! \        P:                  P<                  V3R lV4      '       dí   \C        \E        VPF                  PI                  RR7      VRR7      4      oVPF                  PJ                   Uu. uF  pVPL                  R8X  g   K  VNK  	  pp\        V4      ^8w  d   \!        R\        V4       24      hV^ ,          pR V3R llp\>        PN                  ! VVPP                  VPR                  34      w  pp\U        VS.VO5/ VB  Rj  x€L
  R# R# R# V P                   \        P                  P                  PV                  J d    V^,          \        V^,          4      3x € R# \X        PZ                  ! R V P                    R!24       \>        P\                  ! W#34      w  ppV3R" lV 4        Rj  x€L
  R# u upi u upi  L¹ L5i)$a1  HOPs that invoke subgraphs take a number of different forms.  This function
regularizes them, yielding subgraphs from the args and kwargs coupled with
appropriate args to update those subgraphs.

If the second yielded value is None, this function was unable to determine what args
to pass to the subgraph.c                ó†   € V ^8„  d   QhR\         P                  P                  R\        \         P                  R3,          /# )r   Úsubgraphr!   .)r$   r'   rƒ   r"   rX   )r,   s   "r-   r.   Ú1_extract_subgraphs_and_args.<locals>.__annotate__ú   s4   € ÷ 
ñ 
Ü—(‘(×&Ñ&ð
ä	Œu�|‰|˜SÐ Õ	!ñ
r/   c                 óÐ   a € \         ;QJ d1    . V 3R  lS P                  P                  RR7       4       F  NK  	  5# ! V 3R  lS P                  P                  RR7       4       4      # )c              3   ó<   <"  € T F  p\        VS4      x € K  	  R # 5irF   )Úget_fake)rG   Únr†   s   & €r-   rJ   ÚI_extract_subgraphs_and_args.<locals>.get_subgraph_args.<locals>.<genexpr>ý   s   øé € ð 
Ù+V aŒH�Q˜×!Ð!Ó+Vùs   ƒÚplaceholder©r7   )r"   ÚgraphÚ
find_nodes)r†   s   fr-   Úget_subgraph_argsÚ6_extract_subgraphs_and_args.<locals>.get_subgraph_argsú   s[   ø€ ÷ Œuô 
Ø+3¯>©>×+DÑ+DÈÐ+DÔ+Vó
�uð 	
ˆuô 
Ø+3¯>©>×+DÑ+DÈÐ+DÔ+Vó
ó 
ð 	
r/   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   Údr!   )r$   ry   r+   )r,   s   "r-   r.   r‡     s   € ÷ <ñ <”e—k‘kð <¤dñ <r/   c                 óV   € V P                   '       * ;'       d    V P                  '       * # rF   )Úis_floating_pointÚ
is_complex)r”   s   &r-   Ú
is_integerÚ/_extract_subgraphs_and_args.<locals>.is_integer  s    € Ø×&Ñ&Ô&×;Ð;¨q¯|©|Ô+;Ð;r/   )Úfirst_slice_copyc              3   ó8   "  € T F  qP                   x € K  	  R # 5irF   ©ry   ©rG   rH   s   & r-   rJ   Ú._extract_subgraphs_and_args.<locals>.<genexpr>  s   é € ð 5
ÙT˜�GŽGÓTùó   ‚:é   é   N:Né   Nc              3   óZ   "  € T F!  p\        VP                  4       4      ^ 8H  x € K#  	  R# 5i©r   N©r4   Úsizer�   s   & r-   rJ   rž   &  s&   é € ð áO�Aô �A—F‘F“H“ Ö"ÛOùó   ‚)+:Nr¡   NFTz/flex_attention subgraph arg format has changed!c              3   ó:   "  € T F  pVP                   x € K  	  R # 5irF   rœ   r�   s   & r-   rJ   rž   7  s   é € ð 5
ñ�ð �GŽGóùs   ‚c              3   óZ   "  € T F!  p\        VP                  4       4      ^ 8H  x € K#  	  R# 5ir¤   r¥   r�   s   & r-   rJ   rž   D  s*   é € ð ñ�Aô �A—F‘F“H“ Ö"óùr§   :Né   Nz8flex_attention_backward subgraph arg format has changed!:r    NN:r   NNc              3   ó2   "  € T F  q^ ,          x € K  	  R# 5ir¤   © r�   s   & r-   rJ   rž   a  s   é € Ð0© 1˜AŸ$š$«ùs   ‚c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irF   r¬   )rG   rH   rš   s   & €r-   rJ   rž   h  s   øé € Ð#IÁ¸AÑ$4°Q×$7Ð$7Ãùó   ƒzfSubgraph arguments can be renamed, so we cannot consistently handle kwargs at this point in the stack.c                 ó   <€ V S9   # rF   r¬   )r†   r‚   s   &€r-   Ú<lambda>Ú-_extract_subgraphs_and_args.<locals>.<lambda>ƒ  s
   ø€ ˜X¨Ò8r/   r�   rŽ   ©Ústrictr2   z3expected exactly 1 wrapped call_function node, got c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úitemr!   r   )r,   s   "r-   r.   r‡   –  s   € ÷ ñ ¬#ð ´#ñ r/   c                 ó~   <€ \        V \        P                  P                  4      '       d   SP	                  W 4      # V # rF   )r6   r$   r'   r(   Úget)rµ   Úplaceholder_to_args   &€r-   Úreplace_placeholderÚ8_extract_subgraphs_and_args.<locals>.replace_placeholder–  s.   ø€ Ü˜d¤E§H¡H§M¡M×2Ò2Ø-×1Ñ1°$Ó=Ð=Ø�r/   Nz1Please add support for subgraph args to function Ú!c              3   ó–   <"  € T F>  p\        V\        P                  P                  4      '       g   K/  VS9   g   K8  VR 3x € K@  	  R # 5irF   )r6   r$   r'   rƒ   )rG   Úsr‚   s   & €r-   rJ   rž   ¬  s?   øé € ð 
á%�Ü˜!œUŸX™X×1Ñ1×2ô à78¸OÑ7Kô ˆQ��IÛ%ùs   ƒ,A	´A	½A	éÿÿÿÿ)/r8   r$   ÚopsÚhigher_orderÚassociative_scanÚtorch._higher_order_ops.utilsrš   Úcondr"   Úflex_attentionr   ry   r   r4   ÚpoprL   ÚAssertionErrorÚflex_attention_backwardÚforeach_mapÚinvoke_quant_packedÚinvoke_quantÚinvoke_subgraphÚmap_implÚscanÚ
while_loopÚwhile_loop_stack_outputÚswitchr   r6   r'   rƒ   ÚpytreeÚtree_any_onlyr)   rM   r�   r�   Únodesr7   r   r5   rj   Ú_extract_subgraphs_and_argsÚ	flex_gemmÚwarningsÚwarnÚtree_flatten)r   r‚   r5   rj   r‘   r˜   rH   ÚslicedÚsubgraph_argsÚscore_subgraphÚscore_subgraph_argsÚmask_subgraphÚmask_subgraph_argsÚinteger_arg_dtypesÚfw_subgraphÚfw_subgraph_argsÚjoint_subgraphÚjoint_subgraph_argsÚ	branch_gmÚcontrol_deps_subgraphÚcontrol_deps_argsr‹   Úwrapped_nodesÚwrapped_noder¹   Úwrapped_argsÚwrapped_kwargsÚflat_args_kwargsÚ_rš   r¸   s   &f*,                         @@r-   rÔ   rÔ   í   s*  úé € õ
õ<ð ‡{�{”e—i‘i×,Ñ,×=Ñ=Ó=õ 	Cà/3°A®wÓ7©w¨!Ñ" 1Ö%©wˆÐ7Ø�1�gÐ3˜Ð3 &Ð3¨4°­7Ñ3Ð3Ô3Ø	�‰œŸ	™	×.Ñ.×3Ñ3Ó	3Ü˜d 1�g›ˆØ�1�g�}Ð$Ò$Ø�1�g�}Ð$Ô$Ø	�‰œŸ	™	×.Ñ.×=Ñ=Ô	=ð 04°A­wˆÙ/°Ó?ÐØ˜Q� �ˆÙ.¨}Ó=Ðä'¬¯©Ö4ñ 5
Ü"Ð#6°sÕ#;Ð=OÐPRÕ=SÔTó5
ó 
Ðð   Õ"×(Ñ(¨D°­G¯M©MÔ9ÜÐ&Ó'¨1Ô,ÙÐ-×1Ñ1Ó3×4Ò4ß“ñ äÐ2°2Õ6Ð8JÈ2Õ8NÔOó——’ñ äÐ2°2Õ6Ð8JÈ2Õ8NÔOó÷ ò ô
 !Ð!RÓSÐSàÐBÐ 3°BÕ 7ÐB¸$¸q½'ÑBÐBÒBØ�1�g�b�kÐ>Ð/°Õ3Ð>°d¸1µgÑ>Ð>Ô>Ø	�‰œŸ	™	×.Ñ.×FÑFÔ	FØ˜1•gˆÙ,¨[Ó9ÐØ˜a�ˆÙ/°Ó?ÐØ˜Q� �ˆÙ.¨}Ó=Ðä'¬¯©Ö4ñ 5
äØ  Õ%Ø# CÕ(Ø" 2Õ&ôó5
ó 
Ðð ˜QÕ×%Ñ%¨¨a­¯©Ô6Ø# AÕ&×,Ñ,°°Qµ·±Ô=ÜÐ&Ó'¨1Ô,ÙÐ-×1Ñ1Ó3×4Ò4ß“ñ äØ$ RÕ(Ø'¨Õ+Ø& rÕ*ôó——’ñ äØ$ RÕ(Ø'¨Õ+Ø& rÕ*ôó÷ ò ô !ØJóð ð ˜/Ô)ØÐAÐ!1°"Õ!5ÐA¸¸R½ÑAÐAÒAØ˜_Ô,Ø Ð"GÐ$7¸Õ$;Ð"G¸dÀ2½hÑ"GÐGÒGØ˜OÔ+ØÐ!EÐ#5°bÕ#9Ð!E¸DÀ½HÑ!EÐEÔEñ ,à	�‰Ü�	‰	×Ñ×*Ñ*Ü�	‰	×Ñ×2Ñ2Ü�	‰	×Ñ×+Ñ+ðô 
ð
 �1�g”u˜T "�X“Ð&Ô&Ø	�‰œŸ	™	×.Ñ.×>Ñ>Ó	>Ø�1�g”u˜T "�X“Ð&Ô&Ø	�‰œŸ	™	×.Ñ.×7Ñ7Ó	7à�1�gÐ;Ñ0¨¨Q®Ó0Ð;°4¸µ7Ñ;Ð;Ô;Ø	�‰œŸ	™	×.Ñ.×3Ñ3Ó	3õ 	Cà�1�gÐT˜˜a�ÐTÔ#IÀÀaÆÓ#IÐTÈDÐQRÍGÑTÐTÔTØ	�‰Ü�	‰	×Ñ×)Ñ)Ü�	‰	×Ñ×6Ñ6ðô 
ð -˜$˜q�'Ð, D¨¥GÑ,ˆØ�1�g�}Ð$Ò$Ø�1�g�}Ð$Ô$Ø	�‰œŸ	™	×.Ñ.×5Ñ5Ó	5ä˜d 1�g›ˆØ˜aŸ˜ˆIØ˜]Ð*Ô*ó !à	�‰œÔ	$ßÜ ð<óð ð !% Q¥ÐÜ! $ r¥(›OÐØ  OÔ3Ø'Ð):Ð:Ò:ÜØ!¤5§8¡8×#7Ñ#7÷
ó 
ä×"Ò"Ü�H‰H× Ñ Ü8Ø÷
ò 
ô
 "&ÜØ)×/Ñ/×:Ñ:¸mÐ:ÓLØ%Øôó"Ðð 1×6Ñ6×<Ò<óÙ<�aÀÇÁÈÑ@W—�Ñ<ð ð ô �=Ó! QÔ&Ü$ØIÌ#ÈmÓJ\ÐI]Ð^óð ð )¨Õ+ˆL÷ð ô
 ,2¯?ª?Ø#Ø×"Ñ" L×$7Ñ$7Ð8ó,Ñ(ˆL˜.ô 3Ø˜oðØ0<òØ@Nñ÷ ò ñ=
ñ
ðF 
�‰œŸ	™	×.Ñ.×8Ñ8Ó	8Ø�1�g”u˜T !�W“~Ð%Ô%ä�ŠØ?ÀÇÁ¸}ÈAÐNô	
ô %×1Ò1°4°.ÓAÑÐ˜!ô
á%ó
÷ 	
ò 	
ùòE 8ùòFñ$ñ	
ùs…   …AfÁf	Á&E/fÇ
fÇ!)fÈ2fÉ E?fÏ 
fÏ1fÏ?:fÐ:L!fÝBfß4A	fà=fáfáA>fãfãB(fæfæfæf)Úfrozenc                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_FxNodeHashi³  c                óÖ   <€ V ^8„  d   Qh/ S[ P                  P                  ;R&   S[ P                  P                  P                  ;R&   S[S[R3,          ;R&   S[S[R3,          ;R&   # )r   r   r8   .Ú
arg_hashesÚkwarg_hashes)r$   r'   r(   r   ÚTargetr"   rB   )r,   Ú__classdict__s   "€r-   r.   Ú_FxNodeHash.__annotate__³  s]   ø‡ ‚ á
�(‰(�-‰-Ññ ñ �H‰H�M‰M× Ñ Ñ ñ ñ ‘c˜3�h•Ññ	 ñ
 ™˜S˜•/Ñ!ò r/   r¬   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rô   s   @r-   rï   rï   ³  s   ø‡ ‡ „ r/   rï   c                   óZ   a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )ÚFakeTensorUpdateri»  a  
The main idea here is that it's difficult to maintain accurate fake
tensors (our primary form of metadata) for each node in our graph as we
transform it.

The most reliable way to obtain this information is by rerunning
faketensor propagation. However, in general, faketensor propagation is
fairly expensive. So, instead we'd like to only rerun faketensor
propagation on nodes that have changed.

In order to detect which nodes have changed, we first hash its node,
target, and argument lists (which are immutable in FX).

Then, whenever we call incremental_update, we check which FX nodes have a
new hash, and recompute the faketensor metadata for that node. Then, we
continue to recursively compute the faketensors for all users until the
fake tensors stop changing.

Since this runs in the context of Inductor, we assume that the input and
output semantics for the outermost graph are not subject to change after class
initialization, but we allow striding changes for subgraphs.  Any other changes will
result in errors or undefined behavior.
c                óL   <€ V ^8„  d   QhRS[ P                  P                  RR/# )r   Úgmr!   N)r$   r'   rƒ   )r,   rô   s   "€r-   r.   ÚFakeTensorUpdater.__annotate__Ô  s%   ø€ ÷ 0ñ 0™5Ÿ8™8×/Ñ/ð 0°Dñ 0r/   c                óô  € \         \        ,          ! 4       V n        \        4       V n        Wn        ^ RIHp V! V P                  4       Uu/ uF%  p\        V P                  V4      ;p\        V4      bK'  	  upV n	        V P                  P                  P                   FQ  pV P                  P                  V P                  V4      4       V P                  P                  \        V4      4       KS  	  R# u upi )r   )Ú_get_subgraph_namesN)r   rï   Úprocessed_hashesÚtracked_node_idsr  Útorch._inductor.compile_fxr  Úgetattrrÿ   Úsubgraph_updatersr�   rÓ   rp   Ú	hash_nodero   )Úselfr  r  Úsubgraph_namer†   r   s   &&    r-   Ú__init__ÚFakeTensorUpdater.__init__Ô  sÄ   € Ü *¬;Ö 7Ó 9ˆÔÜ1;³ˆÔØŒõ 	Cñ "5°T·W±WÔ!=óQ
á!=�ô ! §¡¨-Ó8Ð8ˆXÔ;LÈXÓ;VÒVÙ!=ñQ
ˆÔð
 —G‘G—M‘M×'Ô'ˆDØ×!Ñ!×%Ñ% d§n¡n°TÓ&:Ô;Ø×!Ñ!×%Ñ%¤b¨£hÖ/ó (ùòQ
s   Á+C5c                óN   <€ V ^8„  d   QhRS[ P                  P                  RS[/# ©r   r   r!   )r$   r'   r(   rï   )r,   rô   s   "€r-   r.   r  å  s#   ø€ ÷ 
ñ 
™eŸh™hŸm™mð 
±ñ 
r/   c                óÂ   € R  R lp\        VVP                  V! VP                  4      V! \        P                  ! VP
                  P                  4       4      4      4      # )c                ó`   € V ^8„  d   QhR\         \        ,          R\        \        R3,          /# )r   Ún_iterr!   .)r   r   r"   rB   )r,   s   "r-   r.   Ú1FakeTensorUpdater.hash_node.<locals>.__annotate__æ  s&   € ÷ 	<ñ 	<¤H¬S¥Mð 	<´e¼CÀ¸Hµoñ 	<r/   c                ót   a€ R R lo\         ;QJ d    . V3R lV  4       F  NK  	  5# ! V3R lV  4       4      # )zëReplace unhashable items from the input with the ids of those items, and
hash all other items.  This is kludgy, but allows us to attempt to account
for unhashable classes like torch.fx.Node when hashing args and kwargs for
other nodes.c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úor!   )ÚobjectrB   )r,   s   "r-   r.   ÚJFakeTensorUpdater.hash_node.<locals>.get_hash_or_ids.<locals>.__annotate__ì  s   € ÷ !ñ !¤&ð !¬Sñ !r/   c                 óR   €  \        V 4      #   \         d    \        T 4      u # i ; irF   )ÚhashÚ	Exceptionro   )r  s   &r-   Úget_hash_or_idÚLFakeTensorUpdater.hash_node.<locals>.get_hash_or_ids.<locals>.get_hash_or_idì  s(   € ð!Ü ›7�NøÜ ô !Ü˜a›5’Lð!ús   ‚
 �&¥&c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irF   r¬   )rG   r‹   r  s   & €r-   rJ   ÚGFakeTensorUpdater.hash_node.<locals>.get_hash_or_ids.<locals>.<genexpr>ò  s   øé € Ð;±F¨q™¨×*Ð*³Fùr®   )r"   )r  r  s   &@r-   Úget_hash_or_idsÚ4FakeTensorUpdater.hash_node.<locals>.get_hash_or_idsæ  s,   ø€ õ!÷ ”5Ô;±FÓ;—5Ð;�5Ô;±FÓ;Ó;Ð;r/   )rï   r8   r5   r   Úfrom_iterablerj   Úitems)r  r   r!  s   && r-   r
  ÚFakeTensorUpdater.hash_nodeå  sL   € õ	<ô ØØ�K‰KÙ˜DŸI™IÓ&ÙœE×/Ò/°·±×0AÑ0AÓ0CÓDÓEó	
ð 	
r/   c                ó    <€ V ^8„  d   QhRS[ /# )r   r!   )rB   )r,   rô   s   "€r-   r.   r  û  s   ø€ ÷ oñ o¡Cñ or/   c                óŽ  a aa€ \        \        4      oS P                  P                  P                   F-  p\        V4      ;p'       g   K  SV;;,          ^,          uu&   K/  	  R R lpR V 3R llpR VV3R llpR V 3R llp\        \        ,          ! 4       p^ p\        \        ,          ! 4       o/ p	S P                  P                  P                   EFà  pVP                  S P                  V4      ;p
4       \        VP                  R	4      '       Ed   V
S P                  9  g   \        V4      S9   Ed÷   \        VP                  R
R4      ;p'       dÁ   \        VS P                  4      w  rÍpV'       g   \!        RVP#                  4        24      h\$        P&                  ;_uu_ 4        \)        4       ;_uu_ 4        V! V/ VB pRRR4       RRR4       V! VX4      '       d
   V^,          pS P*                  P                  \        V4      4       EKD  \        VP                  RR4      ;p eF   V! W! VV4      4      '       d
   V^,          pS P*                  P                  \        V4      4       EK¥  \        V4      S9   d   \!        RVP#                  4        24      h\        V4      S P*                  9   d   \!        RVP#                  4        24      hRVP,                  9  d   \!        RVP#                  4        24      hS P*                  P                  \        V4      4       EK[  \        VS P                  4      w  rÍpV'       g   EK  V! V.VO5/ VB ;p'       g%   V
S P                  9   d   \        V4      S9  d   EK·  V! V4      '       g   EKÈ  V'       Ed§   Rp\/        VS P0                  .VO5/ VB  EFi  w  ppVV	9  pV'       d   RV	V&   Ve¢   \3        VP                  P5                  RR7      VRR7       Fu  w  pp\7        V\9        VV4      ;pSRR7      '       d   K)  V'       g   \;        R4      h\7        VVSRRR7      '       g   \;        R4      hVVP,                  R&   V^,          pKw  	  V'       d‘   \        VP                  P=                  4       V4      w  pppVS P0                  V,          P?                  4       ,          p\        VP                  P=                  4       V4      w  ppp\7        VVS4      '       g   RV	V&   T;'       g
    V	V,          pEKl  	  V'       g   RVP,                  9   d   EKw  \$        P&                  ;_uu_ 4        \)        4       ;_uu_ 4        VP                  ! V/ VB pRRR4       RRR4       V! VX4      '       g   EK×  V^,          pEKã  	  VS n        \        R S P                  P                  P                   4       4      S n        V#   + '       g   i     EL7; i  + '       g   i     ELC; i  + '       g   i     Lž; i  + '       g   i     L©; i)zŸUpdate FakeTensors on self.graph. We will try to do the minimum amount of work.

Returns the number of nodes updated, including recursive updates on subgraphs.c                óX   € V ^8„  d   QhR\         P                  P                  R\        /# r  ©r$   r'   r(   r+   )r,   s   "r-   r.   Ú:FakeTensorUpdater.incremental_update.<locals>.__annotate__  s"   € ÷ 	ñ 	¤e§h¡h§m¡mð 	¼ñ 	r/   c                 ór   € \        V P                  4      ;'       d    \        V P                  R 4      '       * # )Ú_inductor_lowering_function)Úcallabler8   Úhasattr©r   s   &r-   Úshould_process_nodeÚAFakeTensorUpdater.incremental_update.<locals>.should_process_node  s3   € ä˜Ÿ™Ó%÷ Lð Lô   §¡Ð-JÓKÔKð	r/   c                óp   € V ^8„  d   QhR\         P                  P                  R\        R\        R\        /# )r   r   r5   rj   r!   ©r$   r'   r(   r   r+   )r,   s   "r-   r.   r*    s4   € ÷ 	ñ 	Ü—(‘(—-‘-ð	Ü(+ð	Ü7:ð	äñ	r/   c                 óV  <€ V P                   R 8H  ;'       d“    V P                  \        P                  P                  P
                  \        P                  P                  P                  39  ;'       d6    \        P                  ! \        P                  P                  V3R lW34      # )r2   c                 ó"   <€ V SP                   9   # rF   )r	  )r½   r  s   &€r-   r°   ÚUFakeTensorUpdater.incremental_update.<locals>.node_invokes_subgraph.<locals>.<lambda>  s   ø€ ˜a 4×#9Ñ#9Ò9r/   )r7   r8   r$   r¿   rÀ   Úauto_functionalizedÚauto_functionalized_v2rÑ   rÒ   r'   rƒ   )r   r5   rj   r  s   &*,€r-   Únode_invokes_subgraphÚCFakeTensorUpdater.incremental_update.<locals>.node_invokes_subgraph  sˆ   ø€ ð —‘˜?Ñ*÷ ð Ø—K‘Kô
 —I‘I×*Ñ*×>Ñ>Ü—I‘I×*Ñ*×AÑAðñ÷ð ô ×(Ò(Ü—H‘H×(Ñ(Ü9Ø�Nóðr/   c                ód   € V ^8„  d   QhR\         P                  P                  R\        R\        /# )r   r   rl   r!   r3  )r,   s   "r-   r.   r*     s*   € ÷ /	ñ /	¬%¯(©(¯-©-ð /	Ì#ð /	ÔRVñ /	r/   c                 ón  <a€ R V P                   9   d(   \        WP                   R ,          SV R7      '       d   R# R V P                   9   ;'       d"    \        VV P                   R ,          SRV R7      o\        \        P                  P
                  W4       WP                   R &   \        P                  P
                  ;p'       d"   \        W!4      ;p'       d   W0P                   R&   \        V 4      ;p'       d   SV;;,          ^,          uu&   SP                  V3R lV P                   4       4       R# )rV   r/  F)r<   r   Úunbacked_bindingsc              3   ó¾   <"  € T FR  pS'       d;   \        VP                  R R4      '       d   \        VP                  RR4        f   KE  \        V4      x € KT  	  R# 5i)Ú8_inductor_lowering_output_metadata_ignores_input_storageFÚ+_inductor_lowering_output_metadata_is_inputN)r  r8   ro   )rG   rh   Ústorage_only_changes   & €r-   rJ   ÚXFakeTensorUpdater.incremental_update.<locals>.update_node_fake_tensor.<locals>.<genexpr><  s^   øé € ð á&�Dç'ÜØŸ™ØRØ÷ò ô
  ØŸ™ØEØóð
 ðô ”�4—�Û&ùs   ƒA�5AÁ
AT)
rW   rQ   r   r   ra   rd   r   Úget_node_storageÚupdater9   )r   rl   rd   Úsymbol_to_pathÚstoragerA  rA   Ú
to_processs   &&   @€€r-   Úupdate_node_fake_tensorÚEFakeTensorUpdater.incremental_update.<locals>.update_node_fake_tensor   s  ù€ Ø˜Ÿ	™	Ô!Ô&:Ø§¡¨5Õ!1Ð3DÈ4÷'ó 'ñ à"'¨4¯9©9Ñ"4÷ #ð #Ô9MØØ—	‘	˜%Õ Ø!Ø#Øô:Ðô œAŸK™K×1Ñ1°4ÔIà.�I‰I�eÑäŸ[™[×2Ñ2Ð2�	Ö2Ü";¸IÓ"WÐW�ÖWð 2@—	‘	Ð-Ñ.ä*¨4Ó0Ð0ˆwÖ0Ø! '×*¨aÕ/Ó*à×Ñô à ŸJšJóô ñ& r/   c                óz   € V ^8„  d   QhR\         P                  P                  R\        \        ,          R\
        /# )r   r   Ú
input_namer!   )r$   r'   r(   rB   r*   r   )r,   s   "r-   r.   r*  Q  s5   € ÷ 	Fñ 	FÜ—(‘(—-‘-ð	FÜ-0´3­Yð	Fäñ	Fr/   c                 óâ  <a€ \        V\        4      '       d   V P                  V,          MV P                  V,          pR  V3R llo\        ;QJ d3    V3R l\
        P                  ! V4       4       F  '       g   K   RM(	  RM$! V3R l\
        P                  ! V4       4       4      '       d   \        RV P                  4        24      h\        \        \        SP                  R7      V4      # )c                óX   € V ^8„  d   QhR\         P                  P                  R\        /# )r   Ú
input_noder!   r)  )r,   s   "r-   r.   Ú_FakeTensorUpdater.incremental_update.<locals>.get_lowering_input_metadata.<locals>.__annotate__Z  s"   € ÷ 	ñ 	´e·h±h·m±mð 	Ìñ 	r/   c                 ó  <€ R V P                   9   ;'       gq    RV P                   9   ;'       gZ    V P                  R8H  ;'       dC    \        V P                  \        4      ;'       d!    \        SP                  V P                  4      '       * # )rV   Úexample_valueÚget_attr)rW   r7   r6   r8   r*   r.  r  )rN  r  s   &€r-   Úhas_missing_fake_metadataÚlFakeTensorUpdater.incremental_update.<locals>.get_lowering_input_metadata.<locals>.has_missing_fake_metadataZ  sƒ   ø€ à˜ZŸ_™_Ñ,÷ ð Ø&¨*¯/©/Ñ9÷ð ð #Ÿ™¨Ñ3÷ @ð @Ü& z×'8Ñ'8¼#Ó>÷@ð @ä# D§G¡G¨Z×->Ñ->Ó?ôð r/   c              3   óŒ   <"  € T F9  p\        V\        P                  P                  4      ;'       d	    S! V4      x € K;  	  R # 5irF   ©r6   r$   r'   r(   )rG   ÚleafrS  s   & €r-   rJ   Ú\FakeTensorUpdater.incremental_update.<locals>.get_lowering_input_metadata.<locals>.<genexpr>e  s8   øé € ð á9�Dô ˜4¤§¡§¡Ó/×SÐSÑ4MÈdÓ4SÔSÛ9ùs
   ƒ/A³ATFz�FakeTensorUpdater cannot update pass-through _inductor_lowering_function metadata because the input metadata is unavailable. Encountered node: ©r  )r6   rB   r5   rj   ÚanyrÑ   Útree_leavesÚRuntimeErrorÚformat_noder   r   rŠ   r  )r   rK  Ú	raw_inputrS  r  s   && @€r-   Úget_lowering_input_metadataÚIFakeTensorUpdater.incremental_update.<locals>.get_lowering_input_metadataQ  sÆ   ù€ ô
 ˜j¬#×.Ò.ð —	‘	˜*Ö%à—[‘[ Õ,ð ÷	ð 	÷ ‹sô ä"×.Ò.¨yÔ9ó�s�sŠsô ä"×.Ò.¨yÔ9ó÷ ò ô #ðBàBF×BRÑBRÓBTÐAUðWóð ô
 œG¤H°·±Ô9¸9ÓEÐEr/   r,  Ú%_inductor_lowering_output_metadata_fnNz�FakeTensorUpdater cannot update _inductor_lowering_function metadata because the metadata provider inputs are unavailable. Encountered node: r@  zëFakeTensorUpdater cannot recompute metadata for _inductor_lowering_function nodes after their dependencies change because those targets expect Inductor IR inputs rather than FakeTensor inputs. Encountered node with changed dependency: zíFakeTensorUpdater cannot recompute metadata for tracked _inductor_lowering_function nodes after their inputs or dependencies change because those targets expect Inductor IR inputs rather than FakeTensor inputs. Encountered changed node: rV   z§FakeTensorUpdater requires newly inserted _inductor_lowering_function nodes to already carry fake metadata in node.meta['val']. Encountered new node without metadata: Fr�   rŽ   Tr²   )r<   z*subgraph args must have consistent values!)r;   r<   ziA subgraph argument other than striding has been modified; FakeTensorUpdater cannot update this argument!c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5irF   )ro   )rG   r   s   & r-   rJ   Ú7FakeTensorUpdater.incremental_update.<locals>.<genexpr>(  s   é € Ð*TÑ@S¸¬2¨d¯8¨8Ó@SùrŸ   ) r   rB   r  r�   rÓ   rC  r   rï   rp   r
  r.  r8   r  ro   r  r`   r\  r]  r   ra   r   r  rW   rÔ   r	  rM   r�   rQ   rŠ   rÆ   Úoutput_nodeÚincremental_update)r  r   rF  r0  r9  rH  r_  Úcurrent_graph_hashesÚnodes_updatedÚsubgraph_updatingsÚ	node_hashÚmetadata_fnri   r5   rj   rl   Úmetadata_inputÚinvokes_subgraphÚany_output_updatedr†   rÚ   Úupdate_subgraphÚprH   Úp_fakerì   Úorig_output_argsÚnew_output_argsrA   rG  s   f                           @@r-   re  Ú$FakeTensorUpdater.incremental_updateû  sÌ  ú€ ô 4?¼sÓ3CÐØ—G‘G—M‘M×'Ô'ˆDÜ*¨4Ó0Ð0ˆw×0Ð0Ø! '×*¨aÕ/Õ*ñ (õ	÷	ð 	÷(/	ñ /	÷b	Fð 	FôF  *¬+Ö6Ó8ÐàˆÜ¤–_Ó&ˆ
à?AÐØ—G‘G—M‘M×'Õ'ˆDØ ×$Ñ$°$·.±.ÀÓ2FÐ%F YÔGô �t—{‘{Ð$A×BÓBØ ×!6Ñ!6Ô6¼"¸T»(ÀjÕ:Pä")Ø—K‘KØ;Øó#ð �;ö ô
 .BÀ$ÈÏÉÓ-PÑ*�H Fß#Ü*ð1ð 26×1AÑ1AÓ1CÐ0DðFóð ô ŸŸ›Ô&>×&@Õ&@Ù*5°tÐ*F¸vÑ*F˜÷ 'AŸá.¨t°_×EÒEØ%¨Õ*˜Ø×)Ñ)×-Ñ-¬b°«hÔ7Úä&-ØŸ™ØEØó'ð �Nð
 òñ /ØÐ9¸$ÀÓO÷ò ð &¨Õ*˜Ø×)Ñ)×-Ñ-¬b°«hÔ7ÚÜ�d“8˜zÔ)Ü&ðEð FJ×EUÑEUÓEWÐDXð	Zóð ô �d“8˜t×4Ñ4Ô4Ü&ð5ð 6:×5EÑ5EÓ5GÐ4Hð	Jóð ð  §	¡	Ô)Ü&ðBð CG×BRÑBRÓBTÐAUðWóð ð ×%Ñ%×)Ñ)¬"¨T«(Ô3Úä%9¸$ÀÇÁÓ%HÑ"ˆH˜FßÚñ *?¸tÐ)UÀdÒ)UÈfÑ)UÐUÐ%ÖUØ ×!6Ñ!6Ô6Ü�t“H JÔ.âá& t×,Ò,ÚçÐØ%*Ð"ä/JØ˜$×0Ñ0ð0Ø37ò0Ø;Aõ0Ñ+�H˜mð '/Ð6HÑ&H�Oß&Ø7<Ð*¨8Ñ4ð %Ò0Ü$'Ø$ŸN™N×5Ñ5¸Ð5ÓGØ)Ø#'÷%™D˜A˜qô $8Ø !Ü*2°1°hÓ*?Ð ? Ø 1Ø.3÷	$õ $÷ (7Ü*8Ø(Tó+&ð %&ô
 (<Ø$%Ø$*Ø$5Ø27Ø27÷("ó ("ô +9ð)4ó+&ð %&ð 12 §¡ u¡Ø -°Õ 2¢ñG%÷J 'Ü1EØ$ŸN™N×6Ñ6Ó8¸(ó2Ñ.˜Ð+¨Qð &¨×)?Ñ)?Ø$õ*ç,Ñ,Ó.õ/˜ô 1EØ$ŸN™N×6Ñ6Ó8¸(ó1Ñ-˜˜?¨Aô  4Ø+Ø,Ø-÷ ò  ð
 <@Ð.¨xÑ8ð +×JÐJÐ.@ÀÕ.Jó 'ñG0÷X *¨e°t·y±yÔ.@Úä——“Ô6×8Õ8Ø"&§+¢+¨tÐ">°vÑ">�÷ 9—ñ ' t¨_×=Õ=Ø Õ"“ñW (ðZ !5ˆÔÜ *Ñ*TÀÇÁÇÁ×@SÒ@SÓ*TÓ TˆÔàÐ÷w 'A×&@Ð&@úŸŸ˜ú÷d 9×8ú——úsH   Æ/XÇ	W9ÇXÕ%X4Õ8X!ÖX4×9X
Ø	XØXØ!X1Ø,X4Ø4Y)r  r  r	  r  N)
rö   r÷   rø   rù   Ú__doc__r  r
  re  rû   rü   rý   s   @r-   rÿ   rÿ   »  s*   ø‡ € ñ÷00ð 0÷"
ð 
÷,oö or/   rÿ   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   Útr!   )r$   rX   rB   )r,   s   "r-   r.   r.   -  s   € ÷ &ñ &”5—<‘<ð &¤Cñ &r/   c                 ó6   € V P                  4       P                  # rF   )Úuntyped_storageÚ_cdata)rv  s   &r-   rg   rg   -  s   € Ø×ÑÓ×%Ñ%Ð%r/   c                óf   € V ^8„  d   QhR\         P                  P                  R\        R,          /# ©r   r   r!   N©r$   r'   r(   rB   )r,   s   "r-   r.   r.   1  s&   € ÷ )ñ )œ5Ÿ8™8Ÿ=™=ð )¬S°4­Zñ )r/   c                 ó6  € R V P                   9  d   R# \        V P                   R ,          \        P                  4      '       g   R# \        P                  P                  V P                   R ,          4      '       g   R# \        V P                   R ,          4      # )rV   N)rW   r6   r$   rX   Ú_CÚ_has_storagerg   r/  s   &r-   rC  rC  1  sc   € Ø�D—I‘IÔÙÜ�d—i‘i Õ&¬¯©×5Ò5ÙÜ�8‰8× Ñ  §¡¨5Õ!1×2Ò2ÙÜ�t—y‘y Õ'Ó(Ð(r/   c                ór   € V ^8„  d   QhR\         R\        P                  P                  R,          R\         /# )r   Úxr  Nr!   )r   r$   r'   rƒ   )r,   s   "r-   r.   r.   ;  s0   € ÷ ñ ”ð œŸ™×-Ñ-°Õ4ð ¼ñ r/   c                ó°  € \        V \        P                  P                  4      '       d¬   RV P                  9   d   V P                  R,          # RV P                  9   d   V P                  R,          # V P
                  R8X  dQ   \        V P                  \        4      '       d1   \        WP                  4      '       d   \        WP                  4      # R# V # )z‘Return a fake tensor from the meta values of an input FX node.  If the input node
is a get_attr node, we attempt to resolve it as a member of gm.rV   rQ  rR  N)
r6   r$   r'   r(   rW   r7   r8   r*   r.  r  )r�  r  s   &&r-   rŠ   rŠ   ;  s�   € ô �!”U—X‘X—]‘]×#Ò#Ø�A—F‘FŒ?Ø—6‘6˜%•=Ð Ø˜aŸf™fÔ$Ø—6‘6˜/Õ*Ð*Ø�4‰4�:Ô¤*¨Q¯X©X´s×";Ò";ÄÈÏHÉH×@UÒ@UÜ˜2Ÿx™xÓ(Ð(ñ à€Hr/   c                ó  € V ^8„  d   QhR\         P                  P                  R\         P                  P                  R,          R\        \
        \        \        R3,          \        \        \        3,          3,          /# )r   r�  r  Nr!   .)	r$   r'   r(   rƒ   r"   r+   r   r)   r*   )r,   s   "r-   r.   r.   M  sW   € ÷ ñ Ü‡x�x‡}�}ðÜŸ(™(×.Ñ.°Õ5ðä
Œ4””s˜C�x•¤$¤s¬C x¥.Ð0Õ1ñr/   c                ó<  € \        \        \        VR7      V P                  V P                  34      w  r#\
        ;QJ d0    R \        P                  ! V/ VB  4       F  '       g   K   RM%	  RM!! R \        P                  ! V/ VB  4       4      '       d   RW#3# RW#3# )zo
First value returns a boolean if any of the input nodes don't have a faketensor and
weren't resolved from gm.
rY  c              3   ój   "  € T F)  p\        V\        P                  P                  4      x € K+  	  R # 5irF   rV  r�   s   & r-   rJ   Ú'get_fake_args_kwargs.<locals>.<genexpr>U  s&   é € ð Ù.U¨Œ
�1”e—h‘h—m‘m×$Ð$Ó.Uùs   ‚13TF)r   r   rŠ   r5   rj   rZ  rÑ   Úarg_tree_leaves)r�  r  r5   rj   s   &&  r-   r`   r`   M  s�   € ô œG¤H°Ô4°q·v±v¸q¿x¹xÐ6HÓI�L€Dß
ƒsñ Ü.4×.DÒ.DÀdÐ.UÈfÒ.Uó‡s‡s‚sñ Ü.4×.DÒ.DÀdÐ.UÈfÒ.Uó÷ ò ð �dÐ"Ð"Ø�ÐÐr/   c                óX   € V ^8„  d   QhR\         P                  P                  R\        /# r  r)  )r,   s   "r-   r.   r.   \  s"   € ÷ ñ œ5Ÿ8™8Ÿ=™=ð ¬Tñ r/   c                ó  aaaa€ ^ RI HoHo R VV3R lloS! V 4      '       d   R# R V3R llo\        ;QJ d)    V3R lV P                   4       F  '       g   K   RM	  RM! V3R lV P                   4       4      '       d   R# R# )	zìReturns true if a node is always realized when lowered to inductor IR.

NOTE: This may return some false negatives. e.g. it doesn't
handle buffers realized heuristically during lowering, or
buffers realized indirectly through view ops.
)Ú	fallbacksÚneeds_realized_inputsc                óX   € V ^8„  d   QhR\         P                  P                  R\        /# r  r)  )r,   s   "r-   r.   Ú&is_node_realized.<locals>.__annotate__e  s&   € ÷ Pñ PœŸ™Ÿ™ð P¬$ñ Pr/   c                 óà   <€ V P                   R 8X  d8   V P                  \        P                  J d   S! V P                  ^ ,          4      # V P                   R9   ;'       g    V P                  S9   # )r2   )r�   Úoutput)r7   r8   ÚoperatorÚgetitemr5   )r   rŠ  Ú	is_buffers   &€€r-   r’  Ú#is_node_realized.<locals>.is_buffere  sV   ø€ Ø�7‰7�oÔ%¨$¯+©+¼×9IÑ9IÓ*Iñ ˜TŸY™Y q�\Ó*Ð*Ø�w‰wÐ3Ñ3×OÐO°t·{±{ÀiÑ7OÐOr/   Tc                óX   € V ^8„  d   QhR\         P                  P                  R\        /# r  r)  )r,   s   "r-   r.   r�  r  s&   € ÷ Kñ KœeŸh™hŸm™mð K´ñ Kr/   c                 óP   <€ V P                   R 8H  ;'       g    V P                  S9   # )r�  )r7   r8   )r   r‹  s   &€r-   Úrealizes_inputsÚ)is_node_realized.<locals>.realizes_inputsr  s$   ø€ Ø�w‰w˜(Ñ"×JÐJ d§k¡kÐ5JÑ&JÐJr/   c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irF   r¬   )rG   rh   r–  s   & €r-   rJ   Ú#is_node_realized.<locals>.<genexpr>u  s   øé € Ð
8©Z T‰?˜4× Ð «Zùr®   F)Útorch._inductor.loweringrŠ  r‹  rZ  r9   )r   rŠ  r’  r‹  r–  s   &@@@@r-   Úis_node_realizedr›  \  sb   û€ ÷ J÷Pñ Pñ �‡‚Ù÷Kð K÷ ƒsÔ
8¨T¯ZªZÓ
8‡s‡s‚sÔ
8¨T¯ZªZÓ
8×8Ò8Ùñ r/   c                óf   € V ^8„  d   QhR\         P                  P                  R\        R,          /# r{  r|  )r,   s   "r-   r.   r.   |  s&   € ÷ ñ œŸ™Ÿ™ð ¬3°­:ñ r/   c           
      óJ  € \        V 4      '       d!   \        V P                  \        4      '       d   R # \	        RR7      ;_uu_ 4        \        V 4      w  rpV'       Ed   V P                  \        P                  P                  P                  \        P                  P                  P                  39   dT   \        P                  ! V P                  4      pVe0   V! V/ VBRV P                  P                  R4      /B uuR R R 4       # \        P                  P                  P!                  RR7      ;_uu_ 4       pV P                  ! V/ VB  R R R 4       XP#                  4       pVuuR R R 4       #  R R R 4       R #   + '       g   i     L7; i  + '       g   i     R # ; i)NT)Úallow_non_fake_inputsÚout_valrV   F)Údisplay)Úcountable_fxr6   r8   r*   r   r`   r$   r¿   rÀ   rÄ   rÇ   r   r·   rW   ÚutilsÚflop_counterÚFlopCounterModeÚget_total_flops)r   Úsuccessr5   rj   Úflop_formulaÚflop_counter_modeÚcounted_flopss   &      r-   Úcount_flops_fxrª  |  s>  € Ü˜×Ò¤¨D¯K©K¼×!=Ò!=ÙÜ	¨d×	3Ö	3Ü 4°TÓ :Ñˆ�vçˆ7ð �{‰{Ü—	‘	×&Ñ&×5Ñ5Ü—	‘	×&Ñ&×>Ñ>ðô ô  -×0Ò0°·±Ó=�ØÒ+Ù'¨ÐV°ÑVÀÇÁÇÁÈuÓAUÒV÷ 
4Ò	3ô —‘×)Ñ)×9Ñ9Øð :÷ ô à"Ø—’˜TÐ, VÒ,÷ð
 .×=Ñ=Ó?ˆMØ ÷) 
4Ò	3ð ÷ 
4ñ* ÷÷ ú÷ 
4Ö	3ñ* ús+   ÁB7FÄ
2FÄ<E>	ÅFÅ>FÆ	FÆF"	c                óX   € V ^8„  d   QhR\         P                  P                  R\        /# r  r)  )r,   s   "r-   r.   r.   —  s"   € ÷ #ñ #”u—x‘x—}‘}ð #¬ñ #r/   c                ó$  € \        V \        P                  P                  4      '       g   \	        R\        V 4       24      h\        V R4      '       g   R# V P                  p\        VR4      '       g
   V\        9   # VP                  pV\        9   # )z6
Whether or not we can count the flops of an FX node.
zexpected torch.fx.Node, got r8   FÚoverloadpacket)
r6   r$   r'   r(   rÆ   r#   r.  r8   r   r­  )r   r8   Úpackets   &  r-   r¡  r¡  —  sx   € ô �dœEŸH™HŸM™M×*Ò*ÜÐ;¼DÀ»J¸<ÐHÓIÐIÜ�4˜×"Ò"ÙØ�[‰[€FÜ�6Ð+×,Ò,ØœÑ&Ð&Ø×"Ñ"€FØ”]Ñ"Ð"r/   rF   );rb   r�  rÖ   Úcollectionsr   Úcollections.abcr   r   r   r   r   r	   Údataclassesr
   Ú	functoolsr   Ú	itertoolsr   Útypingr   rt   r$   Útorch.fxÚtorch._dispatch.pythonr   Ú.torch._inductor.fx_passes.control_dependenciesr   Útorch._subclasses.fake_tensorr   Ú%torch.fx.experimental.symbolic_shapesr   r   r   r   Útorch.utilsr   rÑ   Útorch.utils._ordered_setr   Útorch.utils._pytreer   Útorch.utils._typing_utilsr   Útorch.utils.flop_counterr   Úvirtualizedr   r:   rQ   rÔ   rï   rÿ   rg   rC  rŠ   r`   r›  rª  r¡  r¬   r/   r-   Ú<module>rÀ     sç   ðã Û Û Ý #÷÷ õ "Ý Ý Ý ã ã Û Ý ;Ý GÝ 8÷ó õ *Ý /Ý (Ý .Ý 2å õ
ð>`ð
 ð`ð ð`ð "&ð`ð 9=÷`õFC
ñL �$Ô÷"ð "ó ð"÷oñ oõd&õ)õ÷$õõ@÷6#r/   