Ë
    P/æjÜ  ã                   óØ   — d dl Z d dlZd dl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 d dlmZ ej$                  j&                  j(                  Zd„ Zd„ Zd„ Zd	„ Z G d
„ de«      Zy)é    N)ÚCallableÚUnion)Ú
OpOverload)ÚFakeTensorModeÚ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     €ú_/root/repos/pocs/video-evals/.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         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_errorr:   2   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(   c                   óN   ‡ — e Zd Z	 ddddœdeeegef   df   fˆ fd„Zdd„Zˆ xZ	S )	ÚCrossRefFakeModeNT)Úcheck_stridesÚcheck_aliasingÚignore_op_fnc                óV   •— t         ‰| �  «        |�|nd„ | _        || _        || _        y )Nc                  ó   — y)NF© )Úfns    r   ú<lambda>z+CrossRefFakeMode.__init__.<locals>.<lambda>X   s   � r(   )ÚsuperÚ__init__r?   r=   r>   )Úselfr?   r=   r>   Ú	__class__s       €r   rF   zCrossRefFakeMode.__init__O   s5   ø€ ô 	‰ÑÔà(Ð4‰LÑ:Jð 	Ôð +ˆÔØ,ˆÕr(   c                 óF  — |xs i }d }|t         j                  j                  t         j                  j                  t         j                  j
                  fv�r| j                  |«      �s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'        j(                  |j*                  d¬«      ||f«      \  }}	t-        j.                  «       5   ||i |	¤Ž}d d d «       d d d «       d|› d�}
 ||i |¤Ž}|��+t!        j2                  |«      }t!        j2                  |«      }t5        |«      t5        |«      k(  s!J |
› dt5        |«      › d	t5        |«      › �«       ‚| j6                  rŠt9        |||f«      }t9        |	f«      }||k(  sJ |
› d
|› d	|› �«       ‚t;        |||f«      }t;        |||	f«      }||k(  sJ |
› d|› d	|› �«       ‚t=        |«      }t=        |«      }||k(  sJ |
› d|› d	|› �«       ‚t?        tA        t!        j2                  |«      t!        j2                  |«      «      «      D ]õ  \  }\  }}tC        |t        j$                  «      }|tC        |t        j$                  «      k(  s
J |
› d�«       ‚|sŒM|jD                  |jD                  k(  s
J |
› d�«       ‚t        jF                  jI                  |«      r/|jK                  «       }|jK                  «       }||k(  s
J |
› d�«       ‚	 t        jL                  jN                  jQ                  ||| jR                  d¬«       Œ÷ |S # 1 sw Y   �ŒPxY w# 1 sw Y   �ŒUxY w# t0        $ r Y �Œdw xY w# tT        $ rC}tW        |||«      rY d }~�Œ@t5        |«      dk(  r|
› d|› �n	|
› d|› d|› �}tY        |«      |‚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 z != z( mismatch in outputs_alias_inputs check z& mismatch in outputs_are_inputs check z, mismatch in outputs_alias_each_other check z$ mismatched number of tensor outputsz· 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 offset)r=   Úallow_rhs_unbackedé   z mismatched tensor metadata: z' mismatched tensor metadata for output[z]: )-r/   Ú
lift_freshr1   Úlift_fresh_copyÚset_Úsource_Storage_storage_offsetr?   r   ÚTagÚdynamic_output_shapeÚtagsÚinplace_viewÚdata_dependent_outputÚ%torch.fx.experimental.symbolic_shapesrJ   r   ÚpytreeÚtree_map_onlyr   Ú	functoolsÚpartialÚfrom_tensorÚwarningsÚcatch_warningsr   Útree_leavesÚlenr>   r   r!   r'   Ú	enumerateÚzipÚ
isinstanceÚrequires_gradr   r   Ústorage_offsetÚ_primsÚutilsÚcompare_tensor_metar=   Ú	Exceptionr:   ÚRuntimeError)rG   r7   ÚtypesÚargsÚkwargsÚfake_rrJ   Ú	fake_modeÚ	fake_argsÚfake_kwargsÚcontextÚrÚr_flatÚf_flatÚ
r_aliasingÚ
f_aliasingÚr_identity_eqÚf_identity_eqÚr_output_alias_each_otherÚf_output_alias_each_otherr8   Úr_outÚfake_outÚr_is_tenÚr_offsetÚf_offsetr9   Úerror_messages                               r   Ú__torch_dispatch__z#CrossRefFakeMode.__torch_dispatch__]   s”  € Ø’˜2ˆàˆð
 ä—‘×'Ñ'Ü×$Ñ$×,Ñ,Ü—	‘	×7Ñ7ðòð ×%Ñ% dÕ+Ü—	‘	×.Ñ.°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ð ð ×"Ò"Ü1°!°d¸F°^ÓD�
Ü1°&¸9ÀkÐ:RÓS�
à *Ò,ðdà�YÐFÀzÀlÐRVÐWaÐVbÐcódØ,ô !3°1°t¸V°nÓ E�Ü 2°6¸IÀ{Ð;SÓ T�à! ]Ò2ðhà�YÐDÀ]ÀOÐSWÐXeÐWfÐgóhØ2ô -DÀAÓ,FÐ)Ü,CÀFÓ,KÐ)Ø0Ð4MÒMð Ø�iÐKØ0Ð1°Ð6OÐ5PðRóÐMô
 +4Ü”F×&Ñ& qÓ)¬6×+=Ñ+=¸fÓ+EÓFó+ò $AÑ&�Ñ&�e˜Xô & e¬U¯\©\Ó:�Ø¤:ØœeŸl™ló$ò ð Dà�YÐBÐCóDð ò Ø ×.Ñ.°(×2HÑ2HÒHð Ø"˜)ð $6ð 7óÐHô —x‘x×,Ñ,¨UÔ3Ø#(×#7Ñ#7Ó#9˜Ø#+×#:Ñ#:Ó#<˜à$¨Ò0ðBà%˜YÐ&@ÐAóBØ0ðAÜŸ™×*Ñ*×>Ñ>Ø!Ø$Ø*.×*<Ñ*<Ø/3ð	 ?õ ð-$AðJ ˆ÷UAñ Aú÷Añ Aûô 2ò Úðûô~ %ò AÜ(¨¨s°AÔ6Ý$ô  # 6›{¨aÒ/ð  '˜iÐ'DÀQÀCÑHà$+ 9Ð,SÐTWÐSXÐX[Ð\]Ð[^Ð!_ð &ô
 +¨=Ó9¸qÐ@ûðAúsa   Ã$O Ã5AN7Å	N*ÅN7Å$O Í/7OÎ*N4	Î/N7Î7OÎ<O Ï	OÏOÏ	P ÏPÏ0+PÐP r   )rB   N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   ÚboolrF   rƒ   Ú__classcell__)rH   s   @r   r<   r<   N   s@   ø„ ð CGð-ð Øò-à˜H j \°4Ð%7Ñ8¸$Ð>Ñ?õ-÷hr(   r<   )r[   r^   Útypingr   r   r   Útorch.utils._pytreerh   Ú_pytreerY   Ú
torch._opsr   Útorch._subclasses.fake_tensorr   r   r   Útorch.utils._python_dispatchr	   Ú_opsÚopsr/   r   r!   r'   r:   r<   rB   r(   r   ú<module>r‘      sd   ðó Û ß "ã ß $Ð $Ý !÷ñ õ
 ;ð ‡z�z‡~�~×Ñ€ò	òYò
	òô8wÐ(õ wr(   