
    Ph4                         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 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" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) 	 dd	d
e de	de*dee   fdZ+dd	d
e de*de	de*def
dZ,dede	defdZ-d
e de*defdZ.dedefdZ/dee   defdZ0dddede1dee1   fdZ2dddd d!d"d#Z3d$e1d
e de1fd%Z4deeeef   d&ee1   d'e*d(e*d)e*dee   fd*Z5d+ed(e*d'e*d&ee1   dee   f
d,Z6y-).    )ListOptionalSequenceSetUnion)local)ArgName
ArrayCType	BaseCTypeBindingConstRefCTypeCTypeMutRefCType
NamedCTypeSpecialArgName
TupleCTypeVectorCTypevoidT)Argument	ArgumentsBaseTyBaseTypeListTypeNativeFunctionOptionalTypeReturnSelfArgumentTensorOptionsArgumentsType)assert_never   )ArrayRefCTypeBaseTypeToCppMappingOptionalCTypescalarTtensorListTtensorTF)remove_non_owning_ref_typestbindsr(   returnc          	      R   t        | t              r| j                  t        j                  k(  s| j                  t        j
                  k(  ry t        |       dk(  r*t        |t        t        t        j                                 S |r(| j                  t        j                  k(  rt        d      t        |t        t        | j                                 S t        | t              r9t        | j                  |      }|y t        |t        |j                               S t        | t"              ret        | j                        dk(  rL| j$                  J t        |t'        t        t        t        j(                           | j$                              S y t        dt+        |              )NSymIntz1string ref->value conversion: not implemented yetr*   boolunrecognized type )
isinstancer   namer   TensorScalarstrr   r   r#   intAssertionErrorr   valuetype_typeelemr$   typer   sizer
   r/   repr)r)   r*   r(   r9   s       iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/executorch/api/et_cpp.pyr8   r8   <   sF    !X66V]]"aff&=VxeY/CFJJ/O%PQQ&vv#$G  %+?+G!HII	A|	$affE2<%tyy!9::	Ax	 qvv;& 66%%%z),@,M"NPQPVPVW  1$q';<<    mutablec          
         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        |              )
N)r*   r(   z&base type should have been value type r3   r4   r?   r*   Dimnamez"Executorch doesn't support DimnameTensor?r0   )r8   r1   r   r2   r   r3   r   !use_const_ref_for_mutable_tensorsr   r   r   r'   r   r4   r%   r7   r   r5   r9   r$   argumenttype_typer:   r   r&   NotImplementedErrorr"   r<   )r)   r?   r*   r(   rr9   s         r=   rE   rE   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';<<r>   ac                F    t        | j                  | j                  |      S )NrA   )rE   r:   is_write)rH   r*   s     r=   argument_typerK      s    QVVQZZuEEr>   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 )r8   r:   r1   r   r2   r   r3   r   rD   r   r   r'   r   r4   r%   r   returntype_typer9   r;   r   r7   )r)   r?   rG   r9   s       r=   rO   rO      s    q 12A}vv!X66V]]"::<(7);<<&y'9:: !))VVv}}$W%%	Ax	 	ba	bqvvu5vv~L!HLL~4  
4QC8
99r>   rG   c                 D    t        | j                  | j                        S )NrN   )rO   r:   rJ   )rG   s    r=   return_typerQ      s    1661::66r>   rsc                     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   r!   )lenr   r   rQ   r   )rR   rG   s     r=   returns_typerU      sS    
2w!|	RA2a5!!262a;q>26776s   Aresult)fallback_namefrW   c                   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)r2   ).0rH   rG   s     r=   	<genexpr>zreturn_names.<locals>.<genexpr>   s#       *IQ!&& *Is   #&_returnr!   )	enumeratefuncreturnsr2   inplace	is_out_fn	argumentsoutanyschema_order_argumentsrT   append)rX   rW   ra   ir2   name_conflictrG   s         @r=   return_namesrk      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 Nr>   falsetrueztorch::executorch::nullopt{}z+torch::executorch::MemoryFormat::Contiguousztorch::executorch::kLong)FalseTrueNonez[]contiguous_formatlongdc                    | 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 )Nrq   rC   rn      r   ' r!   \"z\"ztorch::executor::nullopt[]{}z,Expected a list default '[...]' but found: ')r5   r1   r   r2   r   rT   r   default_exprr9   r   
startswithendswithr;   
ValueErrorJIT_TO_CPP_DEFAULTget)rt   r)   sri   s       r=   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''r>   cpp_no_default_argsmethodfaithfulhas_tensor_optionsc                >   dt         t        t        t        f   dt        t
           f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 )NrH   r+   c                 $    t        |       S )N)r   r   r   r   )argument)rH   r   r   r   r   s    r=   sub_argumentzargument.<locals>.sub_argument0  s!      31
 	
r>   memory_formatr.   )nctyper2   defaultr   z3Need to implement type resolution for TensorOptions)r   r   r   r   r   r   r1   r2   r    possibly_redundant_memory_formatr   r   r:   rK   rF   r   r    )rH   r   r   r   r   r   r*   r   s    ````   r=   r   r   (  s    	
1<?@	
	g	
 	
 !X66_$);"CCEFFE!%66,,1F"199aff5G$Qe4VV	
 	
 
A-	.!"WXX	A|	$I

++Qr>   rd   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_outre   r   tensor_options
no_default)rd   r   r   r   argsrH   rG   s          r=   rd   rd   X  s     IKDI%%&IMM"IMM"I%%& 
A(77tC 3
A #)
 	*
 
 
s   7<B7N)7typingr   r   r   r   r   torchgenr   torchgen.api.typesr	   r
   r   r   r   r   r   r   r   r   r   r   torchgen.modelr   r   r   r   r   r   r   r   r   r   r   torchgen.utilsr    typesr"   r#   r$   r%   r&   r'   r/   r8   rE   rK   rO   rQ   rU   r5   rk   r   r   r   rd    r>   r=   <module>r      s   7 7        ( . ).	!=!= != "&	!=
 j!=Z ).2=2= 2= 	2=
 "&2= 2=lFX F FZ F:t : :% :B76 7e 7
8Xf% 8% 8 =E N c RU B (
F& %(C %(D %(S %(V-X-|;<- S- 	-
 - - 
']-`  	
 S 
']r>   