U
    9%e?                  	   @   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/Darija-Ai-API/env/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rt| j||d}|d krd S t|t|jS t | t rt| jdkr| jd k	st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rt|tt
tS td|  nt| trt| jdkr|rt st|t	t
tS t|ttt
tS nt| 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|rt|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rt|t!t
tS t| jdkrt|t
t"S t| jd	krt|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rt
tS nDt| tr|rtdt| jdd}| jd kst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rt	 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rt| dkr| d dkr| d dkrd}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rd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rt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sttd	d
 |  D  rd}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