U
    •Ê¹jlß  ã                   @   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    úR/var/www/html/bwave/python/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	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 k	�r|�st| jtƒrÔ| jjtt	j
ƒkrÔ| j d
¡rÔ| j d¡rÔd| 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_AFFINEú: ú = )Ú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ô   sD    
ÿý
ÿþ
ý
üû úzPythonArgument.argument_str_pyiN)
r   r   r   Ústrr   r   r   Úboolr;   rR   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 )rM   .Úoutputs)rU   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 )
NrF   r   r1   )r#   r$   r%   r&   rU   c                 s   s   | ]}|j  ¡  V  qd S ©N©r$   Úis_tensor_like©Ú.0Úar    r    r!   Ú	<genexpr>>  s     z1PythonOutArgument.from_outputs.<locals>.<genexpr>zUnsupported output type: r@   z!Unexpected PythonOutArgument size)ÚlenrM   r#   r$   ÚanyÚRuntimeErrorr   r   r   r.   ÚAssertionError)rU   Úsizer    r    r!   Úfrom_outputs-  s,    ûúzPythonOutArgument.from_outputsN)	r   r   r   r   r"   r   Ústaticmethodr   rb   r    r    r    r!   rM   $  s
   

þrM   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)rk   rl   r*   c                C   sN   g }|  | j¡ |  | j¡ | jd k	r6|s6| | j¡ |sF|  | j¡ t|ƒS rV   )Úextendre   rf   rg   Úappendrh   Útuple)r-   rk   rl   Úresultr    r    r!   Ú	argumentsl  s    zPythonSignature.argumentsc                 C   s   t |  ¡ ƒS rV   )r]   rq   rj   r    r    r!   Úarguments_countx  s    zPythonSignature.arguments_countc                 C   s   t | jƒt | jƒ S rV   )r]   re   rf   rj   r    r    r!   Ú
output_idx{  s    zPythonSignature.output_idxT©rk   r)   ©rk   r)   r*   c                   sZ   ˆ j |d�}‡ ‡fdd„|D ƒ}tˆ jƒ}t|ƒ|krB| |d¡ ˆ j› dd |¡› d�S )N©rk   c                    s   g | ]}|j ˆ jˆd �‘qS )r'   )r;   r(   rY   ©r-   r)   r    r!   Ú
<listcomp>‰  s    z1PythonSignature.signature_str.<locals>.<listcomp>Ú*rE   ú, rH   )rq   r]   re   Úinsertr#   Újoin)r-   rk   r)   ÚargsÚschema_formalsÚpositional_argcr    rw   r!   Úsignature_str‡  s    ÿ
zPythonSignature.signature_strrv   ©rk   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 )Nrv   c                    s   g | ]}|j ˆ jd �‘qS ©©r(   ©rR   r(   rY   rj   r    r!   rx   ”  s    z5PythonSignature.signature_str_pyi.<locals>.<listcomp>ry   r   r-   údef rE   rz   ú) -> ú: ...)rq   r]   re   r{   Úreturns_str_pyir(   r#   r|   ©r-   rk   r}   r~   r   Úreturns_strr    rj   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 )Nrv   c                    s   g | ]}|j ˆ jd �‘qS r‚   r„   rY   rj   r    r!   rx   ¥  s    z<PythonSignature.signature_str_pyi_vararg.<locals>.<listcomp>Fr   )rO   ÚSymIntrF   Try   z: _intr-   r…   rE   rz   r†   r‡   )rq   rr   r]   re   r$   rL   r   rS   rN   r#   rˆ   r(   r{   r|   )	r-   rk   r}   r~   Únum_argsZnum_positionalargsZhave_vararg_versionZvararg_typerŠ   r    rj   r!   Úsignature_str_pyi_vararg¢  s.    
ÿ

ÿþýz(PythonSignature.signature_str_pyi_varargN)r   r   r   rS   r   r   r"   r   rM   r   rT   Úpropertyr=   r	   rq   rO   rr   rs   r€   r‹   rŽ   r    r    r    r!   rd   K  s*   
 ÿ þrd   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_exprsri   c                 C   s   dS )NTr    rj   r    r    r!   r=   Ó  s    z$PythonSignatureDeprecated.deprecatedFTrt   ru   c                C   s   t j| ||d�d S )Nrt   z|deprecated)rd   r€   )r-   rk   r)   r    r    r!   r€   ×  s      ÿýÿz'PythonSignatureDeprecated.signature_strrv   r�   c                   sh   ˆ j |d�}‡ fdd„|D ƒ}tˆ jƒ}t|ƒ|kr@| |d¡ tˆ ƒ}dˆ j› dd |¡› d|› d	�S )
Nrv   c                    s   g | ]}|j ˆ jd d�‘qS )Tr<   r„   rY   rj   r    r!   rx   á  s    z?PythonSignatureDeprecated.signature_str_pyi.<locals>.<listcomp>ry   r…   rE   rz   r†   r‡   )rq   r]   re   r{   rˆ   r#   r|   r‰   r    rj   r!   r‹   ß  s    
ÿ
z+PythonSignatureDeprecated.signature_str_pyic                C   s   d S rV   r    )r-   rk   r    r    r!   rŽ   ë  s    z2PythonSignatureDeprecated.signature_str_pyi_varargN)r   r   r   r   r   r   rS   r�   rT   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   rd   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   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˜   rh   )r–   r”   r•   Ú__dict__Úcopyrh   r$   )Úclsr™   r@   Zsignature_kwargsr    r    r!   Ú
from_pairs  s     ýþÿýzPythonSignatureGroup.from_pairsN)
r   r   r   rd   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   rS   r   rT   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Úargumentri   c                 C   s   d| j › d�S )Nz
_r.isNone(rH   )r£   rj   r    r    r!   Úis_none_exprM  s    z&PythonArgParserOutputExpr.is_none_exprN)	r   r   r   rS   r   rO   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   rS   r   r    r    r    r!   r¦   W  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_signatureq  s    rª   )r©   r*   c                 C   s   | j jjd k	S rV   )Úfuncrq   Útensor_options©r©   r    r    r!   Úhas_tensor_optionsu  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 �n®t | tƒrÎt| jƒdkr´d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	�r†d|› d�S dS nžt| jƒdk�r¶|d k	�r²d|› d�S dS t| jƒdk�rà|d k	�rÜd|› d�S dS t| jƒdk�r |�rúd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¯   ú?rT   z::std::array<bool,ú>rO   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 )rL   r   r#   r   r.   rO   ÚfloatrS   rT   ÚQSchemer·   Ú
ScalarTypeÚ	GeneratorÚStorageÚLayoutÚDeviceÚDeviceIndexÚMemoryFormatr¸   ÚStreamZConstQuantizerPtrrŒ   r   rN   r7   r   ra   r`   r_   Úrepr)r±   r°   r)   rN   ra   r    r    r!   r7   ƒ  sp    
ò

ÿr7   )r±   r*   c                 C   s,   |   ¡ }|d k	r$t|jƒdkr$|jS d S d S )NrT   )Zis_list_likerS   rN   ra   )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%   rS   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¡}g }|�sŽ|�rvttt dœ‡ fdd„}| tdtttjƒƒd|�rÆd n|dƒd�¡ | tdtttjƒƒd|�rôd 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#   rY   r    r    r!   Ú	<setcomp>ù  s     z(signature_from_schema.<locals>.<setcomp>c                 S   s   h | ]
}|j ’qS r    rÍ   rY   r    r    r!   rÎ   ú  s     c                 S   s   h | ]
}|j ’qS r    rÍ   rY   r    r    r!   rÎ   û  s     c                    s
   | j ˆ kS rV   rÍ   rÉ   )Úinput_arg_setr    r!   Ú<lambda>ý  ó    z'signature_from_schema.<locals>.<lambda>c                    s
   | j ˆ kS rV   rÍ   rÉ   )Úkwarg_only_setr    r!   rÐ   ÿ  rÑ   c                    s
   | j ˆ kS rV   rÍ   rÉ   )Úout_arg_setr    r!   rÐ     rÑ   c                 s   s   | ]}|j  ¡ V  qd S rV   rW   rY   r    r    r!   r\     s    z(signature_from_schema.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qdS )Úrequires_gradNrÍ   rY   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 rV   rW   ©rZ   Úrr    r    r!   r\     s     Úfactory)ÚnewÚlikeZnew_Ú_like)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+   )rq   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#   re   rf   rg   rh   r   r(   )&rm   rq   Zpre_self_positionalZself_argrn   r¤   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyr@   Zflat_positionalZflat_kwarg_onlyro   ÚmapÚfilterr^   Zflat_non_outZschema_order_argumentsÚ
ValueErrorr   r
   r#   rP   rQ   rS   r   r"   r   r   r   r¼   r¿   rÀ   rT   r   rd   rM   rb   )r«   rË   r(   rÊ   r}   re   rf   rU   Zhas_tensor_input_argZhas_tensor_returnr#   Zis_factory_functionZis_like_or_new_functionrh   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 )NrF   c                 s   s   | ]}|j d kV  qd S rV   rÍ   rÕ   r    r    r!   r\   v  s     z(namedtuple_fieldnames.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qd S rV   rÍ   rÕ   r    r    r!   r\   y  s     z)Unnamed field is not supported by codegenc                 S   s   g | ]}t |jƒ‘qS r    )rS   r#   rÕ   r    r    r!   rx   …  s     z)namedtuple_fieldnames.<locals>.<listcomp>)r]   Úallr^   rå   râ   r    r    r!   Únamedtuple_fieldnamesu  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r‚d}n´| jtjkr”d}n¢| jtjkr¦d	}n�| jtjkr¸d
}n~| jtjkrÊd}nl| jtjkrÜd}nZ| jtjkrîd}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}nÞt | tƒ�rt
| jƒdk�rj| jd k	�rddnd}n˜|  ¡ �rœt | jtƒ�r†d}| jd k	�r–dnd}nft
| jƒdk�r²d}nPt
| jƒdk�rì| jd k	�rìt| jƒ}d|› d|› d�}nt| jƒ}d|› d�}ntdt| ƒ› �ƒ‚|�r(d| d }|S )NFTÚ_intzUnion[_int, SymInt]Z_floatrS   zUnion[Number, _complex]Z_dtypeZ_boolZ_qschemeZ_layoutzUnion[_device, str, None]Zmemory_formatzUnion[str, ellipsis, None]zUnion[Storage, UntypedStorage]rO   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[rB   r¹   rA   )rL   r   rN   r   r#   r   rO   rÁ   rŒ   rº   rS   r·   r¼   rT   r»   r¿   rÀ   rÂ   r¸   r¾   r.   r½   rÃ   r   ra   rX   rK   r_   rÄ   )r±   Zadd_optionalÚretrN   r    r    r!   rK   ˆ  sl    


ÿý

rK   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[)rL   r   Úreturn_type_str_pyirN   r   r#   r   rÀ   r¸   rK   r   )r±   Úinnerrê   r    r    r!   rë   Í  s    




rë   )r”   r*   c                 C   sp   dd„ | j j D ƒ}| j}t| j j ƒ}|rld|› d�g}| dd„ t||ƒD ƒ¡ | d¡ d |¡}||fS d S )	Nc                 S   s   g | ]}t |jƒ‘qS r    ©rë   r$   rÕ   r    r    r!   rx   å  s     z+returns_named_tuple_pyi.<locals>.<listcomp>zclass z(NamedTuple):c                 s   s"   | ]\}}d |› d|› �V  qdS )z    rI   Nr    )rZ   r#   Útypr    r    r!   r\   ê  s    z*returns_named_tuple_pyi.<locals>.<genexpr>r,   Ú
)r   r#   rç   rm   Úziprn   r|   )r”   Úpython_returnsZnamedtuple_nameÚfield_namesZnamedtuple_def_linesZ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!   rx   þ  s     z#returns_str_pyi.<locals>.<listcomp>rF   zTuple[rz   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)rq   Zfaithfulr)   r(   Úcpp_no_default_argsc                 S   s   h | ]
}|j ’qS r    rÍ   rY   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 &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_argA  s"    
 ÿ þýz1dispatch_lambda_args.<locals>.dispatch_lambda_arg)rL   r�   r‘   r«   r
   rq   rõ   r@   r   rŸ   ro   rã   )rô   r©   r)   ZschemaÚcpp_argsrù   r    rø   r!   Údispatch_lambda_args.  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>zj::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t,int64_t,at::Tensor,at::Tensor,at::Tensor>z
at::ScalarrT   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 rV   )r   r#   r$   rÕ   r    r    r!   r\   Ž  s    z-dispatch_lambda_return_str.<locals>.<genexpr>Tr+   z returns unsupported type )	ro   r«   r   r
   Zreturns_typeZcpp_typeÚSUPPORTED_RETURN_TYPESr_   r#   )r©   Zreturns_without_annotationZ
return_strr    r    r!   Údispatch_lambda_return_strz  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—   rQ   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 rV   rÍ   rY   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ª   rq   ro   rL   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Ž|rŠdS dS | jtjkrždS | jtjkr®dS | jtjkrÆ|rÂd	S dS | jtjkrÞ|rÚd
S dS | jtjkrîd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ƒ�r´t | jƒdk�rRdS t | jƒdk�rfdS t | jƒdk�rzdS |�s |dk�r t| jd d |d�d S t| j|||d�S n¼t| tƒ�rpt | jƒdk�rî| jd k	�rêd| 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?rT   ú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dimnamelistrO   Zintlistrº   Z
doublelistrŒ   Z
symintlistr·   Z
scalarlistz%' is not supported by PythonArgParser)rS   r_   rL   r   r#   r   r.   rÃ   r¾   r·   r¸   Úlowerr¼   rÀ   rÁ   rO   rŒ   rT   rº   r¿   rÂ   r   rN   Úarg_parser_unpack_methodr   ra   )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)   rz   r,   z_r.rE   rH   )r#   r¢   r£   r¤   )r&   r  r$   r%   r¡   r#   )r  r[   r)   Ú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 �fD ]}|j|“qqS )r+   )r  r#   )rZ   Úir[   Úer+   r    r!   Ú
<dictcomp><  s
    þ z+arg_parser_output_exprs.<locals>.<dictcomp>)Ú	enumeraterq   )rô   r©   r)   r    r+   r!   Úarg_parser_output_exprs9  s    

þr  r  r	  r
  r  )rÝ   rß   rÞ   rà   rÔ   c                   sF  t | ||d�}t| ||d�}g }i ‰ t|ƒ}| jdd�D ]ð}|j}||j j}	|rx|dkrx| d|	› d�g¡ |ˆ |< q8t|tƒrÖt	|j
ƒdkrÖ|j ¡ rÖ| d|	› d�g¡ t|j
ƒD ]\}
}d	|
› d
�ˆ |j< q¸q8t|jƒdk�r | d|› d|	› d�d|› d|› d|› d�g¡ |ˆ |< q8|	ˆ |< q8| j�r:dˆ d< dd„ | jD ƒ‰|�rZ|j ¡ �rlt|j› d�ƒ‚| jD ]f}|jtk�ršt|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(< |�s(ˆ�r(dˆk�r|j ¡ �sŒt|j› d)�ƒ‚t‡fd*d„d+D ƒƒ�s´t|j› d,�ƒ‚| d-|d. j› d/|d j› d0|d j› d/|d" j› d0|d  j› d/|d  j› d1�¡ d$ˆk�r(t|j› d2ˆ› d
�ƒ‚tt‡ fd3d„|D ƒƒ|d4�S )5Nr+   T)rl   r-   zauto self = ú;rF   zauto out = zout[rB   z
Dimname[]?zauto __rJ   zc10::optional<DimnameList> z = __z$ ? c10::make_optional(DimnameList(__z.value())) : c10::nullopt;c                 S   s   g | ]
}|j ‘qS r    rÍ   rY   r    r    r!   rx   Š  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 rV   r    rY   ©Ú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à   z1);
torch::utils::maybe_initialize_cuda(options);
Úoptionsz1: dtype in tensor_options_args without output argc                 3   s   | ]}|ˆ kV  qd S rV   r    rY   r  r    r!   r\   ´  s     )rÞ   rß   z,: incomplete tensor options for output checkzcheck_out_type_matches(r@   rz   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                 3   s   | ]}ˆ |j  V  qd S rV   rÍ   rY   )Úlambda_args_exprsr    r!   r\   Ç  s     )r§   r¨   )r  rû   r®   rq   r#   r¢   rm   rL   rM   r]   rU   r«   r  r  rS   r$   r(   rh   r_   ÚTENSOR_OPTIONS_FIELDSr9   ræ   Úkeysrn   r¥   r¦   ro   )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_exprsN  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"   rM   rd   r�   r“   r–   rŸ   r¡   r¦   rT   rª   r®   rS   r7   rO   rÆ   r¤   r”   rÌ   rç   rK   rë   ró   rˆ   rû   rý   rþ   r  r  r  r  r  r  r  r    r    r    r!   Ú<module>   s  $0 ?X&y3/ ÿ  þD ÿ  þûú E6 ÿ  
þ0çý
ü)ÿ   þZÿ  þÿ  
þûÿ  þ