o
    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rJd dlmZmZ 	
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~d1d2Z'dd3d4Z(d*dd5dd:d;Z)dd=d>Z*ddAdBZ+d*d*dCddEdFZ,d*d*dCddJdKZ-ddOdPZ.ddQdRZ/ddSdTZ0ddVdWZ1ddXdYZ2	ddd\d]Z3h d^Z4dd_d`Z5ddadbZ6d
dcddgdhZ7ddiddldmZ8ddiddpdqZ9ddiddsdtZ:dudvdwdxdxdyZ;ddiddzd{Z<d
S )    )annotations)	dataclass)TYPE_CHECKING)cpp)BindingCppSignatureCppSignatureGroup)pythonify_default)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturnTypeVariant)IterableSequence Nnamestr	argumentsIterable[str]return_type
str | Nonereturnc                 C  s   t |ttfst|}|d urd| nd}d|  dd| d| d}t|dks7t|d	ks7t|d
kr9|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   Y/home/www/facesmatcher.com/frenv_anti/lib/python3.10/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    $


r7   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)   r9      s   
 r9   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 )PythonArgumentr   r   r   typer   defaultdefault_initFTmethodsymintrF   boolrG   r   c                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rG   zconst r   z &r%   )TensorNumberinputNone)nullptr::std::nulloptstd::nullopt{} =)argument_type_strrB   replacer   rC   get)r%   rF   rG   type_strr   rC   r   r   r)   argument_str   s"   
zPythonArgument.argument_strrF   
deprecatedrZ   c                C  s*  t | j}| j}|dkr|dkr|s|sd}|dkr|d7 }|dkr1|dkr1|s1| ddd}|o<t| to<| jd	k}| jd ur|st| jtru| jjt	t
jkru| jd
ru| jdrud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%   rJ   rL   from_out | None | None | NonerM   {}r   r       r&   r!   Zcontiguous_formatZper_tensor_affine)rN   rO   rP   rQ   zc10::MemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINE:  = )argument_type_str_pyirB   r   rU   r/   PythonOutArgumentrC   r   elemr   r   int
startswithendswithr2   mapr   stripsplitrV   )r%   rF   rZ   rW   r   Ztreat_as_no_defaultrC   r   r   r)   argument_str_pyi  sF   



(zPythonArgument.argument_str_pyiN)rF   rH   rG   rH   r   r   )rF   rH   rZ   rH   r   r   )r=   r>   r?   r@   rX   ro   r   r   r   r)   rA      s   
 rA   c                   @  s$   e Zd ZU ded< edddZdS )	rg   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	)
Nrb   r   rM   )r   rB   rC   rD   rq   c                 s  s    | ]	}|j   V  qd S NrB   is_tensor_liker'   ar   r   r)   r*   ^  r+   z1PythonOutArgument.from_outputs.<locals>.<genexpr>zUnsupported output type: r]   z!Unexpected PythonOutArgument size)r-   rg   r   rB   anyRuntimeErrorr   r   r   rJ   AssertionError)rq   sizer   r   r)   from_outputsO  s,   zPythonOutArgument.from_outputsN)rq   rp   r   rr   )r=   r>   r?   r@   staticmethodr|   r   r   r   r)   rg   F  s   
 rg   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   rp   
input_argsinput_kwargsrr   output_argsr9   r;   tensor_options_argsrH   rF   r   c                 C     dS )NFr   r$   r   r   r)   rZ        zPythonSignature.deprecatedF)skip_outputsskip_tensor_optionsr   r   .tuple[PythonArgument | PythonOutArgument, ...]c                C  sN   g }| | j | | j | jd ur|s|| j |s#| | j t|S rs   )extendr   r   r   appendr   r1   )r%   r   r   resultr   r   r)   r     s   zPythonSignature.argumentsri   c                 C  s   t |  S rs   )r-   r   r$   r   r   r)   arguments_count  s   zPythonSignature.arguments_countc                 C  s   t | jt | j S rs   )r-   r   r   r$   r   r   r)   
output_idx  s   zPythonSignature.output_idxTr   rG   rG   c                  sZ    j |d} fdd|D }t j}t||kr!||d  j dd| dS )Nr   c                   s   g | ]
}|j  jd qS )rE   )rX   rF   rv   r%   rG   r   r)   
<listcomp>      z1PythonSignature.signature_str.<locals>.<listcomp>*r   r    r!   )r   r-   r   insertr   r2   )r%   r   rG   argsschema_formalspositional_argcr   r   r)   signature_str  s   
zPythonSignature.signature_strr   c                  sh    j |d} fdd|D }t j}t||kr ||d t } jr-|dd t j||S )Nr   c                      g | ]	}|j  jd qS rF   ro   rF   rv   r$   r   r)   r         z5PythonSignature.signature_str_pyi.<locals>.<listcomp>r   r   r%   )r   r-   r   r   returns_str_pyirF   r7   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rd S t j}|d j}t|tr3t|jdv r3|dks5d S t|ts<J d|d j	 d t
|j |d< t } jrY|dd	 t j	||S )
Nr   c                   r   r   r   rv   r$   r   r)   r     r   z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>r   )ri   SymIntrb   r   rd   r%   )r   r   r-   r   rB   r/   r   r   rh   r   rf   r   rF   r   r7   )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   rH   )r   rH   r   rH   r   r   )r   ri   r   rH   rG   rH   r   r   r   rH   r   r   r   rH   r   r   )r=   r>   r?   r@   propertyrZ   r   r   r   r   r   r   r   r   r   r)   r~   k  s"   
 

r~   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   rH   c                 C  r   )NTr   r$   r   r   r)   rZ     r   z$PythonSignatureDeprecated.deprecatedFTr   r   rG   r   c                C  s   t j| ||dd S )Nr   z|deprecated)r~   r   )r%   r   rG   r   r   r)   r     s   z'PythonSignatureDeprecated.signature_strr   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 )TrY   r   rv   r$   r   r)   r     r   z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>r   )r   r-   r   r   r   r7   r   r   r   r$   r)   r     s   

z+PythonSignatureDeprecated.signature_str_pyir   c                C  s   d S rs   r   )r%   r   r   r   r)   r     r   z2PythonSignatureDeprecated.signature_str_pyi_varargNr   r   r   r   )	r=   r>   r?   r@   r   rZ   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                   @  s4   e Zd ZU ded< ded< ded< edddZdS )PythonSignatureGroupr~   r   r   basezNativeFunction | Noneoutplace
functionalr   r]   (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   r   r   )r   r   r   __dict__copyr   rB   )clsr   r]   Zsignature_kwargsr   r   r)   
from_pairs1  s   zPythonSignatureGroup.from_pairsN)r   r   r]   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   rW   rH   
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
ZdS )PythonArgParserOutputExprr   r   exprri   indexrA   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   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   fr   rF   rH   r   c                C  s   t j| |djS )Nr   )r   Zfrom_native_functionr   )r   rF   r   r   r)   _cpp_signature  s   r   c                 C  s   | j jjd uS rs   )funcr   tensor_optionsr   r   r   r)   has_tensor_options  s   r   simple_typerG   tr   r   rG   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   ?rH   z::std::array<bool,>ri   zIntArrayRef[]ZIntArrayRefr   zSymIntArrayRef[ZSymIntArrayRefrJ   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   ri   floatr   rJ   rH   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceDeviceIndexMemoryFormatr   Streamr   r   rT   rh   r   r{   ry   repr)r   r   rG   rh   r{   r   r   r)   rT     sn   



rT   
int | Nonec                 C  s(   |   }|d urt|jdkr|jS d S )NrH   )Zis_list_liker   rh   r{   )r   lr   r   r)   argument_type_size  s   r   rw   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 )NFrI   r   rB   rC   rD   )rA   r   rB   rC   r   r	   r   default_exprrw   r   r   r)   r     s   r   )rF   pyir   c                C  s   t | j| j||dS )N)category_overriderF   r   )signature_from_schemar   r   )r   rF   r   r   r   r)   r     s   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   rv   r   r   r)   	<setcomp>      z(signature_from_schema.<locals>.<setcomp>c                 S  r   r   r   rv   r   r   r)   r     r   c                 S  r   r   r   rv   r   r   r)   r     r   c                   
   | j  v S rs   r   r   )input_arg_setr   r)   <lambda>     
 z'signature_from_schema.<locals>.<lambda>c                   r   rs   r   r   )kwarg_only_setr   r)   r     r   c                   r   rs   r   r   )out_arg_setr   r)   r     r   c                 s      | ]}|j  V  qd S rs   rt   rv   r   r   r)   r*   (  s    

z(signature_from_schema.<locals>.<genexpr>c                 s  s    | ]}|j d kV  qdS )requires_gradNr   rv   r   r   r)   r*   +      zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s  r   rs   rt   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 s|jdkrd S tj|j|jddS )NrM   FrI   )r   r   getattrrC   r   r   rB   )r   Z	topt_argsrw   )r   r   r)   topt_default_initB  s   
z0signature_from_schema.<locals>.topt_default_initdtyperM   r   layoutdevicez$torch::tensors::get_default_device()
pin_memoryFalser   r;   )r   r   r   r   r   r;   rF   )r   r   r   r   )%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_onlyr1   rl   filterrx   Zflat_non_outZschema_order_arguments
ValueErrorr;   r   r   rj   rk   rA   r   r   r   r   r   r   rH   r9   r~   r   rg   r|   )r   r   rF   r   r   r   r   rq   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   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 )Nrb   c                 s      | ]}|j d u V  qd S rs   r   r   r   r   r)   r*     r   z'structseq_fieldnames.<locals>.<genexpr>c                 s  r	  rs   r   r   r   r   r)   r*     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>)r-   r3   rx   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r'd}q| jtj	kr0d}q| jtj
kr9d}q| jtjkrBd}q| jtjkrKd	}q| jtjkrTd
}q| jtjkr]d}q| jtjkrfd}q| jtjkrod}q| jtjkrxd}q| jtjkrd}q| jtjkrd}q| 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}q|  rd}| jd urdnd}qt
| jdkrd}qt
| jdkr| jd urt| j}| d| d}qt| j}d| d}n	tdt|  |r| ddd}|S )NFTr   _intz_int | SymIntZ_floatr   zNumber | _complexZ_dtype_boolZ_qschemeZ_layoutzDeviceLikeType | NoneZmemory_formatzstr | EllipsisType | NonezStorage | UntypedStorageri   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   rh   r   r   r   ri   r   r   r   r   r   r   rH   r   r   r   r   r   r   rJ   r   r   r   r{   ru   rf   ry   r   rU   )r   Zadd_optionalretrh   r   r   r)   rf     sn   




rf   c                 C  s   t | trt| j}| dddS t | tr,| jtjkr dS | jtj	kr(dS t
| S t | tr<t| j}d| dS t
| S )Nr^   r_   Z_devicer   tuple[z, ...])r/   r   return_type_str_pyirh   rU   r   r   r   r   r   rf   r   )r   innerr   r   r)   r    s   




r  tuple[str, str] | Nonec           	      C  s   dd | j j D }| j}t| j j }|redd| d}d| d| dg}t||D ]\}}|d	d
| d| dg q,|ddd| ddddt| dt| dddg
 d|}||fS d S )Nc                 S  r
  r   r  rB   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  r2   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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>rb   r  r    r   r   rM   )r  r;   r   r-   r2   )r   r  r  r   r   r)   r   9  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faithfulrG   rF   cpp_no_default_argsc                 S  r   r   r   rv   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 &rb   zat::Tensor &
at::Tensor)r   rW   r   )rB   r   rF   r-   rV   r   )r  rW   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   r   r   r  r]   r1   rl   )r  r   rG   Zschemacpp_argsr   r   r  r)   dispatch_lambda_argsn  s   
r"  >   zvoid*z6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>r   z#::std::tuple<at::Tensor,at::Tensor>z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>zat::ScalarTypez2::std::tuple<at::Tensor,at::Tensor,double,int64_t>z::std::tuple<double,int64_t>rH   zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>voidz::std::vector<at::Tensor>r  zat::QSchemezO::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>z=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>z2::std::tuple<at::Tensor,::std::vector<at::Tensor>>r   zat::IntArrayRefz
at::Streamzr::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,c10::SymInt,c10::SymInt,at::Tensor,at::Tensor,at::Tensor>z
at::Scalarc                 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 rs   )r   r   rB   r   r   r   r)   r*     s    
z-dispatch_lambda_return_str.<locals>.<genexpr>TrI   z returns unsupported type )	r1   r   r;   r   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESry   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   rF   variantsr   r   r   rk   ry   )r   rG   r   	namespacer   r   r)   cpp_dispatch_target  s   

r)  )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 rs   r   rv   r   r   r)   r*     s    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   r1   r  r   r   rF   r'  __ne__)r   r*  r!  r   r   r   r)   cpp_dispatch_exprs  s   

r/  rI   rC   rD   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?rH   bool?ztype 'z+' does not supported unpacking with defaultZscalartypeWithDefaultZ
scalartypeZdeviceWithDefaultr  ZtoInt64ZtoSymIntZtoBoolWithDefaultZtoBoolZtoDoubleZ
stringViewZlayoutWithDefaultr  ZmemoryformatrJ   ZoptionalTensorr   	generatorz	Dimname[]ZtoDimnameListOptional)NrM   rO   rP   rI   Optionalztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   Zdimnamelistri   Zintlistr   Z
doublelistr   Z
symintlistr   Z
scalarlistz%' is not supported by PythonArgParser)r   ry   r/   r   r   r   rJ   r   r   r   r   lowerr   r   r   ri   r   rH   r   r   r   r   rh   arg_parser_unpack_methodr   r{   )r   rC   rD   rG   Zhas_default_initr   r   r)   r7    s|   



r7  	arg_indexri   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   rC   rD   rG   r    r   z_r.r   r!   )r   r   r   r   )rD   r7  rB   rC   r   r   )r8  rw   rG   Zhas_defaultZunpack_methodrC   r   r   r   r)   arg_parser_output_exprk  s   
r9  $dict[str, PythonArgParserOutputExpr]c                  s    fddt |  D S )Nc                   s&   i | ]\}}t || d }|j|qS )rI   )r9  r   )r'   irw   erI   r   r)   
<dictcomp>  s
    z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumerater   )r  r   rG   r   rI   r)   arg_parser_output_exprs~  s   

r?  r0  r1  r2  r3  )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 )6NrI   T)r   r%   zauto self = ;rb   zauto out = zout[r   z
Dimname[]?zauto __re   z::std::optional<DimnameList> z = __z& ? ::std::make_optional(DimnameList(__z.value())) : ::std::nullopt;c                 S  s   g | ]}|j qS r   r   rv   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 rs   r   rv   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, rR   c                 3  rB  rs   r   rv   rC  r   r)   r*     rE  )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 rs   r   rv   )lambda_args_exprsr   r)   r*   
  r   )r   r   )r?  r"  r   r   r   r   r   r/   rg   r-   rq   r   r,  r>  r   rB   rF   r   ry   TENSOR_OPTIONS_FIELDSrV   r3   r   r   r   r1   )r  r   rG   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsrw   r   Zarg_parser_exprr;  Zout_argr   )rG  rD  r)   dispatch_lambda_exprs  s   










rI  )r   N)r   r   r   r   r   r   r   r   )r   r   rF   rH   r   r   )r   r   r   rH   )r   r   r   rH   rG   rH   r   r   )r   r   r   r   )rw   r
   r   rA   )r   r   rF   rH   r   rH   r   r~   )
r   r   r   r   rF   rH   r   rH   r   r~   )r;   r:   r   r  )r   r   r   r   )r   r~   r   r  )r   r~   r   r   )T)r  r~   r   r   rG   rH   r   r  )r   r   r   r   )r   r   r*  r+  r   r   )
r   r   rC   r   rD   r   rG   rH   r   r   )r8  ri   rw   rA   rG   rH   r   r   )r  r~   r   r   rG   rH   r   r:  )r  r~   r   r   rG   rH   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   r7   r9   rA   rg   r~   r   r   r   r   r   r   r   r   rT   r   r   r   r   r  rf   r  r  r   r"  r$  r%  r)  r/  r7  r9  r?  rH  rI  r   r   r   r)   <module>   s    0 6\${3/

?
 


E

76/

)_