
    %h                       U d dl Z d dlZd dlZd dl mZ d dlmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZ  ed           G d d	                      Z G d
 de          ZdZd                                Zg dZdgd eD             z   ZddhZ G d de          Z G d de          ZdefdZ eD ]>Z!eD ]9Z" e#ee!e"z             s( e             Z$ e%e$            e&de! e" de$           :?ej'        ej(        ej)        hZ*ej(        ej)        hZ+ej)        ej,        ej-        ej.        ej(        ej'        ej/        ej0        ej1        ej2        ej3        ej4        ej5        ej6        ej7        ej8        ej9        ej:        ej;        ej<        ej=        gZ>dede?fdZ@dede?fdZAdede?fdZBdede?fdZC G d  d!e          ZDi ZEe	eeeD         f         eFd"<    eeDjG        eDjH        eDjI        eDjJ        eDjK        g          eEd#<    eeDjL        eDjM        g          eEd$<    eeDjN        eDjO        g          eEd%<   eEd#         eEd$         z  eEd&<   eEd&         eEd%         z  eEd'<   eEd$         eEd%         z  eEd(<    G d) d*e          ZP G d+ d,e          ZQ G d- d.e          ZR ed           G d/ d0                      ZS G d1 d2e          ZT ed           G d3 d4                      ZU ed           G d5 d6                      ZV ed           G d7 d8                      ZW ed           G d9 d:                      ZX ed           G d; d<                      ZY ed           G d= d>                      ZZ ed           G d? d@                      Z[ G dA dBe          Z\ ed           G dC dDe[                      Z] ed           G dE dFe[                      Z^ ed           G dG dHe[                      Z_ ed           G dI dJe[                      Z` ed           G dK dL                      Za ed           G dM dN                      Zb ed           G dO dP                      Zc ed           G dQ dR                      Zd ed           G dS dT                      Zeg dUZf ed           G dV dW                      Zg ed           G dX dY                      ZhdZeSd[eUd\eXde?fd]Zi ed           G d^ d_                      ZjdZeSde?fd`ZkdZeSddYfdaZldbedeebdcf         fddZm ed           G de df                      ZndS )g    N)	dataclass)autoEnum)	CallableDictIteratorListOptionalSequenceSetTupleUnion)assert_neverNamespaceHelper
OrderedSetT)frozenc                   0    e Zd ZU eed<   eed<   defdZdS )Locationfilelinereturnc                 $    | j          d| j         S )N:)r   r   selfs    N/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torchgen/model.py__str__zLocation.__str__*   s    )))di)))    N)__name__
__module____qualname__str__annotations__intr    r   r   r   r   %   sC         
III
III* * * * * * *r   r   c                   6    e Zd Z e            Z e            ZdS )VariantN)r   r    r!   r   functionmethodr%   r   r   r'   r'   /   s$        tvvHTVVFFFr   r'   z
at::nativezVCPU CUDA HIP XLA MTIA MPS IPU XPU HPU VE Lazy Meta PrivateUse1 PrivateUse2 PrivateUse3) 	QuantizedSparseNestedTensorAutogradAutogradNestedTensorc                     g | ]}d |z   S )r.   r%   ).0	components     r   
<listcomp>r3   =   s*     , , ,(J, , ,r   	quantizedquantized_decomposedc                   	   e Zd ZdZeZ e            Z e            Z e            Z e            Z	 e            Z
 e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z  e            Z! e            Z" e            Z# e            Z$ e            Z% e            Z& e            Z' e            Z( e            Z) e            Z* e            Z+ e            Z, e            Z- e            Z. e            Z/ e            Z0 e            Z1 e            Z2 e            Z3 e            Z4 e            Z5 e            Z6 e            Z7 e            Z8 e            Z9 e            Z: e            Z; e            Z< e            Z= e            Z> e            Z? e            Z@ e            ZA e            ZB e            ZC e            ZD e            ZE e            ZF e            ZG e            ZH e            ZI e            ZJ e            ZK e            ZL e            ZM e            ZN e            ZO e            ZP e            ZQ e            ZR e            ZS e            ZT e            ZU e            ZV e            ZW e            ZX e            ZY e            ZZ e            Z[ e            Z\ e            Z] e            Z^ e            Z_ e            Z` e            Za e            Zb e            Zc e            Zd e            Ze e            Zf e            Zg e            Zh e            Zi e            Zj e            Zk e            Zl e            Zm e            Zn e            Zo e            Zp e            Zq e            Zr e            Zs e            Zt e            Zu e            Zv e            Zw e            Zx e            Zy e            Zz e            Z{ e            Z|de}fdZ~de}fdZede}dd fd            ZdS )DispatchKeyr   r   c                     | j         S Nnamer   s    r   r   zDispatchKey.__str__   
    yr   c                 D    t          |                                           S r9   )r"   lowerr   s    r   r>   zDispatchKey.lower   s    4yy   r   valuec                     t           j                                        D ]\  }}|| k    r|c S t          d|            )Nzunknown dispatch key )r7   __members__itemsAssertionErrorr?   kvs      r   parsezDispatchKey.parse   sR    +1133 	 	DAqEzz <U<<===r   N)r   r    r!   	UndefinedCatchAllr   FPGAORTVulkanMetalMKLDNNOpenGLOpenCLIDEEPCustomRNGKeyId	MkldnnCPUr,   SparseCsrCPUSparseCsrCUDAr-   DensePythonFuncTorchDynamicLayerBackMode
ZeroTensor	ConjugateNegativeBackendSelectNamedAutogradOtherAutogradFunctionalityr/   TracerAutocastBatchedVmapModeFuncTorchGradWrapperFuncTorchBatchedBatchedNestedTensorFuncTorchVmapModeFuncTorchDynamicLayerFrontModeFunctionalizeTESTING_ONLY_GenericWrapperTESTING_ONLY_GenericModeADInplaceOrViewr.   CompositeImplicitAutograd%CompositeImplicitAutogradNestedTensorCompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalFuncTorchBatchedDecompositionCPUCUDAHIPXLAMTIAMPSIPUXPUHPUVELazyMetaPrivateUse1PrivateUse2PrivateUse3QuantizedCPUQuantizedCUDAQuantizedHIPQuantizedXLAQuantizedMTIAQuantizedMPSQuantizedIPUQuantizedXPUQuantizedHPUQuantizedVEQuantizedLazyQuantizedMetaQuantizedPrivateUse1QuantizedPrivateUse2QuantizedPrivateUse3	SparseCPU
SparseCUDA	SparseHIP	SparseXLA
SparseMTIA	SparseMPS	SparseIPU	SparseXPU	SparseHPUSparseVE
SparseLazy
SparseMetaSparsePrivateUse1SparsePrivateUse2SparsePrivateUse3NestedTensorCPUNestedTensorCUDANestedTensorHIPNestedTensorXLANestedTensorMTIANestedTensorMPSNestedTensorIPUNestedTensorXPUNestedTensorHPUNestedTensorVENestedTensorLazyNestedTensorMetaNestedTensorPrivateUse1NestedTensorPrivateUse2NestedTensorPrivateUse3AutogradCPUAutogradCUDAAutogradHIPAutogradXLAAutogradMTIAAutogradMPSAutogradIPUAutogradXPUAutogradHPU
AutogradVEAutogradLazyAutogradMetaAutogradPrivateUse1AutogradPrivateUse2AutogradPrivateUse3r"   r   r>   staticmethodrG   r%   r   r   r7   r7   F   s       IH466D
$&&CTVVFDFFETVVFTVVFTVVFDFFETVVNITVVF466LDFFM466LDFFETVVF$(DFF!JItvvHDFFMDFFEDFFM DFF466TVVFtvvHdffGtvvH466tvv$&&%)TVV"DFFM"&$&&#tvvdffOtvvH $,0DFF) $-1TVV*$(DFF! $&&C466D
$&&C
$&&C466D
$&&C
$&&C
$&&C
$&&C	B466D466D$&&K$&&K$&&K466LDFFM466L466LDFFM466L466L466L466L$&&KDFFMDFFM466466466IJIIJIIIItvvHJJdffOtvvdffOdffOtvvdffOdffOdffOdffOTVVNtvvtvv"dff"dff"dff$&&K466L$&&K$&&K466L$&&K$&&K$&&K$&&KJ466L466L$&&$&&$&&    !s ! ! ! ! >S >] > > > \> > >r   r7   c                   J    e Zd Z e            Z e            Z e            ZdS )_TorchDispatchModeKeyN)r   r    r!   r   FAKEPROXY
FUNCTIONALr%   r   r   r   r      s/        466DDFFEJJJr   r   r   c                      g } t           D ]'}t          D ]}|                     d| | d           (d                    |           S )Nz    z	 = auto()
)FUNCTIONALITY_KEYSBACKEND_COMPONENTSappendjoin)rfkbcs      r   codegen_per_backend_entriesr      s`    
A  / /$ 	/ 	/BHH-B----....	/99Q<<r   zMissing zL from DispatchKey enum.  Here is the autogenerated list we expect to have:

dkc                 b    | t           j        t           j        t           j        t           j        hv S r9   r7   ro   rp   rm   rn   r   s    r   is_generic_dispatch_keyr     s,    -:-9	  r   c                     | t           j        t           j        t           j        t           j        t           j        t           j        hv S r9   )r7   rs   r   r   rU   r   r   r   s    r   is_cuda_dispatch_keyr     s8    !!$   r   c                     | t           v S r9   )STRUCTURED_DISPATCH_KEYSr   s    r   is_structured_dispatch_keyr   %  s    )))r   c                     | t           v S r9   )UFUNC_DISPATCH_KEYSr   s    r   is_ufunc_dispatch_keyr   )  s    $$$r   c                      e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
 e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            ZdefdZededed          fd            Zededd fd            Zededed          fd            ZdS )	
ScalarTyper   c                     | j         S r9   r:   r   s    r   r   zScalarType.__str__B  r<   r   r?   c                 b    t           j                                        D ]\  }}|| k    r|c S d S r9   )r   rA   rB   rD   s      r   maybe_parsezScalarType.maybe_parseE  s@    *0022 	 	DAqEzz tr   c                 X    t                               |           }|J d|              |S )Nzunknown dtype )r   r   )r?   mb_rs     r   rG   zScalarType.parseL  s7    %%e,,!9%!9!9r   valuesc                     t                      }|                     d          D ]Y}|t          v r!|                    t          |                    ,|                    t
                              |                     Z|S )N, )r   splitDTYPE_CLASSESupdateaddr   rG   )r   dtypesr?   s      r   	parse_setzScalarType.parse_setR  ss    )3\\$'' 	4 	4E%%mE23333

:++E223333r   N)r   r    r!   r   ByteCharShortIntLongHalfFloatDoubleComplexHalfComplexFloatComplexDoubleBoolBFloat16Float8_e5m2Float8_e5m2fnuzFloat8_e4m3fnFloat8_e4m3fnuzr"   r   r   r
   r   rG   r   r   r%   r   r   r   r   /  s~       466D466DDFFE
$&&C466D466DDFFETVVF$&&K466LDFFM466DtvvH$&&KdffODFFMdffO     3 8L#9    \ S \    \
 # *\":    \  r   r   r   IntegralFloatingComplexAllAllAndComplexFloatingAndComplexc                       e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
defdZededd fd            ZdS )UfuncKeyr   c                     | j         S r9   r:   r   s    r   r   zUfuncKey.__str__  r<   r   r?   c                     t           j                                        D ]\  }}|| k    r|c S t          d|            )Nzunknown ufunc key )r  rA   rB   rC   rD   s      r   rG   zUfuncKey.parse  sR    (..00 	 	DAqEzz 9%99:::r   N)r   r    r!   r   CUDAFunctorCUDAFunctorOnOtherCUDAFunctorOnSelf	CPUScalar	CPUVector
ScalarOnlyGenericr"   r   r   rG   r%   r   r   r  r  x  s         $&&KII JdffG     ;S ;Z ; ; ; \; ; ;r   r  c                       e Zd ZdZdZdS )DeviceCheckTyper      N)r   r    r!   NoCheck	ExactSamer%   r   r   r  r    s        GIIIr   r  c                   J    e Zd Z e            Z e            Z e            ZdS )ViewSchemaKindN)r   r    r!   r   aliasingaliasing_inplacenon_aliasingr%   r   r   r  r    s0        tvvHtvv466LLLr   r  c                      e Zd ZU eed<   ded<   eed<   eed<   eed<   ee         ed<   ee         ed<   ee	         ed	<   eed
<   eed<   ded<   e
d         ed<   eedf         ed<   eed<   ed         ed<   ee         ed<   ed         ed<   ee         ed<   eed<   eed<   eed<   eed<   eed<   ee         ed<   e	 d,deeef         ddd ee         d!eee                  d"ed eeed#         f         f         f
d$            Zd-d%Zd-d&Zed"efd'            Zed"efd(            Zed"efd)            Zed"efd*            Zed"efd+            ZdS ).NativeFunction	namespaceFunctionSchemafunc!use_const_ref_for_mutable_tensorsdevice_guarddevice_checkpython_modulecategory_overridevariantsmanual_kernel_registrationmanual_cpp_bindingr   locOperatorNameautogenUfuncInnerLoopufunc_inner_loop
structuredstructured_delegatestructured_inherits
Precomputeprecomputedcpp_no_default_argsis_abstract&has_composite_implicit_autograd_kernel4has_composite_implicit_autograd_nested_tensor_kernel&has_composite_explicit_autograd_kernel5has_composite_explicit_autograd_non_functional_kerneltagsNei
valid_tagsignore_keysr   )r$  BackendMetadatac                   7 |                                  }|                    d          }t          |t                    sJ d|             t	          j        |d          }|                    d          }t                              |j	                  7|                    dg           }t          |t                    sJ t          |          }	|                    dd	          }
t          |
t                    sJ |                    d
d          }t          |t                    sJ t                      }|                    d          D ]_}|dk    r |                    t          j                   (|dk    r |                    t          j                   Nt%          d|           |                    dd	          }t          |t                    sJ d|             |                    dd	          }t          |t                    sJ d|             |                    dd          }t          |t                    sJ d|             |                    dd          }|"t          |t                    sJ d|             |t&          j        }nt&          |         }|                    dd	          }t          |t                    sJ d|             |                    dd          }|"t          |t                    sJ d|             |d|vs
J d            d}|t*                              |          }|                    dd          }|"t          |t                    sJ d|             |d|vs
J d            |                    dd          }|"t          |t                    sJ d|             |t          j        |vs
J d            |                    dd          }|"t          |t                    sJ d|             |                    dd          }||du sJ |rt,                              |          nd}|                    d g           }t          |t                    r|g}t          |t                    sJ |dk    rd!|v r|                    d!           t                      }|D ]B}t1          |          d"k    sJ ||v r|                    |           1t%          d#|           d"d$lm} |                    d%d          }|t          |t6                    s
J |            i } d"}!||r
J d&            d	}"|                                D ]\  }#}|#d'k    rt          |#t                    s
J |            |#                    d(          D ]}$t:                              |$                                          }%|!dz  }!|r|%|v r:|%t>          v sJ d)|% d*| d+            t	          j        |d,-          }|                    d.          }&tA          |j	        |otC          |%          |&d/z   0          | |%<   |%t:          j"        u r||#                    7          k    rd}"֐|!dk    r|"r
J d1            |s| $                                t:          j"        hk    s^| t:          j"                 %                                s:|!dk    s4J d2|#                    7           d3| t:          j"                  d4            n|s|t          7j#        j#                  }'|'&                    d5          s:|''                    d6          s%7j(        j)        r'7j(        *                                sJ d7|' d8            tA          |#                    7          d	tV          9          | t:          j"        <   d: | D             }(t1          |(          dk    s9t1          |(          d;k    rt:          j,        |(vrt:          j-        |(v s
J d<            |                    d=d>          })t          |)t                    sJ |)d>k    rg nd? |)                    d          D             }*|                    d@i           }+i },t          |+t                    r3t\                              |+t^          j0                  |,t^          j0        <   nt          |+t6                    r|+                                D ]\  }$}-|$d'k    rt          |$t                    sJ dA|$             t          |-t                    sJ dB|             t^                              |$          }.t\                              |-|.          |,|.<   nt%          dC|+           |,r^|s
J dD            d"dl1m2c m3}/ th          D ]A}%|%| vsJ dE|%             tA          |/5                    7|%          dtV          0          | |%<   B|rd}0nt| $                                t:          j"        hk    oP| $                                t:          j-        hk    o-| $                                t:          j"        t:          j-        hk    }0t:          j"        | $                                v }1t:          j-        | $                                v }2t:          j6        | $                                v }3t:          j,        | $                                v }47fdF|                                 D             }5|                    d'd           |rJ dG|             |tn          D ]}6|6| vsJ dH|6 dI            tq          dQi d7d|
d
|d|d|d|d|d=|*d@|,d|d|d|d|d|d|dJ|d|	dK|0dL|1dM|2dN|3dO|4d |dP||5fS )Rzp
        Parse a NativeFunction from a dictionary as directly parsed
        from native_functions.yaml
        r  znot a str: r  )namespaced_entity	max_levelaten)defaultr-  r  Fr   r(   r   r)   zillegal variant r!  znot a bool: r"  r  Tr  Nr(  r)  z::zbnamespace is not supported in structured delegate, using the same namespace as the native functionr*  zbnamespace is not supported in structured inherits, using the same namespace as the native functionr  z&functions in modules cannot be methodsr  r,  r3  pt2_compliant_tagr   zillegal tag )cppdispatchzncannot specify both manual_kernel_registration and dispatch; with manual registration, dispatch has no effect!__line__,zDispatch key z of kernel z! is not a supported dispatch key.   )r:  atz::native)kernelr(  cpp_namespacezSunnecessary dispatch table for this function; just delete the dispatch key entirelyzQunexpected name for singleton CompositeImplicitAutograd dispatch entry: expected z	 but got zR.  Rename your implementation to the expected name, then delete the dispatch tablenew__likez	expected z to have a CompositeExplicitAutograd dispatch entry, but there was no dispatch table.  Factory functions should not have implicit dispatch as they should not be decomposed for __torch_dispatch__)r(  rE  c                     g | ]D}|t           j        k    s0|t           j        k    s |t           j        k    s|t           j        k    B|ES r%   r   )r1   ds     r   r3   z,NativeFunction.from_yaml.<locals>.<listcomp>  s]     "
 "
 "
K999KFFFK999KEEE 
 FEEr      aH  cannot specify more than one of CompositeExplicitAutograd, CompositeExplicitAutogradNonFunctional, or CompositeImplicitAutograd on a single kernel; each strictly subsumes the other.  If you wanted to provide an explicit autograd implementation, specify CompositeExplicitAutograd; otherwise specify CompositeImplicitAutograd onlyr%  r*   c                 B    g | ]}t                               |          S r%   )r$  rG   r1   xs     r   r3   z,NativeFunction.from_yaml.<locals>.<listcomp>  s&    IIIA,$$Q''IIIr   r'  z#ufunc_inner_loop key is not a str: z%ufunc_inner_loop value is not a str: z"ufunc_inner_loop not str or dict: zufunc must be structuredz2ufunc should not have explicit dispatch entry for c                 *    i | ]\  }}|j         |iS r%   r:   )r1   rE   rF   r  s      r   
<dictcomp>z,NativeFunction.from_yaml.<locals>.<dictcomp>Y  s%    KKK$!QA	1~KKKr   zleftover entries: z+if structured_delegate, then must not have z* in dispatch dictionary (it is delegated!)r#  r.  r/  r0  r1  r2  r  r%   )9copypop
isinstancer"   r   from_namespaced_entityget_cpp_namespacer  rG   entity_namelistsetboolr   r   r'   r(   r)   rC   r  r  r$  r+  r   lentorchgen.apir>  dictrB   r7   stripdispatch_keysr7  r   rm   r;   keyssupports_symint
startswithendswith	argumentstensor_optionshas_tensor_argDEFAULT_KERNEL_NAMESPACErp   rn   r&  r  r  torchgen.api.ufuncapiufuncr   schema_kernel_namero   r   r  )8r4  r#  r5  r6  efuncsnamespace_helperr  cpp_no_default_args_listr-  r  
variants_sr   rF   r!  r"  r  device_check_sr  r(  structured_delegate_sr)  r*  r  r  precomputed_dictr,  tags_inpr3  tr>  raw_dispatchr?  num_dispatch_keys%redundant_composite_implicit_autogradksrE   dispatch_keykernel_namespacer;   composites_in_dispatchautogen_strr%  raw_ufunc_inner_loopr'  vo	ufunc_keyrh  r.  r/  r0  r1  r2  backend_metadatakeyr  s8                                                          @r   	from_yamlzNativeFunction.from_yaml  s    GGIIf%%%<<'<U'<'<<<%*A#q
 
 
 %66v6FF	##$4$@AA#$55)>#C#C 2D99999!":;;,-EE/-
 -
) ;TBBBBBUU:z22
*c*****!$!!$'' 	= 	=AJW-....hW^,,,,$%;%;%;<<<%&UU+G%O%O"&
 
 	7 	76466	7 	7 
 UU#7??,d33XX5XDV5X5XXX3uu^T22,--LL/Ll/L/LLL-~t44%C*
 *
%%))) &% 
 !*4LL*>:LUU<//
*d++HH-HJ-H-HHH+ !&;T B B$,
!31
 1
,,0.00 -, 
 %,<Q0Q0Q0Q? 1R0QQ 7; ,"."4"45J"K"Kee$94@@"*j/
 /
**.,.. +* 
 #*d:M.M.M.M? /N.MM
 ot44$
3)
 )
$$((( %$ 
 !W^8%C%C%C3 &D%CC EE"5t<< (Js-
 -
((,*,, )( 
 5555':+=+=+==<LVj&&'7888RV55$$h$$ 	" zH(D))))) #6*#D#DOO/000 	9 	9Az??Q&&&&J$%7A%7%7888$$$$$$uuZ..#z,'E'E##q##E79!"#1  ? 1 5:1%++-- !E !EA##!"c**--A--*# E EA#.#4#4QWWYY#?#?L%*%" !|{'B'B '=888; ; ; ; ; ; 988 (7'MQ( ( ($ (8'I'IRV'I'W'W$ .=/;#- $E6|DD'7*'D	. . .H\* %(MMM$//@D=;EF "Q&&+P&& '& $	==??{'L&MMMKABRRTT N$)))7dgdldlmqdrdr 7 7#K$IJ7 7 7 *)*  	 3 ;ty~&&D''==))
 N1 !N99;; )D ) ) )   ?N5@X? ? ?H[:;"
 "
"
 "
 "
 )**a//&''1,,B-. . A)* * *r	* *

" eeIr**+s+++++ b   BII1B1B41H1HIII 	  !uu%7<<*C00 	1?1E1E$h&62 2X-.. ,d33 	-3355 R R2
??!!S))TT+TQR+T+TTT)!"c**WW,WTU,W,WWW*$NN1--	.<.B.B2y.Q.Q ++R !K5IKK    	99999: /........ 3   000VVV 100)8 33D,GG#":* * *&&  	KK K$I#JJ MMOOEFG MMOO9E	  1X]]__D 	/ =P 	= 1X]]__D 	/ >(--//Q 	> LKKK(..:J:JKKK 	
j$...1....u */  (***)# ) ) ) +***    T2S2S " &:	
 %8$7 %8$7 (K   "2!1 ,F+E $6#5 ,m #4"3 *\ *\  C!" %8$7#$ (K%& 8^7]'( FzEy)* 8^7]+, G|F{-. T/0 $)14 7
 	
r   c                 J    | j         r
J d            | j        s
J d            d S )NzMThis function is structured, but there was no valid functional variant of it.zThis function delegates to another structured out function, but no valid function was found (the delegate may not exist, or it has the wrong type)r(  r)  r   s    r   validate_unstructuredz$NativeFunction.validate_unstructured  sT     ? 	
 	
1	
 	
" ' 	
 	
e	
 	
' 	
 	
r   c                    | j         j        j        r | j        t          j        hk    s
J d            | j        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j
        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j        r| j
        r
J d            d | j                                         D             }t                              | j        |          }t          |          dk    sJ d|             | j        | j        s
J d	            t#          | j         j                                      d
          r| j        t*          j        k    s
J d            dt#          | j         j                  v sdt#          | j         j                  v s(t/          d | j         j        j        D                       r;dt#          | j         j                  vr t#          | j         j        j                  dvs| j         j                                        r,d| j        v s!J t#          | j         j                              d S d S )NzNative functions with out arguments MUST be declared with only function variant; e.g., variants: function; otherwise you will tickle a Python argument binding bug (which usually manifests itself as the result variable being undefined.)zYPut structured field on the out= variant of a function; did you mean structured_delegate?z:device_guard: False is not respected by structured kernelszQstructured_delegate field not allowed on out= functions; did you mean structured?z?Cannot have both structured and structured_delegate on functionc                 *    h | ]}|j         	|j        S r9   )r<  r;   r1   as     r   	<setcomp>z/NativeFunction.__post_init__.<locals>.<setcomp>  s(     
 
 
!)BWAFBWBWBWr   r   zInvalid cpp_no_default_args: z4structured_inherits must also imply structured: True_foreachzsforeach kernels fall back to slow path when tensor are on different devices, device_check not allowed to be enabledranddropoutc              3   (   K   | ]}d |j         v V  dS )r  Nr:   r1   args     r   	<genexpr>z/NativeFunction.__post_init__.<locals>.<genexpr>  s:        25	SX-     r   backward)_cudnn_init_dropout_statenondeterministic_seeded)r  rb  outr   r'   r(   r(  kind
SchemaKindr  r)  schema_order_argumentsrW  
differencer-  rY  r*  r"   r;   r`  r  r  r  anyflat_allhas_generator_argr3  )r   defaulted_argumentsinvalid_argss      r   __post_init__zNativeFunction.__post_init__  s   9" 	=W%5$6666[ 766 ? 	L9>>##z~555K 655
 !L LKL L!# 	L9>>##z~555> 655
 !L LKL L!
 O	M $ 8	M 	ML	M 	M 

 
 I<<>>
 
 
 ~~d&>@STT<  A%%%'U|'U'U%%%#/F FEF Fty~))*55 	$(????9 @?? c$).)))) TY^!4!444  9=9L9U     5 c$).&9&999	+,,4QQQy"4466 R -	9993ty~;N;N99999	 RQr   c                 H    | j         p| j        p| j        p| j         o| j        S r9   )r/  r1  r2  r0  r   s    r   has_composite_kernelz#NativeFunction.has_composite_kernel  s@     7 J:JI

 7 JI	
r   c                 d   | j         j        }t          |          dk    ot          d |D                       }d| j        v o9t          | j         j                  dk    ot          | j         j                  dk    }t          d | j                                         D                       }|p|p|S )Nr   c              3   B   K   | ]}|j         d uo|j         j         V  d S r9   
annotationis_writer1   r   s     r   r  z,NativeFunction.is_view_op.<locals>.<genexpr>  sG       5
 5
GHAL$BQ\-B)B5
 5
 5
 5
 5
 5
r   inplace_viewresize_
resize_as_c              3   D   K   | ]}|j         d uod|j         j        v V  d S )N*)r  alias_set_after)r1   inps     r   r  z,NativeFunction.is_view_op.<locals>.<genexpr>  sL       
 
 N$&P3#.2P+P
 
 
 
 
 
r   )r  returnsrY  r  r3  r"   r;   r  )r   retsis_non_mutating_viewis_inplace_viewis_wildcard_views        r   
is_view_opzNativeFunction.is_view_op  s    y "4yy1}  
 5
 5
LP5
 5
 5
 2
 2

 di' 4DIN##y04DIN##|3 	
  
 
y7799
 
 
 
 
 $JJ:JJr   c                     | j         r-| j        j        j        j        rd| j        v sJ t
          j        S | j         rt
          j        S t
          j        S )Nr  )	r  r  r;   inplacer3  r  r  r  r  r   s    r   view_schema_kindzNativeFunction.view_schema_kind  sU    ? 	3ty~2: 	3!TY....!22? 	/!**!..r   c                 .    | j         j        j        j        S r9   )r  r;   baser   s    r   	root_namezNativeFunction.root_name  s    y~"''r   c                 "    | j         p| j        d uS r9   r  r   s    r   part_of_structured_groupz'NativeFunction.part_of_structured_group  s    F$":$"FFr   r9   r   N)r   r    r!   r"   r#   rX  r  r
   r   r'   r	   r   r  r   objectr7   r   r  r  r  propertyr  r  r  r  r  r  r%   r   r   r  r    s         NNN  (,+++  "!!! C=     }$$$ 'l
 !%$$$  
OOO .!!!! 8%556666  ".1111 "#&&& ,'''' S!!!  -1000:>>>>,0000;???? c(NNN 
 37	d
 d
fd
d
 Hd
 c+./	d

 
${D1R,SSTT
d
 d
 d
 \d
L

 

 

 

&=O =O =O =O~ 
d 
 
 
 X
 KD K K K XK" /. / / / X/ (3 ( ( ( X( G$ G G G XG G Gr   r  c                   r    e Zd Z e            Z e            Z e            Z e            Z e            ZdS )r  N)	r   r    r!   r   
functionalr  r  mutablescratchr%   r   r   r  r    sE        JdffG
$&&CdffGdffGGGr   r  c                       e Zd ZU eed<   ee         ed<   ee         ed<   eed<   edefd            ZddZ	dd
Z
dee         fdZedefd            Zedeeef         ded          fd            ZdS )NativeFunctionsGroupr  r  r  r  r   c                     | j         j        S r9   )r  r(  r   s    r   r(  zNativeFunctionsGroup.structured  s     x""r   Nc           
         | j         j                                        }|                                 D ]}||j                                        k    r,t	          d| d|j                                                   | j        |j        k    r.t	          d| j        j        j         d|j        j                   | j         j        	                                t          j         k    sJ | j        j        	                                t          j        k    sJ | j         j        | j        j        k    sJ | j        J| j        j        	                                t          j        k    sJ | j        j        | j         j        k    sJ | j        g| j        j        	                                t          j        k    sJ | j        j        | j         j        k    sJ | j         j        j        j        j        sJ | j        r| j        j        s| j        j        rJ | j         j        | j        j        j        k    s:J | j         j        j         d| j         j         d| j        j        j                     | j        !| j        j        | j        j        j        k    sJ t%          d |                                 D                       }d                    d	 |D                       }t)                      }|                                 D ]&}|                    d
 |j        D                        'd                    d t%          |          D                       }t/          |          dk    rBt/          |          dk    r/t1          d| d| dt3          |j        j                             ||k    rt1          d| d| d| d          d S )Nz_NativeFunctionsGroup constructed from two NativeFunctions that don't have matching signatures:  != zMNativeFunctionsGroup constructed from structured and unstructured functions:  and z delegates to z but its actual delegate is c                 R    g | ]$}d |j         v t          |j        j                  %S )	generated)r3  r"   r  r;   )r1   fs     r   r3   z6NativeFunctionsGroup.__post_init__.<locals>.<listcomp>M  s0    QQQ!;!&;P;PS;P;P;Pr   r   c              3   4   K   | ]}t          |          V  d S r9   r"   rL  s     r   r  z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>O  s(      %D%Dc!ff%D%D%D%D%D%Dr   c              3   4   K   | ]}t          |          V  d S r9   r  )r1   ops     r   r  z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>R  s(      )F)Fb#b'')F)F)F)F)F)Fr   c              3   4   K   | ]}t          |          V  d S r9   r  rL  s     r   r  z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>S  s9       /
 /
CFF/
 /
 /
 /
 /
 /
r   r   z,The codegen expects to be able to generate 'zv'. In order to generate them however, we expect them to be called out explicitly in the yaml. Please add an 'autogen: z' line to the entry for z*'. To do so, it expects a line: 'autogen: z'. Instead, it found 'autogen: ')r  r  	signature	functionsrC   r(  r  r  r;   r  r  r  r  r  functional_overloadr/  r0  r)  sortedr   rW  r   r%  rY  RuntimeErrorr"   )r   test_sigr  generated_fnsgenerated_fns_strexpected_generated_fnsexpected_generated_fns_strs          r   r  z"NativeFunctionsGroup.__post_init__"  sf   #'?#7#A#A#C#C!! 	 	A16++----$_<D_ _JK&JZJZJ\J\_ _  
 !"<<<$I"&(-"4I I;<6;I I   =
 #((**j.CCCCCx}!!##z~5555(DH,>>>>><#<$))++z/AAAAA<)T_-FFFFF<#<$))++z/AAAAA<)T_-FFFFF?',1EEEE? 	N HCU V ?6$(-:LLLL?', C CDO<_ C C.2hm.@C C MLL |'|748=;MMMMMQQt~~'7'7QQQ
 
 !II%D%Dm%D%D%DDD+.55!! 	G 	GA")))F)FAI)F)F)FFFFF%)YY /
 /
"#9::/
 /
 /
 &
 &
" %&&!++M0B0BQ0F0Fj?P j j,=j jWZ[\[a[fWgWgj j  
 &):::N?P N N;LN N0JN N N   ;:r   r  c                 >    | j         j                                        S r9   )r  r  r  r   s    r   r  zNativeFunctionsGroup.signaturec  s    x}&&(((r   c              #   r   K   | j         V  | j        V  | j        	| j        V  | j        | j        V  d S d S r9   )r  r  r  r  r   s    r   r  zNativeFunctionsGroup.functionsf  sY      oh<#,<#, $#r   c                     | j         j        S r9   )r  r  r   s    r   r  zNativeFunctionsGroup.root_namen  s    ((r   rI  c                    | sJ t          |           dk    rd S t          |           } |                     t          j        d           }|                     t          j        d           }|                     t          j        d           }|                     t          j        d           }| rJ |J |d S t          ||||          S )Nr  )r  r  r  r  )	rY  r[  rQ  r  r  r  r  r  r  )rI  r  r  r  r  s        r   	from_dictzNativeFunctionsGroup.from_dictr  s     qq66Q;;4GGUU:0$77
%%
*D11%%
*D11eeJND))u%%% ;4#!	
 
 
 	
r   r  r   r  )r   r    r!   r  r#   r
   r  rX  r(  r  r  r   r  r"   r  r   r   r  r  r%   r   r   r  r    s%        n%%%%n%%%%	#D # # # X#? ? ? ?B) ) ) )8N3     )3 ) ) ) X) 

N*+
	(	)
 
 
 \
 
 
r   r  c                   :    e Zd ZU eed<   eed<   eed<   defdZdS )r7  rD  r(  rE  r   c                     d| j         v S )N_symint)rD  r   s    r   r_  zBackendMetadata.supports_symint  s    DK''r   N)r   r    r!   r"   r#   rX  r_  r%   r   r   r7  r7    sX          KKK
  ( ( ( ( ( ( (r   r7  c                   ^    e Zd ZU eed<   ee         ed<   eed<   edededd fd            Z	dS )r&  r;   supported_dtypesr~  r?   r   c                 &   |                      dd          \  }}|d         dk    sJ |d         dk    sJ t                      }|dd                              d          D ]}|t                              |          z  } t	          |||          S )	N r  r   ()r   )r;   r  r~  )r   r   r   r   r&  )r?   r~  r;   supported_dtypes_strr  rE   s         r   rG   zUfuncInnerLoop.parse  s    %*[[a%8%8""#A&#----#B'3....3=<<%ad+11$77 	8 	8A
 4 4Q 7 77(8I
 
 
 	
r   N)
r   r    r!   r"   r#   r   r   r  r   rG   r%   r   r   r&  r&    sr         
III ,,,, 	
S 	
X 	
2B 	
 	
 	
 \	
 	
 	
r   r&  c            	       *   e Zd ZU eed<   eed<   eed<   eed<   edef         ed<   edeeedef         f         deeedef         f         d	d
fd            Z	de
d	efdZdeee
f         d	efdZdeee
f         d	ee         fdZd	ee         fdZd
S )BackendIndexrx  use_out_as_primaryr  externalr$  indexparent_indexchild_indexr   Nc                     |                                 D ]D\  }}|                                 D ]*\  }}|| |         vsJ d| d|             || |         |<   +Ed S )Nzduplicate operator z for dispatch key )rB   )r  r  rE   rF   op_namemetadatas         r   
grow_indexzBackendIndex.grow_index  s    
  %%'' 	4 	4DAq%&WWYY 4 4!<?222GGGAGG 322+3Q((	4	4 	4r   gc                 ,    | j         r|j        S |j        S r9   )r  r  r  )r   r  s     r   primaryzBackendIndex.primary  s    " 	 5L<r   c                 4    |                      |          }|d uS r9   )
get_kernel)r   r  ms      r   
has_kernelzBackendIndex.has_kernel  s    OOA}r   c                     t          |t                    r|}n:t          |t                    r|                     |          }nt	          |           |j        j        | j        vrd S | j        |j        j                 S r9   )rR  r  r  r  r   r  r;   r  )r   r  r  s      r   r  zBackendIndex.get_kernel  ss     a(( 	AA/00 	QAAOOO6;dj((4z!&+&&r   c                 B    | j         rt          | j                   dS d S )NNativeFunctions)r  r"   rx  r   s    r   native_function_class_namez'BackendIndex.native_function_class_name  s-    = 	$+,,====
 4r   )r   r    r!   r7   r#   rX  r   r7  r   r  r  r  r  r   r  r
   r  r"   r  r%   r   r   r  r    s`          NNN/0000	4;^_-L(MMN	4+tNO,K'LLM	4 
	4 	4 	4 \	4 -  .        E.2F"FG D    '~';;<'	/	"' ' ' 'HSM      r   r  c            	       T   e Zd ZU ded<   ded<   ed         ed<   ded         fd	Z ej        d
          Z	e
dedd fd            ZdefdZddZdefdZdefdZdefdZdeee                  fdZdddddedededd fdZd dZd!dZedefd            ZdefdZdefdZdS )"r  r$  r;   	Argumentsrb  )Return.r  r   Argumentc                 j    t          j        | j        j        | j        j        | j        j                  S r9   )	itertoolschainrb  flat_positionalflat_kwarg_onlyr  r   s    r   r  z%FunctionSchema.schema_order_arguments;  s.    N*N*N
 
 	
r   z3(?P<name>[^\(]+)\((?P<args>.*)\) -> (?P<returns>.*)r  c                    t           j                            |           }t          |          dk    sJ d|              |d         \  }}}t                              |          }t                              |          }t          |          }t          |||          }t          |          | k    sJ t          |           d|              |S )Nr  zInvalid function schema: r   r;   rb  r  r  )	r  decl_refindallrY  r$  rG   r  parse_returnsr"   )	r  declsopsargsreturn_declr;   rb  r  r   s	            r   rG   zFunctionSchema.parseD  s     &..t445zzQ BD B B!&qT;!!#&&OOD))	,,	7KKK1vv~~~#a&&44d44~~~r   c                 >    t          d | j        D                       S )Nc              3   @   K   | ]}|j         	|j         j        |V  d S r9   r  r  s     r   r  z5FunctionSchema.returns_are_aliased.<locals>.<genexpr>S  s@       
 
|'AL,A' ''''
 
r   )r  r  r   s    r   returns_are_aliasedz"FunctionSchema.returns_are_aliasedQ  s2     
 
\
 
 
 
 
 	
r   Nc                 d   t          | j        j        | j                  D ]\  }|j        j        k    s
J d             | j        j        D ]<t          fd| j        D                       rJ dt          |                        =t          | j        j                  d | j        j	        D             z   }d | j        D             }d | j        D             }t          |          dk    s-t          |          dk    sJ dt          |                        |D ]'t          fd	|D                       s
J d
            (| j        j        rt          d | j        j        D                       r#t          | j                  dk    s
J d            nCt          d | j        j        D                       t          | j                  k    s
J d            | j        j        j        r| j        j        }|r|j        j        r|j        j        j        sJ |j        j        t#          t$          j                  k    r;t          | j                  dk    r | j        d         j        |j        j        k    sJ nt          | j                  dk    sJ | j        j        <|                                 t,          j        k    sJ dt          |                        |                                 r<|                                 t,          j        k    sJ dt          |                        d S d S )NzsOut arguments must have matching return Tensor; furthermore, the ith-argument needs to correspond to the ith returnc              3   8   K   | ]}j         |j         k    V  d S r9   r  r1   r   r  s     r   r  z/FunctionSchema.__post_init__.<locals>.<genexpr>b  s=        12,     r   z^If you have a schema with mutable positional args, we expect them to not be returned. schema: c                 (    g | ]}|j         d k    |S r   r:   r  s     r   r3   z0FunctionSchema.__post_init__.<locals>.<listcomp>i  s+     3
 3
 3
SX=O=OC=O=O=Or   c                 8    g | ]}|j         	|j         j        |S r9   r  r1   rets     r   r3   z0FunctionSchema.__post_init__.<locals>.<listcomp>l  s4     
 
 
~)cn.E) )))r   c                 8    g | ]}|j         |j         j        |S r9   r  r  s     r   r3   z0FunctionSchema.__post_init__.<locals>.<listcomp>q  s4     
 
 
~%S^-D% %%%r   r   zYNativeFunctions must have either only mutable returns, or only immutable returns. Found: c              3   8   K   | ]}j         |j         k    V  d S r9   r  )r1   r  r  s     r   r  z/FunctionSchema.__post_init__.<locals>.<genexpr>  s,      PPCs~7PPPPPPr   zAll mutable returns must be aliased either to a keyword argument, or to "self". Did you forget to mark an out argument as keyword-only?c              3   Z   K   | ]&}|j         t          t          j                  k    V  'd S r9   )typeBaseTypeBaseTyTensorr  s     r   r  z/FunctionSchema.__post_init__.<locals>.<genexpr>  s3      QQ16Xfm444QQQQQQr   z3out= ops that accept tensor lists as out arguments c                 F    g | ]}|j                             d           |S 	_scratch_r;   r`  r  s     r   r3   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s>       "x22;??  r   zMMust return as many arguments as there are out arguments, or no return at allr  zFound an operator that is not functional or out variant, but has tensor options arguments.This is not allowed- tensor options arguments are only allowed for factory functions.schema: zFound an operator that is not functional, but its overload contains the string 'functional'.This is a special keyword in the codegen, please use a different overload name.schema: )ziprb  r  r  r  post_self_positional_mutabler  r"   rV  r
  rY  r;   r  self_argargumentr  r#  r$  r%  r&  rc  r  r  r  is_functional_fn)r   r  out_and_selfmutable_returnsimmutable_returnsself_ar  r  s         @@r   r  zFunctionSchema.__post_init__Y  s   DN.== 	 	HC>S^333I 4333 < 	| 	|A    6:l     | |{pstxpypy{{| |  | DN.// 3
 3
>93
 3
 3
 

 
|
 
 


 
|
 
 
   A%%->)?)?1)D)D)Drgjkogpgprr *E)DD" 	 	CPPPP<PPPPP  J P  > 	c QQdn>PQQQQQ c%%***H +**b  #'>#5    L    c   9>! 	.^,FO. O.7 8 #x'>'>>> %%**Q2fo6PPPPQP
 4<((A---->(499;;*"7777't99' ' 877
   "" 	99;;*"7777't99' ' 877	 	77r   c                     d| j         j        v S )Nr  r;   overload_namer   s    r   r/  zFunctionSchema.is_functional_fn  s    ty666r   c                 4    t          | j        j                  S r9   )rX  rb  r  r   s    r   	is_out_fnzFunctionSchema.is_out_fn  s    6 DN&'''r   c                    t          | j        j                  }t          d | j        j        D                       }| j        j        j        }t          d | j        j        D                       }|r|rJ |rt          j        S |r|s
J d            t          j        S |r|r
J d            t          j        S |rt          j	        S t          j
        S )a	  
        What kind of schema is this?  A functional schema is one
        that returns a newly allocated output; an inplace schema
        modifies the self argument inplace; an out schema writes
        the result into an explicitly provided out argument.
        c                 F    g | ]}|j                             d           |S r(  r*  r  s     r   r3   z'FunctionSchema.kind.<locals>.<listcomp>  s-    SSSS#(2E2Ek2R2RSSSSSr   c              3   @   K   | ]}|j         d uo|j         j        V  d S r9   r  r  s     r   r  z&FunctionSchema.kind.<locals>.<genexpr>  sG       
 
 L$>)>
 
 
 
 
 
r   zFinvariant: all scratch operators are expected to be out= operators toozjWe should not categorize a scratch op as an out variant. Check if the order of if statements are expected!)rX  rb  r  r;   r  r  post_self_positionalr  r  r  r  )r   is_out
is_scratch
is_inplace
is_mutables        r   r  zFunctionSchema.kind  s    dn())SSDN.SSS
 

 Y^+
 
 
^8
 
 
 
 

 *z***  	)%% 	)X XWX X%% 	)| |{| |>! 	)%%((r   c                 |   g }| j         D ]fd| j        j        D             }t          |          dk    r|                    d            Ct          |          dk    r!|                    |d         j                   wd                    d |D                       }t          dj         d| d          |S )	Nc                 B    g | ]}|j         	|j         j         k    |S r9   r  )r1   r  r   s     r   r3   z7FunctionSchema.aliased_return_names.<locals>.<listcomp>  s9       <+0L0L 0L0L0Lr   r   r  r   c              3   $   K   | ]}|j         V  d S r9   r:   r  s     r   r  z6FunctionSchema.aliased_return_names.<locals>.<genexpr>  s$      )G)GQ!&)G)G)G)G)G)Gr   zFound a return (z)that aliases multiple inputs (r  )r  rb  r  rY  r   r;   r   rC   )r   outsaliased_argsaliased_namesr   s       @r   aliased_return_namesz#FunctionSchema.aliased_return_names  s    $& 	 	A   0  L
 <  A%%D!!!!\""a''LO01111 $		)G)G,)G)G)G G G$^qv^^m^^^   r   F)strip_defaultstrip_view_copy_namekeep_return_namesrH  rI  rJ  c          	          dt           dt           ffd} j        j        j        }|r+|                    d          r|                    dd          }t           fdt          j         j        j	         j        j	        j
        gng  j        j         j        j                  D                       }t          t          | j                            }||z   } j                            |          }	t!           j                  d	k    r;t"                              t!          |	                              d
d                    }	t'          t)          t+          |d j        j        j                  d          |	|          S )a
  
                Certain schemas are 'related', in that they are simply
                inplace/out/functional versions of the same function.  This method
                factors these schemas into the "core" functional signature which
                is equal across all versions.

                Here is what normalization happens to the schema to convert
                it to a signature:
                - The overload name is stripped (name is retained, since
                  it expresses semantic content about what the function does)
                - Inplace is set False
                - Out arguments are stripped
                - Mutable post_self_positional args are converted to returns
                - Mutability annotations are stripped  (this is sound
                  because you cannot overload on mutability annotation)
                - Return names are stripped since they are not overloadable and
                  some variants have return names but some not
                - TensorOptions are dropped
                  because out= variants of factory functions don't include them
                  (and we want to be able to pair up factory functions with their out variants)

                Finally, we want to be able to pair up related "view" and their
                corresponding "view_copy" operators. We do this by optionally
                stripping the trailing "_copy" from the base name.

                Example of a mutable op before and after:

                f.func (Mutable operator):
        _fused_moving_avg_obs_fq_helper(Tensor self, Tensor observer_on, Tensor fake_quant_on, Tensor(a!) running_min, Tensor(b!) running_max, Tensor(c!) scale, Tensor(d!) zero_point, float averaging_const, int quant_min, int quant_max, int ch_axis, bool per_row_fake_quant=False, bool symmetric_quant=False) -> (Tensor output, Tensor mask)  # noqa: B950

                f.func (Corresponding functional operator):
        _fused_moving_avg_obs_fq_helper.functional(Tensor self, Tensor observer_on, Tensor fake_quant_on, Tensor running_min, Tensor running_max, Tensor scale, Tensor zero_point, float averaging_const, int quant_min, int quant_max, int ch_axis, bool per_row_fake_quant=False, bool symmetric_quant=False) -> (Tensor output, Tensor mask, Tensor running_min_out, Tensor running_max_out, Tensor scale_out, Tensor zero_point_out)  # noqa: B950

                f.func.signature() output:
        _fused_moving_avg_obs_fq_helper(Tensor self, Tensor observer_on, Tensor fake_quant_on, Tensor running_min, Tensor running_max, Tensor scale, Tensor zero_point, float averaging_const, int quant_min, int quant_max, int ch_axis, bool per_row_fake_quant=False, bool symmetric_quant=False) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor)  # noqa: B950
        r   r   c                 D    t          r| j        nd | j        d           S )Nr;   r#  r  )r  r;   r#  )r   rJ  s    r   strip_ret_annotationz6FunctionSchema.signature.<locals>.strip_ret_annotationG  s0    0:QVVdV   r   _copyr*   c              3      K   | ]Zj         	j         j        t          fdj        D                       5t	          r
j         dnd j        d           V  [d S )Nc              3   8   K   | ]}j         |j         k    V  d S r9   r  r  s     r   r  z5FunctionSchema.signature.<locals>.<genexpr>.<genexpr>g  s,      KK4KKKKKKr   _outrM  )r  r  r  r  r  r;   r#  )r1   r  rJ  r   s    @r   r  z+FunctionSchema.signature.<locals>.<genexpr>S  s       ,
 ,
  |'% (KKKKdlKKKKK ( (9C____tV   ('''%,
 ,
r   NrH  zbernoulli.pzfloat pzfloat p=0.5Fr  r  dunder_methodr5  r  )r  r;   r  ra  replacetupler  r	  rb  r-  r.  r  r<  mapr  r  r"   r  rG   r  r$  BaseOperatorNamerU  )
r   rH  rI  rJ  rN  	base_namereturns_from_mutable_inputsoriginal_returnsr  args_sigs
   `  `      r   r  zFunctionSchema.signature  s   X	F 	v 	 	 	 	 	 	 IN'	 	7I$6$6w$?$? 	7!))'266I ', ,
 ,
 ,
 ,
 ,
 _ >*6 (122"3 ,
 ,
 ,
 '
 '
#, !%94<!H!HII"%@@>++-+HHty>>]** s8}}'<'<Y'V'VWWH%"!"&).">  
 !   
 
 
 	
r   c                 .    |                      d          S )NTrI  )r  r   s    r   view_signaturezFunctionSchema.view_signature  s    ~~4~888r   c                 :    t          || j        | j                  S )Nr  )r  rb  r  )r   r;   s     r   	with_namezFunctionSchema.with_name  s&    nL
 
 
 	
r   c                 p    |                                  t          j        t          j        t          j        fv S r9   )r  r  r  r  r  r   s    r   modifies_argumentsz!FunctionSchema.modifies_arguments  s$    yy{{z1:>:CUVVVr   c                 4    | j                                         S r9   )rb  has_symint_argr   s    r   
has_symintzFunctionSchema.has_symint  s    ~,,...r   c                    t          | j                  }t          | j                  dk    rt          | j        d                   }n3dd                    t          t           | j                            z   dz   }| j         d| d| S )Nr  r   r  r   r  z) -> )r"   rb  rY  r  r   rX  r;   )r   all_arguments_strr  s      r   r   zFunctionSchema.__str__  s    //t|!!$,q/**GGDIIc#t|&<&<===CG)??/??g???r   r  r  )r;   r$  r   r  )r   r    r!   r#   r   r   r  recompiler  r   r"   rG   rX  r  r  r/  r8  r  r  r	   r
   rG  r  r`  rb  r  rd  rg  r   r%   r   r   r  r  1  s;          =!!!!
(< 
 
 
 
 bjOPPG
C 
, 
 
 
 \

T 
 
 
 
` ` ` `D7$ 7 7 7 7(4 ( ( ( (:')j ') ') ') ')Zd8C=&9    , $%*"'b
 b
 b
 b
 #	b

  b
 
b
 b
 b
 b
H9 9 9 9
 
 
 
 WD W W W XW/D / / / /@ @ @ @ @ @ @r   r  c                   z    e Zd ZU eedf         ed<   eed<   eedf         ed<   ededd fd            ZdefdZ	d	S )

Annotation.	alias_setr  r  annr   c                    t          j        d|           }|J d|              |                    d          |                    d          r|                    d          ndz   }t          |                    d                    }|                    d          dk    }|r!t          |          dk    rJ d	|  d
            |                    d          r5t          |                    d                              d                    nt                      }t          |          dk    r!t          |          dk    rJ d|  d
            t          |||          }t          |          | k    sJ | d|              |S )Nz2^([a-z])(\|[a-z])*(!?)( -> (\*|[a-z](\|[a-z])*))?$zunrecognized alias annotation r  rJ  r*   |rB  !z,alias set larger than 1 is not mutable, got z	 instead.   zSbefore alias set and after alias set cannot be larger than 1 at the same time, got )rn  r  r  r  )rj  matchgrouprW  r   rY  rm  r"   )ro  r  before_aliasrn  r  	after_setr   s          r   rG   zAnnotation.parse  s     HJCPP}}DsDD}}}wwqzz1771::%EQWWQZZZ2F,,,S1122	771::$	IY!+++H#HHH ,+
 56GGAJJKE!''!****3//000EGG	!!c)nnq&8&8&8oadooo '9&8
 (I
 
 
 1vv}}}oooo}}}r   c                     d                     | j                  }| j        r| d}d                     | j                  }|r| d | }|S )Nrq  rr   -> )r   rn  r  r  )r   rn  r  s      r   r   zAnnotation.__str__  sb    HHT^,,	= 	($I((4#788 	@$?f?o??Ir   N)
r   r    r!   r   r"   r#   rX  r   rG   r   r%   r   r   rm  rm    s          S#XNNN38_$$$ 3  <       \ D      r   rm  c                       e Zd Zededd fd            Zededd fd            ZdefdZdddefdZ	defd	Z
defd
ZdefdZdefdZded         fdZdS )Typers  r   c                 ~    t                               |           }t          |          | k    sJ | d|              |S )Nr  )r{  _parser"   )rs  r   s     r   rG   z
Type.parse  s9    KKNN1vv{{{qMMaMM{{{r   c                    t          j        d|           }|:t          t                              |                    d                              S t          j        d|           }|u|                    d          "t          |                    d                    nd }t          t                              |                    d                    |          S t          j        d|           }|"t          |                    d                    S 	 t          t          |                    S # t          $ r}t          d|            |d }~ww xY w)Nz^(.+)\?$r  z^(.+)\[([0-9]+)?\]$rJ  )elemsizez-^__torch__\.torch\.classes\.([a-zA-Z0-9_.]+)$zunrecognized type )rj  rt  OptionalTyper{  rG   ru  r$   ListTypeCustomClassTyper$  r%  KeyErrorr  )rs  r  r  rj  s       r   r}  zType._parse  s)   H[!$$=

1771:: 6 6777H+Q//=&'ggajj&<3qwwqzz???$DAGGAJJ!7!7dCCCC HEqII="1771::...	@F1I&&& 	@ 	@ 	@7A7788a?	@s   D2 2
E<EEc                     t           r9   NotImplementedErrorr   s    r   r   zType.__str__      !!r   base_tyr%  c                     t           r9   r  r   r  s     r   is_base_ty_likezType.is_base_ty_like  r  r   c                 @    |                      t          j                  S r9   )r  r%  r&  r   s    r   is_tensor_likezType.is_tensor_like      ##FM222r   c                 @    |                      t          j                  S r9   )r  r%  	Generatorr   s    r   is_generator_likezType.is_generator_like  s    ##F$4555r   c                 @    |                      t          j                  S r9   )r  r%  SymIntr   s    r   is_symint_likezType.is_symint_like  r  r   c                     t           r9   r  r   s    r   is_nullablezType.is_nullable  r  r   r  c                     t           r9   r  r   s    r   is_list_likezType.is_list_like  r  r   N)r   r    r!   r   r"   rG   r}  r   rX  r  r  r  r  r  r
   r  r%   r   r   r{  r{    s=            \
 @# @& @ @ @ \@$" " " " ""x "D " " " "3 3 3 3 364 6 6 6 63 3 3 3 3"T " " " ""hz2 " " " " " "r   r{  c                      e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
 e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            ZdS )r%  N)r   r    r!   r   r  r   r&  r$   Dimname	DimVectorfloatr"   rX  LayoutDeviceDeviceIndexScalarMemoryFormatQSchemeStorageStreamr  ConstQuantizerPtrr%   r   r   r%  r%    s        IJTVVF
$&&CdffGIDFFE
$&&C466DTVVFTVVF$&&KTVVF466LdffGdffGTVVFTVVFr   r%  c                   f    e Zd ZU eed<   defdZdedefdZdefdZ	de
d         fdZdefd	Zd
S )r$  r;   r   c                     | j         j          S r9   r:   r   s    r   r   zBaseType.__str__-  s    ).""r   r  c                     | j         |k    S r9   r:   r  s     r   r  zBaseType.is_base_ty_like0  s    yG##r   c                     dS NFr%   r   s    r   r  zBaseType.is_nullable3      ur   r  c                     d S r9   r%   r   s    r   r  zBaseType.is_list_like6      tr   c                 ,    | j         t          j        k    S r9   )r;   r%  r  r   s    r   r  zBaseType.is_symint_like9  s    yFM))r   N)r   r    r!   r%  r#   r"   r   rX  r  r  r
   r  r  r%   r   r   r$  r$  )  s         
LLL# # # # #$v $$ $ $ $ $T    hz2    * * * * * * *r   r$  c                   f    e Zd ZU eed<   defdZdedefdZ	defdZ
defdZded         fd	Zd
S )r  r  r   c                     | j          dS )N?)r  r   s    r   r   zOptionalType.__str__B  s    )r   r  c                 6    | j                             |          S r9   r  r  r  s     r   r  zOptionalType.is_base_ty_likeE      y((111r   c                 4    | j                                         S r9   r  r  r   s    r   r  zOptionalType.is_symint_likeH      y'')))r   c                     dS )NTr%   r   s    r   r  zOptionalType.is_nullableK  r  r   r  c                 4    | j                                         S r9   )r  r  r   s    r   r  zOptionalType.is_list_likeN  s    y%%'''r   N)r   r    r!   r{  r#   r"   r   r%  rX  r  r  r  r
   r  r%   r   r   r  r  >  s         
JJJ    2v 2$ 2 2 2 2* * * * *T    (hz2 ( ( ( ( ( (r   r  c                   f    e Zd ZU eed<   defdZdedefdZdefdZ	defdZ
ded         fd	Zd
S )r  
class_namer   c                     d| j          S )zK
        Return the class name will prefix __torch__.torch.classes
        z__torch__.torch.classes.)r  r   s    r   r   zCustomClassType.__str__W  s     <$/;;;r   r  c                     dS r  r%   r  s     r   r  zCustomClassType.is_base_ty_like]  r  r   c                     dS r  r%   r   s    r   r  zCustomClassType.is_symint_like`  r  r   c                     dS )z8
        Assume a custom class is not nullable.
        Fr%   r   s    r   r  zCustomClassType.is_nullablec  s	     ur   r  c                     d S r9   r%   r   s    r   r  zCustomClassType.is_list_likei  r  r   N)r   r    r!   r"   r#   r   r%  rX  r  r  r  r
   r  r%   r   r   r  r  S  s         OOO< < < < <v $        T    hz2      r   r  c                   |    e Zd ZU eed<   ee         ed<   defdZde	de
fdZde
fdZde
fdZded          fd	Zd
S )r  r  r  r   c                 >    | j         r| j          nd}| j         d| dS )Nr*   [])r  r  )r   r  s     r   r   zListType.__str__y  s/    !%2$)~~)%%d%%%%r   r  c                 6    | j                             |          S r9   r  r  s     r   r  zListType.is_base_ty_like}  r  r   c                 4    | j                                         S r9   r  r   s    r   r  zListType.is_symint_like  r  r   c                 4    | j                                         S r9   )r  r  r   s    r   r  zListType.is_nullable  s    y$$&&&r   c                     | S r9   r%   r   s    r   r  zListType.is_list_like  s    r   N)r   r    r!   r{  r#   r
   r$   r"   r   r%  rX  r  r  r  r  r%   r   r   r  r  t  s         
JJJ
3-& & & & &2v 2$ 2 2 2 2* * * * *'T ' ' ' 'hz2      r   r  c                       e Zd ZU eed<   eed<   ee         ed<   ee         ed<   ededd fd            Z	e
defd            Zdefd	Zd
S )r  r;   r#  r<  r  r  r   c                 6   |                      dd          \  }}d|v r|                    d          \  }}n|}d }t          j        d|          }|rg|                    d          dv s
J d            d|                    d          z   }t
                              |                    d                    }n|}d }t                              |          }t          ||||	          }	t          |	          | k    sJ t          |	           d
|              |	S )Nr  r  =Tensor\((.+)\)(.*)rJ  r*   r  z[],unrecognized alias analysis form with Tensorr&  r;   r#  r<  r  r  )
rsplitr   rj  rt  ru  rm  rG   r{  r  r"   )
r  type_and_annotname_and_defaultr;   r<  rt  type_sr  r#  r   s
             r   rG   zArgument.parse  s?    ,/::c1+=+=((""",22377MD''#DG.?? 	;;q>> &    >	  
 A.F#))%++a..99JJ#FJzz&!!!	
 
 
 1vv}}}Q22S22}}}r   c                 ,    | j         d uo| j         j        S r9   r  r   s    r   r  zArgument.is_write      d*Gt/GGr   c                     | j          }| j        r%|dv sJ |                    dd| j         d          }| j        |S d}| j        r
d| j         }| d| j         | S )Nr&  zTensor?zTensor[]r&  Tensor(r  r*   r  r  )r#  r  rV  r;   r<  )r   r#  
mb_defaults      r   r   zArgument.__str__  s    )~? 	H<<<<<<<*FDO*F*F*FGGD9KJ| 0///
44TY4
444r   N)r   r    r!   r"   r#   r{  r
   rm  r   rG   r  rX  r  r   r%   r   r   r  r    s         
 III
JJJc]* $$$$ 3  :       \ D H$ H H H XH5 5 5 5 5 5 5r   r  c                       e Zd ZU ee         ed<   eed<   ee         ed<   ededd fd            Z	e
defd            ZdefdZd	S )
r  r;   r#  r  r  r   c                    d| v r|                      dd          \  }}n| }d }t          j        d|          }|rg|                    d          dv s
J d            d|                    d          z   }t                              |                    d                    }n|}d }t                              |          }t          |||          }t          |          | k    sJ t          |           d	|              |S )
Nr  r  r  rJ  r  r  r&  rM  r  )	r  rj  rt  ru  rm  rG   r{  r  r"   )r  r  r;   rt  r  r  r#  r   s           r   rG   zReturn.parse  s!    #::#&::c1#5#5 NDD ND.?? 	;;q>> &    >	  
 A.F#))%++a..99JJ#FJzz&!!!
 
 

 1vv}}}Q22S22}}}r   c                 ,    | j         d uo| j         j        S r9   r  r   s    r   r  zReturn.is_write  r  r   c                     | j          }| j        r%|dv sJ |                    dd| j         d          }| j        |S | d| j         S )Nr  r&  r  r  r  )r#  r  rV  r;   )r   r#  s     r   r   zReturn.__str__  sl    )~? 	H<<<<<<<*FDO*F*F*FGGD9K((TY(((r   N)r   r    r!   r
   r"   r#   r{  rm  r   rG   r  rX  r  r   r%   r   r   r  r    s         
3-
JJJ$$$$3 8    \< H$ H H H XH) ) ) ) ) ) )r   r  c                       e Zd ZU eed<   dS )SelfArgumentr.  N)r   r    r!   r  r#   r%   r   r   r  r    s         r   r  c                   P    e Zd ZU eed<   eed<   eed<   eed<   dee         fdZdS )TensorOptionsArgumentsdtypelayoutdevice
pin_memoryr   c                 6    | j         | j        | j        | j        gS r9   r  r  r  r  r   s    r   allzTensorOptionsArguments.all!  s    
DKdoFFr   N)r   r    r!   r  r#   r   r  r%   r   r   r  r    sj         OOOGXh' G G G G G Gr   r  c            	       j   e Zd ZU eedf         ed<   ee         ed<   eedf         ed<   eedf         ed<   ee         ed<   eedf         ed<   eedf         ed<   e	d	e
e         fd
            Ze	d	e
e         fd            Ze	d	e
e         fd            Ze	d	e
e         fd            Ze	d	e
e         fd            Ze	d	e
eeeef                  fd            Ze	d	e
eeef                  fd            Ze	d	e
eeef                  fd            Ze	d	e
eeeef                  fd            Zd	ee         fdZd	efdZd	efdZd	efdZddded	d fdZd$dZdee         d	d fdZeded	eee         ee         ee         f         fd            Z eded	d fd             Z!d	efd!Z"d%d#Z#d"S )&r  .pre_self_positionalr-  r<  pre_tensor_options_kwarg_onlyrc  post_tensor_options_kwarg_onlyr  r   c                 r    g }|                     | j                   |                     | j                   |S r9   )extendr
  r  r   r  s     r   flat_non_outzArguments.flat_non_out<  s6     

4'(((

4'(((
r   c                     g }|                     | j                   | j        |                    | j        j                   |                     | j                   |S r9   )r  r  r-  r   r.  r<  r  s     r   r
  zArguments.flat_positionalC  sU     

4+,,,=$JJt}-...

4,---
r   c                 $    d | j         D             S )Nc                      g | ]}|j         	|S r%   )r  r  s     r   r3   z:Arguments.post_self_positional_mutable.<locals>.<listcomp>N  s    CCCa
CCCCr   )r<  r   s    r   r,  z&Arguments.post_self_positional_mutableL  s    CC44CCCCr   c                     g }|                     | j                   | j        ,|                     | j                                                   |                     | j                   |S r9   )r  r  rc  r  r  r  s     r   r  zArguments.flat_kwarg_onlyQ  s`     

45666*JJt*..00111

46777
r   c                     g }|                     | j                   |                     | j                   |                     | j                   |S r9   )r  r
  r  r  r  s     r   r  zArguments.flat_allZ  sJ     

4'(((

4'(((

48
r   c                 r    g }|                     | j                   |                     | j                   |S r9   )r  
positional
kwarg_onlyr  s     r   non_outzArguments.non_outb  s8     LN

4?###

4?###
r   c                     g }|                     | j                   | j        |                    | j                   |                     | j                   |S r9   )r  r  r-  r   r<  r  s     r   r  zArguments.positionalk  sR    35

4+,,,=$JJt}%%%

4,---
r   c                     g }|                     | j                   | j        |                    | j                   |                     | j                   |S r9   )r  r  rc  r   r  r  s     r   r  zArguments.kwarg_onlyt  sT    =?

45666*JJt*+++

46777
r   c                     g }|                     | j                   |                     | j                   |                     | j                   |S r9   )r  r  r  r  r  s     r   r  zArguments.all}  sH    KM

4?###

4?###

48
r   c                 $    d | j         D             S )Nc                 B    g | ]}|j         	|j         j        |j        S r9   )r  r  r;   r  s     r   r3   z/Arguments.mutable_arg_names.<locals>.<listcomp>  s6     
 
 
|'AL,A' F'''r   )r  r   s    r   mutable_arg_nameszArguments.mutable_arg_names  s%    
 
]
 
 
 	
r   c                 >    t          d | j        D                       S )Nc              3   H   K   | ]}|j                                         V  d S r9   )r#  r  r  s     r   r  z+Arguments.has_tensor_arg.<locals>.<genexpr>  0      FFq16((**FFFFFFr   r  r  r   s    r   rd  zArguments.has_tensor_arg  "    FFD4EFFFFFFr   c                 >    t          d | j        D                       S )Nc              3   H   K   | ]}|j                                         V  d S r9   )r#  r  r  s     r   r  z+Arguments.has_symint_arg.<locals>.<genexpr>  r  r   r  r   s    r   rf  zArguments.has_symint_arg  r  r   c                 >    t          d | j        D                       S )Nc              3   H   K   | ]}|j                                         V  d S r9   )r#  r  r  s     r   r  z.Arguments.has_generator_arg.<locals>.<genexpr>  s0      II!16++--IIIIIIr   r  r   s    r   r  zArguments.has_generator_arg  s"    IIt7HIIIIIIr   FrS  rH  c                   dt           dt           ffd}t          t          t          || j                            | j        "t           || j        j                            nd t          t          || j                            t          t          || j	                            t          t          || j
                            z   d t                      d          S )Nr  r   c                 P    t          | j        | j        s| j        nd d           S )Nr  )r  r;   r#  r<  )r  rH  s    r   strip_arg_annotationz1Arguments.signature.<locals>.strip_arg_annotation  s5    VV)6@		D	   r   r%   r  r-  r<  r  rc  r  r  )r  r  rW  rX  r  r-  r  r.  r<  r  r  )r   rH  r  s    ` r   r  zArguments.signature  s   	H 	 	 	 	 	 	 	  %($*BCC! ! }( ""6"6t}7M"N"NOOO!&($*CDD" "
 +0($*LMM+ + C,d.QRRSS+T  +077+
 
 
 	
r   c           	          | j         J t          j        | t          t          j        | j         j        d                               S )Nr  )r-  )r-  dataclassesrV  r  r.  r   s    r   remove_self_annotationz Arguments.remove_self_annotation  sR    }((("!#DM$:tLLL 
 
 
 	
r   rD  c                 |    t          | j                  dk    sJ t          j        | t	          |                    S )Nr   )r  )rY  r  r  rV  rW  )r   rD  s     r   with_out_argszArguments.with_out_args  sA    48}}!!!!"d
 
 
 	
r   r  c                 (   g }g }g }|}|                      d          D ]p}|s|dk    r||u s
J d            |}t                              |          }|j        |j        j        r||u rn||u r|}n||usJ |                    |           q|||fS )Nr   r  z:invalid syntax: kwarg-only specifier * can only occur once)r   r  rG   r  r  r   )r  r  r  r  arguments_accr  pargs          r   	_preparsezArguments._preparse  s    %'
%'
 " ::d## 	' 	'C czz!Z///O 0// *>>#&&D *t/G* J.."j00$'M$C////  &&&&:s**r   c                    t                               |           \  }}}d}t          |          D ]\  }}|j        dk    r|} n|-|d|         }t	          ||                   }||dz   d         }	ng }d}|}	g }
d}g }|
}dt
          dt          dt          t          gt          f         fd} |dt          
                    d	                     |d
t          
                    d                     |dt          
                    d                     |dt          
                    d                    g}d}|t          |          k     r|t          |          t          |          z
  k    rt          d t          ||||t          |          z                      D                       rO||
u sJ t          ||         ||dz            ||dz            ||dz                      }|t          |          z  }|}|                    ||                    |dz  }|t          |          k     t          t!          |          |t!          |	          t!          |
          |t!          |          t!          |                    S )z.
        Input: 'int x, int y, int z'
        Nr   r  r;   tyr   c                       fdS )Nc                 J    | j         k    o| j        t                    fv S r9   )r;   r#  r  )r  r;   r  s    r   <lambda>z/Arguments.parse.<locals>.pred.<locals>.<lambda>	  s&    QVt^P2|B?O?O:P0P r   r%   )r;   r  s   ``r   predzArguments.parse.<locals>.pred	  s    PPPPPPr   r  r   r  r  r  r  r  rX  r   c              3   2   K   | ]\  }} ||          V  d S r9   r%   )r1   pr  s      r   r  z"Arguments.parse.<locals>.<genexpr> 	  sB        1 AaDD     r   rJ  rB  r  r  )r  r  	enumerater;   r  r"   r{  r   r  rX  rG   rY  r  r+  r  r   rW  )r  r  r  r  self_ixir  r  r-  r<  r  rc  r  kwarg_only_accr  
predicatess                   r   rG   zArguments.parse  s    '0&9&9$&?&?#
J j)) 	 	DAqv   ",XgX"6#Jw$788H#-gkmm#<  "$H#-  9;%;?9;&6	Qs 	Q 	Q8*d2B)C 	Q 	Q 	Q 	Q D$**\2233D4::h//00D4::h//00Dtzz&1122	

 #j//!!C
OOc*oo555   #J
1q3z???R;R0S T T      *-JJJJJ%;(m)!a%0)!a%0#-a!e#4	& & &N Z(A%CN!!*Q-000FA) #j//!!,  %&9 : :!&';!<!<*/0M*N*N)+01O+P+Pc


 
 
 	
r   c                    g }|                     t          t          | j                             | j        s| j        r|                    d           |                     t          t          | j                             |                     t          t          | j                             d                    |          S )Nr  r   )r  rX  r"   r
  r  r  r   r   )r   all_argumentss     r   r   zArguments.__str__<	  s    #%Sd&:;;<<< 	&48 	&  %%%Sd&:;;<<<Sdh//000yy'''r   Nc                     | j         	| j        rJ | j        	| j        rJ d | j        D             }t	          |          dk    s
J d            d S )Nc                 8    g | ]}|j         	|j         j        |S r9   r  r  s     r   r3   z+Arguments.__post_init__.<locals>.<listcomp>O	  s4     (
 (
 (
|'AL,A' '''r   r   zOmutable pre_self_positional arguments are not currently supported in the schema)r-  r  rc  r  rY  )r   mutable_pre_self_positionalss     r   r  zArguments.__post_init__E	  s     = ////&::::(
 (
-(
 (
 (
$ ,--222\ 32222r   )r   r  r  )$r   r    r!   r   r  r#   r
   r  r  r  r   r  r
  r,  r  r  r   r  r  r  r  r	   r"   r   rX  rd  rf  r  r  r  r  r   r  rG   r   r  r%   r   r   r  r  %  s        
 x}----|$$$$#....#(3#777734444 %*(C-$8888 
x}	hx0    X (!3    X Dhx.@ D D D XD (!3    X (8,    X 	%,0FFG	H   X HU8\+A%BC    X HU85K+K%LM    X XeHl<R$RST    X
49 
 
 
 
G G G G GG G G G GJ4 J J J J 27 !
 !
 !
$ !
; !
 !
 !
 !
F
 
 
 

$x. 
[ 
 
 
 
 !+ !+d8nd8nd8n&T U !+ !+ !+ \!+F M
C M
K M
 M
 M
 \M
^( ( ( ( (] ] ] ] ] ]r   r  )r   submuldivmodpowlshiftrshiftandxororc                   h    e Zd ZU eed<   eed<   eed<   dZeed<   ededd fd            Zdefd	Z	d
S )rY  r  r  rU  Fr  r  r   c                 d   | dk    sJ |                      d          r
J d            t          j        d|           }|Ud}|                    d          t	          fdt
          D                       rd}dd          n0d}d	         d
k    sJ nd}| d         dk    rd}d d         nd}d}                     |          r!d}d t          |                    |s|rJ nd}t          |||          }t          |          | k    sJ t          |           d|              |S )Nr*   rR  zs_out suffix is reserved and not permitted for operator names; did you mean to specify an out overload name instead?z^__([^_]+)__$Tr  c              3   *   K   | ]}d | k    V  dS )r!  Nr%   )r1   nr  s     r   r  z)BaseOperatorName.parse.<locals>.<genexpr>	  s-      GGq47q77?GGGGGGr   Fr   r!  r  __functional)r  r  rU  r  r  )	ra  rj  rt  ru  r  AUGMENTED_ASSIGNMENT_NAMESrY  rY  r"   )r  r  rU  r  functional_suffixr  r   r  s          @r   rG   zBaseOperatorName.parse	  s   Rxxxx;;v&& 	
 	
D	
 	
& H%r**= M771::DGGGG,FGGGGG 	&ABBx
 Aw#~~~~~!MDBx3CRCy *==*++ 	("&13011112D %4W4444"'' 3	
 
 
 1vv|||A00B00|||r   c                 ~    | j         r| j        rdnd}d| | j         dS | j        rdn
| j        rdnd}| j         | S )Nr!  r*   __r7  r8  )rU  r  r  r  )r   r!  s     r   r   zBaseOperatorName.__str__	  ss     	%|+A((49(((( < +]]  i$$$$r   N)
r   r    r!   r"   r#   rX  r  r   rG   r   r%   r   r   rY  rY  q	  s         
IIIMMM( !&%%%/# /, / / / \/b% % % % % % %r   rY  c                   t    e Zd ZU eed<   eed<   ededd fd            ZdefdZdefdZ	ddZ
d	edd fd
ZdS )r$  r;   r6  r  r   c                     d| v r|                      dd          \  }}n| }d}t          t                              |          |          }t	          |          | k    sJ t	          |           d|              |S )N.r  r*   r5  r  )r   r$  rY  rG   r"   )r  r;   r6  r   s       r   rG   zOperatorName.parse	  s    '>>")--Q"7"7D--DM.44T::-XXX1vv   SVV":":":":   r   c                 B    | j         r| j         d| j          S | j         S )Nr?  r6  r;   r   s    r   r   zOperatorName.__str__	  0     	"i66$"4666i>!r   c                 B    | j         r| j         d| j          S | j         S )Nr7  rA  r   s    r   unambiguous_namezOperatorName.unambiguous_name	  rB  r   c                 v    t          t          | j        j        d| j        j                  | j                  S NFrT  r5  )r$  rY  r;   r  rU  r6  r   s    r   remove_inplacezOperatorName.remove_inplace	  sE    !Y^"i5  
 ,
 
 
 	
r   overloadc                 l    t          t          | j        j        d| j        j                  |          S rF  )r$  rY  r;   r  rU  )r   rH  s     r   with_overloadzOperatorName.with_overload	  sB    !Y^"i5  
 #
 
 
 	
r   N)r   r$  )r   r    r!   rY  r#   r"   r   rG   r   rD  rG  rJ  r%   r   r   r$  r$  	  s         
s ~    \" " " " ""# " " " "
 
 
 

c 
n 
 
 
 
 
 
r   r$  r  r  bc                     | j                                         t          j        uo/|                    |            o|                    |j                  S r9   )r  r  r  r  r  )r  r  rK  s      r   "gets_generated_out_inplace_wrapperrM  
  sI     	
Z22 	'Q	'LL&&r   c                       e Zd ZU eed<   ee         ed<   ee         ed<   ddZddd	edee         fd
Z	e
defd            Ze
defd            ZdS )NativeFunctionsViewGroupview	view_copyview_inplacer   Nc                    | j         j        sJ | j        St          | j                   r>J t	          | j         j        j                   dt          | j                   d            n| j        j        j        j        j        	                    d          sJ | j         j        
                                | j        j        
                    d          k    sJ d| j        j        v sBJ t	          | j        j        j                  t	          | j         j                  f d            | j        @| j         j        
                                | j        j        
                                k    sJ | j         j        r[| j        T| j        j        sHJ t	          | j         j        j                   dt	          | j        j        j                   d	            | j         j        r[| j        V| j        j        sLJ t	          | j         j        j                   dt	          | j        j        j                   d
            d S d S d S )Nz appears to be a new operator that aliases its inputs. The codegen expects you to add a corresponding operator to native_functions.yaml: z3. See Note [view_copy NativeFunctions] for details.rO  Tr_  rQ  z appears to be a view_copy operator. The codegen expects view_copy operators to be annotated with the 'view_copy' tag in native_functions.yaml. See Note [view_copy NativeFunction] for details.r  z] must either both have CompositeImplicitAutograd kernels, or both not have composite kernels.zi must either both have CompositeImplicitAutogradNestedTensor kernels, or both not have composite kernels.)rP  r  rQ  gets_generated_view_copyr"   r  r;   get_view_copy_namer  ra  r  r3  rR  r/  r0  r   s    r   r  z&NativeFunctionsViewGroup.__post_init__#
  s   y####>!/	::  ty~*++ E E&ty11E E E :  >&+05>>wGGGGG9>++--1D1N1N%) 2O 2 2     $."5555t~*/00#din2E2EF D D D 655
 (9>++--1B1G1Q1Q1S1SSSSS9; 	 ,(O  49>.// h hc$:K:P:U6V6V h h h O 9I 	 ,%Z  49>.// t tc$:K:P:U6V6V t t t Z	 	,, r   T)include_copyrV  c             #   h   K   | j         V  | j        	| j        V  | j        |r| j        V  d S d S d S r9   )rP  rR  rQ  )r   rV  s     r   r  z"NativeFunctionsViewGroup.functionsH
  sX      i(####>%,%.      &%%%r   c                     | j         j        S r9   )rP  r  r   s    r   r  z"NativeFunctionsViewGroup.root_nameO
  s    y""r   c                     | j         j        S r9   )rP  r/  r   s    r   	compositez"NativeFunctionsViewGroup.compositeS
  s     y??r   r  )r   r    r!   r  r#   r
   r  rX  r   r  r  r"   r  rZ  r%   r   r   rO  rO  
  s         
 ''''>****# # # #J 15 ! ! ! !.9Q ! ! ! ! #3 # # # X# @4 @ @ @ X@ @ @r   rO  c                 @    | j         sdS | j        rdS d| j        v rdS dS )NFr  T)r  r/  r3  )r  s    r   rT  rT  Z
  s:    < u 	/ uu4r   c                    dg}t          | j        j                  |vrt          |           sJ | j        j        j        j         d}t          t          |d| j        j        j        j                  | j        j        j                  }|S )NnarrowrO  FrT  r5  )	r"   r  r;   rT  r  r$  rY  rU  r6  )r  -list_of_ops_with_explicit_view_copy_operatorsrZ  view_copy_names       r   rU  rU  j
  s     6>J1
16;LLL'*****6;#(///I!E9I9W
 
 
 fk/	  N r   r  .c                     | dk    rdS | d         dk    r| d         dk    r
| dd         } t          d |                     d	          D                       S )
z$
    Input: '()'
    Output: []
    z()r%   r   r  r  r  r  c              3   J   K   | ]}t                               |          V  d S r9   )r  rG   r  s     r   r  z parse_returns.<locals>.<genexpr>
  s.      FFsc""FFFFFFr   r   )rW  r   )r  s    r   r  r  
  sj    
 dr1~RC!7!7!!B$'FFk.?.?.E.EFFFFFFr   c                       e Zd ZU eeee         f         ed<   ee         ed<   ede	dd fd            Z
d	dZdee         fdZdS )
r+  rV  r   srcr   c                    t          | t                    sJ g }d| d         vr1| d                             d          }d |D             }| d d         } i }| D ]e}t          |t                    sJ d|v s
J d            |                    d          \  }}|                    d          }d |D             }|||<   ft	          ||          }	|	                                | k    s
J d            |	S )	Nry  r  rA  c                 f    g | ].}t                               |                                          /S r%   r  rG   r\  r1   r;   s     r   r3   z$Precompute.parse.<locals>.<listcomp>
  s,    JJJtzz||44JJJr   zLprecomputed parameters without replacement are allowed only in the last linec                 f    g | ].}t                               |                                          /S r%   rf  rg  s     r   r3   z$Precompute.parse.<locals>.<listcomp>
  s,    QQQthnnTZZ\\::QQQr   )rV  r   zr.to_list() != src)rR  rV  r   r"   r+  to_list)
rc  add_argsadd_listrV  raw_replace_itemr  with_list_raw	with_listwith_list_argsr   s
             r   rG   zPrecompute.parse
  s2   #t$$$$$ R  2w}}S))HJJJJJHcrc(C # 
	* 
	*.44444----5 .--
 "2!7!7!?!?C%++C00IQQyQQQN)GCLLwH555yy{{c!!!#7!!!r   Nc                     | j         D ]&}|j                                        |j        k    sJ '| j                                        D ]+}|D ]&}|j                                        |j        k    sJ ',d S r9   )r   r;   upperrV  r   )r   r  r  s      r   r  zPrecompute.__post_init__
  s      	, 	,A6<<>>QV+++++L'')) 	0 	0D 0 0v||~~/////0	0 	0r   c                     g }| j                                         D ]>\  }}d                    d |D                       }|                    | d|            ?|S )Nr   c              3   4   K   | ]}t          |          V  d S r9   r  )r1   params     r   r  z%Precompute.to_list.<locals>.<genexpr>
  s(      $P$PESZZ$P$P$P$P$P$Pr   ry  )rV  rB   r   r   )r   replace_listkernel_paramreplacement_paramsreplacementss        r   ri  zPrecompute.to_list
  sx    040B0B0D0D 	E 	E,L,99$P$P=O$P$P$PPPL< C C\ C CDDDDr   r  )r   r    r!   r   r"   r	   r  r#   r   r  rG   r  ri  r%   r   r   r+  r+  
  s          #tH~%&&&&	h6 l    \B0 0 0 0c      r   r+  )or  r  rj  r   enumr   r   typingr   r   r   r	   r
   r   r   r   r   torchgen.utilsr   r   r   r   r'   re  r   r   r   AUTOGRAD_KEYSFRAGMENT_NAMESPACESr7   r   r"   r   r   r   hasattrr   printr  rw   rs   rr   r   r   r   rT   rS   r   rU   r   r   rm   rn   ro   rp   r   r   r}   r   r   r   rY   r]  rX  r   r   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r7  r&  r  r  rm  r{  r%  r$  r  r  r  r  r  r  r  r  r9  rY  r$  rM  rO  rT  rU  r  r+  r%   r   r   <module>r     s=            				 ! ! ! ! ! !         X X X X X X X X X X X X X X X X X X X X X X D D D D D D D D D D8 $* * * * * * * *    d    (  nssuu LLL  (( , ,,>, , ,  #$:; 
L> L> L> L> L>$ L> L> L>^    D   S       B   w{BG,, 	++--AE!HHH,t2trttqrtt  	 (O[-={O "'9  OO)5)6   /:     [ T    *; *4 * * * *%k %d % % % %+ + + + + + + +\ 46tCJ//0 5 5 5&J j  'J
(8*:K'LMMj %:j67 i  %Z0=3LLe !.u!5i8P!Po *i 88 " #; ; ; ; ;t ; ; ;4    d   
    T   $ $[	G [	G [	G [	G [	G [	G [	G [	G|        $s
 s
 s
 s
 s
 s
 s
 s
l $( ( ( ( ( ( ( (, $
 
 
 
 
 
 
 
6 $8 8 8 8 8 8 8 8` $d@ d@ d@ d@ d@ d@ d@ d@^ $1 1 1 1 1 1 1 1t $2" 2" 2" 2" 2" 2" 2" 2"l    T   , $* * * * *t * * *( $( ( ( ( (4 ( ( (( $    d   @ $    t   * $O5 O5 O5 O5 O5 O5 O5 O5d $0) 0) 0) 0) 0) 0) 0) 0)h $        $G G G G G G G G $p] p] p] p] p] p] p] p]l	   * $W% W% W% W% W% W% W% W%x $2
 2
 2
 2
 2
 2
 2
 2
j.3?	   * $=@ =@ =@ =@ =@ =@ =@ =@@ 4     . ^    0	Gs 	GuVS['9 	G 	G 	G 	G $8 8 8 8 8 8 8 8 8 8r   