
    Χgٸ                   
   U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZ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dld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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:        gZ;dmdZ<dmd Z=dmd!Z>dmd"Z?dmd#Z@ G d$ d%e          ZAi ZBd&eCd'<    eeAjD        eAjE        eAjF        eAjG        eAjH        g          eBd(<    eeAjI        eAjJ        g          eBd)<    eeAjK        eAjL        g          eBd*<   eBd(         eBd)         z  eBd+<   eBd+         eBd*         z  eBd,<   eBd)         eBd*         z  eBd-<    G d. d/e          ZM G d0 d1e          ZN G d2 d3e          ZO ed           G d4 d5                      ZP G d6 d7e          ZQ ed           G d8 d9                      ZR ed           G d: d;                      ZS ed           G d< d=                      ZT ed           G d> d?                      ZU ed           G d@ dA                      ZV ed           G dB dC                      ZW ed           G dD dE                      ZX G dF dGe          ZY ed           G dH dIeX                      ZZ ed           G dJ dKeX                      Z[ ed           G dL dMeX                      Z\ ed           G dN dOeX                      Z] ed           G dP dQ                      Z^ ed           G dR dS                      Z_ ed           G dT dU                      Z` ed           G dV dW                      Za ed           G dX dY                      Zbg dZZc ed           G d[ d\                      Zd ed           G d] d^                      ZedndbZf ed           G dc dd                      ZgdodeZhdpdfZidqdiZj ed           G dj dk                      ZkdS )r    )annotationsN)	dataclass)autoEnum)CallableIteratorSequence)assert_neverNamespaceHelper
OrderedSetT)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    J/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/model.py__str__zLocation.__str__,   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#   1   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>r0   F   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 r6   )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 )r4   __members__itemsAssertionErrorr<   kvs      r   parsezDispatchKey.parse   sR    +1133 	 	DAqEzz <U<<===r   Nr   )r<   r   r   r4   )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;   staticmethodrD   r!   r   r   r4   r4   O   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   r4   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 ]'}t          D ]}|                     d| | d           (d                    |           S )Nz    z	 = auto()
)FUNCTIONALITY_KEYSBACKEND_COMPONENTSappendjoin)rfkbcs      r   codegen_per_backend_entriesr      s`    
A  / /$ 	/ 	/BHH-B----....	/99Q<<r   zMissing zL from DispatchKey enum.  Here is the autogenerated list we expect to have:

dkboolc                b    | t           j        t           j        t           j        t           j        hv S r6   r4   ro   rp   rm   rn   r   s    r   is_generic_dispatch_keyr   1  s,    -:-9	  r   c                    | t           j        t           j        t           j        t           j        t           j        t           j        hv S r6   )r4   rs   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 r6   )r4   ry   r   r   r   r   r   r   s    r   is_xpu_dispatch_keyr   G  s7      #  r   c                    | t           v S r6   )STRUCTURED_DISPATCH_KEYSr   s    r   is_structured_dispatch_keyr   T  s    )))r   c                    | t           v S r6   )UFUNC_DISPATCH_KEYSr   s    r   is_ufunc_dispatch_keyr   X  s    $$$r   c                     e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
 e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            Z e            ZddZedd            Zedd            Zedd
            ZdS )
ScalarTyper   r   c                    | j         S r6   r7   r   s    r   r   zScalarType.__str__q  r9   r   r<   ScalarType | Nonec                b    t           j                                        D ]\  }}|| k    r|c S d S r6   )r   r>   r?   rA   s      r   maybe_parsezScalarType.maybe_parset  s@    *0022 	 	DAqEzz tr   c                X    t                               |           }|J d|              |S )Nzunknown dtype )r   r   )r<   mb_rs     r   rD   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   rD   )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   rD   r   r!   r   r   r   r   ^  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 r6   r7   r   s    r   r   zUfuncKey.__str__  r9   r   r<   c                    t           j                                        D ]\  }}|| k    r|c S t          d|            )Nzunknown ufunc key )r  r>   r?   r@   rA   s      r   rD   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   rD   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
        r.  znot a str: r"  )namespaced_entity	max_levelaten)defaultr@  r/  Fr5  r$   r   r%   zillegal variant r6  znot a bool: r7  r0  Tr1  Nzillegal device_check: r;  r<  z::zbnamespace is not supported in structured delegate, using the same namespace as the native functionr=  zbnamespace is not supported in structured inherits, using the same namespace as the native functionr3  z&functions in modules cannot be methodsr4  r>  rF  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.   )rO  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;  rZ  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   r0   z,NativeFunction.from_yaml.<locals>.<listcomp>(  s]     "
 "
 "
K999KFFFK999KEEE 
 FEEr      aH  cannot specify more than one of CompositeExplicitAutograd, CompositeExplicitAutogradNonFunctional, or CompositeImplicitAutograd on a single kernel; each strictly subsumes the other.  If you wanted to provide an explicit autograd implementation, specify CompositeExplicitAutograd; otherwise specify CompositeImplicitAutograd onlyr9  r&   c                B    g | ]}t                               |          S r!   )OperatorNamerD   r.   xs     r   r0   z,NativeFunction.from_yaml.<locals>.<listcomp>G  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!   r7   )r.   rB   rC   r.  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!)r8  rA  rB  rC  rD  rE  r,  r!   ):copypop
isinstancer   r   from_namespaced_entityget_cpp_namespacer-  rD   entity_namelistsetr   r   r   r#   r$   r%   r@   r!  r>   r$  ra  
Precomputer   lentorchgen.apirS  dictr?   r4   stripdispatch_keysBackendMetadatar   rm   r8   keyssupports_symint
startswithendswith	argumentstensor_optionshas_tensor_argDEFAULT_KERNEL_NAMESPACErp   rn   UfuncInnerLoopr  r  torchgen.api.ufuncapiufuncr   schema_kernel_namero   r   r+  )8rG  r8  rI  rJ  efuncsnamespace_helperr,  cpp_no_default_args_listr@  r/  
variants_sr5  rC   r6  r7  r0  device_check_sr1  r;  structured_delegate_sr<  r=  r3  r4  precomputed_dictr>  tags_inprF  trS  raw_dispatchrT  num_dispatch_keys%redundant_composite_implicit_autogradksrB   dispatch_keykernel_namespacer8   composites_in_dispatchautogen_strr9  raw_ufunc_inner_loopr:  vo	ufunc_keyr  rA  rB  rC  rD  rE  backend_metadatakeyr.  s8                                                          @r   	from_yamlzNativeFunction.from_yamlN  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 	7 UU#7??,d33XX5XDV5X5XXXXuu^T22,--LL/Ll/L/LLLL~t44%C*
 *
%%))) &%% "n8S&S&S&S4N44 'T&S&S !*4LL*>:LUU<//
*d++HH-HJ-H-HHHH !&;T B B$,
!31
 1
,,0.00 -,, %,<Q0Q0Q0Q? 1R0Q0Q 48 ,"."4"45J"K"Kee$94@@"*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###79!"#1  ?   5:1%++-- &E &EA##!  D DCBCC\CCD D D "s  E EDaDDlDDE E E # E EA#.#4#4QWWYY#?#?L%*%" !|{'B'B '=888; ; ; ; ; ; 988 (7'MQ( ( ($ (8'I'IRV'I'W'W$ .=/;#- $E6|DD'7*'D	. . .H\* %(MMM$//@D=;EF "Q&&+P&& '&& $	==??{'L&MMMKABRRTT N$)))7dgdldlmqdrdr 7 7#K$IJ7 7 7 *))  	 3 ;ty~&&D''==))
 N1 !N99;; )D ) ) )   ?N5@X? ? ?H[:;"
 "
"
 "
 "
 )**a//&''1,,B-. . A)* * *r	* * * eeIr**+s+++++ b   BII1B1B41H1HIII 	  !uu%7<<*C00 	1?1E1E$h&62 2X-.. ,d33 	-3355 R R2
??!!S))TT+TQR+T+TTTT!"c**WW,WTU,W,WWWW$NN1--	.<.B.B2y.Q.Q ++R !K5IKK    	999999 /........ 3   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..... */  (***)# ) ) ) +***    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;  r<  r   s    r   validate_unstructuredz$NativeFunction.validate_unstructured  sX     ? 	
 	
1	
 	
 	
 ' 	
 	
e	
 	
 	
 	
 	
r   c                   | j         j        j        r | j        t          j        hk    s
J d            | j        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j
        rB| j                                         t          j        k    s
J d            | j	        s
J d            | j        r| j
        r
J d            d | j                                         D             }t                              | j        |          }t          |          dk    sJ d|             | j        | j        s
J d	            t#          | j         j                                      d
          r| j        t*          j        k    s
J d            dt#          | j         j                  v sdt#          | j         j                  v s(t/          d | j         j        j        D                       r;dt#          | j         j                  vr t#          | j         j        j                  dvs| j         j                                        r,d| j        v s!J t#          | j         j                              d S d S )NzNative functions with out arguments MUST be declared with only function variant; e.g., variants: function; otherwise you will tickle a Python argument binding bug (which usually manifests itself as the result variable being undefined.)zYPut structured field on the out= variant of a function; did you mean structured_delegate?z:device_guard: False is not respected by structured kernelszQstructured_delegate field not allowed on out= functions; did you mean structured?z?Cannot have both structured and structured_delegate on functionc                *    h | ]}|j         	|j        S r6   )rQ  r8   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  Nr7   r.   args     r   	<genexpr>z/NativeFunction.__post_init__.<locals>.<genexpr>  s:        25	SX-     r   backward)_cudnn_init_dropout_statenondeterministic_seeded)r.  ry  outr5  r#   r$   r;  kind
SchemaKindr0  r<  schema_order_argumentsrm  
differencer@  ro  r=  r   r8   rw  r1  r!  r#  anyflat_allhas_generator_argrF  )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 # 	L9>>##z~555> 655
 !L LKL L L O	M $ 8	M 	ML	M 	M 	M
 
 I<<>>
 
 
 ~~d&>@STT<  A%%%'U|'U'U%%%#/F FEF 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 r6   )rB  rD  rE  rC  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 r6   
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   )r.  returnsro  r  rF  r   r8   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  r.  r8   inplacerF  r&  r(  r'  r)  r   s    r   view_schema_kindzNativeFunction.view_schema_kind*  sU    ? 	3ty~2: 	3!TY....!22? 	/!**!..r   c                .    | j         j        j        j        S r6   )r.  r8   baser   s    r   	root_namezNativeFunction.root_name4  s    y~"''r   c                "    | j         p| j        d uS r6   r  r   s    r   part_of_structured_groupz'NativeFunction.part_of_structured_group8  s    F$":$"FFr   r6   )
rG  rH  r8  r   rI  r?  rJ  rK  r   rL  r   r  r   r   )r   r&  r   )r   r   r   r    r   r  r  r  propertyr  r  r  r  r  r!   r   r   r+  r+    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   r+  c                  r    e Zd Z e            Z e            Z e            Z e            Z e            ZdS )r  N)	r   r   r   r   
functionalr  r  mutablescratchr!   r   r   r  r  =  sE        JdffG
$&&CdffGdffGGGr   r  c                      e Zd ZU 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 )NativeFunctionsGroupr+  r  NativeFunction | Noner  r  r  r   r   c                    | j         j        S r6   )r  r;  r   s    r   r;  zNativeFunctionsGroup.structuredR  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)rF  r   r.  r8   )r.   fs     r   r0   z6NativeFunctionsGroup.__post_init__.<locals>.<listcomp>  s0    QQQ!;!&;P;PS;P;P;Pr   r   c              3  4   K   | ]}t          |          V  d S r6   r   rb  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 r6   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 r6   r  rb  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  r.  	signature	functionsr@   r;  r  r  r8   r  r  r,  r  r  functional_overloadrB  rC  r<  sortedr   rm  r   r9  ro  RuntimeErrorr   )r   test_sigr  generated_fnsgenerated_fns_strexpected_generated_fnsexpected_generated_fns_strs          r   r  z"NativeFunctionsGroup.__post_init__W  se   #'?#7#A#A#C#C!! 	 	A16++----$_<D_ _JK&JZJZJ\J\_ _  
 !"<<<$I"&(-"4I I;<6;I I   =
 #((**j.CCCCCx}!!##z~5555(DH,>>>>><#<$))++z/AAAAA<)T_-FFFFF<#<$))++z/AAAAA<)T_-FFFFF?',1EEEE? 	N HCU  
 ?6$(-:LLLL?', C CDO<_ C C.2hm.@C C MLL |'|748=;MMMMMQQt~~'7'7QQQ
 
 !II%D%Dm%D%D%DDD+.55!! 	G 	GA")))F)FAI)F)F)FFFFF%)YY /
 /
"#9::/
 /
 /
 &
 &
" %&&!++M0B0BQ0F0Fj?P j j,=j jWZ[\[a[fWgWgj j  
 &):::N?P N N;LN N0JN N N   ;:r   r-  c                >    | j         j                                        S r6   )r  r.  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 r6   )r  r  r  r  r   s    r   r  zNativeFunctionsGroup.functions  sY      oh<#,<#, $#r   r   c                    | j         j        S r6   )r  r  r   s    r   r  zNativeFunctionsGroup.root_name  s    ((r   r^   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  )	ro  rq  rg  r  r  r  r  r  r  )r^  r  r  r  r  s        r   	from_dictzNativeFunctionsGroup.from_dict  s    q66Q;;4GGUU:0$77
%%
*D11%%
*D11eeJND))%%% ;4#!	
 
 
 	
r   Nr  r  r   r-  )r   r  r   )r^  r  r   r  )r   r   r   r    r  r;  r  r  r  r  r   r  r!   r   r   r  r  K  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 )
rt  r   rY  r   r;  rZ  r   c                    d| j         v S )N_symint)rY  r   s    r   rv  zBackendMetadata.supports_symint  s    DK''r   Nr  )r   r   r   r    rv  r!   r   r   rt  rt    sQ          KKK
  ( ( ( ( ( (r   rt  c                  F    e Zd ZU ded<   ded<   ded<   edd	            Zd
S )r}  r   r8   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   )r8   r  r  )r   r   r   r   r}  )r<   r  r8   supported_dtypes_strr  rB   s         r   rD   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   rD   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 )BackendIndexr4   r  r   use_out_as_primaryr0  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  rB   rC   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  r+  c                ,    | j         r|j        S |j        S r6   )r  r  r  )r   r  s     r   primaryzBackendIndex.primary  s    " 	 5L<r   %NativeFunction | NativeFunctionsGroupc                4    |                      |          }|d uS r6   )
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 r6   )rh  r+  r  r  r
   r.  r8   r  )r   r  r  s      r   r  zBackendIndex.get_kernel  ss     a(( 	AA/00 	QAAOOO6;dj((4z!&+&&r   r2  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   r+  )r  r  r   r   )r  r  r   r  )r   r2  )
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 )/r-  ra  r8   	Argumentsry  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_writep  s    ~%u>**r   c              3  .   K   | ]} |          V  d S r6   r!   )r.   r  r  s     r   r  z,FunctionSchema.is_mutable.<locals>.<genexpr>w  s+      @@188A;;@@@@@@r   )r  r'  r   r   )r  ry  r  )r   r  s    @r   
is_mutablezFunctionSchema.is_mutablen  sA    	+ 	+ 	+ 	+ @@@@(?@@@@@@r   Iterator[Argument]c                j    t          j        | j        j        | j        j        | j        j                  S r6   )	itertoolschainry  flat_positionalflat_kwarg_onlyr  r   s    r   r  z%FunctionSchema.schema_order_argumentsy  s.    N*N*N
 
 	
r   z3(?P<name>[^\(]+)\((?P<args>.*)\) -> (?P<returns>.*)r.  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   r8   ry  r  r  )	r-  decl_refindallro  ra  rD   r$  parse_returnsr   )	r.  declsopsargsreturn_declr8   ry  r  r   s	            r   rD   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 r6   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 r6   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   r7   r  s     r   r0   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s+     3
 3
 3
SX=O=OC=O=O=Or   c                8    g | ]}|j         	|j         j        |S r6   r  r.   rets     r   r0   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s4     
 
 
~)cn.E) )))r   c                8    g | ]}|j         |j         j        |S r6   r  rD  s     r   r0   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 r6   r@  )r.   r  rE  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 r6   )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_r8   rw  r  s     r   r0   z0FunctionSchema.__post_init__.<locals>.<listcomp>  s>       "x22;??  r   zMMust return as many arguments as there are out arguments, or no return at allr"  zFound an operator that is not functional or out variant, but has tensor options arguments.This is not allowed- tensor options arguments are only allowed for factory functions.schema: zFound an operator that is not functional, but its overload contains the string 'functional'.This is a special keyword in the codegen, please use a different overload name.schema: )zipry  r  r  r  post_self_positional_mutabler  r   rl  r0  ro  r8   r  self_argargumentr  rI  rJ  rK  rL  rz  r  r  r  is_functional_fn)r   r  out_and_selfmutable_returnsimmutable_returnsself_ar  rE  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    > 	c QQdn>PQQQQQ c%%***H +**b  #'>#5    L    c   9>! 	.^,FO. O.7  
 #x'>'>>> %%**Q2fo6PPPPPP
 4<((A---->(499;;*"7777't99' ' 877
   "" 	99;;*"7777't99' ' 877	 	77r   c                    d| j         j        v S )Nr  r8   overload_namer   s    r   rU  zFunctionSchema.is_functional_fn  s    ty666r   c                4    t          | j        j                  S r6   )r   ry  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 rN  rP  r  s     r   r0   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 r6   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   ry  r  r8   r  r  post_self_positionalr  r  r  r  )r   is_out
is_scratch
is_inplacer+  s        r   r  zFunctionSchema.kind  s&    dn())SSDN.SSS
 

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

 *z***  	)%% 	)X XWX X X %% 	)| |{| | | >! 	)%%((r   list[str | None]c                |   g }| j         D ]fd| j        j        D             }t          |          dk    r|                    d            Ct          |          dk    r!|                    |d         j                   wd                    d |D                       }t          dj         d| d          |S )	Nc                B    g | ]}|j         	|j         j         k    |S r6   r@  )r.   r  r   s     r   r0   z7FunctionSchema.aliased_return_names.<locals>.<listcomp>I  s9       <+0L0L 0L0L0Lr   r   r"  r   c              3  $   K   | ]}|j         V  d S r6   r7   r  s     r   r  z6FunctionSchema.aliased_return_names.<locals>.<genexpr>S  s$      )G)GQ!&)G)G)G)G)G)Gr   zFound a return (z)that aliases multiple inputs (r  )r  ry  r  ro  r   r8   r   r@   )r   outsaliased_argsaliased_namesr   s       @r   aliased_return_namesz#FunctionSchema.aliased_return_namesF  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_namesrn  ro  rp  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r8   rI  r  )rr  r8   rI  )r   rp  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 r6   r@  rA  s     r   r  z5FunctionSchema.signature.<locals>.<genexpr>.<genexpr>  s,      KK4KKKKKKr   _outrt  )r  r  r  r  rr  r8   rI  )r.   r  rp  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rn  zbernoulli.pzfloat pzfloat p=0.5Fr  r  dunder_methodr[  r3  )r   rr  r   rr  )r8   r  rx  replacetupler.  r/  ry  rS  rT  r  rb  mapr  r  r   r$  rD   r-  ra  BaseOperatorNamer  )
r   rn  ro  rp  ru  	base_namereturns_from_mutable_inputsoriginal_returnsr  args_sigs
   `  `      r   r  zFunctionSchema.signatureY  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ro  )r  r   s    r   view_signaturezFunctionSchema.view_signature  s    ~~4~888r   c                :    t          || j        | j                  S )Nr3  )r-  ry  r  )r   r8   s     r   	with_namezFunctionSchema.with_name  s&    nL
 
 
 	
r   c                p    |                                  t          j        t          j        t          j        fv S r6   )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 r6   )ry  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   ry  ro  r  r   r  r8   )r   all_arguments_strr  s      r   r   zFunctionSchema.__str__  s    //t|!!$,q/**GGDIIc#t|&<&<===CG)??/??g???r   Nr  )r   r,  )r.  r   r   r-  r  )r   r  )r   rf  )rn  r   ro  r   rp  r   r   r-  r  )r8   ra  r   r-  r   )r   r   r   r    r  r+  r  recompiler4  r   rD   r=  r  rU  r^  r  rm  r  r  r  r  r  r   r!   r   r   r-  r-  d  s           A A A XA
 
 
 
 bjOPPG
 
 
 \

 
 
 
` ` ` `D7 7 7 7( ( ( (:') ') ') ')Z   , $%*"'e
 e
 e
 e
 e
 e
N9 9 9 9
 
 
 
 W W W XW/ / / /@ @ @ @ @ @r   r-  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"  r_  r&   |rW  !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   ro  r  r   )r  r  before_aliasr  r  	after_setr   s          r   rD   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 ,++45GGAJJFE!''!****3//000B	!!c)nnq&8&8&8oadooo '9&8&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   rD   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   rD   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]+)?\]$r_  )elemsizez-^__torch__\.torch\.classes\.([a-zA-Z0-9_.]+)$zunrecognized type )r  r  OptionalTyper  rD   r  r   ListTypeCustomClassTyperJ  rK  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           r6   NotImplementedErrorr   s    r   r   zType.__str__8      !!r   base_tyrK  r   c                    t           r6   r  r   r  s     r   is_base_ty_likezType.is_base_ty_like@  r  r   c                @    |                      t          j                  S r6   )r  rK  rL  r   s    r   is_tensor_likezType.is_tensor_likeC      ##FM222r   c                @    |                      t          j                  S r6   )r  rK  	Generatorr   s    r   is_generator_likezType.is_generator_likeF  s    ##F$4555r   c                @    |                      t          j                  S r6   )r  rK  SymIntr   s    r   is_symint_likezType.is_symint_likeI  r  r   c                    t           r6   r  r   s    r   is_nullablezType.is_nullableL  r  r   ListType | Nonec                    t           r6   r  r   s    r   is_list_likezType.is_list_likeO  r  r   N)r  r   r   r  r   r  rK  r   r   r  r   r  )r   r   r   r   rD   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 e            ZdS )rK  N)r   r   r   r   r  r   rL  r   Dimname	DimVectorfloatr   r   LayoutDeviceDeviceIndexScalarMemoryFormatQSchemeStorageStreamr  SymBoolConstQuantizerPtrGraphModuler!   r   r   rK  rK  T  s        IJTVVF
$&&CdffGIDFFE
$&&C466DTVVFTVVF$&&KTVVF466LdffGdffGTVVFTVVFdffG$&&KKKr   rK  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 )rJ  rK  r8   r   r   c                    | j         j          S r6   r7   r   s    r   r   zBaseType.__str__p  s    ).""r   r  r   c                    | j         |k    S r6   r7   r  s     r   r  zBaseType.is_base_ty_likes  s    yG##r   c                    dS r)  r!   r   s    r   r  zBaseType.is_nullablev      ur   r  c                    d S r6   r!   r   s    r   r  zBaseType.is_list_likey      tr   c                ,    | j         t          j        k    S r6   )r8   rK  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   rJ  rJ  l  s         LLL# # # #$ $ $ $      * * * * * *r   rJ  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  rK  r   c                6    | j                             |          S r6   r  r  r  s     r   r  zOptionalType.is_base_ty_like      y((111r   c                4    | j                                         S r6   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 r6   )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  rK  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 r6   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  rK  r   c                6    | j                             |          S r6   r  r  s     r   r  zListType.is_base_ty_like  r  r   c                4    | j                                         S r6   r  r   s    r   r  zListType.is_symint_like  r  r   c                4    | j                                         S r6   )r  r  r   s    r   r  zListType.is_nullable  s    y$$&&&r   r  c                    | S r6   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   r8   r  rI  r2  rQ  Annotation | Noner  r   c                    | j         S r6   r@  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\((.+)\)(.*)r_  r&   r  z[],unrecognized alias analysis form with TensorrL  r8   rI  rQ  r  r  )countr   rsplitr  r  r  r  rD   r  r'  r   )r  type_and_annot_and_namerQ  type_and_annotr8   name_and_defaultr  type_sr  rI  r   s              r   rD   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 r6   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rL  zTensor?zTensor[]rL  Tensor(r  r&   r  r  )rI  r  r  r8   rQ  )r   rI  
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   rD   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 )rr  r2  r8   r  rI  r  r  r   c                    | j         S r6   r@  r   s    r   r  zReturn.alias_info.  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   r_  r  r  rL  rt  r  )	r  r  r  r  r  rD   r  rr  r   )r  r  r8   r  r	  r  rI  r   s           r   rD   zReturn.parse2  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 r6   r  r   s    r   r  zReturn.is_writeQ  r  r   c                    | j          }| j        r%|dv sJ |                    dd| j         d          }| j        |S | d| j         S )Nr  rL  r  r  r  )rI  r  r  r8   )r   rI  s     r   r   zReturn.__str__U  sl    )~? 	H<<<<<<<*FDO*F*F*FGGD9K((TY(((r   Nr  )r  r   r   rr  r  r   r  r!   r   r   rr  rr  (  s         JJJ!!!!   X    \< H H H XH) ) ) ) ) )r   rr  c                      e Zd ZU ded<   dS )SelfArgumentr'  rT  N)r   r   r   r    r!   r   r   r  r  a  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 r6   r  r  r  r  r   s    r   allzTensorOptionsArguments.allp  s    
DKdoFFr   Nr   r  )r   r   r   r    r"  r!   r   r   r  r  i  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 | NonerS  rb  pre_tensor_options_kwarg_onlyzTensorOptionsArguments | Nonerz  post_tensor_options_kwarg_onlyr  r   r  c                r    g }|                     | j                   |                     | j                   |S r6   )extendr0  r1  r   rE  s     r   flat_non_outzArguments.flat_non_out  s6     

4'(((

4'(((
r   c                    g }|                     | j                   | j        |                    | j        j                   |                     | j                   |S r6   )r)  r%  rS  r   rT  rb  r*  s     r   r0  zArguments.flat_positional  sU     

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

4,---
r   c                $    d | j         D             S )Nc                     g | ]}|j         	|S r!   )r  r  s     r   r0   z:Arguments.post_self_positional_mutable.<locals>.<listcomp>  s    CCCa
CCCCr   )rb  r   s    r   rR  z&Arguments.post_self_positional_mutable  s    CC44CCCCr   c                    g }|                     | j                   | j        ,|                     | j                                                   |                     | j                   |S r6   )r)  r&  rz  r"  r'  r*  s     r   r1  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 r6   )r)  r0  r1  r  r*  s     r   r  zArguments.flat_all  sJ     

4'(((

4'(((

48
r   :Sequence[Argument | SelfArgument | TensorOptionsArguments]c                r    g }|                     | j                   |                     | j                   |S r6   )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 r6   )r)  r%  rS  r   rb  r*  s     r   r3  zArguments.positional  sR    -/

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

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

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

46777
r   c                    g }|                     | j                   |                     | j                   |                     | j                   |S r6   )r)  r3  r4  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 r6   )r  r  r8   r  s     r   r0   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 r6   )rI  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 r6   )rI  r  r  s     r   r  z+Arguments.has_symint_arg.<locals>.<genexpr>  rA  r   rB  r   s    r   r  zArguments.has_symint_arg  rC  r   c                >    t          d | j        D                       S )Nc              3  H   K   | ]}|j                                         V  d S r6   )rI  r  r  s     r   r  z.Arguments.has_generator_arg.<locals>.<genexpr>  s0      II!16++--IIIIIIr   rB  r   s    r   r  zArguments.has_generator_arg  s"    IIt7HIIIIIIr   Fr}  rn  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'  r8   rI  rQ  )r  rn  s    r   strip_arg_annotationz1Arguments.signature.<locals>.strip_arg_annotation  s5    VV)6@		D	   r   r!   r%  rS  rb  r&  rz  r'  r  )r  r'  r   r'  )
r$  r  r  r%  rS  r  rT  rb  r&  r'  )r   rn  rJ  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 )Nr@  )rS  )rS  dataclassesr  r  rT  r   s    r   remove_self_annotationz Arguments.remove_self_annotation	  sR    }((("!#DM$:tLLL 
 
 
 	
r   rj  list[Argument]c                |    t          | j                  dk    sJ t          j        | t	          |                    S )Nr   )r  )ro  r  rM  r  r  )r   rj  s     r   with_out_argszArguments.with_out_args	  sA    48}}!!!!"d
 
 
 	
r   r9  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'  rD   r  r  r   )r9  r3  r4  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"  r8   r   tyr  r   Callable[[Argument], bool]c                      fdS )Nc                J    | j         k    o| j        t                    fv S r6   )r8   rI  r  )r  r8   rX  s    r   <lambda>z/Arguments.parse.<locals>.pred.<locals>.<lambda>a	  s&    QVt^P2|B?O?O:P0P r   r!   )r8   rX  s   ``r   predzArguments.parse.<locals>.pred`	  s    PPPPPPr   r  r   r  r  r  r  r  r   r   c              3  2   K   | ]\  }} ||          V  d S r6   r!   )r.   pr  s      r   r  z"Arguments.parse.<locals>.<genexpr>o	  sB        1 AaDD     r   r_  rW  r!  rK  )r8   r   rX  r  r   rY  )r$  rV  	enumerater8   r  r  rD   ro  r"  rQ  r  r   r  )r9  r3  r4  r  self_ixir  r%  rS  rb  r&  rz  r'  kwarg_only_accr]  
predicatess                   r   rD   zArguments.parse;	  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   r0  r1  r  r   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 r6   r  r  s     r   r0   z+Arguments.__post_init__.<locals>.<listcomp>	  s4     (
 (
 (
|'AL,A' '''r   r   zOmutable pre_self_positional arguments are not currently supported in the schema)rS  r%  rz  r'  ro  )r   mutable_pre_self_positionalss     r   r  zArguments.__post_init__	  s     = ////&::::(
 (
-(
 (
 (
$ ,--222\ 32222r   Nr#  )r   r1  )r   r6  )r   r8  r   r;  r  )rn  r   r   r$  )r   r$  )rj  rO  r   r$  )r9  r   r   rR  )r9  r   r   r$  r   r  )r   r   r   r    r  r+  r0  rR  r1  r  r5  r3  r4  r"  r>  r{  r  r  r  rN  rQ  r   rV  rD   r   r  r!   r   r   r$  r$  t  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 )rb  Nr!   )r.   nr  s     r   r  z)BaseOperatorName.parse.<locals>.<genexpr>	  s-      GGq47q77?GGGGGGr   Fr   rb  r  __functional)r  r  r  r  r  )	rx  r  r  r  r  AUGMENTED_ASSIGNMENT_NAMESro  r  r   )r  r  r  r  functional_suffixr  r   r  s          @r   rD   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 )Nrb  r&   __ry  rz  )r  r  r  r  )r   rb  s     r   r   zBaseOperatorName.__str__
  ss     	%|+A((49(((( < +]]  i$$$$r   N)r  r   r   r  r   )r   r   r   r    r  r   rD   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 )ra  r  r8   r   r\  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   ra  r  rD   r   )r  r8   r\  r   s       r   rD   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  r\  r8   r   s    r   r   zOperatorName.__str__-
  0     	"i66$"4666i>!r   c                B    | j         r| j         d| j          S | j         S )Nry  r  r   s    r   unambiguous_namezOperatorName.unambiguous_name8
  r  r   c                v    t          t          | j        j        d| j        j                  | j                  S NFr~  r[  )ra  r  r8   r  r  r\  r   s    r   remove_inplacezOperatorName.remove_inplace>
  sE    !Y^"i5  
 ,
 
 
 	
r   overloadc                l    t          t          | j        j        d| j        j                  |          S r  )ra  r  r8   r  r  )r   r  s     r   with_overloadzOperatorName.with_overloadH
  sB    !Y^"i5  
 #
 
 
 	
r   N)r  r   r   ra  r   )r   ra  )r  r   r   ra  )
r   r   r   r    r   rD   r   r  r  r  r!   r   r   ra  ra  
  s            \" " " "" " " "
 
 
 

 
 
 
 
 
r   ra  r  r  bc                    | j                                         t          j        uo/|                    |            o|                    |j                  S r6   )r.  r  r  r  r  )r  r  r  s      r   "gets_generated_out_inplace_wrapperr  S
  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 )NativeFunctionsViewGroupr+  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.)rv  rw  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   r.  r8   get_view_copy_namer  rx  r  rF  r  rB  rC  r   s    r   r  z&NativeFunctionsViewGroup.__post_init__r
  s   y####>!/	::  ty~*++ E E&ty11E E E    >&+05>>?TUUUUU9>++--1D1N1N%) 2O 2 2     $."5555t~*/00#din2E2EF D D D 655
 (9>++--1B1G1Q1Q1S1SSSSS9; 	 ,(O  49>.// h hc$:K:P:U6V6V h h h   9I 	 ,%Z  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 r6   )r  r  r  )r   r  s     r   r  z"NativeFunctionsViewGroup.functions
  sX      i(####>%,%.      &%%%r   r   c                    | j         j        S r6   )r  r  r   s    r   r  z"NativeFunctionsViewGroup.root_name
  s    y""r   c                    | j         j        S r6   )r  rB  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  h
  s          %$$$''''# # # #J 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  rB  rF  r.  r8   r  rx  )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narrowrv  Fr~  r[  )	r   r.  r8   r  r  ra  r  r  r\  )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 r6   )rr  rD   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   r6  r6  
  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 )rn  zdict[str, list[Argument]]r  rO  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  rV  c                f    g | ].}t                               |                                          /S r!   r'  rD   rr  r.   r8   s     r   r0   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   r0   z$Precompute.parse.<locals>.<listcomp>  s,    QQQthnnTZZ\\::QQQr   )r  r   zr.to_list() != src)rh  rl  r   r   rn  to_list)
r  add_argsadd_listr  raw_replace_itemr  with_list_raw	with_listwith_list_argsr   s
             r   rD   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 r6   )r   r8   upperr  r   )r   r  r9  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 r6   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   r   )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   rn  r  rj  )r   r   r   r    r   rD   r  r  r!   r   r   rn  rn  
  sw          '&&&" " " \"H0 0 0 0     r   rn  r   )r   r4   r   r   )r  r+  r  r  r  r  r   r   )r  r+  r   r   )r  r+  r   ra  )r:  r   r   r%  )l
__future__r   rM  r.  r  r   enumr   r   typingr   r   r	   torchgen.utilsr
   r   r   r   r#   r|  r   r   r   AUTOGRAD_KEYSFRAGMENT_NAMESPACESr4   r   r   r   r   hasattrr   printr  rw   rs   rr   ry   r   r   r   r   rP   r   r   r   r   rm   rn   ro   rp   r   r   r}   r   r   r   r   rW   rs  r   r   r   r   r   r   r   r    r   r   r  r  r   r  r  r  r  r  r!  r&  r+  r  r  rt  r}  r  r-  r  r  rK  rJ  r  r  r  r'  rr  r  r  r$  r{  r  ra  r  r  r  r  r6  rn  r!   r   r   <module>r     s   " " " " " " "         				 ! ! ! ! ! !         / / / / / / / / / / D D D D D D D D D D: $* * * * * * * *    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   3>         * * * *% % % %+ + + + + + + +\ 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` $r@ r@ r@ r@ r@ r@ r@ r@z $1 1 1 1 1 1 1 1t $2" 2" 2" 2" 2" 2" 2" 2"l    T   0 $* * * * *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   