
    Ǆg                         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     d/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/_subclasses/fake_utils.py	<genexpr>z'outputs_alias_inputs.<locals>.<genexpr>   sD       	c"Ts'9'9';'B'Bn'TTs   AA
)r   r   Tensorr   r   r   r   any)outputsinputsinpr   s      @r   outputs_alias_inputsr      su     %U\\6:88  % 	##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)#Xs   )r   r   r   r   r   )r   r   r   r    s      @r   outputs_are_inputsr!   !   sE    $5ellF$KLSCLI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    uH w7 xx$$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<<<6Ma  D@@HHHt88@@@6Ma 88@@@6M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     	(4L: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rt        j                  j                  |j                  vrt        j                  j                  |j                  vrd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                  rt9        |||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+		..dii?		&&dii7		//tyy@ G#hj9 AY-3-A-A!)))*?*?tTv.*I{
 "002 A!%y!@K!@AA ,D6 2  	 $!&!''*F''/Fv;##  Y9#f+d3v;-XY  ""1!dF^D
1&9k:RS
*,dYFzlRVWaVbcd, !31tVn E 26I{;S T!]2hYD]OSWXeWfgh2 -DA,F),CF,K)04MM iK016O5PRM
 +4F&&q)6+=+=f+EF+ $A&&eX &eU\\::ell$  DYBCD   ..(2H2HH ") $6 7H xx,,U3#(#7#7#9#+#:#:#<$0B%Y&@AB0A**>>!$*.*<*</3	 ? -$AJ UA AA A 2 ~ % A(sA6$  #6{a/  'i'DQCH$+9,STWSXX[\][^!_ &
 +=9q@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- -Hj\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      "  $ $ ! 
 ; zz~~	Y
	8w( wr(   