o
    vZh                     @  s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
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mZ erHd dlmZ ed	d
G dd dZed	d
G dd dZed	d
G dd deZed	d
G dd dZed	d
G dd deZed	d
G dd dZ ed	d
G dd dZ!ed	d
G dd dZ"ed	d
G dd dZ#ed	d
G dd dZ$dd dud'd(Z%dvd)d*Z&dd	d+dwd1d2Z'dxd4d5Z(dyd8d9Z)ddd:dzd<d=Z*ddd:d{dBdCZ+d|dGdHZ,d}dIdJZ-d}dKdLZ.d~dNdOZ/ddPdQZ0		dddTdUZ1h dVZ2ddWdXZ3ddYdZZ4d[d\dd`daZ5d	dbddedfZ6d	dbddidjZ7d	dbddldmZ8dndodpdqdqdrZ9d	dbddsdtZ:d[S )    )annotations)	dataclass)TYPE_CHECKING)cpp)BindingCppSignatureCppSignatureGroup)pythonify_default)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturnTypeVariant)SequenceT)frozenc                   @  s   e Zd ZU ded< dS )PythonReturnstuple[Return, ...]returnsN__name__
__module____qualname____annotations__ r   r   B/var/www/auris/lib/python3.10/site-packages/torchgen/api/python.pyr      s   
 r   c                   @  sR   e Zd ZU ded< ded< ded< ded< dd	d
dddZddddddZdS )PythonArgumentstrnamer   type
str | Nonedefaultdefault_initFTmethodsymintr(   boolr)   returnc                C  s   t | j|ddddd}| j}|dkr|dv r|sd}| jd ur:ddddd	| j| j}| d
| d| S | d
| S )Nr)   zconst  z &self)TensorNumberinputNone)nullptr::std::nulloptstd::nullopt{} =)argument_type_strr#   replacer"   r%   get)r.   r(   r)   type_strr"   r%   r   r   r   argument_str   s"   
zPythonArgument.argument_strr(   
deprecatedr?   c                C  s$  t | j}| j}|dkr|dkr|s|sd}|dkr|d7 }|dkr.|dkr.|s.d| d }|o9t| to9| jd	k}| jd ur|st| jtrr| jjtt	j
krr| jd
rr| jdrrddttj| jdd d d }nd	d	d	d	ddd| j| j}| d| d| S | d| S )Nr.   r/   r1   from_out	Optional[]r2   {}(,    ,)Zcontiguous_formatZper_tensor_affine)r3   r4   r5   r6   zc10::MemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINE:  = )argument_type_str_pyir#   r"   
isinstancePythonOutArgumentr%   r   elemr   r   int
startswithendswithjoinmapr!   stripsplitr;   )r.   r(   r?   r<   r"   Ztreat_as_no_defaultr%   r   r   r   argument_str_pyi   sD   



(zPythonArgument.argument_str_pyiN)r(   r*   r)   r*   r+   r!   )r(   r*   r?   r*   r+   r!   )r   r   r   r   r=   rZ   r   r   r   r   r       s   
 r    c                   @  s$   e Zd ZU ded< edddZdS )	rQ   tuple[PythonArgument, ...]outputsr+   PythonOutArgument | Nonec                 C  s   | sd S t | }|dkrt| d j| d jdd | dS |dkr>tdd | D r/td|  tdtttj	|dd | dS t
d	)
NrI   r   r2   )r"   r#   r%   r&   r\   c                 s  s    | ]	}|j   V  qd S Nr#   is_tensor_like.0ar   r   r   	<genexpr>F  s    z1PythonOutArgument.from_outputs.<locals>.<genexpr>zUnsupported output type: rB   z!Unexpected PythonOutArgument size)lenrQ   r"   r#   anyRuntimeErrorr   r   r   r/   AssertionError)r\   sizer   r   r   from_outputs7  s,   zPythonOutArgument.from_outputsN)r\   r[   r+   r]   )r   r   r   r   staticmethodrj   r   r   r   r   rQ   .  s   
 rQ   c                   @  s   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dZdddd)ddZd*ddZd*ddZdddd+dd Z	dd!d,d"d#Z
dd!d-d%d&Zd'S ).PythonSignaturer!   r"   r[   
input_argsinput_kwargsr]   output_argsr   r   tensor_options_argsr*   r(   r+   c                 C     dS )NFr   r.   r   r   r   r?   p     zPythonSignature.deprecatedF)skip_outputsskip_tensor_optionsrt   ru   .tuple[PythonArgument | PythonOutArgument, ...]c                C  sN   g }| | j | | j | jd ur|s|| j |s#| | j t|S r^   )extendrm   rn   ro   appendrp   tuple)r.   rt   ru   resultr   r   r   	argumentst  s   zPythonSignature.argumentsrS   c                 C  s   t |  S r^   )re   r{   rr   r   r   r   arguments_count  s   zPythonSignature.arguments_countc                 C  s   t | jt | j S r^   )re   rm   rn   rr   r   r   r   
output_idx  s   zPythonSignature.output_idxTrt   r)   r)   c                  sZ    j |d} fdd|D }t j}t||kr!||d  j dd| dS )Nrt   c                   s   g | ]
}|j  jd qS )r'   )r=   r(   ra   r.   r)   r   r   
<listcomp>      z1PythonSignature.signature_str.<locals>.<listcomp>*rG   rH   rL   )r{   re   rm   insertr"   rV   )r.   rt   r)   argsschema_formalspositional_argcr   r   r   signature_str  s   
zPythonSignature.signature_strr   c                  sz    j |d} fdd|D }t j}t||kr ||d t } jr-|dd d j dd	| d
| dS )Nr   c                      g | ]	}|j  jd qS r(   rZ   r(   ra   rr   r   r   r         z5PythonSignature.signature_str_pyi.<locals>.<listcomp>r   r   r.   def rG   rH   ) -> : ...)r{   re   rm   r   returns_str_pyir(   r"   rV   r.   rt   r   r   r   returns_strr   rr   r   signature_str_pyi  s   

 z!PythonSignature.signature_str_pyir$   c          	        s    j |d} fdd|D }  }t j}d}|dkr5|d j}t|tr5t|jdv r5|dkr5d}|s9d S t|ts@J d	|d j	 d
 t
|j |d< t } jr]|dd d j	 dd| d| dS )Nr   c                   r   r   r   ra   rr   r   r   r     r   z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>Fr   )rS   SymIntrI   Tr   rM   r.   r   rG   rH   r   r   )r{   r|   re   rm   r#   rP   r   r!   rR   r"   rO   r   r(   r   rV   )	r.   rt   r   r   num_argsZnum_positionalargsZhave_vararg_versionZvararg_typer   r   rr   r   signature_str_pyi_vararg  s.   


 z(PythonSignature.signature_str_pyi_varargNr+   r*   )rt   r*   ru   r*   r+   rv   )r+   rS   rt   r*   r)   r*   r+   r!   rt   r*   r+   r!   rt   r*   r+   r$   )r   r   r   r   propertyr?   r{   r|   r}   r   r   r   r   r   r   r   rl   S  s"   
 

rl   c                   @  s^   e Zd ZU ded< ded< edddZd	d
ddddZd	ddddZd	ddddZdS )PythonSignatureDeprecatedr   deprecated_schematuple[str, ...]deprecated_args_exprsr+   r*   c                 C  rq   )NTr   rr   r   r   r   r?     rs   z$PythonSignatureDeprecated.deprecatedFTr~   rt   r)   r!   c                C  s   t j| ||dd S )Nr~   z|deprecated)rl   r   )r.   rt   r)   r   r   r   r     s   z'PythonSignatureDeprecated.signature_strr   c                  sh    j |d} fdd|D }t j}t||kr ||d t }d j dd| d| d	S )
Nr   c                   s   g | ]
}|j  jd dqS )Tr>   r   ra   rr   r   r   r     r   z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>r   r   rG   rH   r   r   )r{   re   rm   r   r   r"   rV   r   r   rr   r   r     s   

 z+PythonSignatureDeprecated.signature_str_pyir$   c                C  s   d S r^   r   )r.   rt   r   r   r   r     rs   z2PythonSignatureDeprecated.signature_str_pyi_varargNr   r   r   r   )	r   r   r   r   r   r?   r   r   r   r   r   r   r   r     s   
 	r   c                   @  s   e Zd ZU ded< ded< dS )!PythonSignatureNativeFunctionPairrl   	signaturer   functionNr   r   r   r   r   r     s   
 r   c                   @  s4   e Zd ZU ded< ded< ded< edddZdS )PythonSignatureGrouprl   r   r   basezNativeFunction | Noneoutplace
functionalr   rB   (PythonSignatureNativeFunctionPair | Noner+   c                 C  sT   |d u rt |j|jd dS |jj }|jj|d< t t|jdi ||j|jdS )N)r   r   r   rp   r   )r   r   r   __dict__copyrp   r#   )clsr   rB   Zsignature_kwargsr   r   r   
from_pairs  s   zPythonSignatureGroup.from_pairsN)r   r   rB   r   r+   r   )r   r   r   r   classmethodr   r   r   r   r   r     s   
 r   c                   @  s&   e Zd ZU ded< ded< ded< dS )DispatchLambdaArgumentr!   r"   r<   r*   
is_out_argNr   r   r   r   r   r   >  s   
 r   c                   @  s<   e Zd ZU ded< ded< ded< ded< edd	d
ZdS )PythonArgParserOutputExprr!   r"   exprrS   indexr    argumentr+   c                 C  s   d| j  dS )Nz
_r.isNone(rL   )r   rr   r   r   r   is_none_exprY  s   z&PythonArgParserOutputExpr.is_none_exprN)r+   r!   )r   r   r   r   r   r   r   r   r   r   r   J  s   
 r   c                   @  s   e Zd ZU ded< ded< dS )DispatchLambdaArgumentExprszSequence[str]exprsinitsNr   r   r   r   r   r   c  s   
 	r   Fr   fr   r(   r*   r+   r   c                C  s   t j| |djS )Nr   )r   Zfrom_native_functionr   )r   r(   r   r   r   _cpp_signature}  s   r   c                 C  s   | j jjd uS r^   )funcr{   tensor_optionsr   r   r   r   has_tensor_options  s   r   simple_typer)   tr   r   r)   r!   c                C  s  t | trC| jtjkrdS | jtjkrdS | jtjkrdS | jtjtjtj	tj
tjtjtjtjtjtjtjtjtjtjfv rB| jjS nt | trUt| j||d}| dS t | tr|s_| jnd }t| jdkrv| jd usoJ d| j dS t| jd	kr|d urd
| dS dS t| jdkr|r|d urd| dS dS |d urd
| dS dS t| jdkr|d urd| dS dS t| jdkr|d urd| dS dS t| jdkr|rdS dS t| jdkr|d urd| dS dS t| j||d}d| dS tdt|  )Nint64_tdoublezc10::string_viewr   ?r*   z::std::array<bool,>rS   zIntArrayRef[rD   ZIntArrayRefr   zSymIntArrayRef[ZSymIntArrayRefr/   zTensorList[Z
TensorListScalarzScalarList[Z
ScalarListTensor?z"c10::List<::std::optional<Tensor>>z*const c10::List<::std::optional<Tensor>> &DimnamezDimnameList[ZDimnameListz	ArrayRef<unrecognized type )rP   r   r"   r   rS   floatr!   r/   r*   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceDeviceIndexMemoryFormatr   Streamr   r   r9   rR   r   ri   rg   repr)r   r   r)   rR   ri   r   r   r   r9     sn   



r9   
int | Nonec                 C  s(   |   }|d urt|jdkr|jS d S )Nr*   )Zis_list_liker!   rR   ri   )r   lr   r   r   argument_type_size  s   r   rc   r
   c              
   C  s@   t | j| j| jd urtttj| j| jddd dS d d dS )NFr,   r"   r#   r%   r&   )r    r"   r#   r%   r!   r	   r   default_exprrc   r   r   r   r     s   
r   )r(   pyir   c                C  s   t | j| j||dS )N)category_overrider(   r   )signature_from_schemar   r   )r   r(   r   r   r   r   r     s   r   r   r   r   r$   c             	     s  g }|  jj |s jjd ur| jjj |  jj |  jj |  jj |  jj	 dd  jj
D dd  jjD dd  jj	D ttttfdd|}ttttfdd|}ttttfdd|}td	d
  jjD }tdd
   D rtdtdd
  jD }	t }
|dkp|	o| }|dv p|
dp|
d}|dk}g }|s|r5|s5d$ fdd}|tdtttjd|rd n|dd |tdtttjd|rd n|dd |tdtttjd|rd n|dpdd |tdtttjd d d |td!tttjd d d t  jd"}t!t" jj||t#$|t|||d#S )%Nc                 S     h | ]}|j qS r   r"   ra   r   r   r   	<setcomp>       z(signature_from_schema.<locals>.<setcomp>c                 S  r   r   r   ra   r   r   r   r     r   c                 S  r   r   r   ra   r   r   r   r     r   c                   
   | j  v S r^   r   r   )input_arg_setr   r   <lambda>     
 z'signature_from_schema.<locals>.<lambda>c                   r   r^   r   r   )kwarg_only_setr   r   r     r   c                   r   r^   r   r   )out_arg_setr   r   r     r   c                 s      | ]}|j  V  qd S r^   r_   ra   r   r   r   rd     s    

z(signature_from_schema.<locals>.<genexpr>c                 s  s    | ]}|j d kV  qdS )requires_gradNr   ra   r   r   r   rd         zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s  r   r^   r_   rb   rr   r   r   rd     r   factory)newlikeZnew__likedummyr"   r!   r+   r$   c                   sJ    j j}|d u r
d S t|| }|jd u s|jdkrd S tj|j|jddS )Nr2   Fr,   )r{   r   getattrr%   r   r   r#   )r"   Z	topt_argsrc   )r   r   r   topt_default_init,  s   
z0signature_from_schema.<locals>.topt_default_initdtyper2   r   layoutdevicez$torch::tensors::get_default_device()
pin_memoryFalser   r   )r"   rm   rn   ro   rp   r   r(   )r"   r!   r+   r$   )%rw   r{   Zpre_self_positionalZself_argrx   r   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyrB   Zflat_positionalZflat_kwarg_onlyry   rW   filterrf   Zflat_non_outZschema_order_arguments
ValueErrorr   r   r"   rT   rU   r    r   r   r   r   r   r   r*   r   rl   r!   rQ   rj   )r   r   r(   r   r   rm   rn   r\   Zhas_tensor_input_argZhas_tensor_returnr"   Zis_factory_functionZis_like_or_new_functionZis_dummy_functionrp   r   r   r   )r   r   r   r   r   r     s   

	


	
r   r   r   	list[str]c                 C  sJ   t | dkstdd | D rg S tdd | D rtddd | D S )NrI   c                 s      | ]}|j d u V  qd S r^   r   r   r   r   r   rd   ~  r   z'structseq_fieldnames.<locals>.<genexpr>c                 s  r   r^   r   r   r   r   r   rd     r   z)Unnamed field is not supported by codegenc                 S     g | ]}t |jqS r   )r!   r"   r   r   r   r   r         z(structseq_fieldnames.<locals>.<listcomp>)re   allrf   r   r   r   r   r   structseq_fieldnames}  s
   
r   c                 C  s  d}t | tr| j} d}t | tr| jtjtjfv rd}| jtjkr%d}n| jtj	kr.d}n| jtj
kr7d}n| jtjkr@d}n| jtjkrId}n| jtjkrRd	}n| jtjkr[d
}n| jtjkrdd}n| jtjkrmd}n| jtjkrvd}n| jtjkrd}ny| jtjkrd}np| jtjtjtjfv r| jj}n`t | trt
| jdkr| jd urdnd}nJ|  rd}| jd urdnd}n:t
| jdkrd}n0t
| jdkr| jd urt| j}d| d| d}nt| j}d| d}n	tdt|  |rd| d }|S )NFT_intzUnion[_int, SymInt]Z_floatr!   zUnion[Number, _complex]Z_dtypeZ_boolZ_qschemeZ_layoutzOptional[DeviceLikeType]Zmemory_formatzUnion[str, ellipsis, None]zUnion[Storage, UntypedStorage]rS   zUnion[_int, _size]_sizez/Union[Tensor, tuple[Tensor, ...], list[Tensor]]z'Union[tuple[Tensor, ...], list[Tensor]]r   zSequence[_float]r   zUnion[z, Sequence[z]]z	Sequence[rD   r   rC   )rP   r   rR   r   r"   r   rS   r   r   r   r!   r   r   r*   r   r   r   r   r   r   r/   r   r   r   ri   r`   rO   rg   r   )r   Zadd_optionalretrR   r   r   r   rO     sl   





rO   c                 C  sz   t | trt| j}d| dS t | tr)| jtjkrdS | jtjkr%dS t	| S t | t
r9t| j}d| dS t	| S )NrC   rD   Z_devicezOptional[str]tuple[z, ...])rP   r   return_type_str_pyirR   r   r"   r   r   r   rO   r   )r   innerr   r   r   r    s   




r  tuple[str, str] | Nonec           	   	   C  s   dd | j j D }| j}t| j j }|radd| d}d| d| dg}t||D ]\}}|d	d
| d| dg q,|d| ddt| dt| dddg d|}||fS d S )Nc                 S  r   r   r  r#   r   r   r   r   r     r   z)returns_structseq_pyi.<locals>.<listcomp>r  rH   rD   zclass rG   z):z    @propertyz    def z
(self) -> r   z    def __new__(cls, sequence: z): ...z    n_fields: _int = z    n_sequeunce_fields: _int = z    n_unnamed_fields: _int = 0zG    def __init_subclass__(cls) -> NoReturn: ...  # prohibit subclassingr-   
)r   r"   r   rV   ziprw   re   )	r   python_returnsZstructseq_namefield_namesZseq_typeZstructseq_def_linesr"   typZstructseq_defr   r   r   returns_structseq_pyi  s2   


r  c                 C  sd   t | jj}|rd| j S dd | jjD }t|dkr&dd| d S t|dkr0|d S d	S )
Nztorch.return_types.c                 S  r   r   r  r   r   r   r   r     r   z#returns_str_pyi.<locals>.<listcomp>rI   r  rH   rD   r   r2   )r   r   r"   re   rV   )r   r  r  r   r   r   r     s   r   ps"tuple[DispatchLambdaArgument, ...]c                   s`   t tr	j}n|j}tj|jd|d|jd}dd |jjD  d fd	d
}tt	||S )NF)r{   Zfaithfulr)   r(   cpp_no_default_argsc                 S  r   r   r   ra   r   r   r   r   _  r   z'dispatch_lambda_args.<locals>.<setcomp>cpp_argr   r+   r   c                   s\   | j }| j v }jr| jdkrd}nt dkp| }|r&ddi||}t| j||dS )Nr.   zconst at::Tensor &rI   zat::Tensor &
at::Tensor)r"   r<   r   )r#   r"   r(   re   r;   r   )r  r<   r   Zensure_temp_safeZout_argsr  r   r   dispatch_lambda_argb  s   
z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)r  r   r+   r   )
rP   r   r   r   r   r{   r  rB   ry   rW   )r  r   r)   Zschemacpp_argsr  r   r  r   dispatch_lambda_argsO  s   
r  >   z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>zr::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,c10::SymInt,c10::SymInt,at::Tensor,at::Tensor,at::Tensor>zat::IntArrayRefzat::QSchemer  z=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>z
at::Streamr   zvoid*z
at::Scalarzat::ScalarTypez::std::tuple<double,int64_t>z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>r   z::std::vector<at::Tensor>z2::std::tuple<at::Tensor,::std::vector<at::Tensor>>zO::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>z#::std::tuple<at::Tensor,at::Tensor>r*   voidz6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>z2::std::tuple<at::Tensor,at::Tensor,double,int64_t>c                 C  sJ   t dd | jjD }tj|dd }|tvr#t| jj d| |S )Nc                 s  s     | ]}t |j|jd V  qd S r^   )r   r"   r#   r   r   r   r   rd     s    
z-dispatch_lambda_return_str.<locals>.<genexpr>Tr,   z returns unsupported type )	ry   r   r   r   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESrg   r"   )r   Zreturns_without_annotationZ
return_strr   r   r   dispatch_lambda_return_str  s   r  c                 C  s~   | j  }tj| j |d}tj| jv rd| S tj| jv r7t| s+| j jjj	
dr.d}nd}| d| S td| j  )N)Zsymint_overloadzself.r   Ztorchatz::z1could not dispatch, neither function nor method: )r   Z
has_symintr   r"   r   r(   variantsr   r   r   rU   rg   )r   r)   r"   	namespacer   r   r   cpp_dispatch_target  s   

r  N)python_signaturer  PythonSignature | Noner   c                  sj   t  dd }d}t|tstdd |D }ntt fdd|j}tj j	v r3ttdj
|}|S )	NFr   r   c                 s  s    | ]}|j V  qd S r^   r   ra   r   r   r   rd     s    z%cpp_dispatch_exprs.<locals>.<genexpr>c                   s   | dkp j  S )NrB   )r   	is_out_fn)nr   r   r   r     r   z$cpp_dispatch_exprs.<locals>.<lambda>r.   )r   r{   rP   r   ry   r   r   r   r(   r  __ne__)r   r  r  r   r   r   r   cpp_dispatch_exprs  s   

r$  r,   r%   r&   c                C  s^  |d u}|rt | dvrtd|  dt| tr| jtjtjtjtj	tj
fv r.| jj S | jtjkr:|r8dS dS | jtjkrF|rDdS dS | jtjkrNdS | jtjkrVdS | jtjkrb|r`d	S dS | jtjkrn|rld
S dS | jtjkrvdS | jtj kr~dS | jtjkr|rdS dS | jtjkrdS nt| trt | jdkrdS t | jdkrdS t | jdkrdS |s|dv rt| jd d |dd S t| j|||dS t| tr't | jdkr| jd urd| j dS dS t | jdkrdS t | jdkrd S t | jd!krd"S t | jd#krd$S t | jd%kr|rd&S d"S t | jd'kr'd(S td|  d))*N)ScalarType?r   r   Device?r   Layout?r*   bool?ztype 'z+' does not supported unpacking with defaultZscalartypeWithDefaultZ
scalartypeZdeviceWithDefaultr   ZtoInt64ZtoSymIntZtoBoolWithDefaultZtoBoolZtoDoubleZ
stringViewZlayoutWithDefaultr   Zmemoryformatr/   ZoptionalTensorr   	generatorz	Dimname[]ZtoDimnameListOptional)Nr2   r4   r5   r,   Optionalztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   ZdimnamelistrS   Zintlistr   Z
doublelistr   Z
symintlistr   Z
scalarlistz%' is not supported by PythonArgParser)r!   rg   rP   r   r"   r   r/   r   r   r   r   lowerr   r   r   rS   r   r*   r   r   r   r   rR   arg_parser_unpack_methodr   ri   )r   r%   r&   r)   Zhas_default_initr   r   r   r,    s|   



r,  	arg_indexrS   c                C  s\   |j d u}t|j|j|j |d}|rd|j  nd}d| d|  | d}t|j|| |dS )N)r   r%   r&   r)   rH   r-   z_r.rG   rL   )r"   r   r   r   )r&   r,  r#   r%   r   r"   )r-  rc   r)   Zhas_defaultZunpack_methodr%   r   r   r   r   arg_parser_output_exprL  s   
r.  $dict[str, PythonArgParserOutputExpr]c                  s    fddt |  D S )Nc                   s&   i | ]\}}t || d }|j|qS )r,   )r.  r"   )rb   irc   er,   r   r   
<dictcomp>b  s
    z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumerater{   )r  r   r)   r   r,   r   arg_parser_output_exprs_  s   

r4  r%  r&  r'  r(  )r   r   r   r   r   c                  s@  t | ||d}t| ||d}g }i  t|}| jddD ]w}|j}||j j}	|r<|dkr<|d|	 dg | |< qt|trkt	|j
dkrk|j rk|d|	 dg t|j
D ]\}
}d	|
 d
 |j< q\qt|jdkr|d| d|	 dd| d| d| dg | |< q|	 |< q| jrd d< dd | jD |r$|j rt|j d| jD ]0}|jtvrt|j d|j dt|jt|jkrt|j dt|j d|j dqtfddtD st|j d |d|d j d|d  j d!|d" j d#|d$ j d%|d& j d' d( d(< |srdv r|j sCt|j d)|  d*| j tfd+dd,D sWt|j d-|d.|d/ j d0|d j d1|d j d0|d" j d1|d  j d0|d  j d2 d$vrt|j d3 d
tt fd4d|D |d5S )6Nr,   T)ru   r.   zauto self = ;rI   zauto out = zout[rD   z
Dimname[]?zauto __rN   z::std::optional<DimnameList> z = __z& ? ::std::make_optional(DimnameList(__z.value())) : ::std::nullopt;c                 S  s   g | ]}|j qS r   r   ra   r   r   r   r     r   z)dispatch_lambda_exprs.<locals>.<listcomp>z : tensor options with output argz%: unrecognized tensor options field 'z' in python binding argumentsz: unrecognized type 'z' for tensor options field ''c                 3      | ]}| v V  qd S r^   r   ra   tensor_options_args_namesr   r   rd         z(dispatch_lambda_exprs.<locals>.<genexpr>z": incomplete tensor options args: z0const auto options = TensorOptions()
    .dtype(r   z)
    .device(r   z)
    .layout(r   z)
    .requires_grad(r   z)
    .pinned_memory(r   z3);
torch::utils::maybe_initialize_device(options);
optionsz3: dtype in tensor_options_args without output arg, r7   c                 3  r7  r^   r   ra   r8  r   r   rd     r:  )r   r   z,: incomplete tensor options for output checkzcheck_out_type_matches(rB   rH   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                 3  s    | ]} |j  V  qd S r^   r   ra   )lambda_args_exprsr   r   rd     r   )r   r   )r4  r  r   r{   r"   r   rw   rP   rQ   re   r\   r   r!  r3  r!   r#   r(   rp   rg   TENSOR_OPTIONS_FIELDSr;   r   rx   r   r   ry   )r  r   r)   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsrc   r"   Zarg_parser_exprr0  Zout_argr   )r<  r9  r   dispatch_lambda_exprst  s   










r>  )r   r   r(   r*   r+   r   )r   r   r+   r*   )r   r   r   r*   r)   r*   r+   r!   )r   r   r+   r   )rc   r
   r+   r    )r   r   r(   r*   r   r*   r+   rl   )
r   r   r   r$   r(   r*   r   r*   r+   rl   )r   r   r+   r   )r   r   r+   r!   )r   rl   r+   r  )r   rl   r+   r!   )T)r  rl   r   r   r)   r*   r+   r  )r   r   r+   r!   )r   r   r  r   r+   r   )
r   r   r%   r$   r&   r$   r)   r*   r+   r!   )r-  rS   rc   r    r)   r*   r+   r   )r  rl   r   r   r)   r*   r+   r/  )r  rl   r   r   r)   r*   r+   r   );
__future__r   dataclassesr   typingr   Ztorchgen.apir   Ztorchgen.api.typesr   r   r   Ztorchgen.genr	   Ztorchgen.modelr
   r   r   r   r   r   r   r   r   r   collections.abcr   r   r    rQ   rl   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   rO   r  r  r   r  r  r  r  r$  r,  r.  r4  r=  r>  r   r   r   r   <module>   s    0 5\$}3/

?
 


D

/6/

)_