
    Vh!                     2   d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z d dlmZ d dlmZ  ed	d
dg      Z edg d      Zej$                  j&                  Zej$                  j*                  Zej$                  j.                  Zd Zd Z G d de      Zy)    )
namedtuple)deepcopy)combinationsN)normalize_function)_pytree)TorchDispatchMode)tree_mapMutationop_namearg_nameAliasing)r   r   output_numberc                     t        | t        j                        ry	 t        |       dk(  ryt	        |       D ]  }t        |t        j                        r y 	 y# t
        $ r Y yw xY w)NFr   T)
isinstancetorchTensorleniter	TypeError)iterablets     S/home/dcms/DCMS/lib/python3.12/site-packages/torch/_subclasses/schema_check_mode.pyis_iterable_of_tensorsr   !   sd    (ELL)x=Ah 	Aa.	
   s"   A (A A A 	A&%A&c                 b   g }| D ]  }t        |t        j                        r.|j                  |j	                         j                                Kt        |      r<|j                  |D cg c]   }|j	                         j                         " c}       |j                  |        |S c c}w N)r   r   r   appenddetachcloner   )argsinputsargr   s       r   clone_inputsr"   0   s    F c5<<(MM#**,,,./#C(MMs;!188:++-;<MM# M	 <s   *%B,
c                   (    e Zd ZddZd Zd ZddZy)SchemaCheckModeNc                 .    g | _         g | _        g | _        y r   )opsmutatedaliasingselfs    r   __init__zSchemaCheckMode.__init__?   s         c                     | j                   j                          | j                  j                          | j                  j                          y r   )r&   clearr'   r(   r)   s    r   reset_cachezSchemaCheckMode.reset_cacheG   s0    r,   c                 .    t        | j                  ddi y )Nsep,)printr&   r)   s    r   display_opszSchemaCheckMode.display_opsL   s    txx!S!r,   c                 F
   d fdd }d }d }d }| j                   j                  |j                  j                         t	        |||d      j
                  }	t        t        |	j                         t        |	j                                           }
|
D ci c]  }|t        ||
j                  |              }}|	D ci c];  }|t        j                  |	j                  |            D cg c]
  } ||       c}= }}} ||i |}|	D ci c]  }|t        ||	j                  |              }}t        |t               r|n|f}t        ||      }t#        |j                        }|j%                  |	       t'        t)        |j                  j*                              D ]  }|j                  j*                  |   } ||j                        }|j                  |      A|j                  |      }|j                  |      }|j                  |      }t'        t)        |            D ]}  }d	} |||   |      r|j                  j                  |vr|j-                  t/        t0        j2                  |      t/        t0        j4                  |            st7        d
| d      | j8                  j                  t;        |j                  j                  |d|              |||   u st        |t<        j>                        s|jA                  t/        t0        j4                  |            r|t<        j                   jB                  jD                  jF                  t<        j                   jB                  jH                  jF                  fvsft7        dtK        |       d|        tM        fdt        t        j                  |      t        j                  |      |      D              sP|jA                  t/        t0        j4                  |            st7        d
| d      | jN                  j                  tQ        |j                  j                  |              tS        t'        t)        |j                  jT                              d      D ]i  \  }} |||   ||         s|j-                  t/        t0        j2                  |      t/        t0        j2                  |            rYt7        d| d| d       |S c c}w c c}w c c}}w c c}w )Nc                 v    | j                   rt        j                  | |      S t        j                  | |d      S )NT)	equal_nan)is_quantizedr   equalallclose)lhsrhss     r   bitwise_equalz9SchemaCheckMode.__torch_dispatch__.<locals>.bitwise_equalP   s1     {{3,,~~c3$??r,   c                    t        |       t        j                  k(  xr t        |      t        j                  k(  }|r| j                  t        j                  k7  r|j                  t        j                  k7  rg| j                         |j                         k(  xrC  | |      xr8 |d   |j                         k(  xr  |d   |j                         j                  k(   S y)Nr      F)	typer   r   layout
sparse_csrsizestride_typed_storage_cdata)beforeaftermdare_tensorsr=   s       r   has_mutatedz7SchemaCheckMode.__torch_dispatch__.<locals>.has_mutatedX   s    v,%,,6V4;%,,;VKMMU%5%55LLE$4$44 KKMUZZ\1 ?%fe4?1/? 1!5!5!7!>!>>	  r,   c                     	 t         j                  j                  | |      S # t        $ r&}t	        |      j                  d      rY d }~y|d }~ww xY w)NzCannot inspect value of type F)r   _C	_overlaps	Exceptionstr
startswith)r;   r<   	exceptions      r   has_aliasedz7SchemaCheckMode.__torch_dispatch__.<locals>.has_aliasedg   sI    $xx))#s33 $y>,,-LM #O	$s   " 	AA
AAc                     | dk7  r| S dS )Nr*   input )names    r   standardize_namez<SchemaCheckMode.__torch_dispatch__.<locals>.standardize_namep   s    6>46w6r,   c                     t        | t        j                        r)t        |       t        j                  k(  s	 | j                  S | S # t
        $ r | cY S w xY wr   )r   r   r   r@   elemAttributeError)es    r   unwrapz2SchemaCheckMode.__torch_dispatch__.<locals>.unwraps   sJ    !U\\*47ell3J66M H & Hs   A AAc                    t        | t        j                        rt        |       t        j                  k(  s@	 | j                  }t        |j                               |j                         j                  fS | j                  t        j                  k7  r3t        | j                               | j                         j                  fS y # t        $ r Y y w xY wr   )r   r   r   r@   rZ   r   rD   rE   rF   r[   rA   rB   )r\   currents     r   parse_metadataz:SchemaCheckMode.__torch_dispatch__.<locals>.parse_metadata{   s    !U\\*Aw%,,.$"#&&$W^^%56#224;;   XX!1!11$QXXZ0!2B2B2D2K2KLL * $#$s   >C 	CCT)normalize_to_only_use_kwargs)zaten::_unsafe_viewzaten::unsafe_splitz	Argument z0 is not defined to alias output but was aliasingoutput_zoDispatcher operators below autograd are not allowed to directly return inputs.
However, we found that `outputs[z] is c              3   :   K   | ]  \  }}} |||        y wr   rV   ).0abcrK   s       r   	<genexpr>z5SchemaCheckMode.__torch_dispatch__.<locals>.<genexpr>   s(      1a  1a(s   z* is not defined as mutable but was mutated   zOutputs z and z alias unexpectedly)+r&   r   _schemarW   r   kwargsdictzipkeysr"   valuesr	   getpytreetree_leavesr   tuple
SchemaInfoadd_argument_valuesranger   	argumentsmay_contain_aliasSchemaArgumentSchemaArgTypeoutputrU   RuntimeErrorr(   r   r   r   
is_mutableatenliftdefault
lift_freshrP   anyr'   r
   r   returns)r*   functypesr   rk   rS   rX   r]   r`   pre_argumentsc_p_argsrW   cloned_argumentsre   cloned_metadataoutrw   	tuple_outschema_infoir!   rG   rI   rH   j
unsafe_opsr=   rK   s                             @@r   __torch_dispatch__z"SchemaCheckMode.__torch_dispatch__O   s   	@		$	7		  	))* +$T

& 	 M..0,}?S?S?U2VWXCK
;?D(68<<#566
 
 &	
  +1+=+=m>O>OPT>U+V&'q! 
 
 D#F#HU
@DD(6=#4#4T#:;;
	 
 &c51Cv	VY/	 .''6 s4<<1123 3	OA,,((+C#CHH-D}}T".)--d3$((.!d+s9~. A!MJ#IaL%8 LL--Z?*<<*=+?+?C*=+>+>B  #/"+D61a b#  !MM00 ():):DGA3- P 	!,E5<<1P*55*=+>+>B "!IINN//77!IINN55==+  #/%!!$QdV!7# 5>  #&**62F4F4Fu4Mr$  '11&}':':A> +'v-WX  ++HT\\5F5F,MNg3	Ol !s4<<+?+?'@!A1E 	RDAq9Q<16"44"=#7#7;"=#7#7; '!E!<O'PQQ	R 
g


s$   #T,T3TT#TT)returnN)rV   N)__name__
__module____qualname__r+   r/   r4   r   rV   r,   r   r$   r$   >   s    
"Wr,   r$   )collectionsr   copyr   	itertoolsr   r   torch.fx.operator_schemasr   torch.utilsr   rq   torch.utils._python_dispatchr   torch.utils._pytreer	   r
   r   rM   _SchemaArgumentry   _SchemaArgTyperz   _SchemaInfort   r   r"   r$   rV   r,   r   <module>r      s    #  "  8 ) : ( j9j"9:j"JK ))''XX!!
h' hr,   