
    Vh1                       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 d dl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$ d dl%m&Z& erd dl'm(Z( 	 	 	 	 	 	 	 dd	Z)d
d	 	 	 	 	 	 	 	 	 d dZ*d!dZ+d"dZ,d#dZ-d$dZ.ddd%dZ/dddddddZ0d&dZ1	 	 	 	 	 	 	 	 	 	 	 	 d'dZ2	 	 	 	 	 	 	 	 	 	 d(dZ3y))    )annotations)TYPE_CHECKING)local)ArgName	BaseCTypeBindingConstRefCTypeCTypeMutRefCType
NamedCTypeSpecialArgName
TupleCTypeVectorCTypevoidT)ArrayRefCTypeBaseTypeToCppMappingOptionalCTypescalarTtensorListTtensorT)Argument	ArgumentsBaseTyBaseTypeListTypeNativeFunctionOptionalTypeReturnSelfArgumentTensorOptionsArgumentsType)assert_never)Sequencec          	        t        | t              r| j                  t        j                  k(  s| j                  t        j
                  k(  ry t        |       dk(  r*t        |t        t        t        j                                 S t        |t        t        | j                                 S t        | t              r9t        | j                  |      }|y t        |t        |j                              S t        | t               rZt        | j                        dk(  rA| j"                  J t        |t%        t        t        t        j&                                       S y t)        dt+        |              )NSymIntbindsboolunrecognized type )
isinstancer   namer   TensorScalarstrr   r   r   intr   valuetype_typeelemr   typer   sizer   r(   AssertionErrorrepr)tr'   r1   s      N/home/dcms/DCMS/lib/python3.12/site-packages/torchgen/executorch/api/et_cpp.pyr0   r0   B   s   
 !X66V]]"aff&=VxeY/CFJJ/O%PQQ%+?+G!HII	A|	$affE2<%tyy!9::	Ax	 qvv;& 66%%%}Y/CFKK/P%QR  1$q';<<    F)remove_non_owning_ref_typesc          
        t        | |      }||S t        | t              r| j                  t        j
                  k(  rZ|r6t        j                         s"t        |t        t        t                          S t        |t        t        t                          S | j                  t        j                  k(  r"t        |t        t        t                          S t        d|        t        | t               rt#        | j$                        dk(  rc|r6t        j                         s"t        |t        t        t                          S t        |t        t'        t        t                                S t#        | j$                        dk(  r+t        |t        t'        t        t                                S t)        | j$                  ||      }t        |t'        |j*                              S t        | t,              rt#        | j$                        dk(  rt        |t        t.                    S t#        | j$                        dk(  rt1        d      t#        | j$                        dk(  r+t        |t3        t'        t        t                                S t)        | j$                  ||      }t        |t3        |j*                              S t        d	t5        |              )
Nr&   z&base type should have been value type r,   r-   mutabler'   Dimnamez"Executorch doesn't support DimnameTensor?r)   )r0   r*   r   r+   r   r,   r   !use_const_ref_for_mutable_tensorsr   r   r   r   r	   r-   r   r4   r   r.   r1   r   argumenttype_typer2   r   r   NotImplementedErrorr   r5   )r6   r<   r'   r9   rr1   s         r7   r@   r@   d   s     			A 	}!X66V]]"uFFH!%Yw5G)HII!%y7I)JKKVVv}}$e]9W3E%FGG #I!!MNN	A|	$qvv;("uFFH!;y'9:  "=y7I)JK  [H$e]=7AS3T%UVV F%tyy!9::	Ax	 qvv;("eY{%;<<[I%%&JKK[I%e]=7AS3T%UVV F%tyy!9::1$q';<<r8   c               F    t        | j                  | j                  |      S )Nr;   )r@   r2   is_write)ar'   s     r7   argument_typerF      s    QVVQZZuEEr8   c               R   t        | d      }||j                  S t        | t              r| j                  t
        j                  k(  rU|rDt        j                         rt        t        t                    S t        t        t                    S t        t              S | j                  t
        j                  k(  r`t        t              S t        | t              rA|rJ d       t!        | j"                  d      }| j$                  
J d|         t'        |      S t)        d|        )N__placeholder__r&   zTNative functions should never return a mutable tensor list. They should return void.Fr<   z'fixed size list returns not supported: zunrecognized return type )r0   r2   r*   r   r+   r   r,   r   r?   r	   r   r   r   r-   r   r   returntype_typer1   r3   r   r4   )r6   r<   rB   r1   s       r7   rJ   rJ      s    q 12A}vv!X66V]]"::<(7);<<&y'9:: !))VVv}}$W%%	Ax	  	
b	
{ qvvu5vv~L!HLL~4  
4QC8
99r8   c                D    t        | j                  | j                        S )NrI   )rJ   r2   rD   )rB   s    r7   return_typerL      s    1661::66r8   c                    t        |       dk(  rt        t              S t        |       dk(  rt        | d         S t	        | D cg c]  }t        |       c}      S c c}w )Nr      )lenr   r   rL   r   )rsrB   s     r7   returns_typerQ      sO    
2w!|	RA2a5!!26a;q>6776s   Aresult)fallback_namec                  g }t        | j                  j                        D ]3  \  }| j                  j                  j                  j                  r|dk(  sJ d       d}n| j                  j                         r.| j                  j                  j                  |   j                  }nj                  ret        fd| j                  j                         D              }|r*| j                  j                         sj                   d}n7j                  }n*t        | j                  j                        dk(  r|n| | }|j                  |       6 |S )Nr   z.illegal inplace function with multiple returnsselfc              3  P   K   | ]  }j                   |j                   k(    y w)N)r+   ).0rE   rB   s     r7   	<genexpr>zreturn_names.<locals>.<genexpr>   s#       %&!&&  s   #&_returnrN   )	enumeratefuncreturnsr+   inplace	is_out_fn	argumentsoutanyschema_order_argumentsrO   append)frS   r\   ir+   name_conflictrB   s         @r7   return_namesrg      s   G!&&..) 1 66;;##6KKK6D VV66##''*//DVV  *+&&*G*G*I  M QVV%5%5%7&&)vv
 %($71$<=]OTUSVBWDt56 Nr8   falsetrueztorch::execustd::nullopt{}z+torch::executorch::MemoryFormat::Contiguousztorch::executorch::kLong)FalseTrueNonez[]contiguous_formatlongc                   | dk(  rt        |      dk(  ryt        |t              r|j                  t        j                   u rt        |       dk\  r| d   dk(  rz| d   dk(  rrd}d	}|d	z   t        |       k  rW| |   d
k7  r| |   dk(  r|dz  }n|| |   z  }|d	z  }n!| |d	z      dk(  r|dz  }n|| ||dz    z  }|dz  }|d	z   t        |       k  rWd| dS t        |t              r| dk(  ryt        | |j                        S t        |t              rH| j                  d      r| j                  d      rd| d	d z   dz   S |j                  t        d|  d      t        j                  | |       S )Nrm   r>   rj      r   ' rN   \"z\"ztorch::executor::nullopt[]{}z,Expected a list default '[...]' but found: ')r.   r*   r   r+   r   rO   r   default_exprr1   r   
startswithendswithr3   
ValueErrorJIT_TO_CPP_DEFAULTget)dr6   sre   s       r7   r{   r{      s}   F{s1v*!X166VZZ#7q6Q;1Q43;1R5C<AAa%#a&.Q44<ts{U
QqT	FAQx3SQq1q5\)FA a%#a&. qc8O!\";-Aqvv&&!X<<C1R=3&&VV^KA3aPQQ!!!Q''r8   c                  	 	 	 	 dfd}t        | t              r| j                  dk(  rrt        j                  }n| j                  }d }| j                  vr,| j
                   t        | j
                  | j                        }t        t        | |      | j                  ||       gS t        | t              rt        d      t        | t              rrg S  || j                        S t        |        y )Nc                $    t        |       S )N)cpp_no_default_argsmethodfaithfulhas_tensor_options)argument)rE   r   r   r   r   s    r7   sub_argumentzargument.<locals>.sub_argument/  s!      31
 	
r8   memory_formatr&   )nctyper+   defaultr   z3Need to implement type resolution for TensorOptions)rE   0Argument | TensorOptionsArguments | SelfArgumentreturnlist[Binding])r*   r   r+   r    possibly_redundant_memory_formatr   r{   r2   r   rF   r    rA   r   r   r"   )rE   r   r   r   r   r   r'   r   s    ````   r7   r   r   '  s    	
;	
		
 	
 !X66_$);"CCEFFE"66,,1F"199aff5G$Qe4VV	
 	
 
A-	.!"WXX	A|	$I

++Qr8   c               z   g }|r7|j                  | j                         |j                  | j                         n6|j                  | j                         |j                  | j                         |D cg c]7  }t        |||| j                  d u|      D ]  }|r|j                         n| 9 c}}S c c}}w )N)r   r   r   r   )extendnon_outr`   r   tensor_options
no_default)r_   r   r   r   argsrE   rB   s          r7   r_   r_   W  s     DFDI%%&IMM"IMM"I%%& 
(77tC 3

  #)
)
 
 
s   7<B7N)r6   r!   r'   r   r   zNamedCType | None)
r6   r!   r<   r(   r'   r   r9   r(   r   r   )rE   r   r'   r   r   r   )r6   r!   r<   r(   r   r
   )rB   r   r   r
   )rP   zSequence[Return]r   r
   )rd   r   rS   r.   r   zSequence[str])r   r.   r6   r!   r   r.   )rE   r   r   set[str]r   r(   r   r(   r   r(   r   r   )
r_   r   r   r(   r   r(   r   r   r   r   )4
__future__r   typingr   torchgenr   torchgen.api.typesr   r   r   r	   r
   r   r   r   r   r   r   torchgen.executorch.api.typesr   r   r   r   r   r   torchgen.modelr   r   r   r   r   r   r   r   r   r    r!   torchgen.utilsr"   collections.abcr#   r0   r@   rF   rJ   rL   rQ   rg   r   r{   r   r_    r8   r7   <module>r      sh   "           ( (&== = 	=N ).1=1= 1= 	1=
 "&1= 1=jF:B7
8 =E B &
F& %(V-7- "- 	-
 - - -`  	
 " r8   