
    ¯wg                        d dl mZ 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 d dlmZmZmZmZmZmZ d dlm Z  ddZ!	 	 	 	 	 	 	 	 	 	 dd	Z"dd
Z#ddZ$	 	 	 	 	 	 	 	 ddZ%ddZ&y)    )annotations)Sequence)local)cpp)ArgName	BaseCTypeBindingboolTConstRefCTypeCTypedeviceTlayoutT	ListCTypeMutRefCType
NamedCTypeOptionalCTypescalarTscalarTypeTtensorT)ArgumentFunctionSchemaReturnSelfArgumentTensorOptionsArgumentsType)assert_neverc                    t        | j                  j                        }| j                         r|dz  }| j                  j                  r|d| j                  j                   z  }|S )N_out_)strname	is_out_fnoverload_name)funcr!   s     X/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torchgen/api/native.pyr!   r!   /   sU    tyy~~D~~yy!DII++,--K    c               V   t        |       dk(  rXt        t        t                    }|r)t	        j
                         st        |t        |            S t        |t        |            S t        |       dk(  r4t        |t        t        t        t        t                                      S t        |       dk(  r"t        |t        t        t                          S t        |       dk(  r+t        |t        t        t        t                                S t        j                  | |||      S )NzTensor?z	Tensor?[]ScalarzScalar?mutablebindssymint)r    r   r   r   r   !use_const_ref_for_mutable_tensorsr   r   r   r   r   r   argumenttype_type)tr*   r+   r,   tensor_types        r%   r.   r.   9   s     1v%29W3E%F5BBDe[%=>>e];%?@@	Q;	==79K+L!MN
 	
 
Q8	%y/A!BCC	Q9	%}Yw=O/P!QRR  G5PPr&   c               0    t        j                  | |      S )Nr,   )r   returns_type)rsr,   s     r%   r3   r3   M   s    Bv..r&   c               H    t        | j                  | j                  ||      S )Nr)   )r.   typeis_write)ar+   r,   s      r%   argument_typer9   Q   s    QVVQZZuVTTr&   c                  | }t        | t              rld }|r8| j                  ,t        j                  | j                  | j
                  |      }t        t        | | j                  |      | j                  ||       gS t        | t              rt        | j                  ||      S t        | t              rd }|rd}t        t        dt        t        t                          d||       t        t        dt        t        t                           d||       t        t        dt        t        t"                          d||       t        t        d	t        t        t$                          d	||       gS t'        |        y )
Nr2   )r+   r,   )nctyper!   defaultargument)is_outr,   z{}dtypelayoutdevice
pin_memory)
isinstancer   r<   r   default_exprr6   r	   r9   r!   r   r=   r   r   r   r   r   r   r   r
   r   )r8   r>   r,   should_defaultr<   s        r%   r=   r=   U   sW     ZN!X"aii3&&qyy!&&HG$QaffVDVV	
 	
 
A|	$

6&AA	A-	.G
 !'=;9O+PQ	 !(M)G:L,MN	 !(M)G:L,MN	 !,i>N0OP!	'
 	
6 	Qr&   c          
        g }|j                  | j                  j                         |j                  | j                  j                         |D cg c]%  }t	        ||| j                               D ]  }| ' c}}S c c}}w )N)r,   r>   )extend	argumentsnon_outoutr=   r"   )r$   r,   argsargrs        r%   rH   rH      sr    CEDKK&&'KK""#8Ct~~GW#X	  s   *B N)r$   r   returnr    )
r/   r   r*   boolr+   r   r,   rO   rN   r   )r4   zSequence[Return]r,   rO   rN   r   )r8   r   r+   r   r,   rO   rN   r   )r8   z0Argument | SelfArgument | TensorOptionsArgumentsr>   rO   r,   rO   rN   list[Binding])r$   r   r,   rO   rN   rP   )'
__future__r   typingr   torchgenr   torchgen.apir   torchgen.api.typesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   torchgen.modelr   r   r   r   r   r   torchgen.utilsr   r!   r.   r3   r9   r=   rH    r&   r%   <module>rY      s    "       "  (QQQ&-Q7;QQ(/U=7= = 	=
 =@r&   