a
    h'                     @  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rd dlmZmZ dwdddd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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)d*d+d,d-d.Z'd)d*d/d0d1Z(d'dd2d3d*d*dd4d5d6Z)d3d7d8d9d:Z*d;dd<d=d>Z+d'd'd?d)d*d*dd@dAdBZ,d'd'd?dCdd*d*ddDdEdFZ-dGdHdIdJdKZ.d3dd8dLdMZ/d3dd8dNdOZ0ddPdQdRdSZ1dddQdTdUZ2dxdd)d*dVdWdXdYZ3h dZZ4d)dd/d[d\Z5d)dd/d]d^Z6d
d_d)d`dadbdcddZ7dded3ddd*ddfdgdhZ8ddedidd*d$djdkdlZ9ddedd)d*dmdWdndoZ:dpdqdrdsdsdtZ;ddedd)d*d&dWdudvZ<d
S )y    )annotations)	dataclass)TYPE_CHECKING)cpp)BindingCppSignatureCppSignatureGroup)pythonify_default)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturnTypeVariant)IterableSequence NstrzIterable[str]
str | None)name	argumentsreturn_typereturnc                 C  s   t |ttfst|}|d ur(d| nd}d|  dd| d| d}t|dksnt|d	ksnt|d
krr|S d|  dgdd |D d| d}d|}tdd |D r|S |dd S )Nz ->  zdef (, ): ...P   r   selfc                 s  s   | ]}d | dV  qdS )z    ,Nr   ).0argr   r   A/var/www/auris/lib/python3.9/site-packages/torchgen/api/python.py	<genexpr>       z,format_function_signature.<locals>.<genexpr>
c                 s  s   | ]}t |d kV  qdS )r"   N)len)r&   liner   r   r(   r)      r*   z ...z  # fmt: skip
    ...)
isinstancelisttuplejoinr,   allremovesuffix)r   r   r   siglinesr   r   r(   format_function_signature   s     $


r6   T)frozenc                   @  s   e Zd ZU ded< dS )PythonReturnstuple[Return, ...]returnsN__name__
__module____qualname____annotations__r   r   r   r(   r8      s   
r8   c                   @  sb   e Zd ZU ded< ded< ded< ded< dd	d
ddddddZdddddddddZdS )PythonArgumentr   r   r   typer   defaultdefault_initFTmethodsymintbool)rE   rF   r   c                C  s   t | j|ddddd}| j}|dkr<|dv r<|s<d}| jd urtddddd	| j| j}| d
| d| S | d
| S d S )NrF   zconst r   z &r$   )TensorNumberinputNone)nullptr::std::nulloptstd::nullopt{} =)argument_type_strrA   replacer   rB   get)r$   rE   rF   type_strr   rB   r   r   r(   argument_str   s&    
zPythonArgument.argument_strrE   
deprecated)rE   rY   r   c                C  s2  t | j}| j}|dkr,|dkr,|s,|s,d}|dkr<|d7 }|dkrb|dkrb|sb| ddd}|oxt| tox| jd	k}| jd ur |s t| jtr| jjt	t
jkr| jd
r| jdrddttj| jdd d d }nd	d	d	d	ddd| j| j}| d| d| S | d| S d S )Nr$   rI   rK   from_out | None | None | NonerL   {}r   r      r%   r    Zcontiguous_formatZper_tensor_affine)rM   rN   rO   rP   zc10::MemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINE:  = )argument_type_str_pyirA   r   rT   r.   PythonOutArgumentrB   r   elemr   r   int
startswithendswithr1   mapr   stripsplitrU   )r$   rE   rY   rV   r   Ztreat_as_no_defaultrB   r   r   r(   argument_str_pyi  sF    



(zPythonArgument.argument_str_pyiN)r<   r=   r>   r?   rW   rn   r   r   r   r(   r@      s   
r@   c                   @  s*   e Zd ZU ded< edddddZdS )rf   tuple[PythonArgument, ...]outputsPythonOutArgument | None)rp   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 )
Nra   r   rL   )r   rA   rB   rC   rp   c                 s  s   | ]}|j   V  qd S NrA   is_tensor_liker&   ar   r   r(   r)   ^  r*   z1PythonOutArgument.from_outputs.<locals>.<genexpr>zUnsupported output type: r\   z!Unexpected PythonOutArgument size)r,   rf   r   rA   anyRuntimeErrorr   r   r   rI   AssertionError)rp   sizer   r   r(   from_outputsO  s,    zPythonOutArgument.from_outputsN)r<   r=   r>   r?   staticmethodr{   r   r   r   r(   rf   F  s   
rf   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dZdddddddddZddddZddddZdddddddddZ	dd ddd!d"d#Z
dd dd$d!d%d&Zd'S )(PythonSignaturer   r   ro   
input_argsinput_kwargsrq   output_argsr8   r:   tensor_options_argsrG   rE   r   c                 C  s   dS )NFr   r#   r   r   r(   rY     s    zPythonSignature.deprecatedF)skip_outputsskip_tensor_optionsz.tuple[PythonArgument | PythonOutArgument, ...])r   r   r   c                C  sN   g }| | j | | j | jd ur6|s6|| j |sF| | j t|S rr   )extendr~   r   r   appendr   r0   )r$   r   r   resultr   r   r(   r     s    zPythonSignature.argumentsrh   c                 C  s   t |  S rr   )r,   r   r#   r   r   r(   arguments_count  s    zPythonSignature.arguments_countc                 C  s   t | jt | j S rr   )r,   r~   r   r#   r   r   r(   
output_idx  s    zPythonSignature.output_idxTr   rF   r   rF   r   c                  sZ    j |d} fdd|D }t j}t||krB||d  j dd| dS )Nr   c                   s   g | ]}|j  jd qS )rD   )rW   rE   ru   r$   rF   r   r(   
<listcomp>  s   z1PythonSignature.signature_str.<locals>.<listcomp>*r   r   r    )r   r,   r~   insertr   r1   )r$   r   rF   argsschema_formalspositional_argcr   r   r(   signature_str  s    
zPythonSignature.signature_strr   r   r   c                  sh    j |d} fdd|D }t j}t||kr@||d t } jrZ|dd t j||S )Nr   c                   s   g | ]}|j  jd qS rE   rn   rE   ru   r#   r   r(   r     s   z5PythonSignature.signature_str_pyi.<locals>.<listcomp>r   r   r$   )r   r,   r~   r   returns_str_pyirE   r6   r   r$   r   r   r   r   returns_strr   r#   r(   signature_str_pyi  s    

z!PythonSignature.signature_str_pyir   c                  s    j |d} fdd|D }  }|dkr2d S t j}|d j}t|trft|jdv rf|dksjd S t|tsxJ d|d j	 d t
|j |d< t } jr|dd	 t j	||S )
Nr   c                   s   g | ]}|j  jd qS r   r   ru   r#   r   r(   r     s   z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>r   )rh   SymIntra   r   rc   r$   )r   r   r,   r~   rA   r.   r   r   rg   r   re   r   rE   r   r6   )r$   r   r   r   num_argsZnum_positionalargsZvararg_typer   r   r#   r(   signature_str_pyi_vararg  s.    


z(PythonSignature.signature_str_pyi_varargN)r<   r=   r>   r?   propertyrY   r   r   r   r   r   r   r   r   r   r(   r}   k  s    
r}   c                   @  sv   e Zd ZU ded< ded< eddddZd	d
dddddddZd	ddddddZd	ddddddZdS )PythonSignatureDeprecatedr   deprecated_schematuple[str, ...]deprecated_args_exprsrG   r   c                 C  s   dS )NTr   r#   r   r   r(   rY     s    z$PythonSignatureDeprecated.deprecatedFTr   r   r   c                C  s   t j| ||dd S )Nr   z|deprecated)r}   r   )r$   r   rF   r   r   r(   r     s    z'PythonSignatureDeprecated.signature_strr   r   c                  sV    j |d} fdd|D }t j}t||kr@||d t }t j||S )Nr   c                   s   g | ]}|j  jd dqS )TrX   r   ru   r#   r   r(   r     s   z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>r   )r   r,   r~   r   r   r6   r   r   r   r#   r(   r     s    

z+PythonSignatureDeprecated.signature_str_pyir   c                C  s   d S rr   r   )r$   r   r   r   r(   r     s    z2PythonSignatureDeprecated.signature_str_pyi_varargN)	r<   r=   r>   r?   r   rY   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 )!PythonSignatureNativeFunctionPairr}   	signaturer   functionNr;   r   r   r   r(   r     s   
r   c                   @  s<   e Zd ZU ded< ded< ded< eddd d	d
dZdS )PythonSignatureGroupr}   r   r   basezNativeFunction | Noneoutplacer   z(PythonSignatureNativeFunctionPair | None)
functionalr\   r   c                 C  sT   |d u rt |j|jd dS |jj }|jj|d< t t|jf i ||j|jdS )N)r   r   r   r   )r   r   r   __dict__copyr   rA   )clsr   r\   Zsignature_kwargsr   r   r(   
from_pairs1  s    zPythonSignatureGroup.from_pairsN)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   rV   rG   
is_out_argNr;   r   r   r   r(   r   T  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	d
ZdS )PythonArgParserOutputExprr   r   exprrh   indexr@   argumentr   c                 C  s   d| j  dS )Nz
_r.isNone(r    )r   r#   r   r   r(   is_none_expro  s    z&PythonArgParserOutputExpr.is_none_exprN)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 )DispatchLambdaArgumentExprszSequence[str]exprsinitsNr;   r   r   r   r(   r   y  s   
	r   Fr   r   rG   r   )frE   r   c                C  s   t j| |djS )Nr   )r   Zfrom_native_functionr   )r   rE   r   r   r(   _cpp_signature  s    r   )r   r   c                 C  s   | j jjd uS rr   )funcr   tensor_optionsr   r   r   r(   has_tensor_options  s    r   simple_typerF   r   )tr   rF   r   c                C  s6  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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 r| jjS nt | trt| j||d}| dS t | tr |s| jnd }t| jdkr| jd usJ d| j dS t| jd	kr|d urd
| dS dS t| jdkrf|rJ|d urFd| dS dS |d ur`d
| dS dS nt| 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 n*t| jdkr|d ur d| dS dS t| j||d}d| dS tdt|  d S )Nint64_tdoublezc10::string_viewr   ?rG   z::std::array<bool,>rh   zIntArrayRef[]ZIntArrayRefr   zSymIntArrayRef[ZSymIntArrayRefrI   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 )r.   r   r   r   rh   floatr   rI   rG   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceDeviceIndexMemoryFormatr   Streamr   r   rS   rg   r   rz   rx   repr)r   r   rF   rg   rz   r   r   r(   rS     sh    


rS   z
int | None)r   r   c                 C  s,   |   }|d ur$t|jdkr$|jS d S d S )NrG   )Zis_list_liker   rg   rz   )r   lr   r   r(   argument_type_size  s    r   r
   )rv   r   c              
   C  s:   t | j| j| jd ur0tttj| j| jddnd d dS )NFrH   r   rA   rB   rC   )r@   r   rA   rB   r   r	   r   default_exprrv   r   r   r(   r     s    r   )rE   pyi)r   rE   r   r   c                C  s   t | j| j||dS )N)category_overriderE   r   )signature_from_schemar   r   )r   rE   r   r   r   r(   r     s    r   r   )r   r   rE   r   r   c             	     s  g }|  jj |s2 jjd u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v p||
dp||
d}|dk}g }|s|r|sddd 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p8d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   ru   r   r   r(   	<setcomp>  r*   z(signature_from_schema.<locals>.<setcomp>c                 S  s   h | ]
}|j qS r   r   ru   r   r   r(   r     r*   c                 S  s   h | ]
}|j qS r   r   ru   r   r   r(   r     r*   c                   s
   | j  v S rr   r   r   )input_arg_setr   r(   <lambda>  r*   z'signature_from_schema.<locals>.<lambda>c                   s
   | j  v S rr   r   r   )kwarg_only_setr   r(   r     r*   c                   s
   | j  v S rr   r   r   )out_arg_setr   r(   r     r*   c                 s  s   | ]}|j  V  qd S rr   rs   ru   r   r   r(   r)   (  s   z(signature_from_schema.<locals>.<genexpr>c                 s  s   | ]}|j d kV  qdS )requires_gradNr   ru   r   r   r(   r)   +  r*   zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s  s   | ]}|j  V  qd S rr   rs   r&   rr   r   r(   r)   2  r*   factory)newlikeZnew__likedummyr   r   )r   r   c                   sJ    j j}|d u rd S t|| }|jd u s2|jdkr6d S tj|j|jddS )NrL   FrH   )r   r   getattrrB   r   r   rA   )r   Z	topt_argsrv   )r   r   r(   topt_default_initB  s    
z0signature_from_schema.<locals>.topt_default_initdtyperL   r   layoutdevicez$torch::tensors::get_default_device()
pin_memoryFalser   r:   )r   r~   r   r   r   r:   rE   )%r   r   Zpre_self_positionalZself_argr   r   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyr\   Zflat_positionalZflat_kwarg_onlyr0   rk   filterrw   Zflat_non_outZschema_order_arguments
ValueErrorr:   r   r   ri   rj   r@   r   r   r   r   r   r   rG   r8   r}   r   rf   r{   )r   r   rE   r   r   r~   r   rp   Zhas_tensor_input_argZhas_tensor_returnr   Zis_factory_functionZis_like_or_new_functionZis_dummy_functionr   r   r:   r   )r   r   r   r   r(   r     s    




	


	
r   r9   z	list[str])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 )Nra   c                 s  s   | ]}|j d u V  qd S rr   r   r   r   r   r(   r)     r*   z'structseq_fieldnames.<locals>.<genexpr>c                 s  s   | ]}|j d u V  qd S rr   r   r   r   r   r(   r)     r*   z)Unnamed field is not supported by codegenc                 S  s   g | ]}t |jqS r   )r   r   r   r   r   r(   r     r*   z(structseq_fieldnames.<locals>.<listcomp>)r,   r2   rw   r   r   r   r   r(   structseq_fieldnames  s
    
r   c                 C  s&  d}t | tr| j} d}d}t | tr<| jtjtjfv r>d}| jtjkrPd}n| jtj	krbd}n| jtj
krtd}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v r
| jj}nt | trt
| jdkrn| jd urhdnd}n|  rd}| jd urdnd}ndt
| jdkrd}nNt
| jdkr| jd urt| j}| d| d}nt| j}d| d}ntdt|  |r"| ddd}|S )NFTr   _intz_int | SymIntZ_floatr   zNumber | _complexZ_dtypeZ_boolZ_qschemeZ_layoutzDeviceLikeType | NoneZmemory_formatzstr | EllipsisType | NonezStorage | UntypedStoragerh   z_int | _size_sizez*Tensor | tuple[Tensor, ...] | list[Tensor]z!tuple[Tensor, ...] | list[Tensor]r   zSequence[_float]r   z | Sequence[r   z	Sequence[r   r]   r^   )r.   r   rg   r   r   r   rh   r   r   r   r   r   r   rG   r   r   r   r   r   r   rI   r   r   r   rz   rt   re   rx   r   rT   )r   Zadd_optionalretrg   r   r   r(   re     sl    




re   c                 C  s   t | tr&t| j}| dddS t | trX| jtjkr@dS | jtj	krPdS t
| S t | trxt| j}d| dS t
| S )Nr]   r^   Z_devicer   tuple[z, ...])r.   r   return_type_str_pyirg   rT   r   r   r   r   r   re   r   )r   innerr   r   r(   r     s    




r   ztuple[str, str] | None)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| d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   rA   r   r   r   r(   r     r*   z)returns_structseq_pyi.<locals>.<listcomp>r   r   r   zclass r   z):  # fmt: skipz    @propertyz    def z
(self) -> r!   z    def __new__(z        cls,z        sequence: r%   z    ) -> Self:  # fmt: skipz        ...z    n_fields: Final[_int] = z%    n_sequence_fields: Final[_int] = z%    n_unnamed_fields: Final[_int] = 0zG    def __init_subclass__(cls) -> NoReturn: ...  # prohibit subclassingr   r+   )r:   r   r   r1   zipr   r,   )	r   python_returnsZstructseq_namefield_namesZseq_typeZstructseq_def_linesr   Zret_typeZstructseq_defr   r   r(   returns_structseq_pyi  s:    

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(   r   >  r*   z#returns_str_pyi.<locals>.<listcomp>ra   r   r   r   r   rL   )r   r:   r   r,   r1   )r   r  r  r   r   r(   r   9  s    r   z"tuple[DispatchLambdaArgument, ...])psr   rF   r   c                   sf   t trj}n|j}tj|jd|d|jd}dd |jjD  ddd fdd	}tt	||S )
NF)r   ZfaithfulrF   rE   cpp_no_default_argsc                 S  s   h | ]
}|j qS r   r   ru   r   r   r(   r   ~  r*   z'dispatch_lambda_args.<locals>.<setcomp>r   r   )cpp_argr   c                   s\   | j }| j v }jr&| jdkr&d}n&t dkp6| }|rLddi||}t| j||dS )Nr$   zconst at::Tensor &ra   zat::Tensor &
at::Tensor)r   rV   r   )rA   r   rE   r,   rU   r   )r  rV   r   Zensure_temp_safeZout_argsr  r   r(   dispatch_lambda_arg  s    
z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)
r.   r   r   r   r   r   r  r\   r0   rk   )r  r   rF   Zschemacpp_argsr	  r   r  r(   dispatch_lambda_argsn  s    
r  >   zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>z=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>zvoid*voidz6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>r   z#::std::tuple<at::Tensor,at::Tensor>rG   z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>z
at::Streamz::std::vector<at::Tensor>z::std::tuple<double,int64_t>zat::ScalarTypezat::QSchemez2::std::tuple<at::Tensor,::std::vector<at::Tensor>>zat::IntArrayRefz
at::Scalarr   z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>z2::std::tuple<at::Tensor,at::Tensor,double,int64_t>zr::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,c10::SymInt,c10::SymInt,at::Tensor,at::Tensor,at::Tensor>r  zO::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>c                 C  sJ   t dd | jjD }tj|dd }|tvrFt| jj d| |S )Nc                 s  s   | ]}t |j|jd V  qd S rr   )r   r   rA   r   r   r   r(   r)     s   z-dispatch_lambda_return_str.<locals>.<genexpr>TrH   z returns unsupported type )	r0   r   r:   r   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESrx   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 r0d| S tj| jv 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   rE   variantsr   r   r   rj   rx   )r   rF   r   	namespacer   r   r(   cpp_dispatch_target  s    

r  )python_signaturezPythonSignature | Noner   )r   r  r   c                  sj   t  dd }d}t|ts2tdd |D }ntt fdd|j}tj j	v rfttdj
|}|S )	NFr   r   c                 s  s   | ]}|j V  qd S rr   r   ru   r   r   r(   r)     r*   z%cpp_dispatch_exprs.<locals>.<genexpr>c                   s   | dkp j  S )Nr\   )r   	is_out_fn)nr   r   r(   r     r*   z$cpp_dispatch_exprs.<locals>.<lambda>r$   )r   r   r.   r   r0   r   r   r   rE   r  __ne__)r   r  r
  r   r   r   r(   cpp_dispatch_exprs  s    

r  rH   )r   rB   rC   rF   r   c                C  s  |d u}|r(t | dvr(td|  dt| tr2| jtjtjtjtj	tj
fv 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v rt| jd d |dd S t| j|||dS nt| trpt | jdkr| jd u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?rG   bool?ztype 'z+' does not supported unpacking with defaultZscalartypeWithDefaultZ
scalartypeZdeviceWithDefaultr   ZtoInt64ZtoSymIntZtoBoolWithDefaultZtoBoolZtoDoubleZ
stringViewZlayoutWithDefaultr   ZmemoryformatrI   ZoptionalTensorr   	generatorz	Dimname[]ZtoDimnameListOptional)NrL   rN   rO   rH   Optionalztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   Zdimnamelistrh   Zintlistr   Z
doublelistr   Z
symintlistr   Z
scalarlistz%' is not supported by PythonArgParser)r   rx   r.   r   r   r   rI   r   r   r   r   lowerr   r   r   rh   r   rG   r   r   r   r   rg   arg_parser_unpack_methodr   rz   )r   rB   rC   rF   Zhas_default_initr   r   r(   r    sz    

r  rh   )	arg_indexrv   rF   r   c                C  s\   |j d u}t|j|j|j |d}|r0d|j  nd}d| d|  | d}t|j|| |dS )N)r   rB   rC   rF   r   r   z_r.r   r    )r   r   r   r   )rC   r  rA   rB   r   r   )r   rv   rF   Zhas_defaultZunpack_methodrB   r   r   r   r(   arg_parser_output_exprk  s    
r!  z$dict[str, PythonArgParserOutputExpr]c                  s    fddt |  D S )Nc                   s&   i | ]\}}t || d }|j|qS )rH   )r!  r   )r&   irv   erH   r   r(   
<dictcomp>  s   z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumerater   )r  r   rF   r   rH   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v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v 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$vr0t|j d3 d
tt fd4d|D |d5S )6NrH   T)r   r$   zauto self = ;ra   zauto out = zout[r   z
Dimname[]?zauto __rd   z::std::optional<DimnameList> z = __z& ? ::std::make_optional(DimnameList(__z.value())) : ::std::nullopt;c                 S  s   g | ]
}|j qS r   r   ru   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  s   | ]}| v V  qd S rr   r   ru   tensor_options_args_namesr   r(   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, rQ   c                 3  s   | ]}| v V  qd S rr   r   ru   r)  r   r(   r)     r*   )r   r   z,: incomplete tensor options for output checkzcheck_out_type_matches(r\   r   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                 3  s   | ]} |j  V  qd S rr   r   ru   )lambda_args_exprsr   r(   r)   
  r*   )r   r   )r&  r  r   r   r   r   r   r.   rf   r,   rp   r   r  r%  r   rA   rE   r   rx   TENSOR_OPTIONS_FIELDSrU   r2   r   r   r   r0   )r  r   rF   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsrv   r   Zarg_parser_exprr"  Zout_argr   )r,  r*  r(   dispatch_lambda_exprs  s    








r.  )r   N)T)=
__future__r   Z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   r6   r8   r@   rf   r}   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   re   r   r  r   r  r  r  r  r  r  r!  r&  r-  r.  r   r   r   r(   <module>   s   0 6 \${3/? E76 /)_