ó
    Eñiì*  ã                  ó”  • S SK Jr  S SKrS SKrS SKJrJr  S SKrS SKJ	s  J
r  S SKJrJrJrJrJr  S SKJr  \(       a  S SKJrJrJr  S SKJr  S SKJr  \R6                  R8                  R:                  rSS	 jrSS
 jrSS jr             SS jr!SS jr"    SS jr#     S               SS jjr$ " S S\5      r%g)é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)Ú
FakeTensorÚFakeTensorModeÚMetadataMismatchErrorÚtree_flatten_onlyÚUnsupportedFakeTensorException)ÚTorchDispatchMode)ÚCallableÚMappingÚSequence)Ú
OpOverload)ÚPyTreec                ó:  ^• [        [        R                  U5       Vs1 s HC  n[        R                  R	                  U5      (       d  M)  UR                  5       R                  iME     snm[        U4S j[        [        R                  U 5       5       5      $ s  snf )Nc              3  óª   >#   • U  HH  n[         R                  R                  U5      =(       a    UR                  5       R                  T;   v •  MJ     g 7f©N)ÚtorchÚ_CÚ_has_storageÚ_typed_storageÚ_cdata)Ú.0ÚoutÚinput_storagess     €ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_subclasses/fake_utils.pyÚ	<genexpr>Ú'outputs_alias_inputs.<locals>.<genexpr>#   sC   øé € ð â;ˆCô 	�‰×Ñ˜cÓ"×T s×'9Ñ'9Ó';×'BÑ'BÀnÑ'TÔTÚ;ùs   ƒAA)r	   r   ÚTensorr   r   r   r   Úany)ÚoutputsÚinputsÚinpr   s      @r   Úoutputs_alias_inputsr$      s|   ø€ ô %¤U§\¡\°6Ô:óâ:ˆCÜ�8‰8× Ñ  ×%ó 	$ˆ×ÑÓ×#Ô#Ù:ñ€Nô
 ô ä$¤U§\¡\°7Ô;óó ð ùòs   ž(BÁ
Bc                óÐ   ^• [        [        R                  U5       Vs1 s H  n[        U5      iM     snm[	        U4S j[        [        R                  U 5       5       5      $ s  snf )Nc              3  ó@   >#   • U  H  n[        U5      T;   v •  M     g 7fr   )Úid)r   r   Ú	input_idss     €r   r   Ú%outputs_are_inputs.<locals>.<genexpr>+   s   øé € ÐXÒ/W¨Œr�#‹w˜)Ö#Ò/Wùs   ƒ)r	   r   r   r'   r    )r!   r"   r#   r(   s      @r   Úoutputs_are_inputsr*   )   sK   ø€ Ü$5´e·l±lÀFÔ$KÓLÒ$K˜S”�C–Ñ$KÑL€IÜÔXÔ/@ÄÇÁÈwÔ/WÓXÓXÐXùò Ms   žA#c                ó
  • [        5       n[        [        R                  U 5       H[  n[        R                  R                  U5      (       d  M)  UR                  5       R                  nX1;   a    gUR                  U5        M]     g)NTF)	Úsetr	   r   r   r   r   r   r   Úadd)r!   Ústoragesr   Ústors       r   Úoutput_alias_each_otherr0   .   sd   € Ü‹u€HÜ ¤§¡¨wÖ7ˆÜ�x‰x×$Ñ$ S×)Ñ)ÙØ×!Ñ!Ó#×*Ñ*ˆØÓÙØ�‰�TÖñ 8ð ó    c                ó  • [        X5      n[        X45      nXV:w  a  [        U  SU SU 35      e[        X5      n[        X45      nXx:w  a  [        U  SU SU 35      e[        U5      n	[        U5      n
Xš:w  a  [        U  SU
 SU	 35      eg )Nz( mismatch in outputs_alias_inputs check ú != z& mismatch in outputs_are_inputs check z, mismatch in outputs_alias_each_other check )r$   r   r*   r0   )ÚcontextÚreal_outÚreal_inÚfake_outÚfake_inÚ
r_aliasingÚ
f_aliasingÚr_identity_eqÚf_identity_eqÚr_output_alias_each_otherÚf_output_alias_each_others              r   Ú_check_alias_infor?   :   sÍ   € ô & hÓ8€JÜ% hÓ8€JØÓÜ#ØˆiÐ?À
¸|È4ÐPZÈ|Ð\ó
ð 	
ô ' xÓ9€MÜ& xÓ9€MØÓ%Ü#ØˆiÐ=¸m¸_ÈDÐQ^ÐP_Ð`ó
ð 	
ô !8¸Ó AÐÜ 7¸Ó AÐØ Ó=Ü#ØˆiÐCØ(Ð)¨Ð.GÐ-HðJó
ð 	
ð >r1   c                óª  • U [         R                  R                  L d  U [         R                  R                  L a  US;   a  S[	        U5      ;   a  gU [         R
                  R                  L d  U [         R                  R                  L a  US;   a  S[	        U5      ;   a  gU [         R                  R                  L a  US;   a  S[	        U5      ;   a  gg)N)é   é   ÚDevicesT)é   é   F)ÚatenÚ#_scaled_dot_product_flash_attentionÚdefaultÚ_flash_attention_forwardÚreprÚ'_scaled_dot_product_efficient_attentionÚ_efficient_attention_forwardÚ#_scaled_dot_product_cudnn_attention)ÚfuncÚidxÚes      r   Úis_sdpa_errorrQ   X   s¯   € ð ”D×<Ñ<×DÑDÒDØ”t×4Ñ4×<Ñ<Ò<à�6‹MØœ˜a›Ó àð ”D×@Ñ@×HÑHÒHØ”t×8Ñ8×@Ñ@Ò@à�6‹MØœ˜a›Ó àà”×8Ñ8×@Ñ@Ò@Ø�6‹MØœ˜a›Ó àØr1   c                ól  ^• [        S U  5       S5      nUc  U $ UR                  nUR                  R                  nUR                  nUR
                  R                  5        VVs0 s H  u  pVXe_M	     nnnUR                  R                  5        VVs0 s H  u  pVXe_M	     nnn/ n	U  GHq  n
[        U
[        5      (       a  U
R                  [        R                  :w  a  U	R                  U
5        MJ  UR                  U
R                  5       5      nUc  SOUR                  U5      nUc  U	R                  U
5        M•  SmSU4S jjnU" U
R!                  5       5      nU
R"                   Vs/ s H
  oý" U5      PM     nnU
R%                  5        Vs/ s H
  oý" U5      PM     nnT(       a  U	R                  U
5        GM  [        R&                  " / U
R(                  U
R*                  S9nUR-                  UUUUS9  U	R                  UR/                  5       5        GMt     U	$ s  snnf s  snnf s  snf s  snf )aU  
Attempt to convert fake tensors to a corresponding real tensor with the correct underlying storage by looking up
the FakeTensorMode meta to real storage mapping. On failure to find the storage mapping, the FakeTensor will
remain in the list.

Note: this is not currently optimized (makes copies of the meta converter internal dictionaries)
c              3  óT   #   • U  H  n[        U[        5      (       d  M  Uv •  M      g 7fr   )Ú
isinstancer   )r   Úitems     r   r   Ú+try_convert_fake_to_real.<locals>.<genexpr>€   s   é € ÐCš(�$¤j°´z×&B�‰š(ùs   ‚(Ÿ	(NFc                ó¸   >• [        U [        R                  5      (       d  U $ T(       d  TOU R                  R	                  5       mU R                  R
                  $ r   )rT   r   ÚSymIntÚnodeÚhas_hintÚhint)ÚsÚunhinteds    €r   Ú
map_symintÚ,try_convert_fake_to_real.<locals>.map_symint™   s;   ø€ ä˜a¤§¡×.Ñ.Ø�Þ'/‘x°Q·V±V·_±_Ó5FˆHØ—6‘6—;‘;Ðr1   )ÚdtypeÚdevice)Ústorage_offsetÚsizeÚstride)r\   ztorch.SymInt | intÚreturnÚint)ÚnextÚ	fake_modeÚfake_tensor_converterÚmeta_converterÚ	describerÚstorage_memoÚitemsÚlookup_storagerT   r   Úlayoutr   ÚstridedÚappendÚgetÚuntyped_storagerb   Úshaperd   Úemptyr`   ra   Úset_Úclone)Úten_listÚfake_tensorrh   rj   ÚdescÚkÚvÚstorage_to_keyÚkey_to_real_storager   ÚtÚkeyÚreal_storager^   Ústor_offsetr\   rc   rd   Ú
new_tensorr]   s                      @r   Útry_convert_fake_to_realr„   t   s÷  ø€ ô ÙC™(ÓCÀTó€Kð ÑØˆà×%Ñ%€IØ×4Ñ4×CÑC€NØ×#Ñ#€Dà'5×'BÑ'B×'HÑ'HÔ'JÔKÒ'J™t˜q�a’dÑ'J€NÑKØ,0×,?Ñ,?×,EÑ,EÔ,GÔHÒ,G¡D A˜1š4Ñ,GÐÑHØ
€CÜˆÜ˜!œZ×(Ñ(¨A¯H©H¼¿¹Ó,EØ�J‰J�qŒMÙà× Ñ  ×!2Ñ!2Ó!4Ó5ˆØ"™{‘tÐ0C×0GÑ0GÈÓ0LˆØÑØ�J‰J�qŒMÙàˆ÷	ñ ! ×!1Ñ!1Ó!3Ó4ˆØ'(§w¢wÓ/¢w !�
˜1–¡wˆÐ/Ø)*¯©¬Ó4ª A�*˜Q–-©ˆÐ4æØ�J‰J�qŒMÚä—[’[ØØ—'‘'Ø—8‘8ñ
ˆ
ð
 	�‰ØØ&ØØð	 	ñ 	
ð 	�
‰
�:×#Ñ#Ó%×&ñO ðR €JùóY LùÛHùò. 0ùÚ4s   Á%H ÂH&Å+H,ÆH1c                óf  • U(       a(  U R                   UR                   :w  a  [        U S35      e[        R                  R	                  U 5      (       a3  U R                  5       nUR                  5       nXx:w  a  [        U S35      e[        R                  R                  R                  U UUUSS9  g )Nz· mismatched requires_grad-ness of outputs. This usually means that you have added autograd support for your operator at a dispatch key other than Autograd, which will lead to problemsz mismatched storage offsetT)Úcheck_sizesÚcheck_stridesÚallow_rhs_unbacked)	Úrequires_gradr   r   r   r   rb   Ú_primsÚutilsÚcompare_tensor_meta)	r5   r7   r4   ÚsizesÚstridesrb   r‰   Úr_offsetÚf_offsets	            r   Ú_check_fake_real_tensorsr‘   ¸   s¯   € ö Ø×!Ñ! X×%;Ñ%;Ó;Ü'Ø�)ð .ð /óð ô ‡x�x×Ñ˜X×&Ñ&Ø×*Ñ*Ó,ˆØ×*Ñ*Ó,ˆØÓÜ'¨7¨)Ð3MÐ(NÓOÐOä	‡L�L×Ñ×*Ñ*ØØØØØð +ò r1   c                  ót   ^ • \ rS rSr SSSSS.         SU 4S jjjjr  S	         S
S jjrSrU =r$ )ÚCrossRefFakeModeéÙ   T)r‡   Úcheck_aliasingÚonly_check_ops_with_metac               ó`   >• [         TU ]  5         Ub  UOS U l        X l        X0l        X@l        g )Nc                ó   • g)NF© )Úfns    r   Ú<lambda>Ú+CrossRefFakeMode.__init__.<locals>.<lambda>ä   s   € ÀUr1   )ÚsuperÚ__init__Úignore_op_fnr‡   r•   r–   )ÚselfrŸ   r‡   r•   r–   Ú	__class__s        €r   rž   ÚCrossRefFakeMode.__init__Ú   s7   ø€ ô 	‰ÑÔà(Ñ4‰LÑ:Jð 	Ôð +ÔØ,ÔØ(@Õ%r1   c           
     ó.  • U=(       d    0 nS nSn0 nU[         R                  R                  [         R                  R                  [         R                  R
                  4;  GaY  U R                  U5      (       GdB  U R                  (       a/  [        R                  R                  R                  U5      (       Ga  [        R                  R                  UR                  ;  aÚ  [        R                  R                  UR                  ;  a²  [        R                  R                   UR                  ;  aŠ  SSKJn   ['        U" 5       S9 n	[(        R*                  " [        R,                  [.        R0                  " U	R2                  SS9X445      u  pg[4        R6                  " 5          U" U0 UD6nS S S 5        S S S 5        SU S3n
U" U0 UD6nUGb<  [(        R:                  " U5      n[(        R:                  " U5      n[=        U5      [=        U5      :w  a%  [?        U
 S	[=        U5       S
[=        U5       35      eU R@                  (       a  [C        X«X44XVU45        [E        [G        [(        R:                  " U5      [(        R:                  " U5      5      5       Hq  u  nu  nn[I        U[        R,                  5      nU[I        U[        R,                  5      :w  a  [?        U
 S35      eU(       d  MX   [K        UUSU RL                  SSS9  Ms     U$ ! , (       d  f       GNg= f! , (       d  f       GNq= f! [8         a     GN�f = f! [N         aH  n[Q        XU5      (       a   S nAMÍ  [=        U5      S:X  a  U
 SU 3O	U
 SU SU 3n[S        U5      UeS nAff = f)Nr™   r   )ÚShapeEnv)Ú	shape_envT)Ústatic_shapeszWhen comparing the output of z* on FakeTensor and concrete Tensors, foundz mismatch in number of returns r3   z$ mismatched number of tensor outputs)r�   rŽ   rb   r‰   é   z mismatched tensor metadata: z' mismatched tensor metadata for output[z]: )*rF   Ú
lift_freshrH   Úlift_fresh_copyrv   Úsource_Storage_storage_offsetrŸ   r–   r   Ú_subclassesÚ
fake_implsÚhas_metaÚTagÚdynamic_output_shapeÚtagsÚinplace_viewÚdata_dependent_outputÚ%torch.fx.experimental.symbolic_shapesr¤   r   ÚpytreeÚtree_map_onlyr   Ú	functoolsÚpartialÚfrom_tensorÚwarningsÚcatch_warningsr
   Útree_leavesÚlenÚAssertionErrorr•   r?   Ú	enumerateÚziprT   r‘   r‡   Ú	ExceptionrQ   r   )r    rN   ÚtypesÚargsÚkwargsÚfake_rÚ	fake_argsÚfake_kwargsr¤   rh   r4   ÚrÚr_flatÚf_flatrO   Úr_outÚf_outÚr_is_tenrP   Úerror_messages                       r   Ú__torch_dispatch__Ú#CrossRefFakeMode.__torch_dispatch__ê   s1  € ð —˜2ˆàˆØ&(ˆ	Ø,.ˆð
 ä—‘×'Ñ'Ü×$Ñ$×,Ñ,Ü—	‘	×7Ñ7ðôð ×%Ñ% d×+Ò+à×1×1Ü×$Ñ$×/Ñ/×8Ñ8¸×>Ò>ä—	‘	×.Ñ.°d·i±iÓ?Ü—	‘	×&Ñ&¨d¯i©iÓ7Ü—	‘	×/Ñ/°t·y±yÓ@õ Gðä#©h«jÒ9¸YÜ-3×-AÒ-AÜŸ™Ü!×)Ò)¨)×*?Ñ*?ÈtÑTØ˜ó.Ñ*�Iô
 "×0Ò0Õ2Ù!% yÐ!@°KÑ!@˜÷ 3÷ :ð ,¨D¨6ð 2ð ð 	ñ �$Ð!˜&Ñ!ˆØÒÜ×'Ò'¨Ó*ˆFÜ×'Ò'¨Ó/ˆFÜ�6‹{œc &›kÓ)Ü$Ø�iÐ>¼sÀ6»{¸mÈ4ÔPSÐTZÓP[È}Ð]óð ð ×"×"Ü!Ø  °ÀKÐ8Pôô (1Ü”F×&Ò& qÓ)¬6×+=Ò+=¸fÓ+EÓFö(Ñ#�‘^�e˜Uô & e¬U¯\©\Ó:�Øœz¨%´·±Ó>Ó>Ü(Ø"˜)Ð#GÐHóð ÷ �8ðJÜ0Ø!Ø!Ø"&Ø$(×$6Ñ$6Ø+/Ø*.ôñ(ð6 ˆ÷e 3Ö2ú÷ :Ö9ûô 2ó ÚðûôN %ó JÜ(¨°A×6Ñ6Ý$ô  # 6›{¨aÓ/ð  '˜iÐ'DÀQÀCÑHà$+ 9Ð,SÐTWÐSXÐX[Ð\]Ð[^Ð!_ð &ô
 4°MÓBÈÐIûðJúsg   Ä:L1 ÅALÆ$	LÆ-LÆ5L1 Ë/MÌ
L	ÌLÌ
L.Ì)L1 Ì.L1 Ì1
L?Ì>L?Í
NÍNÍ#,NÎN)r•   r‡   rŸ   r–   r   )
rŸ   z#Callable[[OpOverload], bool] | Noner‡   Úboolr•   rÐ   r–   rÐ   re   ÚNone)r™   N)
rN   r   rÁ   zSequence[type]rÂ   zSequence[object]rÃ   zMapping[str, object] | Nonere   Úobject)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rž   rÎ   Ú__static_attributes__Ú__classcell__)r¡   s   @r   r“   r“   Ù   s¤   ø† ð =AðAð #Ø#Ø)-ñAà9ðAð ð	Að
 ðAð #'ðAð 
÷Añ Að( "$Ø.2ð\àð\ð ð\ð ð	\ð
 ,ð\ð 
÷\ó \r1   r“   )r!   r   r"   r   re   rÐ   )r!   r   re   rÐ   )r4   Ústrr5   r   r6   r   r7   r   r8   r   re   rÑ   )rN   r   rO   rf   rP   rÀ   re   rÐ   )rx   zlist[FakeTensor | Any]re   z%list[FakeTensor | torch.Tensor | Any])Ú TFTT)r5   ztorch.Tensorr7   r   r4   rÙ   r�   rÐ   rŽ   rÐ   rb   rÐ   r‰   rÐ   re   rÑ   )&Ú
__future__r   r¶   r¹   Útypingr   r   r   Útorch.utils._pytreer‹   Ú_pytreer´   Útorch._subclasses.fake_tensorr   r   r   r	   r
   Útorch.utils._python_dispatchr   Úcollections.abcr   r   r   Ú
torch._opsr   r   Ú_opsÚopsrF   r$   r*   r0   r?   rQ   r„   r‘   r“   r™   r1   r   Ú<module>rå      s,  ðÝ "ã Û ß %ã ß $Ð $÷õ õ ;ö ß;Ñ;å%Ý*ð ‡z�z‡~�~×Ñ€ô	ôYô
	ð
Øð
àð
ð ð
ð ð	
ð
 ð
ð 
ô
ô<ð8AØ$ðAà*ôAðN ØØØØðØðàðð ðð ð	ð
 ðð ðð ðð 
õôBmÐ(õ mr1   