U
    •Ê¹jž?  ã                	   @   sN  d dl mZmZ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mZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 dddœe+e5e5e6dœd	d
„Z7dddœe2e	e5e5ee dœdd„Z8dddœe2e5e	e5e5edœdd„Z9ddœe'e	e5edœdd„Z:ddœe2e5e5edœdd„Z;ddœe/e5edœdd„Z<ddœee/ e5edœdd„Z=dd œe-e6ee6 d!œd"d#„Z>d$d%d&d'd(d)d*d+œZ?e6e2e5e6d,œd-d.„Z@ddœee'e1e0f ee6 e5e5e5e5ee d/œd0d1„ZAddœe(e5e5e5ee6 ee d2œd3d4„ZBd5S )6é    )ÚListÚOptionalÚSequenceÚSetÚUnion)Úlocal)ÚArgNameÚ
ArrayCTypeÚArrayRefCTypeÚ	BaseCTypeÚBaseTypeToCppMappingÚBindingÚboolTÚConstRefCTypeÚCTypeÚdimnameListTÚintArrayRefTÚiTensorListRefTÚ	ListCTypeÚlongTÚMutRefCTypeÚ
NamedCTypeÚOptionalCTypeÚoptionalIntArrayRefTÚoptionalSymIntArrayRefTÚscalarTÚSpecialArgNameÚsymIntArrayRefTÚSymIntTÚtensorListTÚtensorOptionsTÚtensorTÚ
TupleCTypeÚVectorCTypeÚvoidT)ÚArgumentÚ	ArgumentsÚBaseTyÚBaseTypeÚFunctionSchemaÚListTypeÚNativeFunctionÚOptionalTypeÚReturnÚSelfArgumentÚTensorOptionsArgumentsÚType)Úassert_neverF)Úfaithful_name_for_out_overloadsÚsymint_overload)Úfuncr2   r3   Úreturnc                C   s:   t | jjƒ}|r|d7 }|  ¡ r6|r.|d7 }n|d7 }|S )NZ_symintZ_outfZ_out)ÚstrÚnameÚ	is_out_fn)r4   r2   r3   r7   © r9   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/api/cpp.pyr7   E   s    
r7   )Úremove_non_owning_ref_typesÚsymint)ÚtÚbindsr;   r<   r5   c                C   s  t | tƒr~| jtjks"| jtjkr&d S t| ƒdkrR|rDt|tt	ƒƒS t|tt
ƒƒS |rj| jtjkrjtdƒ‚t|tt| j ƒƒS t | tƒr´t| j||d�}|d kr¤d S t|t|jƒƒS t | tƒ� røt| jƒdkrò| jd k	sÜt‚t|tttƒ| jƒƒS d S ntdt| ƒ› �ƒ‚d S )NÚSymIntz1string ref->value conversion: not implemented yet©r>   r<   Úboolúunrecognized type )Ú
isinstancer(   r7   r'   ÚTensorÚScalarr6   r   r   r   r   ÚAssertionErrorr   r,   Úvaluetype_typeÚelemr   Útyper*   Úsizer	   r   Úrepr)r=   r>   r;   r<   rH   r9   r9   r:   rG   Z   s0    
ÿ
rG   )r=   Úmutabler>   r;   r<   r5   c                C   s   t | |||d�}|d k	r|S t| tƒr”| jtjkrd|rPt ¡ sPt|t	t
tƒƒƒS t|tt
tƒƒƒS n,| jtjkr‚t|tt
tƒƒƒS td| › �ƒ‚�nˆt| tƒ�rœt| jƒdkrä|rÌt ¡ sÌt|t	t
tƒƒƒS t|ttt
tƒƒƒƒS n–t| jƒdk�r
t|ttt
tƒƒƒƒS t| jtƒ�r8t| jjƒdk�r8t|t
tƒƒS t| jtƒ�rzt| jjƒdk�rz|�rlt|t
tƒƒS t|t
tƒƒS t| j|||d�}t|t|jƒƒS t| tƒ�r
t| jƒdk�rÞ|�rÐt|tt
tƒƒƒS t|t
tƒƒS t| jƒdk�rB|�r |�rt|tt
tƒƒƒS t|tt
tƒƒƒS n"|�r4t|t
tƒƒS t|t
tƒƒS t| jƒdk�r~t ¡ �rnt|tt
tƒƒƒS t|t
t ƒƒS njt| jƒdk�r t|t!t
tƒƒƒS t| jƒdk�r¾t|t
t"ƒƒS t| jƒd	k�rèt|tt#tt
tƒƒƒƒƒS t| j|||d�}t|t!|jƒƒS td
t$| ƒ› �ƒ‚d S )N)r>   r<   r;   z&base type should have been value type rD   rE   Úintr?   )rL   r>   r<   ZDimnameúTensor?rB   )%rG   rC   r(   r7   r'   rD   r   Ú!use_const_ref_for_mutable_tensorsr   r   r   r!   r   rE   r   rF   r,   r6   rH   r   r*   r   r   Úargumenttype_typerI   r#   r   r   r   r   Zuse_ilistref_for_tensor_listsr   r   r
   r   r   rK   )r=   rL   r>   r;   r<   ÚrrH   r9   r9   r:   rP   ƒ   s„    	ü
 
ÿ ÿ  
 ÿrP   ©r<   )Úar>   r<   r5   c                C   s   t | j| j||d�S )N)rL   r<   r>   )rP   rI   Úis_write)rS   r>   r<   r9   r9   r:   Úargument_typeÚ   s    rU   )r=   rL   r<   r5   c                C   sÎ   t | ddd�}|d k	r|jS t| tƒrx| jtjkrb|rXt ¡ rJt	t
tƒƒS tt
tƒƒS qvt
tƒS q¼| jtjkr¼t
tƒS nDt| tƒr¼|rŽtdƒ‚t| jdd�}| jd ks´td| › �ƒ‚t|ƒS td| › �ƒ‚d S )	NZ__placeholder__Tr@   zTNative functions should never return a mutable tensor list. They should return void.F)rL   z'fixed size list returns not supported: zunrecognized return type )rG   rI   rC   r(   r7   r'   rD   r   rO   r   r   r!   r   rE   r   r*   rF   Úreturntype_typerH   rJ   r#   )r=   rL   r<   rQ   rH   r9   r9   r:   rV   ã   s*    



ÿþrV   )rQ   r<   r5   c                C   s   t | j| j|d�S )N)rL   r<   )rV   rI   rT   )rQ   r<   r9   r9   r:   Úreturn_type  s    rW   )Úrsr<   r5   c                   sJ   t | ƒdkrttƒS t | ƒdkr0t| d ˆ d�S t‡ fdd„| D ƒƒS d S )Nr   é   rR   c                    s   g | ]}t |ˆ d �‘qS )rR   )rW   )Ú.0rQ   rR   r9   r:   Ú
<listcomp>  s     z returns_type.<locals>.<listcomp>)Úlenr   r$   rW   r"   )rX   r<   r9   rR   r:   Úreturns_type  s
    r]   Úresult)Úfallback_name)Úfr_   r5   c                   sÌ   g }t | jjƒD ]¶\}‰ | jjjjr:|dks4tdƒ‚d}n‚| j ¡ rV| jjj| j}nfˆ jrœt	‡ fdd„| j 
¡ D ƒƒ}|r”| j ¡ s”ˆ j› d�}q¼ˆ j}n t| jjƒdkr°|n
|› |› �}| |¡ q|S )Nr   z.illegal inplace function with multiple returnsÚselfc                 3   s   | ]}ˆ j |j kV  qd S )N)r7   )rZ   rS   ©rQ   r9   r:   Ú	<genexpr>$  s    zreturn_names.<locals>.<genexpr>Z_returnrY   )Ú	enumerater4   Úreturnsr7   ZinplacerF   r8   Ú	argumentsÚoutÚanyZschema_order_argumentsr\   Úappend)r`   r_   re   Úir7   Zname_conflictr9   rb   r:   Úreturn_names  s"    
ÿ rk   ÚfalseÚtrueúc10::nulloptzat::Reduction::Meanú{}zMemoryFormat::Contiguousú	at::kLong)ÚFalseÚTrueÚNoneZMeanz[]Zcontiguous_formatÚlong)Údr=   r<   r5   c                C   sš  | dkrt |ƒdkrdS t|tƒræ|jtj kræt| ƒdkræ| d dkræ| d dkræd}d	}|d	 t| ƒk rÚ| | d
kr¢| | dkrŒ|d7 }n|| | 7 }|d	7 }qZ| |d	  dkr¼|d7 }n|| ||d … 7 }|d7 }qZd|› d�S t|tƒ�r| dkrþdS t| |j|d�S t|t	ƒ�rŽ|  
d¡�rF|  d¡�rFd| d	d…  d S |�rr|  ¡ �rrt |jƒdk�rrd| › d�S |jd k�rŽtd| › d�ƒ‚t | | ¡S )Nrs   rN   ro   é   r   ú'éÿÿÿÿÚ rY   ú\ú"z\"rn   rR   ú[ú]Ú{Ú}r?   zc10::SymInt(ú)z,Expected a list default '[...]' but found: ')r6   rC   r(   r7   r'   r\   r,   Údefault_exprrH   r*   Ú
startswithÚendswithÚisdigitrJ   Ú
ValueErrorÚJIT_TO_CPP_DEFAULTÚget)ru   r=   r<   Úsrj   r9   r9   r:   r�   @  s:    $



 r�   )rS   Úcpp_no_default_argsÚmethodÚfaithfulr<   Úhas_tensor_optionsr5   c          	         s\  t tttf tt dœ‡ ‡‡‡‡fdd„}t| tƒr˜| jdkrJˆrJtj	}n| j}d }| jˆ krz| j
d k	rzt| j
| jˆd�}tt| |ˆd�| j|| d�gS t| tƒ�r.ˆrÐ|| jƒ|| jƒ || jƒ || jƒ S d }dˆ ksàt‚td	d
„ |  ¡ D ƒƒ� rþd}n| jj
dk�rd}ttdttƒƒd|| d�gS n*t| tƒ�rPˆ�rDg S || jƒS nt| ƒ d S )N)rS   r5   c                    s   t | ˆ ˆˆˆˆd�S )N)r‰   rŠ   r‹   r<   rŒ   )Úargument)rS   ©r‰   r‹   rŒ   rŠ   r<   r9   r:   Úsub_argumentv  s    úzargument.<locals>.sub_argumentZmemory_formatrR   r@   )Znctyper7   Údefaultr�   Úoptionsc                 s   s   | ]}|j d kV  qdS )rs   N)r�   )rZ   Úxr9   r9   r:   rc   Ÿ  s     zargument.<locals>.<genexpr>ro   rt   rp   )r   r%   r/   r.   r   r   rC   r7   r   Z possibly_redundant_memory_formatr�   r�   rI   rU   ZdtypeZlayoutZdeviceZ
pin_memoryrF   Úallr   r   r    r�   r1   )	rS   r‰   rŠ   r‹   r<   rŒ   r�   r>   r�   r9   rŽ   r:   r�   m  sZ    
þ
üÿÿþýÿüÿr�   )rf   r‹   r<   rŠ   r‰   r5   c                   sT   g }ˆr"|  ˆ j¡ |  ˆ j¡ n|  ˆ j¡ |  ˆ j¡ ‡ ‡‡‡‡fdd„|D ƒS )Nc              
      s<   g | ]4}t |ˆˆˆˆ jd k	ˆd�D ]}ˆr2| ¡ n|‘q"qS )N)r‹   r<   rŠ   rŒ   r‰   )r�   Ztensor_optionsZ
no_default)rZ   rS   rQ   ©rf   r‰   r‹   rŠ   r<   r9   r:   r[   Ä  s   ú þzarguments.<locals>.<listcomp>)ÚextendZnon_outrg   )rf   r‹   r<   rŠ   r‰   Úargsr9   r”   r:   rf   µ  s    þrf   N)CÚtypingr   r   r   r   r   Ztorchgenr   Ztorchgen.api.typesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Ztorchgen.modelr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Ztorchgen.utilsr1   rA   r6   r7   rG   rP   rU   rV   rW   r]   rk   r†   r�   r�   rf   r9   r9   r9   r:   Ú<module>   s€   |8üûûú.úùW	#	!ù3úøLüù