
    ȅi$                    t   S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	  S SK
r
S SKJr  S SKJr  S SKJr  S S	KJr  \	(       a  S S
KJr  S SKJr   " S S\5      r " S S\5      r\
R4                  R6                  r\
R4                  R:                  r\
R4                  R>                  r SS jr!SS jr" " S S\5      r#g)    )annotations)deepcopy)combinations)Any
NamedTupleTYPE_CHECKINGN)_normalize_function_or_error)_pytree)TorchDispatchMode)tree_map)Iterable)
OpOverloadc                  *    \ rS rSr% S\S'   S\S'   Srg)Mutation   strop_namearg_name N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       ]/home/james-whalen/.local/lib/python3.13/site-packages/torch/_subclasses/schema_check_mode.pyr   r      s    LMr   r   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)Aliasing   r   r   r   output_numberr   Nr   r   r   r   r    r       s    LMr   r    c                    [        U [        R                  5      (       a  g [        U 5      S:X  a  g[	        U 5       H$  n[        U[        R                  5      (       a  M$    g   g! [
         a     gf = f)NFr   T)
isinstancetorchTensorleniter	TypeError)iterablets     r   is_iterable_of_tensorsr,   .   se    (ELL))x=AhAa..  
   s"   A& +A& !A& #A& &
A32A3c                   / nU  H  n[        U[        R                  5      (       a/  UR                  UR	                  5       R                  5       5        MQ  [        U5      (       a?  UR                  U Vs/ s H   o3R	                  5       R                  5       PM"     sn5        M  UR                  U5        M     U$ s  snf N)r$   r%   r&   appenddetachcloner,   )argsinputsargr+   s       r   clone_inputsr5   >   s    Fc5<<((MM#**,,,./#C((MMs;s!88:++-s;<MM#  M	 <s   5'B<
c                  V    \ rS rSrSS jrSS jrSS jr  S	         S
S jjrSrg)SchemaCheckModeL   c                .    / U l         / U l        / U l        g r.   )opsmutatedaliasingselfs    r   __init__SchemaCheckMode.__init__M   s     !')(*r   c                    U R                   R                  5         U R                  R                  5         U R                  R                  5         g r.   )r:   clearr;   r<   r=   s    r   reset_cacheSchemaCheckMode.reset_cacheU   s0    r   c                .    [        U R                  SS06  g )Nsep,)printr:   r=   s    r   display_opsSchemaCheckMode.display_opsZ   s    txx!S!r   Nc                  ^^ SS jm        SU4S jjmSS jnSS jnSS jnSS jnU R                   R                  UR                  R                  5        [	        XUSS9R
                  n	[        [        U	R                  5       [        U	R                  5       5      5      5      n
U
 Vs0 s H  o[        XzR                  U5      5      _M     nnU	 VVs0 s H?  nU[        R                  " U	R                  U5      5       Vs/ s H
  o" U5      PM     sn_MA     nnnU" U0 UD6nU	 Vs0 s H  o[        XyR                  U5      5      _M     nn[        U[         5      (       a  UOU4n[        UU5      n[#        UR                  5      nUR%                  U	5        ['        [)        UR                  R*                  5      5       GH  nUR                  R*                  U   nU" UR                  5      nUR                  U5      c  MC  UR                  U5      nUR                  U5      nUR                  U5      n['        [)        U5      5       GH  nS	nU" UU   U5      (       a  UR                  R                  U;  a  UR-                  [/        [0        R2                  U5      [/        [0        R4                  U5      5      (       d  [7        S
U S35      eU R8                  R                  [;        UR                  R                  USU 35      5        UUU   L d  M  [        U[<        R>                  5      (       d  M  URA                  [/        [0        R4                  U5      5      (       a  GM   U[<        R                   RB                  RD                  RF                  [<        R                   RB                  RH                  RF                  4;  d  GM  [7        S[K        U5       SU 35      e   Uc  GM/  [M        U4S j[        [        R                  " U5      [        R                  " U5      U5       5       5      (       d  GM  URA                  [/        [0        R4                  U5      5      (       d  [7        S
U S35      eU RN                  R                  [Q        UR                  R                  U5      5        GM     [S        ['        [)        UR                  RT                  5      5      S5       Hu  u  nnU" UU   UU   5      (       d  M  UR-                  [/        [0        R2                  U5      [/        [0        R2                  U5      5      (       a  Me  [7        SU SU S35      e   U$ s  snf s  snf s  snnf s  snf )Nc                z    U R                   (       a  [        R                  " X5      $ [        R                  " XSS9$ )NT)	equal_nan)is_quantizedr%   equalallclose)lhsrhss     r   bitwise_equal9SchemaCheckMode.__torch_dispatch__.<locals>.bitwise_equald   s-     {{3,,~~c$??r   c                  > [        U 5      [        R                  L =(       a    [        U5      [        R                  L nU(       a  U R                  [        R                  :w  a  UR                  [        R                  :w  a  US L=(       ay    U R                  5       UR                  5       :H  =(       aL    T" X5      =(       a=    US   UR                  5       :H  =(       a     US   UR                  5       R                  :H  (       + $ g)Nr      F)	typer%   r&   layout
sparse_csrsizestride_typed_storage_cdata)beforeaftermdare_tensorsrS   s       r   has_mutated7SchemaCheckMode.__torch_dispatch__.<locals>.has_mutatedl   s     v,%,,6V4;%,,;VKMMU%5%55LLE$4$44~ KKMUZZ\1 ?%f4?1/? 1!5!5!7!>!>>	+  r   c                     [         R                  R                  X5      $ ! [         a+  n[	        U5      R                  S5      (       a   S nAgUeS nAff = f)NzCannot inspect value of type F)r%   _C	_overlaps	Exceptionr   
startswith)rQ   rR   	exceptions      r   has_aliased7SchemaCheckMode.__torch_dispatch__.<locals>.has_aliased}   sJ    $xx))#33 $y>,,-LMM #O	$s   ! 
AAAAc                    U S:w  a  U $ S$ )Nr>   inputr   )names    r   standardize_name<SchemaCheckMode.__torch_dispatch__.<locals>.standardize_name   s    6>46w6r   c                    [        U [        R                  5      (       a)  [        U 5      [        R                  La   U R                  $ U $ ! [
         a    U s $ f = fr.   )r$   r%   r&   rW   elemAttributeError)es    r   unwrap2SchemaCheckMode.__torch_dispatch__.<locals>.unwrap   sM    !U\\**tAwell/J66M H & Hs   A AAc                   [        U [        R                  5      (       a  [        U 5      [        R                  La@   U R                  n[        UR                  5       5      UR                  5       R                  4$ U R                  [        R                  :w  a3  [        U R                  5       5      U R                  5       R                  4$ g ! [         a     g f = fr.   )r$   r%   r&   rW   rr   r   r[   r\   r]   rs   rX   rY   )rt   currents     r   parse_metadata:SchemaCheckMode.__torch_dispatch__.<locals>.parse_metadata   s    !U\\**7%,,.$"#&&$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  <   >#    U  H  u  pnT" XU5      v   M     g 7fr.   r   ).0abcrb   s       r   	<genexpr>5SchemaCheckMode.__torch_dispatch__.<locals>.<genexpr>   s*      *$a  a(($s   z* is not defined as mutable but was mutated   zOutputs z and z alias unexpectedly)rQ   torch.TensorrR   r   returnbool)r^   r   r_   r   r`   "tuple[tuple[int, ...], int] | Noner   r   )rQ   r   rR   r   r   r   )rn   r   r   r   )rt   r   r   r   )rt   r   r   r   )+r:   r/   _schemarn   r	   kwargsdictzipkeysr5   valuesr   getpytreetree_leavesr$   tuple
SchemaInfoadd_argument_valuesranger'   	argumentsmay_contain_aliasSchemaArgumentSchemaArgTypeoutputrm   RuntimeErrorr<   r    r%   r&   
is_mutableatenliftdefault
lift_freshr   anyr;   r   r   returns)r>   functypesr2   r   rj   ro   ru   ry   pre_argumentsc_p_argsrn   cloned_argumentsr   cloned_metadataoutr   	tuple_outschema_infoir4   r^   r`   r_   j
unsafe_opsrS   rb   s                             @@r   __torch_dispatch__"SchemaCheckMode.__torch_dispatch__]   s   	@		 #	)K		"	$	7		" 	))* 5T

& 	 M..0,}?S?S?U2VWXCK
CK4(6<<#5668 	 
 &	
 & +1+=+=m>O>OPT>U+V+Vaq!+V  &	 	 
 D#F#HU
HU(6#4#4T#:;; 	 
 &c511Cv	VY/	 .''6 s4<<1123A,,((+C#CHH-D}}T".)--d3$((.!d+s9~.A!MJ#IaL%88 LL--Z?*<<*=+?+?C*=+>+>B    #/"+D61a b#  !MM00 ():):DGA3- P 	!,E5<<1P1P*55*=+>+>B   "!IINN//77!IINN55==+  #/%!!$QdV!7# 5 /> >c *#&**62F4F4Fu4Mr$* ' ' '11&}':':A>  +'v-WX  ++HT\\5F5F,MNg 4l !s4<<+?+?'@!A1EDAq9Q<166"44"=#7#7;"=#7#7;  '!E!<O'PQQ F 
g


s$   .$U/.U9U4U9.$U?4U9)r<   r;   r:   )r   None)r   N)
r   r   r   ztuple[type[Any], ...]r2   ztuple[Any, ...]r   zdict[str, Any] | Noner   r   )	r   r   r   r   r?   rC   rI   r   r   r   r   r   r7   r7   L   sZ    +
" !#(,aa %a 	a
 &a 
a ar   r7   )r*   Iterable[Any]r   r   )r2   r   r   z	list[Any])$
__future__r   copyr   	itertoolsr   typingr   r   r   r%   torch.fx.operator_schemasr	   torch.utilsr
   r   torch.utils._python_dispatchr   torch.utils._pytreer   collections.abcr   
torch._opsr   r   r    re   _SchemaArgumentr   _SchemaArgTyper   _SchemaInfor   r,   r5   r7   r   r   r   <module>r      s    "  " 1 1  B ) : ( (%z 
z  ))''XX!!
 r' rr   