o
    I5i@                     @  s  d dl mZ d dl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-m.Z.m/Z/m0Z0 d dl1m2Z2 ddddRddZ3dddddSddZ4ddddTd d!Z5dd"dUd%d&Z6dd"dVd(d)Z7dd"dWd,d-Z8dd"dXd0d1Z9d2d3dYd8d9Z:d:d;d<d=d>d?d@dAZ;dZdCdDZ<dd"d[dLdMZ=dd"d\dPdNZ>dQS )]    )annotations)Sequence)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funcr&   r/   boolr0   returnstrc                C  s<   t | jj}|r|d7 }|  r|r|d7 }|S |d7 }|S )N_symint_outf_out)r4   name	is_out_fn)r1   r/   r0   r8    r:   ^/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/torchgen/api/cpp.pyr8   H   s   r8   T)mutableremove_non_owning_ref_typessyminttr-   bindsr   r<   r=   r>   NamedCType | Nonec                C  s  t | tr?| jtjks| jtjkrd S t| dkr)|r"t|tt	S t|tt
S |r5| jtjkr5tdt|tt| j S t | tr[t| j|||d}|d u rSd S t|t|jS t | tr{t| jdkry| jd usnJ t|ttt| jS d S tdt|  )NSymIntz1string ref->value conversion: not implemented yetr@   r<   r>   r2   unrecognized type )
isinstancer%   r8   r$   TensorScalarr4   r   r   r   r   AssertionErrorr	   r)   valuetype_typeelemr   typer'   sizer   r   repr)r?   r@   r<   r=   r>   rJ   r:   r:   r;   rI   ]   s0   


rI   )r=   r>   r   c                C  s  t | ||||d}|d ur|S t| trH| jtjkr2|r)t s)t|t	t
tS t|tt
tS | jtjkrAt|tt
tS td|  t| trt| jdkrn|rct sct|t	t
tS t|ttt
tS t| jdkrt|ttt
tS t| jtrt| jjdkrt|t
tS t| jtrt| jjdkr|rt|t
tS t|t
tS t| j|||d}t|t|jS t| trvt| jdkr|rt|tt
tS t|t
tS t| jdkr|r|rt|tt
tS t|tt
tS |rt|t
tS t|t
tS t| jdkr0t r)t|tt
tS t|t
t S t| jdkrAt|t!t
tS t| jdkrPt|t
t"S t| jd	kret|tt#tt
tS t| j|||d}t|t!|jS td
t$|  )N)r@   r<   r>   r=   z&base type should have been value type rF   rG   intrB   )r<   r@   r>   DimnameTensor?rD   )%rI   rE   r%   r8   r$   rF   r   !use_const_ref_for_mutable_tensorsr   r   r   r   r   rG   r   rH   r)   r4   rJ   r   r'   r   r   argumenttype_typerK   r    r   r   r   r   use_ilistref_for_tensor_listsr   r   r   r   r   rM   )r?   r<   r@   r=   r>   rrJ   r:   r:   r;   rR      s   	


rR   r>   ar"   c                C  s   t | j| j||dS )N)r<   r>   r@   )rR   rK   is_write)rV   r@   r>   r:   r:   r;   argument_type   s   rX   r   c                C  s   t | d|dd}|d ur|jS t| tr;| jtjkr0|r,t r&t	t
tS tt
tS t
tS | jtjkr:t
tS n9t| tr]|rFJ dt| jdd}| jd u sYJ d|  t|S t| trtt| j|d}t| jdkrtt|S td	|  )
N__placeholder__TrC   zTNative functions should never return a mutable tensor list. They should return void.F)r<   z'fixed size list returns not supported: rF   zunrecognized return type )rI   rK   rE   r%   r8   r$   rF   r   rQ   r   r   r   r   rG   r   r'   returntype_typerJ   rL   r    r)   r4   r   rH   )r?   r<   r>   rT   rJ   r:   r:   r;   rZ      s4   


rZ   rT   r*   c                C  s   t | j| j|dS )N)r<   r>   )rZ   rK   rW   )rT   r>   r:   r:   r;   return_type  s   r[   rsSequence[Return]c                  sF   t | dkr
ttS t | dkrt| d  dS t fdd| D S )Nr      rU   c                   s   g | ]}t | d qS )rU   )r[   ).0rT   rU   r:   r;   
<listcomp>  s    z returns_type.<locals>.<listcomp>)lenr   r!   r[   r   )r\   r>   r:   rU   r;   returns_type  s
   rb   result)fallback_namefr(   rd   Sequence[str]c                  s   g }t | jjD ][\} | jjjjr|dksJ dd}nA| j r+| jjj| j}n3 jrNt fdd| j	 D }|rJ| j sJ j d}n j}nt
| jjdkrX|n| | }|| q|S )Nr   z.illegal inplace function with multiple returnsselfc                 3  s    | ]	} j |j kV  qd S )N)r8   )r_   rV   rT   r:   r;   	<genexpr>-  s    
zreturn_names.<locals>.<genexpr>_returnr^   )	enumerater1   returnsr8   inplacer9   	argumentsoutanyschema_order_argumentsra   append)re   rd   rl   ir8   name_conflictr:   rh   r;   return_names  s"   
 ru   falsetrue::std::nulloptzat::Reduction::Mean{}zc10::MemoryFormat::Contiguous	at::kLong)FalseTrueNoneMeanz[]contiguous_formatlongdc                C  s  | dkrt |dkrdS t|trz|jtj u rzt| dkrz| d dkrz| d dkrzd}d	}|d	 t| k rt| | d
krQ| | dkrF|d7 }n|| | 7 }|d	7 }n| |d	  dkr^|d7 }n
|| ||d  7 }|d7 }|d	 t| k s5d| dS t|tr| dkrdS t| |j|dS t|t	r| 
dr| drd| d	d  d S |r|  rt |jdkrd|  dS |jd u rtd|  dt| | S )Nr}   rP   ry      r   ' r^   \"z\"rx   rU   []{}rB   zc10::SymInt()z,Expected a list default '[...]' but found: ')r4   rE   r%   r8   r$   ra   r)   default_exprrJ   r'   
startswithendswithisdigitrL   
ValueErrorJIT_TO_CPP_DEFAULTget)r   r?   r>   srs   r:   r:   r;   r   I  s<   $





r   0Argument | TensorOptionsArguments | SelfArgumentcpp_no_default_argsset[str]methodfaithfulhas_tensor_optionslist[Binding]c          	        s:  d fdd}t | trB| jdkrrtj}n| j}d }| j vr3| jd ur3t| j| jd}tt	| |d	| j|| d
gS t | t
rr]|| j|| j || j || j S d }d vseJ tdd |  D rsd}n| jjdkr{d}ttdttd|| d
gS t | trrg S || jS t|  d S )NrV   r   r3   r   c                   s   t |  dS )N)r   r   r   r>   r   )argument)rV   r   r   r   r   r>   r:   r;   sub_argument  s   zargument.<locals>.sub_argumentmemory_formatrU   )r@   r>   )nctyper8   defaultr   optionsc                 s  s    | ]}|j d kV  qdS )r}   N)r   )r_   xr:   r:   r;   ri     s    zargument.<locals>.<genexpr>ry   r   rz   )rV   r   r3   r   )rE   r"   r8   r    possibly_redundant_memory_formatr   r   rK   r
   rX   r,   dtypelayoutdevice
pin_memoryallr   r   r   r+   r   r.   )	rV   r   r   r   r>   r   r   r@   r   r:   r   r;   r   v  sV   	



r   rn   r#   c                  sT   g }r|  j |  j n|  j |  j  fdd|D S )Nc              
     s<   g | ]}t | jd udD ]
}r| n|qqS )N)r   r>   r   r   r   )r   tensor_options
no_default)r_   rV   rT   rn   r   r   r   r>   r:   r;   r`     s    zarguments.<locals>.<listcomp>)extendnon_outro   )rn   r   r>   r   r   argsr:   r   r;   rn     s   N)r1   r&   r/   r2   r0   r2   r3   r4   )r?   r-   r@   r   r<   r2   r=   r2   r>   r2   r3   rA   )r?   r-   r<   r2   r@   r   r=   r2   r>   r2   r3   r   )rV   r"   r@   r   r>   r2   r3   r   )r?   r-   r<   r2   r>   r2   r3   r   )rT   r*   r>   r2   r3   r   )r\   r]   r>   r2   r3   r   )re   r(   rd   r4   r3   rf   )r   r4   r?   r-   r>   r2   r3   r4   )rV   r   r   r   r   r2   r   r2   r>   r2   r   r2   r3   r   )rn   r#   r   r2   r>   r2   r   r2   r   r   r3   r   )?
__future__r   typingr   torchgenr   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!   torchgen.modelr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   torchgen.utilsr.   r8   rI   rR   rX   rZ   r[   rb   ru   r   r   r   rn   r:   r:   r:   r;   <module>   sD    |8/X	'	!
3L