
    3j`l                        S SK JrJr  \" 5       (       a
  SSKrSSKJr  S SKJrJr  S SKJ	r	J
r
Jr  \R                  " \5      r/ SQr " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      rS rS r\R,                  SS.S\R.                  S\S\R2                  4S jjr\R,                  SS.S\R.                  S\S\R2                  4S jjr " S S\R8                  5      rS rS rS r S r!S r"S  r#S#S!\$\%   S-  4S" jjr&g)$   )is_torch_availablelogging    N)nn)ConversionOps_IdentityOp)get_module_from_name	on_deviceshould_convert_module)g        g      ?g      ?g      ?g       @g      @g      @g      @g       g      g      g      g       g      g      g      c                       \ rS rSrS r   SS\\\R                  4   S\R                  R                  S-  S\\   S-  S\S-  S\\\R                  4   4
S	 jjrS
rg)Mxfp4Quantize0   c                     Xl         g Nhf_quantizerselfr   s     Y/home/wildlama/miniconda3/lib/python3.13/site-packages/transformers/integrations/mxfp4.py__init__Mxfp4Quantize.__init__1       (    N
input_dictmodelmissing_keysfull_layer_namereturnc                    [        UR                  5       5      S   u  pg[        U[        5      (       a  US   OUn[	        X$5      u  p[
        R                  " UR                  5         [        U[        5      (       a  [        UR                  SS5      [        5      u  p[        R                  R                  [        R                  R                  [        R                  R                  pn[        X[        5      u  pSU;   a  SOSnXR                   ;   a  UR                   U	 [#        XU	5        [#        UU S3U" X" U" 5       S9S95        UR%                  U 5        S	Ul        0 sS S S 5        $  S S S 5        g ! , (       d  f       g = f)
Nr   gate_up_proj	down_proj_precision_configrhs_dataweight_scaleflex_ctxT)tupleitems
isinstancelistr	   torchdeviceMxfp4GptOssExpertsquantize_to_mxfp4	transposetriton_kernels_hub
matmul_ogsPrecisionConfigFlexCtx
InFlexDataswizzle_mxfp4_parameterssetattrdiscard_is_hf_initialized)r   r   r   r   r   kwargs_valuemoduletriton_weight_tensorr(   r5   r6   r7   projs                  r   convertMxfp4Quantize.convert4   s\    ))+,Q/&ud33a(@	\\%,,'&"4555FuWY[]G^`r5s2$&11AA&1199&11<< +5
 6C(8J62$ *8?)J~P[---**40&:;f-.#YcYeHfg $$'8:,0)9 ('5 (''s   (D E<<
F
r   NNN__name__
__module____qualname____firstlineno__r   dictstrr.   Tensorr   Moduler-   rC   __static_attributes__ r   r   r   r   0   s    ) )-)-&*)ell*+) xx%) 3i$&	)
 t) 
c5<<	 ) )r   r   c                       \ rS rSrS r   SS\\\R                  4   S\R                  R                  S-  S\S-  S\\   S-  S\\\R                  4   4
S	 jjr\SS
 j5       rSrg)Mxfp4Dequantize`   c                     Xl         g r   r   r   s     r   r   Mxfp4Dequantize.__init__a   r   r   Nr   r   r   r   r   c                    0 nSU;   a  SOSnU S3UR                  5       ;   a6  [        X S3   [        5      (       a  X S3   S   Xg S3'   OX S3   Xg S3'   U S3UR                  5       ;   a6  [        X S3   [        5      (       a  X S3   S   Xg S3'   OX S3   Xg S3'   [        Xg S3   Xg S3   5      nX80$ )Nr"   r#   _blocksr   _scales)keysr,   r-   dequantize_convertops)	r   r   r   r   r   r=   
param_datarB   dequantizeds	            r   rC   Mxfp4Dequantize.convertd   s    
!/?!B~V7z00*vW%56==/9F':J/KA/N
V7+,/9F':J/K
V7+,V7z00*vW%56==/9F':J/KA/N
V7+,/9F':J/K
V7+, ,Jw7G,H*W]]dUeJfg--r   c                     [        5       $ r   )r   r   s    r   
reverse_opMxfp4Dequantize.reverse_op}   s
    }r   r   rE   )r   r   )rG   rH   rI   rJ   r   rK   rL   r.   rM   r   rN   r-   rC   propertyr`   rO   rP   r   r   rR   rR   `   s    ) )-&*)-.ell*+. xx%. t	.
 3i$&. 
c5<<	 .2  r   rR   c                       \ rS rSrS r   SS\\\R                  4   S\R                  R                  S-  S\S-  S\\   S-  S\\\R                  4   4
S	 jjr\S\4S
 j5       rSrg)Mxfp4Deserialize   c                     Xl         g r   r   r   s     r   r   Mxfp4Deserialize.__init__   r   r   Nr   r   r   r   r   c           	         0 nSU;   a  SOSnU S3UR                  5       ;   a6  [        X S3   [        5      (       a  X S3   S   Xg S3'   OX S3   Xg S3'   U S3UR                  5       ;   a6  [        X S3   [        5      (       a  X S3   S   Xg S3'   OX S3   Xg S3'   [        X#5      u  p[	        Xg S3   Xg S3   UUXg S3   R
                  [        5        UR                  U 5        SUl        0 $ )Nr"   r#   rW   r   rX   T)	rY   r,   r-   r	   swizzle_mxfp4_convertopsr/   r3   r;   r<   )
r   r   r   r   r   r=   r[   rB   r@   r>   s
             r   rC   Mxfp4Deserialize.convert   sM    
!/?!B~V7z00*vW%56==/9F':J/KA/N
V7+,/9F':J/K
V7+,V7z00*vW%56==/9F':J/KA/N
V7+,/9F':J/K
V7+, )@	 w'(w'(w'(//	
 	02$(! 	r   c                 ,    [        U R                  5      $ r   )Mxfp4ReverseDeserializer   r_   s    r   r`   Mxfp4Deserialize.reverse_op   s    &t'8'899r   r   rE   )rG   rH   rI   rJ   r   rK   rL   r.   rM   r   rN   r-   rC   rb   r   r`   rO   rP   r   r   rd   rd      s    ) )-&*)-%ell*+% xx%% t	%
 3i$&% 
c5<<	 %N :M : :r   rd   c                       \ rS rSrS r   SS\\\R                  4   S\R                  R                  S-  S\S-  S\\   S-  S\\\R                  4   4
S	 jjrS
rg)rl      c                     Xl         g r   r   r   s     r   r    Mxfp4ReverseDeserialize.__init__   r   r   Nr   r   r   r   r   c                    [        UR                  SS5      n[        UR                  SS5      nSU;   a  SOSnUR                  SS5      S	   n	[        X#5      u  p0 n[	        U
[
        5      (       Ga  S
U;   a$  UR                  SS5      n	[        XS-   5      X'   U$ SU;   a  U
R                  R                  R                  R                  U
R                  R                  R                  5      R                  SS5      R                  USSS5      X S3'   U
R                  R                  R                  R                  R                  U
R                  R                  R                  R                  5      R                  SS5      X S3'   U$ U
R                   R                  R                  R                  U
R                   R                  R                  5      R                  SS5      R                  XgSS5      X S3'   U
R"                  R                  R                  R                  R                  U
R"                  R                  R                  R                  5      R                  SS5      X S3'   U$ )Nnum_local_experts    hidden_sizei@  r"   r#   r>      r   biasrW    _biasr    r!   Z      rX   )getattrconfigrsplitr	   r,   r0   replacer"   storagelayoutunswizzle_datadatar2   reshapegate_up_proj_precision_configr(   r#   down_proj_precision_config)r   r   r   r   r   r=   rs   ru   rB   namer@   r>   
state_dicts                r   rC   Mxfp4ReverseDeserialize.convert   s/    $ELL2ErJellM4@!/?!B~%%c1-a0(@	
f011(&..y"=#*6'>#B
 !!0''//66EEfFYFYFaFaFfFfgYr2&W.B; V7+, 88EEMMTTcc<<IIQQVViB' V7+,"  $$,,33BB6CSCSC[C[C`C`aYr2&W.RD V7+, 55BBJJQQ``99FFNNSSiB' V7+, r   r   rE   rF   rP   r   r   rl   rl      s    ) )-&*)-,ell*+, xx%, t	,
 3i$&, 
c5<<	 , ,r   rl   c                     UR                   R                  R                  nU" U R                  [        R
                  5      [        R                  SS9u  pX4$ )Nrv   )axis)numerics_detailsmxfpdowncast_to_mxfp_torchtor.   bfloat16uint8)wr3   r   w_scales       r   r1   r1      sD    /@@EE\\'U^^(<ekkPQRJA:r   c                 R   UR                   R                  UR                   R                  UR                   R                  pTnUR                  R
                  nUR                  R
                  R                  nUR                  SS9u  pU" U" XS9U40 U	D6n U" U" U5      U5      nX4$ )z=
Changes the layout of the tensors depending on the hardware
rv   )mx_axisdtype)tensorFP4convert_layoutwrap_torch_tensortensor_detailsr   StridedLayout"make_default_matmul_mxfp4_w_layout)
r   r   r3   r   r   r   r   r   value_layoutvalue_layout_optss
             r   r8   r8      s    
 	!!%%!!00!!33 +C
  ..55F&55<<JJM&,&O&OXY&O&Z#L(6ZHYZA.w7GG:r   i   r   rows_per_chunkr   r   r   c                   SSK nU R                  [        R                  5      n UR                  [        R                  5      S-
  nU R
                  SS UR
                  :X  d&   SU R
                  SS < SUR
                  < 35       e[        R                  " [        X R                  S9nU R
                  Gt pgnUR                  U5      U-  n	U R                  X5      n UR                  U	S5      n[        R                  " XS	-  X R                  S9n
[        SX5       H  n[        X-   U	5      nXU nXU nXU nUS
-  R                  [        R                  5      nUU   USS2SSS	24'   AUS-	  R                  [        R                  5      nUU   USS2SSS	24'   A[        R                  " XUS9  AAAM     U
R                  " / UQUPUS	-  P76 R                   " / UQXx-  S	-  P76 n
U
R#                  SS	5      R%                  5       $ )k
Convert the mxfp4 weights again, dequantizing and makes them compatible with the forward
pass of GPT_OSS.
r   N   r    zblocks.shape[:-1]=z does not match scales.shape=)r   r/   rv   r         )out)mathr   r.   r   int32shaper   
FP4_VALUESr/   prodr   emptyrangeminintldexpviewr2   
contiguous)blocksscalesr   r   r   lutprefix_shapeGB
rows_totalr   r0r1blkexpsubidx_loidx_his                     r   _convert_moe_packed_tensorsr      s    YYu{{#FYYu{{#c)F<<,d1Ccr1B0DDbU[UaUaTc.dd,
,,z}}
EC ,,\a<(1,J^^J*F^^J*F
++ja%u]]
KCAz2$j1mmRj *+6{Aqt!tG (uyy)6{Aqt!tG 	C#&c' 3* ++
.|
.Q
.A
.
3
3
M\
M1519
MC==A))++r   c                     [        XX#S9$ ! [        R                   a/    U R                  S5      n UR                  S5      n[        XX#S9s $ f = f)r   r   cpu)r   r.   OutOfMemoryErrorr   )r   r   r   r   s       r   convert_moe_packed_tensorsr   6  sW    g*6ff !! g5!5!*6ffgs   	 A AAc                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )r0   iO  c           
        > [         TU ]  5         UR                  U l        UR                  U l        UR
                  U l        [        R                  " [        R                  " U R                  SU R                  -  U R
                  S-  S[        R                  S9SS9U l        [        R                  " [        R                  " U R                  SU R                  -  [        R                  S9SS9U l        [        R                  " [        R                  " U R                  U R
                  U R                  S-  S4[        R                  S9SS9U l        [        R                  " [        R                  " U R                  U R
                  [        R                  S9SS9U l        SU l        [#        USS	5      U l        S U l        S U l        [#        USS	5      U l        g )
Nr   rt   r{   r   Frequires_gradgZd;?swiglu_limitg      @)superr   rs   num_expertsintermediate_sizeru   r   	Parameterr.   zerosr   r"   float32gate_up_proj_biasr#   down_proj_biasalphar|   limitr   r   )r   r}   	__class__s     r   r   Mxfp4GptOssExperts.__init__P  s{   !33!'!9!9!--LLKK((!d.D.D*DdFVFVZ\F\^`hmhshst

 "$KK((!d.D.D*DEMMZjo"
 KK))4+;+;T=S=SWY=Y[]^fkfqfqr

 !llKK(($*:*:%--P`e
 
V^S9
-1**.'V^S9
r   hidden_statesr   c                    [         R                  R                  [         R                  R                  [         R                  R                  pvn[         R                  R
                  n[        UR                  5         U" U" SUS5      U R                  U R                  4S5      n	U" UU R                  U R                  R                  [        R                  5      UUU R                  S U	S9n
U" U
U R                   U R"                  R                  [        R                  5      UUU R$                  UR&                  S9nS S S 5        U$ ! , (       d  f       W$ = f)Nswiglu)r   r   r   )gather_indxprecision_configgammasfused_activation)scatter_indxr   r   )r3   r4   FnSpecsFusedActivationr   	swiglu_fnr
   r/   r   r   r"   r   r   r.   r   r   r#   r   r   	gate_scal)r   r   routing_data
gather_idxscatter_idxr   r   r4   r   actintermediate_cache1intermediate_cache3s               r   forwardMxfp4GptOssExperts.forwardn  s,   ))11))99))44 #-
 '--77	}++,!'(I?Q"RUYU_U_aeakakTlnopC",!!&&))%--8&!%!C!C!$	# #-###&&u}}5(!%!@!@#--# -. #"/ -,. #"s   =CE		
E)r   r#   r   r   r"   r   r   ru   r   r   r   )
rG   rH   rI   rJ   r   r.   rM   r   rO   __classcell__)r   s   @r   r0   r0   O  s+    :<#U\\ #]b]i]i # #r   r0   c                 ,   SS K n[        R                  R                  [        R                  R                  [        R                  R
                  [        R                  R                  4u  p4pV[        U R                  5         [        R                  R                  5       n[        UR                  R                  SS5      5      nSn	U R                  S   n
U R                  S   nX-  nX-  nUS-   U-  nX-  nS nU" X5      u  nn[        R                   " USS9n[        R"                  " USS9u  nn[        R$                  " USU5      nUR'                  S5      n[        R(                  " UXS-
  S9X nUR+                  S5      R-                  [        R.                  5      nS	n[        R0                  " UU:  UU5      n[        R2                  " US
S9R-                  [        R.                  5      n[        R2                  " U5      R-                  [        R.                  5      n[        R0                  " UU:  UU	5      n[        R0                  " UU:*  UU	5      n[        R0                  " UU	:H  U	U5      nUU   n[        R0                  " UU   U	:H  U	U5      nU" UR                  5       UR                  5       S9nU" UR                  5       UR                  5       S9nU" UX5      nUnS S S 5        U" WWWWW5      WW4$ ! , (       d  f       N= f)Nr   
LOCAL_RANK0r    rv   c                     [         R                  " U * SSS9S S 2S U24   nUR                  5       n[         R                  " XSS9nX2R	                  5       4$ )Nrv   T)dimstabler   )r.   argsortlongtake_along_dimr   )valsktk_indxtk_vals       r   topk routing_torch_dist.<locals>.topk  sO    mmTEq>q"1"uEGllnG))$Q?F;;=((r   r   )binsmaxi  T)r   )src_indxdst_indx)osr3   routing
GatherIndxRoutingDataScatterIndxcompute_expt_data_torchr
   r/   r.   distributedget_world_sizer   environgetr   softmaxsortgatherr   histcr   r   r   wherer   )logitsn_expts_actr  r  r  r  r  
world_sizerankreplace_valuen_tokensn_expts_totn_local_expertslocal_expert_startlocal_expert_endn_gates_padr   	expt_scal	expt_indxsort_indiceshistvar	topk_indx	gate_indxr   r   r   	expt_datahit_expertss                                r   routing_torch_distr%    s     	""--""..""..""::	EAJ[ 
6==	!&&557
2::>>,45<<?ll1o%3!3 1H7,	)  $F8	9MM)4	"'**YA">	<LLA|<	 %%b)	{{9;!OLM_qNN2&))%++6	 KK	,> >YO	MM)D9<<U[[I	MM),//<	KK	,< <iW	KK 2i ?MZ	KK	] :M9U	i(	KK	) 4 E}V_`	 !)--/IMMOT"IMMOimmoV+D/O	!g 
"h y$iPR]_kkki 
"	!s   I+L
Lc                    SS K Jn  UR                  5       (       a-  UR                  5       (       a  [	        U S5      (       a  [
        nO[        R                  R                  nUR                  S   nUR                  SU R                  R                  5      n[        R                  R                  XR                  R                  U R                  R                   5      n[#        UR$                  5         U" XPR                  R&                  5      u  pgnS S S 5        U R)                  UWWWS9n	U	R                  USU R                  R                  5      n	X4$ ! , (       d  f       NJ= f)Nr   
_is_hookedr    )r   )torch.distributedr  is_availableis_initializedhasattrr%  r3   r  r   r   router
hidden_dimr   
functionallinearweightrw   r
   r/   top_kexperts)
r   r   distr  
batch_sizerouter_logitsr   r   r   
routed_outs
             r   mlp_forwardr7    s   $t2244|9T9T$$,,44$$Q'J!))"dkk.D.DEMMM((8J8JDKKL\L\]M	=''	(07{{GXGX0Y-+ 
) m\:S^_J##JDKK4J4JKJ$$ 
)	(s   5 E
E'c                    SSK Jn  UR                  S5      nUR                  S5      nUR                  S5      n	UR                  S5      n
UR                  S5      nUR                  S5      nS	 H  nX;   d  M
  Ub  U" UUUUU	U
UU5      nU S
3nU S3n[        XR	                  SS5      S   U5        [        X5      (       d  MW  [        X5      (       d  Mi  [        [        X5      [        X5      5      n[        X[        R                  R                  UR                  U5      5      5        [        X5        [        X5        M     g )Nr   shard_and_distribute_moduler   empty_paramcasting_dtypeto_contiguousr  device_mesh)r"   r#   rW   rX   .rv   )integrations.tensor_parallelr:  r  r:   r~   r+  r   r|   r.   r   r   r   delattr)r@   
param_nameparam_valuetarget_devicedq_param_namer=   r:  r   r;  r<  r=  r  r>  rB   blocks_attrscales_attrr\   s                    r   
dequantizerH    s&   JJJwE**]+KJJ/MJJ/M::fD**]+K-&9!!!	 "F'*K!F'*KF--c15a8+Fv++0L0L89UW^_eWstehh&8&89V&WX,,) .r   c                 V    [        X5      n[        R                  R                  U5      $ r   )r   r.   r   r   )r   r   r\   s      r   rZ   rZ     s!    ,V<K88k**r   c                 j   UR                   R                  UR                   R                  UR                   R                  pnSSKJn	  UR                  S5      n
UR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nS	U;   a&  UR                  S
5      S   R                  S5      S   nSU;   a&  UR                  S
5      S   R                  S5      S   nUb  U	" XXXX5        O;[        XR                  S
S5      S   [        R                  R                  USS95        W S3nU S3n[        U U5      n[        U U5      nUR                  R                  S:w  Ga  UR                  R                  S:w  Ga  UR!                  S5      nUS:X  a!  UR#                  UU R$                  S-  S5      nO UR#                  USU R$                  S-  5      n[        USU5      S:X  a\  ['        [        S5      (       aG  [        R(                  R+                  5       b(  [        R(                  R+                  5       R                  nUR-                  U5      R/                  5       nUR-                  U5      R/                  5       n[1        U5         [3        UR5                  SS5      UR5                  SS5      U5      u  nnSSS5        US:X  a6  [        R6                  " UU R8                  U R$                  S-  /5      Wl        O2[        R6                  " UU R$                  U R8                  /5      Wl        [        U UU5        [        U U S3U" WU" U" 5       S9S95        [=        U U5        [=        U U5        Aggg! , (       d  f       N= f)i
This transforms the weights obtained using `convert_gpt_oss.py` to load them into `Mxfp4GptOssExperts`.
r   r9  r   r;  r<  r=  r  r>  r   r?  r    rW   r   r   rX   Nrv   Fr   metar"   typer   acceleratorr!   r$   r%   r'   )r4   r5   r6   r7   r@  r:  r  splitr:   r~   r.   r   r   r|   r/   rM  sizer   r   r+  rN  current_acceleratorr   r   r
   r8   r2   Sizeru   r   rA  )r@   rB  rC  rD  r3   r=   r5   r6   r7   r:  r   r;  r<  r=  r  r>  rB   rF  rG  r   r   local_expertsrA   r(   s                           r   load_and_swizzle_mxfp4rT    sU   
 	%%55%%--%%00 )O
 KJJwE**]+KJJ/MJJ/M::fD**]+K:$R(..y9!<:$R(..y9!<#W[	
 	))#q1!4ehh6H6Hdi6H6jkF'"KF'"KV[)FV[)F}}V#(:(:f(DA>!^^M63K3Ka3OQSTF^^M2v7O7OST7TUFM6=9UB}--!!557C!--AACHHM=)446=)446}%1>  R(&*:*:2r*BDV2. , & >!).]FDVDVX^XpXpstXt4u)v &).]FD\D\^d^p^p4q)r & 	23f%&Q[Q]@^_	
 	$$I )E# &%s   61N$$
N2c                    UR                   R                  UR                   R                  UR                   R                  pnU R	                  S5      n	[        USU5      S:X  a\  [        [        S5      (       aG  [        R                  R                  5       b(  [        R                  R                  5       R                  nU R                  U5      R                  5       n UR                  U5      R                  5       nUS:X  a   U R                  XR                  S-  S5      n O U R                  U	SUR                  S-  5      n [        U5         [!        U R#                  S	S5      UR#                  S	S5      U5      u  pSSS5        US:X  a5  [        R$                  " XR&                  UR                  S-  /5      W
l        O1[        R$                  " XR                  UR&                  /5      W
l        X2R*                  ;   a  UR*                  U	 [-        X#U
5        [-        UU S
3U" WU" U" 5       S9S95        g! , (       d  f       N= f)rK  r   rM  r   rN  Nr"   r   r    r!   r$   r%   r'   )r4   r5   r6   r7   rP  r|   r+  r.   rN  rQ  rM  r   r   r   r   r
   r8   r2   rR  ru   r   r9   r:   )r   r   r@   rB   rD  r3   r5   r6   r7   rS  rA   r(   s               r   ri   ri   W  s   
 	%%55%%--%%00 )O KKNMv}5>E=))113?))==?DDYY}%002FYY}%002F~/G/G!/KRPr63K3Kq3PQ	=	!-:R$f&6&6r2&>@R.
* 
"
 ~%*ZZ@R@RTZTlTlopTp0q%r"%*ZZ@X@XZ`ZlZl0m%n" !!!t$F./&!"\GZ\<Z[! 
"	!s   0H::
Imodules_to_not_convertc                 l   UR                   (       a  U $ SSKJn  U" S5      qSnU R	                  5        H  u  pV[        XR5      (       d  M  UR                  R                  S:X  aW  UR                   (       dF  [        R                  " S5         U R                  U[        U R                  5      5        SnSSS5        UR                  R                  S	:X  d  M  UR                   (       a  M  S
SKJn  U" [        U5      Ul        M     U(       d  ["        R%                  S5        U $ ! , (       d  f       Nw= f)a  
Public method that replaces the expert layers of the given model with mxfp4 quantized layers.

Args:
    model (`torch.nn.Module`):
        The model to convert, can be any `torch.nn.Module` instance.
    quantization_config (`Mxfp4Config`, defaults to `None`):
        The quantization config object that contains the quantization parameters.
    modules_to_not_convert (`list`, *optional*, defaults to `None`):
        A list of modules to not convert. If a module name is in the list (e.g. `lm_head`), it will not be
        converted.
rv   )
get_kernelz(kernels-community/gpt-oss-triton-kernelsFGptOssExpertsrL  TN	GptOssMLPr   )
MethodTypezYou are loading your model using mixed-precision FP4 quantization but no linear modules were found in your model. Please double check your model architecture, or submit an issue on github if you think this is a bug.)rH  hub_kernelsrX  r3   named_modulesr   r   rG   r.   r/   set_submoduler0   r}   typesr[  r7  r   loggerwarning)r   quantization_configrV  rX  has_been_replacedmodule_namer@   r[  s           r   replace_with_mxfp4_linearre    s     %%' $$NO$224$[II$$7@S@^@^f%##K1CELL1QR$(! & $$3<O<Z<Z<Z('V<FN  5 	
 L &%s   (D%%
D3	)NN)'utilsr   r   r.   r   core_model_loadingr   r   quantizers.quantizers_utilsr	   r
   r   
get_loggerrG   r`  r   r   rR   rd   rl   r1   r8   r   r   r   rM   r   r   rN   r0   r%  r7  rH  rZ   rT  ri   r-   rL   re  rP   r   r   <module>rj     s=   0  ; ` ` 
		H	%
(-M -`m D-:} -:`0m 0h0 &3, ;;	3,
 3, \\3,t &g ;;	g
 g \\g2># >#FAlH%(-B+
DN.b)W[\_W`cgWg )r   