
    9j%                    f   d dl mZ d dlmZ d dlmZ d dlmZmZ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	rd d
lmZ d dlmZ  G d de      Z G d de      Ze
j4                  j6                  Ze
j4                  j:                  Ze
j4                  j>                  Z ddZ!ddZ" G d de      Z#y)    )annotations)deepcopy)combinations)Any
NamedTupleTYPE_CHECKINGN)_normalize_function_or_error)_pytree)TorchDispatchMode)tree_map)Iterable)
OpOverloadc                  "    e Zd ZU ded<   ded<   y)Mutationstrop_namearg_nameN__name__
__module____qualname____annotations__     c/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_subclasses/schema_check_mode.pyr   r      s    LMr   r   c                  ,    e Zd ZU ded<   ded<   ded<   y)Aliasingr   r   r   output_numberNr   r   r   r   r   r      s    LMr   r   c                    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     r   is_iterable_of_tensorsr(   0   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_inputsr1   @   s    F c5<<(MM#**,,,./#C(MMs;!188:++-;<MM# M	 <s   *%B,
c                  D    e Zd ZddZddZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)	SchemaCheckModec                .    g | _         g | _        g | _        y r*   )opsmutatedaliasingselfs    r   __init__zSchemaCheckMode.__init__O   s     !')(*r   c                    | j                   j                          | j                  j                          | j                  j                          y r*   )r5   clearr6   r7   r8   s    r   reset_cachezSchemaCheckMode.reset_cacheW   s0    r   c                .    t        | j                  ddi y )Nsep,)printr5   r8   s    r   display_opszSchemaCheckMode.display_ops\   s    txx!S!r   Nc                j
   dd	 	 	 	 	 	 	 	 dfddd}d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T|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_equalf   s1     {{3,,~~c3$??r   c                   t        |       t        j                  u xr t        |      t        j                  u }|r| j                  t        j                  k7  r|j                  t        j                  k7  rm|d ux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_tensorsrK   s       r   has_mutatedz7SchemaCheckMode.__torch_dispatch__.<locals>.has_mutatedn   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	Exceptionr   
startswith)rI   rJ   	exceptions      r   has_aliasedz7SchemaCheckMode.__torch_dispatch__.<locals>.has_aliased   sI    $xx))#s33 $y>,,-LM #O	$s   " 	AA
AAc                    | dk7  r| S dS )Nr9   inputr   )names    r   standardize_namez<SchemaCheckMode.__torch_dispatch__.<locals>.standardize_name   s    6>46w6r   c                    t        | t        j                        r(t        |       t        j                  ur	 | j                  S | S # t
        $ r | cY S w xY wr*   )r    r!   r"   rN   elemAttributeError)es    r   unwrapz2SchemaCheckMode.__torch_dispatch__.<locals>.unwrap   sJ    !U\\*tAwell/J66M H & Hs   A AAc                   t        | t        j                        rt        |       t        j                  ur@	 | 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"   rN   rf   r   rR   rS   rT   rg   rO   rP   )rh   currents     r   parse_metadataz: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  :   K   | ]  \  }}} |||        y wr*   r   ).0abcrY   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)rI   torch.TensorrJ   rv   returnbool)rU   r   rV   r   rW   "tuple[tuple[int, ...], int] | Nonerw   rx   )rI   r   rJ   r   rw   rx   )rc   r   rw   r   )rh   r   rw   r   )rh   r   rw   ry   )+r5   r+   _schemarc   r	   kwargsdictzipkeysr1   valuesr   getpytreetree_leavesr    tuple
SchemaInfoadd_argument_valuesranger#   	argumentsmay_contain_aliasSchemaArgumentSchemaArgTypeoutputrb   RuntimeErrorr7   r   r!   r"   
is_mutableatenliftdefault
lift_freshr   anyr6   r   r   returns)r9   functypesr.   r{   r`   rd   ri   rl   pre_argumentsc_p_argsrc   cloned_argumentsrq   cloned_metadataoutr   	tuple_outschema_infoir0   rU   rW   rV   j
unsafe_opsrK   rY   s                             @@r   __torch_dispatch__z"SchemaCheckMode.__torch_dispatch___   s   	@		 #	)K		"	$	7		" 	))* 5$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 4	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# 7@ >c *#&**62F4F4Fu4Mr$* ' '11&}':':A> +'v-WX  ++HT\\5F5F,MNi4	On !s4<<+?+?'@!A1E 	RDAq9Q<16"44"=#7#7;"=#7#7; '!E!<O'PQQ	R 
m


s$   +#T ,T*T%T*$#T0%T*)rw   None)r   N)
r   r   r   ztuple[type[Any], ...]r.   ztuple[Any, ...]r{   zdict[str, Any] | Nonerw   r   )r   r   r   r:   r=   rB   r   r   r   r   r3   r3   N   sT    +
" !#(,ee %e 	e
 &e 
er   r3   )r&   Iterable[Any]rw   rx   )r.   r   rw   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   r[   _SchemaArgumentr   _SchemaArgTyper   _SchemaInfor   r(   r1   r3   r   r   r   <module>r      s    "  " 1 1  B ) : ( (%z 
z  ))''XX!!
 v' vr   