
    iw                        S SK r S SKrS SKrS SKrS SKrS SKJrJrJrJ	r	J
r
J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Jr  S SKJr  S S	KJrJrJ r J!r!J"r"  S S
K#J$r$J%r%J&r&  S SK'J(r(  S SK)J*r*  S SK+J,r,J-r-J.r.J/r/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r7  S SK8J9r9  S SK:J;r;  S SK<J=r=J>r>  S SK?J@r@  S SKAJBrBJCrCJDrD  S\R                  R                  S\\G\R                  4   S\IS\G4S jrJS\K4S jrL " S S\R                  5      rNg)    N)CallableDictListOptionalOrderedDictTuple)exir)dq_ops)QNNIntermediateDebugger)
QnnBackend)ModuleQConfig
QuantDtype)QcomChipset)
QCOM_DTYPEQCOM_PASS_ACTIVATE_KEY"QCOM_PASS_ARGS_KWARGS_DEFAULTS_KEY
QCOM_SCALEQCOM_ZERO_POINT) get_qnn_context_binary_alignmentget_soc_to_chipset_map"to_edge_transform_and_lower_to_qnn)	Inspector)	TimeScale)generate_inputsget_backend_typemake_output_dirmake_quantizer	SimpleADB)CompileSpec)get_delegates)ops)
ExportPass)MemoryPlanningPass)ExecutorchProgramExecutorchProgramManager)
PassResult)convert_pt2eprepare_pt2eprepare_qat_pt2emoduleinputs	quantizedartifact_dirc                 4   [         R                  R                  SS 5      n[         R                  R                  SS 5      nU(       d   S5       eU(       d   S5       e[        UR	                  5       5      n[
        R                  R                  X5      n[
        R                  R                  Xs S35        U(       a  / nUR                  5        HK  u  pU SU	 S3nU
R                  5       R                  5       R                  U5        UR                  U5        MM     [        U S3S	5       nUR                  S
R!                  U5      5        S S S 5        SnUR                  5        VVs/ s H<  u  pSU S[#        [        UR$                  5      5      R'                  S
S5      SS  3PM>     nnnSU SU SU S3SU S3/UQU(       a  SU S3OSPSPSU S3PU SU S3PSU S3PSU 3PSPSU S3PU SU S 3PS!U S"U S#3PS$U S%U S&3PS'PS(U S)3Pn[(        R*                  " S
R!                  U5      S*S+S*S,9n[         R,                  R/                  U S-35      (       d   [1        UR2                  5      5       eg ! , (       d  f       GN:= fs  snnf ).NQNN_SDK_ROOTANDROID_NDK_ROOT2QNN_SDK_ROOT was not found in environment variablez6ANDROID_NDK_ROOT was not found in environment variablez/jit_module.pt/.raw/input_list.txtw x86_64-linux-clangz-d 'z'     zsource z/bin/envsetup.sh;/bin/z/qnn-pytorch-converterz-i z--input_list z--preserve_ioz-o z/model.cpp;z/qnn-model-lib-generatorz-c z
/model.cppz-t z-l modelz/model_libs;z/qnn-context-binary-generatorz--model z/model_libs/z/libmodel.soz
--backend /lib/z/libQnnHtp.soz--binary_file model_ctxz--output_dir ;T	/bin/bashshell
executablecapture_outputz/model_ctx.bin)osenvirongettuplevaluestorchjittracesaveitemsdetachnumpytofileappendopenwritejoinstrshapereplace
subprocessrunpathisfileprintstderr)r*   r+   r,   r-   qnn_sdkndk
inputs_tup
jit_module
input_listnamedata	file_nameftargetkv
inputs_strcmdsresults                      g/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/qualcomm/tests/utils.pygenerate_context_binaryrm   <   s    jjnn^T2G
**..+T
2CHHH7HHH3v}}'J4J	IINN:~>? 
 ,,.JD'.$t4IKKM!((3i( )
 \N/2C8AGGCHHZ() 9 "F LLN"DA qcCagg'//R82>?@"   '+)5 6	8 l^>* 
 :C-~_5 	 l^;' )5 89 l^:& fX 	 l^<(" )5 =>#$ <.VHLA%& WIU6(-8'( 	")* ~Q'+D. ^^	F 77>>\N.9::PE&--<PP:M 98
s   .!J,AJ
Jctx_binc                 ,   [         R                  R                  SS 5      nU(       d   S5       e[        R                  " 5        n[        U S3S5       nUR                  U 5        S S S 5        SnU SU S3SU S3S	U S
3/n[        R                  " SR                  U5      SSSS9n[         R                  R                  U S
35      (       d   [        UR                  5      5       e S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr/   r1   z/ctx.binwbr7   r;   z/qnn-context-binary-utilityz--context_binaryz--json_filez	/ctx.jsonr6   Tr>   r?   )rC   rD   rE   tempfileTemporaryDirectoryrQ   rR   rW   rX   rS   rY   rZ   r[   r\   )rn   r]   tmp_dirbinary_filerf   rj   rk   s          rl   validate_context_binaryru   }   s   jjnn^T2GHHH7 
	$	$	&'WIX&-g& . & iuVH$?@ix iy!
 HHTN"	
 ww~~	344JeFMM6JJ4' 
'	&-- 
'	&s%   DC4&BD4
D	>D
Dc            !          \ rS rSr% Sr\\S'   Sr\\S'   Sr\	\S'   Sr
\	\S'   Sr\	\S'   S	r\\S
'   S	r\\   \S'   \" 5       rSrSrSrSr\	\S'   Sr\	\S'   Sr\	\S'   Sr\	\S'   Sr\	\S'   Sr\	\S'   Sr\\S'   Sr\	\S'   Sr\	\S'   Sr \	\S'   Sr!\	\S'   Sr"\\S'   Sr#\	\S'   Sr$\	\S'   Sr%\	\S '   Sr&\	\S!'   Sr'\\S"'   Sr(\\S#'   Sr)\\S$'   Sr*\	\S%'   Sr+\	\S&'   Sr,\\S''   S(r-\\S)'   S*r.Sr/Sr0\	\S+'   \1S, 5       r2S- r3S.\4Rj                  Rl                  S/\7Rp                  S0\9\4Rt                     S1\	S2S	4
S3 jr;S`S2\4S4 jjr<S5 r=             SaS.\4Rj                  Rl                  S7\9\4Rt                     S8\>\?-  S9\	S:\@S;\@S<\@S=\9S>\9S?\S@\\	   SA\	SB\A\B\	/S	4      SC\SD\@SE\C4 SF jjrD             SbS.\4Rj                  Rl                  S7\9\4Rt                     SH\@S:\@S;\@SD\@SI\SJ\A\E   SK\FSL\FSM\SN\GSA\	SB\A\B\	/S	4      SC\4SO jjrHSGSS6\IRF                  S	SS	S	4S.\4Rj                  Rl                  S0\9\4Rt                     SP\A\   SQ\A\   SR\9\B   SS\ISN\GST\SU\G\	\94   SV\A\\9\B\J4         S2\4R                  R                  4SW jjrMSGSS6\IRF                  S	S	4S.\4Rj                  Rl                  S0\9\4Rt                     SP\A\   SQ\A\   SR\9\B   SS\ISU\G\	\94   SV\A\\9\B\J4         S2\4R                  R                  4SX jjrNSY\4Rj                  Rl                  SZ\4Rj                  Rl                  S0\9\4Rt                     S2\4R                  R                  4S[ jrOS\ rPS]\@4S^ jrQS_rRg	)cTestQNN   r   rtolatolr8   hostdevicebuild_folderNmodelcompiler_specsF	localhosti  executorch_rootr-   image_dataset
qa_datasetsentence_datasetpretrained_weightenable_profileop_package_dirrf   
model_namebackendonline_prepare8a8wuse_8a8w16a16w
use_16a16w16a4w	use_16a4woss_reposhared_bufferenable_x86_64compile_onlypre_gen_ptellama_artifactsdump_intermediate_outputsg        inference_speedzoutputs/inference_speed.txtdirect_build_folderc                 l   U R                   (       d  U R                  (       d  [        [        R                  " S5      U R
                  U R                  / SU R                  U R                  U R                  U R                  U R                  S9
nUR                  [        U R                  5      1SS9  g g g )Nr/   #/data/local/tmp/qnn_executorch_test
r]   
build_pathdirect_mode_build_pathpte_path	workspace	device_idhost_id	soc_model
error_onlyrf   T)backendsinit_env)r   r   r   rC   getenvr}   r   r|   r{   r~   r   rf   pushr   r   )clsadbs     rl   
setUpClassTestQNN.setUpClass   s      )9)9		.1++'*'>'>?**))>>zzC HH*3;;78   *:     c           
         U R                  [        U5      [        U5      :H  5        [        [        U5      5       HJ  nU R                  [        R                  " X   X#   U R
                  U R                  S9SX#    SX    3S9  ML     g )N)rz   ry   zref_output:
z

model_output:
msg)
assertTruelenrangerH   allcloserz   ry   )selfmodel_output
ref_outputis       rl   _assert_outputs_equalTestQNN._assert_outputs_equal   sy    J3|+<<=s:'AOO OZ] $JM?2EloEVW	   (r   r*   bufferr+   dir_namereturnc                    U" U6 n/ n[        U[        R                  5      (       a#  UR                  US   R	                  5       5        Oc[        U[
        [        45      (       a)  U H"  nUR                  UR	                  5       5        M$     OUR                  UR	                  5       5        U S3n[        US5       n	U	R                  U5        S S S 5        Xh4$ ! , (       d  f       Xh4$ = f)Noutz/qnn_executorch_test.pterp   )	
isinstancecollectionsr   rP   rM   listrF   rQ   rR   )
r   r*   r   r+   r   r   ref_outputsoutput	pte_fnamefiles
             rl   _save_model_and_expected_output'TestQNN._save_model_and_expected_output   s     V_
 j+"9"9::z%0779:
T5M22$""6==?3 % z0023j 89	)T"dJJv # %% #" %%s   >C
C+c                 V    Uc  / OUn[        U R                  U R                  /UQ5      $ N)allr   r-   )r   
conditionss     rl   required_envsTestQNN.required_envs   s<    %-R:
$$!! 
 	
r   c                    UR                  SU R                  SU R                  SU R                  S[	        U R
                  5      S[	        S5      SU R                  /5        U R                  (       a  UR                  S/5        O.U R                  (       a  UR                  S	U R                  /5        U R                  (       a  UR                  S
U R                  /5        O#U R                  (       a  UR                  S/5        U R                  (       a  UR                  S/5        U R                  (       a  UR                  S/5        U R                  (       a  UR                  SU R                  /5        g g )Nz--modelz--targetz--ipz--portz--seedif  z	--backendz--compile_onlyz--devicez--hostz--enable_x86_64z--online_preparez--shared_bufferz--pre_gen_pte)extendr~   rf   iprT   portr   r   r|   r{   r   r   r   r   )r   rj   s     rl   add_default_cmdsTestQNN.add_default_cmds  s   

DIID		
  KK)*+[[KKT[[1299KK499-.KK*+,KK+,-KK*+,KK$*:*:;< r    sample_inputsexecutorch_progetrecord_pathexpected_profile_eventsexpected_intermediate_eventsmethod_indexinput_encodingsoutput_encodingscheck_io_shapeop_package_paths
extra_cmdsoutput_callbacksave_inference_speedexpected_compared_eventsqnn_intermediate_debuggerc                   ^ ^^^^	^^^%^&^'^(^) [         R                  " 5        nT R                  UUR                  UU5      u  m)nU S3m'/ m(U S3m&U S3m%U'U	U(U)4S jnU&UUU 4S jnU%U&UUUU 4S jn[	        U5      n[        U5       H^  u  nnUU   R                  U[           5      R                  U[           5      R                  5       R                  U[           5      UU'   M`     T R                  (       Ga  [        USU/5        [        T'5        Sn[         R"                  R%                  S	S 5      nU(       d   S
5       eT R&                  n[         R(                  R+                  T R&                  5      (       a  O=[         R(                  R-                  [         R.                  " 5       T R&                  5      nU S3SUSU S3ST'S[1        U5      /	nT R2                  (       a  UR5                  S5        UUR7                  5       -  nU(       a  UST R8                  /-  nU
(       a  UT)S.nUR;                  5        H  u  nn[=        U SU S3S5       n U HB  n!U R?                  [1        [A        U!RB                  5      5      RE                  S5      S-   5        MD     S S S 5        UR5                  SU S35        UR5                  U SU S35        M     [G        [         R"                  5      n"U SU SU S3U"S'   [H        RJ                  " U[H        RL                  [H        RN                  SU"US 9n#U(       a  U" U#5        T RQ                  U#RR                  S!S"U#RR                   S#U#RT                   35        U" 5         T RW                  T(T)5        TS$:w  a  U" 5         TS$:w  a  U" 5         U(       aD  [=        U ST R8                   3S%5       n [Y        U R[                  5       5      T l.        S S S 5        GOGO[_        [         R`                  " S	5      T R&                  T Rb                  US&T Rd                  T Rf                  T Rh                  T Rj                  T R2                  U
(       a	  S' U 5       OS U
(       a	  S( T) 5       OS T Rl                  S)9n$U$Ro                  U/US*[q        T Rr                  5      1S+9  U$=Rt                  U-  sl:        U(       a"  U$=Rt                  S,T R8                   3-  sl:        U$Rw                  X}S-9  U$Ry                  UUS.9  T RW                  T(T)5        TS$:w  a  U$R{                  T&US/9  TS$:w  a  U$R}                  T&T%US/9  U(       aB  [=        U ST R8                   3S%5       n [Y        U R[                  5       5      T l.        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N)= f! , (       d  f       N:= f! , (       d  f       g = f)0Nz/outputsz/etdump.etdpz/debug_output.binc                    > SSK Jn   [        [        S [        R
                  " T5       5       5      5       GH  u  p[        T5      S:w  a  TU   OS nUc  T
U   R                  5       R                  O
X[              n[        R                  R                  TU5      n[        R                  " XTS9n[        R                  " U5      R!                  T
U   R"                  5      nUbK  UR%                  [        R&                  5      R)                  U[*           5      R-                  U[.           5      nT	R1                  U5        GM     g )Nr   )torch_to_numpy_dtype_dictc              3   T   #    U  H  oR                  S 5      (       d  M  Uv   M      g7f)r3   N)endswith).0re   s     rl   	<genexpr>>TestQNN.verify_output.<locals>.post_process.<locals>.<genexpr>N  s     S&<

6@R11&<s   (	()dtype)$torch.testing._internal.common_utilsr   	enumeratesortedrC   listdirr   rN   r   r   rY   rS   npfromfilerH   
from_numpyreshaperU   tofloatsubr   mulr   rP   )r   r   re   encr   filenamer   
output_dirr   outputsr   s          rl   post_process+TestQNN.verify_output.<locals>.post_processH  s    &Sbjj&<SSDA 255E1F!1K*1-QUC ; $A,,.446:G 
  "ww||J:H[[?F"--f5==k!n>R>RSF"IIekk2 S_!56 SZ1 
 NN6*%r   c                     > [        TT[        R                  [        R                  S9n TR                  [	        U R                  5       R                  5      T:  5        g )N)etdump_pathetrecordsource_time_scaletarget_time_scale)r   r   CYCLESr   r   to_dataframeindex)	inspectorr  r   r   r   s    rl   validate_profile/TestQNN.verify_output.<locals>.validate_profilea  sP    % +*&/&6&6&/&6&6		 	..0667;RRr   c                  *  > [        TTS9n T	R                  U SS9nT
R                  [        U5      TST S[        U5       S3S9  UR	                  5        HW  u  p#T
R                  US   R                  [        R                  5      US	   R                  [        R                  5      5        MY     U R                   HS  nUR                  S
:X  d  M  T
R                  [        UR                  5      TST S[        UR                  5       S3S9  MU     g )N)r  debug_buffer_pathF)r  keep_qnn_layoutz0Unexpected number of compared events, expecting z
, but has z events.r   r   r9   Executez4Unexpected number of intermediate events, expecting )r   _match_tensorsassertEqualr   rL   r   r   rH   float32event_blocksrb   events)r  node_tensor_map_valueevent_blockdebug_output_pathr  r   r   r   r   s        rl   validate_intermediate_tensor;TestQNN.verify_output.<locals>.validate_intermediate_tensorl  sT   % +?P	 #<"J"J' #K #   (,JKcJddnor  tC  pD  oE  EM  N !  !0 5 5 7HA..aEMM2E!HKK4N !8 $-#9#9K"''94(( 2 238"VWsVtt~  @C  DO  DV  DV  @W  X  X`  !a )  $:r   zinput_list.txtr7   r/   r1   z6/examples/qualcomm/executor_runner/qnn_executor_runnerz--model_pathz--input_list_pathr4   z--output_folder_pathz--method_indexz--dump_intermediate_outputsz--performance_output_path)input_shapeoutput_shaper2   z.txtr5   z()
z--_pathr<   z/:z/libLD_LIBRARY_PATHT)stdoutr\   textenvcwdr   z1The process running qnn_executorch_runner return z
, STDOUT=
r:   rr   c              3   8   #    U  H  oR                   v   M     g 7fr   rU   r   tensors     rl   r   (TestQNN.verify_output.<locals>.<genexpr>  s     E4D&4D   c              3   8   #    U  H  oR                   v   M     g 7fr   r&  r'  s     rl   r   r)    s     @K&Kr*  )r]   r   r   r   r   r   r   r   r   r   expected_input_shapeexpected_output_shaperf   F)r+   filesr   r   z --performance_output_path )r   r   )host_output_pathcallback)r0  )?rq   rr   r   r   r   r   divr   addr   roundr   r   r   r   r   rC   rD   rE   r}   rY   isabsrS   getcwdrT   r   rP   splitinference_speed_output_pathrL   rQ   rR   rF   rU   stripdictrW   rX   PIPESTDOUTr  
returncoder   r   r   readr   r   r   r   r|   r{   r~   r   rf   r   r   r   r   executepullpull_etdumppull_debug_output)*r   r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r	  r  processed_inputsr   r   rf   r]   r}   cmd
shape_inforb   tensorsre   tr"  procr   r  r  r   r   r   s*   `   ```  `     ``                    @@@@@rl   verify_outputTestQNN.verify_output%  s   & ((*g 44&&	 $9H-JG$I\2K#*)+< =+ +2	 	 2  $M2#O43$Q'SZ)S_-.UWRJ( !# 5 !!!)9<L;MN
+-**..>T TTw#0077==!2!233 $&77<<		T=N=N#OL $n$Z["'i/*$% 11JJ<=z''))'388 C
 "'7(3"J *4)9)9);g!WIQtfD"93?1%, !E!''N(;(A(A$(G$(N O &- @ 

RvU#34

gYavT#:; *< 2::&,39E&L>QU)V%&!~~%??%,, ##D)  OOGGX Y {{m% **7K@ +b0$&/2502'")1T%E%E$FG/4QVVX,  (  IIn5#00+/+C+C&C"kk II"jj#.2.L.L * F4DE! * AK@!;;+. ,-*".t||<=	   *,'NN5d6V6V5WXN W'LI**7K@*b0OOK:JOK/25))#)!= * 
 (")1T%E%E$FG/4QVVX,A +*F @?N l A +*sW   H6WA	V)!D/WV;/F
W9WW)
V83W;
W		W
W	W
W+Texpected_partitionsassert_output_equal
passes_jobskip_node_id_setskip_node_op_setskip_mutable_bufferdynamic_shapesc                 `   [        UUU R                  UUU	U
UU R                  S9	nS nUS:w  a  [        UR	                  5       R
                  5      n[        U5      S:X  d   S5       eUS   n[        UR	                  5       R                  UR                  5      nUR                  R                  5       n[        5       nUR                  US9  UR                  " U6   U R                  =(       d    U R                   (       + nUR#                  [$        R&                  " [)        UUS9[+        5       S95      nU R-                  [        UR.                  R0                  S   R2                  5      U5        [5        U5       HQ  nU R-                  UR.                  R0                  S   R2                  U   R6                  [8        R:                  5        MS     S	nU R                  (       a  UR=                  5       R?                  U5        U(       d  US:w  d  US:w  a  U RA                  UUUUUUUUUUUS
9  g g )N)rP  rL  rM  rN  rO  generate_etrecordr:   r9   zLength not correctr   )edge_module)alloc_graph_inputalloc_graph_output)memory_planning_passsegment_alignmentetrecord.bin)r*   r   r   r   r   r   r   r   r   r   r   )!r   r   r   r    exported_programgraphr   getattrgraph_modulerb   original_moduler*   r   set_edge_moduleintermediate_output_moduler   r   to_executorchr	   ExecutorchBackendConfigr#   r   r  executorch_programexecution_plan	delegatesr   idr   __name__get_etrecordrK   rH  )r   r*   r   rJ  r   r   r   rK  rL  rM  rN  rO  rP  r   r   r   delegated_programr   lowered_module_nodeslowered_module_nodelower_modulerS  allocate_io	exec_progr   r   s                             rl   lower_module_and_test_output$TestQNN.lower_module_and_test_output  s4   $ ?)!-- 3"11

 %)!'2-#0!224::$  +,1G3GG1"6q"9"!224AA#((L '66==?K(?(A%%55+5N%@@-P  --I1I1IJ%33((
 &8&1'2& #C"D

	 		,,;;A>HHI	
 *+A,,;;A>HHKNN## , '""$))-8  &",+r1+ )+(?-I% /%9)A*C   2r   is_conv_per_channelis_linear_per_channelcustom_quant_annotationsquant_dtypebypass_checkblock_size_mapsubmodule_qconfig_listc           
         [         R                  R                  XUSS9R                  5       n[        UUUUU
[	        U R
                  5      U R                  S9nU	b  UR                  U	5        [        X5      nU" U6   [        U5      nUR                  R                   Vs1 s H  oR                  iM     nn[         R                  R                  R                  R                   [         R                  R                  R"                  R                   [         R                  R                  R$                  R                   [         R                  R                  R&                  R                   [         R                  R(                  R*                  R                   [         R                  R(                  R,                  R                   1nU(       d   U R/                  UR1                  U5      5        U$ s  snf )NT)rP  strict)rs  custom_annotationsper_channel_convper_channel_linearrv  r   r   )rH   exportr*   r   r   r   r~   set_block_size_mapr(   r'   rZ  nodesrf   r!   quantized_decomposedquantize_per_tensordefaultdequantize_per_tensorquantize_per_channeldequantize_per_channeltorchaoquantize_affinedequantize_affiner   intersection)r   r*   r+   rp  rq  rr  rs  rP  rt  ru  rv  m	quantizerpreparedquantized_modulenoder~  q_and_dqs                     rl   get_qdq_moduleTestQNN.get_qdq_module  sx    LL>$   

&( 	
 ##704#9$T\\2jj
	 %((8-&'1)9)?)?)E)EF)E)EFII**>>FFII**@@HHII**??GGII**AAIIII--55II//77
 OOE..x89 Gs   !G1c	                 |   [         R                  R                  XSS9R                  5       n	[        UUUUSU[	        U R
                  5      U R                  S9n
Ub  U
R                  U5        U=(       d    / nU
R                  U5        [        X5      n[        R                  R                  R                  U5      $ )NT)rx  )rs  ry  rz  r{  is_qatrv  r   r   )rH   r|  r*   r   r   r   r~   r}  set_submodule_qconfig_listr)   r  quantizationpt2emove_exported_model_to_train)r   r*   r+   rp  rq  rr  rs  ru  rv  r  r  r  s               rl   get_prepared_qat_moduleTestQNN.get_prepared_qat_module  s     LLt<CCE"#704#9$T\\2jj	
	 %((8!7!=2,,-CD#A1##((EEhOOr   
ori_moduler  c                 ,   [         R                  R                  UR                  5       SS9n[         R                  R                  5       nU" U6 nU" Xa" U6 5      nUR                  5         UR                  5         UR                  5         [        U5      $ )Ng-C6?)lr)
rH   optimSGD
parametersnnCrossEntropyLoss	zero_gradbackwardstepr'   )r   r  r  r+   	optimizer	criterionr   losss           rl    get_converted_sgd_trained_module(TestQNN.get_converted_sgd_trained_module  sz     KKOOH$7$7$9fOE	HH--/	6"V!45H%%r   c                     [        [        R                  " S5      U R                  U R                  USU R
                  U R                  U R                  U R                  U R                  S9
nU$ )Nr/   r   r   )
r   rC   r   r}   r   r|   r{   r~   r   rf   )r   r   r   s      rl   get_adb_toolTestQNN.get_adb_tool  sZ    IIn-((#'#;#;;kkIIjj;;
 
r   divisionc                 D     " S S[         5      nU[        S[        SU004$ )Nc                      ^  \ rS rSrSrU 4S jrS rS\R                  R                  S\R                  R                  4S jr
S\R                  R                  4S jrS	rU =r$ )
'TestQNN.split_graph.<locals>.SplitGraphi  z'
Split graph based on number of nodes.
c                 .   > [         TU ]  5         Xl        g r   )super__init__r  )r   r  	__class__s     rl   r  0TestQNN.split_graph.<locals>.SplitGraph.__init__  s     " (r   c                 T    UR                   S:H  =(       a    UR                  [        ;  $ )Ncall_function)oprf   r
   )r   r  s     rl   _is_legit_node6TestQNN.split_graph.<locals>.SplitGraph._is_legit_node  s    ww/1Odkk6OOr   r\  r   c                 &   SnUR                   R                   H  nX#R                  S:X  a  SOS-  nM     X R                  -  nSnUR                   R                   GH  nU R	                  U5      (       d  M  US-  nX$-  S:w  a  M+  UR                   R                  U5         [        UR                  R                  5       5      nUR                   R                  S[        R                  R                  R                  R                  U45      nUR                  S   UR                  S'   SUR                  ;   a  UR                  S   UR                  S'   U H  nUR!                  X65        M     S S S 5        GM!     g ! , (       d  f       GM4  = f)Nr   r  r9   valquant_attrs)rZ  r~  r  r  r  inserting_afterr   userskeyscreate_nodeexir_opsedgedim_order_ops_clone_dim_orderr  metareplace_input_with)r   r\  num_graph_nodesr  sharesr  inserted_nodeusers           rl   _insert_clone5TestQNN.split_graph.<locals>.SplitGraph._insert_clone  sV    #$(..44D#GG,FqAMO 5 )MM9 #$(..44D..t44 #q(O&/14 %++;;DA $TZZ__%6 7(4(:(:(F(F+$MM77HHPP!G)
 59IIe4D**51(DII5@D		-@XM..}=$)D 33DH %* BA 5 BAs   "CF  
F	c                 \    U R                  U5        UR                  5         [        US5      $ )NT)r  	recompiler&   )r   r\  s     rl   call,TestQNN.split_graph.<locals>.SplitGraph.call  s)    ""<0&&(!,55r   )r  )rf  
__module____qualname____firstlineno____doc__r  r  rH   fxGraphModuler  r  __static_attributes____classcell__)r  s   @rl   
SplitGraphr    s[    )P I$)HH$8$8 I%% ID6)=)= 6 6r   r  Tr  )r"   r   r   )r   r  r  s      rl   split_graphTestQNN.split_graph  s2    2	6 2	6h "D.X0F
 
 	
r   )r   r   )rX  r:   r:   r   r   r   FNr8   NFr:   N)r9   r:   r:   r:   TNNNFNr8   NF)Srf  r  r  r  ry   r   __annotations__rz   r{   rT   r|   r}   r~   r   r   r   r   r   chipset_tabler   r   r   r   r-   r   r   r   r   r   boolr   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7  static_llm_eval_methodr   classmethodr   r   rH   r  Moduler	   ExirExportedProgramr   Tensorr   r   r   r$   r%   intr   r   r   rH  r   setr   rn  r   r   r  r  r  r  r  r  r  r  r   r   rl   rw   rw      s   D%OD%OD#NFCL#E;(,ND%,*,MJ	BDOSL#M3Jcs ND NCFCJGS ND HcJIsHcM4M4L$KOS&+t+ OU "?!! (&& ((& ell#	&
 & 
&2
 
"=R ,'),.!#"$$&*;?%*(*=A#v?v? U\\*v? +-EE	v?
 v? "%v? '*v? v? v?  v? v? s)v? v? "(C5$;"78v? #v?  #&!v?" $;#v?x $%'),.(*$(,0 $ $$)#;?%*!`` U\\*` !	`
 "%` '*` #&` "` [)` ` ` "` ` ` "(C5$;"78`  #!`L /30546","5"5#"+/QU+ +  ell#+  &d^	+ 
  (~+  #(/+   +  +  +  S%Z(+  !)eHm4K.L)M N+  
		+ b /30546","5"5+/QUPP ell#P &d^	P
  (~P #(/P  P S%Z(P !)eHm4K.L)M NP 
		P@&HHOO& ((//& ell#	&
 
		&8
C 8
r   rw   )Or   rC   rW   rq   unittesttypingr   r   r   r   r   r   rN   r   rH   r  
executorchr	   2executorch.backends.qualcomm.builders.node_visitorr
   ?executorch.backends.qualcomm.debugger.qnn_intermediate_debuggerr   +executorch.backends.qualcomm.qnn_preprocessr   0executorch.backends.qualcomm.quantizer.quantizerr   r   4executorch.backends.qualcomm.serialization.qc_schemar   ,executorch.backends.qualcomm.utils.constantsr   r   r   r   r   (executorch.backends.qualcomm.utils.utilsr   r   r   executorch.devtoolsr   .executorch.devtools.inspector._inspector_utilsr   "executorch.examples.qualcomm.utilsr   r   r   r   r   +executorch.exir.backend.compile_spec_schemar   executorch.exir.backend.utilsr    executorch.exir.dialects._opsr!   r  executorch.exir.pass_baser"   +executorch.exir.passes.memory_planning_passr#   executorch.exir.programr$   r%   torch.fx.passes.infra.pass_baser&   'torchao.quantization.pt2e.quantize_pt2er'   r(   r)   r  r  rT   r  r  rm   bytesru   TestCaserw   r   r   rl   <module>r     s     	    E E     E C V L  
 * D  D 7 9 0 J O 6 >QHHOO>Qell"#>Q >Q 	>QBKU K6J

h J

r   