
    Yh߾                      U d dl mZ 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 d dlmZ d dlmZmZ erd dl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dpd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(        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=        ej>        ej?        ej@        ejA        ejB        ejC        ej*        gZDdqd!ZEdqd"ZFdqd#ZGdqd$ZHdqd%ZIeFd&eGd'iZJ G d( d)e          ZKi ZLd*eMd+<    eeKjN        eKjO        eKjP        eKjQ        eKjR        g          eLd,<    eeKjS        eKjT        g          eLd-<    eeKjU        eKjV        g          eLd.<   eLd,         eLd-         z  eLd/<   eLd/         eLd.         z  eLd0<   eLd-         eLd.         z  eLd1<    G d2 d3e          ZW G d4 d5e          ZX G d6 d7e          ZY ed	
           G d8 d9                      ZZ G d: d;e          Z[ ed	
           G d< d=                      Z\ ed	
           G d> d?                      Z] ed	
           G d@ dA                      Z^ ed	
           G dB dC                      Z_ ed	
           G dD dE                      Z` ed	
           G dF dG                      Za ed	
           G dH dI                      Zb G dJ dKe          Zc ed	
           G dL dMeb                      Zd ed	
           G dN dOeb                      Ze ed	
           G dP dQeb                      Zf ed	
           G dR dSeb                      Zg ed	
           G dT dU                      Zh ed	
           G dV dW                      Zi ed	
           G dX dY                      Zj ed	
           G dZ d[                      Zk ed	
           G d\ d]                      Zlg d^Zm ed	
           G d_ d`                      Zn ed	
           G da db                      ZodrdfZp ed	
           G dg dh                      ZqdsdiZrdtdjZsdudmZt ed	
           G dn do                      ZudS )v    )annotationsN)	dataclass)autoEnum)CallableOptionalTYPE_CHECKING)assert_never)NamespaceHelper
OrderedSet)IteratorSequenceT)frozenc                  ,    e Zd ZU ded<   ded<   ddZdS )	Locationstrfileintlinereturnc                $    | j          d| j         S )N:)r   r   selfs    `/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torchgen/model.py__str__zLocation.__str__1   s    )))di)))    Nr   r   )__name__
__module____qualname____annotations__r    r   r   r   r   ,   s<         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%   6   s$        tvvHTVVFFFr   r%   z
at::nativezVCPU CUDA HIP XLA MTIA MPS IPU XPU HPU VE Lazy Meta PrivateUse1 PrivateUse2 PrivateUse3) 	QuantizedSparse	SparseCsrNestedTensorAutogradAutogradNestedTensorc                    g | ]}d |z   S )r-   r#   ).0	components     r   
<listcomp>r2   K   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| 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            Zd	dZd	dZed
d            ZdS )DispatchKeyr   r   r   c                    | j         S Nnamer   s    r   r   zDispatchKey.__str__   
    yr   c                D    t          |                                           S r8   )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 )r6   __members__itemsAssertionErrorr>   kvs      r   parsezDispatchKey.parse   sR    +1133 	 	DAqEzz <U<<===r   Nr   )r>   r   r   r6   )r   r    r!   	UndefinedCatchAllr   FPGAMAIAVulkanMetalMKLDNNOpenGLOpenCLIDEEPCustomRNGKeyId	MkldnnCPUr*   r+   r,   DensePythonTLSSnapshotPreDispatchPythonDispatcherPythonFuncTorchDynamicLayerBackMode
ZeroTensor	ConjugateNegativeBackendSelectNamedAutogradOtherAutogradFunctionalityr.   TracerAutocastAutocastCPUAutocastCUDA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SparseCsrCPUSparseCsrCUDASparseCsrHIPSparseCsrXLASparseCsrMTIASparseCsrMPSSparseCsrIPUSparseCsrXPUSparseCsrHPUSparseCsrVESparseCsrLazySparseCsrMetaSparseCsrPrivateUse1SparseCsrPrivateUse2SparseCsrPrivateUse3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=   staticmethodrF   r#   r   r   r6   r6   T   sz       IH466D466DTVVFDFFETVVFTVVFTVVFDFFETVVNITVVFI466LDFFE$&&KtvvTVVF$(DFF!JItvvHDFFMDFFEDFFM DFF466TVVFtvvH$&&K466L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466LDFFM466L466LDFFM466L466L466L466L$&&KDFFMDFFM466466466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$&&$&&$&&   ! ! ! ! > > > \> > >r   r6   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   r   c                     g } t           D ](|                     fdt          D                        )d                    |           S )Nc              3  (   K   | ]}d  | dV  dS )z    z	 = auto()Nr#   )r0   bcfks     r   	<genexpr>z.codegen_per_backend_entries.<locals>.<genexpr>   s4      GGb))B)))GGGGGGr   
)FUNCTIONALITY_KEYSextendBACKEND_COMPONENTSjoin)rr   s    @r   codegen_per_backend_entriesr      sT    A  H H	GGGG4FGGGGGGG99Q<<r   zMissing zL from DispatchKey enum.  Here is the autogenerated list we expect to have:

dkboolc                b    | t           j        t           j        t           j        t           j        hv S r8   r6   rq   rr   ro   rp   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 r8   )r6   ru   r   r   r   r   r   r   s    r   is_cuda_dispatch_keyr   E  s8    !!$   r   c                    | t           j        t           j        t           j        t           j        t           j        t           j        hv S r8   )r6   r{   r   r   r   r   r   r   s    r   is_xpu_dispatch_keyr   Q  s7      #  r   c                    | t           v S r8   )STRUCTURED_DISPATCH_KEYSr   s    r   is_structured_dispatch_keyr   ^  s    )))r   c                    | t           v S r8   )UFUNC_DISPATCH_KEYSr   s    r   is_ufunc_dispatch_keyr   b  s    $$$r   cudaxpuc                     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ddZedd            Zedd            Zedd
            ZdS )
ScalarTyper   r   c                    | j         S r8   r9   r   s    r   r   zScalarType.__str__  r;   r   r>   ScalarType | Nonec                b    t           j                                        D ]\  }}|| k    r|c S d S r8   )r   r@   rA   rC   s      r   maybe_parsezScalarType.maybe_parse  s@    *0022 	 	DAqEzz tr   c                X    t                               |           }|J d|              |S )Nzunknown dtype )r   r   )r>   mb_rs     r   rF   zScalarType.parse  s7    %%e,,!9%!9!9r   valuesOrderedSet[ScalarType]c                    t                      }|                     d          D ]Y}|t          v r!|                    t          |                    ,|                    t
                              |                     Z|S )N, )r   splitDTYPE_CLASSESupdateaddr   rF   )r   dtypesr>   s      r   	parse_setzScalarType.parse_set  ss    )3\\$'' 	4 	4E%%mE23333

:++E223333r   Nr   )r>   r   r   r   )r>   r   r   r   )r   r   r   r   )r   r    r!   r   ByteCharShortIntLongHalfFloatDoubleComplexHalfComplexFloatComplexDoubleBoolBFloat16Float8_e5m2Float8_e5m2fnuzFloat8_e4m3fnFloat8_e4m3fnuzFloat8_e8m0fnur   r   r   rF   r  r#   r   r   r   r   k  sN       466D466DDFFE
$&&C466D466DDFFETVVF$&&K466LDFFM466DtvvH$&&KdffODFFMdffOTVVN       \    \
    \  r   r   z!dict[str, OrderedSet[ScalarType]]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dZedd            ZdS )	UfuncKeyr   r   c                    | j         S r8   r9   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  r@   rA   rB   rC   s      r   rF   zUfuncKey.parse  sR    (..00 	 	DAqEzz 9%99:::r   Nr   )r>   r   r   r  )r   r    r!   r   CUDAFunctorCUDAFunctorOnOtherCUDAFunctorOnSelf	CPUScalar	CPUVector
ScalarOnlyGenericr   r   rF   r#   r   r   r  r    s         $&&KII JdffG    ; ; ; \; ; ;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 ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d
ed<   ded<   ded<   ded<   ded <   ded!<   ded"<   ded#<   ded$<   e	 d7d8d-            Zd9d/Zd9d0Zed:d1            Z	ed:d2            Z
ed;d4            Zed<d5            Zed:d6            Zd%S )=NativeFunctionr   	namespaceFunctionSchemafuncr   !use_const_ref_for_mutable_tensorsdevice_guardr(  device_check
str | Nonepython_modulecategory_overridezset[Variant]variantsmanual_kernel_registrationmanual_cpp_bindingr   loczlist[OperatorName]autogenzdict[UfuncKey, UfuncInnerLoop]ufunc_inner_loop
structuredzOperatorName | Nonestructured_delegatestructured_inheritszPrecompute | Noneprecomputedset[str]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dict[str, object]
valid_tagsignore_keysset[DispatchKey] | Noner   Mtuple[NativeFunction, dict[DispatchKey, dict[OperatorName, BackendMetadata]]]c                  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 |
r7j        j        r
J d
            |                    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        v 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}|t0                              |          }|                    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t2                              |          nd}|                    d"g           }t          |t                    r|g}t          |t                    sJ |dk    rd#|v r|                    d#           t                      }|D ]B}t7          |          d$k    sJ ||v r|                    |           1t)          d%|           d$d&lm} |                    d'd          }|t          |t<                    s
J |            i } d$}!||r
J d(            d	}"|                                D ]B\  }#}|#d)k    rt          |#t                    sJ d*|# d+|             t          |t                    sJ d,| d+|             |#                    d-          D ]}$t@                              |$!                                          }%|!dz  }!|r|%|v r:|%tD          v sJ d.|% d/| d0            t	          j        |d12          }|                    d3          }&tG          |j	        |otI          |%          |&d4z   5          | |%<   |%t@          j%        u r||&                    7          k    rd}"֐D|!dk    r|"r
J d6            |s| '                                t@          j%        hk    s^| t@          j%                 (                                s:|!dk    s4J d7|&                    7           d8| t@          j%                  d9            n|s|t          7j&        j&                  }'|')                    d:          s:|'*                    d;          s%7j        j+        r'7j        ,                                sJ d<|' d=            tG          |&                    7          d	tZ          >          | t@          j%        <   d? | D             }(t7          |(          dk    s9t7          |(          d@k    rt@          j.        |(vrt@          j/        |(v s
J dA            |                    dBdC          })t          |)t                    sJ |)dCk    rg ndD |)                    d          D             }*|                    dEi           }+i },t          |+t                    r3t`                              |+tb          j2                  |,tb          j2        <   nt          |+t<                    r|+                                D ]\  }$}-|$d)k    rt          |$t                    sJ dF|$             t          |-t                    sJ dG|             tb                              |$          }.t`                              |-|.          |,|.<   nt)          dH|+           |,r^|s
J dI            d$dl3m4c m5}/ tl          D ]A}%|%| vsJ dJ|%             tG          |/7                    7|%          dtZ          5          | |%<   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@          j8        | v }3t@          j.        | v }47fdK|                                 D             }5|                    d)d           |rJ dL|             |tr          D ]}6|6| vsJ dM|6 dN            tu          dVi d7d|
d|d|d|d|d!|dB|*dE|,d|d|d|d |d|d|dO|d|	dP|0dQ|1dR|2dS|3dT|4d"|dU||5fS )Wzp
        Parse a NativeFunction from a dictionary as directly parsed
        from native_functions.yaml
        r5  znot a str: r)  )namespaced_entity	max_levelaten)defaultrG  r6  Fz4see https://github.com/pytorch/pytorch/issues/145522r<  r&   r   r'   zillegal variant r=  znot a bool: r>  r7  Tr8  Nzillegal device_check: rB  rC  ::zbnamespace is not supported in structured delegate, using the same namespace as the native functionrD  zbnamespace is not supported in structured inherits, using the same namespace as the native functionr:  z&functions in modules cannot be methodsr;  rE  rM  pt2_compliant_tagr   zillegal tag )cppdispatchzncannot specify both manual_kernel_registration and dispatch; with manual registration, dispatch has no effect!__line__zillegal dispatch key 'z' in zillegal dispatch value ',zDispatch key z of kernel z! is not a supported dispatch key.   )rV  atz::native)kernelrB  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__)rB  rb  c                    g | ]D}|t           j        k    s0|t           j        k    s |t           j        k    s|t           j        k    B|ES r#   r   )r0   ds     r   r2   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#   )OperatorNamerF   r0   xs     r   r2   z,NativeFunction.from_yaml.<locals>.<listcomp>Z  s&    IIIA,$$Q''IIIr   rA  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#   r9   )r0   rD   rE   r5  s      r   
<dictcomp>z,NativeFunction.from_yaml.<locals>.<dictcomp>  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?  rH  rI  rJ  rK  rL  r3  r#   );copypop
isinstancer   r   from_namespaced_entityget_cpp_namespacer4  rF   entity_namelistsetr   	argumentsoutr   r  r%   r&   r'   rB   r(  r@   r+  ri  
Precomputeappendlentorchgen.apir[  dictrA   r6   stripdispatch_keysBackendMetadatar   ro   r:   keyssupports_symint
startswithendswithtensor_optionshas_tensor_argDEFAULT_KERNEL_NAMESPACErr   rp   UfuncInnerLoopr  r&  torchgen.api.ufuncapiufuncr   schema_kernel_namerq   r   r2  )8rN  r?  rP  rQ  efuncsnamespace_helperr3  cpp_no_default_args_listrG  r6  
variants_sr<  rE   r=  r>  r7  device_check_sr8  rB  structured_delegate_srC  rD  r:  r;  precomputed_dictrE  tags_inprM  tr[  raw_dispatchr\  num_dispatch_keys%redundant_composite_implicit_autogradksrD   dispatch_keykernel_namespacer:   composites_in_dispatchautogen_strr@  raw_ufunc_inner_looprA  vo	ufunc_keyr  rH  rI  rJ  rK  rL  backend_metadatakeyr5  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, 	~)  F   UU:z22
*c*****!$!!$'' 	= 	=AJW-....hW^,,,,$%;%;%;<<<%&UU+G%O%O"4d;; 	
 	
7577	
 	
 	
 UU#7??,d33XX5XDV5X5XXXXuu^T22,--LL/Ll/L/LLLL~t44%NC)H)H%%*.** &%% "n8S&S&S&S4N44 'T&S&S !*4LL*>:LUU<//
*d++HH-HJ-H-HHHH !&;T B B$,
!31
 1
,,0.00 -,, %,<Q0Q0Q0Q? 1R0Q0Q 48 ,"."4"45J"K"Kee$94@@"*j9Lc.R.R**/-// +** #*d:M.M.M.M? /N.M.M
 ot44$
=#(F(F$$)-)) %$$ $h(F(F(F4 )G(F(F EE"5t<< (J7H#,N,N((-+-- )(( 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###79!"#1  ?   5:1%++-- &E &EA##!"c**  DRDDlDD   "!S))  EqEE|EE   # 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T!"c**WW,WTU,W,WWWW$NN1--	.<.B.B2y.Q.Q ++R !K5IKK    	999999 /........ 3  #8333WWW 433 *9 33D,GG#":* * *&&  	KK K$I#JJ MMOOEFG MMOO9E	  1X= 	/ =I 	= 1X= 	/ >(J 	> LKKK(..:J:JKKK 	
j$...1..... */  (***)# ) ) ) +***    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   Nonec                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)rB  rC  r   s    r   validate_unstructuredz$NativeFunction.validate_unstructured  sX     ? 	
 	
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 r8   )rX  r:   r0   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  Nr9   r0   args     r   r   z/NativeFunction.__post_init__.<locals>.<genexpr>  s:        25	SX-     r   backward)_cudnn_init_dropout_statenondeterministic_seeded)r5  rv  rw  r<  r%   r&   rB  kind
SchemaKindr7  rC  schema_order_argumentsru  
differencerG  rz  rD  r   r:   r  r8  r(  r*  anyflat_allhas_generator_argrM  )r   defaulted_argumentsinvalid_argss      r   __post_init__zNativeFunction.__post_init__  s   9" 	=W%5$6666[ 766 ? 	9>>##z~555K 655 $  L   # 	9>>##z~555> 655 $  L  
 O 	
(@ 	
 	
M	
 	
 	

 
 I<<>>
 
 
 ~~d&>@STT<  A%%%'U|'U'U%%%#/?  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 r8   )rI  rK  rL  rJ  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 r8   
annotationis_writer0   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)r0   inps     r   r   z,NativeFunction.is_view_op.<locals>.<genexpr>7  sL       
 
 N$&P3#.2P+P
 
 
 
 
 
r   )r5  returnsrz  r  rM  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   r-  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  r5  r:   inplacerM  r-  r/  r.  r0  r   s    r   view_schema_kindzNativeFunction.view_schema_kind=  sU    ? 	3ty~2: 	3!TY....!22? 	/!**!..r   c                .    | j         j        j        j        S r8   )r5  r:   baser   s    r   	root_namezNativeFunction.root_nameG  s    y~"''r   c                "    | j         p| j        d uS r8   r  r   s    r   part_of_structured_groupz'NativeFunction.part_of_structured_groupK  s    F$":$"FFr   r8   )
rN  rO  r?  r   rP  rF  rQ  rR  r   rS  r   r  r   r   )r   r-  r   )r   r    r!   r"   r   r  r  r  propertyr  r  r  r  r  r#   r   r   r2  r2    s^         NNN  ,+++  "!!!  "!!! 
 %$$$  MMM   5444  -,,, $### #""" "!!!  1000>>>>0000???? NNN 
 04	o
 o
 o
 o
 \o
b

 

 

 

&=O =O =O =O~ 
 
 
 X
 K K K XK" / / / X/ ( ( ( X( G G G XG G Gr   r2  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  rw  mutablescratchr#   r   r   r  r  P  sE        JdffG
$&&CdffGdffGGGr   r  c                      e Zd ZU ded<   ded<   ded<   ded<   edd	            ZddZddZddZedd            Z	e
dd            ZdS )NativeFunctionsGroupr2  r  NativeFunction | Noner  r  rw  r   r   c                    | j         j        S r8   )rw  rB  r   s    r   rB  zNativeFunctionsGroup.structurede  s     x""r   r  c           
        | 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)rM  r   r5  r:   )r0   fs     r   r2   z6NativeFunctionsGroup.__post_init__.<locals>.<listcomp>  s0    QQQ!;!&;P;PS;P;P;Pr   r   c              3  4   K   | ]}t          |          V  d S r8   r   rj  s     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  s(      %D%Dc!ff%D%D%D%D%D%Dr   c              3  4   K   | ]}t          |          V  d S r8   r  )r0   ops     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  s(      )F)Fb#b'')F)F)F)F)F)Fr   c              3  4   K   | ]}t          |          V  d S r8   r  rj  s     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  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  r5  	signature	functionsrB   rB  r  rw  r:   r  r  r3  r  r  functional_overloadrI  rJ  rC  sortedr   ru  r   r@  rz  RuntimeErrorr   )r   test_sigr  generated_fnsgenerated_fns_strexpected_generated_fnsexpected_generated_fns_strs          r   r  z"NativeFunctionsGroup.__post_init__j  se   #'?#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  
 ?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   r4  c                >    | j         j                                        S r8   )rw  r5  r  r   s    r   r  zNativeFunctionsGroup.signature  s    x}&&(((r   Iterator[NativeFunction]c              #  r   K   | j         V  | j        V  | j        	| j        V  | j        | j        V  d S d S r8   )r  rw  r  r  r   s    r   r  zNativeFunctionsGroup.functions  sY      oh<#,<#, $#r   r   c                    | j         j        S r8   )r  r  r   s    r   r  zNativeFunctionsGroup.root_name  s    ((r   rf   dict[SchemaKind, NativeFunction]NativeFunctionsGroup | Nonec                   | 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  rw  )	rz  r|  ro  r  r  r  r  rw  r  )rf  r  r  r  rw  s        r   	from_dictzNativeFunctionsGroup.from_dict  s    q66Q;;4GGUU:0$77
%%
*D11%%
*D11eeJND))%%% ;4#!	
 
 
 	
r   Nr  r  r   r4  )r   r  r   )rf  r  r   r  )r   r    r!   r"   r  rB  r  r  r  r  r   r  r#   r   r   r  r  ^  s         """"""""# # # X#? ? ? ?B) ) ) )    ) ) ) X) 
 
 
 \
 
 
r   r  c                  6    e Zd ZU ded<   ded<   ded<   d	dZdS )
r  r   ra  r   rB  rb  r   c                    d| j         v S )N_symint)ra  r   s    r   r  zBackendMetadata.supports_symint  s    DK''r   Nr  )r   r    r!   r"   r  r#   r   r   r  r    sQ          KKK
  ( ( ( ( ( (r   r  c                  F    e Zd ZU ded<   ded<   ded<   edd	            Zd
S )r  r   r:   r   supported_dtypesr  r  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  rD   s         r   rF   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!   r"   r   rF   r#   r   r   r  r    sW         III,,,, 	
 	
 	
 \	
 	
 	
r   r  c                  z    e Zd ZU ded<   ded<   ded<   ded<   ded<   edd            ZddZddZddZddZ	dS )BackendIndexr6   r  r   use_out_as_primaryr7  externalz#dict[OperatorName, BackendMetadata]indexparent_index6dict[DispatchKey, dict[OperatorName, BackendMetadata]]child_indexr   r  c                    |                                 D ]D\  }}|                                 D ]*\  }}|| |         vsJ d| d|             || |         |<   +Ed S )Nzduplicate operator z for dispatch key )rA   )r  r  rD   rE   op_namemetadatas         r   
grow_indexzBackendIndex.grow_index  s    
  %%'' 	4 	4DAq%&WWYY 4 4!l1o555H'HHQHH 655 ,4Q((	4	4 	4r   gr  r2  c                ,    | j         r|j        S |j        S r8   )r  rw  r  )r   r  s     r   primaryzBackendIndex.primary!  s    " 	 5L<r   %NativeFunction | NativeFunctionsGroupc                4    |                      |          }|d uS r8   )
get_kernel)r   r  ms      r   
has_kernelzBackendIndex.has_kernel'  s    OOA}r   BackendMetadata | Nonec                    t          |t                    r|}n:t          |t                    r|                     |          }nt	          |           |j        j        | j        vrd S | j        |j        j                 S r8   )rp  r2  r  r   r
   r5  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   r9  c                B    | j         rt          | j                   dS d S )NNativeFunctions)r  r   r  r   s    r   native_function_class_namez'BackendIndex.native_function_class_name8  s-    = 	$+,,====
 4r   N)r  r  r  r  r   r  )r  r  r   r2  )r  r!  r   r   )r  r!  r   r&  )r   r9  )
r   r    r!   r"   r   r  r   r%  r#  r*  r#   r   r   r  r    s           NNN....	4 	4 	4 \	4          ' ' ' '     r   r  c                      e Zd ZU ded<   ded<   ded<   ed%d	            Zd&dZ ej        d          Z	e
d'd            Zd%dZd(dZd%dZd%dZd)dZd*dZddddd+dZd,dZd-d Zed%d!            Zd%d"Zd.d#Zd$S )/r4  ri  r:   	Argumentsrv  tuple[Return, ...]r  r   r   c                V    ddt          fd| j        j        D                       S )Nr  Argumentr   r   c                ,    | j         dS | j         j        S NFr  )r  s    r   r  z+FunctionSchema.is_mutable.<locals>.is_write  s    ~%u>**r   c              3  .   K   | ]} |          V  d S r8   r#   )r0   r  r  s     r   r   z,FunctionSchema.is_mutable.<locals>.<genexpr>  s+      @@188A;;@@@@@@r   )r  r/  r   r   )r  rv  r  )r   r  s    @r   
is_mutablezFunctionSchema.is_mutable  sA    	+ 	+ 	+ 	+ @@@@(?@@@@@@r   Iterator[Argument]c                j    t          j        | j        j        | j        j        | j        j                  S r8   )	itertoolschainrv  flat_positionalflat_kwarg_onlyrw  r   s    r   r  z%FunctionSchema.schema_order_arguments  s.    N*N*N
 
 	
r   z3(?P<name>[^\(]+)\((?P<args>.*)\) -> (?P<returns>.*)r5  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:   rv  r  r  )	r4  decl_refindallrz  ri  rF   r,  parse_returnsr   )	r5  declsopsargsreturn_declr:   rv  r  r   s	            r   rF   zFunctionSchema.parse  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 r8   r  r  s     r   r   z5FunctionSchema.returns_are_aliased.<locals>.<genexpr>  s@       
 
|'AL,A' ''''
 
r   )r  r  r   s    r   returns_are_aliasedz"FunctionSchema.returns_are_aliased  s2     
 
\
 
 
 
 
 	
r   r  c                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 r8   r  r0   r   r  s     r   r   z/FunctionSchema.__post_init__.<locals>.<genexpr>  s,      NNA1<1<7NNNNNNr   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   r9   r  s     r   r2   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s+     3
 3
 3
SX=O=OC=O=O=Or   c                8    g | ]}|j         	|j         j        |S r8   r  r0   rets     r   r2   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s4     
 
 
~)cn.E) )))r   c                8    g | ]}|j         |j         j        |S r8   r  rL  s     r   r2   z0FunctionSchema.__post_init__.<locals>.<listcomp>  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 r8   rH  )r0   r  rM  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 r8   )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   r2   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: )ziprv  rw  r  r  post_self_positional_mutabler  r   rt  r8  rz  r:   r  self_argargumentr  rQ  rR  rS  rT  r  r  r  r  is_functional_fn)r   r  out_and_selfmutable_returnsimmutable_returnsself_ar  rM  s         @@r   r  zFunctionSchema.__post_init__  s    DN.== 	 	HC>S^333I 4333 < 	 	ANNNNNNNNN  |qtuyqzqz||    DN.// 3
 3
>93
 3
 3
 

 
|
 
 


 
|
 
 
 ?##q((C0A,B,Ba,G,G,Gshklphqhqss -H,G,G # 	 	CPPPP<PPPPP  J    > 	 QQdn>PQQQQQ 4<((A---I .-- c  #'>#5    &&' ' ' d' ' ' 9>! 	.^,FO. O.7  
 #x'>'>>> %%**Q2fo6PPPPP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 r8   )r   rv  rw  r   s    r   	is_out_fnzFunctionSchema.is_out_fn  s    6 DN&'''r   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 rV  rX  r  s     r   r2   z'FunctionSchema.kind.<locals>.<listcomp>5  s-    SSSS#(2E2Ek2R2RSSSSSr   c              3  @   K   | ]}|j         d uo|j         j        V  d S r8   r  r  s     r   r   z&FunctionSchema.kind.<locals>.<genexpr>8  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!)r   rv  rw  r:   r  r  post_self_positionalr  r  r  r  )r   is_out
is_scratch
is_inplacer3  s        r   r  zFunctionSchema.kind,  s    dn())SSDN.SSS
 

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

 *z***  	)%% 	)  X   %% 	)!  |   >! 	)%%((r   list[str | None]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 r8   rH  )r0   r  r   s     r   r2   z7FunctionSchema.aliased_return_names.<locals>.<listcomp>\  s9       <+0L0L 0L0L0Lr   r   r)  r   c              3  $   K   | ]}|j         V  d S r8   r9   r  s     r   r   z6FunctionSchema.aliased_return_names.<locals>.<genexpr>f  s$      )G)GQ!&)G)G)G)G)G)Gr   zFound a return (z)that aliases multiple inputs (r  )r  rv  r  rz  ry  r:   r   rB   )r   outsaliased_argsaliased_namesr   s       @r   aliased_return_namesz#FunctionSchema.aliased_return_namesY  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_namesrv  rw  rx  c          	     T    dfd} j         j         j        }|rW|                    d          r|                    dd          }n+|                    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   Returnr   c                D    t          r| j        nd | j        d           S )Nr:   rQ  r  )rz  r:   rQ  )r   rx  s    r   strip_ret_annotationz6FunctionSchema.signature.<locals>.strip_ret_annotation  s0    0:QVVdV   r   _copyr(   _scatterscatterinversec              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 r8   rH  rI  s     r   r   z5FunctionSchema.signature.<locals>.<genexpr>.<genexpr>  s,      KK4KKKKKKr   _outr|  )r  r  r  r  rz  r:   rQ  )r0   r  rx  r   s    @r   r   z+FunctionSchema.signature.<locals>.<genexpr>  s       ,
 ,
  |'% (KKKKdlKKKKK (! (9C____tV    ('''),
 ,
r   Nrv  zbernoulli.pzfloat pzfloat p=0.5Fr  r  dunder_methodrc  r;  )r   rz  r   rz  )r:   r  r  replacetupler6  r7  rv  r[  r\  rw  rj  mapr  r  r   r,  rF   r4  ri  BaseOperatorNamer  )
r   rv  rw  rx  r}  	base_namereturns_from_mutable_inputsoriginal_returnsr  args_sigs
   `  `      r   r  zFunctionSchema.signaturel  s   X	 	 	 	 	 	 IN'	 	D!!'** D%--gr::		##J// D%--iCC	 ', ,
 ,
 ,
 ,
 ,
 _
 ~.: ^,566"3
 
,
 ,
 ,
 '
 '
#0 !%94<!H!HII"%@@>++-+HHty>>]** s8}}'<'<Y'V'VWWH%"!"&).">  
 !   
 
 
 	
r   c                .    |                      d          S )NTrw  )r  r   s    r   view_signaturezFunctionSchema.view_signature  s    ~~4~888r   c                :    t          || j        | j                  S )Nr;  )r4  rv  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 r8   )r  r  r  rw  r  r   s    r   modifies_argumentsz!FunctionSchema.modifies_arguments  s$    yy{{z1:>:CUVVVr   c                4    | j                                         S r8   )rv  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   rv  rz  r  r   r  r:   )r   all_arguments_strr  s      r   r   zFunctionSchema.__str__  s    //t|!!$,q/**GGDIIc#t|&<&<===CG)??/??g???r   Nr  )r   r4  )r5  r   r   r4  r  )r   r  )r   rn  )rv  r   rw  r   rx  r   r   r4  r  )r:   ri  r   r4  r   )r   r    r!   r"   r  r3  r  recompiler<  r   rF   rE  r  r]  rf  r  ru  r  r  r  r  r  r   r#   r   r   r4  r4  w  s           A A A XA
 
 
 
 bjOPPG
 
 
 \

 
 
 
` ` ` `D7 7 7 7( ( ( (:') ') ') ')Z   , $%*"'g
 g
 g
 g
 g
 g
R9 9 9 9
 
 
 
 W W W XW/ / / /@ @ @ @ @ @r   r4  c                  N    e Zd ZU ded<   ded<   ded<   edd	            Zdd
ZdS )
Annotationztuple[str, ...]	alias_setr   r  r  annr   r   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d}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)  rg  r(   |r_  !z,alias set larger than 1 is not mutable, got z	 instead.   r#   zSbefore alias set and after alias set cannot be larger than 1 at the same time, got )r  r  r  r  )r  matchgroupr  r   rz  r  r   )r  r$  before_aliasr  r  	after_setr   s          r   rF   zAnnotation.parse  s     HJCPP}}DsDD}}}wwqzz1771::%EQWWQZZZ2F,,,S1122	771::$ 	
Y!!3!3!3I3III "4!3!3 56GGAJJFE!''!****3//000B	%%))c)nnq.@.@.@pbeppp /A.@.@ (I
 
 
 1vv}}}oooo}}}r   c                    d                     | j                  }| j        r| d}d                     | j                  }|r| d| }|S )Nr  r   -> )r   r  r  r  )r   r  r  s      r   r   zAnnotation.__str__"  s_    HHT^,,	= 	($I((4#788 	<$;;/;;Ir   N)r  r   r   r  r   )r   r    r!   r"   r   rF   r   r#   r   r   r  r    sl          NNN$$$$      \ D     r   r  c                  v    e Zd Zedd            Zedd            ZddZdd
ZddZddZ	ddZ
ddZddZdS )Typer  r   r   c                ~    t                               |           }t          |          | k    sJ | d|              |S )Nr  )r  _parser   )r  r   s     r   rF   z
Type.parse4  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]+)?\]$rg  )elemsizez-^__torch__\.torch\.classes\.([a-zA-Z0-9_.]+)$zunrecognized type )r  r  OptionalTyper  rF   r  r   ListTypeCustomClassTyperR  rS  KeyErrorr  )r  r$  r  r  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           r8   NotImplementedErrorr   s    r   r   zType.__str__M      !!r   base_tyrS  r   c                    t           r8   r  r   r  s     r   is_base_ty_likezType.is_base_ty_likeU  r  r   c                @    |                      t          j                  S r8   )r  rS  rT  r   s    r   is_tensor_likezType.is_tensor_likeX      ##FM222r   c                @    |                      t          j                  S r8   )r  rS  	Generatorr   s    r   is_generator_likezType.is_generator_like[  s    ##F$4555r   c                @    |                      t          j                  S r8   )r  rS  SymIntr   s    r   is_symint_likezType.is_symint_like^  r  r   c                    t           r8   r  r   s    r   is_nullablezType.is_nullablea  r  r   ListType | Nonec                    t           r8   r  r   s    r   is_list_likezType.is_list_liked  r  r   N)r  r   r   r  r   r  rS  r   r   r  r   r  )r   r    r!   r   rF   r  r   r  r  r  r  r  r  r#   r   r   r  r  2  s           \
 @ @ @ \@$" " " "" " " "3 3 3 36 6 6 63 3 3 3" " " "" " " " " "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 e            ZdS )rS  N)r   r    r!   r   r  r   rT  r   Dimname	DimVectorfloatr   r   LayoutDeviceDeviceIndexScalarMemoryFormatQSchemeStorageStreamr  SymBoolGraphModuler#   r   r   rS  rS  i  s        IJTVVF
$&&CdffGIDFFE
$&&C466DTVVFTVVF$&&KTVVF466LdffGdffGTVVFTVVFdffG$&&KKKr   rS  c                  B    e Zd ZU ded<   ddZddZdd	ZddZddZdS )rR  rS  r:   r   r   c                    | j         j          S r8   r9   r   s    r   r   zBaseType.__str__  s    ).""r   r  r   c                    | j         |k    S r8   r9   r  s     r   r  zBaseType.is_base_ty_like  s    yG##r   c                    dS r1  r#   r   s    r   r  zBaseType.is_nullable      ur   r  c                    d S r8   r#   r   s    r   r  zBaseType.is_list_like      tr   c                ,    | j         t          j        k    S r8   )r:   rS  r  r   s    r   r  zBaseType.is_symint_like  s    yFM))r   Nr   r  r  r  )	r   r    r!   r"   r   r  r  r  r  r#   r   r   rR  rR    s         LLL# # # #$ $ $ $      * * * * * *r   rR  c                  B    e Zd ZU ded<   ddZdd	Zdd
ZddZddZdS )r  r  r  r   r   c                    | j          dS )N?)r  r   s    r   r   zOptionalType.__str__  s    )r   r  rS  r   c                6    | j                             |          S r8   r  r  r  s     r   r  zOptionalType.is_base_ty_like      y((111r   c                4    | j                                         S r8   r  r  r   s    r   r  zOptionalType.is_symint_like      y'')))r   c                    dS )NTr#   r   s    r   r  zOptionalType.is_nullable  r  r   r  c                4    | j                                         S r8   )r  r  r   s    r   r  zOptionalType.is_list_like  s    y%%'''r   Nr   r  r  r  	r   r    r!   r"   r   r  r  r  r  r#   r   r   r  r    s         JJJ   2 2 2 2* * * *   ( ( ( ( ( (r   r  c                  B    e Zd ZU ded<   ddZddZdd	Zdd
ZddZdS )r  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__  s     <$/;;;r   r  rS  r   c                    dS r1  r#   r  s     r   r  zCustomClassType.is_base_ty_like  r  r   c                    dS r1  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_nullable  s	     ur   r  c                    d S r8   r#   r   s    r   r  zCustomClassType.is_list_like  r  r   Nr   r  r  r  r  r#   r   r   r  r    s         OOO< < < <              r   r  c                  L    e Zd ZU ded<   ded<   ddZddZddZddZddZdS )r  r  r  z
int | Noner  r   r   c                >    | j         r| j          nd}| j         d| dS )Nr(   [])r  r  )r   r  s     r   r   zListType.__str__  s/    !%2$)~~)%%d%%%%r   r  rS  r   c                6    | j                             |          S r8   r  r  s     r   r  zListType.is_base_ty_like  r  r   c                4    | j                                         S r8   r  r   s    r   r  zListType.is_symint_like  r  r   c                4    | j                                         S r8   )r  r  r   s    r   r  zListType.is_nullable  s    y$$&&&r   r  c                    | S r8   r#   r   s    r   r  zListType.is_list_like  s    r   Nr   r  r  r  r  r#   r   r   r  r    s         JJJ& & & &2 2 2 2* * * *' ' ' '     r   r  c                      e Zd ZU ded<   ded<   ded<   ded<   edd
            Zedd            Zedd            ZddZ	dS )r/  r   r:   r  rQ  r9  rX  Annotation | Noner  r   c                    | j         S r8   rH  r   s    r   
alias_infozArgument.alias_info  
    r   r  c                   d| v sJ d|  d            d| v r`|                      d          dk    sJ d|  d            |                     d          \  }}|                    dd          \  }}| d| }n|                     dd          \  }}|}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  zillegal argument 'r  =r)  z&illegal argument with default value: 'Tensor\((.+)\)(.*)rg  r(   r  z[],unrecognized alias analysis form with TensorrT  r:   rQ  rX  r  r  )countr   rsplitr  r  r  r  rF   r  r/  r   )r  type_and_annot_and_namerX  type_and_annotr:   name_and_defaultr  type_sr  rQ  r   s              r   rF   zArgument.parse  s    czzz6666zzz#::99S>>Q&&&(WQT(W(W(W&&&/2yy~~,#W#:#A#A#q#I#I ND"&2222/2zz#q/A/A,N,#DG.?? 	;;q>> &    >	  
 A.F#))%++a..99JJ#FJzz&!!!	
 
 
 1vv}}}Q22S22}}}r   r   c                ,    | j         d uo| j         j        S r8   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rT  zTensor?zTensor[]rT  Tensor(r  r(   r  r  )rQ  r  r  r:   rX  )r   rQ  
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  r   
r   r    r!   r"   r  r  r   rF   r  r   r#   r   r   r/  r/    s         
 IIIJJJ* "!!!   X $ $ $ \$L H H H XH5 5 5 5 5 5r   r/  c                  ~    e Zd ZU ded<   ded<   ded<   edd            Zedd            Zedd            ZddZ	dS )rz  r9  r:   r  rQ  r  r  r   c                    | j         S r8   rH  r   s    r   r  zReturn.alias_infoB  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  rg  r  r	  rT  r|  r  )	r  r  r  r  r  rF   r  rz  r   )r  r  r:   r  r  r  rQ  r   s           r   rF   zReturn.parseF  s!    #::#&::c1#5#5 NDD ND.?? 	;;q>> &    >	  
 A.F#))%++a..99JJ#FJzz&!!!
 
 

 1vv}}}Q22S22}}}r   r   c                ,    | j         d uo| j         j        S r8   r  r   s    r   r  zReturn.is_writee  r  r   c                    | j          }| j        r%|dv sJ |                    dd| j         d          }| j        |S | d| j         S )Nr  rT  r  r  r  )rQ  r  r  r:   )r   rQ  s     r   r   zReturn.__str__i  sl    )~? 	H<<<<<<<*FDO*F*F*FGGD9K((TY(((r   Nr  )r  r   r   rz  r  r   r  r#   r   r   rz  rz  <  s         JJJ!!!!   X    \< H H H XH) ) ) ) ) )r   rz  c                      e Zd ZU ded<   dS )SelfArgumentr/  r\  N)r   r    r!   r"   r#   r   r   r  r  u  s         r   r  c                  @    e Zd ZU ded<   ded<   ded<   ded<   d
dZd	S )TensorOptionsArgumentsr/  dtypelayoutdevice
pin_memoryr   Sequence[Argument]c                6    | j         | j        | j        | j        gS r8   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!  }  s]         OOOG G G G G Gr   r!  c                     e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ed0d            Zed0d            Zed0d            Zed0d            Zed0d            Z	ed1d            Z
ed2d            Zed3d            Zed1d            Zd4dZd5dZd5dZd5dZdd d6d"Zd7d#Zd8d&Zed9d*            Zed:d+            Zd;d,Zd<d.Zd/S )=r,  ztuple[Argument, ...]pre_self_positionalzSelfArgument | Noner[  rj  pre_tensor_options_kwarg_onlyzTensorOptionsArguments | Noner  post_tensor_options_kwarg_onlyrw  r   r&  c                r    g }|                     | j                   |                     | j                   |S r8   )r   r8  r9  r   rM  s     r   flat_non_outzArguments.flat_non_out  s6     

4'(((

4'(((
r   c                    g }|                     | j                   | j        |                    | j        j                   |                     | j                   |S r8   )r   r,  r[  ry  r\  rj  r0  s     r   r8  zArguments.flat_positional  sU     

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

4,---
r   c                $    d | j         D             S )Nc                     g | ]}|j         	|S r#   )r  r  s     r   r2   z:Arguments.post_self_positional_mutable.<locals>.<listcomp>  s    CCCa
CCCCr   )rj  r   s    r   rZ  z&Arguments.post_self_positional_mutable  s    CC44CCCCr   c                    g }|                     | j                   | j        ,|                     | j                                                   |                     | j                   |S r8   )r   r-  r  r)  r.  r0  s     r   r9  zArguments.flat_kwarg_only  s`     

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

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

4'(((

4'(((

48
r   :Sequence[Argument | SelfArgument | TensorOptionsArguments]c                r    g }|                     | j                   |                     | j                   |S r8   )r   
positional
kwarg_onlyr0  s     r   non_outzArguments.non_out  s8     GI

4?###

4?###
r   !Sequence[Argument | SelfArgument]c                    g }|                     | j                   | j        |                    | j                   |                     | j                   |S r8   )r   r,  r[  ry  rj  r0  s     r   r9  zArguments.positional  sR    -/

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

4,---
r   +Sequence[Argument | TensorOptionsArguments]c                    g }|                     | j                   | j        |                    | j                   |                     | j                   |S r8   )r   r-  r  ry  r.  r0  s     r   r:  zArguments.kwarg_only  sT    79

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

46777
r   c                    g }|                     | j                   |                     | j                   |                     | j                   |S r8   )r   r9  r:  rw  r0  s     r   r)  zArguments.all  sH    FH

4?###

4?###

48
r   	list[str]c                $    d | j         D             S )Nc                B    g | ]}|j         	|j         j        |j        S r8   )r  r  r:   r  s     r   r2   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   r   c                >    t          d | j        D                       S )Nc              3  H   K   | ]}|j                                         V  d S r8   )rQ  r  r  s     r   r   z+Arguments.has_tensor_arg.<locals>.<genexpr>  0      FFq16((**FFFFFFr   r  r1  r   s    r   r  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 r8   )rQ  r  r  s     r   r   z+Arguments.has_symint_arg.<locals>.<genexpr>  rG  r   rH  r   s    r   r  zArguments.has_symint_arg  rI  r   c                >    t          d | j        D                       S )Nc              3  H   K   | ]}|j                                         V  d S r8   )rQ  r  r  s     r   r   z.Arguments.has_generator_arg.<locals>.<genexpr>  s0      II!16++--IIIIIIr   rH  r   s    r   r  zArguments.has_generator_arg  s"    IIt7HIIIIIIr   Fr  rv  c                  dfd}t          t          t          || j                            | j        "t           || j        j                            nd t          t          || j                            t          t          || j                            t          t          || j	                            z   d dd          S )Nr  r/  r   c                P    t          | j        | j        s| j        nd d           S )Nr
  )r/  r:   rQ  rX  )r  rv  s    r   strip_arg_annotationz1Arguments.signature.<locals>.strip_arg_annotation  s5    VV)6@		D	   r   r#   r,  r[  rj  r-  r  r.  rw  )r  r/  r   r/  )
r,  r  r  r,  r[  r  r\  rj  r-  r.  )r   rv  rP  s    ` r   r  zArguments.signature  s    	 	 	 	 	 	  %($*BCC! !
 =, 11$-2HIIJJJ!&($*CDD" "
 +0($*LMM+ + C,d.QRRSS+T  +-/
 
 
 	
r   c           	         | j         J t          j        | t          t          j        | j         j        d                               S )NrH  )r[  )r[  dataclassesr  r  r\  r   s    r   remove_self_annotationz Arguments.remove_self_annotation	  sR    }((("!#DM$:tLLL 
 
 
 	
r   rr  list[Argument]c                |    t          | j                  dk    sJ t          j        | t	          |                    S )Nr   )rw  )rz  rw  rS  r  r  )r   rr  s     r   with_out_argszArguments.with_out_args&	  sA    48}}!!!!"d
 
 
 	
r   rA  r   5tuple[list[Argument], list[Argument], list[Argument]]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/  rF   r  r  ry  )rA  r9  r:  rw  arguments_accr  pargs          r   	_preparsezArguments._preparse-	  s    %'
%'
 " ::d## 	' 	'C czz$
222P 322 !+>>#&&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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:   r   tyr  r   Callable[[Argument], bool]c                      fdS )Nc                J    | j         k    o| j        t                    fv S r8   )r:   rQ  r  )r  r:   r^  s    r   <lambda>z/Arguments.parse.<locals>.pred.<locals>.<lambda>w	  s&    QVt^P2|B?O?O:P0P r   r#   )r:   r^  s   ``r   predzArguments.parse.<locals>.predv	  s    PPPPPPr   r"  r   r#  r  r$  r  r%  r   r   c              3  2   K   | ]\  }} ||          V  d S r8   r#   )r0   pr  s      r   r   z"Arguments.parse.<locals>.<genexpr>	  sB        1 AaDD     r   rg  r_  r(  rQ  )r:   r   r^  r  r   r_  )r,  r\  	enumerater:   r  r  rF   rz  r)  rY  r!  ry  r  )rA  r9  r:  rw  self_ixir  r,  r[  rj  r-  r  r.  kwarg_only_accrc  
predicatess                   r   rF   zArguments.parseQ	  s    '0&9&9$&?&?#
J j)) 	 	DAqv   ",XgX"6#Jw$788H#-gkmm#<  "$H#-  9;%8<9;&6	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   r  r   r8  r9  rw  ry  r   )r   all_argumentss     r   r   zArguments.__str__	  s    #%Sd&:;;<<< 	&48 	&  %%%Sd&:;;<<<Sdh//000yy'''r   r  c                    | 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 r8   r  r  s     r   r2   z+Arguments.__post_init__.<locals>.<listcomp>	  s4     (
 (
 (
|'AL,A' '''r   r   zOmutable pre_self_positional arguments are not currently supported in the schema)r[  r,  r  r.  rz  )r   mutable_pre_self_positionalss     r   r  zArguments.__post_init__	  s     = ////&::::(
 (
-(
 (
 (
$
 /00A555] 65555r   Nr*  )r   r7  )r   r<  )r   r>  r   rA  r  )rv  r   r   r,  )r   r,  )rr  rU  r   r,  )rA  r   r   rX  )rA  r   r   r,  r   r  )r   r    r!   r"   r  r1  r8  rZ  r9  r  r;  r9  r:  r)  rD  r  r  r  r  rT  rW  r   r\  rF   r   r  r#   r   r   r,  r,    s        
 .---!!!!....77771111 9888    X    X D D D XD    X    X    X    X    X    X
 
 
 
G G G GG G G GJ J J J 27 #
 #
 #
 #
 #
 #
J
 
 
 

 
 
 
 !+ !+ !+ \!+F M
 M
 M
 \M
^( ( ( (
 
 
 
 
 
r   r,  )r  submuldivmodpowlshiftrshiftandxororc                  j    e Zd ZU ded<   ded<   ded<   dZded<   dZd	ed
<   edd            ZddZdS )r  r   r  r   r  r  Fr  NzOptional[str]r3  r  r   c                  
 | dk    sJ |                      d          r
J d            t          j        d|           }|r|                    d          nd}|r|                    d          n| }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(   r  zs_out suffix is reserved and not permitted for operator names; did you mean to specify an out overload name instead?z^(?:(.*)::)?(.*)$r)  rg  z^__([^_]+)__$Tc              3  *   K   | ]}d | k    V  dS )rh  Nr#   )r0   nr  s     r   r   z)BaseOperatorName.parse.<locals>.<genexpr>
  s-      GGq47q77?GGGGGGr   Fr   rh  r  __functional)r  r  r  r  r3  r  )	r  r  r  r  r  AUGMENTED_ASSIGNMENT_NAMESrz  r  r   )r  r  r3  op_without_nsr$  r  r  functional_suffixr  r   r  s             @r   rF   zBaseOperatorName.parse	  s   Rxxxx;;v&& 	
 	
D	
 	
 	
 -r22&+3EKKNNN	*/7ARH%}55= 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          dnd}| j        r| j        rdnd}| d| | j         dS | j        rdn
| j        rdnd}| | j         | S )NrY  r(   rh  __r  r  )r3  r  r  r  r  )r   namespace_prefixrh  s      r   r   zBaseOperatorName.__str__/
  s    48NJdn0000 	7|+A&::!:TY:::: < +]]  '6	61666r   )r  r   r   r  r   )	r   r    r!   r"   r  r3  r   rF   r   r#   r   r   r  r  	  s         IIIMMM( !&%%%%  $I####6 6 6 \6p7 7 7 7 7 7r   r  c                  \    e Zd ZU ded<   ded<   edd            ZddZdd	Zdd
ZddZ	dS )ri  r  r:   r   rd  r  r   c                    d| v r|                      dd          \  }}n| }d}t          t                              |          |          }t	          |          | k    sJ t	          |           d|              |S )N.r)  r(   rc  r  )r   ri  r  rF   r   )r  r:   rd  r   s       r   rF   zOperatorName.parseF
  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  rd  r:   r   s    r   r   zOperatorName.__str__Q
  0     	"i66$"4666i>!r   c                B    | j         r| j         d| j          S | j         S )Nr  r  r   s    r   unambiguous_namezOperatorName.unambiguous_name\
  r  r   c                v    t          t          | j        j        d| j        j                  | j                  S NFr  rc  )ri  r  r:   r  r  rd  r   s    r   remove_inplacezOperatorName.remove_inplaceb
  sE    !Y^"i5  
 ,
 
 
 	
r   overloadc                l    t          t          | j        j        d| j        j                  |          S r  )ri  r  r:   r  r  )r   r  s     r   with_overloadzOperatorName.with_overloadl
  sB    !Y^"i5  
 #
 
 
 	
r   N)r  r   r   ri  r   )r   ri  )r  r   r   ri  )
r   r    r!   r"   r   rF   r   r  r  r  r#   r   r   ri  ri  A
  s            \" " " "" " " "
 
 
 

 
 
 
 
 
r   ri  r  r  bc                    | j                                         t          j        uo/|                    |            o|                    |j                  S r8   )r5  r  r  r  r%  )r  r  r  s      r   "gets_generated_out_inplace_wrapperr  w
  sI     	
Z22 	'Q	'LL&&r   c                  t    e Zd ZU ded<   ded<   ded<   ddZd	d
ddZedd            Zedd            ZdS )NativeFunctionsViewGroupr2  viewr  	view_copyview_inplacer   r  c                   | 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.)r~  r  Tr  r  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.)r  r  r  gets_generated_view_copyr   r5  r:   get_view_copy_namer  r  r  rM  r  rI  rJ  r   s    r   r  z&NativeFunctionsViewGroup.__post_init__
  s   y####>!/	::  ty~*++ E E&ty11E E E    >&+05>>?TUUUUU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   9I 	 ,(]  49>.// t tc$:K:P:U6V6V t t t  	 	,, r   T)include_copyr  r   r  c             #  h   K   | j         V  | j        	| j        V  | j        |r| j        V  d S d S d S r8   )r  r  r  )r   r  s     r   r  z"NativeFunctionsViewGroup.functions
  sX      i(####>%,%.      &%%%r   r   c                    | j         j        S r8   )r  r  r   s    r   r  z"NativeFunctionsViewGroup.root_name
  s    y""r   c                    | j         j        S r8   )r  rI  r   s    r   	compositez"NativeFunctionsViewGroup.composite
  s     y??r   Nr  )r  r   r   r  r   r  )	r   r    r!   r"   r  r  r  r  r  r#   r   r   r  r  
  s          %$$$''''! ! ! !F 15 ! ! ! ! ! ! # # # X# @ @ @ X@ @ @r   r  c                    | j         sdS | j        rdS d| j        v rdS | j        j        j        j                            d          rdS dS )NFr  _inverseT)r  rI  rM  r5  r:   r  r  )r  s    r   r  r  
  sa    < u 	/ uu 	v{%%j11 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narrowr~  Fr  rc  )	r   r5  r:   r  r  ri  r  r  rd  )r  -list_of_ops_with_explicit_view_copy_operatorsr  view_copy_names       r   r  r  
  s     6>J1
16;LLL'*****6;#(///I!E9I9W
 
 
 fk/	  N r   rB  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 r8   )rz  rF   r  s     r   r   z parse_returns.<locals>.<genexpr>  s.      FFsc""FFFFFFr   r   )r  r   )rB  s    r   r>  r>  
  sj    
 dr1~RC!7!7!!B$'FFk.?.?.E.EFFFFFFr   c                  L    e Zd ZU ded<   ded<   edd            Zdd
ZddZdS )rx  zdict[str, list[Argument]]r  rU  r  srcobjectr   c                   t          | t                    sJ g }d| d         vr1| d                             d          }d |D             }| d d         } i }| D ]w}t          |t                    sJ d|v s
J d            |                    d          \  }}d|vsJ d| d            |                    d          }d	 |D             }|||<   xt	          ||
          }	|	                                | k    s
J d            |	S )Nr  r  r^  c                f    g | ].}t                               |                                          /S r#   r/  rF   r}  r0   r:   s     r   r2   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 liner  zillegal kernel param name 'z' in precomputed parameters'c                f    g | ].}t                               |                                          /S r#   r  r  s     r   r2   z$Precompute.parse.<locals>.<listcomp>/  s,    QQQthnnTZZ\\::QQQr   )r  r  zr.to_list() != src)rp  rt  r   r   rx  to_list)
r  add_argsadd_listr  raw_replace_itemr  with_list_raw	with_listwith_list_argsr   s
             r   rF   zPrecompute.parse  sV   #t$$$$$ R  2w}}S))HJJJJJHcrc(C # 	* 	*.44444----5 .--
 "2!7!7!?!?Cc>>>OcOOO ">> &++C00IQQyQQQN)GCLLwH555yy{{c!!!#7!!!r   r  c                    | j         D ]&}|j                                        |j        k    sJ '| j                                        D ]+}|D ]&}|j                                        |j        k    sJ ',d S r8   )r  r:   upperr  r   )r   r  rA  s      r   r  zPrecompute.__post_init__6  s      	, 	,A6<<>>QV+++++L'')) 	0 	0D 0 0v||~~/////0	0 	0r   rA  c                    g }| j                                         D ]>\  }}d                    d |D                       }|                    | d|            ?|S )Nr   c              3  4   K   | ]}t          |          V  d S r8   r  )r0   params     r   r   z%Precompute.to_list.<locals>.<genexpr>B  s(      $P$PESZZ$P$P$P$P$P$Pr   r  )r  rA   r   ry  )r   replace_listkernel_paramreplacement_paramsreplacementss        r   r  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   N)r  r  r   rx  r  rp  )r   r    r!   r"   r   rF   r  r  r#   r   r   rx  rx  	  sw          '&&&" " " \"H0 0 0 0     r   rx  r   )r   r6   r   r   )r  r2  r  r  r  r  r   r   )r  r2  r   r   )r  r2  r   ri  )rB  r   r   r-  )v
__future__r   rS  r6  r  r   enumr   r   typingr   r   r	   typing_extensionsr
   torchgen.utilsr   r   collections.abcr   r   r   r%   r  r   r   r   AUTOGRAD_KEYSFRAGMENT_NAMESPACESr6   r   r   r   r   hasattrr   printr  ry   ru   rt   r{   rx   r   r   r   r   rR   r   r   r   r   r   r   ro   rp   rq   rr   r   r   r   r   r   r   r   r   r   rY   r~  r   r   r   r   r   dispatch_device_mapr   r   r"   r  r  r  r  r  r
  r  r  r  r  r(  r-  r2  r  r  r  r  r  r4  r  r  rS  rR  r  r  r  r/  rz  r  r!  r,  r  r  ri  r  r  r  r  r>  rx  r#   r   r   <module>r     s   " " " " " " "         				 ! ! ! ! ! !         4 4 4 4 4 4 4 4 4 4 * * * * * * 6 6 6 6 6 6 6 6  322222222: $* * * * * * * *    d    (  nssuu     (( , ,,>, , ,  #$:; 
_> _> _> _> _>$ _> _> _>D    D         B   w{BG,, 	++--AE!HHH,t2trttqrtt  	 OOO  #'9  OOO)5)6   =H         * * * *% % % %
 ,V5H%P , , , , , , , ,^ 46 5 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   $ $f	G f	G f	G f	G f	G f	G f	G f	GR        $q
 q
 q
 q
 q
 q
 q
 q
h $( ( ( ( ( ( ( (, $
 
 
 
 
 
 
 
6 $8 8 8 8 8 8 8 8` $t@ t@ t@ t@ t@ t@ t@ t@~ $1 1 1 1 1 1 1 1t $2" 2" 2" 2" 2" 2" 2" 2"l    T   . $* * * * *t * * *( $( ( ( ( (4 ( ( (( $    d   @ $    t   * $W5 W5 W5 W5 W5 W5 W5 W5t $4) 4) 4) 4) 4) 4) 4) 4)p $        $G G G G G G G G $r
 r
 r
 r
 r
 r
 r
 r
p	   * $e7 e7 e7 e7 e7 e7 e7 e7T $2
 2
 2
 2
 2
 2
 2
 2
j   * $;@ ;@ ;@ ;@ ;@ ;@ ;@ ;@|   .   0	G 	G 	G 	G $; ; ; ; ; ; ; ; ; ;r   