
    i               
       X   S SK r S SKJrJrJr  S SKrS SKrS SKrS SK	r
S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJr  S
\R<                  S\\ S4   S\RB                  4S jr"S\RF                  RH                  S\S\\%\4   S\4S jr&S\RF                  RH                  S\S\4S jr'S\RF                  RH                  S\S\S\4S jr(S\RF                  RH                  S\S\S\4S jr)S\RF                  RH                  S\S\S\4S jr*S\RF                  RH                  S\RF                  RV                  S\,4S jr-S\RF                  RH                  S\S\S\RF                  RV                  S-  S\4
S jr.S\RF                  RH                  S\S\4S jr/g)    N)AnycastDict)NodeVisitor)is_shape_op_node)TosaArg)TosaSpecification)
tosa_shape)
get_bufferget_lifted_tensor_constant	get_param	is_bufferis_lifted_tensor_constantis_param)ExportedProgramtensor	dim_order.returnc                    U R                  5       R                  5       R                  5       n U R                  [        R
                  :X  aL   SS KnU R                  [        R                  5      R                  5       R                  UR
                  5      nOU R                  5       n[        R                  " XA5      $ ! [         a  n[        S5      UeS nAff = f)Nr   zTml_dtypes is required to serialize bfloat16 tensors for TOSA. Have you run setup.sh?)detachcpu
contiguousdtypetorchbfloat16	ml_dtypesImportErrorRuntimeErrorviewuint16numpynp	transpose)r   r   r   e	np_tensors        c/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/arm/process_node.py_tensor_to_numpy_with_dim_orderr'      s     ]]_  "--/F||u~~%	
 KK-335::9;M;MN	LLN	<<	--  	f	s   B= =
CCCnode
tosa_graphnode_visitors	tosa_specc                 0    U R                    Vs/ s H  n[        XC5      PM     nn [        X5      n[	        [
        R                  U5      nUR                  (       di  [        U 5      (       dY  UR                  R                  R                  UR                  [        UR                  UR                  5      UR                  5        U R                   ["        R$                  :X  a  g U R                   R&                  U;   a+  X R                   R&                     R)                  U UUU5        g [+        SU R                    SU 35      es  snf ! [         a  n[        SU  35      UeS nAff = f! [         a  n[        SU R                   S35      UeS nAff = f)NzFailed processing args to op:
z!Failed processing call_function: +. Is the original torch function supported?zUnknown operator z for TOSA : )argsr   
ValueErrornamer   tsTosaSerializermultiple_output_namesr   
currRegioncurrBasicBlock	addTensorr
   shaper   r   targetoperatorgetitem__name__define_noder   )r(   r)   r*   r+   arginputsr$   outputs           r&   process_call_functionr@   0   sm   J59YY?Yc'#)Y?
) b''4J''0@0F0F,,66KKFLL&2B2BCV\\	

 {{h&&& {{},kk**+77		
 .t{{m<	{STTA @ J:4&ABIJ  /		{ ;8 8
 	s>   E EE E, E 
E)E$$E),
F6FFc                 .    [        X5      nUR                  nUR                  n[
        R                  " UR                  [        XV5      UR                  SS9nUR                  U5        g! [         a  n[        SU R                   S35      UeSnAff = f)zSerialize an input node.z%Failed processing input placeholder: r-   N)data)
r   r/   r0   r7   r   r1   TosaSerializerTensorr
   r   addInputTensor)r(   r)   r+   tosa_argr$   input_shapeinput_dim_orderr   s           r&   process_inputsrH   [   s    4+ ..K((O$$;0	F f%  3DII; ?8 8
 	s   A+ +
B5BBedge_programc                     [        X5      n[        X 5      n[	        U[
        R                  5      (       d.  [        SU R                   S[        U5      R                   35      e[        XdR                  5      nUR                  UR                  UR                  XtR                  S9  g! [         a  n[        SU R                   S35      UeSnAff = f)z)Serialize bias and non-quantized weights.z)Failed processing parameter placeholder: r-   NzExpected parameter '' to be a torch.Tensor, got r0   )r   r/   r0   r   
isinstancer   Tensor	TypeErrortyper;   r'   r   addConstr7   r   )r(   r)   rI   r+   rE   r$   parameter_dataparameter_valuess           r&   process_inputs_to_parametersrT   u   s    4+ |2Nnell33"499+-IN#,,-/
 	
 7** 0@}}  !  7		{ C8 8
 	   B* *
C4CCc                     [        X5      n[        X 5      n[	        U[
        R                  5      (       d.  [        SU R                   S[        U5      R                   35      e[        XdR                  5      nUR                  UR                  UR                  XtR                  S9  g! [         a  n[        SU R                   S35      UeSnAff = f)zSerialize quantized weights.z&Failed processing buffer placeholder: r-   NzExpected buffer 'rK   rL   )r   r/   r0   r   rM   r   rN   rO   rP   r;   r'   r   rQ   r7   r   )r(   r)   rI   r+   rE   r$   buffer_databuffer_valuess           r&   process_inputs_to_buffersrY      s    4+ \0Kk5<<00		{*FK ))*,
 	
 4KASASTMX^^]    4TYYK @8 8
 	rU   c                     [        X5      n[        X 5      n[	        UUR
                  5      nUR                  UR                  UR                  XtR                  S9  g ! [         a  n[        SU R                   S35      UeS nAff = f)Nz6Failed processing lifted tensor constant placeholder: r-   rL   )	r   r/   r0   r   r'   r   rQ   r7   r   )r(   r)   rI   r+   rE   r$   r   tensor_valuess           r&   )process_inputs_to_lifted_tensor_constantsr\      s    4+ (;F3M
 X^^]    DTYYK P8 8
 	s   A 
B(BBcontaining_graph_modulec                 \    U R                   S:w  a  gU R                  R                  SS5      $ )zSDetermines whether 'node' is an input to a submodule of
'containing_graph_module'.
placeholderFis_input)opmetaget)r(   r]   s     r&   _is_submodule_inputrd      s(     ww-99==U++    c                    U R                   U R                  :w  a&  [        SU R                    SU R                   S35      e[        U R                  5      S:w  a  [        SU R                    S35      eU R                   UR
                  R                  ;   a  [        XU5        g	U(       a  [        X5      (       a  [        XU5        g	[        X 5      (       a  [        XX$5        g	[        X 5      (       a  [        XX$5        g	[        X 5      (       a  [        XX$5        g	U R                   UR
                  R                  ;   a  [!        S5      e[#        SU R                    S35      e)
zAWrapper for processing and serializing all types of placeholders.zPlaceholder name 'z' does not match target ''r   zPlaceholder 'z' must not have default valueszEPlaceholder is of type 'lifted custom object' which is not supported.z' is of unknown type.N)r0   r8   r/   lenr.   graph_signatureuser_inputsrH   rd   r   rT   r   rY   r   r\   inputs_to_lifted_custom_objsNotImplementedErrorr   )r(   r)   rI   r]   r+   s        r&   process_placeholderrm      s)    yyDKK +DT[[MQRS
 	
 499~=3QRSSyyL00<<<t3	 %8%W%Wt3	,	%	%$T|O	<	&	&!$LL	"<	6	61l	
 
l22OO	O!S
 	
 ]499+5JKLLre   c                    [        [        [        R                  R                  S4   U R
                  S   5       HJ  n[        X25      nUR                  UR                  R                  R                  UR                     5        ML     g )N.r   )r   tupler   fxNoder.   r   addOutputTensorr4   r5   tensorsr0   )r(   r)   r+   r?   
output_args        r&   process_outputru      sd    uUXX]]C/0$))A,?V/
""!!0088I	
 @re   )0r9   typingr   r   r   r!   r"   r   torch.fxtosa_serializerr1   .executorch.backends.arm.operators.node_visitorr   *executorch.backends.arm.tosa.dialect.shaper   $executorch.backends.arm.tosa.mappingr   *executorch.backends.arm.tosa.specificationr	   "executorch.backends.arm.tosa.utilsr
   torch._export.utilsr   r   r   r   r   r   torch.export.exported_programr   rN   ro   intndarrayr'   rp   rq   strr@   rH   rT   rY   r\   GraphModuleboolrd   rm   ru    re   r&   <module>r      s    " "     F G 8 H 9  :.LL.%*38_.ZZ."(U
((--(U(U [()(U !	(UV&
((--&& !&4
((-- " !	<
((-- " !	8
((-- " !	0,
((--,27((2F2F,	, M
((-- M M " M #XX11D8	 M
 ! MF
 
C 
DU 
re   