
    wim                   
   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 d dlmZ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dod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'        hZ(ej%        ej&        hZ)ej&        ej*        ej+        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>        gZ?dpd Z@dpd!ZAdpd"ZBdpd#ZCdpd$ZDeAd%eBd&iZE G d' d(e          ZFi ZGd)eHd*<    eeFjI        eFjJ        eFjK        eFjL        eFjM        g          eGd+<    eeFjN        eFjO        g          eGd,<    eeFjP        eFjQ        g          eGd-<   eGd+         eGd,         z  eGd.<   eGd.         eGd-         z  eGd/<   eGd,         eGd-         z  eGd0<    G d1 d2e          ZR G d3 d4e          ZS G d5 d6e          ZT ed	           G d7 d8                      ZU G d9 d:e          ZV ed	           G d; d<                      ZW ed	           G d= d>                      ZX ed	           G d? d@                      ZY ed	           G dA dB                      ZZ ed	           G dC dD                      Z[ ed	           G dE dF                      Z\ ed	           G dG dH                      Z] G dI dJe          Z^ ed	           G dK dLe]                      Z_ ed	           G dM dNe]                      Z` ed	           G dO dPe]                      Za ed	           G dQ dRe]                      Zb ed	           G dS dT                      Zc ed	           G dU dV                      Zd ed	           G dW dX                      Ze ed	           G dY dZ                      Zf ed	           G d[ d\                      Zgg d]Zh ed	           G d^ d_                      Zi ed	           G d` da                      ZjdqdeZk ed	           G df dg                      ZldrdhZmdsdiZndtdlZo ed	           G dm dn                      ZpdS )u    )annotationsN)	dataclass)autoEnum)Callable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    ^/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/torchgen/model.py__str__zLocation.__str__0   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$   5   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>r1   J   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 r7   )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 )r5   __members__itemsAssertionErrorr=   kvs      r   parsezDispatchKey.parse   sR    +1133 	 	DAqEzz <U<<===r   Nr   )r=   r   r   r5   )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<   staticmethodrE   r"   r   r   r5   r5   S   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   r5   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"   )r/   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 r7   r5   rp   rq   rn   ro   r   s    r   is_generic_dispatch_keyr   6  s,    -:-9	  r   c                    | t           j        t           j        t           j        t           j        t           j        t           j        hv S r7   )r5   rt   r   r   r   r   r   r   s    r   is_cuda_dispatch_keyr   @  s8    !!$   r   c                    | t           j        t           j        t           j        t           j        t           j        t           j        hv S r7   )r5   rz   r   r   r   r   r   r   s    r   is_xpu_dispatch_keyr   L  s7      #  r   c                    | t           v S r7   )STRUCTURED_DISPATCH_KEYSr   s    r   is_structured_dispatch_keyr   Y  s    )))r   c                    | t           v S r7   )UFUNC_DISPATCH_KEYSr   s    r   is_ufunc_dispatch_keyr   ]  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ddZedd            Zedd            Zedd
            ZdS )
ScalarTyper   r   c                    | j         S r7   r8   r   s    r   r   zScalarType.__str__y  r:   r   r=   ScalarType | Nonec                b    t           j                                        D ]\  }}|| k    r|c S d S r7   )r   r?   r@   rB   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   rE   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   rE   )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_e4m3fnuzr   r   r   rE   r  r"   r   r   r   r   f  sC       466D466DDFFE
$&&C466D466DDFFETVVF$&&K466LDFFM466DtvvH$&&KdffODFFMdffO       \    \
    \  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 r7   r8   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?   r@   rA   rB   s      r   rE   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   rE   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 |                    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}|t,                              |          }|                    dd          }|"t          |t                    sJ d|             |d|vs
J d            |                    dd          }|"t          |t                    sJ d|             |t          j        |vs
J d            |                    dd          }|"t          |t                    sJ d|             |                    d d          }||du sJ |rt.                              |          nd}|                    d!g           }t          |t                    r|g}t          |t                    sJ |dk    rd"|v r|                    d"           t                      }|D ]B}t3          |          d#k    sJ ||v r|                    |           1t%          d$|           d#d%lm} |                    d&d          }|t          |t8                    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:|%t@          v sJ d-|% d.| d/            t	          j        |d01          }|                    d2          }&tC          |j	        |otE          |%          |&d3z   4          | |%<   |%t<          j#        u r||$                    7          k    rd}"֐D|!dk    r|"r
J d5            |s| %                                t<          j#        hk    s^| t<          j#                 &                                s:|!dk    s4J d6|$                    7           d7| t<          j#                  d8            n|s|t          7j$        j$                  }'|''                    d9          s:|'(                    d:          s%7j)        j*        r'7j)        +                                sJ d;|' d<            tC          |$                    7          d	tX          =          | t<          j#        <   d> | D             }(t3          |(          dk    s9t3          |(          d?k    rt<          j-        |(vrt<          j.        |(v s
J d@            |                    dAdB          })t          |)t                    sJ |)dBk    rg ndC |)                    d          D             }*|                    dDi           }+i },t          |+t                    r3t^                              |+t`          j1                  |,t`          j1        <   nt          |+t8                    r|+                                D ]\  }$}-|$d(k    rt          |$t                    sJ dE|$             t          |-t                    sJ dF|             t`                              |$          }.t^                              |-|.          |,|.<   nt%          dG|+           |,r^|s
J dH            d#dl2m3c m4}/ tj          D ]A}%|%| vsJ dI|%             tC          |/6                    7|%          dtX          4          | |%<   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<          j7        | v }3t<          j-        | v }47fdJ|                                 D             }5|                    d(d           |rJ dK|             |tp          D ]}6|6| vsJ dL|6 dM            ts          dUi d7d|
d
|d|d|d|d |dA|*dD|,d|d|d|d|d|d|dN|d|	dO|0dP|1dQ|2dR|3dS|4d!|dT||5fS )Vzp
        Parse a NativeFunction from a dictionary as directly parsed
        from native_functions.yaml
        r3  znot a str: r'  )namespaced_entity	max_levelaten)defaultrE  r4  Fr:  r%   r   r&   zillegal variant r;  znot a bool: r<  r5  Tr6  Nzillegal device_check: r@  rA  z::zbnamespace is not supported in structured delegate, using the same namespace as the native functionrB  zbnamespace is not supported in structured inherits, using the same namespace as the native functionr8  z&functions in modules cannot be methodsr9  rC  rK  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.   )rT  atz::native)kernelr@  cpp_namespacezSunnecessary dispatch table for this function; just delete the dispatch key entirelyzQunexpected name for singleton CompositeImplicitAutograd dispatch entry: expected z	 but got zR.  Rename your implementation to the expected name, then delete the dispatch tablenew__likez	expected z to have a CompositeExplicitAutograd dispatch entry, but there was no dispatch table.  Factory functions should not have implicit dispatch as they should not be decomposed for __torch_dispatch__)r@  r_  c                    g | ]D}|t           j        k    s0|t           j        k    s |t           j        k    s|t           j        k    B|ES r"   r   )r/   ds     r   r1   z,NativeFunction.from_yaml.<locals>.<listcomp>0  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"   )OperatorNamerE   r/   xs     r   r1   z,NativeFunction.from_yaml.<locals>.<listcomp>O  s&    IIIA,$$Q''IIIr   r?  z#ufunc_inner_loop key is not a str: z%ufunc_inner_loop value is not a str: z"ufunc_inner_loop not str or dict: zufunc must be structuredz2ufunc should not have explicit dispatch entry for c                *    i | ]\  }}|j         |iS r"   r8   )r/   rC   rD   r3  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=  rF  rG  rH  rI  rJ  r1  r"   ):copypop
isinstancer   r
   from_namespaced_entityget_cpp_namespacer2  rE   entity_namelistsetr   r   r   r$   r%   r&   rA   r&  r?   r)  rf  
Precomputeappendlentorchgen.apirX  dictr@   r5   stripdispatch_keysBackendMetadatar   rn   r9   keyssupports_symint
startswithendswith	argumentstensor_optionshas_tensor_argDEFAULT_KERNEL_NAMESPACErq   ro   UfuncInnerLoopr  r$  torchgen.api.ufuncapiufuncr   schema_kernel_namerp   r   r0  )8rL  r=  rN  rO  efuncsnamespace_helperr1  cpp_no_default_args_listrE  r4  
variants_sr:  rD   r;  r<  r5  device_check_sr6  r@  structured_delegate_srA  rB  r8  r9  precomputed_dictrC  tags_inprK  trX  raw_dispatchrY  num_dispatch_keys%redundant_composite_implicit_autogradksrC   dispatch_keykernel_namespacer9   composites_in_dispatchautogen_strr>  raw_ufunc_inner_loopr?  vo	ufunc_keyr  rF  rG  rH  rI  rJ  backend_metadatakeyr3  s8                                                          @r   	from_yamlzNativeFunction.from_yamlV  s    GGIIf%%%<<'<U'<'<<<%*A#q
 
 
 %66v6FF	##$4$@AA#$55)>#C#C 2D99999!":;;,-EE/-
 -
) ;TBBBBBUU:z22
*c*****!$!!$'' 	= 	=AJW-....hW^,,,,$%;%;%;<<<%&UU+G%O%O"&
 
 	7 	76466	7 	7 
 UU#7??,d33XX5XDV5X5XXX3uu^T22,--LL/Ll/L/LLL-~t44%C*
 *
%%))) &% 
 "n8S&S&S&S4N44 'T&SS !*4LL*>:LUU<//
*d++HH-HJ-H-HHH+ !&;T B B$,
!31
 1
,,0.00 -, 
 %,<Q0Q0Q0Q? 1R0QQ 48 ,"."4"45J"K"Kee$94@@"*j/
 /
**.,.. +* 
 #*d:M.M.M.M? /N.MM
 ot44$
3)
 )
$$((( %$ 
 !W^8%C%C%C3 &D%CC EE"5t<< (Js-
 -
((,*,, )( 
 5555':+=+=+==<LVj&&'7888RV55$$h$$ 	" zH(D))))) #6*#D#DOO/000 	9 	9Az??Q&&&&J$%7A%7%7888$$$$$$uuZ..#z,'E'E##q##E79!"#1  ? 1 5:1%++-- &E &EA##!  D DCBCC\CCD D  "s  E EDaDDlDD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)!"c**WW,WTU,W,WWW*$NN1--	.<.B.B2y.Q.Q ++R !K5IKK    	99999: /........ 3   000VVV 100)8 33D,GG#":* * *&&  	KK K$I#JJ MMOOEFG MMOO9E	  1X= 	/ =I 	= 1X= 	/ >(J 	> LKKK(..:J:JKKK 	
j$...1....u */  (***)# ) ) ) +***    T2S2S " &:	
 %8$7 %8$7 (K   "2!1 ,F+E $6#5 ,m #4"3 *\ *\  C!" %8$7#$ (K%& 8^7]'( FzEy)* 8^7]+, G|F{-. T/0 $)14 7
 	
r   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)r@  rA  r   s    r   validate_unstructuredz$NativeFunction.validate_unstructured  sT     ? 	
 	
1	
 	
" ' 	
 	
e	
 	
' 	
 	
r   c                   | j         j        j        r | j        t          j        hk    s
J d            | j        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j
        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j        r| j
        r
J d            d | j                                         D             }t                              | j        |          }t          |          dk    sJ d|             | j        | j        s
J d	            t#          | j         j                                      d
          r| j        t*          j        k    s
J d            dt#          | j         j                  v sdt#          | j         j                  v s(t/          d | j         j        j        D                       r;dt#          | j         j                  vr t#          | j         j        j                  dvs| j         j                                        r,d| j        v s!J t#          | j         j                              d S d S )NzNative functions with out arguments MUST be declared with only function variant; e.g., variants: function; otherwise you will tickle a Python argument binding bug (which usually manifests itself as the result variable being undefined.)zYPut structured field on the out= variant of a function; did you mean structured_delegate?z:device_guard: False is not respected by structured kernelszQstructured_delegate field not allowed on out= functions; did you mean structured?z?Cannot have both structured and structured_delegate on functionc                *    h | ]}|j         	|j        S r7   )rV  r9   r/   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  Nr8   r/   args     r   r   z/NativeFunction.__post_init__.<locals>.<genexpr>	  s:        25	SX-     r   backward)_cudnn_init_dropout_statenondeterministic_seeded)r3  r  outr:  r$   r%   r@  kind
SchemaKindr5  rA  schema_order_argumentsrr  
differencerE  ru  rB  r   r9   r}  r6  r&  r(  anyflat_allhas_generator_argrK  )r   defaulted_argumentsinvalid_argss      r   __post_init__zNativeFunction.__post_init__  s   9" 	=W%5$6666[ 766 ? 	L9>>##z~555K 655
 !L LKL L!# 	L9>>##z~555> 655
 !L LKL L!
 O	M $ 8	M 	ML	M 	M 

 
 I<<>>
 
 
 ~~d&>@STT<  A%%%'U|'U'U%%%#/F FEF Fty~))*55 	$(????9 @?? c$).)))) TY^!4!444  9=9L9U     5 c$).&9&999	+,,4QQQy"4466 R -	9993ty~;N;N99999	 RQr   c                H    | j         p| j        p| j        p| j         o| j        S r7   )rG  rI  rJ  rH  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 r7   
annotationis_writer/   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)r/   inps     r   r   z,NativeFunction.is_view_op.<locals>.<genexpr>,  sL       
 
 N$&P3#.2P+P
 
 
 
 
 
r   )r3  returnsru  r  rK  r   r9   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  r3  r9   inplacerK  r+  r-  r,  r.  r   s    r   view_schema_kindzNativeFunction.view_schema_kind2  sU    ? 	3ty~2: 	3!TY....!22? 	/!**!..r   c                .    | j         j        j        j        S r7   )r3  r9   baser   s    r   	root_namezNativeFunction.root_name<  s    y~"''r   c                "    | j         p| j        d uS r7   r  r   s    r   part_of_structured_groupz'NativeFunction.part_of_structured_group@  s    F$":$"FFr   r7   )
rL  rM  r=  r   rN  rD  rO  rP  r   rQ  r   r  r   r   )r   r+  r   )r   r   r    r!   r   r  r  r  propertyr  r  r  r  r  r"   r   r   r0  r0    s^         NNN  ,+++  "!!!  "!!! 
 %$$$  MMM   5444  -,,, $### #""" "!!!  1000>>>>0000???? NNN 
 04	j
 j
 j
 j
 \j
X

 

 

 

&=O =O =O =O~ 
 
 
 X
 K K K XK" / / / X/ ( ( ( X( G G G XG G Gr   r0  c                  r    e Zd Z e            Z e            Z e            Z e            Z e            ZdS )r  N)	r   r   r    r   
functionalr  r  mutablescratchr"   r   r   r  r  E  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 )NativeFunctionsGroupr0  r  NativeFunction | Noner  r  r  r   r   c                    | j         j        S r7   )r  r@  r   s    r   r@  zNativeFunctionsGroup.structuredZ  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)rK  r   r3  r9   )r/   fs     r   r1   z6NativeFunctionsGroup.__post_init__.<locals>.<listcomp>  s0    QQQ!;!&;P;PS;P;P;Pr   r   c              3  4   K   | ]}t          |          V  d S r7   r   rg  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 r7   r  )r/   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 r7   r  rg  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  r3  	signature	functionsrA   r@  r  r  r9   r  r  r1  r  r  functional_overloadrG  rH  rA  sortedr   rr  r   r>  ru  RuntimeErrorr   )r   test_sigr  generated_fnsgenerated_fns_strexpected_generated_fnsexpected_generated_fns_strs          r   r  z"NativeFunctionsGroup.__post_init___  sf   #'?#7#A#A#C#C!! 	 	A16++----$_<D_ _JK&JZJZJ\J\_ _  
 !"<<<$I"&(-"4I I;<6;I I   =
 #((**j.CCCCCx}!!##z~5555(DH,>>>>><#<$))++z/AAAAA<)T_-FFFFF<#<$))++z/AAAAA<)T_-FFFFF?',1EEEE? 	N HCU V ?6$(-:LLLL?', C CDO<_ C C.2hm.@C C MLL |'|748=;MMMMMQQt~~'7'7QQQ
 
 !II%D%Dm%D%D%DDD+.55!! 	G 	GA")))F)FAI)F)F)FFFFF%)YY /
 /
"#9::/
 /
 /
 &
 &
" %&&!++M0B0BQ0F0Fj?P j j,=j jWZ[\[a[fWgWgj j  
 &):::N?P N N;LN N0JN N N   ;:r   r2  c                >    | j         j                                        S r7   )r  r3  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 r7   )r  r  r  r  r   s    r   r  zNativeFunctionsGroup.functions  sY      oh<#,<#, $#r   r   c                    | j         j        S r7   )r  r  r   s    r   r  zNativeFunctionsGroup.root_name  s    ((r   rc   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  r  )	ru  rw  rl  r  r  r  r  r  r  )rc  r  r  r  r  s        r   	from_dictzNativeFunctionsGroup.from_dict  s    qq66Q;;4GGUU:0$77
%%
*D11%%
*D11eeJND))u%%% ;4#!	
 
 
 	
r   Nr  r  r   r2  )r   r  r   )rc  r  r   r   )r   r   r    r!   r  r@  r  r  r  r  r   r  r"   r   r   r  r  S  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 )
rz  r   r^  r   r@  r_  r   c                    d| j         v S )N_symint)r^  r   s    r   r|  zBackendMetadata.supports_symint  s    DK''r   Nr  )r   r   r    r!   r|  r"   r   r   rz  rz    sQ          KKK
  ( ( ( ( ( (r   rz  c                  F    e Zd ZU ded<   ded<   ded<   edd	            Zd
S )r  r   r9   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   )r9   r  r  )r   r   r   r  r  )r=   r  r9   supported_dtypes_strr  rC   s         r   rE   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   rE   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 )BackendIndexr5   r  r   use_out_as_primaryr5  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 )r@   )r  r  rC   rD   op_namemetadatas         r   
grow_indexzBackendIndex.grow_index
  s    
  %%'' 	4 	4DAq%&WWYY 4 4!<?222GGGAGG 322+3Q((	4	4 	4r   gr  r0  c                ,    | j         r|j        S |j        S r7   )r  r  r  )r   r  s     r   primaryzBackendIndex.primary  s    " 	 5L<r   %NativeFunction | NativeFunctionsGroupc                4    |                      |          }|d uS r7   )
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 r7   )rm  r0  r  r  r	   r3  r9   r  )r   r  r  s      r   r   zBackendIndex.get_kernel   ss     a(( 	AA/00 	QAAOOO6;dj((4z!&+&&r   r7  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_name-  s-    = 	$+,,====
 4r   N)r  r  r  r  r   r  )r  r  r   r0  )r  r  r   r   )r  r  r   r#  )r   r7  )
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 )/r2  rf  r9   	Argumentsr  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_writex  s    ~%u>**r   c              3  .   K   | ]} |          V  d S r7   r"   )r/   r  r  s     r   r   z,FunctionSchema.is_mutable.<locals>.<genexpr>  s+      @@188A;;@@@@@@r   )r  r,  r   r   )r  r  r  )r   r  s    @r   
is_mutablezFunctionSchema.is_mutablev  sA    	+ 	+ 	+ 	+ @@@@(?@@@@@@r   Iterator[Argument]c                j    t          j        | j        j        | j        j        | j        j                  S r7   )	itertoolschainr  flat_positionalflat_kwarg_onlyr  r   s    r   r  z%FunctionSchema.schema_order_arguments  s.    N*N*N
 
 	
r   z3(?P<name>[^\(]+)\((?P<args>.*)\) -> (?P<returns>.*)r3  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   r9   r  r  r  )	r2  decl_refindallru  rf  rE   r)  parse_returnsr   )	r3  declsopsargsreturn_declr9   r  r  r   s	            r   rE   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 r7   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 r7   r  r/   r   r  s     r   r   z/FunctionSchema.__post_init__.<locals>.<genexpr>  s=        12,     r   z^If you have a schema with mutable positional args, we expect them to not be returned. schema: c                (    g | ]}|j         d k    |S r   r8   r  s     r   r1   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s+     3
 3
 3
SX=O=OC=O=O=Or   c                8    g | ]}|j         	|j         j        |S r7   r  r/   rets     r   r1   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s4     
 
 
~)cn.E) )))r   c                8    g | ]}|j         |j         j        |S r7   r  rI  s     r   r1   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 r7   rE  )r/   r  rJ  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 r7   )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_r9   r}  r  s     r   r1   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s>        ##&8#6#6{#C#C  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: )zipr  r  r  r  post_self_positional_mutabler  r   rq  r5  ru  r9   r  self_argargumentr  rN  rO  rP  rQ  r  r  r  r  is_functional_fn)r   r  out_and_selfmutable_returnsimmutable_returnsself_ar  rJ  s         @@r   r  zFunctionSchema.__post_init__  s   DN.== 	 	HC>S^333I 4333 < 	| 	|A    6:l     | |{pstxpypy{{| |  | DN.// 3
 3
>93
 3
 3
 

 
|
 
 


 
|
 
 
   A%%->)?)?1)D)D)Drgjkogpgprr *E)DD" 	 	CPPPP<PPPPP  J P  > 	c QQdn>PQQQQQ c%%***H +**b
  '+~'9    4<(() ) ) c) ) ) 9>! 	.^,FO. O.7 8 #x'>'>>> %%**Q2fo6PPPPQP
 4<((A---->(499;;*"7777't99' ' 877
   "" 	99;;*"7777't99' ' 877	 	77r   c                    d| j         j        v S )Nr  r9   overload_namer   s    r   rZ  zFunctionSchema.is_functional_fn  s    ty666r   c                4    t          | j        j                  S r7   )r   r  r  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 rS  rU  r  s     r   r1   z'FunctionSchema.kind.<locals>.<listcomp>+  s-    SSSS#(2E2Ek2R2RSSSSSr   c              3  @   K   | ]}|j         d uo|j         j        V  d S r7   r  r  s     r   r   z&FunctionSchema.kind.<locals>.<genexpr>.  sG       
 
 L$>)>
 
 
 
 
 
r   zFinvariant: all scratch operators are expected to be out= operators toozjWe should not categorize a scratch op as an out variant. Check if the order of if statements are expected!)r   r  r  r9   r  r  post_self_positionalr  r  r  r  )r   is_out
is_scratch
is_inplacer0  s        r   r  zFunctionSchema.kind"  s    dn())SSDN.SSS
 

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

 *z***  	)%% 	)X XWX X%% 	)!  P  P  $P  P  P>>! 	)%%((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 r7   rE  )r/   r  r   s     r   r1   z7FunctionSchema.aliased_return_names.<locals>.<listcomp>P  s9       <+0L0L 0L0L0Lr   r   r'  r   c              3  $   K   | ]}|j         V  d S r7   r8   r  s     r   r   z6FunctionSchema.aliased_return_names.<locals>.<genexpr>Z  s$      )G)GQ!&)G)G)G)G)G)Gr   zFound a return (z)that aliases multiple inputs (r  )r  r  r  ru  rt  r9   r   rA   )r   outsaliased_argsaliased_namesr   s       @r   aliased_return_namesz#FunctionSchema.aliased_return_namesM  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_namesrs  rt  ru  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r9   rN  r  )rw  r9   rN  )r   ru  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 r7   rE  rF  s     r   r   z5FunctionSchema.signature.<locals>.<genexpr>.<genexpr>  s,      KK4KKKKKKr   _outry  )r  r  r  r  rw  r9   rN  )r/   r  ru  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rs  zbernoulli.pzfloat pzfloat p=0.5Fr  r  dunder_methodr`  r8  )r   rw  r   rw  )r9   r  r~  replacetupler3  r4  r  rX  rY  r  rg  mapr  r  r   r)  rE   r2  rf  BaseOperatorNamer  )
r   rs  rt  ru  rz  	base_namereturns_from_mutable_inputsoriginal_returnsr  args_sigs
   `  `      r   r  zFunctionSchema.signature`  s   X	 	 	 	 	 	 IN'	 	D!!'** D%--gr::		##J// D%--iCC	 ', ,
 ,
 ,
 ,
 ,
 _ >*6 (122"3 ,
 ,
 ,
 '
 '
#, !%94<!H!HII"%@@>++-+HHty>>]** s8}}'<'<Y'V'VWWH%"!"&).">  
 !   
 
 
 	
r   c                .    |                      d          S )NTrt  )r  r   s    r   view_signaturezFunctionSchema.view_signature  s    ~~4~888r   c                :    t          || j        | j                  S )Nr8  )r2  r  r  )r   r9   s     r   	with_namezFunctionSchema.with_name  s&    nL
 
 
 	
r   c                p    |                                  t          j        t          j        t          j        fv S r7   )r  r  r  r  r  r   s    r   modifies_argumentsz!FunctionSchema.modifies_arguments  s$    yy{{z1:>:CUVVVr   c                4    | j                                         S r7   )r  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   r  ru  r  r   r  r9   )r   all_arguments_strr  s      r   r   zFunctionSchema.__str__  s    //t|!!$,q/**GGDIIc#t|&<&<===CG)??/??g???r   Nr  )r   r1  )r3  r   r   r2  r  )r   r  )r   rk  )rs  r   rt  r   ru  r   r   r2  r  )r9   rf  r   r2  r   )r   r   r    r!   r  r0  r  recompiler9  r   rE   rB  r  rZ  rc  r  rr  r  r  r  r  r  r   r"   r   r   r2  r2  l  s           A A A XA
 
 
 
 bjOPPG
 
 
 \

 
 
 
a a a aF7 7 7 7( ( ( (:%) %) %) %)V   , $%*"'e
 e
 e
 e
 e
 e
N9 9 9 9
 
 
 
 W W W XW/ / / /@ @ @ @ @ @r   r2  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'  rd  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   ru  r  r   )r  r!  before_aliasr  r  	after_setr   s          r   rE   zAnnotation.parse  s     HJCPP}}DsDD}}}wwqzz1771::%EQWWQZZZ2F,,,S1122	771::$	IY!+++H#HHH ,+
 56GGAJJFE!''!****3//000B	!!c)nnq&8&8&8oadooo '9&8
 (I
 
 
 1vv}}}oooo}}}r   c                    d                     | j                  }| j        r| d}d                     | j                  }|r| d | }|S )Nr  r   -> )r   r  r  r  )r   r  r  s      r   r   zAnnotation.__str__  sb    HHT^,,	= 	($I((4#788 	@$?f?o??Ir   N)r  r   r   r  r   )r   r   r    r!   r   rE   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   rE   z
Type.parse&  s9    KKNN1vv{{{qMMaMM{{{r   c                   t          j        d|           }|:t          t                              |                    d                              S t          j        d|           }|u|                    d          "t          |                    d                    nd }t          t                              |                    d                    |          S t          j        d|           }|"t          |                    d                    S 	 t          t          |                    S # t          $ r}t          d|            |d }~ww xY w)Nz^(.+)\?$r'  z^(.+)\[([0-9]+)?\]$rd  )elemsizez-^__torch__\.torch\.classes\.([a-zA-Z0-9_.]+)$zunrecognized type )r  r  OptionalTyper  rE   r  r   ListTypeCustomClassTyperO  rP  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           r7   NotImplementedErrorr   s    r   r   zType.__str__?      !!r   base_tyrP  r   c                    t           r7   r  r   r  s     r   is_base_ty_likezType.is_base_ty_likeG  r  r   c                @    |                      t          j                  S r7   )r  rP  rQ  r   s    r   is_tensor_likezType.is_tensor_likeJ      ##FM222r   c                @    |                      t          j                  S r7   )r  rP  	Generatorr   s    r   is_generator_likezType.is_generator_likeM  s    ##F$4555r   c                @    |                      t          j                  S r7   )r  rP  SymIntr   s    r   is_symint_likezType.is_symint_likeP  r  r   c                    t           r7   r  r   s    r   is_nullablezType.is_nullableS  r  r   ListType | Nonec                    t           r7   r  r   s    r   is_list_likezType.is_list_likeV  r  r   N)r  r   r   r  r   r  rP  r   r   r  r   r  )r   r   r    r   rE   r  r   r  r  r  r  r  r  r"   r   r   r  r  $  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 )rP  N)r   r   r    r   r  r   rQ  r   Dimname	DimVectorfloatr   r   LayoutDeviceDeviceIndexScalarMemoryFormatQSchemeStorageStreamr  SymBoolGraphModuler"   r   r   rP  rP  [  s        IJTVVF
$&&CdffGIDFFE
$&&C466DTVVFTVVF$&&KTVVF466LdffGdffGTVVFTVVFdffG$&&KKKr   rP  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 )rO  rP  r9   r   r   c                    | j         j          S r7   r8   r   s    r   r   zBaseType.__str__v  s    ).""r   r  r   c                    | j         |k    S r7   r8   r  s     r   r  zBaseType.is_base_ty_likey  s    yG##r   c                    dS r.  r"   r   s    r   r  zBaseType.is_nullable|      ur   r  c                    d S r7   r"   r   s    r   r  zBaseType.is_list_like      tr   c                ,    | j         t          j        k    S r7   )r9   rP  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   rO  rO  r  s         LLL# # # #$ $ $ $      * * * * * *r   rO  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  rP  r   c                6    | j                             |          S r7   r  r  r  s     r   r  zOptionalType.is_base_ty_like      y((111r   c                4    | j                                         S r7   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 r7   )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  rP  r   c                    dS r.  r"   r  s     r   r  zCustomClassType.is_base_ty_like  r  r   c                    dS r.  r"   r   s    r   r  zCustomClassType.is_symint_like  r  r   c                    dS )z8
        Assume a custom class is not nullable.
        Fr"   r   s    r   r  zCustomClassType.is_nullable  s	     ur   r  c                    d S r7   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  rP  r   c                6    | j                             |          S r7   r  r  s     r   r  zListType.is_base_ty_like  r  r   c                4    | j                                         S r7   r  r   s    r   r  zListType.is_symint_like  r  r   c                4    | j                                         S r7   )r  r  r   s    r   r  zListType.is_nullable  s    y$$&&&r   r  c                    | S r7   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   r9   r  rN  r7  rV  Annotation | Noner  r   c                    | j         S r7   rE  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\((.+)\)(.*)rd  r'   r  z[],unrecognized alias analysis form with TensorrQ  r9   rN  rV  r  r  )countr   rsplitr  r  r  r  rE   r  r,  r   )r  type_and_annot_and_namerV  type_and_annotr9   name_and_defaultr  type_sr  rN  r   s              r   rE   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 r7   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rQ  zTensor?zTensor[]rQ  Tensor(r  r'   r  r
  )rN  r  r  r9   rV  )r   rN  
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   rE   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 )rw  r7  r9   r  rN  r  r  r   c                    | j         S r7   rE  r   s    r   r   zReturn.alias_info4  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  rd  r  r  rQ  ry  r  )	r	  r  r  r  r  rE   r  rw  r   )r  r  r9   r  r  r  rN  r   s           r   rE   zReturn.parse8  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 r7   r  r   s    r   r  zReturn.is_writeW  r  r   c                    | j          }| j        r%|dv sJ |                    dd| j         d          }| j        |S | d| j         S )Nr  rQ  r  r  r
  )rN  r  r  r9   )r   rN  s     r   r   zReturn.__str__[  sl    )~? 	H<<<<<<<*FDO*F*F*FGGD9K((TY(((r   Nr  )r  r   r   rw  r  r   r  r"   r   r   rw  rw  .  s         JJJ!!!!   X    \< H H H XH) ) ) ) ) )r   rw  c                      e Zd ZU ded<   dS )SelfArgumentr,  rY  N)r   r   r    r!   r"   r   r   r  r  g  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 r7   r  r   r!  r"  r   s    r   allzTensorOptionsArguments.allv  s    
DKdoFFr   Nr   r#  )r   r   r    r!   r&  r"   r   r   r  r  o  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 | NonerX  rg  pre_tensor_options_kwarg_onlyzTensorOptionsArguments | Noner  post_tensor_options_kwarg_onlyr  r   r#  c                r    g }|                     | j                   |                     | j                   |S r7   )r   r5  r6  r   rJ  s     r   flat_non_outzArguments.flat_non_out  s6     

4'(((

4'(((
r   c                    g }|                     | j                   | j        |                    | j        j                   |                     | j                   |S r7   )r   r)  rX  rt  rY  rg  r-  s     r   r5  zArguments.flat_positional  sU     

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

4,---
r   c                $    d | j         D             S )Nc                     g | ]}|j         	|S r"   )r  r  s     r   r1   z:Arguments.post_self_positional_mutable.<locals>.<listcomp>  s    CCCa
CCCCr   )rg  r   s    r   rW  z&Arguments.post_self_positional_mutable  s    CC44CCCCr   c                    g }|                     | j                   | j        ,|                     | j                                                   |                     | j                   |S r7   )r   r*  r  r&  r+  r-  s     r   r6  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 r7   )r   r5  r6  r  r-  s     r   r  zArguments.flat_all  sJ     

4'(((

4'(((

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

4?###

4?###
r   !Sequence[Argument | SelfArgument]c                    g }|                     | j                   | j        |                    | j                   |                     | j                   |S r7   )r   r)  rX  rt  rg  r-  s     r   r6  zArguments.positional  sR    -/

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

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

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

46777
r   c                    g }|                     | j                   |                     | j                   |                     | j                   |S r7   )r   r6  r7  r  r-  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 r7   )r  r  r9   r  s     r   r1   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 r7   )rN  r  r  s     r   r   z+Arguments.has_tensor_arg.<locals>.<genexpr>  0      FFq16((**FFFFFFr   r  r.  r   s    r   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 r7   )rN  r  r  s     r   r   z+Arguments.has_symint_arg.<locals>.<genexpr>  rD  r   rE  r   s    r   r  zArguments.has_symint_arg  rF  r   c                >    t          d | j        D                       S )Nc              3  H   K   | ]}|j                                         V  d S r7   )rN  r  r  s     r   r   z.Arguments.has_generator_arg.<locals>.<genexpr>  s0      II!16++--IIIIIIr   rE  r   s    r   r  zArguments.has_generator_arg  s"    IIt7HIIIIIIr   Fr  rs  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,  r9   rN  rV  )r  rs  s    r   strip_arg_annotationz1Arguments.signature.<locals>.strip_arg_annotation  s5    VV)6@		D	   r   r"   r)  rX  rg  r*  r  r+  r  )r  r,  r   r,  )
r)  r  r  r)  rX  r  rY  rg  r*  r+  )r   rs  rM  s    ` r   r  zArguments.signature  s    	 	 	 	 	 	  %($*BCC! ! }( ""6"6t}7M"N"NOOO!&($*CDD" "
 +0($*LMM+ + C,d.QRRSS+T  +-+
 
 
 	
r   c           	         | j         J t          j        | t          t          j        | j         j        d                               S )NrE  )rX  )rX  dataclassesr  r  rY  r   s    r   remove_self_annotationz Arguments.remove_self_annotation	  sR    }((("!#DM$:tLLL 
 
 
 	
r   ro  list[Argument]c                |    t          | j                  dk    sJ t          j        | t	          |                    S )Nr   )r  )ru  r  rP  r  r  )r   ro  s     r   with_out_argszArguments.with_out_args	  sA    48}}!!!!"d
 
 
 	
r   r>  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,  rE   r  r  rt  )r>  r6  r7  r  arguments_accr  pargs          r   	_preparsezArguments._preparse	  s    %'
%'
 " ::d## 	' 	'C czz!Z///O 0// *>>#&&D *t/G* J.."j00$'M$C////  &&&&:s**r   c                   t                               |           \  }}}d}t          |          D ]\  }}|j        dk    r|} n|-|d|         }t	          ||                   }||dz   d         }	ng }d}|}	g }
d}g }|
}d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'  r9   r   tyr  r   Callable[[Argument], bool]c                      fdS )Nc                J    | j         k    o| j        t                    fv S r7   )r9   rN  r  )r  r9   r[  s    r   <lambda>z/Arguments.parse.<locals>.pred.<locals>.<lambda>g	  s&    QVt^P2|B?O?O:P0P r   r"   )r9   r[  s   ``r   predzArguments.parse.<locals>.predf	  s    PPPPPPr   r  r   r   r  r!  r  r"  r   r   c              3  2   K   | ]\  }} ||          V  d S r7   r"   )r/   pr  s      r   r   z"Arguments.parse.<locals>.<genexpr>u	  sB        1 AaDD     r   rd  r\  r%  rN  )r9   r   r[  r  r   r\  )r)  rY  	enumerater9   r  r  rE   ru  r&  rV  r  rt  r  )r>  r6  r7  r  self_ixir  r)  rX  rg  r*  r  r+  kwarg_only_accr`  
predicatess                   r   rE   zArguments.parseA	  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   r5  r6  r  rt  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 r7   r  r  s     r   r1   z+Arguments.__post_init__.<locals>.<listcomp>	  s4     (
 (
 (
|'AL,A' '''r   r   zOmutable pre_self_positional arguments are not currently supported in the schema)rX  r)  r  r+  ru  )r   mutable_pre_self_positionalss     r   r  zArguments.__post_init__	  s     = ////&::::(
 (
-(
 (
 (
$ ,--222\ 32222r   Nr'  )r   r4  )r   r9  )r   r;  r   r>  r  )rs  r   r   r)  )r   r)  )ro  rR  r   r)  )r>  r   r   rU  )r>  r   r   r)  r   r  )r   r   r    r!   r  r.  r5  rW  r6  r  r8  r6  r7  r&  rA  r  r  r  r  rQ  rT  r   rY  rE   r   r  r"   r   r   r)  r)  z  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 !
 !
 !
 !
 !
 !
F
 
 
 

 
 
 
 !+ !+ !+ \!+F M
 M
 M
 \M
^( ( ( (] ] ] ] ] ]r   r)  )r   submuldivmodpowlshiftrshiftandxororc                  \    e Zd ZU ded<   ded<   ded<   dZded<   edd
            ZddZdS )r  r   r  r   r  r  Fr  r  r   c                d   | dk    sJ |                      d          r
J d            t          j        d|           }|Ud}|                    d          t	          fdt
          D                       rd}dd          n0d}d	         d
k    sJ nd}| d         dk    rd}d d         nd}d}                     |          r!d}d t          |                    |s|rJ nd}t          |||          }t          |          | k    sJ t          |           d|              |S )Nr'   r  zs_out suffix is reserved and not permitted for operator names; did you mean to specify an out overload name instead?z^__([^_]+)__$Tr'  c              3  *   K   | ]}d | k    V  dS )re  Nr"   )r/   nr  s     r   r   z)BaseOperatorName.parse.<locals>.<genexpr>	  s-      GGq47q77?GGGGGGr   Fr   re  r  __functional)r  r  r  r  r  )	r~  r  r  r  r  AUGMENTED_ASSIGNMENT_NAMESru  r  r   )r  r!  r  r  functional_suffixr  r   r  s          @r   rE   zBaseOperatorName.parse	  s   Rxxxx;;v&& 	
 	
D	
 	
& H%r**= M771::DGGGG,FGGGGG 	&ABBx
 Aw#~~~~~!MDBx3CRCy *==*++ 	("&13011112D %4W4444"'' 3	
 
 
 1vv|||A00B00|||r   c                ~    | j         r| j        rdnd}d| | j         dS | j        rdn
| j        rdnd}| j         | S )Nre  r'   __r|  r}  )r  r  r  r  )r   re  s     r   r   zBaseOperatorName.__str__
  ss     	%|+A((49(((( < +]]  i$$$$r   N)r  r   r   r  r   )r   r   r    r!   r  r   rE   r   r"   r   r   r  r  	  s{         IIIMMM( !&%%%%/ / / \/b% % % % % %r   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 )rf  r  r9   r   ra  r  r   c                    d| v r|                      dd          \  }}n| }d}t          t                              |          |          }t	          |          | k    sJ t	          |           d|              |S )N.r'  r'   r`  r  )r   rf  r  rE   r   )r  r9   ra  r   s       r   rE   zOperatorName.parse(
  s    '>>")--Q"7"7D--DM.44T::-XXX1vv   SVV":":":":   r   c                B    | j         r| j         d| j          S | j         S )Nr  ra  r9   r   s    r   r   zOperatorName.__str__3
  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  r`  )rf  r  r9   r  r  ra  r   s    r   remove_inplacezOperatorName.remove_inplaceD
  sE    !Y^"i5  
 ,
 
 
 	
r   overloadc                l    t          t          | j        j        d| j        j                  |          S r  )rf  r  r9   r  r  )r   r  s     r   with_overloadzOperatorName.with_overloadN
  sB    !Y^"i5  
 #
 
 
 	
r   N)r  r   r   rf  r   )r   rf  )r  r   r   rf  )
r   r   r    r!   r   rE   r   r  r  r  r"   r   r   rf  rf  #
  s            \" " " "" " " "
 
 
 

 
 
 
 
 
r   rf  r  r  bc                    | j                                         t          j        uo/|                    |            o|                    |j                  S r7   )r3  r  r  r  r"  )r  r  r  s      r   "gets_generated_out_inplace_wrapperr  Y
  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 )NativeFunctionsViewGroupr0  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   r3  r9   get_view_copy_namer  r~  r  rK  r  rG  rH  r   s    r   r  z&NativeFunctionsViewGroup.__post_init__x
  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 O 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 r7   )r  r  r  )r   r  s     r   r  z"NativeFunctionsViewGroup.functions
  sX      i(####>%,%.      &%%%r   r   c                    | j         j        S r7   )r  r  r   s    r   r  z"NativeFunctionsViewGroup.root_name
  s    y""r   c                    | j         j        S r7   )r  rG  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  n
  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  rG  rK  r3  r9   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  r`  )	r   r3  r9   r  r  rf  r  r  ra  )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   r?  r*  c                    | dk    rdS | d         dk    r| d         dk    r
| dd         } t          d |                     d	          D                       S )
z$
    Input: '()'
    Output: []
    z()r"   r   r  r  r  r'  c              3  J   K   | ]}t                               |          V  d S r7   )rw  rE   r  s     r   r   z parse_returns.<locals>.<genexpr>
  s.      FFsc""FFFFFFr   r   )r  r   )r?  s    r   r;  r;  
  sj    
 dr1~RC!7!7!!B$'FFk.?.?.E.EFFFFFFr   c                  L    e Zd ZU ded<   ded<   edd            Zdd
ZddZdS )rs  zdict[str, list[Argument]]r  rR  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,  rE   rx  r/   r9   s     r   r1   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   r1   z$Precompute.parse.<locals>.<listcomp>  s,    QQQthnnTZZ\\::QQQr   )r  r   zr.to_list() != src)rm  rq  r   r   rs  to_list)
r  add_argsadd_listr  raw_replace_itemr  with_list_raw	with_listwith_list_argsr   s
             r   rE   zPrecompute.parse
  sT   #t$$$$$ R  2w}}S))HJJJJJHcrc(C # 	* 	*.44444----5 .--
 "2!7!7!?!?C3NSNNN %++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 r7   )r   r9   upperr  r   )r   r  r>  s      r   r  zPrecompute.__post_init__  s      	, 	,A6<<>>QV+++++L'')) 	0 	0D 0 0v||~~/////0	0 	0r   r>  c                    g }| j                                         D ]>\  }}d                    d |D                       }|                    | d|            ?|S )Nr   c              3  4   K   | ]}t          |          V  d S r7   r  )r/   params     r   r   z%Precompute.to_list.<locals>.<genexpr>$  s(      $P$PESZZ$P$P$P$P$P$Pr   r  )r  r@   r   rt  )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   rs  r  rm  )r   r   r    r!   r   rE   r  r  r"   r   r   rs  rs  
  sw          '&&&" " " \"H0 0 0 0     r   rs  r   )r   r5   r   r   )r  r0  r  r  r  r  r   r   )r  r0  r   r   )r  r0  r   rf  )r?  r   r   r*  )q
__future__r   rP  r3  r  r   enumr   r   typingr   r   torchgen.utilsr	   r
   r   collections.abcr   r   r   r$   r  r   r   r   AUTOGRAD_KEYSFRAGMENT_NAMESPACESr5   r   r   r   r   hasattrr   printr  rx   rt   rs   rz   r   r   r   r   rQ   r   r   r   r   r   rn   ro   rp   rq   r   r   r   r~   r   r   r   r   rX   ry  r   r   r   r   r   dispatch_device_mapr   r   r!   r  r  r  r  r  r	  r
  r  r  r  r&  r+  r0  r  r  rz  r  r  r2  r  r  rP  rO  r  r  r  r,  rw  r  r  r)  r~  r  rf  r  r  r  r  r;  rs  r"   r   r   <module>r     s   " " " " " " "         				 ! ! ! ! ! !         * * * * * * * * D D D D D D D D D D  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   7B         * * * *% % % %
 ,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   $ $a	G a	G a	G a	G a	G a	G a	G a	GH        $q
 q
 q
 q
 q
 q
 q
 q
h $( ( ( ( ( ( ( (, $
 
 
 
 
 
 
 
6 $8 8 8 8 8 8 8 8` $q@ q@ q@ q@ q@ q@ q@ q@x $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 $p] p] p] p] p] p] p] p]l	   * $W% W% W% W% W% W% W% W%x $2
 2
 2
 2
 2
 2
 2
 2
j   * $;@ ;@ ;@ ;@ ;@ ;@ ;@ ;@|   .   0	G 	G 	G 	G $; ; ; ; ; ; ; ; ; ;r   