U
    Mh                     @   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ee'edd d!Z(ee'd"d#d$Z)ddd%ee'e'e*d&d'd(Z+eee, d)d*d+Z-eed,d-d.Z.ddd/ee'e'e d0d1d2Z/ddd/eee* e'e'e d3d4d5Z0eed6f ee* d7d8d9Z1ee*d)d:d;Z2ee*d)d<d=Z3e eee*e*f  d>d?d@Z4e e*d>dAdBZ5dwe ee'ee$d6f dCdDdEZ6dFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]hZ7ee*d"d^d_Z8ee*d"d`daZ9dbdceee  ee*d6f dddedfZ:ddgeee* ee* e'e*dhdidjZ;ddge,ee'e%dkdldmZ<ddge ee'ee*e%f dCdndoZ=dpdqdrdsdsdtZ>ddge ee'e&dCdudvZ?dbS )x    )	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    E/var/www/html/venv/lib/python3.8/site-packages/torchgen/api/python.pyr      s   
r   c                   @   sj   e Zd ZU eed< eed< ee ed< ee ed< dddeeedd	d
ZdddeeedddZ	dS )PythonArgumentnametypedefaultdefault_initFTmethodsymint)r(   r)   returnc                C   s   t | j|ddddd}| j}|dkr<|dkr<|s<d}| jd k	rvdddddd	| j| j}| d
| d| S | 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(   
deprecated)r(   r?   r*   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 }|ort| tor| jd	k}| jd k	r|st| jtr| jjtt	j
kr| jd
r| jdrd| jdd  d }n d	d	d	d	d	ddd| j| j}| d| d| S | d| S d S )Nr-   r.   r0   from_out	Optional[]r1   {}(   )Zcontiguous_formatZ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#   Ztreat_as_no_defaultr%   r    r    r!   argument_str_pyi   sH    



 	zPythonArgument.argument_str_pyiN)
r   r   r   strr   r   r   boolr=   rS   r    r    r    r!   r"      s   
  r"   c                   @   s>   e Zd ZU eedf ed< eeedf ed  dddZdS )rN   .outputs)rV   r*   c                 C   s   | sd S t | }|dkr6t| 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	d S )
NrH   r   r1   )r#   r$   r%   r&   rV   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)lenrN   r#   r$   anyRuntimeErrorr   r   r   r.   AssertionError)rV   sizer    r    r!   from_outputs0  s,    zPythonOutArgument.from_outputsN)	r   r   r   r   r"   r   staticmethodr   rc   r    r    r    r!   rN   '  s
   

rN   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e
d	d
dZddde
e
eeeef df dddZed	ddZed	ddZddde
e
edddZdde
edddZdde
ee dddZd S )!PythonSignaturer#   .
input_argsinput_kwargsoutput_argsr   tensor_options_argsr(   r*   c                 C   s   dS )NFr    r-   r    r    r!   r?   k  s    zPythonSignature.deprecatedF)skip_outputsskip_tensor_options)rl   rm   r*   c                C   sN   g }| | j | | j | jd k	r6|s6|| j |sF| | j t|S rW   )extendrf   rg   rh   appendri   tuple)r-   rl   rm   resultr    r    r!   	argumentso  s    zPythonSignature.argumentsc                 C   s   t |  S rW   )r^   rr   rk   r    r    r!   arguments_count{  s    zPythonSignature.arguments_countc                 C   s   t | jt | j S rW   )r^   rf   rg   rk   r    r    r!   
output_idx~  s    zPythonSignature.output_idxTrl   r)   rl   r)   r*   c                   sZ    j |d} fdd|D }t j}t||krB||d  j dd| dS )Nrl   c                    s   g | ]}|j  jd qS )r'   )r=   r(   rZ   r-   r)   r    r!   
<listcomp>  s    z1PythonSignature.signature_str.<locals>.<listcomp>*rG   , rJ   )rr   r^   rf   insertr#   join)r-   rl   r)   argsschema_formalspositional_argcr    rx   r!   signature_str  s    
zPythonSignature.signature_strrw   rl   r*   c                   sz    j |d} fdd|D }t j}t||kr@||d t } jrZ|dd d j dd	| d
| dS )Nrw   c                    s   g | ]}|j  jd qS r(   rS   r(   rZ   rk   r    r!   ry     s    z5PythonSignature.signature_str_pyi.<locals>.<listcomp>rz   r   r-   def rG   r{   ) -> : ...)rr   r^   rf   r|   returns_str_pyir(   r#   r}   r-   rl   r~   r   r   returns_strr    rk   r!   signature_str_pyi  s    

z!PythonSignature.signature_str_pyic          	         s    j |d} fdd|D }  }t j}d}|dkrj|d j}t|trjt|jdkrj|dkrjd}|srd S d	|d j	 d
 |d< t
 } jr|dd d j	 dd| d| dS )Nrw   c                    s   g | ]}|j  jd qS r   r   rZ   rk   r    r!   ry     s    z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>Fr   )rP   SymIntrH   Trz   z: _intr-   r   rG   r{   r   r   )rr   rs   r^   rf   r$   rM   r   rT   rO   r#   r   r(   r|   r}   )	r-   rl   r~   r   num_argsZnum_positionalargsZhave_vararg_versionZvararg_typer   r    rk   r!   signature_str_pyi_vararg  s.    


z(PythonSignature.signature_str_pyi_varargN)r   r   r   rT   r   r   r"   r   rN   r   rU   propertyr?   r	   rr   rP   rs   rt   r   r   r   r    r    r    r!   re   N  s*   
  re   c                   @   s   e Zd ZU eed< eedf ed< eedddZ	ddd	eeed
ddZ
ddeedddZddeee dddZdS )PythonSignatureDeprecateddeprecated_schema.deprecated_args_exprsrj   c                 C   s   dS )NTr    rk   r    r    r!   r?     s    z$PythonSignatureDeprecated.deprecatedFTru   rv   c                C   s   t j| ||dd S )Nru   z|deprecated)re   r   )r-   rl   r)   r    r    r!   r     s      z'PythonSignatureDeprecated.signature_strrw   r   c                   sh    j |d} fdd|D }t j}t||kr@||d t }d j dd| d| d	S )
Nrw   c                    s   g | ]}|j  jd dqS )Tr>   r   rZ   rk   r    r!   ry     s    z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>rz   r   rG   r{   r   r   )rr   r^   rf   r|   r   r#   r}   r   r    rk   r!   r     s    

z+PythonSignatureDeprecated.signature_str_pyic                C   s   d S rW   r    )r-   rl   r    r    r!   r     s    z2PythonSignatureDeprecated.signature_str_pyi_varargN)r   r   r   r   r   r   rT   r   rU   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   re   r   r   r    r    r    r!   r     s   
r   c                   @   sD   e Zd ZU eed< eed< ee ed< eeee d dddZ	dS )PythonSignatureGroupr   baseoutplace)
functionalrB   r*   c                 C   sP   |d krt |j|jd dS |jj }|jj|d< t t|jf ||j|jdS )N)r   r   r   ri   )r   r   r   __dict__copyri   r$   )clsr   rB   Zsignature_kwargsr    r    r!   
from_pairs  s     zPythonSignatureGroup.from_pairsN)
r   r   r   re   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   rT   r   rU   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edddZdS )	PythonArgParserOutputExprr#   exprindexargumentrj   c                 C   s   d| j  dS )Nz
_r.isNone(rJ   )r   rk   r    r    r!   is_none_exprP  s    z&PythonArgParserOutputExpr.is_none_exprN)	r   r   r   rT   r   rP   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   rT   r   r    r    r    r!   r   Z  s   
	r   Fr   )fr(   r*   c                C   s   t j| |djS )Nr   )r   Zfrom_native_functionr   )r   r(   r    r    r!   _cpp_signaturet  s    r   )r   r*   c                 C   s   | j jjd k	S rW   )funcrr   tensor_optionsr   r    r    r!   has_tensor_optionsx  s    r   simple_typer)   )tr   r)   r*   c                C   s\  t | tr| 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rJd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kr| jjS nt | trt| jdkrdS t| j||d}| dS t | trF|s| jnd }t| jdkr| jd k	std	| j d
S t| jdkr@|d k	r<d| dS dS t| jdkr|rp|d k	rld| dS dS |d k	rd| dS dS nt| jdkr|d k	rd| dS dS t| jdkr|d k	rd| dS dS t| jdkr |rdS dS n*t| jdkr*|d k	r&d| dS dS t| j||d}d| d
S tdt|  d S )Nr.   int64_tdoublezc10::string_viewTensor?r   ?rU   z::std::array<bool,>rP   zIntArrayRef[rD   ZIntArrayRefr   zSymIntArrayRef[ZSymIntArrayRefzTensorList[Z
TensorListScalarzScalarList[Z
ScalarListz"c10::List<::std::optional<Tensor>>z*const c10::List<::std::optional<Tensor>> &DimnamezDimnameList[ZDimnameListz	ArrayRef<unrecognized type )rM   r   r#   r   r.   rP   floatrT   rU   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceDeviceIndexMemoryFormatr   StreamZConstQuantizerPtrr   r   rO   r9   r   rb   ra   r`   repr)r   r   r)   rO   rb   r    r    r!   r9     sp    


r9   )r   r*   c                 C   s,   |   }|d k	r$t|jdkr$|jS d S d S )NrU   )Zis_list_likerT   rO   rb   )r   lr    r    r!   argument_type_size  s    r   )r\   r*   c              
   C   s:   t | j| j| jd k	r0tttj| j| jddnd d dS )NFr+   r#   r$   r%   r&   )r"   r#   r$   r%   rT   r   r
   default_exprr\   r    r    r!   r     s    r   )r(   pyi)r   r(   r   r*   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   r*   c             	      s  g }|  jj |s2 jjd k	r2| 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 r*tdtdd
  jD }	t }
|dkp\|	o\| }|dkp||
dp||
d}|dk}g }|s|r|sttt d fdd}|tdtttjd|rd n|dd |tdtttjd|rd n|dd |tdtttj d|r0d 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   s   h | ]
}|j qS r    r#   rZ   r    r    r!   	<setcomp>  s     z(signature_from_schema.<locals>.<setcomp>c                 S   s   h | ]
}|j qS r    r   rZ   r    r    r!   r     s     c                 S   s   h | ]
}|j qS r    r   rZ   r    r    r!   r     s     c                    s
   | j  kS rW   r   r   )input_arg_setr    r!   <lambda>       z'signature_from_schema.<locals>.<lambda>c                    s
   | j  kS rW   r   r   )kwarg_only_setr    r!   r     r   c                    s
   | j  kS rW   r   r   )out_arg_setr    r!   r     r   c                 s   s   | ]}|j  V  qd S rW   rX   rZ   r    r    r!   r]     s    z(signature_from_schema.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qdS )requires_gradNr   rZ   r    r    r!   r]     s     zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s   s   | ]}|j  V  qd S rW   rX   r[   rr    r    r!   r]     s     factory)newlikeZnew__likedummy)r#   r*   c                    sJ    j j}|d krd S t|| }|jd ks2|jdkr6d S tj|j|jddS )Nr1   Fr+   )rr   r   getattrr%   r
   r   r$   )r#   Z	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#   rf   rg   rh   ri   r   r(   )&rn   rr   Zpre_self_positionalZself_argro   r   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyrB   Zflat_positionalZflat_kwarg_onlyrp   mapfilterr_   Zflat_non_outZschema_order_arguments
ValueErrorr   r
   r#   rQ   rR   rT   r   r"   r   r   r   r   r   r   rU   r   re   rN   rc   )r   r   r(   r   r~   rf   rg   rV   Zhas_tensor_input_argZhas_tensor_returnr#   Zis_factory_functionZis_like_or_new_functionZis_dummy_functionri   r   r   r    )r   r   r   r   r!   r     s    




	


	
r   .)r   r*   c                 C   sN   t | dkstdd | D r"g S tdd | D r<tddd | D S d S )NrH   c                 s   s   | ]}|j d kV  qd S rW   r   r   r    r    r!   r]   z  s     z'structseq_fieldnames.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qd S rW   r   r   r    r    r!   r]   }  s     z)Unnamed field is not supported by codegenc                 S   s   g | ]}t |jqS r    )rT   r#   r   r    r    r!   ry     s     z(structseq_fieldnames.<locals>.<listcomp>)r^   allr_   r   r   r    r    r!   structseq_fieldnamesy  s
    
r   c                 C   s,  d}t | tr| j} d}t | tr8| jtjtjfkr:d}| jtjkrLd}n| jtj	kr^d}n| jtj
krpd}n| jtjkrd}n| jtjkrd}n| jtjkrd	}n| jtjkrd
}n~| jtjkrd}nl| jtjkrd}nZ| jtjkrd}nH| jtjkrd}n4| jtjkrd}n | jtjtjtjfkr| jj}nt | trt
| jdkrj| jd k	rddnd}n|  rt | jtrd}| jd k	rdnd}nft
| jdkrd}nPt
| jdkr| jd k	rt| j}d| d| d}nt| j}d| d}ntdt|  |r(d| d }|S )NFT_intzUnion[_int, SymInt]Z_floatrT   zUnion[Number, _complex]Z_dtypeZ_boolZ_qschemeZ_layoutzOptional[DeviceLikeType]Zmemory_formatzUnion[str, ellipsis, None]zUnion[Storage, UntypedStorage]rP   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   )rM   r   rO   r   r#   r   rP   r   r   r   rT   r   r   rU   r   r   r   r   r   r   r.   r   r   r   rb   rY   rL   r`   r   )r   Zadd_optionalretrO   r    r    r!   rL     sl    




rL   c                 C   s|   t | tr t| j}d| dS t | trT| jtjkr:dS | jtjkrLd}nt	| S t | t
rtt| j}d| dS t	| S )NrC   rD   Z_devicezOptional[str]Tuple[z, ...])rM   r   return_type_str_pyirO   r   r#   r   r   r   rL   r   )r   innerr   r    r    r!   r     s    




r   )r   r*   c           	   	   C   s   dd | j j D }| j}t| j j }|rdd| d}d| d| dg}t||D ]$\}}|d	d
| d| dg qX|d| ddt| dt| dddg d|}||fS d S )Nc                 S   s   g | ]}t |jqS r    r   r$   r   r    r    r!   ry     s     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}   ziprn   r^   )	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rLdd| d S t|dkr`|d S d	S )
Nztorch.return_types.c                 S   s   g | ]}t |jqS r    r   r   r    r    r!   ry     s     z#returns_str_pyi.<locals>.<listcomp>rH   r   r{   rD   r   r1   )r   r   r#   r^   r}   )r   r   r   r    r    r!   r     s    r   )psr   r)   r*   c                    sf   t trj}n|j}tj|jd|d|jd}dd |jjD  tt	d fdd}t
t||S )NF)rr   Zfaithfulr)   r(   cpp_no_default_argsc                 S   s   h | ]
}|j qS r    r   rZ   r    r    r!   r   \  s     z'dispatch_lambda_args.<locals>.<setcomp>)cpp_argr*   c                    s\   | j }| j k}jr&| jdkr&d}n&t dkp6| }|rLddi||}t| j||dS )Nr-   zconst at::Tensor &rH   zat::Tensor &
at::Tensor)r#   r<   r   )r$   r#   r(   r^   r;   r   )r   r<   r   Zensure_temp_safeZout_argsr   r    r!   dispatch_lambda_arg_  s"    
  z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)rM   r   r   r   r
   rr   r   rB   r   r   rp   r   )r   r   r)   Zschemacpp_argsr   r    r   r!   dispatch_lambda_argsL  s    
r   r   z#::std::tuple<at::Tensor,at::Tensor>z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>zO::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>z6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>z2::std::tuple<at::Tensor,at::Tensor,double,int64_t>zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>z=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>z::std::tuple<double,int64_t>z2::std::tuple<at::Tensor,::std::vector<at::Tensor>>z::std::vector<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::ScalarrU   r   zvoid*voidzat::QSchemer   zat::IntArrayRefzat::ScalarTypez
at::Streamc                 C   sJ   t dd | jjD }tj|dd }|tkrFt| jj d| |S )Nc                 s   s   | ]}t |j|jd V  qd S rW   )r   r#   r$   r   r    r    r!   r]     s    z-dispatch_lambda_return_str.<locals>.<genexpr>Tr+   z returns unsupported type )	rp   r   r   r
   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESr`   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kr0d| S tj| jkrnt| sV| j jjj	
dr\d}nd}| d| S td| j  d S )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   rR   r`   )r   r)   r#   	namespacer    r    r!   cpp_dispatch_target  s    

r  N)python_signature)r   r  r*   c                   sl   t  dd }t }t|ts4tdd |D }ntt fdd|j}tj j	krhttdj
|}|S )NFr   c                 s   s   | ]}|j V  qd S rW   r   rZ   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   rr   rp   rM   r   r   r   r   r(   r  __ne__)r   r  r   r   r    r   r!   cpp_dispatch_exprs  s    

r
  r+   )r   r%   r&   r)   r*   c                C   s  |d k	}|r(t | dkr(td|  dt| tr2| jtjtjtjtj	tj
fkr^| jj S | jtjkrv|rrdS dS | jtjkr|rdS dS | jtjkrdS | jtjkrdS | jtjkr|rd	S dS | jtjkr|rd
S dS | jtjkrdS | jtj kr dS | jtjkr|rdS dS | jtjkrpdS n>t| trt | jdkrRdS t | jdkrfdS t | jdkrzdS |s|dkrt| jd d |dd S t| j|||dS nt| trpt | jdkr| jd k	rd| j dS dS t | jdkrdS t | jdkrd S t | jd!kr*d"S t | jd#kr>d$S t | jd%kr\|rXd&S d"S t | jd'krpd(S td|  d)d S )*N)ScalarType?r   r   Device?r   Layout?rU   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)Nr1   r3   r4   r5   r+   r   ztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   ZdimnamelistrP   Zintlistr   Z
doublelistr   Z
symintlistr   Z
scalarlistz%' is not supported by PythonArgParser)rT   r`   rM   r   r#   r   r.   r   r   r   r   lowerr   r   r   rP   r   rU   r   r   r   r   rO   arg_parser_unpack_methodr   rb   )r   r%   r&   r)   Zhas_default_initr    r    r!   r    s    
	   r  )	arg_indexr\   r)   r*   c                C   s\   |j d k	}t|j|j|j |d}|r0d|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&   r  r$   r%   r   r#   )r  r\   r)   has_defaultZ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 fD ]}|j|qqS )r+   )r  r#   )r[   ir\   er+   r    r!   
<dictcomp>`  s
     z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumeraterr   )r   r   r)   r    r+   r!   arg_parser_output_exprs]  s    

r  r  r  r  r  )r   r   r   r   r   c                   sN  t | ||d}t| ||d}g }i  t|}| jddD ]}|j}||j j}	|rx|dkrx|d|	 dg | |< q8t|trt	|j
dkr|j r|d|	 dg t|j
D ]\}
}d	|
 d
 |j< qq8t|jdkr |d| d|	 dd| d| d| dg | |< q8|	 |< q8| jr:d d< dd | jD |rV|j rlt|j d| jD ]f}|jtkrt|j d|j dt|jt|jkrrt|j dt|j d|j dqrtfddtD st|j d |d|d j d|d  j d!|d" j d#|d$ j d%|d& j d' d( d(< |s0r0dkr|j st|j d)|  d*| j tfd+dd,D st|j d-|d.|d/ j d0|d j d1|d j d0|d" j d1|d  j d0|d  j d2 d$kr0t|j d3 d
tt fd4d|D |d5S )6Nr+   T)rm   r-   zauto self = ;rH   zauto out = zout[rD   z
Dimname[]?zauto __rK   z::std::optional<DimnameList> z = __z& ? ::std::make_optional(DimnameList(__z.value())) : ::std::nullopt;c                 S   s   g | ]
}|j qS r    r   rZ   r    r    r!   ry     s     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   s   | ]}| kV  qd S rW   r    rZ   tensor_options_args_namesr    r!   r]     s     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   s   | ]}| kV  qd S rW   r    rZ   r  r    r!   r]     s     )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 rW   r   rZ   )lambda_args_exprsr    r!   r]     s     )r   r   )r  r   r   rr   r#   r   rn   rM   rN   r^   rV   r   r  r  rT   r$   r(   ri   r`   TENSOR_OPTIONS_FIELDSr;   r   ro   r   r   rp   )r   r   r)   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsr\   r#   Zarg_parser_exprr  Zout_argr    )r  r  r!   dispatch_lambda_exprsr  s    








r!  )T)@dataclassesr   typingr   r   r   r   r   r   r	   Ztorchgen.apir
   Ztorchgen.api.typesr   r   r   Ztorchgen.genr   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r   r"   rN   re   r   r   r   r   r   r   rU   r   r   rT   r9   rP   r   r   r   r   r   rL   r   r   r   r   r   r  r  r
  r  r  r  r   r!  r    r    r    r!   <module>   s  $0 ?\&y3/   D    E/6   
0
)   `    
  