
    i                     B   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  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  S SKJr  S S	KJr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r$\RJ                  " \RL                  \$S9  S r'SS jr(\)S:X  a  \(" 5         gg)    N)!get_symmetric_quantization_configXNNPACKQuantizer)EdgeCompileConfig)ExecutorchBackendConfig)export_to_edgesave_pte_program)compute_sqnr)-default_per_channel_symmetric_qnnpack_qconfigQConfigMapping)get_executorch_backend_config)#_convert_to_reference_decomposed_fx
prepare_fx)convert_pt2eprepare_pt2e   )MODEL_NAME_TO_MODEL)EagerModelFactory   )MODEL_NAME_TO_OPTIONS   )quantizez?[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s)levelformatc                 h   U S;   a  gU S:X  a  gUR                  5         [        R                  " U5      nUn[        R                  R	                  U[        R                  " U5      SS9R                  5       n[        5       n[        SS9nUR                  U5        [        XE5      nU" U6 n[        R                  " SU 35        [        U5      nU" U6 n[        n	[        5       R                  U	5      n
[        5       n[!        X:X+S9nU" U6 n[        R                  " S	U 35        [#        XS9nU" U6 nU S
:X  a  US   nUS   nUS   nUS   n[        R                  " SU 35        [        R                  " SU 35        [        R                  " S[%        X}5       35        [%        X}5      S:  d   e[        R                  " S[        R&                  " X-
  5       35        [        R&                  " X-
  5      S:  d   e[        R                  " S[%        X5       35        [%        X5      S:  d   eg)zPThis is a verification against fx graph mode quantization flow as a sanity check)edsr
mobilebertNic3Tstrict)is_per_channelzprepare_pt2e: )backend_configzprepare_fx: dl3outzm: zm_fx: zprepare sqnr: d   zquant diff max: g?zquant sqnr:    )evalcopydeepcopytorchexportmoduler   r   
set_globalr   logginginfor   r
   r   r   r   r   r	   max)
model_namemodelexample_inputsm_copym	quantizerquantization_configafter_prepare_resultafter_quant_resultqconfigqconfig_mappingr!   m_fxafter_prepare_result_fxafter_quant_result_fxs                  o/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/examples/xnnpack/quantization/example.py0verify_xnnpack_quantizer_matching_fx_quant_modelr?   -   s/    ++ 	U 		JJL]]5!FA 	At}}^<TJQQSA "I;4P,-Q"An-LL>!%&QAN+ <G$&11':O24ND #N3LL<v&'.tSD .1 U3E:"9%"@/6 5e <LL3qcLL6$!LL
&:TUV ,FLLLLL
599%7%OPQR 99'?@4GGGLL
|$6NOP *BRGGG    c            
      *   [         R                  " 5       n U R                  SSSS[        [        R
                  " 5       5       3S9  U R                  SSSS	S	S
S9  U R                  SSS	SS9  U R                  5       nSn [        R                  R                  R                  R                  nU(       dF  UR                  (       a*  [        R                  R!                  UR                  5        O[#        S5      eUR$                  (       dL  UR&                  [        ;  a8  [#        SUR&                   S[        [        R
                  " 5       5       S35      e[(        R*                  " 5       n[,        R.                  " [0        UR&                     6 u  pV  n[(        R*                  " 5       nUR$                  (       a@  [(        R*                  " 5       n[3        UR&                  XV5        [(        R*                  " 5       nUR5                  5       n[        R6                  R7                  XVSS9R9                  5       n[(        R*                  " 5       n[;        XV5      n[(        R*                  " 5       n[        R                  " SXt-
   S35        [(        R*                  " 5       n[=        S	S9n	[?        XU	S9n
[(        R*                  " 5       n[        R                  " SXt-
   S35        [(        R*                  " 5       nU
RA                  [C        S	S9S9n[E        XR&                   S35        [(        R*                  " 5       n[        R                  " SXt-
   S35        [        R                  " S5        g ! [         a    [        R                  " S5        S	n GNf = f)Nz-mz--model_nameTz Provide model name. Valid ones: )requiredhelpz-vez--verify
store_trueFzFflag for verifying XNNPACKQuantizer against fx graph mode quantization)actionrB   defaultrC   z-sz--so_libraryz&shared library for quantized operatorszNo registered quantized opsax  Need to specify shared library path to register quantized ops (and their out variants) intoEXIR. The required shared library is defined as `quantized_ops_aot_lib` in kernels/quantized/CMakeLists.txt if you are using CMake build, or `aot_lib` in kernels/quantized/targets.bzl for buck2. One example path would be cmake-out/kernels/quantized/libquantized_ops_aot_lib.[so|dylib].zModel z is not a valid name. or not quantizable right now, please contact executorch team if you want to learn why or how to support quantization for the requested modelAvailable models are .r   zQuantize time: s)_check_ir_validity)edge_compile_configzExport time: )extract_delegate_segments)config
_quantizedzSave time: finished)#argparseArgumentParseradd_argumentlistr   keys
parse_argsr)   opsquantized_decomposedaddr#   AttributeErrorr-   r.   
so_libraryload_libraryRuntimeErrorverifyr0   timeperf_counterr   create_modelr   r?   r&   r*   r+   r   r   r   to_executorchr   r   )parserargshas_out_ops_startr1   r2   endquantized_modelrJ   edge_mprogs               r>   mainrj   r   s   $$&F
/5J5O5O5Q0R/ST	   U   5	   DKII**..22 ??II""4??37  ;;4??2GGT__% &$ %))>)C)C)E$F#GqJ
 	
 E"3"@"@	T__	-#E1a 


C{{!!#8OOU	
 ! JJLELLdCJJLEEu5O



CLL?3;-q12E+uE=PF 


CLL=Q/0E&G   D Too.j9:



CLL;s{m1-.LLw  23s    .M, ,"NN__main__)returnN)*rO   r'   r-   r]   r)   7executorch.backends.xnnpack.quantizer.xnnpack_quantizerr   r   executorch.exirr   executorch.exir.capture._configr   &executorch.extension.export_util.utilsr   r   torch.ao.ns.fx.utilsr	   torch.ao.quantizationr
   r   $torch.ao.quantization.backend_configr   !torch.ao.quantization.quantize_fxr   r   'torchao.quantization.pt2e.quantize_pt2er   r   modelsr   models.model_factoryr    r   utilsr   FORMATbasicConfigINFOr?   rj   __name__ r@   r>   <module>r      s         . C S - O O ) 5 $  
K   ',,v 6BHJWt zF r@   