a
    dQ                     @   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Z5d`e ee'ee$d6f dCdDdEZ6h dFZ7ee*d"dGdHZ8ee*d"dIdJZ9dKdLeee  ee*d6f dMdNdOZ:ddPeee* ee* e'e*dQdRdSZ;ddPe,ee'e%dTdUdVZ<ddPe ee'ee*e%f dCdWdXZ=dYdZd[d\d\d]Z>ddPe ee'e&dCd^d_Z?dKS )a    )	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    \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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v r<|s<d}| jd urrd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{} =)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 u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| 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   zMemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINEz: r6   )argument_type_str_pyir$   r#   
isinstancePythonOutArgumentr%   r   elemr   r   int
startswithendswithr9   )r-   r(   r=   r:   r#   Ztreat_as_no_defaultr%   r    r    r!   argument_str_pyi   sB    



zPythonArgument.argument_str_pyiN)
r   r   r   strr   r   r   boolr;   rP   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 )rK   .outputs)rS   r*   c                 C   s   | sd S t | }|dkr6t| d j| d jdd | dS |dkr|ttdd | r^td|  tdttt	j
|dd | dS td	d S )
NrF   r   r1   )r#   r$   r%   r&   rS   c                 S   s   | j   S Nr$   is_tensor_likear    r    r!   <lambda>>      z0PythonOutArgument.from_outputs.<locals>.<lambda>zUnsupported output type: r@   z!Unexpected PythonOutArgument size)lenrK   r#   r$   anymapRuntimeErrorr   r   r   r.   AssertionError)rS   sizer    r    r!   from_outputs-  s,    zPythonOutArgument.from_outputsN)	r   r   r   r   r"   r   staticmethodr   ra   r    r    r    r!   rK   $  s
   

rK   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=   h  s    zPythonSignature.deprecatedF)skip_outputsskip_tensor_options)rj   rk   r*   c                C   sN   g }| | j | | j | jd ur6|s6|| j |sF| | j t|S rT   )extendrd   re   rf   appendrg   tuple)r-   rj   rk   resultr    r    r!   	argumentsl  s    zPythonSignature.argumentsc                 C   s   t |  S rT   )r[   rp   ri   r    r    r!   arguments_countx  s    zPythonSignature.arguments_countc                 C   s   t | jt | j S rT   )r[   rd   re   ri   r    r    r!   
output_idx{  s    zPythonSignature.output_idxTrj   r)   rj   r)   r*   c                   s^    j |d}tt fdd|}t j}t||krF||d  j dd| dS )Nrj   c                    s   | j  jdS )Nr'   )r;   r(   rW   r-   r)   r    r!   rY     rZ   z/PythonSignature.signature_str.<locals>.<lambda>*rE   , rH   )rp   listr]   r[   rd   insertr#   join)r-   rj   r)   argsschema_formalspositional_argcr    rv   r!   signature_str  s    
zPythonSignature.signature_strru   rj   r*   c                   s~    j |d}tt fdd|}t j}t||krD||d t } jr^|dd d j dd		| d
| dS )Nru   c                    s   | j  jdS Nr(   rP   r(   rW   ri   r    r!   rY     rZ   z3PythonSignature.signature_str_pyi.<locals>.<lambda>rw   r   r-   def rE   rx   ) -> : ...)
rp   ry   r]   r[   rd   rz   returns_str_pyir(   r#   r{   r-   rj   r|   r}   r~   returns_strr    ri   r!   signature_str_pyi  s    
z!PythonSignature.signature_str_pyic          	         s    j |d}tt fdd|}  }t j}d}|dkrn|d j}t|trnt	|j
dv rn|dkrnd}|svd S d	|d j d
 |d< t } jr|dd d j dd| d| dS )Nru   c                    s   | j  jdS r   r   rW   ri   r    r!   rY     rZ   z:PythonSignature.signature_str_pyi_vararg.<locals>.<lambda>Fr   )rM   SymIntrF   Trw   z: _intr-   r   rE   rx   r   r   )rp   ry   r]   rq   r[   rd   r$   rJ   r   rQ   rL   r#   r   r(   rz   r{   )	r-   rj   r|   r}   num_argsZnum_positionalargsZhave_vararg_versionZvararg_typer   r    ri   r!   signature_str_pyi_vararg  s.    

z(PythonSignature.signature_str_pyi_varargN)r   r   r   rQ   r   r   r"   r   rK   r   rR   propertyr=   r	   rp   rM   rq   rr   r   r   r   r    r    r    r!   rc   K  s&   
rc   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_exprsrh   c                 C   s   dS )NTr    ri   r    r    r!   r=     s    z$PythonSignatureDeprecated.deprecatedFTrs   rt   c                C   s   t j| ||dd S )Nrs   z|deprecated)rc   r   )r-   rj   r)   r    r    r!   r     s    z'PythonSignatureDeprecated.signature_strru   r   c                   sl    j |d}tt fdd|}t j}t||krD||d t }d j dd| d| d	S )
Nru   c                    s   | j  jddS )NTr<   r   rW   ri   r    r!   rY     rZ   z=PythonSignatureDeprecated.signature_str_pyi.<locals>.<lambda>rw   r   rE   rx   r   r   )	rp   ry   r]   r[   rd   rz   r   r#   r{   r   r    ri   r!   r     s    
z+PythonSignatureDeprecated.signature_str_pyic                C   s   d S rT   r    )r-   rj   r    r    r!   r     s    z2PythonSignatureDeprecated.signature_str_pyi_varargN)r   r   r   r   r   r   rQ   r   rR   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   rc   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)
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   rg   )r   r   r   __dict__copyrg   r$   )clsr   r@   Zsignature_kwargsr    r    r!   
from_pairs  s     zPythonSignatureGroup.from_pairsN)
r   r   r   rc   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   rQ   r   rR   r    r    r    r!   r   2  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argumentrh   c                 C   s   d| j  dS )Nz
_r.isNone(rH   )r   ri   r    r    r!   is_none_exprM  s    z&PythonArgParserOutputExpr.is_none_exprN)	r   r   r   rQ   r   rM   r"   r   r   r    r    r    r!   r   >  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   rQ   r   r    r    r    r!   r   W  s   
	r   Fr   )fr(   r*   c                C   s   t j| |djS r   )r   Zfrom_native_functionr   )r   r(   r    r    r!   _cpp_signatureq  s    r   )r   r*   c                 C   s   | j jjd uS rT   )funcrp   tensor_optionsr   r    r    r!   has_tensor_optionsu  s    r   simple_typer)   )tr   r)   r*   c                C   sX  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fv r| jjS nt | trt| jdkrdS t| j||d}| dS t | trB|s| jnd }t| jdkr| jd usJ d	| j d
S t| jdkr<|d ur8d| dS dS t| jdkr|rl|d urhd| dS dS |d urd| 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 )Nr.   int64_tdoublezc10::string_viewTensor?r   ?rR   z::std::array<bool,>rM   zIntArrayRef[rB   ZIntArrayRefr   zSymIntArrayRef[ZSymIntArrayRefzTensorList[Z
TensorListScalarzScalarList[Z
ScalarListz c10::List<c10::optional<Tensor>>z(const c10::List<c10::optional<Tensor>> &DimnamezDimnameList[ZDimnameListz	ArrayRef<unrecognized type )rJ   r   r#   r   r.   rM   floatrQ   rR   QSchemer   
ScalarType	GeneratorStorageLayoutDeviceMemoryFormatr   StreamZConstQuantizerPtrr   r   rL   r7   r   r`   r^   repr)r   r   r)   rL   r`   r    r    r!   r7     sn    


r7   )r   r*   c                 C   s,   |   }|d ur$t|jdkr$|jS d S d S )NrR   )Zis_list_likerQ   rL   r`   )r   lr    r    r!   argument_type_size  s    r   )rX   r*   c              
   C   s:   t | j| j| jd ur0tttj| j| jddnd d dS )NFr+   r#   r$   r%   r&   )r"   r#   r$   r%   rQ   r   r
   default_exprrW   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 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}g }|s|rvttt 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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#   .0rX   r    r    r!   	<setcomp>  rZ   z(signature_from_schema.<locals>.<setcomp>c                 S   s   h | ]
}|j qS r    r   r   r    r    r!   r     rZ   c                 S   s   h | ]
}|j qS r    r   r   r    r    r!   r     rZ   c                    s
   | j  v S rT   r   rW   )input_arg_setr    r!   rY     rZ   z'signature_from_schema.<locals>.<lambda>c                    s
   | j  v S rT   r   rW   )kwarg_only_setr    r!   rY     rZ   c                    s
   | j  v S rT   r   rW   )out_arg_setr    r!   rY     rZ   c                 s   s   | ]}|j  V  qd S rT   rU   r   r    r    r!   	<genexpr>	  s   z(signature_from_schema.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qdS )requires_gradNr   r   r    r    r!   r     rZ   zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s   s   | ]}|j  V  qd S rT   rU   r   rr    r    r!   r     rZ   factory)newlikeZnew__like)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 )Nr1   Fr+   )rp   r   getattrr%   r
   r   r$   )r#   Z	topt_argsrX   )r   r    r!   topt_default_init"  s    
z0signature_from_schema.<locals>.topt_default_initdtyper1   zself.scalar_type()r   layoutzself.layout()devicezself.device()z$torch::tensors::get_default_device()
pin_memoryFalser   r   )r#   rd   re   rf   rg   r   r(   )&rl   rp   Zpre_self_positionalZself_argrm   r   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyr@   Zflat_positionalZflat_kwarg_onlyrn   r]   filterr\   Zflat_non_outZschema_order_arguments
ValueErrorr   r
   r#   rN   rO   rQ   r   r"   r   r   r   r   r   r   rR   r   rc   rK   ra   )r   r   r(   r   r|   rd   re   rS   Zhas_tensor_input_argZhas_tensor_returnr#   Zis_factory_functionZis_like_or_new_functionrg   r   r   r    )r   r   r   r   r!   r     s    




	
	
r   .)r   r*   c                 C   sR   t | dksttdd | r"g S ttdd | r<tdttdd | S d S )NrF   c                 S   s
   | j d u S rT   r   r   r    r    r!   rY   x  rZ   z'namedtuple_fieldnames.<locals>.<lambda>c                 S   s
   | j d u S rT   r   r   r    r    r!   rY   {  rZ   z)Unnamed field is not supported by codegenc                 S   s
   t | jS rT   )rQ   r#   r   r    r    r!   rY     rZ   )r[   allr]   r\   r   ry   r   r    r    r!   namedtuple_fieldnamesw  s
    
r   c                 C   s  d}t | tr| j} d}t | tr | jtjkr4d}| jtjkrFd}n| jtjkrXd}n| jtj	krjd}n| jtj
kr|d}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rd}n6| jtjkrd}n$| jtjtjtjtjfv r| jj}nt | trt	| jdkrR| jd urLdnd}n^|  rt | jtrnd}| jd ur~dnd}n,t	| jdkrd}nt| j}d| d}ntdt|  |rd| d }|S )NFT_intzUnion[_int, SymInt]Z_floatrQ   r/   Z_dtypeZ_boolZ_qschemeZ_layoutzUnion[_device, str, None]Zmemory_formatzUnion[str, ellipsis, None]rM   zUnion[_int, _size]_sizez/Union[Tensor, Tuple[Tensor, ...], List[Tensor]]z'Union[Tuple[Tensor, ...], List[Tensor]]r   zSequence[_float]z	Sequence[rB   r   rA   )rJ   r   rL   r   r#   r   rM   r   r   rQ   r   r   rR   r   r   r   r   r   r.   r   r   r   r   r`   rV   rI   r^   r   )r   Zadd_optionalretrL   r    r    r!   rI     sb    



rI   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 )NrA   rB   Z_devicezOptional[str]zList[)rJ   r   return_type_str_pyirL   r   r#   r   r   r   rI   r   )r   innerr   r    r    r!   r     s    




r   )r   r*   c                 C   s`   dd | j j D }| j}t| j j }|r\dd t||D }d| dd| d}||fS d S )Nc                 S   s   g | ]}t |jqS r    r   r$   r   r    r    r!   
<listcomp>  rZ   z+returns_named_tuple_pyi.<locals>.<listcomp>c                 S   s"   g | ]\}}d | d| dqS )z("z", rH   r    )r   r#   typr    r    r!   r     s   zNamedTuple("z", [rx   z]))r   r#   r   zipr{   )r   python_returnsZnamedtuple_namefield_namesZ
tuple_argsZnamedtuple_defr    r    r!   returns_named_tuple_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     rZ   z#returns_str_pyi.<locals>.<listcomp>rF   zTuple[rx   rB   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)rp   Zfaithfulr)   r(   cpp_no_default_argsc                 S   s   h | ]
}|j qS r    r   r   r    r    r!   r   3  rZ   z'dispatch_lambda_args.<locals>.<setcomp>)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 &rF   zat::Tensor &
at::Tensor)r#   r:   r   )r$   r#   r(   r[   r9   r   )r   r:   r   Zensure_temp_safeZout_argsr   r    r!   dispatch_lambda_arg6  s    
z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)rJ   r   r   r   r
   rp   r   r@   r   r   rn   r]   )r   r   r)   Zschemacpp_argsr   r    r   r!   dispatch_lambda_args#  s    
r   >   z#::std::tuple<at::Tensor,at::Tensor>voidz6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>z::std::tuple<double,int64_t>z
at::Scalarr   zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>zat::ScalarTypezvoid*r   zat::QSchemez=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>rR   zO::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>r   z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>z::std::vector<at::Tensor>z2::std::tuple<at::Tensor,::std::vector<at::Tensor>>zd::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t,int64_t,int64_t,int64_t,at::Tensor>zat::IntArrayRefz2::std::tuple<at::Tensor,at::Tensor,double,int64_t>c                 C   sJ   t tdd | jj}tj|dd }|tvrFt| jj	 d| |S )Nc                 S   s   t | j| jd S rT   )r   r#   r$   r   r    r    r!   rY     rZ   z,dispatch_lambda_return_str.<locals>.<lambda>Tr+   z returns unsupported type )
rn   r]   r   r   r
   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESr^   r#   )r   Zreturns_without_annotationZ
return_strr    r    r!   dispatch_lambda_return_strn  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   r(   variantsr   r   r   rO   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tdd |}ntt fdd|j}tj	 j
v rhttdj|}|S )NFr   c                 S   s   | j S rT   r   rW   r    r    r!   rY     rZ   z$cpp_dispatch_exprs.<locals>.<lambda>c                    s   | dkp j  S )Nr@   )r   	is_out_fn)nr   r    r!   rY     rZ   r-   )r   rp   rn   rJ   r   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   sv  |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rv|rrdS dS | jtjkr|rdS dS | jtjkrdS | jtjkr|rd	S dS nh| 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|r
dS dS | jtjkrbdS n>t| trt | jdkrDdS t | jdkrXdS t | jdkrldS |s|dv rt| jd d |dd S t| j|||dS nt| trbt | jdkr| jd urd| j dS dS nt | jdkrdS t | jdkr
d S t | jd!krd"S t | d#kr0d$S t | jd%krP|rJd&S d"S nt | d'krbd(S td|  d)d S )*N)ScalarType?r   r   Device?r   Layout?rR   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   r+   r   ztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   ZdimnamelistrM   Zintlistzfloat[]Z
doublelistr   Z
symintlistzScalar[]Z
scalarlistz%' is not supported by PythonArgParser)rQ   r^   rJ   r   r#   r   r.   r   r   r   r   lowerr   r   rM   r   rR   r   r   r   r   rL   arg_parser_unpack_methodr   r`   )r   r%   r&   r)   Zhas_default_initr    r    r!   r    s    

r  )	arg_indexrX   r)   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   r%   r&   r)   rx   r,   z_r.rE   rH   )r#   r   r   r   )r&   r  r$   r%   r   r#   )r  rX   r)   Zhas_defaultZunpack_methodr%   r   r    r    r!   arg_parser_output_expr   s    
r  c                   s    fddt |  D S )Nc                    s&   i | ]\}}t || d }|j|qS )r+   )r  r#   )r   irX   er+   r    r!   
<dictcomp>6  s   z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumeraterp   )r   r   r)   r    r+   r!   arg_parser_output_exprs3  s    

r  r  r  r  r	  )r   r   r   r   r   c                   sJ  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< ttdd | j|r^|j rpt|j d| jD ]f}|jtvrt|j d|j dt|jt|jkrvt|j dt|j d|j dqvttfddt st|j d |d|d j d|d j d |d! j d"|d# j d$|d% j d& d' d'< |s,r,dv r|j st|j d(ttfd)dd*st|j d+|d,|d- j d.|d j d/|d j d.|d! j d/|d j d.|d j d0 d#vr,t|j d1 d
ttt fd2d||d3S )4Nr+   T)rk   r-   zauto self = ;rF   zauto out = zout[rB   z
Dimname[]?zauto __z = zc10::optional<DimnameList> z = __z$ ? c10::make_optional(DimnameList(__z.value())) : c10::nullopt;c                 S   s   | j S rT   r   rW   r    r    r!   rY     rZ   z'dispatch_lambda_exprs.<locals>.<lambda>z : tensor options with output argz%: unrecognized tensor options field 'z' in python binding argumentsz: unrecognized type 'z' for tensor options field ''c                    s   |  v S rT   r    rW   tensor_options_args_namesr    r!   rY     rZ   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   z1);
torch::utils::maybe_initialize_cuda(options);
optionsz1: dtype in tensor_options_args without output argc                    s   |  v S rT   r    rW   r  r    r!   rY     rZ   )r   r   z,: incomplete tensor options for output checkzcheck_out_type_matches(r@   rx   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                    s
    | j  S rT   r   rW   )lambda_args_exprsr    r!   rY     rZ   )r   r   )r  r   r   rp   r#   r   rl   rJ   rK   r[   rS   r   r  r  rQ   r$   r(   ry   r]   rg   r^   TENSOR_OPTIONS_FIELDSr9   r   keysrm   r   r   rn   )r   r   r)   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsrX   r#   Zarg_parser_exprr  Zout_argr    )r  r  r!   dispatch_lambda_exprsG  s    









r  )T)@Z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"   rK   rc   r   r   r   r   r   r   rR   r   r   rQ   r7   rM   r   r   r   r   r   rI   r   r   r   r   r   r   r   r  r  r  r  r  r  r    r    r    r!   <module>   s   $0 ?X&y3/C @6 
/
(a

