
    ק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dS )    N)CallableUnion)
OpOverload)FakeTensorModetree_flatten_onlyUnsupportedFakeTensorException)TorchDispatchModec                     d t          t          j        |          D             t          fdt          t          j        |           D                       S )Nc                 ~    h | ]:}t           j                            |          !|                                j        ;S  torch_C_has_storage_typed_storage_cdata.0inps     X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_subclasses/fake_utils.py	<setcomp>z'outputs_alias_inputs.<locals>.<setcomp>   sM       8  %%#      c              3      K   | ]>}t           j                            |          o|                                j        v V  ?d S Nr   )r   outinput_storagess     r   	<genexpr>z'outputs_alias_inputs.<locals>.<genexpr>   s`         	c""Ts'9'9';';'Bn'T     r   r   r   Tensorany)outputsinputsr   s     @r   outputs_alias_inputsr#      ss     $U\6::  N
     $U\7;;     r   c                     d t          t          j        |          D             t          fdt          t          j        |           D                       S )Nc                 ,    h | ]}t          |          S r   idr   s     r   r   z%outputs_are_inputs.<locals>.<setcomp>"   s    LLLSCLLLr   c              3   :   K   | ]}t          |          v V  d S r   r&   )r   r   	input_idss     r   r   z%outputs_are_inputs.<locals>.<genexpr>#   s.      XXr#ww)#XXXXXXr   r   )r!   r"   r)   s     @r   outputs_are_inputsr*   !   sS    LL$5elF$K$KLLLIXXXX/@w/W/WXXXXXXr   c                    t                      }t          t          j        |           D ]W}t          j                            |          s"|                                j        }||v r dS |                    |           XdS )NTF)	setr   r   r   r   r   r   r   add)r!   storagesr   stors       r   output_alias_each_otherr0   &   s    uuH w77  x$$S)) 	!!##*844T5r   c                 N   | t           j        j        u s| t           j        j        u r|dv rdt	          |          v rdS | t           j        j        u s| t           j        j        u r|dv rdt	          |          v rdS | t           j        j        u r|dv rdt	          |          v rdS dS )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_errorrB   2   s     D<DDDt4<<<6MMa  t D@HHHt8@@@6MMa  t8@@@6MMa  t5r   c                   Z     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                |    t                                                       ||nd | _        || _        || _        d S )Nc                     dS )NFr   )fns    r   <lambda>z+CrossRefFakeMode.__init__.<locals>.<lambda>X   s    U r   )super__init__rG   rE   rF   )selfrG   rE   rF   	__class__s       r   rM   zCrossRefFakeMode.__init__O   sK     	(4LL:J:J 	 +,r   r   c                 L   |pi }d }|t           j        j        t           j        j        t           j        j        fvr|                     |          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            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n# t0          $ r Y nw xY wd| d}
 ||i |}|t!          j        |          }t!          j        |          }t5          |          t5          |          k    s,J |
 dt5          |           d	t5          |                       | j        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!          j        |          t!          j        |                              D ]T\  }\  }}tC          |t          j                  }|tC          |t          j                  k    sJ |
 d            |r|j"        |j"        k    sJ |
 d            t          j#        $                    |          r;|%                                }|%                                }||k    sJ |
 d            	 t          j&        j'        (                    ||| j)        d           # tT          $ rP}tW          |||          rY d }~t5          |          dk    r|
 d| n	|
 d| d| }tY          |          |d }~ww xY wV|S )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)rE   allow_rhs_unbacked   z mismatched tensor metadata: z' mismatched tensor metadata for output[z]: )-r7   
lift_freshr9   lift_fresh_copyset_source_Storage_storage_offsetrG   r   Tagdynamic_output_shapetagsinplace_viewdata_dependent_output%torch.fx.experimental.symbolic_shapesrQ   r   pytreetree_map_onlyr   	functoolspartialfrom_tensorwarningscatch_warningsr   tree_leaveslenrF   r#   r*   r0   	enumeratezip
isinstancerequires_gradr   r   storage_offset_primsutilscompare_tensor_metarE   	ExceptionrB   RuntimeError)rN   r?   typesargskwargsfake_rrQ   	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_otherr@   r_outfake_outr_is_tenr_offsetf_offsetrA   error_messages                               r   __torch_dispatch__z#CrossRefFakeMode.__torch_dispatch__]   s   2
 '$,	7  %%d++ 	.di??	&di77	/ty@@ GFFFFF#hhjj999 AY-3-A!))*?tTTTv. .*I{
 "022 A A!%y!@K!@!@A A A A A A A A A A A A A A AA A A A A A A A A A A A A A A 2   D    	 D$!&!!'**F'//Fv;;## #   XX#f++XX3v;;XX   " 1!dF^DD
1&9k:RSS
*,,,cczccWacc -,, !31tVn E E 26I{;S T T!]222gg]ggXegg 322 -DA,F,F),CF,K,K)04MMMM R R0R R6OR R NMM
 +4F&q))6+=f+E+EFF+ + $A $A&&eX &eU\:::el$ $   CCC    A .(2HHHH" 7 7 7 IHH x,,U33 B#(#7#7#9#9#+#:#:#<#<$000%AAA 100A*>>!$*.*</3	 ?     % A A A(sA66 %$HHHH  #6{{a//  'HHQHHH$+!_!_TW!_!_\]!_!_ &
 +=99q@A+A< sy   !E 9AD7	D D7 D$	$D7'D$	(D7+E 7D;;E >D;?E 
EE-O
PP&4PPr   )r   N)
__name__
__module____qualname__r   r   r   boolrM   r   __classcell__)rO   s   @r   rD   rD   N   s         CG- - - -Hj\4%78$>?- - - - - -h h h h h h h hr   rD   )rb   re   typingr   r   r   torch.utils._pytreero   _pytreer`   
torch._opsr   torch._subclasses.fake_tensorr   r   r   torch.utils._python_dispatchr	   _opsopsr7   r#   r*   r0   rB   rD   r   r   r   <module>r      s<        " " " " " " " "  $ $ $ $ $ $ $ $ $ ! ! ! ! ! !         
 ; : : : : : z~	 	 	Y Y Y
	 	 	  8w w w w w( w w w w wr   