
    Kin                   
   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
 d dlmZ d dlmZmZ e
r
d dlmZmZmZ  ed	
       G d d             Z G d de      ZdZg dZg dZdgeD  cg c]  } d| z   	 c} z   ZddhZ G d de      Z G d de      ZdgdZeD ]4  ZeD ]-  Z e eeez         r e       Z! e"e!        e#de e de!        6 ejH                  ejJ                  ejL                  ejN                  ejP                  hZ)ejJ                  ejL                  hZ*ejL                  ejV                  ejX                  ejZ                  ejJ                  ejH                  ejN                  ej\                  ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejj                  ejl                  ejn                  ejp                  ejr                  ejt                  ejv                  ejx                  ejz                  ej|                  ej~                  ej                  ej                  ej                  ej                  ejP                  gZDdhdZEdhdZFdhdZGdhd ZHdhd!ZIeFd"eGd#iZJ G d$ d%e      ZKi ZLd&eMd'<    eeKj                  eKj                  eKj                  eKj                  eKj                  g      eLd(<    eeKj                  eKj                  g      eLd)<    eeKj                  eKj                  g      eLd*<   eLd(   eLd)   z  eLd+<   eLd+   eLd*   z  eLd,<   eLd)   eLd*   z  eLd-<    G d. d/e      ZW G d0 d1e      ZX G d2 d3e      ZY ed	
       G d4 d5             ZZ G d6 d7e      Z[ ed	
       G d8 d9             Z\ ed	
       G d: d;             Z] ed	
       G d< d=             Z^ ed	
       G d> d?             Z_ ed	
       G d@ dA             Z` ed	
       G dB dC             Za ed	
       G dD dE             Zb G dF dGe      Zc ed	
       G dH dIeb             Zd ed	
       G dJ dKeb             Ze ed	
       G dL dMeb             Zf ed	
       G dN dOeb             Zg ed	
       G dP dQ             Zh ed	
       G dR dS             Zi ed	
       G dT dU             Zj ed	
       G dV dW             Zk ed	
       G dX dY             Zlg dZZm ed	
       G d[ d\             Zn ed	
       G d] d^             Zo	 	 	 	 	 	 	 	 did_Zp ed	
       G d` da             ZqdjdbZrdkdcZsdlddZt ed	
       G de df             Zuyc c} w )m    )annotationsN)	dataclass)autoEnum)TYPE_CHECKING)assert_never)NamespaceHelper
OrderedSet)CallableIteratorSequenceT)frozenc                  *    e Zd ZU ded<   ded<   ddZy)Locationstrfileintlinec                8    | j                    d| j                   S )N:)r   r   selfs    T/var/www/html/lcp-python-backend/venv/lib/python3.12/site-packages/torchgen/model.py__str__zLocation.__str__1   s    ))Adii[))    Nreturnr   )__name__
__module____qualname____annotations__r    r   r   r   r   ,   s    
I
I*r   r   c                  (    e Zd Z e       Z e       Zy)VariantN)r   r   r    r   functionmethodr"   r   r   r$   r$   6   s    vHVFr   r$   z
at::native)CPUCUDAHIPXLAMTIAMPSIPUXPUHPUVELazyMetaPrivateUse1PrivateUse2PrivateUse3) 	QuantizedSparse	SparseCsrNestedTensorAutogradAutogradNestedTensorr;   	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       Zy)DispatchKeyr   c                    | j                   S Nnamer   s    r   r   zDispatchKey.__str__       yyr   c                4    t        |       j                         S rB   )r   lowerr   s    r   rG   zDispatchKey.lower   s    4y  r   c                |    t         j                  j                         D ]  \  }}|| k(  s|c S  t        d|        )Nzunknown dispatch key )r@   __members__itemsAssertionErrorvaluekvs      r   parsezDispatchKey.parse   sE    ++113 	DAqEz	 4UG<==r   Nr   )rM   r   r   r@   )r   r   r    	UndefinedCatchAllr   FPGAMAIAVulkanMetalMKLDNNOpenGLOpenCLIDEEPCustomRNGKeyId	MkldnnCPUr8   r9   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FuncTorchBatchedDecompositionr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   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   rG   staticmethodrP   r"   r   r   r@   r@   d   s   IH6D6DVFFEVFVFVFFEVNIVFI6LFE&KvVF$(F!JIvHFMFEFM F6VFvH&K6LfGvH6v&%)V"FM"&&#vfOvH $,0F) $-1V*$(F! &C6D
&C
&C6D
&C
&C
&C
&C	B6D6D&K&K&K6LFM6L6LFM6L6L6L6L&KFMFM666IJIIJIIIIvHJJ6LFM6L6LFM6L6L6L6L&KFMFM666fOvfOfOvfOfOfOfOVNvv"f"f"f&K6L&K&K6L&K&K&K&KJ6L6L&&&! > >r   r@   c                  6    e Zd Z e       Z e       Z e       Zy)_TorchDispatchModeKeyN)r   r   r    r   FAKEPROXY
FUNCTIONALr"   r   r   r   r     s    6DFEJr   r   c                 |    g } t         D ]   | j                  fdt        D               " dj                  |       S )Nc              3  .   K   | ]  }d  | d  yw)z    z	 = auto()Nr"   ).0bcfks     r   	<genexpr>z.codegen_per_backend_entries.<locals>.<genexpr>  s     Gb4tB4y)G   
)FUNCTIONALITY_KEYSextendBACKEND_COMPONENTSjoin)rr   s    @r   codegen_per_backend_entriesr     s:    A  H	G4FGGH99Q<r   zMissing zL from DispatchKey enum.  Here is the autogenerated list we expect to have:

c                    | t         j                  t         j                  t         j                  t         j                  hv S rB   )r@   r{   r|   ry   rz   dks    r   is_generic_dispatch_keyr   M  s8    --::--99	  r   c                    | t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  hv S rB   )r@   r(   r   r   r   r   r   r   s    r   is_cuda_dispatch_keyr   W  sJ    !!!!$$    r   c                    | t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  hv S rB   )r@   r.   r   r   r   r   r   r   s    r   is_xpu_dispatch_keyr   c  sH        ##  r   c                    | t         v S rB   )STRUCTURED_DISPATCH_KEYSr   s    r   is_structured_dispatch_keyr   p  s    )))r   c                    | t         v S rB   )UFUNC_DISPATCH_KEYSr   s    r   is_ufunc_dispatch_keyr   t  s    $$$r   cudaxpuc                  F   e Zd Z e       Z e       Z e       Z e       Z e       Z e       Z	 e       Z
 e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       ZddZedd       Zedd       Zed	d       Zy)

ScalarTypec                    | j                   S rB   rC   r   s    r   r   zScalarType.__str__  rE   r   c                b    t         j                  j                         D ]  \  }}|| k(  s|c S  y rB   )r   rI   rJ   rL   s      r   maybe_parsezScalarType.maybe_parse  s5    **002 	DAqEz	 r   c                H    t         j                  |       }|
J d|         |S )Nzunknown dtype )r   r   )rM   mb_rs     r   rP   zScalarType.parse  s/    %%e,9>%!99r   c                    t               }| j                  d      D ]G  }|t        v r|j                  t        |          $|j	                  t
        j                  |             I |S )N, )r
   splitDTYPE_CLASSESupdateaddr   rP   )valuesdtypesrM   s      r   	parse_setzScalarType.parse_set  sX    )3\\$' 	4E%mE23

:++E23		4
 r   Nr   )rM   r   r   zScalarType | None)rM   r   r   r   )r   r   r   OrderedSet[ScalarType])r   r   r    r   ByteCharShortIntLongHalfFloatDoubleComplexHalfComplexFloatComplexDoubleBoolBFloat16Float8_e5m2Float8_e5m2fnuzFloat8_e4m3fnFloat8_e4m3fnuzFloat8_e8m0fnur   r   r   rP   r   r"   r   r   r   r   }  s    6D6DFE
&C6D6DFEVF&K6LFM6DvH&KfOFMfOVN    
  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y)UfuncKeyc                    | j                   S rB   rC   r   s    r   r   zUfuncKey.__str__  rE   r   c                |    t         j                  j                         D ]  \  }}|| k(  s|c S  t        d|        )Nzunknown ufunc key )r  rI   rJ   rK   rL   s      r   rP   zUfuncKey.parse  sE    ((..0 	DAqEz	 1%9::r   Nr   )rM   r   r   r  )r   r   r    r   CUDAFunctorCUDAFunctorOnOtherCUDAFunctorOnSelf	CPUScalar	CPUVector
ScalarOnlyGenericr   r   rP   r"   r   r   r  r    sR     &KII JfG ; ;r   r  c                      e Zd ZdZdZy)DeviceCheckTyper      N)r   r   r    NoCheck	ExactSamer"   r   r   r"  r"    s    GIr   r"  c                  6    e Zd Z e       Z e       Z e       Zy)ViewSchemaKindN)r   r   r    r   aliasingaliasing_inplacenon_aliasingr"   r   r   r'  r'    s    vHv6Lr   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	 d.	 	 	 	 	 	 	 	 	 d/d&       Zd0d'Zd0d(Zed1d)       Z	ed1d*       Z
ed2d+       Zed3d,       Zed1d-       Zy%)4NativeFunctionr   	namespaceFunctionSchemafuncbool!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tagsNc                   | j                         }|j                  d      }t        |t              s
J d|        t	        j
                  |d      }|j                  d      }t        j                  |j                        }|j                  dg       }	t        |	t              sJ t        |	      }
|j                  dd	      }t        |t              sJ |r|j                  j                  rJ d
       |j                  dd      }t        |t              sJ t               }|j                  d      D ]Y  }|dk(  r |j!                  t"        j$                         (|dk(  r |j!                  t"        j&                         Mt)        d|        |j                  dd	      }t        |t              s
J d|        |j                  dd	      }t        |t              s
J d|        |j                  dd      }t        |t              s
J d|        |j                  dd      }|t        |t              s
J d|        ||t*        j,                  v s
J d|        |t*        j.                  }n	t*        |   }|j                  dd	      }t        |t              s
J d|        |j                  dd      }|t        |t              s
J d|        |d|vsJ d       d}|t0        j                  |      }|j                  dd      }|t        |t              s
J d|        |d|vsJ d       |j                  dd      }|t        |t              s
J d|        |t"        j&                  |vsJ d       |j                  d d      }|t        |t              s
J d|        |j                  d!d      }||du sJ |rt2        j                  |      nd}|j                  d"g       }t        |t              r|g}t        |t              sJ |dk(  rd#|v r|j5                  d#       t               }|D ]5  }t7        |      d$kD  sJ ||v r|j!                  |       )t)        d%|        d$d&lm} |j                  d'd      } | t        | t<              sJ |       i }!d$}"| |rJ d(       d	}#| j?                         D ]  \  }$}|$d)k(  rt        |$t              sJ d*|$ d+|         t        |t              sJ d,| d+|         |$j                  d-      D ]  }%t@        j                  |%jC                               }&|"dz  }"|r|&|v r2|&tD        v sJ d.|& d/| d0       t	        j
                  |d12      }|j                  d3      }'tG        |j                  |xr tI        |&      |'d4z   5      |!|&<   |&t@        jJ                  u s||jM                  |      k(  sd}# " |"dk(  r	|#rJ d6       |s)|!jO                         t@        jJ                  hk7  s|!t@        jJ                     jQ                         s|"dk7  sJ d7|jM                  |       d8|!t@        jJ                      d9       |s|t        |jL                  jL                        }(|(jS                  d:      sA|(jU                  d;      s0|j                  jV                  r%|j                  jY                         sJ d<|( d=       tG        |jM                  |      d	tZ        >      |!t@        jJ                  <   |!D )cg c]P  })|)t@        j\                  k(  s9|)t@        j^                  k(  s&|)t@        jJ                  k(  s|)t@        j`                  k(  r|)R }*})t7        |*      dk  s9t7        |*      d?k(  r$t@        j^                  |*vrt@        j`                  |*v sJ d@       |j                  dAdB      }+t        |+t              sJ |+dBk(  rg n1|+j                  d      D ,cg c]  },t0        j                  |,       c},}-|j                  dCi       }.i }/t        |.t              r6tb        j                  |.td        jf                        |/td        jf                  <   nt        |.t<              r|.j?                         D ]m  \  }%}0|%d)k(  rt        |%t              s
J dD|%        t        |0t              s
J dE        td        j                  |%      }1tb        j                  |0|1      |/|1<   o nt)        dF|.       |/rP|sJ dG       d$dl4m5c m6}2 tn        D ]5  }&|&|!vs
J dH|&        tG        |2jq                  ||&      dtZ        5      |!|&<   7 |rd}3ny|!jO                         t@        jJ                  hk7  xrU |!jO                         t@        j`                  hk7  xr1 |!jO                         t@        jJ                  t@        j`                  hk7  }3t@        jJ                  |!v }4t@        j`                  |!v }5t@        j\                  |!v }6t@        j^                  |!v }7|!j?                         D %ci c]  \  }%}|%|jL                  |i }8}%}|j                  d)d       |r
J dI|        |tr        D ]  }9|9|!vrJ dJ|9 dK        tu        dSi d|d|d|d|d|d|d!|dA|-dC|/d|d|d|d |d|d|dL|d|
dM|3dN|4dO|5dP|6dQ|7d"|dR||8fS c c})w c c},w c c}}%w )Tzp
        Parse a NativeFunction from a dictionary as directly parsed
        from native_functions.yaml
        r/  znot a str: r#  )namespaced_entity	max_levelaten)defaultrB  r1  Fz4see https://github.com/pytorch/pytorch/issues/145522r7  r%   r   r&   zillegal variant r8  znot a bool: r9  r2  Tr3  Nzillegal device_check: r=  r>  ::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 functionr5  z&functions in modules cannot be methodsr6  r@  rH  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.   )rK  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=  rW     aH  cannot specify more than one of CompositeExplicitAutograd, CompositeExplicitAutogradNonFunctional, or CompositeImplicitAutograd on a single kernel; each strictly subsumes the other.  If you wanted to provide an explicit autograd implementation, specify CompositeExplicitAutograd; otherwise specify CompositeImplicitAutograd onlyr;  r6   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 zleftover entries: z+if structured_delegate, then must not have z* in dispatch dictionary (it is delegated!)r:  rC  rD  rE  rF  rG  r-  r"   );copypop
isinstancer   r	   from_namespaced_entityget_cpp_namespacer.  rP   entity_namelistsetr0  	argumentsoutr   r   r$   r%   r&   rK   r"  rI   r%  OperatorName
Precomputeappendlentorchgen.apirP  dictrJ   r@   stripdispatch_keysBackendMetadatar   ry   rD   keyssupports_symint
startswithendswithtensor_optionshas_tensor_argDEFAULT_KERNEL_NAMESPACEr{   r|   rz   UfuncInnerLoopr  r   torchgen.api.ufuncapiufuncr   schema_kernel_namer   r,  ):eir:  
valid_tagsignore_keysefuncsnamespace_helperr-  r/  cpp_no_default_args_listrB  r1  
variants_sr7  rO   r8  r9  r2  device_check_sr3  r=  structured_delegate_sr>  r?  r5  r6  precomputed_dictr@  tags_inprH  trP  raw_dispatchrQ  num_dispatch_keys%redundant_composite_implicit_autogradksrN   dispatch_keykernel_namespacerD   dcomposites_in_dispatchautogen_strxr;  raw_ufunc_inner_loopr<  vo	ufunc_keyrx  rC  rD  rE  rF  rG  backend_metadatakeys:                                                             r   	from_yamlzNativeFunction.from_yamln  s    GGIf%%<UG'<<%*AA#q
 %66v6F	##$4$@$@A#$55)>#C 2D999!":;,-EE/-
) ;TBBB,~~)) F) UU:z2
*c***!$!!$' 	=AJW--.hW^^,$'7s%;<<	= &'UU+G%O"4d; 	
567	
; UU#7?,d3X|DVCW5XX3uu^T2,-Ll^/LL-~t4%NC)H 	
.)*	
H "n8S8S&S	5#N#34	5S !*44L*>:LUU</
*d+H|J<-HH+ !&;T B$,
!31
 	1./0	1 
 %,<Q0Q 	
?	
Q 48 ,"."4"45J"Kee$94@"*j9Lc.R 	
-./	
R #*d:M.M 	
?	
M
 ot4$
=#(F 	
-)	
F $h(F 	
4	
F EE"5t< (J7H#,N 	
+,-	
N 555':+===<Lj&&'78RV55$h$ zH(D))) #6*#DOO/0 	9Az?Q&&&J$|A3%788	9 	%uuZ.#z,'EHqHE79!"#1 ?1 5:1%++- &EA#!"c* ,RDl^D* "!S) .qc|nE) # EA#.#4#4QWWY#?L%*%"|{'B '=8 '~[ D; ;8 (7'M'MQ($ (8'I'IRV'I'W$ .=/;;#- $E6|D'7*'D	.H\* %(M(MM$/@D=;E&EX "Q&+P  $==?{'L'L&MMKAABRRT$)		 ddgdldlmqdrcs t#K$I$IJK L77	*  3 ;tyy~~&D'==) NN11 NN99; D6 ") )  ?N5@X?H[::; "
K999KFFFK999KEEE "
 "
 )*a/&'1,BB-. AA)*	
r	
 

" eeIr*+s+++ b  1<1B1B41HIA,$$Q'I 	  !uu%7<*C01?1E1E$h&6&62X--. ,d3-335 R2
?!!S)T-PQRPS+TT)!"c*W.STUSV,WW*$NN1-	.<.B.B2y.Q +R !45I4JK  999: /. 3 #83 HW3 *9 33D,G#":*&	 K K$I$I#JJ MMOEEFG MMO99EE	  11X= 	/ ==I 	= 11X= 	/ >>(J 	> ;C..:JK$!QA		1~-KK 	
j$.*1#..u */ (* A# G) )*  2S " &	
 %8 %8 (   "2 ,F $6 , #4 * *  !" %8#$ (%& 8^'( Fz)* 8^+, G|-. /0 $14 7
 	
k"
> JN Ls   +Ak3k8
k=c                P    | j                   rJ d       | j                  sJ d       y )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  s;     ?? 	
1	
" '' 	
e	
'r   c                   | j                   j                  j                  r%| j                  t        j
                  hk(  sJ d       | j                  rE| j                   j                         t        j                  k(  sJ d       | j                  sJ d       | j                  rE| j                   j                         t        j                  k7  sJ d       | j                  sJ d       | j                  r| j                  rJ d       | j                   j                         D ch c]  }|j                  |j                   }}t        j                  | j                   |      }t#        |      dk(  s
J d|        | j$                  | j                  sJ d       t'        | j                   j                        j)                  d	      r$| j*                  t,        j.                  k(  sJ d
       dt'        | j                   j                        v sdt'        | j                   j                        v s0t1        d | j                   j                  j2                  D              rLdt'        | j                   j                        vr+t'        | j                   j                  j                        dvs$| j                   j                  j5                         r3d| j6                  v s$J t'        | j                   j                               y y c c}w )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 functionr   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  8   K   | ]  }d |j                   v   yw)r  NrC   r   args     r   r   z/NativeFunction.__post_init__.<locals>.<genexpr>&  s      25	SXX-s   backward)_cudnn_init_dropout_statenondeterministic_seeded)r/  rc  rd  r7  r$   r%   r=  kind
SchemaKindr2  r>  schema_order_argumentsrM  rD   rb  
differencerB  rh  r?  r   rp  r3  r"  r$  anyflat_allhas_generator_argrH  )r   adefaulted_argumentsinvalid_argss       r   __post_init__zNativeFunction.__post_init__  s   99""==W%5%5$66 [6 ??99>>#z~~5 K5 $$ L$ ##99>>#z~~5 >5 $$ L$
 OO(@(@ 	
M	
A !II<<>
!))BWAFF
 
 ~~d&>&>@ST< A%U)F|n'UU%##/?? F? tyy~~))*5$$(?(?? 9? c$))..)) TYY^^!44 9=9L9L9U9U 
 c$))..&99		++,4QQyy""446,		9N3tyy~~;NN9 7=
s   #L5Lc                    | j                   xs | j                  xs | j                  xs | j                   xr | j                  S rB   )rD  rF  rG  rE  r   s    r   has_composite_kernelz#NativeFunction.has_composite_kernel2  sO     77 J::JII

 77 JII	
r   c                   | j                   j                  }t        |      dkD  xr t        d |D              }d| j                  v xrF t        | j                   j                        dk7  xr" t        | j                   j                        dk7  }t        d | j                   j                         D              }|xs |xs |S )Nr   c              3  j   K   | ]+  }|j                   d uxr |j                   j                    - y wrB   
annotationis_writer   r   s     r   r   z,NativeFunction.is_view_op.<locals>.<genexpr>@  s3      5
GHALL$BQ\\-B-B)BB5
s   13inplace_viewresize_
resize_as_c              3  l   K   | ],  }|j                   d uxr d|j                   j                  v  . y w)N*)r  alias_set_after)r   inps     r   r   z,NativeFunction.is_view_op.<locals>.<genexpr>I  s8      
 NN$&P3#..2P2P+PP
s   24)r/  returnsrh  r  rH  r   rD   r  )r   retsis_non_mutating_viewis_inplace_viewis_wildcard_views        r   
is_view_opzNativeFunction.is_view_op=  s    yy  "4y1}  
 5
LP5
 2

 dii' 4DIINN#y04DIINN#|3 	
  
yy779
 
 $JJ:JJr   c                   | j                   rJ| j                  j                  j                  j                  r d| j                  v sJ t
        j                  S | j                   rt
        j                  S t
        j                  S )Nr  )	r  r/  rD   inplacerH  r'  r)  r(  r*  r   s    r   view_schema_kindzNativeFunction.view_schema_kindO  s\    ??tyy~~22::!TYY...!222??!***!...r   c                V    | j                   j                  j                  j                  S rB   )r/  rD   baser   s    r   	root_namezNativeFunction.root_nameY  s    yy~~""'''r   c                :    | j                   xs | j                  d uS rB   r  r   s    r   part_of_structured_groupz'NativeFunction.part_of_structured_group]  s    F$":":$"FFr   rB   )
rz  zdict[str, object]r:  r   r{  rA  r|  zset[DispatchKey] | Noner   zMtuple[NativeFunction, dict[DispatchKey, dict[OperatorName, BackendMetadata]]]r   Noner   r0  )r   r'  r   )r   r   r    r!   r   r  r  r  propertyr  r  r  r  r  r"   r   r   r,  r,    s}    N  (,+  "!  "! 
 !%$  
M   54  -, $# #" "!  -10:>>,00;?? N 
 04	o
o
o
 o
 -	o

 
Wo
 o
b

&=O~ 
 
 K K" / / ( ( G Gr   r,  c                  R    e Zd Z e       Z e       Z e       Z e       Z e       Zy)r  N)	r   r   r    r   
functionalr  rd  mutablescratchr"   r   r   r  r  b  s%    JfG
&CfGfGr   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y)NativeFunctionsGroupr,  r  NativeFunction | Noner  r  rd  c                .    | j                   j                  S rB   )rd  r=  r   s    r   r=  zNativeFunctionsGroup.structuredw  s     xx"""r   c           
     	   | j                   j                  j                         }| j                         D ]  }||j                  j                         k7  r)t	        d| d|j                  j                                | j
                  |j                  k7  sct	        d| j                  j                  j                   d|j                  j                          | j                   j                  j                         t        j                   k(  sJ | j                  j                  j                         t        j                  k(  sJ | j                   j                  | j                  j                  k(  sJ | j                  f| 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                   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                  9| j                  j"                  | j                  j                  j                  k(  sJ t%        | j                         D cg c]0  }d|j&                  v st)        |j                  j                        2 c}      }dj+                  d	 |D              }t-               }| j                         D ]$  }|j/                  d
 |j0                  D               & dj+                  d t%        |      D              }t3        |      dk(  r?t3        |      dkD  r1t5        d| d| dt)        j                  j                               ||k7  rt5        d| d| d| d      y c c}w )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 	generatedr   c              3  2   K   | ]  }t        |        y wrB   r   r   r  s     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  s     %Dc!f%D   c              3  2   K   | ]  }t        |        y wrB   r  )r   ops     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  s     )Fb#b')Fr  c              3  2   K   | ]  }t        |        y wrB   r  r  s     r   r   z5NativeFunctionsGroup.__post_init__.<locals>.<genexpr>  s      /
CF/
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	functionsrK   r=  r  rd  rD   r  r  r-  r  r  functional_overloadrD  rE  r>  sortedrH  r   r   rb  r   r;  rh  RuntimeError)r   test_sigfgenerated_fnsgenerated_fns_strexpected_generated_fnsexpected_generated_fns_strs          r   r  z"NativeFunctionsGroup.__post_init__|  s&   #'??#7#7#A#A#C! 	A166++--$<<D:T!&&JZJZJ\I]_ 
 !"<"<<$""&((--"4"4!5U166;;-I 	 ##((*j.C.CCCCxx}}!!#z~~555((DHH,>,>>>><<#<<$$))+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1EEEE?? HHCCUUV ??66$((--:L:LL ??'',,-^DOO<_<_;` a..2hhmm.@.@-ACL ||'||77488==;M;MMMM'+~~'7Q!;!&&;PSQ
 !II%Dm%DD+.5! 	GA")))FAII)FF	G%)YY /
"#9:/
 &
" %&!+M0BQ0F>?P>Q R,,=+>>VWZ[\[a[a[f[fWgVhj 
 &)::>?P>Q R;;L:M N00J/K1N  ; Rs    S!Sc                J    | j                   j                  j                         S rB   )rd  r/  r  r   s    r   r  zNativeFunctionsGroup.signature  s    xx}}&&((r   c              #     K   | j                    | j                   | j                  | j                   | j                  | j                   y y wrB   )r  rd  r  r  r   s    r   r  zNativeFunctionsGroup.functions  sF     oohh<<#,,<<#,, $s   AAc                .    | j                   j                  S rB   )r  r  r   s    r   r  zNativeFunctionsGroup.root_name  s    (((r   c                r   | sJ t        |       dk(  ry t        |       } | j                  t        j                  d       }| j                  t        j
                  d       }| j                  t        j                  d       }| j                  t        j                  d       }| rJ |J |y t        ||||      S )Nr#  )r  r  r  rd  )	rh  rj  r\  r  r  r  r  rd  r  )r  r  r  r  rd  s        r   	from_dictzNativeFunctionsGroup.from_dict  s    qq6Q;GUU:00$7
%%
**D1%%
**D1eeJNND)u%%% ;#!	
 	
r   Nr  r  r   r.  )r   Iterator[NativeFunction]r   )r  z dict[SchemaKind, NativeFunction]r   zNativeFunctionsGroup | None)r   r   r    r!   r  r=  r  r  r  r  r   r  r"   r   r   r  r  p  sd    """"	# #?B) ) ) 
 
r   r  c                  4    e Zd ZU ded<   ded<   ded<   ddZy)	rm  r   rV  r0  r=  rW  c                    d| j                   v S )N_symint)rV  r   s    r   ro  zBackendMetadata.supports_symint  s    DKK''r   Nr  )r   r   r    r!   ro  r"   r   r   rm  rm    s     K
  (r   rm  c                  >    e Zd ZU ded<   ded<   ded<   ed	d       Zy)
ru  r   rD   r   supported_dtypesr  r  c                    | j                  dd      \  }}|d   dk(  sJ |d   dk(  sJ t               }|dd j                  d      D ]  }|t        j                  |      z  } t	        |||      S )	N r#  r   ()r   )rD   r  r  )r   r
   r   r   ru  )rM   r  rD   supported_dtypes_strr  rN   s         r   rP   zUfuncInnerLoop.parse  s    %*[[a%8""#A&#---#B'3...3=<%a+11$7 	8A
 4 4Q 77	8(8I
 	
r   N)rM   r   r  r  r   ru  )r   r   r    r!   r   rP   r"   r   r   ru  ru    s'    
I,, 	
 	
r   ru  c                      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	y)BackendIndexr@   r  r0  use_out_as_primaryr2  externalz#dict[OperatorName, BackendMetadata]indexc                    |j                         D ]9  \  }}|j                         D ]!  \  }}|| |   vsJ d| d|        || |   |<   # ; y )Nzduplicate operator z for dispatch key )rJ   )parent_indexchild_indexrN   rO   op_namemetadatas         r   
grow_indexzBackendIndex.grow_index'  st    
  %%' 	4DAq%&WWY 4!l1o5 )'2DQCH5 ,4Q(	4	4r   c                J    | j                   r|j                  S |j                  S rB   )r  rd  r  )r   gs     r   primaryzBackendIndex.primary3  s    ""55L<<r   c                ,    | j                  |      }|d uS rB   )
get_kernel)r   r  ms      r   
has_kernelzBackendIndex.has_kernel9  s    OOA}r   c                   t        |t              r|}n-t        |t              r| j                  |      }nt	        |       j
                  j                  | j                  vry | j                  |j
                  j                     S rB   )r]  r,  r  r  r   r/  rD   r  )r   r  r  s      r   r  zBackendIndex.get_kernel=  s`     a(A/0QAO66;;djj(zz!&&++&&r   c                L    | j                   rt        | j                         dS y )NNativeFunctions)r  r   r  r   s    r   native_function_class_namez'BackendIndex.native_function_class_nameJ  s'    ==$++,-_==
 r   N)r  6dict[DispatchKey, dict[OperatorName, BackendMetadata]]r  r  r   r  )r  r  r   r,  )r  %NativeFunction | NativeFunctionsGroupr   r0  )r  r  r   zBackendMetadata | None)r   r4  )
r   r   r    r!   r   r  r  r  r  r  r"   r   r   r  r    ss      N..	4L	4K	4 
	4 	4 '6'	'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y)$r.  re  rD   	Argumentsrc  tuple[Return, ...]r  c                \    ddt        fd| j                  j                  D              S )Nc                H    | j                   y| j                   j                  S NFr  )r  s    r   r  z+FunctionSchema.is_mutable.<locals>.is_write  s    ~~%>>***r   c              3  .   K   | ]  } |        y wrB   r"   )r   r  r  s     r   r   z,FunctionSchema.is_mutable.<locals>.<genexpr>  s     @18A;@r   )r  Argumentr   r0  )r  rc  r  )r   r  s    @r   
is_mutablezFunctionSchema.is_mutable  s%    	+ @(?(?@@@r   c                    t        j                  | j                  j                  | j                  j                  | j                  j
                        S rB   )	itertoolschainrc  flat_positionalflat_kwarg_onlyrd  r   s    r   r  z%FunctionSchema.schema_order_arguments  s:    NN**NN**NN
 	
r   z3(?P<name>[^\(]+)\((?P<args>.*)\) -> (?P<returns>.*)c                R   t         j                  j                  |       }t        |      dk(  s
J d|         |d   \  }}}t        j                  |      }t        j                  |      }t        |      }t        |||      }t        |      | k(  sJ t        |       d|         |S )Nr#  zInvalid function schema: r   rD   rc  r  r  )	r.  decl_refindallrh  re  rP   r  parse_returnsr   )	r/  declsopsargsreturn_declrD   rc  r  r   s	            r   rP   zFunctionSchema.parse  s     &&..t45zQB";D6 BB!&qT;!!#&OOD)	,	7K1v~4#a&dV44~r   c                :    t        d | j                  D              S )Nc              3  d   K   | ](  }|j                   |j                   j                  r| * y wrB   r  r  s     r   r   z5FunctionSchema.returns_are_aliased.<locals>.<genexpr>  s.      
||'ALL,A,A 
s   .0)r  r  r   s    r   returns_are_aliasedz"FunctionSchema.returns_are_aliased  s      
\\
 
 	
r   c                J   t        | j                  j                  | j                        D ]%  \  }|j                  j                  k(  r J d        | j                  j
                  D ]3  t        fd| j                  D              s"J dt        |                t        | j                  j                        | j                  j                  D cg c]  }|j                  dk(  s| c}z   }| j                  D cg c]&  }|j                  |j                  j                  r|( }}| j                  D cg c]&  }|j                  |j                  j                  s|( }}t        |      dk(  s!t        |      dk(  sJ dt        |               |D ]  t        fd|D              rJ d        | j                  j                  rt        d	 | j                  j                  D              r t        | j                        dk(  sJ d
       net        | j                  j                  D cg c]  }|j                  j                  d      s|! c}      t        | j                        k(  sJ d       | j                  j                  j                  r| j                  j                  }|r6|j                   j                  r |j                   j                  j                  sJ |j                   j"                  t%        t&        j(                        k(  rJt        | j                        dk(  r0| j                  d   j                  |j                   j                  k(  sJ t        | j                        dk(  sJ | j                  j*                  4| j-                         t.        j0                  k(  sJ dt        |               | j3                         r5| j-                         t.        j0                  k(  sJ dt        |               y y c c}w c c}w c c}w c c}w )NzsOut arguments must have matching return Tensor; furthermore, the ith-argument needs to correspond to the ith returnc              3  P   K   | ]  }j                   |j                   k(    y wrB   r  r   r   r  s     r   r   z/FunctionSchema.__post_init__.<locals>.<genexpr>  s     NA1<<1<<7N   #&z^If you have a schema with mutable positional args, we expect them to not be returned. schema: r   r   zYNativeFunctions must have either only mutable returns, or only immutable returns. Found: c              3  P   K   | ]  }j                   |j                   k(    y wrB   r5  )r   r  rets     r   r   z/FunctionSchema.__post_init__.<locals>.<genexpr>  s     PCs~~7Pr7  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  h   K   | ]*  }|j                   t        t        j                        k7   , y wrB   )typeBaseTypeBaseTyTensorr   r  s     r   r   z/FunctionSchema.__post_init__.<locals>.<genexpr>  s"     Q166Xfmm44Q   02z3out= ops that accept tensor lists as out arguments 	_scratch_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: )ziprc  rd  r  r  post_self_positional_mutabler  r   ra  r%  rD   r  rh  rp  r  self_argargumentr;  r<  r=  r>  rr  r  r  r  is_functional_fn)r   r  out_and_selfr9  mutable_returnsimmutable_returnsself_ar  s      `   @r   r  zFunctionSchema.__post_init__  s   DNN..= 	HC>>S^^3 I3	 << 	ANNN pqtuyqzp{|N	 DNN../>>993
SXX=OC3
 

 ||
~~)cnn.E.E 
 
 ||
~~%S^^-D-D 
 
 ?#q(C0A,Ba,G 	
ghklphqgrs	
G # 	CP<PP JP	
 >> Qdnn>P>PQQ4<<(A- I- c  $(>>#5#5"xx22;?  &'  d ' 99>>!!^^,,FOO..OO..778 ##x'>> %*Q22foo6P6PPQ 4<<(A--->>((499;*"7"77 t9+'7
   "99;*"7"77 t9+'7 #W3



Bs   P,P+P>+P5$P c                2    d| j                   j                  v S )Nr  rD   overload_namer   s    r   rF  zFunctionSchema.is_functional_fn  s    tyy6666r   c                @    t        | j                  j                        S rB   )r0  rc  rd  r   s    r   	is_out_fnzFunctionSchema.is_out_fn!  s    6 DNN&&''r   c                H   t        | j                  j                        }t        | j                  j                  D cg c]   }|j                  j	                  d      s|" c}      }| 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 c c}w )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.
        rA  c              3  h   K   | ]*  }|j                   d uxr |j                   j                   , y wrB   r  r?  s     r   r   z&FunctionSchema.kind.<locals>.<genexpr>J  s3      
 LL$>)>)>>
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!)r0  rc  rd  rD   rp  r  r  post_self_positionalr  r  r  r  )r   is_outr  
is_scratch
is_inplacer!  s         r   r  zFunctionSchema.kind>  s    dnn(() NN..SS#((2E2Ek2RSS

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

 z** %%% X6 %%%! |> >>!%%%(((= Ts    DDc                   g }| j                   D ]  }| j                  j                  D cg c])  }|j                  |j                  |j                  k(  r|+ }}t	        |      dk(  r|j                  d        kt	        |      dk(  r|j                  |d   j                         dj                  d |D              }t        d|j                   d| d       |S c c}w )Nr   r#  r   c              3  4   K   | ]  }|j                     y wrB   rC   r?  s     r   r   z6FunctionSchema.aliased_return_names.<locals>.<genexpr>x  s     )GQ!&&)Gs   zFound a return (z)that aliases multiple inputs (r  )	r  rc  r  r  rh  rg  rD   r   rK   )r   outsr   r  aliased_argsaliased_namess         r   aliased_return_namesz#FunctionSchema.aliased_return_namesk  s    !# 	A 00<<+0L L 
 < A%D!\"a'LO001 $		)G,)G G$&qvvh.Mm_\]^ 	 s   .CF)strip_defaultstrip_view_copy_namekeep_return_namesc          	         dfd} j                   j                   j                  }|rG|j                  d      r|j                  dd      }n#|j                  d      r|j                  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                  j                  |      }	t         j                         d	k(  r.t         j#                  t        |	      j                  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
        c                P    t        r| j                  nd | j                  d       S )NrD   r;  r  )ReturnrD   r;  )r   r^  s    r   strip_ret_annotationz6FunctionSchema.signature.<locals>.strip_ret_annotation  s%    0QVVdVV r   _copyr6   _scatterscatterinversec              3     K   | ]m  j                   _j                   j                  rIt        fdj                  D              s+t	        rj
                   dnd j                  d        o y w)Nc              3  P   K   | ]  }j                   |j                   k(    y wrB   r5  r6  s     r   r   z5FunctionSchema.signature.<locals>.<genexpr>.<genexpr>  s     K4Kr7  _outra  )r  r  r  r  rb  rD   r;  )r   r  r^  r   s    @r   r   z+FunctionSchema.signature.<locals>.<genexpr>  sk      ,
  ||'%%KdllKK% (9xt_tVV 	,
s   A3A7r\  zbernoulli.pzfloat pzfloat p=0.5Fr  r  dunder_methodrL  r(  )r   rb  r   rb  )rD   r  rq  replacetupler#  r$  rc  rD  rE  rd  rR  mapr  r  r   r  rP   r.  re  BaseOperatorNamerm  )
r   r\  r]  r^  rc  	base_namereturns_from_mutable_inputsoriginal_returnsr  args_sigs
   `  `      r   r  zFunctionSchema.signature~  sx   X	 IINN''	!!'*%--gr:	##J/%--iC	 ', ,
 __
 ~~..: ^^,,556""33
,
 '
#0 !%94<<!HI"%@@>>++-+Htyy>]* s8}'<'<Y'VWH%"!"&))..">">
 ! 
 	
r   c                &    | j                  d      S )NTr]  )r  r   s    r   view_signaturezFunctionSchema.view_signature  s    ~~4~88r   c                F    t        || j                  | j                        S )Nr(  )r.  rc  r  )r   rD   s     r   	with_namezFunctionSchema.with_name  s     nnLL
 	
r   c                    | j                         t        j                  t        j                  t        j                  fv S rB   )r  r  r  rd  r  r   s    r   modifies_argumentsz!FunctionSchema.modifies_arguments  s*    yy{z11:>>:CUCUVVVr   c                6    | j                   j                         S rB   )rc  has_symint_argr   s    r   
has_symintzFunctionSchema.has_symint  s    ~~,,..r   c                   t        | j                        }t        | j                        dk(  rt        | j                  d         }n/ddj	                  t        t         | j                              z   dz   }| j                   d| d| S )Nr#  r   r  r   r  z) -> )r   rc  rh  r  r   rp  rD   )r   all_arguments_strr  s      r   r   zFunctionSchema.__str__  st    /t||!$,,q/*GDIIc#t||&<==CG))A/0gY??r   Nr  )r   zIterator[Argument])r/  r   r   r.  r  )r   r  )r   zlist[str | None])r\  r0  r]  r0  r^  r0  r   r.  r  )rD   re  r   r.  r   )r   r   r    r!   r  r!  r  recompiler)  r   rP   r2  r  rF  rO  r  r[  r  rx  rz  r|  r  r   r"   r   r   r.  r.    s       A A
 bjjOPG
 

`D7(:')Z, $%*"'g
 g
 #	g

  g
 
g
R9
 W W/@r   r.  c                  F    e Zd ZU ded<   ded<   ded<   ed	d       Zd
dZy)
Annotationztuple[str, ...]	alias_setr0  r  r  c                ^   t        j                  d|       }|
J d|         |j                  d      |j                  d      r|j                  d      ndz   }t        |j	                  d            }|j                  d      dk(  }|rt        |      dkD  rJ d	|  d
       |j                  d      r)t        |j                  d      j	                  d            nd}t        |      dkD  rt        |      dkD  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#  rZ  r6   |rT  !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groupro  r   rh  r  r   )annr  before_aliasr  r  	after_setr   s          r   rP   zAnnotation.parse  s8     HHJCP}D >seDD}wwqz1771:QWWQZ2F,,,S12	771:$Y!!3 	
:3%yI	
4 56GGAJE!''!***3/0B	%)c)nq.@ 	
abeaffop	
A (I
 1v}-4uo-}r   c                    dj                  | j                        }| j                  r| d}dj                  | j                        }|r| d| }|S )Nr  r   -> )r   r  r  r  )r   r  r  s      r   r   zAnnotation.__str__4  sT    HHT^^,	==$+QI((4#7#78$+T/):;Ir   N)r  r   r   r  r   )r   r   r    r!   r   rP   r   r"   r   r   r  r  	  s-     N$$   Dr   r  c                  h    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y
)Typec                d    t         j                  |       }t        |      | k(  sJ | d|         |S )Nr  )r  _parser   )r  r   s     r   rP   z
Type.parseF  s3    KKN1v{)qcaSM){r   c                >   t        j                  d|       }|-t        t        j	                  |j                  d                  S t        j                  d|       }|\|j                  d      t        |j                  d            nd }t        t        j	                  |j                  d            |      S t        j                  d|       }|t        |j                  d            S 	 t        t        |          S # t        $ r}t        d|        |d }~ww xY w)Nz^(.+)\?$r#  z^(.+)\[([0-9]+)?\]$rZ  )elemsizez-^__torch__\.torch\.classes\.([a-zA-Z0-9_.]+)$zunrecognized type )r  r  OptionalTyper  rP   r  r   ListTypeCustomClassTyper<  r=  KeyErrorr  )r  r  r  r}  s       r   r  zType._parseL  s    HH[!$=

1771: 677HH+Q/=&'ggaj&<3qwwqz?$DAGGAJ!7dCC HHEqI="1771:..	@F1I&& 	@!3A378a?	@s   -C? ?	DDDc                    t         rB   NotImplementedErrorr   s    r   r   zType.__str___      !!r   c                    t         rB   r  r   base_tys     r   is_base_ty_likezType.is_base_ty_likeg  r  r   c                @    | j                  t        j                        S rB   )r  r=  r>  r   s    r   is_tensor_likezType.is_tensor_likej      ##FMM22r   c                @    | j                  t        j                        S rB   )r  r=  	Generatorr   s    r   is_generator_likezType.is_generator_likem  s    ##F$4$455r   c                @    | j                  t        j                        S rB   )r  r=  SymIntr   s    r   is_symint_likezType.is_symint_likep  r  r   c                    t         rB   r  r   s    r   is_nullablezType.is_nullables  r  r   c                    t         rB   r  r   s    r   is_list_likezType.is_list_likev  r  r   N)r  r   r   r  r   r  r=  r   r0  r  r   zListType | None)r   r   r    r   rP   r  r   r  r  r  r  r  r  r"   r   r   r  r  D  sM     
 @ @$""36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y)r=  N)r   r   r    r   r  r   r>  r   Dimname	DimVectorfloatr   r0  LayoutDeviceDeviceIndexScalarMemoryFormatQSchemeStorageStreamr  SymBoolGraphModuler"   r   r   r=  r=  {  s    IJVF
&CfGIFE
&C6DVFVF&KVF6LfGfGVFVFfG&Kr   r=  c                  @    e Zd ZU ded<   d	dZd
dZddZddZddZy)r<  r=  rD   c                0    | j                   j                    S rB   rC   r   s    r   r   zBaseType.__str__  s    ))..!"r   c                     | j                   |k(  S rB   rC   r  s     r   r  zBaseType.is_base_ty_like  s    yyG##r   c                     yr  r"   r   s    r   r  zBaseType.is_nullable      r   c                     y rB   r"   r   s    r   r  zBaseType.is_list_like      r   c                <    | j                   t        j                  k(  S rB   )rD   r=  r  r   s    r   r  zBaseType.is_symint_like  s    yyFMM))r   Nr   r  r  r  )	r   r   r    r!   r   r  r  r  r  r"   r   r   r<  r<    s     
L#$*r   r<  c                  @    e Zd ZU ded<   d	dZd
dZddZddZddZy)r  r  r  c                     | j                    dS )N?)r  r   s    r   r   zOptionalType.__str__  s    ))Ar   c                8    | j                   j                  |      S rB   r  r  r  s     r   r  zOptionalType.is_base_ty_like      yy((11r   c                6    | j                   j                         S rB   r  r  r   s    r   r  zOptionalType.is_symint_like      yy''))r   c                     y)NTr"   r   s    r   r  zOptionalType.is_nullable  r  r   c                6    | j                   j                         S rB   )r  r  r   s    r   r  zOptionalType.is_list_like  s    yy%%''r   Nr   r  r  r  	r   r   r    r!   r   r  r  r  r  r"   r   r   r  r    s     
J2*(r   r  c                  @    e Zd ZU ded<   d	dZd
dZddZddZddZy)r  r   
class_namec                     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   c                     yr  r"   r  s     r   r  zCustomClassType.is_base_ty_like  r  r   c                     yr  r"   r   s    r   r  zCustomClassType.is_symint_like  r  r   c                     y)z8
        Assume a custom class is not nullable.
        Fr"   r   s    r   r  zCustomClassType.is_nullable  s     r   c                     y rB   r"   r   s    r   r  zCustomClassType.is_list_like  r  r   Nr   r  r  r  r  r"   r   r   r  r    s     O<r   r  c                  J    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y
)r  r  r  z
int | Noner  c                \    | j                   r| j                    nd}| j                   d| dS )Nr6   [])r  r  )r   r  s     r   r   zListType.__str__  s,    !%$))))AdV1%%r   c                8    | j                   j                  |      S rB   r  r  s     r   r  zListType.is_base_ty_like  r  r   c                6    | j                   j                         S rB   r  r   s    r   r  zListType.is_symint_like  r  r   c                6    | j                   j                         S rB   )r  r  r   s    r   r  zListType.is_nullable  s    yy$$&&r   c                    | S rB   r"   r   s    r   r  zListType.is_list_like  s    r   Nr   r  r  r  r  r"   r   r   r  r    s&    
J
&2*'r   r  c                  t    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	y)r   r   rD   r  r;  r4  rM  Annotation | Noner  c                    | j                   S rB   r5  r   s    r   
alias_infozArgument.alias_info      r   c                j   d| v sJ d|  d       d| v rP| j                  d      dk(  sJ d|  d       | j                  d      \  }}|j                  dd      \  }}| d| }n| j                  dd      \  }}|}d }t        j                  d|      }|rS|j                  d      d	v sJ d
       d|j                  d      z   }t        j                  |j                  d            }n|}d }t        j                  |      }	t        ||	||      }
t        |
      | k(  sJ t        |
       d|         |
S )Nr  zillegal argument 'r  =r#  z&illegal argument with default value: 'Tensor\((.+)\)(.*)rZ  r6   r  z[],unrecognized alias analysis form with Tensorr>  rD   r;  rM  r  r  )countr   rsplitr  r  r  r  rP   r  r   r   )r  type_and_annot_and_namerM  type_and_annotrD   name_and_defaultr  type_sr  r;  r   s              r   rP   zArgument.parse  sk    cz6/uA66z#:99S>Q&W*PQTPUUV(WW&/2yy~,#W#:#A#A#q#I ND"&q	2/2zz#q/A,N,#DG.?;;q> &  > >	> 
 A.F#))%++a.9J#FJzz&!!	
 1v}2QSE22}r   c                N    | j                   d uxr | j                   j                  S rB   r  r   s    r   r  zArgument.is_write<       d*Gt/G/GGr   c                    | j                    }| j                  r&|dv sJ |j                  dd| j                   d      }| j                  |S d}| j                  rd| j                   }| d| j                   | S )Nr>  zTensor?zTensor[]r>  Tensor(r  r6   r  r  )r;  r  rn  rD   rM  )r   r;  
mb_defaults      r   r   zArgument.__str__@  s    ))??<<<<<<GDOO3DA*FGD99KJ|| /
V1TYYK
|44r   Nr   r  )r  r   r   r   r  r   
r   r   r    r!   r  r  r   rP   r  r   r"   r   r   r   r     s^    
 I
J* "!  $ $L H H5r   r   c                  j    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	y)rb  r4  rD   r  r;  r  r  c                    | j                   S rB   r5  r   s    r   r  zReturn.alias_infoT  r  r   c                   d| v r| j                  dd      \  }}n| }d }t        j                  d|      }|rS|j                  d      dv sJ d       d|j                  d      z   }t        j                  |j                  d            }n|}d }t        j                  |      }t        |||      }t        |      | k(  sJ t        |       d	|         |S )
Nr  r#  r  rZ  r  r  r>  ra  r  )	r  r  r  r  r  rP   r  rb  r   )r  r  rD   r  r  r  r;  r   s           r   rP   zReturn.parseX  s     #:#&::c1#5 ND ND.?;;q> &  > >	> 
 A.F#))%++a.9J#FJzz&!!

 1v}2QSE22}r   c                N    | j                   d uxr | j                   j                  S rB   r  r   s    r   r  zReturn.is_writew  r  r   c                    | j                    }| j                  r&|dv sJ |j                  dd| j                   d      }| j                  |S | d| j                   S )Nr  r>  r  r  r  )r;  r  rn  rD   )r   r;  s     r   r   zReturn.__str__{  se    ))??<<<<<<GDOO3DA*FGD99KV1TYYK((r   Nr  )r  r   r   rb  r  r   r  r"   r   r   rb  rb  N  sT    

J!!   < H H)r   rb  c                      e Zd ZU ded<   y)SelfArgumentr   rE  N)r   r   r    r!   r"   r   r   r  r    s    r   r  c                  >    e Zd ZU ded<   ded<   ded<   ded<   ddZy)	TensorOptionsArgumentsr   dtypelayoutdevice
pin_memoryc                ^    | j                   | j                  | j                  | j                  gS rB   r  r  r	  r
  r   s    r   allzTensorOptionsArguments.all  s!    

DKKdooFFr   Nr   zSequence[Argument])r   r   r    r!   r  r"   r   r   r  r    s    OGr   r  c                  l   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d"d       Zed"d       Zed"d       Zed"d       Zed"d       Z	e	 	 d#d       Z
ed$d       Zed%d       Zed#d       Zd&dZd'dZd'dZd'dZddd(dZd)dZd*dZed+d       Zed,d       Zd-dZd.d Zy!)/r  ztuple[Argument, ...]pre_self_positionalzSelfArgument | NonerD  rR  pre_tensor_options_kwarg_onlyzTensorOptionsArguments | Nonerr  post_tensor_options_kwarg_onlyrd  c                v    g }|j                  | j                         |j                  | j                         |S rB   )r   r%  r&  r   r9  s     r   flat_non_outzArguments.flat_non_out  s0     

4''(

4''(
r   c                    g }|j                  | j                         | j                  %|j                  | j                  j                         |j                  | j
                         |S rB   )r   r  rD  rg  rE  rR  r  s     r   r%  zArguments.flat_positional  sP     

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

4,,-
r   c                Z    | j                   D cg c]  }|j                  s| c}S c c}w rB   )rR  r  r   r  s     r   rC  z&Arguments.post_self_positional_mutable  s"    44Ca

CCCs   ((c                    g }|j                  | j                         | j                  )|j                  | j                  j                                |j                  | j                         |S rB   )r   r  rr  r  r  r  s     r   r&  zArguments.flat_kwarg_only  sW     

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

4667
r   c                    g }|j                  | j                         |j                  | j                         |j                  | j                         |S rB   )r   r%  r&  rd  r  s     r   r  zArguments.flat_all  s@     

4''(

4''(

488
r   c                v    g }|j                  | j                         |j                  | j                         |S rB   )r   
positional
kwarg_onlyr  s     r   non_outzArguments.non_out  s0     GI

4??#

4??#
r   c                    g }|j                  | j                         | j                  |j                  | j                         |j                  | j                         |S rB   )r   r  rD  rg  rR  r  s     r   r  zArguments.positional  sJ    -/

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

4,,-
r   c                    g }|j                  | j                         | j                  |j                  | j                         |j                  | j                         |S rB   )r   r  rr  rg  r  r  s     r   r  zArguments.kwarg_only  sN    79

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

4667
r   c                    g }|j                  | j                         |j                  | j                         |j                  | j                         |S rB   )r   r  r  rd  r  s     r   r  zArguments.all  s<    FH

4??#

4??#

488
r   c                    | j                   D cg c]0  }|j                  "|j                  j                  r|j                  2 c}S c c}w rB   )r  r  r  rD   r  s     r   mutable_arg_nameszArguments.mutable_arg_names  sB     ]]
||'ALL,A,A FF
 	
 
s   5Ac                :    t        d | j                  D              S )Nc              3  P   K   | ]  }|j                   j                            y wrB   )r;  r  r?  s     r   r   z+Arguments.has_tensor_arg.<locals>.<genexpr>	       Fq166((*F   $&r  r  r   s    r   rs  zArguments.has_tensor_arg	      FD4E4EFFFr   c                :    t        d | j                  D              S )Nc              3  P   K   | ]  }|j                   j                            y wrB   )r;  r  r?  s     r   r   z+Arguments.has_symint_arg.<locals>.<genexpr>	  r&  r'  r(  r   s    r   r~  zArguments.has_symint_arg	  r)  r   c                :    t        d | j                  D              S )Nc              3  P   K   | ]  }|j                   j                            y wrB   )r;  r  r?  s     r   r   z.Arguments.has_generator_arg.<locals>.<genexpr>	  s     I!166++-Ir'  r(  r   s    r   r  zArguments.has_generator_arg	  s    It7H7HIIIr   Frk  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 )Nc                r    t        | j                  | j                  s| j                  d       S d d       S )Nr  )r   rD   r;  rM  )r  r\  s    r   strip_arg_annotationz1Arguments.signature.<locals>.strip_arg_annotation	  s=    VVVV)6			  =A	 r   r"   r  rD  rR  r  rr  r  rd  )r  r   r   r   )
r  ro  rp  r  rD  r  rE  rR  r  r  )r   r\  r0  s    ` r   r  zArguments.signature
	  s    	  %($*B*BC!
 ==, 1$--2H2HIJ!&($*C*CD"
 +0($*L*LM+ C,d.Q.QRS+T  +-/
 	
r   c           	         | j                   J t        j                  | t        t        j                  | j                   j                  d                   S )Nr5  )rD  )rD  dataclassesrn  r  rE  r   s    r   remove_self_annotationz Arguments.remove_self_annotation/	  sJ    }}(((""!##DMM$:$:tL
 	
r   c                v    t        | j                        dk(  sJ t        j                  | t	        |            S )Nr   )rd  )rh  rd  r3  rn  ro  )r   rX  s     r   with_out_argszArguments.with_out_args8	  s5    488}!!!""d
 	
r   c                (   g }g }g }|}| j                  d      D ]r  }|s|dk(  r||u sJ d       |}t        j                  |      }|j                  "|j                  j                  r||u rn||u r	|}n||usJ |j                  |       t |||fS )Nr   r  z:invalid syntax: kwarg-only specifier * can only occur once)r   r   rP   r  r  rg  )r.  r  r  rd  arguments_accr  pargs          r   	_preparsezArguments._preparse?	  s    %'
%'
 " ::d# 	'Ccz$
2 P2 !+>>#&D *t/G/G J."j0$'M$C///  &/	'2 :s**r   c                   t         j                  |       \  }}}d}t        |      D ]  \  }}|j                  dk(  s|} n ||d| }t	        ||         }||dz   d }	ng }d}|}	g }
d}g }|
}dd} |dt
        j                  d             |dt
        j                  d             |d	t
        j                  d
             |dt
        j                  d            g}d}|t        |      k  r|t        |      t        |      z
  k  rft        d t        ||||t        |      z          D              r;||
u sJ t        ||   ||dz      ||dz      ||dz            }|t        |      z  }|}|j                  ||          |dz  }|t        |      k  rt        t        |      |t        |	      t        |
      |t        |      t        |            S )z.
        Input: 'int x, int y, int z'
        Nr   r#  c                      fdS )Nc                X    | j                   k(  xr | j                  t              fv S rB   )rD   r;  r  )r  rD   tys    r   <lambda>z/Arguments.parse.<locals>.pred.<locals>.<lambda>	  s'    QVVt^P2|B?O:P0P r   r"   )rD   r>  s   ``r   predzArguments.parse.<locals>.pred	  s	    PPr   r  r   r  r  r	  r  r
  r0  r   c              3  2   K   | ]  \  }} ||        y wrB   r"   )r   pr  s      r   r   z"Arguments.parse.<locals>.<genexpr>	  s       1 aDr  rZ  rT  r  r1  )rD   r   r>  r  r   zCallable[[Argument], bool])r  r:  	enumeraterD   r  r  rP   rh  r  rB  r  rg  ro  )r.  r  r  rd  self_ixir  r  rD  rR  r  rr  r  kwarg_only_accr@  
predicatess                   r   rP   zArguments.parsec	  s"    '0&9&9$&?#
J j) 	DAqvv	 ",Xg"6#Jw$78H#-gkm#< "$H#-  9;%8<9;&6	Q $**\234::h/04::h/0tzz&12	

 #j/!C
Oc*o55  #J
1q3z??R0S T  *-JJJJ%;(m)!a%0)!a%0#-a!e#4	&N Z(A%CN!!*Q-0FA) #j/!,  %&9 :!&';!<*/0M*N)+01O+Pc

 	
r   c                p   g }|j                  t        t        | j                               | j                  s| j
                  r|j                  d       |j                  t        t        | j                               |j                  t        t        | j
                               dj                  |      S )Nr  r   )r   rp  r   r%  r&  rd  rg  r   )r   all_argumentss     r   r   zArguments.__str__	  s    #%Sd&:&:;<488  %Sd&:&:;<Sdhh/0yy''r   c                   | j                   | j                  rJ | j                  | j                  rJ | j                  D cg c]&  }|j                  |j                  j
                  r|( }}t        |      dk(  sJ d       y c c}w )Nr   zOmutable pre_self_positional arguments are not currently supported in the schema)rD  r  rr  r  r  r  rh  )r   r  mutable_pre_self_positionalss      r   r  zArguments.__post_init__	  s     == ////&:::: --(
||'ALL,A,A (
$ (

 /0A5 	
]	
5(
s   +BNr  )r   z:Sequence[Argument | SelfArgument | TensorOptionsArguments])r   z!Sequence[Argument | SelfArgument])r   z+Sequence[Argument | TensorOptionsArguments]r   z	list[str]r  )r\  r0  r   r  )r   r  )rX  list[Argument]r   r  )r.  r   r   z5tuple[list[Argument], list[Argument], list[Argument]])r.  r   r   r  r   r  )r   r   r    r!   r  r  r%  rC  r&  r  r  r  r  r  r#  rs  r~  r  r  r4  r6  r   r:  rP   r   r  r"   r   r   r  r    sP   
 .-!!..#7711 %98 
    D D     	C       
GGJ 27 #
J

 !+ !+F M
 M
^(
r   r  )r   submuldivmodpowlshiftrshiftandxororc                  b    e Zd ZU ded<   ded<   ded<   dZded<   dZd	ed
<   edd       ZddZy)rq  r   r  r0  r  rm  Fr  Nr4  r-  c                ^  
 | dk7  sJ | j                  d      rJ d       t        j                  d|       }|r|j                  d      nd}|r|j                  d      n| }t        j                  d|      }|?d}|j                  d      
t	        
fd	t
        D              rd}
dd  
n"d
}
d   dk7  sJ d
}|

d   dk(  rd}
d d 
nd
}d}
j                  |      rd}
d t        |        
|s|rJ d
}t        
||||      }	t        |	      | k(  sJ t        |	       d|         |	S )Nr6   rj  zs_out suffix is reserved and not permitted for operator names; did you mean to specify an out overload name instead?z^(?:(.*)::)?(.*)$r#  rZ  z^__([^_]+)__$Tc              3  .   K   | ]  }d | k(    yw)rE  Nr"   )r   nr  s     r   r   z)BaseOperatorName.parse.<locals>.<genexpr>
  s     Gq4Qqc7?Gr   Fr   rE  r  __functional)r  r  rm  r  r-  r  )	rq  r  r  r  r  AUGMENTED_ASSIGNMENT_NAMESrh  rq  r   )r  r  r-  op_without_nsr  rm  r  functional_suffixr  r   r  s             @r   rP   zBaseOperatorName.parse
  sr   Rxx;;v& 	
D	
& -r2&+EKKN	*/ARHH%}5= M771:DG,FGGABx
 Aw#~%~!M DBx3CRy *==*+"&130112D %W44"'' 3
 1v|0AxtB400|r   c                    | j                   r| j                    dnd}| j                  r$| j                  rdnd}| d| | j                   dS | j                  rdn| j                  rdnd}| | j                   | S )NrN  r6   rE  __r\  r]  )r-  rm  r  r  r  )r   namespace_prefixrE  s      r   r   zBaseOperatorName.__str__A
  s    48NNdnn-R0||A&'r!TYYKr:: <<  ++ #  ''		{1#66r   )r  r   r   rq  r   )	r   r   r    r!   r  r-  r   rP   r   r"   r   r   rq  rq  	  sC    
IM( !&% !Iz 6 6p7r   rq  c                  T    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	y
)re  rq  rD   r   rM  c                    d| v r| j                  dd      \  }}n| }d}t        t        j                  |      |      }t	        |      | k(  sJ t	        |       d|         |S )N.r#  r6   rL  r  )r   re  rq  rP   r   )r	  rD   rM  r   s       r   rP   zOperatorName.parseX
  sk    '>")--Q"7D-DM.44T:-X1v :SVHD	":: r   c                j    | j                   r| j                   d| j                    S | j                   S )Nrf  rM  rD   r   s    r   r   zOperatorName.__str__c
  3    ii[$"4"4!566ii[!r   c                j    | j                   r| j                   d| j                    S | j                   S )Nr\  rh  r   s    r   unambiguous_namezOperatorName.unambiguous_namen
  ri  r   c                    t        t        | j                  j                  d| j                  j                        | j
                        S NFrl  rL  )re  rq  rD   r  rm  rM  r   s    r   remove_inplacezOperatorName.remove_inplacet
  s=    !YY^^"ii55
 ,,
 	
r   c                    t        t        | j                  j                  d| j                  j                        |      S rm  )re  rq  rD   r  rm  )r   overloads     r   with_overloadzOperatorName.with_overload~
  s7    !YY^^"ii55
 #
 	
r   N)r	  r   r   re  r   )r   re  )rp  r   r   re  )
r   r   r    r!   r   rP   r   rk  rn  rq  r"   r   r   re  re  S
  s4    
 ""

r   re  c                    | j                   j                         t        j                  uxr/ |j	                  |        xr |j	                  |j                        S rB   )r/  r  r  r  r  )r  r  bs      r   "gets_generated_out_inplace_wrapperrt  
  sI     	
Z222 	'Q	'LL&r   c                  f    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y)NativeFunctionsViewGroupr,  viewr  	view_copyview_inplacec                   | j                   j                  sJ | j                  ]t        | j                         rAJ t	        | j                   j
                  j                         dt        | j                         d       | j                  j
                  j                  j                  j                  j                  d      sJ | j                   j
                  j                         | j                  j
                  j                  d      k(  sJ d| j                  j                  v sPJ t	        | j                  j
                  j                        t	        | j                   j                        f d       | j                  K| j                   j
                  j                         | j                  j
                  j                         k(  sJ | j                   j                  r}| j                  q| j                  j                  s[J t	        | j                   j
                  j                         dt	        | j                  j
                  j                         d	       | j                   j                  r| j                  r| j                  j                  s[J t	        | j                   j
                  j                         dt	        | j                  j
                  j                         d
       y y y )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.)rd  re  Trw  rx  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.)rw  r  rx  gets_generated_view_copyr   r/  rD   get_view_copy_namer  rq  r  rH  ry  rD  rE  r   s    r   r  z&NativeFunctionsViewGroup.__post_init__
  s   yy####>>!/		: tyy~~**+, -&tyy14 5EE: >>&&++0055>>?TUUU99>>++-1D1D1N1N%) 2O 2    $.."5"55 t~~**//0#diinn2EEF GD D5
 (99>>++-1B1B1G1G1Q1Q1SSSS99;;  ,((OO 499>>../0c$:K:K:P:P:U:U6V5W Xh hO 99II  ,((]] 499>>../0c$:K:K:P:P:U:U6V5W Xt t] - Jr   T)include_copyc             #     K   | j                    | j                  | j                   | j                  |r| j                   y y y wrB   )rw  ry  rx  )r   r}  s     r   r  z"NativeFunctionsViewGroup.functions
  sE     ii(###>>%,..  +7%s   AA
c                .    | j                   j                  S rB   )rw  r  r   s    r   r  z"NativeFunctionsViewGroup.root_name
  s    yy"""r   c                .    | j                   j                  S rB   )rw  rD  r   s    r   	compositez"NativeFunctionsViewGroup.composite
  s     yy???r   Nr  )r}  r0  r   r  r   r  )	r   r   r    r!   r  r  r  r  r  r"   r   r   rv  rv  
  sP    
 %$''!F 15 ! # # @ @r   rv  c                    | j                   sy| j                  ryd| j                  v ry| j                  j                  j                  j
                  j                  d      ryy)NFr  _inverseT)r  rD  rH  r/  rD   r  rq  )r  s    r   r{  r{  
  sS    << 	// 	vv{{%%j1r   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narrowrd  Frl  rL  )	r   r/  rD   r{  r  re  rq  rm  rM  )r  -list_of_ops_with_explicit_view_copy_operatorsrr  view_copy_names       r   r|  r|  
  s     6>J1
166;;LL'***66;;##(()/I!E9I9I9W9W
 ffkk//	N r   c                z    | dk(  ry| d   dk(  r| d   dk(  r| dd } t        d | j                  d	      D              S )
z$
    Input: '()'
    Output: []
    z()r"   r   r  r  r  r#  c              3  F   K   | ]  }t         j                  |        y wrB   )rb  rP   r  s     r   r   z parse_returns.<locals>.<genexpr>  s     Fsc"Fs   !r   )ro  r   )r/  s    r   r+  r+    sN    
 d1~RC!7!!B'Fk.?.?.EFFFr   c                  D    e Zd ZU ded<   ded<   ed	d       Zd
dZddZy)rf  zdict[str, list[Argument]]rn  rM  r   c                N   t        | t              sJ g }d| d   vrI| d   j                  d      }|D cg c]%  }t        j	                  |j                               ' }}| d d } i }| D ]  }t        |t              sJ d|v sJ d       |j                  d      \  }}d|vsJ d| d       |j                  d      }|D cg c]%  }t        j	                  |j                               ' }	}|	||<    t        ||      }
|
j                         | k(  sJ d	       |
S c c}w c c}w )
Nr  r  rS  zLprecomputed parameters without replacement are allowed only in the last liner  zillegal kernel param name 'z' in precomputed parameters')rn  r   zr.to_list() != src)	r]  ra  r   r   rP   rk  r   rf  to_list)srcadd_argsadd_listrD   rn  raw_replace_itemr  with_list_raw	with_listwith_list_argsr   s              r   rP   zPrecompute.parse#  sR   #t$$$ R 2w}}S)HAIJtzz|4JHJcr(C # 	*.444-- 5-
 "2!7!7!?Cc> -cU2NO> &++C0IGPQthnnTZZ\:QNQ)GCL	* wH5yy{c!7#77!+ K  Rs   *D*D"c                   | j                   D ]+  }|j                  j                         |j                  k7  r+J  | j                  j	                         D ]2  }|D ]+  }|j                  j                         |j                  k7  r+J  4 y rB   )r   rD   upperrn  r   )r   r  r.  s      r   r  zPrecompute.__post_init__H  sz      	,A66<<>QVV+++	,LL'') 	0D 0vv||~///0	0r   c                    g }| j                   j                         D ]3  \  }}dj                  d |D              }|j                  | d|        5 |S )Nr   c              3  2   K   | ]  }t        |        y wrB   r  )r   params     r   r   z%Precompute.to_list.<locals>.<genexpr>T  s     $PESZ$Pr  r  )rn  rJ   r   rg  )r   replace_listkernel_paramreplacement_paramsreplacementss        r   r  zPrecompute.to_listQ  sa    040B0B0D 	E,L,99$P=O$PPL<.\N CD	E r   N)r  objectr   rf  r  rL  )r   r   r    r!   r   rP   r  r  r"   r   r   rf  rf    s-     '&	" "H0r   rf  r   )r   r@   r   r0  )r  r,  r  r  rs  r  r   r0  )r  r,  r   r0  )r  r,  r   re  )r/  r   r   r  )v
__future__r   r3  r#  r  r   enumr   r   typingr   typing_extensionsr   torchgen.utilsr	   r
   collections.abcr   r   r   r   r$   rt  r   r   AUTOGRAD_KEYSFRAGMENT_NAMESPACESr@   r   r   r   r   hasattrr   printr  r,   r(   r'   r.   r+   r   r   r   r   r\   r   r   r   r   r   r   r~   r   ry   rz   r{   r|   r   r   r   r   r2   r   r   r   r   rc   rl  r   r   r   r   r   dispatch_device_mapr   r   r!   r   r   r  r  r   r  r  r  r  r  r"  r'  r,  r  r  rm  ru  r  r.  r  r  r=  r<  r  r  r  r   rb  r  r  r  r^  rq  re  rt  rv  r{  r|  r+  rf  )	components   0r   <module>r     s   "   	 !    * 6 <<: $* * *d  (  "  ((,>,(J,  #$:; 
_>$ _>DD   B  {BG,+-A!H2$rd"pqrpst 	 OOOOOO  #''9  OOOOOO))55))66     A!L*%
 ,V5H%P , ,^ 460 5&j  '
(8(8*:K:K'LMj %j667i  %Z0=3LLe !.u!5i8P!Po *i 88 " #;t ;4d 
T $ $f	G f	G f	GR  $q
 q
 q
h $( ( (, $
 
 
6 $8 8 8` $t@ t@ t@~ $1 1 1t $2" 2" 2"lT . $*t * *( $(4 ( (( $d  @ $t  * $W5 W5 W5t $4) 4) 4)p $   $G G G $r
 r
 r
p	 * $e7 e7 e7T $2
 2
 2
j.3?	* $;@ ;@ ;@|.0	G $; ; ;CV,s   3U8