
    3jQ                        S SK r S SKrS SKJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKrS SKrS SKrS SKrS SKJs  Jr  S SKJr  / SQr\R.                  R0                  r\R.                  R4                  r\R.                  R8                  rSr\" S	5      r\
" S
5      r \
" S5      r!S\\RD                  RF                     4S jr$\S\S   4S j5       r%S\RL                  S\RL                  S\/ \'4   SS4S jr(S\)S\)S\/ \'4   SS4S jr* " S S5      r+S\)S\)4S jr,S\RD                  RF                  \\ 4   S\S\\\ 4   \-  4S jr-\S\S   4S j5       r.g)    N)Callable	GeneratorIterator)contextmanager)TypeVar)	ParamSpec)DispatchKey)enable_python_dispatcherno_python_dispatcherenable_pre_dispatchF_P_T_Rreturnc               #      #    [         R                   HG  n [        [         R                  U 5      nU H$  n[        X5      nU H  n[        X45      v   M     M&     MI     g7f)a  
Warning: the set of overloads this will report is very subtle.  It is precisely
the set of torch.ops functions that have actually been accessed from Python
(e.g., we actually called torch.ops.aten.blah at some point.  This is DIFFERENT
from the set of registered operators, which will in general be a larger set,
as this would include all operators which we ran C++ static initializers or
Python operator registration on.  This does not eagerly populate the list on
torch.ops.aten; this list is lazy!

In other words, this is good for traversing over everything that has an
OpOverload object allocated in Python.  We use it for cache invalidation, but
don't rely on this list being complete.

Note that even if we did report all C++ registered overloads, this isn't guaranteed
to be complete either, as a subsequent lazy load of a library which triggers more
registrations could add more things to the set.
N)torchopsgetattr)nspacketsop_namepacketoverloads        P/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_dispatch/python.pyall_py_loaded_overloadsr      sN     $ ii%))R(GW.F"f// #  s   AA)NNNc               #     #    [         R                  R                  [         R                  R                  R                  5      n [         R                  R                  5       nU (       a  [         R                  " 5          S v   U (       a  [         R                  " US9  g g ! U (       a  [         R                  " US9  f f = f7f)N)reapply_views)r   _C&_dispatch_tls_is_dispatch_key_includedr	   Functionalize$_functionalization_reapply_views_tls_disable_functionalization_enable_functionalization)f_tlsf_rvs     r   suspend_functionalizationr&   7   s     HH;;**E 8888:D((*@++$? 5++$? s   A<C?B  C B>>Cnvrvdescc           
      H   [        U5      (       d  [        S[        U5       35      eU R                  5       UR                  5       :w  a4  [        U" 5        SU R                  5        SUR                  5        35      eU R                  UR                  :w  a,  [        U" 5        SU R                   SUR                   35      e[
        R                  R                  XSS9u  p4U(       d8  [        U" 5        SU R                  5        SUR                  5        SU S	35      eg )
Ndesc must be callable, got z: sizes  != z: dtype F)	only_cudaz
: strides z (mismatch at index ))	callableAssertionErrortypesizedtyper   _prims_commoncheck_significant_stridesstride)r'   r(   r)   same_stridesidxs        r   check_tensor_metadata_matchesr9   F   s    D>>:4:,GHH	wwyBGGIxx	{$rwwykJKK	xx288xxzbhhZHII++EE
% F L vhjT"))+>RSVRWWXY
 	
     nrc                   ^^	 [        T5      (       d  [        S[        T5       35      e[        R                  " U 5      u  p4[        R                  " U5      u  pV[        U5      [        U5      :w  a"  [        [        U5       S[        U5       35      e[        [        [        U5      5      X55       H8  u  m	px[        U[        R                  5      (       d  M'  [        XxUU	4S j5        M:     g )Nr+   r,   c                     > T " 5        ST 3$ )Nz output  )r)   is   r   <lambda>(check_metadata_matches.<locals>.<lambda>d   s    6Lr:   )r/   r0   r1   pytreetree_flattenlenziprange
isinstancer   Tensorr9   )
r;   r<   r)   n_vals_n_specr_vals_r_specr'   r(   r@   s
     `      @r   check_metadata_matchesrN   X   s    D>>:4:,GHH))!,OF))!,OF 6{c&k!F}DV>??s6{+V<	2"ell++%b.LM =r:   c                   4    \ rS rSrS\SS4S jrS\4S jrSrg)Litg   sr   Nc                     Xl         g NrR   )selfrR   s     r   __init__Lit.__init__h   s    r:   c                     U R                   $ rT   rU   )rV   s    r   __repr__Lit.__repr__k   s    vvr:   rU   )__name__
__module____qualname____firstlineno__strrW   rZ   __static_attributes__r?   r:   r   rP   rP   g   s!    # $ # r:   rP   ac           	          [        U [        R                  5      (       aD  [        S[	        U R                  5       5       SU R                  5        SU R                   S35      $ U $ )Nztorch.empty_strided(, z, dtype=r.   )rH   r   rI   rP   tupler2   r6   r3   )rb   s    r   _fmtrf   o   sU    !U\\"""5?"32ahhj\!''RST
 	
 r:   op	final_keyc                    ^ ^^ SSK Jm  T [        R                  R                  R
                  R                  L a  T$ S[        R                  S[        R                  S[        4UUU 4S jjnU$ )Nr   )FakeTensorModeargskwargsr   c                    >^	^
^ T" 5       m	S[         S[         [        R                  R                  R                  -  4U	4S jjnS[         S[         [        R
                  -  4S jn[        R                  R                  R                  5          [        5          [        R                  " X U45      u  pE[        R                  " X4U45      u  m
mT	   T" U0 UD6nS S S 5        S S S 5        S S S 5        TR                  " T/U Q70 UD6nS[        4UU
U4S jjn[        WXx5        U$ ! , (       d  f       NR= f! , (       d  f       N[= f! , (       d  f       Nd= f)Ntr   c                   > [        U [        R                  5      (       a  [        R                  " U 5      (       a  [        R                  " U 5      nU R                  5       UR                  5       :w  a-  [        SU R                  5        SUR                  5        35      eU R                  5       UR                  5       :w  a-  [        SU R                  5        SUR                  5        35      eOU nTR                  U5      $ U $ )Nzsize mismatch: r,   zstride mismatch: )	rH   r   rI   _is_functional_tensor_from_functional_tensorr2   r0   r6   from_tensor)rn   r<   	fake_modes     r   fakeify_defunCmake_crossref_functionalize.<locals>.handler.<locals>.fakeify_defun   s    !U\\**..q1155a8A
 vvx1668+,qvvxjQVVXJ-WXXxxzQXXZ/,/
|4
|L  0
 A ,,Q//Hr:   c                 d    [        U [        R                  5      (       a  U R                  5       $ U $ rT   )rH   r   rI   detach)rn   s    r   maybe_detachBmake_crossref_functionalize.<locals>.handler.<locals>.maybe_detach   s$    !U\\**xxz!r:   c                     > SR                  [        R                  " S T 5       S TR                  5        5       5      5      n T SU  S3$ )Nrd   c              3   j   #    U  H)  n[        [        R                  " [        U5      5      v   M+     g 7frT   )reprrC   tree_maprf   ).0rb   s     r   	<genexpr>Mmake_crossref_functionalize.<locals>.handler.<locals>.desc.<locals>.<genexpr>   s#     I[T&//$233[s   13c              3   f   #    U  H'  u  pU S [         R                  " [        U5       3v   M)     g7f)=N)rC   r}   rf   )r~   kvs      r   r   r      s0      $9DA #QvtQ789$9s   /1(r.   )join	itertoolschainitems)fmt_argsrg   orig_f_argsorig_f_kwargss    r   r)   :make_crossref_functionalize.<locals>.handler.<locals>.desc   sP    yyI[I$1$7$7$9H T8*A&&r:   )r   r   _subclassesfake_tensor
FakeTensorrI   utils_python_dispatch_disable_current_modesr&   rC   r}   _op_dkr`   rN   )rk   rl   rt   rx   f_argsf_kwargsf_rr<   r)   rs   r   r   rj   rh   rg   s            @@@r   handler,make_crossref_functionalize.<locals>.handler   s   "$		R 	B):):)F)F)Q)Q$Q 	(	B 	2#4 	 KK((??A%'%}VnMF)/x0*&K &-H-  ( B IIi1$1&1
	'c 
	' 
	' 	sA,#  (' BAs<   E	8D8	D'D8#E	'
D51D88
E	E		
E)torch._subclasses.fake_tensorrj   r   r   aten
lift_freshdefaultr   rk   rl   r   )rg   rh   r   rj   s   `` @r   make_crossref_functionalizer   x   s[     = 
UYY^^&&...8rww 8")) 8 8 8t Nr:   c               #   t  #    [        5        H6  n U R                  [        R                  R                  R
                  5        M8      [        5          [        R                  R                  SS5         S v   S S S 5        S S S 5        [        5        H6  n U R                  [        R                  R                  R
                  5        M8     g ! , (       d  f       N[= f! , (       d  f       Nd= f! [        5        H6  n U R                  [        R                  R                  R
                  5        M8     f = f7f)Nz-torch._dispatch.python.CROSSREF_FUNCTIONALIZET)
r   _uncache_dispatchr   r   r	   r    r
   unittestmockpatch)rg   s    r   enable_crossref_functionalizer      s     %'
UXX11??@ (E$&MM OQUV W '
 *+B  !5!5!C!CD ,	 WV '&
 *+B  !5!5!C!CD ,sP   AD8
C/ !C3C8C C/ AD8
C	C
C,(C/ /AD55D8)/r   unittest.mockr   collections.abcr   r   r   
contextlibr   typingr   typing_extensionsr   r   torch._C
torch._opstorch.utils._python_dispatchtorch.utils._pytreer   _pytreerC   r	   __all__r   _DisablePythonDispatcherr   _EnablePythonDispatcherr
   _EnablePreDispatchr   CROSSREF_FUNCTIONALIZEr   r   r   _ops
OpOverloadr   r&   rI   r`   r9   objectrN   rP   rf   r   r   r?   r:   r   <module>r      s     9 9 %  '    # $ $   Vxx88  88;; hh11  t_T]T]0%***?*?!@ 04 @9-=#> @ @

,,
.6r3w.?
	
$Nf N NxC7H NT N F v C

b"f%C2=Cb"f#CP Ey1A'B E Er:   