Ë
    g^(h+(  ã                   ó`  — d dl Z d dlZd dlmZmZmZ d dlZd dlmc m	Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ ej*                  j,                  j.                  Zd„ Zd„ Zd„ Zd	„ Zd
„ Zdeeeef      deeeej<                  ef      fd„Z	 	 	 	 	 ddej<                  defd„Z  G d„ de«      Z!y)é    N)ÚAnyÚCallableÚUnion)Ú
OpOverload)Ú
FakeTensorÚFakeTensorModeÚMetadataMismatchErrorÚtree_flatten_onlyÚUnsupportedFakeTensorException)ÚTorchDispatchModec                 ó$  ‡— t        t        j                  |«      D �ch c];  }t        j                  j	                  |«      r|j                  «       j                  ’Œ= c}Št        ˆfd„t        t        j                  | «      D «       «      S c c}w )Nc              3   ó˜   •K  — | ]A  }t         j                  j                  |«      xr |j                  «       j                  ‰v –— ŒC y ­w©N)ÚtorchÚ_CÚ_has_storageÚ_typed_storageÚ_cdata)Ú.0ÚoutÚinput_storagess     €úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_subclasses/fake_utils.pyú	<genexpr>z'outputs_alias_inputs.<locals>.<genexpr>   sD   øè ø€ ò àô 	�‰×Ñ˜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      su   ø€ ô %¤U§\¡\°6Ó:öàÜ�8‰8× Ñ  Ô%ð 	×ÑÓ×#Ó#ò€Nô
 ó ä$¤U§\¡\°7Ó;ôó ð ùòs   žA Bc                 óÈ   ‡— t        t        j                  |«      D �ch c]  }t        |«      ’Œ c}Št	        ˆfd„t        t        j                  | «      D «       «      S c c}w )Nc              3   ó8   •K  — | ]  }t        |«      ‰v –— Œ y ­wr   )Úid)r   r   Ú	input_idss     €r   r   z%outputs_are_inputs.<locals>.<genexpr>%   s   øè ø€ ÒX¨Œr�#‹w˜)Ô#ÑXùs   ƒ)r
   r   r   r"   r   )r   r   r   r#   s      @r   Úoutputs_are_inputsr$   #   sE   ø€ Ü$5´e·l±lÀFÓ$KÖL˜S”�C•ÒL€IÜÓXÔ/@ÄÇÁÈwÓ/WÔXÓXÐXùò Ms   žAc                 óø   — t        «       }t        t        j                  | «      D ]S  }t        j                  j                  |«      sŒ#|j                  «       j                  }||v r y|j                  |«       ŒU y)NTF)	Úsetr
   r   r   r   r   r   r   Úadd)r   Ústoragesr   Ústors       r   Úoutput_alias_each_otherr*   (   sh   € Ü‹u€HÜ ¤§¡¨wÓ7ò ˆÜ�x‰x×$Ñ$ SÔ)ØØ×!Ñ!Ó#×*Ñ*ˆØ�8ÑÙØ�‰�TÕðð ó    c                 ó   — t        ||«      }t        ||«      }||k7  rt        | › d|› d|› �«      ‚t        ||«      }t        ||«      }||k7  rt        | › d|› d|› �«      ‚t        |«      }	t        |«      }
|	|
k7  rt        | › d|
› d|	› �«      ‚y )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$   r*   )Ú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_infor9   4   sÚ   € Ü% h°Ó8€JÜ% h°Ó8€JØ�ZÒÜ#ØˆiÐ?À
¸|È4ÐPZÈ|Ð\ó
ð 	
ô ' x°Ó9€MÜ& x°Ó9€MØ˜Ò%Ü#ØˆiÐ=¸m¸_ÈDÐQ^ÐP_Ð`ó
ð 	
ô !8¸Ó AÐÜ 7¸Ó AÐØ Ð$=Ò=Ü#ØˆiÐCØ(Ð)¨Ð.GÐ-HðJó
ð 	
ð >r+   c                 óˆ  — | t         j                  j                  u s| t         j                  j                  u r|dv rdt	        |«      v ry| t         j
                  j                  u s| t         j                  j                  u r|dv rdt	        |«      v ry| t         j                  j                  u r|dv rdt	        |«      v ryy)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_errorrK   L   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›Ñ àØr+   Úten_listÚreturnc                 ó<  ‡— t        d„ | D «       d«      }|€| S |j                  }|j                  j                  }|j                  }|j
                  j                  «       D ��ci c]  \  }}||“Œ
 }}}|j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}g }	| D �]]  }
t        |
t        «      r|
j                  t        j                  k(  s|	j                  |
«       ŒC|j                  |
j                  «       «      }|€dn|j                  |«      }|€|	j                  |
«       Œ‹dŠˆfd„} ||
j!                  «       «      }|
j"                  D �cg c]
  } ||«      ‘Œ }}|
j%                  «       D �cg c]
  } ||«      ‘Œ }}‰r|	j                  |
«       Œþt        j&                  g |
j(                  |
j*                  ¬«      }|j-                  ||||¬«       |	j                  |j/                  «       «       �Œ` |	S c c}}w c c}}w c c}w c c}w )ai  
    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   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )Ú
isinstancer   )r   Úitems     r   r   z+try_convert_fake_to_real.<locals>.<genexpr>t   s   è ø€ ÒC�$¤j°´zÕ&BŒÑCùs   ‚˜NFc                 ó¤   •— t        | t        j                  «      s| S ‰s‰n| j                  j	                  «       Š| j                  j
                  S r   )rP   r   ÚSymIntÚnodeÚhas_hintÚhint)ÚsÚunhinteds    €r   Ú
map_symintz,try_convert_fake_to_real.<locals>.map_symint�   s8   ø€ ä˜a¤§¡Ô.Ø�Ù'/‘x°Q·V±V·_±_Ó5FˆHØ—6‘6—;‘;Ðr+   )ÚdtypeÚdevice)Ústorage_offsetÚsizeÚstride)ÚnextÚ	fake_modeÚfake_tensor_converterÚmeta_converterÚ	describerÚstorage_memoÚitemsÚlookup_storagerP   r   Úlayoutr   ÚstridedÚappendÚgetÚuntyped_storager\   Úshaper^   ÚemptyrZ   r[   Úset_Úclone)rL   Úfake_tensorr`   rb   ÚdescÚkÚvÚstorage_to_keyÚkey_to_real_storager   ÚtÚkeyÚreal_storagerY   Ústor_offsetrW   r]   r^   Ú
new_tensorrX   s                      @r   Útry_convert_fake_to_realr{   h   sù  ø€ ô ÙC˜(ÔCÀTó€Kð ÐØˆà×%Ñ%€IØ×4Ñ4×CÑC€NØ×#Ñ#€Dà'5×'BÑ'B×'HÑ'HÓ'J×K™t˜q !�a˜‘dÐK€NÑKØ,0×,?Ñ,?×,EÑ,EÓ,G×H¡D A q˜1˜a™4ÐHÐÑHØ
€CØó ''ˆÜ˜!œZÔ(°·±¼E¿M¹MÒ0IØ�J‰J�qŒMØà× Ñ  ×!2Ñ!2Ó!4Ó5ˆØ"˜{‘tÐ0C×0GÑ0GÈÓ0LˆØÐØ�J‰J�qŒMØàˆô	ñ ! ×!1Ñ!1Ó!3Ó4ˆØ'(§w¡wÖ/ !‘
˜1•Ð/ˆÐ/Ø)*¯©«Ö4 A‘*˜Q•-Ð4ˆÐ4áØ�J‰J�qŒMØä—[‘[ØØ—'‘'Ø—8‘8ô
ˆ
ð
 	�‰ØØ&ØØð	 	ô 	
ð 	�
‰
�:×#Ñ#Ó%Ö&ðO''ðR €JùóY LùÛHùò. 0ùÚ4s   Á$HÂHÅHÅ>Hr/   r1   c                 óV  — |r'| j                   |j                   k7  rt        |› d�«      ‚t        j                  j	                  | «      r3| j                  «       }|j                  «       }||k7  rt        |› d�«      ‚t        j                  j                  j                  | |||d¬«       y )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   r\   Ú_primsÚutilsÚcompare_tensor_meta)	r/   r1   r.   ÚsizesÚstridesr\   r€   Úr_offsetÚf_offsets	            r   Ú_check_fake_real_tensorsrˆ   ¬   s®   € ñ Ø×!Ñ! X×%;Ñ%;Ò;Ü'Ø�)ð .ð /óð ô ‡x�x×Ñ˜XÔ&Ø×*Ñ*Ó,ˆØ×*Ñ*Ó,ˆØ�xÒÜ'¨7¨)Ð3MÐ(NÓOÐOä	‡L�L×Ñ×*Ñ*ØØØØØð +õ r+   c                   óP   ‡ — e Zd Z	 dddddœdeeegef   df   fˆ fd„Zdd„Zˆ xZ	S )	ÚCrossRefFakeModeNT)r~   Úcheck_aliasingÚonly_check_ops_with_metaÚignore_op_fnc                ód   •— t         ‰| �  «        |�|nd„ | _        || _        || _        || _        y )Nc                  ó   — y)NF© )Úfns    r   ú<lambda>z+CrossRefFakeMode.__init__.<locals>.<lambda>Ø   s   � r+   )ÚsuperÚ__init__r�   r~   r‹   rŒ   )Úselfr�   r~   r‹   rŒ   Ú	__class__s        €r   r”   zCrossRefFakeMode.__init__Î   s=   ø€ ô 	‰ÑÔà(Ð4‰LÑ:Jð 	Ôð +ˆÔØ,ˆÔØ(@ˆÕ%r+   c           	      ó¨  — |xs i }d }|t         j                  j                  t         j                  j                  t         j                  j
                  fv�rI| j                  |«      �s7| j                  r*t        j                  j                  j                  |«      �rt        j                  j                  |j                  vrÛt        j                  j                  |j                  vrµt        j                  j                   |j                  vr�ddlm} 	 t'         |«       ¬«      5 }t)        j*                  t        j,                  t/        j0                  |j2                  d¬«      ||f«      \  }}	t5        j6                  «       5   ||i |	¤Ž}d d d «       d d d «       d|› d�}
 ||i |¤Ž}|��'t)        j:                  |«      }t)        j:                  |«      }t=        |«      t=        |«      k(  s!J |
› dt=        |«      › d	t=        |«      › �«       ‚| j>                  rtA        |
|||f|	f«       tC        tE        t)        j:                  |«      t)        j:                  |«      «      «      D ]h  \  }\  }}tG        |t        j,                  «      }|tG        |t        j,                  «      k(  s
J |
› d
�«       ‚|sŒM	 tI        ||d| jJ                  dd¬«       Œj |S # 1 sw Y   �ŒLxY w# 1 sw Y   �ŒQxY w# t8        $ r Y �Œ`w xY w# tL        $ rB}tO        |||«      rY d }~Œ²t=        |«      dk(  r|
› d|› �n	|
› d|› d|› �}tQ        |«      |‚d }~ww xY w)Nr   )ÚShapeEnv)Ú	shape_envT)Ústatic_shapeszWhen comparing the output of z* on FakeTensor and concrete Tensors, foundz mismatch in number of returns r-   z$ mismatched number of tensor outputs)r„   r…   r\   r€   é   z mismatched tensor metadata: z' mismatched tensor metadata for output[z]: ))r@   Ú
lift_freshrB   Úlift_fresh_copyrn   Ú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Úlenr‹   r9   Ú	enumerateÚziprP   rˆ   r~   Ú	ExceptionrK   r	   )r•   rH   ÚtypesÚargsÚkwargsÚfake_rr˜   r`   Ú	fake_argsÚfake_kwargsr.   ÚrÚr_flatÚf_flatrI   Úr_outÚf_outÚr_is_tenrJ   Úerror_messages                       r   Ú__torch_dispatch__z#CrossRefFakeMode.__torch_dispatch__Þ   sS  € Ø’˜2ˆàˆð
 ä—‘×'Ñ'Ü×$Ñ$×,Ñ,Ü—	‘	×7Ñ7ðòð ×%Ñ% dÕ+à×1Ò1Ü×$Ñ$×/Ñ/×8Ñ8¸Õ>ä—	‘	×.Ñ.°d·i±iÑ?Ü—	‘	×&Ñ&¨d¯i©iÑ7Ü—	‘	×/Ñ/°t·y±yÑ@õ Gðä#©h«jÔ9ð A¸YÜ-3×-AÑ-AÜŸ™Ü!×)Ñ)¨)×*?Ñ*?ÈtÔTØ˜v˜ó.Ñ*�I˜{ô
 "×0Ñ0Ó2ñ AÙ!% yÐ!@°KÑ!@˜÷A÷Að ,¨D¨6ð 2ð ð 	ñ �$Ð!˜&Ñ!ˆØÑÜ×'Ñ'¨Ó*ˆFÜ×'Ñ'¨Ó/ˆFÜ�v“;¤#Øó#ò ð Yà�Ð9¼#¸f»+¸ÀdÌ3ÈvË;È-ÐXóYð ð ×"Ò"Ü!Ø˜Q  v °¸ÀKÐ8Pôô (1Ü”F×&Ñ& qÓ)¬6×+=Ñ+=¸fÓ+EÓFó(ò JÑ#�‘^�e˜Uô & e¬U¯\©\Ó:�Ø¤:Øœ5Ÿ<™<ó$ò ð Dà�YÐBÐCóDð ò ðJÜ0Ø!Ø!Ø"&Ø$(×$6Ñ$6Ø+/Ø*.öðJð4 ˆ÷aAñ Aú÷Añ Aûô 2ò ÚðûôJ %ò JÜ(¨¨s°AÔ6Ü$ô  # 6›{¨aÒ/ð  '˜iÐ'DÀQÀCÑHà$+ 9Ð,SÐTWÐSXÐX[Ð\]Ð[^Ð!_ð &ô
 4°MÓBÈÐIûðJúsa   ÄK6 Ä+AK)Æ		KÆK)ÆK6 Ê=LËK&	Ë!K)Ë)K3Ë.K6 Ë6	LÌLÌ	MÌMÌ!+MÍMr   )r�   N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   Úboolr”   rÁ   Ú__classcell__)r–   s   @r   rŠ   rŠ   Í   sF   ø„ ð CGðAð ØØ!%òAà˜H j \°4Ð%7Ñ8¸$Ð>Ñ?õA÷ Rr+   rŠ   )Ú TFTT)"rª   r­   Útypingr   r   r   r   Útorch.utils._pytreer‚   Ú_pytreer¨   Ú
torch._opsr   Útorch._subclasses.fake_tensorr   r   r	   r
   r   Útorch.utils._python_dispatchr   Ú_opsÚopsr@   r   r$   r*   r9   rK   Úlistr   r{   rˆ   rŠ   r�   r+   r   ú<module>rÑ      sÓ   ðó Û ß 'Ñ 'ã ß $Ð $Ý !÷õ õ ;ð ‡z�z‡~�~×Ñ€ò	òYò
	ò
ò0ð8AØ�5˜ S˜Ñ)Ñ*ðAà	ˆ%�
˜EŸL™L¨#Ð-Ñ
.Ñ/óAðN Ø
ØØØñØ�l‰lðàóôBcÐ(õ cr+   