
    ȅi^              	          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
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\R0                  R2                  r\R0                  R6                  r\R0                  R:                  rSr\" S	5      r \
" S
5      r!\
" S5      r"S\\RF                  RH                     4S jr%\S\S   4S j5       r&S\RN                  S\RN                  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\RF                  RH                  \ \!4   S\S\\\ \!4   \4   4S jr.\S\S   4S j5       r/g)    N)Callable	GeneratorIterator)contextmanager)TypeVarUnion)	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/james-whalen/.local/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_matchesr:   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;   )r0   r1   r2   pytreetree_flattenlenziprange
isinstancer   Tensorr:   )
r<   r=   r*   n_vals_n_specr_vals_r_specr(   r)   rA   s
     `      @r   check_metadata_matchesrO   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rS   )selfrS   s     r   __init__Lit.__init__h   s    r;   c                     U R                   $ rU   rV   )rW   s    r   __repr__Lit.__repr__k   s    vvr;   rV   )__name__
__module____qualname____firstlineno__strrX   r[   __static_attributes__r@   r;   r   rQ   rQ   g   s!    # $ # r;   rQ   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/   )rI   r   rJ   rQ   tupler3   r7   r4   )rc   s    r   _fmtrg   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: )	rI   r   rJ   _is_functional_tensor_from_functional_tensorr3   r1   r7   from_tensor)ro   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 $ rU   )rI   r   rJ   detach)ro   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$ )Nre   c              3   j   #    U  H)  n[        [        R                  " [        U5      5      v   M+     g 7frU   )reprrD   tree_maprg   ).0rc   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)rD   r~   rg   )r   kvs      r   r   r      s0      $9DA #QvtQ789$9s   /1(r/   )join	itertoolschainitems)fmt_argsrh   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
FakeTensorrJ   utils_python_dispatch_disable_current_modesr'   rD   r~   _op_dkra   rO   )rl   rm   ru   ry   f_argsf_kwargsf_rr=   r*   rt   r   r   rk   ri   rh   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_tensorrk   r   r   aten
lift_freshdefaultr   rl   rm   r   )rh   ri   r   rk   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)rh   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)0r   unittest.mockr   collections.abcr   r   r   
contextlibr   typingr   r   typing_extensionsr	   r   torch._C
torch._opstorch.utils._python_dispatchtorch.utils._pytreer   _pytreerD   r
   __all__r   _DisablePythonDispatcherr   _EnablePythonDispatcherr   _EnablePreDispatchr   CROSSREF_FUNCTIONALIZEr   r   r   _ops
OpOverloadr   r'   rJ   ra   r:   objectrO   rQ   rg   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
8BF[()CP Ey1A'B E Er;   