o
    ,i                     @   s  d dl mZ d dlmZmZmZmZmZmZ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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ded e'd!efd"d#Z(ded!e'fd$d%Z)ddd&d'ed(e'd)e'd!e*fd*d+Z+d'ed!ee, fd,d-Z-d.ed!efd/d0Z.ddd1ded e'd2e'd!e fd3d4Z/ddd1d5ed6ee* d e'd2e'd!e f
d7d8Z0d9eed:f d!ee* fd;d<Z1d'ed!e*fd=d>Z2d'ed!e*fd?d@Z3d4e d!eee*e*f  fdAdBZ4d4e d!e*fdCdDZ5	dcdEe ded)e'd!ee$d:f fdFdGZ6h dHZ7ded!e*fdIdJZ8ded!e*fdKdLZ9dMdNdedOee  d!ee*d:f fdPdQZ:ddRd'edSee* dTee* d)e'd!e*f
dUdVZ;ddRdWe,d.ed)e'd!e%fdXdYZ<ddRdEe ded)e'd!ee*e%f fdZd[Z=d\d]d^d_d_d`Z>ddRdEe ded)e'd!e&fdadbZ?dMS )d    )	dataclass)DictListOptionalSequenceSetTupleUnion)cpp)BindingCppSignatureCppSignatureGroup)pythonify_default)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturnTypeVariantT)frozenc                   @   s   e Zd ZU eedf ed< dS )PythonReturns.returnsN)__name__
__module____qualname__r   r   __annotations__ r    r    Q/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torchgen/api/python.pyr      s   
 r   c                   @   sr   e Zd ZU eed< eed< ee ed< ee ed< dddded	ed
efddZddddeded
efddZ	dS )PythonArgumentnametypedefaultdefault_initFTmethodsymintr(   r)   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d	| j| j}| d
| d| S | d
| S )Nr)   zconst  z &self)TensorNumberinputNone)nullptrc10::nullopt::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rh| jjtt	j
krh| jd
rh| jdrhd| jdd  d }nd	d	d	d	d	ddd| j| j}| d| d| S | d| S )Nr-   r.   r0   from_out	Optional[]r1   {}(   )contiguous_formatper_tensor_affine)r2   r3   r4   r5   r6   zMemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINEz:  = )argument_type_str_pyir$   r#   
isinstancePythonOutArgumentr%   r   elemr   r   int
startswithendswithr;   )r-   r(   r?   r<   r#   treat_as_no_defaultr%   r    r    r!   argument_str_pyi   sD   



	zPythonArgument.argument_str_pyiN)
r   r   r   strr   r   r   boolr=   rV   r    r    r    r!   r"      s   
 r"   c                   @   s@   e Zd ZU eedf ed< edeedf ded  fddZdS )rP   .outputsr*   c                 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	)
NrH   r   r1   )r#   r$   r%   r&   rY   c                 s   s    | ]	}|j   V  qd S Nr$   is_tensor_like.0ar    r    r!   	<genexpr>A  s    z1PythonOutArgument.from_outputs.<locals>.<genexpr>zUnsupported output type: rB   z!Unexpected PythonOutArgument size)lenrP   r#   r$   anyRuntimeErrorr   r   r   r.   AssertionError)rY   sizer    r    r!   from_outputs0  s,   zPythonOutArgument.from_outputsN)	r   r   r   r   r"   r   staticmethodr   rf   r    r    r    r!   rP   '  s   
 
rP   c                
   @   s  e Zd ZU eed< eedf ed< eedf ed< ee ed< e	ed< eedf ed< e
ed< ed	e
fd
dZdddde
de
d	eeeef df fddZd	efddZd	efddZdddde
de
d	efddZddde
d	efddZddde
d	ee fddZd S )!PythonSignaturer#   .
input_argsinput_kwargsoutput_argsr   tensor_options_argsr(   r*   c                 C      dS )NFr    r-   r    r    r!   r?   k     zPythonSignature.deprecatedF)skip_outputsskip_tensor_optionsrp   rq   c                C   sN   g }| | j | | j | jd ur|s|| j |s#| | j t|S rZ   )extendri   rj   rk   appendrl   tuple)r-   rp   rq   resultr    r    r!   	argumentso  s   zPythonSignature.argumentsc                 C   s   t |  S rZ   )ra   rv   rn   r    r    r!   arguments_count{  s   zPythonSignature.arguments_countc                 C   s   t | jt | j S rZ   )ra   ri   rj   rn   r    r    r!   
output_idx~  s   zPythonSignature.output_idxTrp   r)   r)   c                   sZ    j |d} fdd|D }t j}t||kr!||d  j dd| dS )Nrp   c                    s   g | ]
}|j  jd qS )r'   )r=   r(   r]   r-   r)   r    r!   
<listcomp>      z1PythonSignature.signature_str.<locals>.<listcomp>*rG   , rJ   )rv   ra   ri   insertr#   join)r-   rp   r)   argsschema_formalspositional_argcr    r{   r!   signature_str  s   
zPythonSignature.signature_strrz   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 )Nrz   c                       g | ]	}|j  jd qS r(   rV   r(   r]   rn   r    r!   r|         z5PythonSignature.signature_str_pyi.<locals>.<listcomp>r~   r   r-   def rG   r   ) -> : ...)rv   ra   ri   r   returns_str_pyir(   r#   r   r-   rp   r   r   r   returns_strr    rn   r!   signature_str_pyi  s   

 z!PythonSignature.signature_str_pyic          	         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 d	|d j	 d
 |d< t
 } jrQ|dd d j	 dd| d| dS )Nrz   c                    r   r   r   r]   rn   r    r!   r|     r   z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>Fr   )rR   SymIntrH   Tr~   z: _intr-   r   rG   r   r   r   )rv   rw   ra   ri   r$   rO   r   rW   rQ   r#   r   r(   r   r   )	r-   rp   r   r   num_argsnum_positionalargshave_vararg_versionvararg_typer   r    rn   r!   signature_str_pyi_vararg  s*   


 z(PythonSignature.signature_str_pyi_varargN)r   r   r   rW   r   r   r"   r   rP   r   rX   propertyr?   r	   rv   rR   rw   rx   r   r   r   r    r    r    r!   rh   N  s.   
 
 rh   c                   @   s   e Zd ZU eed< eedf ed< edefddZ	ddd	d
ededefddZ
ddd
edefddZddd
edee fddZdS )PythonSignatureDeprecateddeprecated_schema.deprecated_args_exprsr*   c                 C   rm   )NTr    rn   r    r    r!   r?     ro   z$PythonSignatureDeprecated.deprecatedFTry   rp   r)   c                C   s   t j| ||dd S )Nry   z|deprecated)rh   r   )r-   rp   r)   r    r    r!   r     s   z'PythonSignatureDeprecated.signature_strrz   c                   sh    j |d} fdd|D }t j}t||kr ||d t }d j dd| d| d	S )
Nrz   c                    s   g | ]
}|j  jd dqS )Tr>   r   r]   rn   r    r!   r|     r}   z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>r~   r   rG   r   r   r   )rv   ra   ri   r   r   r#   r   r   r    rn   r!   r     s   

 z+PythonSignatureDeprecated.signature_str_pyic                C   s   d S rZ   r    )r-   rp   r    r    r!   r     ro   z2PythonSignatureDeprecated.signature_str_pyi_varargN)r   r   r   r   r   r   rW   r   rX   r?   r   r   r   r   r    r    r    r!   r     s   
 	 r   c                   @   s   e Zd ZU eed< eed< dS )!PythonSignatureNativeFunctionPair	signaturefunctionN)r   r   r   rh   r   r   r    r    r    r!   r     s   
 r   c                   @   sH   e Zd ZU eed< eed< ee ed< ededee dd fddZ	d	S )
PythonSignatureGroupr   baseoutplace
functionalrB   r*   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   rl   r    )r   r   r   __dict__copyrl   r$   )clsr   rB   signature_kwargsr    r    r!   
from_pairs  s    zPythonSignatureGroup.from_pairsN)
r   r   r   rh   r   r   r   classmethodr   r   r    r    r    r!   r     s   
 r   c                   @   s&   e Zd ZU eed< eed< eed< dS )DispatchLambdaArgumentr#   r<   
is_out_argN)r   r   r   rW   r   rX   r    r    r    r!   r   5  s   
 r   c                   @   s@   e Zd ZU eed< eed< eed< eed< edefddZdS )	PythonArgParserOutputExprr#   exprindexargumentr*   c                 C   s   d| j  dS )Nz
_r.isNone(rJ   )r   rn   r    r    r!   is_none_exprP  s   z&PythonArgParserOutputExpr.is_none_exprN)	r   r   r   rW   r   rR   r"   r   r   r    r    r    r!   r   A  s   
 r   c                   @   s&   e Zd ZU ee ed< ee ed< dS )DispatchLambdaArgumentExprsexprsinitsN)r   r   r   r   rW   r   r    r    r    r!   r   Z  s   
 	r   Fr   fr(   r*   c                C   s   t j| |djS )Nr   )r   from_native_functionr   )r   r(   r    r    r!   _cpp_signaturet  s   r   c                 C   s   | j jjd uS rZ   )funcrv   tensor_optionsr   r    r    r!   has_tensor_optionsx  s   r   simple_typer)   tr   r)   c                C   s6  t | trK| jtjkrdS | 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 rJ| jjS nt | trft| jdkrYdS t| j||d}| dS t | tr|sq| jnd }t| jdkr| jd usJ 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rd| dS dS t| j||d}d| d
S tdt|  )Nr.   int64_tdoublezc10::string_viewTensor?r   ?rX   z::std::array<bool,>rR   zIntArrayRef[rD   IntArrayRefr   zSymIntArrayRef[SymIntArrayRefzTensorList[
TensorListScalarzScalarList[
ScalarListz"c10::List<::std::optional<Tensor>>z*const c10::List<::std::optional<Tensor>> &DimnamezDimnameList[DimnameListz	ArrayRef<unrecognized type )rO   r   r#   r   r.   rR   floatrW   rX   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceDeviceIndexMemoryFormatr   StreamConstQuantizerPtrr   r   rQ   r9   r   re   rc   repr)r   r   r)   rQ   re   r    r    r!   r9     sv   


r9   c                 C   s(   |   }|d urt|jdkr|jS d S )NrX   )is_list_likerW   rQ   re   )r   lr    r    r!   argument_type_size  s   r   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%   rW   r   r
   default_exprr_   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   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|r;|s;dtdtt f 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#   r]   r    r    r!   	<setcomp>      z(signature_from_schema.<locals>.<setcomp>c                 S   r   r    r   r]   r    r    r!   r     r   c                 S   r   r    r   r]   r    r    r!   r     r   c                    
   | j  v S rZ   r   r   )input_arg_setr    r!   <lambda>      
 z'signature_from_schema.<locals>.<lambda>c                    r   rZ   r   r   )kwarg_only_setr    r!   r     r   c                    r   rZ   r   r   )out_arg_setr    r!   r     r   c                 s       | ]}|j  V  qd S rZ   r[   r]   r    r    r!   r`     s    

z(signature_from_schema.<locals>.<genexpr>c                 s   s    | ]}|j d kV  qdS )requires_gradNr   r]   r    r    r!   r`         zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s   r   rZ   r[   r^   rr    r    r!   r`     r   factory)newlikenew__likedummyr#   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 )Nr1   Fr+   )rv   r   getattrr%   r
   r   r$   )r#   	topt_argsr_   )r   r    r!   topt_default_init(  s   
z0signature_from_schema.<locals>.topt_default_initdtyper1   r   layoutdevicez$torch::tensors::get_default_device()
pin_memoryFalser   r   )r#   ri   rj   rk   rl   r   r(   )&rr   rv   pre_self_positionalself_argrs   r   post_self_positionalpre_tensor_options_kwarg_onlypost_tensor_options_kwarg_onlyrB   flat_positionalflat_kwarg_onlyrt   mapfilterrb   flat_non_outschema_order_arguments
ValueErrorr   r
   r#   rS   rT   rW   r   r"   r   r   r   r   r   r   rX   r   rh   rP   rf   )r   r   r(   r   r   ri   rj   rY   has_tensor_input_arghas_tensor_returnr#   is_factory_functionis_like_or_new_functionis_dummy_functionrl   r   r   r    )r   r   r   r   r!   r     s   

	


	
r   r   .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 )NrH   c                 s       | ]}|j d u V  qd S rZ   r   r   r    r    r!   r`   z  r   z'structseq_fieldnames.<locals>.<genexpr>c                 s   r  rZ   r   r   r    r    r!   r`   }  r   z)Unnamed field is not supported by codegenc                 S      g | ]}t |jqS r    )rW   r#   r   r    r    r!   r|         z(structseq_fieldnames.<locals>.<listcomp>)ra   allrb   r  r   r    r    r!   structseq_fieldnamesy  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}n| jtjkrd}nv| jtjtjtjfv r| jj}nft | trt
| jdkr| jd urdnd}nP|  rt | jt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]_floatrW   zUnion[Number, _complex]_dtype_bool_qscheme_layoutzOptional[DeviceLikeType]memory_formatzUnion[str, ellipsis, None]zUnion[Storage, UntypedStorage]rR   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   )rO   r   rQ   r   r#   r   rR   r   r   r   rW   r   r   rX   r   r   r   r   r   r   r.   r   r   r   re   r\   rN   rc   r   )r   add_optionalretrQ   r    r    r!   rN     sn   





rN   c                 C   s|   t | trt| j}d| dS t | tr*| jtjkrdS | jtjkr&d}nt	| S t | t
r:t| j}d| dS t	| S )NrC   rD   _devicezOptional[str]Tuple[z, ...])rO   r   return_type_str_pyirQ   r   r#   r   r   r   rN   r   )r   innerr  r    r    r!   r    s   




r  c           	   	   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  r   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  r   ziprr   ra   )	r   python_returnsstructseq_namefield_namesseq_typestructseq_def_linesr#   typ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>rH   r  r   rD   r   r1   )r  r   r#   ra   r   )r   r&  r$  r    r    r!   r     s   r   psc                    sh   t tr	j}n|j}tj|jd|d|jd}dd |jjD  dtdt	f fdd}t
t||S )	NF)rv   faithfulr)   r(   cpp_no_default_argsc                 S   r   r    r   r]   r    r    r!   r   \  r   z'dispatch_lambda_args.<locals>.<setcomp>cpp_argr*   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 &rH   zat::Tensor &
at::Tensor)r#   r<   r   )r$   r#   r(   ra   r;   r   )r/  r<   r   ensure_temp_safeout_argsr,  r    r!   dispatch_lambda_arg_  s   
z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)rO   r   r   r   r
   rv   r.  rB   r   r   rt   r  )r,  r   r)   schemacpp_argsr4  r    r2  r!   dispatch_lambda_argsL  s   
r7  >   void*
at::Scalar
at::Streamat::QSchemeat::ScalarTypeat::IntArrayRef::std::vector<at::Tensor>::std::tuple<double,int64_t>#::std::tuple<at::Tensor,at::Tensor>.::std::tuple<at::Tensor,at::Tensor,at::Tensor>2::std::tuple<at::Tensor,::std::vector<at::Tensor>>2::std::tuple<at::Tensor,at::Tensor,double,int64_t>6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>A::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>D::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>O::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>r::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,c10::SymInt,c10::SymInt,at::Tensor,at::Tensor,at::Tensor>rX   voidr   r   r0  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 rZ   )r   r#   r$   r   r    r    r!   r`     s    
z-dispatch_lambda_return_str.<locals>.<genexpr>Tr+   z returns unsupported type )	rt   r   r   r
   returns_typecpp_typeSUPPORTED_RETURN_TYPESrc   r#   )r   returns_without_annotation
return_strr    r    r!   dispatch_lambda_return_str  s   rQ  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)symint_overloadzself.r   torchatz::z1could not dispatch, neither function nor method: )r   
has_symintr
   r#   r   r(   variantsr   r   r   rT   rc   )r   r)   r#   	namespacer    r    r!   cpp_dispatch_target  s   

rX  N)python_signaturerY  c                   sl   t  dd }t }t|tstdd |D }ntt fdd|j}tj j	v r4ttdj
|}|S )NFr   c                 s   s    | ]}|j V  qd S rZ   r   r]   r    r    r!   r`     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   rv   rt   rO   r   r  r   r   r(   rV  __ne__)r   rY  r6  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?rX   bool?ztype 'z+' does not supported unpacking with defaultscalartypeWithDefault
scalartypedeviceWithDefaultr   toInt64toSymInttoBoolWithDefaulttoBooltoDouble
stringViewlayoutWithDefaultr   memoryformatr.   optionalTensorr   	generatorz	Dimname[]toDimnameListOptional)Nr1   r3   r4   r5   r+   r   ztensorlist_n<r   
tensorlistr   list_of_optional_tensorsr   dimnamelistrR   intlistr   
doublelistr   
symintlistr   
scalarlistz%' is not supported by PythonArgParser)rW   rc   rO   r   r#   r   r.   r   r   r   r   lowerr   r   r   rR   r   rX   r   r   r   r   rQ   arg_parser_unpack_methodr   re   )r   r%   r&   r)   has_default_initr    r    r!   rx    s|   


	
rx  	arg_indexc                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)   r   r,   z_r.rG   rJ   )r#   r   r   r   )r&   rx  r$   r%   r   r#   )rz  r_   r)   has_defaultunpack_methodr%   r   r    r    r!   arg_parser_output_exprJ  s   
r}  c                   s    fddt |  D S )Nc                    s&   i | ]\}}t || d }|j|qS )r+   )r}  r#   )r^   ir_   er+   r    r!   
<dictcomp>`  s
    z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumeraterv   )r,  r   r)   r    r+   r!   arg_parser_output_exprs]  s   

r  r^  r_  r`  ra  )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)rq   r-   zauto self = ;rH   zauto out = zout[rD   z
Dimname[]?zauto __rM   z::std::optional<DimnameList> z = __z& ? ::std::make_optional(DimnameList(__z.value())) : ::std::nullopt;c                 S   s   g | ]}|j qS r    r   r]   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 rZ   r    r]   tensor_options_args_namesr    r!   r`         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   r  rZ   r    r]   r  r    r!   r`     r  )r   r   z,: incomplete tensor options for output checkzcheck_out_type_matches(rB   r   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                 3   s    | ]} |j  V  qd S rZ   r   r]   )lambda_args_exprsr    r!   r`     r   )r   r   )r  r7  r   rv   r#   r   rr   rO   rP   ra   rY   r   rZ  r  rW   r$   r(   rl   rc   TENSOR_OPTIONS_FIELDSr;   r  rs   r   r   rt   )r,  r   r)   arg_parser_outputslambda_argsr   has_toptionsr_   r#   arg_parser_exprr~  out_argr    )r  r  r!   dispatch_lambda_exprsr  s   










r  )T)@dataclassesr   typingr   r   r   r   r   r   r	   torchgen.apir
   torchgen.api.typesr   r   r   torchgen.genr   torchgen.modelr   r   r   r   r   r   r   r   r   r   r   r"   rP   rh   r   r   r   r   r   r   rX   r   r   rW   r9   rR   r   r   r   r   r  rN   r  r+  r   r7  rN  rQ  rX  r]  rx  r}  r  r  r  r    r    r    r!   <module>   s   $0 ?\&y3/
D

 E/6

/

)
`


