U
    <c%o                  "   @   s~  U d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ edZdddgZed	d
Zeeef ZeddG d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&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/edd#Z0edd$Z1edd%Z2edd&Z3edd'Z4edd(Z5edd)Z6edd*Z7edd+Z8edd,Z9edd-Z:edd.Z;edd/Z<edd0Z=edd1Z>edd2Z?edd3Z@edd4ZAedd5ZBedd6ZCed7d8ZDedd9ZEedd:ZFedd;ZGedd<ZHedd=ZIejJeejKe ejLe!ejMe"ejNe#ejOe$ejPe&ejQe%ejRe'ejSe(ejTe)ejUe*ejVe+iZWeeef eXd>< ejYe#ejZe%ej[e*eje-ej\e.eje/ej]e0ej^e5ej_e7ej`e8ejae9ejbe:ejce<ejde=ejee>ejfe?ejgeFiZheeef eXd?< eddG d@dA dAZieddG dBdC dCZjeddG dDdE dEZkeddG dFdG dGZleddG dHdI dIZmeddG dJdK dKZneddG dLdM dMZoeddG dNdO dOZpeddG dPdQ dQZqeddG dRdS dSZreeielejekemenepeoeqerf
 ZseddG dTdU dUZteddG dVdW dWZueddG dXdY dYZveddG dZd[ d[ZweddG d\d] d]ZxeddG d^d_ d_ZyeddG d`da daZzeddG dbdc dcZ{eddG ddde deZ|eddG dfdg dgZ}ddheeeedi djdkdlZ~d dmlmZmZmZmZmZmZ dnS )o    )	dataclass)Enum)	DictIteratorListOptionalSequenceSetTupleTypeVarUnion)
ArgumentBackendIndexBaseTyFunctionSchemaNativeFunctionNativeFunctionsGroupNativeFunctionsViewGroup
ScalarTypeSelfArgumentTensorOptionsArguments_Tzat::TensorListz,const c10::List<c10::optional<at::Tensor>> &zconst at::ITensorListRef &SpecialArgName)Z possibly_redundant_memory_formatT)frozenc                   @   s0   e Zd ZU ee ed< eed< edddZdS )BaseCppTypensnamereturnc                 C   s,   | j d ks| j dkr| jS | j  d| j S )N z::)r   r   self r"   6/tmp/pip-unpacked-wheel-gikjz4vx/torchgen/api/types.py__str__(   s    zBaseCppType.__str__N)__name__
__module____qualname__r   str__annotations__r$   r"   r"   r"   r#   r   #   s   
r   r   Zuint8_tZint8_tZint16_tZint32_tZint64_tatHalfdoublefloatZc10zcomplex<c10::Half>zcomplex<float>zcomplex<double>boolBFloat16voidZstring_view	Generatorr   TensorZOptionalTensorRefZ
TensorListZITensorListRefZIOptTensorListRefDimnameZDimnameList	DimVectorLayoutDeviceScalarZOptionalScalarRefMemoryFormatQSchemeStorageStreamZIntArrayRefZOptionalIntArrayRefZOptionalSymIntArrayRefZTensorOptionsztorch::autograd::generatedZTypeAndSizeZTensorGeometrySymIntZSymIntArrayRefscalar_topmath_tScalarTypeToCppMappingBaseTypeToCppMappingc                   @   sH   e Zd ZU eed< ddeedddZeddd	Zd
dddZ	dS )	BaseCTypetypeF	strip_refrD   r   c                C   s
   t | jS N)r(   rB   r!   rD   r"   r"   r#   cpp_type   s    zBaseCType.cpp_typer   c                 C   s   t | jddS )Nzat::r   )r(   rB   replacer    r"   r"   r#   "cpp_type_registration_declarations   s    z,BaseCType.cpp_type_registration_declarationsCTypec                 C   s   | S rF   r"   r    r"   r"   r#   remove_const_ref   s    zBaseCType.remove_const_refN)
r%   r&   r'   r   r)   r.   r(   rH   rJ   rL   r"   r"   r"   r#   rA      s   
rA   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )ConstRefCTyperK   elemFrC   rE   c                C   s$   |r| j j|dS d| j   dS )NrC   const  &rN   rH   rG   r"   r"   r#   rH      s    zConstRefCType.cpp_typer   c                 C   s   d| j   dS )NrO   rP   rN   rJ   r    r"   r"   r#   rJ      s    z0ConstRefCType.cpp_type_registration_declarationsc                 C   s
   | j  S rF   rN   rL   r    r"   r"   r#   rL      s    zConstRefCType.remove_const_refN	r%   r&   r'   r)   r.   r(   rH   rJ   rL   r"   r"   r"   r#   rM      s   
rM   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )MutRefCTyperK   rN   FrC   rE   c                C   s"   |r| j j|dS | j   dS )NrC   rP   rQ   rG   r"   r"   r#   rH      s    zMutRefCType.cpp_typer   c                 C   s   | j   dS )NrP   rR   r    r"   r"   r#   rJ      s    z.MutRefCType.cpp_type_registration_declarationsc                 C   s
   | j  S rF   rS   r    r"   r"   r#   rL      s    zMutRefCType.remove_const_refNrT   r"   r"   r"   r#   rU      s   
rU   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )OptionalCTyperK   rN   FrC   rE   c                C   s   d| j   dS Nzc10::optional<>rQ   rG   r"   r"   r#   rH      s    zOptionalCType.cpp_typer   c                 C   s   d| j   dS rW   rR   r    r"   r"   r#   rJ      s    z0OptionalCType.cpp_type_registration_declarationsc                 C   s   t | j S rF   )rV   rN   rL   r    r"   r"   r#   rL      s    zOptionalCType.remove_const_refNrT   r"   r"   r"   r#   rV      s   
rV   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )	ListCTyperK   rN   FrC   rE   c                C   s   d| j   dS Nz
c10::List<rX   rQ   rG   r"   r"   r#   rH      s    zListCType.cpp_typer   c                 C   s   d| j   dS rZ   rR   r    r"   r"   r#   rJ      s    z,ListCType.cpp_type_registration_declarationsc                 C   s   t | j S rF   )rY   rN   rL   r    r"   r"   r#   rL      s    zListCType.remove_const_refNrT   r"   r"   r"   r#   rY      s   
rY   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )ArrayRefCTyperK   rN   FrC   rE   c                C   s   d| j   dS )Nzat::ArrayRef<rX   rQ   rG   r"   r"   r#   rH      s    zArrayRefCType.cpp_typer   c                 C   s   d| j   dS )Nz	ArrayRef<rX   rR   r    r"   r"   r#   rJ      s    z0ArrayRefCType.cpp_type_registration_declarationsc                 C   s   t | j S rF   )r[   rN   rL   r    r"   r"   r#   rL      s    zArrayRefCType.remove_const_refNrT   r"   r"   r"   r#   r[      s   
r[   c                   @   sH   e Zd ZU ded< ddeedddZedd	d
ZddddZdS )VectorCTyperK   rN   FrC   rE   c                C   s   d| j   dS Nz::std::vector<rX   rQ   rG   r"   r"   r#   rH      s    zVectorCType.cpp_typer   c                 C   s   d| j   dS r]   rR   r    r"   r"   r#   rJ      s    z.VectorCType.cpp_type_registration_declarationsc                 C   s   t | j S rF   )r\   rN   rL   r    r"   r"   r#   rL      s    zVectorCType.remove_const_refNrT   r"   r"   r"   r#   r\      s   
r\   c                   @   sP   e Zd ZU ded< eed< ddeedddZed	d
dZdd	ddZ	dS )
ArrayCTyperK   rN   sizeFrC   rE   c                C   s   d| j   d| j dS Nz::std::array<,rX   )rN   rH   r_   rG   r"   r"   r#   rH      s    zArrayCType.cpp_typer   c                 C   s   d| j   d| j dS r`   )rN   rJ   r_   r    r"   r"   r#   rJ      s    z-ArrayCType.cpp_type_registration_declarationsc                 C   s   t | j | jS rF   )r^   rN   rL   r_   r    r"   r"   r#   rL     s    zArrayCType.remove_const_refN)
r%   r&   r'   r)   intr.   r(   rH   rJ   rL   r"   r"   r"   r#   r^      s
   
r^   c                   @   sL   e Zd ZU ed ed< ddeedddZedd	d
ZddddZ	dS )
TupleCTyperK   elemsFrC   rE   c                C   s   dd dd | jD  dS )N::std::tuple<ra   c                 S   s   g | ]}|  qS r"   )rH   .0er"   r"   r#   
<listcomp>  s     z'TupleCType.cpp_type.<locals>.<listcomp>rX   joinrd   rG   r"   r"   r#   rH     s    zTupleCType.cpp_typer   c                 C   s   dd dd | jD  dS )Nre   ra   c                 S   s   g | ]}|  qS r"   )rJ   rf   r"   r"   r#   ri     s     zATupleCType.cpp_type_registration_declarations.<locals>.<listcomp>rX   rj   r    r"   r"   r#   rJ     s    z-TupleCType.cpp_type_registration_declarationsc                 C   s   t dd | jD S )Nc                 S   s   g | ]}|  qS r"   )rL   rf   r"   r"   r#   ri     s     z/TupleCType.remove_const_ref.<locals>.<listcomp>)rc   rd   r    r"   r"   r#   rL     s    zTupleCType.remove_const_refN)
r%   r&   r'   r   r)   r.   r(   rH   rJ   rL   r"   r"   r"   r#   rc     s   
rc   c                   @   sH   e Zd ZU eed< ddeedddZeddd	Zd
dddZ	dS )VectorizedCTyperN   FrC   rE   c                C   s   d| j   dS )Nzat::vec::Vectorized<rX   rQ   rG   r"   r"   r#   rH     s    zVectorizedCType.cpp_typer   c                 C   s   t d S rF   )NotImplementedErrorr    r"   r"   r#   rJ   !  s    z2VectorizedCType.cpp_type_registration_declarationsrK   c                 C   s   | S rF   r"   r    r"   r"   r#   rL   $  s    z VectorizedCType.remove_const_refN)
r%   r&   r'   rA   r)   r.   r(   rH   rJ   rL   r"   r"   r"   r#   rl     s   
rl   c                   @   s`   e Zd ZU eed< eed< ddeedddZedd	d
Z	d dddZ
ed dddZdS )
NamedCTyper   rB   FrC   rE   c                C   s   | j j|dS )NrC   )rB   rH   rG   r"   r"   r#   rH   B  s    zNamedCType.cpp_typer   c                 C   s
   | j  S rF   )rB   rJ   r    r"   r"   r#   rJ   G  s    z-NamedCType.cpp_type_registration_declarationsc                 C   s   t | j| j S rF   )rn   r   rB   rL   r    r"   r"   r#   rL   J  s    zNamedCType.remove_const_refr   r   c                 C   s   t || jS rF   )rn   rB   r!   r   r"   r"   r#   	with_nameM  s    zNamedCType.with_nameN)r%   r&   r'   ArgNamer)   rK   r.   r(   rH   rJ   rL   rq   r"   r"   r"   r#   rn   =  s   
rn   c                   @   s   e Zd ZU eed< eed< eeee	f ed< dZ
ee ed< ed dddZeed	d
dZd d	ddZddeedddZed	ddZed	ddZed dddZdS )Bindingr   nctypeargumentNdefaultro   c                 C   s   t || j| j| jdS N)r   rt   ru   rv   rs   rt   ru   rv   rp   r"   r"   r#   rename`  s    zBinding.renamer   c                 C   s
   | j  S rF   )rt   rH   r    r"   r"   r#   rB   h  s    zBinding.typec                 C   s   t | j| jd | jdS )N)r   rt   rv   ru   )rs   r   rt   ru   r    r"   r"   r#   
no_defaultl  s    zBinding.no_defaultF)func_ptr_cast)r{   r   c                C   s@   d}| j d k	rd| j  }|r&| j S | j d| j | S d S Nr   = )rv   rB   r   )r!   r{   
mb_defaultr"   r"   r#   declt  s    
zBinding.declc                 C   s8   | j  }d}| jd k	r$d| j }| d| j | S r|   )rt   rJ   rv   r   )r!   Ztype_sr   r"   r"   r#   decl_registration_declarations  s
    

z&Binding.decl_registration_declarationsc                 C   s   | j  d| j S )Nr~   )rB   r   r    r"   r"   r#   defn  s    zBinding.defnc                 C   s   t || j| j| jdS rw   rx   rp   r"   r"   r#   rq     s       zBinding.with_name)r%   r&   r'   r(   r)   rn   r   r   r   r   rv   r   ry   propertyrB   rz   r.   r   r   r   rq   r"   r"   r"   r#   rs   X  s   
rs   c                   @   s   e Zd ZU eed< eed< dS )ExprexprrB   N)r%   r&   r'   r(   r)   rn   r"   r"   r"   r#   r     s   
r   c                   @   s   e Zd ZU eed< eed< eed< eed< ee ed< dZeed< e	e
 dd	d
ZedddZddddee eeedddZddddee eeedddZedddZedddZdS )CppSignaturefuncmethodfaithfulsymintcpp_no_default_argsFfallback_bindingr   c                 C   s    t j| jj| j| j| j| jdS )N)r   r   r   r   )cpp	argumentsr   r   r   r   r   r    r"   r"   r#   r     s    zCppSignature.argumentsc                 C   s*   t j| j| j| jd}| jr&d| }|S )N)Zfaithful_name_for_out_overloadsZsymint_overloadZ__dispatch_)r   r   r   r   r   r   )r!   nr"   r"   r#   r     s    
zCppSignature.nameNr   )r   prefixis_redispatching_fn)r   r   r   r   c                C   sl   t j| jj| jd }dd |  D }|r8dg| }d|}|d krV||   }| d| d| dS )	Nr   c                 S   s   g | ]}|  qS r"   r   rg   ar"   r"   r#   ri     s     z%CppSignature.decl.<locals>.<listcomp>"c10::DispatchKeySet dispatchKeySet, r~   ()	r   returns_typer   returnsr   rH   r   rk   r   r!   r   r   r   r   Zcpp_argsZcpp_args_strr"   r"   r#   r     s     


zCppSignature.declc                C   sl   t j| jj| jd }dd |  D }|r8dg| }d|}|d krV||   }| d| d| dS )	Nr   c                 S   s   g | ]}|  qS r"   r   r   r"   r"   r#   ri     s     z%CppSignature.defn.<locals>.<listcomp>r   r   r~   r   r   r   r   r"   r"   r#   r     s     


zCppSignature.defnc                 C   s<   d dd |  D }tj| jj| jd  d| dS )Nr   c                 s   s   | ]}|j V  qd S rF   rB   r   r"   r"   r#   	<genexpr>  s     z(CppSignature.ptr_type.<locals>.<genexpr>r    (*)(r   rk   r   r   r   r   r   r   rH   r!   Zargs_types_strr"   r"   r#   ptr_type  s    zCppSignature.ptr_typec                 C   s<   d dd |  D }tj| jj| jd  d| dS )Nr   c                 s   s   | ]}|j V  qd S rF   r   r   r"   r"   r#   r     s     z$CppSignature.type.<locals>.<genexpr>r    (r   r   r   r"   r"   r#   rB     s    zCppSignature.type)r%   r&   r'   r   r)   r.   r	   r(   r   r   rs   r   r   r   r   r   r   rB   r"   r"   r"   r#   r     s8   
	r   c                   @   s   e Zd ZU eed< eed< ee ed< ee ed< ee ed< edddZd	d
ee	e dddZ
eddeeed dddZdS )CppSignatureGroupr   	signaturefaithful_signaturesymint_signaturesymint_faithful_signaturer   c                 C   s   | j r| j S | jS d S rF   )r   r   r    r"   r"   r#   most_faithful_signature  s    z)CppSignatureGroup.most_faithful_signatureTr   r   r   c                c   s:   | j V  | jr| jV  |r6| jr(| jV  | jr6| jV  d S rF   )r   r   r   r   )r!   r   r"   r"   r#   
signatures  s    zCppSignatureGroup.signaturesF)r   )fr   r   r   c                   s    j tttd fddttttt f dfdd}|dd\}}d }d } rp|d	d\}}t||||d
S )N)r   r   r   c                    s   t | | jdS )N)r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r"   r#   make_sig"  s    z8CppSignatureGroup.from_native_function.<locals>.make_sigr   c                    s@   d } j jd k	s t j jdkr,d| d}d| d}||fS )Nr   Tr   F)r   Ztensor_optionslenout)r   r   r   )r   r   r"   r#   	make_sigs,  s
    z9CppSignatureGroup.from_native_function.<locals>.make_sigsFr   T)r   r   r   r   r   )r   r.   r   r
   r   
has_symintr   )r   r   r   r   r   r   r   r   r"   )r   r   r   r   r   r#   from_native_function  s    
"z&CppSignatureGroup.from_native_functionN)r%   r&   r'   r   r)   r   r   r   r.   r   r   staticmethodr   r   r"   r"   r"   r#   r     s   

  r   c                   @   s   e Zd ZU eed< dZeed< dZeed< e	e
 dddZedd	d
Zd ee edddZd!ddee eedddZe	e dddZedddZedddZedddZedddeeed dddZdS )"DispatcherSignaturer   r   r   Tr   r   c                 C   s   t j| j| jdS Nr   )
dispatcherr   r   r   r    r"   r"   r#   r   N  s    zDispatcherSignature.argumentsc                 C   s   | j t| j S rF   )r   r   r   r   r    r"   r"   r#   r   Q  s    zDispatcherSignature.nameNro   c                 C   sF   d dd |  D }|d kr(|  }|    d| d| dS )Nr   c                 s   s   | ]}|  V  qd S rF   r   r   r"   r"   r#   r   U  s     z+DispatcherSignature.decl.<locals>.<genexpr>r~   r   r   )rk   r   r   r   rH   r!   r   args_strr"   r"   r#   r   T  s    zDispatcherSignature.declF)r   )r   r   r   c                C   sX   dd |   D }|r dg| }d|}|d kr:|  }|    d| d| dS )Nc                 S   s   g | ]}|  qS r"   r   r   r"   r"   r#   ri   ]  s     z,DispatcherSignature.defn.<locals>.<listcomp>r   r   r~   r   r   )r   rk   r   r   rH   )r!   r   r   argsr   r"   r"   r#   r   Z  s    

zDispatcherSignature.defnc                 C   s   dd |   D S )Nc                 S   s   g | ]}t |j|jqS r"   )r   r   rt   r   r"   r"   r#   ri   f  s     z-DispatcherSignature.exprs.<locals>.<listcomp>)r   r    r"   r"   r#   exprse  s    zDispatcherSignature.exprsc                 C   s   t j| jj| jdS r   )r   r   r   r   r   r    r"   r"   r#   r   h  s    z DispatcherSignature.returns_typec                 C   s0   d dd |  D }|    d| dS )Nr   c                 s   s   | ]}|j V  qd S rF   r   r   r"   r"   r#   r   l  s     z/DispatcherSignature.ptr_type.<locals>.<genexpr>r   r   rk   r   r   rH   r!   Zdispatcher_args_types_strr"   r"   r#   r   k  s    zDispatcherSignature.ptr_typec                 C   s0   d dd |  D }|    d| dS )Nr   c                 s   s   | ]}|j V  qd S rF   r   r   r"   r"   r#   r   q  s     z+DispatcherSignature.type.<locals>.<genexpr>r   r   r   r   r"   r"   r#   rB   p  s    zDispatcherSignature.typer   r   )r   r   r   r   c                C   s   t | ||S rF   )r   )r   r   r   r"   r"   r#   from_schemat  s    zDispatcherSignature.from_schema)N)N)r%   r&   r'   r   r)   r   r(   r   r.   r   rs   r   r   r   r   r   r   r   rK   r   r   rB   r   r   r"   r"   r"   r#   r   B  s6   
     r   c                   @   s   e Zd ZU eed< eed< dZeed< edddZde	e ed	d
dZ
de	e ed	ddZedddZee dddZedddZee dddZdS )NativeSignaturer   r   r   r   r   c                 C   s   | j t| j S rF   )r   nativer   r   r    r"   r"   r#   r     s    zNativeSignature.nameNro   c                 C   sR   d dd |  D }|d kr(|  }tj| jj| jd  d| d| dS )Nr   c                 s   s   | ]}|  V  qd S rF   r   r   r"   r"   r#   r     s     z'NativeSignature.decl.<locals>.<genexpr>r   r~   r   r   	rk   r   r   r   r   r   r   r   rH   r   r"   r"   r#   r     s    zNativeSignature.declc                 C   sR   d dd |  D }|d kr(|  }tj| jj| jd  d| d| dS )Nr   c                 s   s   | ]}|  V  qd S rF   r   r   r"   r"   r#   r     s     z'NativeSignature.defn.<locals>.<genexpr>r   r~   r   r   r   r   r"   r"   r#   r     s    zNativeSignature.defnc                 C   s<   d dd |  D }tj| jj| jd  d| dS )Nr   c                 s   s   | ]}|  V  qd S rF   r   r   r"   r"   r#   r     s     z+NativeSignature.ptr_type.<locals>.<genexpr>r   r   r   )rk   r   r   r   r   r   r   rH   )r!   r   r"   r"   r#   r     s    zNativeSignature.ptr_typec                 C   s   t j| j| jdS r   )r   r   r   r   r    r"   r"   r#   r     s    zNativeSignature.argumentsc                 C   s   t j| jj| jdS r   )r   r   r   r   r   r    r"   r"   r#   r     s    zNativeSignature.returns_typec                 C   s   t j |  t| jddS )NFr   )	translater   r   r   r    r"   r"   r#   dispatcher_exprs  s
     
 z NativeSignature.dispatcher_exprs)N)N)r%   r&   r'   r   r)   r.   r   r(   r   r   r   r   r   r   rs   r   rK   r   r   r   r"   r"   r"   r#   r   {  s   
r   c                   @   s2   e Zd ZU eed< edddZedddZdS )ViewInverseSignaturegr   c                 C   s"   | j jd k	sttj| j dddS )NTF)
is_reverseinclude_namespace)r   	view_copyAssertionErrorfunctionalizationr   r    r"   r"   r#   r     s    zViewInverseSignature.namec                 C   sd   | j jd k	stt| j jj}dd tj| j jjddD }d|  d|   dd	| d	S )
Nc                 S   s   g | ]}|  qS r"   r   r   r"   r"   r#   ri     s   z-ViewInverseSignature.decl.<locals>.<listcomp>Tr   zstatic r~   r   r   );)
r   r   r   r   r   r   inner_argumentsrH   r   rk   )r!   return_typedeclsr"   r"   r#   r     s     zViewInverseSignature.declN)r%   r&   r'   r   r)   r(   r   r   r"   r"   r"   r#   r     s   
r   c                   @   sn   e Zd ZU eed< eed< ee dddZe	dddZ
dd	ee e	d
ddZeeed dddZdS )FunctionalizationLambdar   r   r   c                 C   sD   t | jjjtjg }tj| jjj| jd}t	j	||ddd}|S )Nr   FT)r   Zallow_expensive_conversions)
r   r   r   viewr   r   Zreapply_views_bindingcapture_argumentsr   r   )r!   Z	outer_ctxZcapture_bindingsZcapture_exprsr"   r"   r#   captures  s        z FunctionalizationLambda.capturesc                 C   s`   t | jjj}ddd |  D }dd t j| jdD }d| dd| d	|	  S )
Nr   c                 s   s"   | ]}|j j d |j V  qdS )z = N)rB   r   r   )rg   valr"   r"   r#   r     s    z/FunctionalizationLambda.decl.<locals>.<genexpr>c                 S   s   g | ]}|  qS r"   r   r   r"   r"   r#   ri     s   z0FunctionalizationLambda.decl.<locals>.<listcomp>r   [z](z) -> )
r   r   r   r   r   rk   r   outer_argumentsr   rH   )r!   r   Zcapture_strr   r"   r"   r#   r     s    
zFunctionalizationLambda.declN)reapply_views)r   r   c          	      C   s   t j| j| jd|d}t j| jd}t j| jjj| jd}|| }| jjd k	sRt	t j
| jjj| jd}t | jjj}dd tj||ddD }| js|d k	r| dd	| d
|j dS | dd	| dS d S )NT)r   r   r   r   c                 S   s   g | ]
}|j qS r"   )r   rf   r"   r"   r#   ri     s    z6FunctionalizationLambda.inner_call.<locals>.<listcomp>Fr   r   r   z)[z];r   )r   r   r   r   r   r   r   r   r   r   r   Zinner_call_indexr   rk   )	r!   r   Zinner_call_nameZarg_ctxZcapture_ctxZfull_ctxZcall_bindingsZmaybe_indexZ
call_exprsr"   r"   r#   
inner_call  s0      z"FunctionalizationLambda.inner_call)r   r   r   c                C   s
   t | |S rF   )r   )r   r   r"   r"   r#   	from_func  s    z!FunctionalizationLambda.from_func)r%   r&   r'   r   r)   r.   r   r   r   r(   r   r   r   r   r   r"   r"   r"   r#   r     s   
 r   c                   @   sF   e Zd ZU eed< eed< d
ee edddZee	 ddd	Z
dS )StructuredImplSignaturer   r   Nro   c                 C   s,   d dd |  D }d| j d| dS )Nr   c                 s   s   | ]}|  V  qd S rF   r   r   r"   r"   r#   r     s     z/StructuredImplSignature.defn.<locals>.<genexpr>zTORCH_IMPL_FUNC(z)(r   )rk   r   r   r   r"   r"   r#   r     s    zStructuredImplSignature.defnr   c                 C   s   t | jS rF   )
structuredZimpl_argumentsr   r    r"   r"   r#   r     s    z!StructuredImplSignature.arguments)N)r%   r&   r'   r   r)   r(   r   r   r   rs   r   r"   r"   r"   r#   r     s   
r   )r   )r   r   )r   backend_indexr   r   c                C   sf   | | }|d k	o| }|r:| j s:td|j d|jrRtj| j||dS t	| j||dS d S )Nz&attempted to define symint kernel for z without SymInt in schemar   )
Z
get_kernelZsupports_symintr   r   r   Zdispatch_keyZexternalr   r   r   )r   r   r   metar   r"   r"   r#   kernel_signature  s    
r   )r   r   r   r   r   r   N)Zdataclassesr   enumr   typingr   r   r   r   r   r	   r
   r   r   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r   ZTENSOR_LIST_LIKE_CTYPESr   r(   rr   r   ZbyteTZcharTZshortTZint32TZlongTZhalfTZdoubleTZfloatTZcomplexHalfTZcomplexFloatTZcomplexDoubleTZboolTZ	bfloat16TZvoidTZstringTZ
generatorTZscalarTypeTZtensorTZoptionalTensorRefTZtensorListTZiTensorListRefTZiOptTensorListRefTZdimnameTZdimnameListTZ
dimVectorTZlayoutTZdeviceTZscalarTZoptionalScalarRefTZmemoryFormatTZqschemeTZstorageTZstreamTZintArrayRefTZoptionalIntArrayRefTZoptionalSymIntArrayRefTZtensorOptionsTZtypeAndSizeTZtensorGeometryTZSymIntTZsymIntArrayRefTr=   r>   ZByteCharZShortZIntZLongr+   ZFloatDoubleZComplexHalfZComplexFloatZComplexDoubleZBoolr/   r?   r)   rb   r-   r.   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r@   rA   rM   rU   rV   rY   r[   r\   r^   rc   rl   rK   rn   rs   r   r   r   r   r   r   r   r   r   Ztorchgen.apir   r   r   r   r   r   r"   r"   r"   r#   <module>   sl   ,0








 

































                              <	d=8(D  