
    i.                        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JrJ	r	J
r
Jr  S SKrS SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr   " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r"S\#S\#S\$4S jr%S\RL                  S\#S\#S\#S\#S\#S\$S\RL                  4S  jr'S\RL                  S\#S\
\#   S\
\#   S\
\#   S\\#   S\$S\RL                  4S! jr(S"\RR                  S\
\#   S\
\#   S\
\#   S\
\#   S\$S\RL                  4S# jr*S$\S\4S% jr+S&\RX                  RZ                  S\\.\#4   4S' jr/S(\RX                  R`                  S\RX                  Rb                  4S) jr2S(\RX                  R`                  S*\RX                  Rb                  S\$4S+ jr3S&\RX                  RZ                  S*\RX                  Rb                  S\\RL                  S4   4S, jr4S-\RX                  RZ                  S.\RX                  RZ                  SS4S/ jr5 S>S0\S1\.S2\.SS4S3 jjr6 S>S4\7S1\.S2\.SS4S5 jjr8\ " S6 S75      5       r9S\94S8 jr:S9\S:\;\S;4   S<\<\.\4   S\	\;\;\S;4   \<\.\4   4      4S= jr=g)?    N)	dataclass)DictListOptionalTupleUnion)ExecutorchProgramManagermemory)ops)EdgeOpOverloadEdgeOpOverloadPacket)Argument)tabulate)get_signature_for_torch_op)tree_flattenc                       \ rS rSrSrg)MemoryPlanningAlgoFailure    N__name__
__module____qualname____firstlineno____static_attributes__r       d/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/cadence/aot/utils.pyr   r          r   r   c                       \ rS rSrSrg)TypeMismatchError    r   Nr   r   r   r   r    r        r   r   r    c                   B   ^  \ rS rSrSS\S\\   SS4U 4S jjjrSrU =r	$ )	NumericalMismatchError$   Nmsg	rms_valuereturnc                 0   > X l         [        TU ]	  U5        g N)r&   super__init__)selfr%   r&   	__class__s      r   r+   NumericalMismatchError.__init__%   s    "r   )r&   r)   )
r   r   r   r   strr   floatr+   r   __classcell__r-   s   @r   r#   r#   $   s&    C HUO t  r   r#   c                   4   ^  \ rS rSrS\SS4U 4S jjrSrU =r$ )NumericalMismatchExpectedError*   rms_expected_valuer'   Nc                 .   > Xl         [        TU ]	  5         g r)   )r6   r*   r+   )r,   r6   r-   s     r   r+   'NumericalMismatchExpectedError.__init__+   s    "4r   )r6   )r   r   r   r   r0   r+   r   r1   r2   s   @r   r4   r4   *   s    5 T  r   r4   c                       \ rS rSrSrg)ISSRuntimeFailure0   r   Nr   r   r   r   r:   r:   0   r   r   r:   groupsin_channelsr'   c                 "    U S:  =(       a    X:H  $ )zCheck whether a convolution is depthwise.

Depthwise convolution has groups == in_channels with groups > 1.
When groups == 1, it is always a regular convolution even if in_channels == 1.
   r   )r<   r=   s     r   is_depthwise_convr@   4   s     A:/&//r   in_sizeout_channelsstridepaddingdilationkernel_sizechannel_lastc                     [        U 5      S:X  d   eU(       a  U u  pxn	OU u  pynUSU-  -   XES-
  -  -
  S-
  U-  S-   n
U(       a  [        R                  " XzU45      $ [        R                  " XqU
45      $ )N      r?   lentorchSize)rA   rB   rC   rD   rE   rF   rG   NLClouts              r   get_conv1d_output_sizerS   >   s     w<1aa GOh/::Q>6IAMDzz1L122::q-..r   c                 V   [        U 5      S:X  d   eU(       a  U u  pxpOU u  pzpUSUS   -  -   US   US   S-
  -  -
  S-
  US   -  S-   nU	SUS   -  -   US   US   S-
  -  -
  S-
  US   -  S-   nU(       a  [        R                  " X{X45      $ [        R                  " U S   XU45      $ )N   rJ   r   r?   rK   )rA   rB   rC   rD   rE   rF   rG   rO   HWrQ   houtwouts                r   get_conv2d_output_sizerZ   V   s     w<1
a
a GAJ!A0B!CCaGF	M 	
D GAJ!A0B!CCaGF	M 	
D zz1D788::wqz<t<==r   inputc                 |   [        U R                  5      S:X  a  U(       a  SOSnU R                  U5      n U R                  S   nU(       a  U R                  S   OU R                  S   nU(       a  U R                  S   OU R                  S   n	U(       a  U R                  S   OU R                  S   n
U	SUS   -  -   US   US   S-
  -  S-   -
  US   -  S-   nU
SUS   -  -   US   US   S-
  -  S-   -
  US   -  S-   nXS   -  US   -  n[        R                  " X{U-  U45      n[        R                  " U5      $ )NrI   r?   rJ   r   )rL   shape	unsqueezerM   rN   )r[   rF   rE   rD   rC   rG   
height_dim
batch_sizen_input_planeinput_heightinput_widthoutput_heightoutput_widthn_output_planeoutput_sizes                  r   get_im2row_output_sizerh   q   sH    5;;1&QA

+QJ&2EKKNAM%15;;q>u{{1~L$0%++a.ekk!nKq71:~%!A8J)Ka)OP	M 	a'!*n${1~7I(JQ(NO	L #^3k!nDN**j,*FWXK::k""r   edge_opc                     U R                   U R                  R                  R                  S5      S   p![	        [	        [
        R                  U5      U5      nU$ )Nz::r?   )	namespace_schemanamesplitgetattrexir_opsedge)ri   edge_op_namespaceedge_op_nameedge_op_overload_packets       r   get_edge_overload_packetru      sS    ""4(+ $ &01< #"r   graph_modulec                    0 nU R                   R                   H  nUR                  S:X  d  M  UR                  [        R
                  :X  d8  UR                  R                  S:X  d  UR                  [        R                  :X  a  Mm  UR                  R                  U;   a"  XR                  R                  ==   S-  ss'   M  SXR                  R                  '   M     U$ )Ncall_functionallocr?   )
graphnodesoptargetoperatorgetitemr   r
   view_name)rv   freqnodes      r   get_ops_countr      s    D""((77o% x///;;''72;;&++-{{  D([[&&'1,' +,[[&&' ) Kr   rz   c                     U c   S5       e[        [        [        U R                  5      5      5      nU(       a)  UR                  S:X  a  [        UR                  5      S:X  d   S5       eU$ )Nz#Cannot get output of an empty graphoutputr?   zFailed to find output node)nextiterreversedr{   r|   rL   args)rz   output_nodes     r   get_output_noder      sc    CCCtHU[[123K(2s;;K;K7LPQ7Q$#$Qr   r   c                 T    [        U 5      nU[        UR                  S   5      S   ;   $ )Nr   )r   r   r   )rz   r   r   s      r   is_node_in_flattened_outputr      s,    !%(K< 0 0 34Q777r   c                 J    [        U[        [        [        45      (       a  [        R
                  " S/5      $ UR                  R                  S5      nUb  UR                  $ UR                  S:X  a!  [        XR                  5      nUR                  $ g! [         a     gf = f)z
Return the shape of the tensor correspnding to node. If the node has a
tensor spec, return the shape from the metadata. If the node is a param,
return it shape. Otherwise return None.
r?   valNget_attr)
isinstancer0   intboolrM   rN   metagetr]   r|   ro   r}   RuntimeError)rv   r   fake_tensor	attr_nodes       r   	get_shaper      s    dUC.//::qc?"iimmE*"$$$77j kk:I??" s   6B )B #0B 
B"!B"
to_edge_gmfinal_gmc           	         [        U 5      n[        U5      n/ nU H  nXS;  d  M
  UR                  U5        M     U Vs/ s H  nUX6   Xb;   a  X&   OS/PM     nn[        US SS9nU Vs/ s H  nUSXb;   a  X&   OS/PM     n	n[        R                  " S[        U/ SQSS9-   5        U/ :w  a"  [        R                  " [        U	/ S	QSS95        g g s  snf s  snf )
Nr   c                     U S   $ Nr?   r   )xs    r   <lambda> print_ops_info.<locals>.<lambda>   s    qtr   T)keyreverse
)z3Final Operators                                    Final GraphTo_edge GraphExport Graphoutline)headerstablefmt)z3Deleted Operators                                  r   r   r   )r   appendsortedlogginginfor   )
r   r   to_edge_ops_countfinal_ops_countremoved_opskr|   	ops_countsorted_ops_countremoved_ops_counts
             r   print_ops_infor      s.    &j1#H-OK#q!  " "B	 %'%<!!	

 "   i^TJ  B	 %'%<!!	

    LL
 	

	
 b! #		
 Is   C*Cprog
model_name
output_dirc                    UR                  S5      (       a  UnO"[        R                  R                  X! S35      n [	        US5       nU R                  U5        [        R                  " SU 35        S S S 5        g ! , (       d  f       g = f! [         a&  n[        R                  " SU SU 35         S nAg S nAff = f)Nz.ptewbSaved exported program to Error while saving to : )
endswithospathjoinopenwrite_to_filer   r   	Exceptionerror)r   r   r   filenamefilees         r   save_pte_programr     s     6""77<<
l$,?@@(D!Tt$LL5hZ@A "!!  @.xj1#>??@s5   B 	+A=4B =
BB B 
B>B99B>bufferc                    UR                  S5      (       a  UnO"[        R                  R                  X! S35      n [	        US5       nUR                  U 5        S S S 5        [        R                  " SU 35        g ! , (       d  f       N(= f! [         a&  n[        R                  " SU SU 35         S nAg S nAff = f)Nz.bpter   r   r   r   )
r   r   r   r   r   writer   r   r   r   )r   r   r   r   fr   s         r   save_bpte_programr   -  s    
 7##77<<
l%,@AB(D!QGGFO "1(<= "!  B.zl"QC@AABs/   B 	A=!B =
BB 
B>B99B>c                       \ rS rSr% \\   \S'   Sr\\\      \S'   Sr	\\\
      \S'   Sr\\\      \S'   Sr\\
   \S'   Sr\\R                     \S'   SS
 jrS	\4S jrS\S	\4S jrSrg)MemoryConfigi>  memory_sizesNmemory_alignmentsmemory_names
base_addrsmemory_xml_pathMemorySpacer'   c                 \    U R                   c  S/[        U R                  5      -  U l         g g r   )r   rL   r   r,   s    r   __post_init__MemoryConfig.__post_init__J  s-    !!)&'S3t/@/@+A%AD" *r   c                 2    [        U R                  5      S-   $ r   )rL   r   r   s    r   get_num_memoriesMemoryConfig.get_num_memoriesO  s    4$$%))r   exir_idc                 &    U R                   US-
     $ r   r   )r,   r   s     r   get_sizeMemoryConfig.get_sizeS  s      1--r   )r   )r'   N)r   r   r   r   r   r   __annotations__r   r   r   r/   r   r   r   enumEnumr   r   r   r   r   r   r   r   r   >  s    s)-1xS	*1 )-L(49%,&*Jc#*%)OXc])'+K$))$+B
*# *. . .r   r   c                      [        S/S9$ )Nl       @ r   )r   r   r   r   get_default_memory_configr   X  s    l^44r   r|   r   .kwargsc                 F   [        U R                  5      n/ nU H'  n UR                  " U0 UD6  UR                  U5        M)     [        U5      S:w  a  gUS   R                  " U0 UD6nUR                  5         UR                  UR                  4$ ! [         a     M  f = f)z>Populates optional args and binds args/kwargs based on schema.r?   Nr   )	r   _opbindr   	TypeErrorrL   apply_defaultsr   r   )r|   r   r   torch_op_schemasmatched_schemascandidate_signature
bound_argss          r   rebindr   \  s     2"&&9O  0	$$d5f5""#67  0 ?q  #(($9&9J??J----  		s   #B
B B ) )>r   r   r~   r   dataclassesr   typingr   r   r   r   r   rM   executorch.exirr	   r
   executorch.exir.dialects._opsr   rp   "executorch.exir.dialects.edge._opsr   r   executorch.exir.pass_baser   r   torch.fx.operator_schemasr   torch.utils._pytreer   r   r   r    r#   r4   r:   r   r   r@   rN   rS   rZ   Tensorrh   ru   fxGraphModuler/   r   GraphNoder   r   r   r   r   bytesr   r   r   tupledictr   r   r   r   <module>r     s      	 ! 5 5  < 9 S .  @ ,		 			 	Y Y 		 	0c 0 0 0/ZZ// / 	/
 / / / ZZ/0>ZZ>> #J> 3Z	>
 Cj> c> > ZZ>6#<<#s# Cj# 3Z	#
 #J# # ZZ#8#n #9M # 4 4 c3h ,588>> ehhmm 8uxx~~ 8UXX]] 8t 8((&&.3hhmm
5::t:>
$$>
hh"">
 
>
D HJ@
"@03@AD@	@& BBB B 
	B" . . .25< 5..#HcM2.<@h<O.eE(C-($sH}*==>?.r   