+
    "Ý³j0¥ ã                   ó<  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^ RI
HtHtHtHtHtHtHt ^ RIt^ RIHt ^ RIHt ^RIHtHtHtHt ^RIHt ^R	IHt ^R
IH t H!t! ^RI"H#t#H$t$H%t%H&t&H't'H(t(H)t) ^RI*H+t+ ^RI,H-t- ^RI.H/t/H0t0 ^RI1H2t2 ^RI3H4t4H5t5 ^RI6H7t7H8t8H9t9 ^RI:H;t;H<t<H=t=H>t> ^RI?H@t@ ^RIAHBtB ^RICHDtD ^RIEHFtF ^RIGHHtHHItI ^RIJHKtKHLtLHMtMHNtNHOtO ^RIPHQtQ ^RIRHStS ]H! 4       tTR R ltU] ! R R4      4       tVR R  ltWR! R" ltX ! R# R$]4      tYR# )%é    N)ÚMapping)Ú	dataclassÚfield)ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTuple)Únn)ÚModule)ÚDTYPE_SIZE_COLUMNÚExecutionConfigÚMODULE_FEATURE_COLUMNÚLoopProcessor©ÚNamedModule©Ú
BaseQModel)ÚDEVICEÚSUPPORTS_MODULE_TYPES)ÚPROCESS_LOG_LAYERÚPROCESS_LOG_MODULEÚPROCESS_LOG_NAMEÚPROCESS_LOG_TIMEÚPROCESS_USED_MEMORYÚQUANT_LOG_LOSSÚQUANT_LOG_NSAMPLES)ÚAwqGEMMLinear)ÚAwqGEMVLinear)ÚAwqGEMVFastLinearÚLLMAwqLinear)ÚAwqTorchLinear)Ú
apply_clipÚapply_scale)Úappend_str_prefixÚget_op_nameÚget_op_by_name)ÚFORMATÚMETHODÚQuantizeConfigÚresolve_quant_format)Únormalize_seq_mask)Úctx)Ú
get_device)Únormalize_fallback)Úsetup_loggerÚlog_time_block)Úfind_modulesÚget_module_by_name_prefixÚmove_toÚcreate_quant_moduleÚpack_module)Úparent_module_lock)ÚCPUc                óX   € V ^8„  d   QhR\         P                  R\        P                  /# ©é   ÚmoduleÚreturn)r   r   ÚtorchÚdevice)Úformats   "Ú_/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/looper/awq_processor.pyÚ__annotate__rD   ,   s"   € ÷ 	ñ 	¬¯	©	ð 	´e·l±lñ 	ó    c                ó    € \        V RR4      pVe    \        P                  ! V4      # \        V 4      #   \        \        \
        3 d     L#i ; i)zNPrefer a module's planned target device, then fall back to its current device.Útarget_deviceN)Úgetattrr@   rA   Ú	TypeErrorÚRuntimeErrorÚ
ValueErrorr0   )r>   rG   s   & rC   Ú_resolve_module_exec_devicerL   ,   sT   € ô ˜F O°TÓ:€MØÒ ð	Ü—<’< Ó.Ð.ô �fÓÐøô œ<¬Ð4ô 	Ùð	ús   “4 ´AÁAc                   óœ   a € ] tR t^8t o Rt]! ]R7      tRt]! ]	R7      t
RtRtRt]! ]	R7      t]! ]P                   R7      tV 3R ltRtV tR# )Ú_AWQLayerStatezITracks subset progress and cached state needed to quantize one AWQ layer.)Údefault_factoryNFc                ó  <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[P                  P                  ,          ;R&   S[S[	,          ;R&   S[
;R&   S[S[,          ;R&   S[P                  ;R&   # )	r=   ÚmodulesÚsubset_totalÚprocessed_subsetsÚlayer_moduleÚprevious_weight_scaleÚ	quantizedÚpending_modulesÚlock)r   Ústrr   r
   Úintr   r@   r   r   ÚfloatÚboolÚ	threadingÚLock)rB   Ú__classdict__s   "€rC   rD   Ú_AWQLayerState.__annotate__8   s˜   ø‡ ‚ ñ ‘#‘{Ð"Õ#ÑAñ	 ñ
 ™3•-Ñ&ñ ñ ™3•xÑ<ñ ñ ™5Ÿ8™8Ÿ?™?Õ+Ñ2ñ ñ $¡E�?Ñ1ñ ñ Ññ ñ ™•XÑ:ñ ñ �.‰.Ñ@ò rE   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚdictrQ   rR   ÚsetrS   rT   rU   rV   rW   r]   r^   rX   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r_   s   @rC   rN   rN   8   sQ   ø‡ € áSá&+¸DÔ&A€GØ"&€LÙ"'¸Ô"<ÐØ.2€LØ-1ÐØ€IÙ %°cÔ :€OÙ °·±Ô@€D÷ ƒ rE   rN   c                óœ   € V ^8„  d   QhR\         \        P                  ,          R\        R\        \
        P                  \        3,          /# ©r=   ÚlayersÚ
group_sizer?   )r	   r   ÚLinearrZ   r   r@   ÚTensor)rB   s   "rC   rD   rD   F   s<   € ÷ 7ñ 7Ü”—‘�Oð7äð7ô Œ5�<‰<œÐÕñ7rE   c           
     óú  € V '       g   \        R4      hV ^ ,          P                  P                  4       pVP                  ^,          pV^ 8”  d   TMTpW4,          ^ 8w  d   \        RV RV R24      hVP                  P
                  \        8X  Ed=   . p^ pV  F£  pVP                  P                  4       pVP                  ^,          V8w  d'   \        RV RVP                  ^,           RV R24      hVP                  VP                  \        P                  R	7      4       WhP                  ^ ,          ,          pK¥  	  \        P                  ! V^ R
7      pVP                  4       P                  VRV4      pVP                  ^RR7      p	VP                  V	P!                  R4      4       VP                  Wc4      P#                  ^ R
7      V3# \        P$                  ! V\        P                  VP                  R7      p
^ pV  Fó  pVP                  P                  4       pVP                  ^,          V8w  d'   \        RV RVP                  ^,           RV R24      hVP                  ^ ,          pVP                  4       pVP                  VRV4      pVP                  ^RR7      p	VP                  V	P!                  R4      4       W¬P#                  ^ \        P                  R7      ,          p
Wk,          pKõ  	  W¦3# )zIAccumulates normalized per-channel weight sums across a group of linears.zBExpected at least one linear layer to compute the AWQ weight mean.zExpected in_features (z!) to be divisible by group_size (z).z/Expected consistent in_features across layers (z), got z for layer Ú.©Údtype©ÚdimT©rw   Úkeepdimg�íµ ÷Æ°>©ru   rA   )rw   ru   éÿÿÿÿ)rK   ÚweightÚdetachÚshaperA   Útyper:   ÚappendÚtor@   Úfloat32ÚcatÚabsÚreshapeÚamaxÚdiv_Úadd_ÚsumÚzeros)rn   ro   Úfirst_weightÚnum_channelsÚeffective_group_sizeÚweightsÚ	row_countÚlayerr|   Úgroup_scaleÚw_sumÚrowsÚ
weight_absÚweight_views   &&            rC   Ú_accumulate_awq_weight_meanr–   F   s©  € ÷ ÜÐ]Ó^Ð^à˜!•9×#Ñ#×*Ñ*Ó,€LØ×%Ñ% aÕ(€LØ)3°a¬™:¸\ÐØÕ*¨aÔ/ÜØ$ \ NÐ2SÐThÐSiÐikÐló
ð 	
ð ×Ñ×Ñ¤3Õ&ØˆØˆ	ÛˆEØ—\‘\×(Ñ(Ó*ˆFØ�|‰|˜A� ,Ô.Ü ØEÀlÀ^ð TØ!Ÿ<™<¨�?Ð+¨;°u°g¸Qð@óð ð �N‰N˜6Ÿ9™9¬5¯=©=˜9Ó9Ô:ØŸ™ a�Õ(ŠIñ ô —’˜7¨Ô*ˆØ—‘“×%Ñ% i°Ð5IÓJˆØ—k‘k a°�kÓ6ˆØ�‰�K×$Ñ$ TÓ*Ô+Ø�~‰~˜iÓ6×:Ñ:¸qÐ:ÓAÀ9ÐLÐLä�KŠK˜¬E¯M©MÀ,×BUÑBUÔV€EØ€IãˆØ—‘×$Ñ$Ó&ˆØ�<‰<˜�?˜lÔ*ÜØAÀ,Àð PØ—|‘| A•Ð' {°5°'¸ð<óð ð
 �|‰|˜A�ˆØ—Z‘Z“\ˆ
Ø ×(Ñ(¨¨rÐ3GÓHˆØ!×&Ñ&¨1°dÐ&Ó;ˆØ×Ñ˜×)Ñ)¨$Ó/Ô0Ø—‘ A¬U¯]©]�Ó;Õ;ˆØÕŠ	ñ ð  ÐÐrE   c                óz   € V ^8„  d   QhR\         \        P                  ,          R\        R\        P
                  /# rm   )r	   r   rp   rZ   r@   rq   )rB   s   "rC   rD   rD   €   s2   € ÷ 
6ñ 
6Ü”—‘�Oð
6äð
6ô ‡\�\ñ
6rE   c                ó*  € \        W4      w  r#V ^ ,          P                  P                  4       pV^ 8X  d?   \        P                  ! VP
                  ^,          VP                  VP                  R7      # W#,          P                  VP                  4      # )zLReturns the average normalized per-channel weight magnitude for AWQ scaling.rz   )	r–   r|   r}   r@   rŠ   r~   ru   rA   r�   )rn   ro   r’   r�   r‹   s   &&   rC   Ú_compute_awq_weight_meanr™   €   su   € ô 3°6ÓFÑ€EØ˜!•9×#Ñ#×*Ñ*Ó,€LØ�A„~Ü�{Š{˜<×-Ñ-¨aÕ0¸×8JÑ8JÐS_×SfÑSfÔgÐgØÕ×!Ñ! ,×"4Ñ"4Ó5Ð5rE   c                   ó¼  a a€ ] tR t^�t oRt]V3R lR l4       tRtV3R lV 3R llltV3R lR	 ltRuV3R
 lR llt	V3R lR lt
R tV3R lR ltV3R lR ltRuV3R lR lltV3R lR ltV 3R ltV 3R ltV3R lR ltV3R lR ltRR/V3R lR lltV3R  lR! ltV3R" lR# ltV3R$ lR% lt]V3R& lR' l4       t]V3R( lR) l4       t]V3R* lR+ l4       t]V3R, lR- l4       tV3R. lR/ lt]V3R0 lR1 l4       t]V3R2 lR3 l4       t]V3R4 lR5 l4       t]V3R6 lR7 l4       t V3R8 lR9 lt!V3R: lR; lt"V3R< lR= lt#V3R> lR? lt$RuV3R@ lRA llt%V3RB lRC lt&V3RD lRE lt'V3RF lRG lt(V3RH lRI lt)]*PV                  ! 4       R/ 3V3RJ lRK ll4       t,]*PV                  ! 4       RL 4       t-]*PV                  ! 4       RvV3RM lRN ll4       t.V3RO lRP lt/]*PV                  ! 4       V3RQ lRR l4       t0/ 3V3RS lRT llt1]*PV                  ! 4       V3RU lRV l4       t2]*PV                  ! 4       V3RW lRX l4       t3]*PV                  ! 4       V3RY lRZ l4       t4V3R[ lR\ lt5V3R] lR^ lt6R_ t7RuV3R` lRa llt8V3Rb lRc lt9V3Rd lRe lt:RwV3Rf lRg llt;V3Rh lRi lt<Rj t=V3Rk lV 3Rl llt>V3Rm lRn lt?]@V3Ro lRp l4       tAV3Rq lRr ltBRstCVtDV ;tE# )xÚAWQProcessorzHCaptures activations and quantizes layers with the AWQ scaling workflow.c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# )r=   Únamed_moduler?   )r   r   r   )rB   r_   s   "€rC   rD   ÚAWQProcessor.__annotate__‘   s   ø€ ÷ #ñ #±+ð #Á"Ç)Á)ñ #rE   c                ó”   € V P                   P                  R4      p\        V\        P                  4      '       d   V# V P
                  # )zDReturn the dense module view AWQ should use for weight quantization.Úquant_source_module)ÚstateÚgetÚ
isinstancer   r   r>   )r�   Úquant_sources   & rC   Úresolve_quant_source_moduleÚ(AWQProcessor.resolve_quant_source_module�   s>   € ð $×)Ñ)×-Ñ-Ð.CÓDˆÜ�l¤B§I¡I×.Ò.ØÐØ×"Ñ"Ð"rE   FNc                ót   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[,          RS[RS[RS[RS[S[,          /# )r=   ÚqcfgÚcalibration_concat_sizeÚcalibration_sortÚ
batch_sizeÚrequire_fwdÚcalculate_w_wq_diffÚcalibration_concat_separator)r,   r
   rZ   rY   r\   )rB   r_   s   "€rC   rD   rž   ™   sh   ø€ ÷ G&ñ G&ñ ðG&ñ "*©#¥ðG&ñ #¡3�-ðG&ñ ðG&ñ ðG&ñ "ðG&ñ '/©s¥mñG&rE   c                ó8  <€ \         SV `  VVVVVVVV\        V
RRRR7      R7	       W°n        . V n        ^ V n        ^ V n        Wpn        / V n        \        P                  ! 4       V n        \        P                  ! 4       V n        W€n        \        V P                  RR4      p\!        VP"                  VP$                  4      V n        T;'       g    V P'                  V P"                  4      V n        W�n        RV n        RV n        RV n        / V n        / V n        / V n        \9        4       V n        / V n        \        P                  ! 4       V n        / V n         RV n!        V PE                  4        V P2                  PG                  RR4       VPH                  V n$        R# )zAInitializes AWQ processing, layer tracking, and kernel selection.T)r¬   Úfwd_replay_after_processÚsubset_forward_early_stopÚenable_activation_capture)	Ú	tokenizerr¨   Úcalibrationr©   rª   r®   Úprepare_dataset_funcr«   Úexecution_configÚqlinear_kernelNÚattention_maski   @)%ÚsuperÚ__init__r   r­   Ú
avg_lossesÚnsamplesÚ_nsamples_totalÚ_quant_batch_sizeÚ_layer_statesr]   r^   Ú_layer_states_lockÚlocalÚ_scale_contextÚ
gptq_modelrH   r-   rB   ÚmethodÚ!_select_qlinear_kernel_for_formatr·   Úmodelr%   Úmax_chunk_memoryÚduo_scalingÚ_module_forward_kwargsÚ_feature_statsÚ_scale_feature_by_modulerh   Ú_feature_task_namesÚ_awq_feature_kwargsÚ_rotary_lockÚ_rotary_cacheÚ_rotary_source_idÚ_initialize_sample_countsÚ
setdefaultÚfallback)Úselfr³   r¨   r´   rµ   r©   rª   r«   rÃ   rÆ   r¬   r­   r®   Úmodel_kernelÚ	__class__s   &&&&&&&&&&&&& €rC   rº   ÚAWQProcessor.__init__™   st  ø€ ô" 	‰ÑØØØ#Ø$;Ø-Ø)EØ!5Ø!Ü,Ø'Ø)-Ø*.Ø*.ô	ð 	ô 	
ð" $7Ô ØˆŒØˆŒØ ˆÔØ!+Ôà8:ˆÔÜ"+§.¢.Ó"2ˆÔÜ'ŸošoÓ/ˆÔØ$Œä˜tŸ™Ð0@À$ÓGˆÜ*¨4¯;©;¸¿¹ÓDˆŒØ*×aÐa¨d×.TÑ.TÐUY×U`ÑU`Ó.aˆÔàŒ
àˆŒð !3ˆÔð  ˆÔà?AˆÔ#Ø9;ˆÔØ8:ˆÔ%Ü-0«UˆÔ Ø>@ˆÔ Ü%ŸNšNÓ,ˆÔØ35ˆÔØ04ˆÔØ×&Ñ&Ô(Ø×#Ñ#×.Ñ.Ð/?ÀÔFàŸ™ˆŽrE   c                óD   <€ V ^8„  d   QhRS[ S[P                  ,          /# ©r=   r?   )r
   r   r   )rB   r_   s   "€rC   rD   rž   â   s    ø€ ÷ Uñ U¡(©2¯9©9Õ"5ñ UrE   c                óð   € V P                   P                  '       d0   \        V P                  V P                   P                  .4      w  rV# \	        \	        V P                  RV P                  4      RR4      # )zDReturns the model rotary module used to refresh position embeddings.rÆ   Ú
rotary_embN)rÃ   Úrotary_embeddingr5   rÆ   rH   )rÔ   ÚrotaryÚ_s   &  rC   Ú_get_root_rotaryÚAWQProcessor._get_root_rotaryâ   sX   € ð �?‰?×+×+Ð+Ü1°$·*±*¸t¿¹×?_Ñ?_Ð>`Óa‰IˆFØˆMÜ”w˜tŸz™z¨7°D·J±JÓ?ÀÈtÓTÐTrE   c                ó˜   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          RS[ S[P                  ,          /# )r=   rÝ   rÓ   r?   )r
   r   r   r@   rA   )rB   r_   s   "€rC   rD   rž   ê   sH   ø€ ÷ ñ ©±"·)±)Õ)<ð ÉÑQV×Q]ÑQ]ÕH^ð ÑjrÑsx×sÑsõ  kAñ rE   c                óˆ   € Vf   V# \        \        VRR4      RR4      pVe   V#  \        V4      #   \         d    Tu # i ; i)zGResolves the effective device for a rotary module or falls back safely.NÚinv_freqrA   )rH   r0   Ú	Exception)rÔ   rÝ   rÓ   Úrotary_devices   &&& rC   Ú_get_rotary_deviceÚAWQProcessor._get_rotary_deviceê   sU   € ð Š>ØˆOä¤¨°
¸DÓ AÀ8ÈTÓRˆØÒ$Ø Ð ð	Ü˜fÓ%Ð%øÜô 	ØŠOð	ús   ¦
1 ±AÁ Ac                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# )r=   rG   r?   )r
   r@   rA   r   r   )rB   r_   s   "€rC   rD   rž   ù   s0   ø€ ÷ $ñ $±H¹U¿\¹\Õ4Jð $ÉxÑXZ×XaÑXaÕObñ $rE   c                óÜ  € V P                  4       pVe   Vf   V# \        P                  ! V4      pV P                  V4      V8X  d   V# \	        V4      pV P
                  ;_uu_ 4        V P                  4       pVf    RRR4       R# \        V4      pV P                  V8w  d!   V P                  P                  4        W@n        V P                  V4      V8X  d   VuuRRR4       # V P                  P                  V4      pVf7    \        P                  ! V4      p\        WQR7       WRJd   WPP                  V&   VuuRRR4       #   \         d    Tp L:i ; i  + '       g   i     R# ; i)zBReturns a rotary module copy materialized on the requested device.N©rA   )rß   r@   rA   ræ   rY   rÎ   ÚidrÐ   rÏ   Úclearr¢   ÚcopyÚdeepcopyrä   r6   )rÔ   rG   rÝ   Ú	cache_keyÚ	source_idÚcacheds   &&    rC   Ú_get_rotary_for_deviceÚ#AWQProcessor._get_rotary_for_deviceù   sE  € ð ×&Ñ&Ó(ˆØŠ>˜]Ò2ØˆMäŸš ]Ó3ˆØ×"Ñ" 6Ó*¨mÔ;ØˆMä˜Ó&ˆ	Ø××ÓØ×*Ñ*Ó,ˆFØŠ~Ø÷ Ñô
 ˜6›
ˆIØ×%Ñ%¨Ô2Ø×"Ñ"×(Ñ(Ô*Ø)2Ô&à×&Ñ& vÓ.°-Ô?Ø÷ Òð ×'Ñ'×+Ñ+¨IÓ6ˆFØŠ~ð$Ü!Ÿ]š]¨6Ó2�Fô ˜Õ5ØÓ'Ø4:×&Ñ& yÑ1à÷1 Òøô" !ô $Ø#’Fð$ú÷# ×Ðús=   Á(EÂAEÃ&EÄEÄ EÅEÅEÅEÅEÅE+	c                ó   € \        R4      h)zIRejects dataset replacement because AWQ capture is fixed at construction.z5AWQProcessor's calibration_dataset cannot be modified)ÚNotImplementedError)rÔ   Úcalibration_datasets   &&rC   Úset_calibration_datasetÚ$AWQProcessor.set_calibration_dataset  s   € ô "Ð"YÓZÐZrE   c                ó    <€ V ^8„  d   QhRS[ /# rÙ   )r\   )rB   r_   s   "€rC   rD   rž   $  s   ø€ ÷ 
ñ 
¡dñ 
rE   c                ód  € \        V P                  RR4      p\        V\        4      '       d   V\        P                  8H  # \        V\
        P                  4      '       d   VP                  R8H  # \        V\        4      '       d+   VP                  R^4      ^ ,          P                  4       R8H  # R# )zFReturn whether this processor is quantizing for an Ascend NPU runtime.rA   NÚnpuÚ:F)rH   r¨   r£   r   ÚNPUr@   rA   r   rY   ÚsplitÚlower)rÔ   rA   s   & rC   Ú_quant_device_is_npuÚ!AWQProcessor._quant_device_is_npu$  s†   € ô ˜Ÿ™ H¨dÓ3ˆÜ�fœf×%Ò%ØœVŸZ™ZÑ'Ð'Ü�fœeŸl™l×+Ò+Ø—;‘; %Ñ'Ð'Ü�fœc×"Ò"Ø—<‘<  QÓ'¨Õ*×0Ñ0Ó2°eÑ;Ð;ÙrE   c                ó    <€ V ^8„  d   QhRS[ /# )r=   Úformat_value)r*   )rB   r_   s   "€rC   rD   rž   0  s   ø€ ÷ Uñ U¹fñ UrE   c                ó¾  € \        V\        4      '       g   \        V4      MTpV\        P                  8X  d#   V P                  4       '       d   \        # \
        # V P                  4       '       d   \        RV R24      hV\        P                  8X  d   \        # V\        P                  8X  d   \        # V\        P                  8X  d   \        # \        RV 24      h)zEMaps the resolved AWQ format to its concrete quantized linear kernel.zjNPU AWQ quantization requires FORMAT.GEMM so the AwqTorchLinear runtime can run on NPU; actual format is `z`.z)METHOD.AWQ does not support this FORMAT: )r£   r*   ÚGEMMr   r$   r    rK   ÚGEMVr!   Ú	GEMV_FASTr"   ÚLLM_AWQr#   )rÔ   r  Úfmts   && rC   rÅ   Ú.AWQProcessor._select_qlinear_kernel_for_format0  sÀ   € ô +5°\Ä6×*JÒ*JŒf�\Ô"ÐP\ˆØ”&—+‘+ÔØ×(Ñ(×*Ò*Ü%Ð%Ü Ð Ø×$Ñ$×&Ò&Üð%Ø%( E¨ð-óð ð ”&—+‘+ÔÜ Ð Ø”&×"Ñ"Ô"Ü$Ð$Ø”&—.‘.Ô ÜÐô ÐDÀ\ÀNÐSÓTÐTrE   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r=   Úmodule_name)r
   rY   )rB   r_   s   "€rC   rD   rž   H  s   ø€ ÷ 
Eñ 
E±8¹Cµ=ñ 
ErE   c                óH  € V'       d   V P                   P                  VRR4      MRp\        T;'       g    V P                   P                  V P                   P                  4      pW0P                  8X  d   \        V P                  RR4      pVe   V# V P                  V4      # )zCResolves the AWQ kernel after applying any dynamic format override.rB   Nr·   )r¨   Údynamic_getr-   rB   rÄ   rH   rÃ   rÅ   )rÔ   r  Úformat_overrideÚtarget_formatrÕ   s   &&   rC   Ú_resolve_qlinear_kernelÚ$AWQProcessor._resolve_qlinear_kernelH  sˆ   € ÷ Q\˜$Ÿ)™)×/Ñ/°¸XÀtÔLÐaeˆÜ,¨_×-PÐ-PÀÇ	Á	×@PÑ@PÐRV×R[ÑR[×RbÑRbÓcˆØŸK™KÔ'Ü" 4§?¡?Ð4DÀdÓKˆLØÒ'Ø#Ð#Ø×5Ñ5°mÓDÐDrE   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r=   Úlayer_indexr?   ©rZ   rN   )rB   r_   s   "€rC   rD   rž   T  s   ø€ ÷ ñ ©Cð ±Nñ rE   c                óÖ   € V P                   ;_uu_ 4        V P                  P                  V4      pVf   \        4       pW P                  V&   RRR4       V#   + '       g   i     X# ; i)zDReturns the mutable tracking state for a specific transformer layer.N)rÀ   r¿   r¢   rN   )rÔ   r  r¡   s   && rC   Ú_get_layer_stateÚAWQProcessor._get_layer_stateT  s]   € ð ×$×$Ó$Ø×&Ñ&×*Ñ*¨;Ó7ˆEØŠ}Ü&Ó(�Ø27×"Ñ" ;Ñ/÷	 %ð
 ˆ÷ %Ö$ð
 ˆús   •8AÁA(	c                óŽ   <€ \         SV `  4       pR V P                  RV P                  RV P                  RV P
                  /VR&   V# )r»   r¼   Únsamples_totalÚquant_batch_sizeÚawq)r¹   Úcontinuation_state_dictr»   r¼   r½   r¾   ©rÔ   r¡   rÖ   s   & €rC   r  Ú$AWQProcessor.continuation_state_dict^  sJ   ø€ Ü‘Ñ/Ó1ˆà˜$Ÿ/™/Ø˜Ÿ™Ø˜d×2Ñ2Ø × 6Ñ 6ð	
ˆˆe‰ð ˆrE   c                óÎ   <€ \         SV `  V4       VR ,          R,          V n        VR ,          R,          V n        VR ,          R,          V n        VR ,          R,          V n        R# )r  r»   r¼   r  r  N)r¹   Úload_continuation_state_dictr»   r¼   r½   r¾   r  s   &&€rC   r!  Ú)AWQProcessor.load_continuation_state_dicth  sT   ø€ Ü‰Ñ,¨UÔ3Ø �, |Õ4ˆŒØ˜e� ZÕ0ˆŒØ$ U�|Ð,<Õ=ˆÔØ!& u¥Ð.@Õ!AˆÖrE   c                ó   <€ V ^8„  d   QhRR/# ©r=   r?   Nra   )rB   r_   s   "€rC   rD   rž   o  s   ø€ ÷ %ñ %¨4ñ %rE   c                ó  € ^ p\        V RR4      pVf   ^ V n        ^ V n        R# V F   p\        V\        4      '       g   K  VP                  R4      pVf   K2  \        V\        P                  4      '       d<   VP                  4       ^8:  d   V^,          pKr  WP                  ^ ,          ,          pK�   V\        V4      ,          pK¢  	  \        V R^ 4      ;'       g    TpWPn        WPn        R#   \         d    T^,          p Kà  i ; i)z>Computes sample and token totals from the calibration dataset.rö   NÚ	input_idsÚtotal_calibration_tokens)rH   r½   r¼   r£   rg   r¢   r@   rq   rw   r~   ÚlenrI   )rÔ   ÚtotalÚdatasetÚrowr&  Útotal_tokenss   &     rC   rÑ   Ú&AWQProcessor._initialize_sample_countso  sê   € ð ˆÜ˜$Ð 5°tÓ<ˆØŠ?Ø#$ˆDÔ ØˆDŒMÙãˆCÜ˜c¤4×(Ò(ÙØŸ™ Ó,ˆIØÒ ÙÜ˜)¤U§\¡\×2Ò2Ø—=‘=“? aÔ'Ø˜Q•J’EàŸ_™_¨QÕ/Õ/’EðØœS ›^Õ+’Eñ ô" ˜tÐ%?ÀÓC×LÐLÀuˆØ+ÔØ$Žøô !ô Ø˜Q•J“Eðús   Â4C/Ã/DÄDc                óL   <€ V ^8„  d   QhRS[ RS[S[S[ S[3,          ,          /# )r=   r  r?   )rY   r
   r   r   )rB   r_   s   "€rC   rD   rž   Ž  s)   ø€ ÷ ñ ±sð ¹xÉÉSÑRUÈXÍÕ?Wñ rE   c                ó   € \        V P                  RR4      p\        V4      '       g   R# V! V4      pVf   R# \        V\        4      '       g'   \        RV: R\        V4      P                   R24      h\        V4      # )z@Return an optional model-specific activation aggregation policy.Úawq_input_feature_aggregationNz@awq_input_feature_aggregation must return a mapping or None for z, got rs   )	rH   rÃ   Úcallabler£   r   rI   r   rb   rg   )rÔ   r  ÚselectorÚpolicys   &&  rC   Ú_feature_aggregation_policyÚ(AWQProcessor._feature_aggregation_policyŽ  s€   € ô ˜4Ÿ?™?Ð,KÈTÓRˆÜ˜×!Ò!ÙÙ˜+Ó&ˆØŠ>ÙÜ˜&¤'×*Ò*ÜðØ"‘o V¬D°«L×,AÑ,AÐ+BÀ!ðEóð ô �F‹|ÐrE   Údedupe_batchc                óD   <€ V ^8„  d   QhRS[ RS[P                  RS[RR/# )r=   r  Úfeaturer6  r?   N)rY   r@   rq   r\   )rB   r_   s   "€rC   rD   rž   ž  s=   ø€ ÷ 9Fñ 9Fáð9Fñ —‘ð9Fñ
 ð9Fð 
ñ9FrE   c               óž  € V P                  4       pRpV'       d“   Ve�   V P                  ;_uu_ 4        V P                  P                  V4      pVf   R. R. /pW`P                  V&   VP	                  R\        4       4      pWG9   d    RRR4       R# VP                  V4       RpRRR4        V P                  V4      pVP                  4       ^8:  d   VP                  ^ 4      pVP                  P                  R8w  d    VP                  4       P                  4       pMVP                  4       p V P                  ;_uu_ 4        V P                  P                  V4      pVf   R. R. /pW`P                  V&   V'       dI   VeE   V'       g=   VP	                  R\        4       4      pWG9   d    RRR4       R# VP                  V4       VP	                  R. 4      pVP!                  V4       VP	                  R. 4      P!                  V4       RRR4       R#   + '       g   i     ELz; i  \         d„    T'       dz   T P                  ;_uu_ 4        T P                  P                  T4      pTe*   TP                  R\        4       4      P                  T4       RRR4       h   + '       g   i     h ; ih i ; i  + '       g   i     R# ; i)z<Caches one captured input feature tensor for a named module.FNÚinputsÚbatch_indicesÚseen_batch_indicesTÚcpu)Úcurrent_batch_indexrX   Útasksr¢   rÒ   rh   ÚaddÚ"_apply_active_keep_mask_to_featurerw   Ú	unsqueezerA   r   r}   r=  rä   Údiscardr€   )	rÔ   r  r8  r6  Úbatch_indexÚreserved_batch_indexÚentryr<  Úinputs_lists	   &&&$     rC   Ú_record_input_featureÚ"AWQProcessor._record_input_featurež  sA  € ð ×.Ñ.Ó0ˆØ$Ðß˜KÒ3ð
 ——“ØŸ
™
Ÿ™ {Ó3�Ø’=Ø% r¨?¸BÐ?�EØ.3—J‘J˜{Ñ+Ø%*×%5Ñ%5Ð6JÌCËEÓ%RÐ"ØÔ4Ø÷ ‘ð #×&Ñ& {Ô3Ø'+Ð$÷ ð	Ø×=Ñ=¸gÓFˆGð �{‰{‹} Ô!Ø!×+Ñ+¨AÓ.�Ø�~‰~×"Ñ" eÔ+Ø!Ÿ.™.Ó*×.Ñ.Ó0‘à!Ÿ.™.Ó*‘ð �Y�Y‹YØ—J‘J—N‘N ;Ó/ˆEØŠ}Ø! 2 ¸Ð;�Ø*/—
‘
˜;Ñ'ß Ò 7×@TØ%*×%5Ñ%5Ð6JÌCËEÓ%RÐ"ØÔ4Ø÷ ‰Yð #×&Ñ& {Ô3Ø×*Ñ*¨8°RÓ8ˆKØ×Ñ˜wÔ'Ø×Ñ˜_¨bÓ1×8Ñ8¸ÔE÷ ‰Y÷; —�ûô* ô 	ß#Ø—Y—Y“YØ ŸJ™JŸN™N¨;Ó7�EØÒ(ØŸ	™	Ð"6¼»Ó>×FÑFÀ{ÔS÷ ð ÷	 –Yð úˆEð	ú÷ �YˆYúsc   ³AHÂHÂ.A0H* ÄH* Å;J;Æ J;Æ!J;Æ7AJ;ÈH'	È*J8È=J8ÉA	J#Ê	J8Ê#J3Ê.
J8Ê;K	c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r=   r8  r?   ©r@   rq   )rB   r_   s   "€rC   rD   rž   Ù  s#   ø€ ÷ ñ ¹%¿,¹,ð É5Ï<É<ñ rE   c                ó  € \        \        V RR4      RR4      p\        P                  ! V4      '       d.   \        P                  ! V4      '       d   VP                  ^8w  d   V# VP	                  VP
                  \        P                  R7      pVP                  4       ^8¼  d   \        VP                  R,          4      \        VP                  4      8X  dK   VP                  ! R.VP                  R,          O5!  pW2P                  R4      ,          P                  4       # VP                  4       ^8X  dL   VP                  ^ ,          VP                  4       8X  d&   WP                  R4      ,          P                  4       # V# )a„  Remove padded rows from an activation captured by the current worker.

Regular module hooks normally receive ``[B, S, H]`` inputs, while the
all-expert calibration path flattens the same input to ``[B * S, H]``.
Handle both layouts so root and expert statistics exclude the same
padding rows. Inputs that cannot be matched unambiguously to the active
mask retain their existing behavior.
Ú	_mask_tlsNÚvalue©rA   ru   :Nr=   N:r=   NNr{   )rH   r@   Ú	is_tensorÚndimr�   rA   r\   rw   Útupler~   r…   Ú
contiguousÚnumel)rÔ   r8  Ú	keep_maskÚ	flatteneds   &&  rC   rA  Ú/AWQProcessor._apply_active_keep_mask_to_featureÙ  s  € ô œG D¨+°tÓ<¸gÀtÓLˆ	Ü�Š˜w×'Ò'¬u¯ª¸y×/IÒ/IÈYÏ^É^Ð_`ÔM`ØˆNà—L‘L¨¯©¼e¿j¹j�LÓIˆ	Ø�;‰;‹=˜AÔ¤%¨¯©°bÕ(9Ó":¼eÀIÇOÁOÓ>TÔ"TØŸš¨Ð?¨W¯]©]¸2Õ->Ó?ˆIØ×.Ñ.¨rÓ2Õ3×>Ñ>Ó@Ð@à�;‰;‹=˜AÔ '§-¡-°Õ"2°i·o±oÓ6GÔ"GØ×,Ñ,¨RÓ0Õ1×<Ñ<Ó>Ð>àˆrE   c                ó>   <€ V ^8„  d   QhRS[ RS[P                  RR/# )r=   r  r8  r?   N)rY   r@   rq   )rB   r_   s   "€rC   rD   rž   ñ  s,   ø€ ÷ Lñ L¹ð LÁuÇ|Á|ð LÐX\ñ LrE   c                óè  a€ \        V RR4      '       d   R# V P                  V4      pV'       d   VP                  RR4      '       g   R# V R2oV P                  ;_uu_ 4        \        ;QJ d)    V3R lV P
                   4       F  '       g   K   RM	  RM! V3R lV P
                   4       4      '       g    RRR4       R#  RRR4       V P                  WRR7       R#   + '       g   i     L%; i)	a=  Capture one pointwise MoE-root input per calibration batch when requested.

MoE layers are normally hooked only at expert projections.  Model-specific
AWQ scale groups may instead need the shared pre-router input.  The policy
gate keeps this opt-in so sequence-sensitive models retain their existing
replay contract.
Úcoverage_onlyFNÚcapture_rootrs   c              3   óD   <"  € T F  qP                  S4      x € K  	  R # 5i©N)Ú
startswith)Ú.0ÚnameÚtask_prefixs   & €rC   Ú	<genexpr>Ú=AWQProcessor.record_moe_root_input_feature.<locals>.<genexpr>  s   øé € ÐKÁ
¸—‘ {×3Ð3Ã
ùs   ƒ T)r6  )rH   r4  r¢   rX   Úanyr?  rH  )rÔ   r  r8  r3  ra  s   &&& @rC   Úrecord_moe_root_input_featureÚ*AWQProcessor.record_moe_root_input_featureñ  s¬   ø€ ô �4˜¨%×0Ò0Ùà×1Ñ1°+Ó>ˆß˜VŸZ™Z¨¸×>Ò>Ùð %˜ QÐ'ˆØ�Y�Y‹Yß“3ÔKÀÇ
Â
ÓK—3—3’3ÔKÀÇ
Â
ÓK×KÒKØ÷ ‰YØK÷ ð 	×"Ñ" ;ÀdÐ"ÖK÷ �Yús   Á#*C!Â'C!Â8C!Ã!C1	c                óB   <€ V ^8„  d   QhRS[ RS[RS[S[,          RS[/# )r=   Ú	moe_blockÚmoe_block_nameÚhandlesr?   )r   rY   r	   r   r\   )rB   r_   s   "€rC   rD   rž   	  s7   ø€ ÷ ñ áðñ ðñ ‘c•ð	ñ
 
ñrE   c                óú   a a€ S P                   P                  '       g   R# S P                  S4      pV'       d   VP                  RR4      '       g   R# VV 3R lpVP	                  VP                  V4      4       R# )a7  Register AWQ's shared MoE-root capture before the block executes.

AWQ is the only lifecycle that consumes this shared pointwise feature.
Keep the activation-capture and model-policy gates here, alongside the
recorder they protect, so the generic subset executor remains unaware
of AWQ-specific state and math.
Fr[  c                 óN   <€ V'       d   SP                  SV^ ,          4       R# R# ©r   N)re  )Ú_moduler:  ri  rÔ   s   &&€€rC   Úcapture_moe_root_inputÚKAWQProcessor.register_moe_root_capture_hook.<locals>.capture_moe_root_input  s   ø€ ßØ×2Ñ2°>À6È!Å9ÖMñ rE   T)r¶   r²   r4  r¢   r€   Úregister_forward_pre_hook)rÔ   rh  ri  rj  Úroot_policyro  s   f&f&  rC   Úregister_moe_root_capture_hookÚ+AWQProcessor.register_moe_root_capture_hook	  sc   ù€ ð ×$Ñ$×>×>Ð>Ùà×6Ñ6°~ÓFˆß +§/¡/°.À%×"HÒ"HÙö	Nð 	�‰�y×:Ñ:Ð;QÓRÔSÙrE   c                óJ   <€ V ^8„  d   QhRS[ S[P                  ,          RS[/# ©r=   Útensorsr?   )r	   r@   rq   r\   )rB   r_   s   "€rC   rD   rž   &  s$   ø€ ÷ 

ñ 

©4±·±Õ+=ð 

Á$ñ 

rE   c                óž   a€ V '       g   R# V ^ ,          o\         ;QJ d    V3R lV  4       F  '       d   K   R# 	  R# ! V3R lV  4       4      # )z=Return whether cached tensors share the same non-batch shape.Fc              3   óÄ   <"  € T FU  pVP                  4       SP                  4       8H  ;'       d(    VP                  R ,          SP                  R ,          8H  x € KW  	  R# 5i)ºé   NNN)rw   r~   )r_  ÚtensorÚfirsts   & €rC   rb  Ú9AWQProcessor._can_concat_batch_tensors.<locals>.<genexpr>-  sJ   øé € ð 
á!�ð �J‰J‹L˜EŸI™I›KÑ'×OÐO¨F¯L©L¸Õ,<ÀÇÁÈBÅÑ,OÔOÛ!ùs
   ƒ,A °0A T)Úall)rw  r}  s   &@rC   Ú_can_concat_batch_tensorsÚ&AWQProcessor._can_concat_batch_tensors%  sO   ø€ ÷ Ùà˜•
ˆß‹sô 
á!ó
�sŒsð 	
Šsð 	
ˆsô 
á!ó
ó 
ð 	
rE   c                óJ   <€ V ^8„  d   QhRS[ S[P                  ,          RS[/# rv  )r	   r@   rq   rZ   )rB   r_   s   "€rC   rD   rž   3  s(   ø€ ÷ Iñ I¡4©¯©Õ#5ð I¹#ñ IrE   c                ó„  € . pV  Fy  pVP                  4       ^8  d   K  \        VP                  R,          4      pV^ 8:  d   K?  \        VP                  4       V,          4      pV^ 8”  g   Kh  VP	                  V4       K{  	  V'       g   ^ # \        V4      p\        V4      p\        V4      p\        V\        Wg4      4      # )a’  Derive a pointwise sample budget from observed calibration batches.

Use one largest-batch equivalent, raised to the number of non-empty
batches so every contributing batch can retain at least one row. This
adapts to actual batch size, sequence lengths, and expert occupancy
while limiting any increase beyond the largest observed activation
batch to the minimum needed for one-row-per-batch coverage.
r{   )	rw   rZ   r~   rT  r€   r‰   Úmaxr(  Úmin)rw  Ú
row_countsr|  Úhiddenr“   Ú
raw_tokensÚlargest_batchÚcontributing_batchess   &       rC   Ú_token_row_budgetÚAWQProcessor._token_row_budget2  s¡   € ð ˆ
ÛˆFØ�z‰z‹|˜aÔÙÜ˜Ÿ™ bÕ)Ó*ˆFØ˜Œ{ÙÜ�v—|‘|“~¨Õ/Ó0ˆDØ�aŽxØ×!Ñ! $Ö'ñ ÷ Ùä˜“_ˆ
Ü˜J›ˆÜ" :›ÐÜ�:œs =ÓGÓHÐHrE   c                óz   <€ V ^8„  d   QhRS[ S[P                  ,          RS[RS[S[P                  S[3,          /# )r=   rw  Ú
max_tokensr?   )r	   r@   rq   rZ   r   )rB   r_   s   "€rC   rD   rž   Q  sJ   ø€ ÷ mEñ mEÙ‘e—l‘lÕ#ðmEñ ðmEñ 
‰u�|‰|™SÐ Õ	!ñ	mErE   c          	     ó	  aa€ V '       g   \         P                  ! ^ 4      ^ 3# V^ 8:  d   \        RV R24      h\        V ^ ,          P                  R,          4      p. p^ pV  F¾  pVP                  4       ^8  g"   \        VP                  R,          4      V8w  d&   \        RV R\        VP                  4       R24      hVP                  RV4      pV\        VP                  ^ ,          4      ,          pVP                  ^ ,          ^ 8”  g   K­  VP                  V4       KÀ  	  V^ 8X  d   V ^ ,          P                  ^^ V34      ^ 3# \        WA4      pWt8X  d*   \         P                  ! V^ R7      P                  ^ 4      V3# V Uu. uF  p\        VP                  ^ ,          4      NK!  	  p	p\        V4      p
Wz8  d¤   V^8X  d   ^ .pM>\        V4       Uu. uF)  p\        WÊ^,
          ,          V^,
          ,          4      NK+  	  pp\        P!                  V4       Uu. uF  qÓV,          R,          NK  	  pp\         P                  ! V^ R7      P                  ^ 4      V3# ^.V
,          pWz,
          pV^ 8”  dð   V	 Uu. uF  pVV,          V,          NK  	  upoS Uu. uF  p\        V4      NK  	  upo\#        S4       F  w  ppVV;;,          V,          uu&   K  	  V\%        V4      ,
          p\'        \        V
4      VV3R lR7      pV^ 8”  dW   R	pV FC  pV^ 8:  d    M;VV,          V	V,          8  g   K#  VV;;,          ^,          uu&   V^,          pR
pKE  	  V'       d   K\   . p\)        W?V	4       FÇ  w  ppp\        VV4      pV^ 8:  d   K  VV8X  d   VP                  V4       K6  V^8X  d(   \         P*                  ! ^\         P,                  R7      pMB\         P.                  ! V\         P,                  R7      V^,
          ,          V^,
          ,          pVP                  VP1                  ^ V4      4       KÉ  	  \         P                  ! V^ R7      P                  ^ 4      V3# u upi u upi u upi u upi u upi )a°  Pack ragged pointwise activations into deterministic bounded token rows.

The returned tensor always has shape ``[1, retained_tokens, hidden]``.
Whenever ``max_tokens`` is at least the number of non-empty cached
batches, every non-empty calibration batch contributes at least one
row; the remaining budget is distributed proportionally to batch length
(largest remainder, ties broken by batch order) and rows are sampled
evenly inside each batch.
This avoids the previous latest-batch-only bias without allocating a
full concatenated activation tensor first. When ``max_tokens`` is
smaller than the batch count, one row is taken from each of
``max_tokens`` evenly spaced batches instead.
z/AWQ token-row max_tokens must be positive, got rs   zMAWQ token-row aggregation requires tensors with one common hidden dimension (z); got shape=rv   ºNr{  Nc                 ó8   <€ SV ,          SV ,          ,
          ) V 3# r]  ra   )ÚindexÚexactÚfloorss   &€€rC   Ú<lambda>Ú/AWQProcessor._pack_token_rows.<locals>.<lambda>š  s   ø€  U¨5¥\°F¸5µMÕ%AÐ#BÀEÑ"JrE   ©ÚkeyFTrt   r{   )r@   ÚemptyrK   rZ   r~   rw   rR  r…   r€   Ú	new_emptyr…  rƒ   rB  r(  Úrangerg   ÚfromkeysÚ	enumerater‰   ÚsortedÚziprŠ   Úint64ÚarangeÚindex_select)rw  rŽ  r‡  r“   r,  r|  rV  Úretained_tokensÚtensor_rowsÚlengthsÚbatch_countÚ	batch_idsÚiÚbatch_idÚselectedÚquotasÚ	remainingÚlengthÚsharer’  Úfloor_shareÚleftoverÚorderÚdistributedÚquotaÚlocal_indicesr“  r”  s   &$                        @@rC   Ú_pack_token_rowsÚAWQProcessor._pack_token_rowsP  s
  ù€ ÷( Ü—;’;˜q“> 1Ð$Ð$Ø˜Œ?ÜÐNÈzÈlÐZ[Ð\Ó]Ð]ä�W˜Q•Z×%Ñ% bÕ)Ó*ˆØˆØˆÛˆFØ�z‰z‹|˜aÔ¤3 v§|¡|°BÕ'7Ó#8¸FÔ#BÜ ð)Ø)/¨°¼eÀFÇLÁLÓ>QÐ=RÐRSðUóð ð Ÿ™ r¨6Ó2ˆIØœC 	§¡°Õ 2Ó3Õ3ˆLØ�‰˜qÕ! AÖ%Ø—‘˜IÖ&ñ ð ˜1ÔØ˜1•:×'Ñ'¨¨A¨v¨Ó7¸Ð:Ð:ä˜lÓ7ˆØÔ*Ü—9’9˜T qÔ)×3Ñ3°AÓ6¸ÐDÐDá@DÓEÁ°”3�{×(Ñ(¨Õ+Ö,ÁˆÐEÜ˜$“iˆàÔ(ð  !Ô#Ø˜C‘	ô # ?Ô3óá3˜ô ˜¨1�_Õ-°/ÀAÕ2EÕFÖGÙ3ð ð ô <@¿=¹=ÈÔ;SÓTÑ;S¨x˜X� r×*Ð*Ñ;SˆHÐTÜ—9’9˜X¨1Ô-×7Ñ7¸Ó:¸LÐHÐHð ��{Õ"ˆØ#Õ1ˆ	Ø�qŒ=ÙELÓMÁW¸6�V˜iÕ'¨,×6Ð6ÁWÑMˆEÙ.3Ó4©e U”c˜%–j©eÑ4ˆFÜ&/°Ö&7Ñ"��{Ø�u— Õ,•ñ '8à&¬¨V«Õ4ˆHÜÜ�kÓ"ÝJôˆEð ˜Q”,Ø#�Û"�EØ 1”}ÙØ˜e•} w¨u¥~Ö5Ø˜uŸ¨Õ*›Ø  A�˜Ø&*šñ #÷ #‘{ØàˆÜ*-¨d¸GÖ*DÑ&ˆK˜ Ü˜˜vÓ&ˆEØ˜ŒzÙØ˜ŒØ—‘ Ô,ÙØ˜ŒzÜ %§¢¨A´U·[±[Ô A‘ô —L’L ¬e¯k©kÔ:Ø •zõ#à �	õ#ð ð
 �O‰O˜K×4Ñ4°Q¸ÓFÖGñ +Eô  �yŠy˜ qÔ)×3Ñ3°AÓ6¸ÐDÐDùòA Fùòùò Uùò NùÚ4s   Æ%Q+Ç/Q0ÈQ5É>Q:ÊQ?c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )r=   Úvaluesr?   )r	   r   )rB   r_   s   "€rC   rD   rž   Á  s   ø€ ÷ ñ ¡t©C¥yð ±Sñ rE   c                óÌ  € V  Uu. uF
  qf   K  VNK  	  ppV'       g   R# V^ ,          p\         P                  ! V4      '       dŽ   V  Uu. uF#  p\         P                  ! V4      '       g   K!  VNK%  	  pp\        V4      \        V4      8w  d
   VR,          # \        P	                  V4      '       d   \         P
                  ! V^ R7      # VR,          # VR,          # u upi u upi )a˜  Merge cached per-batch metadata while preserving feature alignment.

When every tensor has the same trailing shape, we concatenate on dim 0
so the metadata still lines up with a concatenated feature tensor.

When sequence lengths differ across batches, the cached metadata no
longer shares a common shape. Real AWQ repros hit cases like
`attention_mask` `[1, 1, 423, 423]` plus `[1, 1, 36, 36]` and
`position_ids` `[1, 423]` plus `[1, 36]`. Those values cannot be
concatenated into one batch-aligned tensor, so we return the most
recent non-None value. `_layer_input_features()` makes the same choice
for the corresponding feature tensor by keeping `tensors[-1]`.
Nrv   r{   )r@   rP  r(  r›   r€  rƒ   )r¸  rN  Únon_noner}  rw  s   &    rC   Ú_concat_batch_metadataÚ#AWQProcessor._concat_batch_metadataÀ  sµ   € ñ  (.ÓC¡v˜e—E�E¡vˆÐCßÙà˜•ˆÜ�?Š?˜5×!Ò!Ù*0ÓK©& ´E·O²OÀE×4J—u�u©&ˆGÐKÜ�7‹|œs 8›}Ô,Ø •|Ð#Ü×5Ñ5°g×>Ò>Ü—y’y ¨aÔ0Ð0Ø˜B•<Ðà˜�|Ðùò Dùò Ls   …C�CÁ
C!Á-C!c                ó\   <€ V ^8„  d   QhRS[ S[S[,          ,          RS[S[S[3,          /# )r=   r;  r?   )r	   r
   rZ   r   rY   r   )rB   r_   s   "€rC   rD   rž   ß  s1   ø€ ÷ ?ñ ?ÁÁXÉcÅ]Õ@Sð ?ÑX\Ñ]`ÑbeÐ]eÕXfñ ?rE   c           	     ó  € \        \        V R/ 4      4      p\        V RR4      pVf   V# V Uu. uF  qDf   K  V^ 8¼  g   K  \        V4      NK  	  ppV'       g   V# \        VRR4      ;'       g    . pV'       dC   V Uu. uF  pV\        V4      8  g   K  Wd,          NK  	  ppV P	                  V4      pVe   W‚R&   \        VRR4      ;'       g    . p	V	'       dC   V Uu. uF  pV\        V	4      8  g   K  W”,          NK  	  p
pV P	                  V
4      pVe   W²R&   \        VRR4      ;'       g    . pV'       d²   V Uu. uF  pV\        V4      8  g   K  WÄ,          NK  	  ppV'       d�   / pV UUu0 uF  pVP                  4        F  pVkK  	  K  	  pppV F=  pT P	                  V Uu. uF  qÿP                  V4      NK  	  up4      pVf   K8  VVV&   K?  	  VP                  V4       V# u upi u upi u upi u upi u uppi u upi )at  Build kwargs aligned to the captured feature batches.

This helper mirrors how `_layer_input_features()` collapses cached
activations. If all selected metadata tensors share the same trailing
dimensions we concatenate them. If sequence lengths differ across
batches, we keep the most recent metadata entry so it stays aligned
with the most recent feature tensor fallback.
rÉ   Úinputs_cacheNÚattention_masksr¸   Úposition_idsÚlayer_input_kwargs)rg   rH   rZ   r(  r»  Úkeysr¢   Úupdate)rÔ   r;  Úfeature_kwargsÚcacheÚidxÚvalid_indicesrÀ  Úselected_masksÚmerged_maskrÁ  Úselected_posÚ
merged_posÚinput_kwargsÚselected_kwargsÚmerged_input_kwargsÚkwargsr˜  Úall_keysÚmerged_values   &&                 rC   Ú"_feature_kwargs_from_batch_indicesÚ/AWQProcessor._feature_kwargs_from_batch_indicesß  sR  € ô *.¬g°dÐ<TÐVXÓ.YÓ)ZˆÜ˜˜n¨dÓ3ˆØŠ=Ø!Ð!á-:Ó[©] cœÐRUÐYZÑRZœœ˜Sž©]ˆÐ[ßØ!Ð!ä! %Ð):¸DÓA×GÐGÀRˆßñ )óá(�CØœ˜_Ó-Ñ-ô %�×$Ð$Ù(ð ð ð
 ×5Ñ5°nÓEˆKØÒ&Ø3>Ð/Ñ0ä˜u n°dÓ;×AÐA¸rˆßñ )óá(�CØœ˜\Ó*Ñ*ô "�×!Ð!Ù(ð ð ð
 ×4Ñ4°\ÓBˆJØÒ%Ø1;˜~Ñ.ä˜uÐ&:¸DÓA×GÐGÀRˆßñ )óá(�CØœ˜\Ó*Ñ*ô "�×!Ð!Ù(ð ð ÷
 Ø68Ð#ñ #2ôá"1˜Ø%Ÿ{™{ž}˜ó á,ñ Ù"1ð ñ ó
 $�CØ#'×#>Ñ#>Ù7FÓG±¨VŸ™ Cž±ÑGó$�Lð $Ô/Ø3?Ð+¨CÓ0ñ $ð ×%Ñ%Ð&9Ô:àÐùòa \ùòùòùòùóùò Hs@   ®G0¸G0ÁG0Á?G5ÂG5Ã G:Ã7G:ÅG?ÅG?Å5"HÆ.H

c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# ©r=   Úbatch_tensorrU  r?   rK  )rB   r_   s   "€rC   rD   rž   !  s1   ø€ ÷ :ñ :©E¯L©Lð :ÁUÇ\Á\ð :ÑV[×VbÑVbñ :rE   c                ó\  € VP                   ^ ,          pT pVP                   ^ ,          ^8X  d-   V^8”  d&   VP                  ! V.VP                   R,          O5!  p\        V4       Uu. uF  qCWAV,          3,          NK  	  pp\        P                  ! V^ R7      P                  ^ 4      # u upi )z:Pack per-batch row tensors into one kept-token row tensor.rz  rv   )r~   Úexpandr›  r@   rƒ   rB  )r×  rU  ÚbatchÚsourcerD  Úpacked_rowss   &&    rC   Ú_pack_kept_token_rowsÚ"AWQProcessor._pack_kept_token_rows   s•   € ð —‘ Õ"ˆØˆØ�<‰<˜�?˜aÔ E¨A¤IØ—]’] 5Ð<¨6¯<©<¸Õ+;Ó<ˆFÜV[Ð\aÔVbÓcÑVbÀ{˜k°[Õ+AÐA×BÐBÑVbˆÐcÜ�yŠy˜¨!Ô,×6Ñ6°qÓ9Ð9ùò ds   Á'B)c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# rÖ  rK  )rB   r_   s   "€rC   rD   rž   ,  s1   ø€ ÷ ñ ±·±ð ÉÏÉð ÑZ_×ZfÑZfñ rE   c                óº  € V Uu. uF*  p\        VP                  4       P                  4       4      NK,  	  pp\        V4      pV P                  4       '       d+   \        P
                  ! V P                  4      P                  M^ p\        P                  ! ^.V P                  ^R OVNVN5VV P                  V P                  R7      p^ p\        V4       F~  w  r‰V	^ 8:  d   K  W,          P                  V P                  \        P                  R7      p
WV^,            RV
R3,          pVRV
3,          pW¶RWwV	,           1WwV	,           13&   Wy,          pK€  	  V# u upi )zCPack per-batch square token tensors into one block-diagonal tensor.)Ú
fill_valueru   rA   rO  .ºNNNéþÿÿÿ)rZ   r‰   ÚitemÚis_floating_pointr@   Úfinforu   r…  Úfullr~   rA   r�  r�   r\   )r×  rU  r+  r¥  Ú
total_keptrá  ÚpackedÚoffsetrD  r­  ÚkeepÚblocks   &&          rC   Ú_pack_square_token_blocksÚ&AWQProcessor._pack_square_token_blocks+  s@  € ñ 5>Ó>±I¨S”3�s—w‘w“y—~‘~Ó'Ö(±IˆÐ>Ü˜“\ˆ
Ø<H×<ZÑ<Z×<\Ò<\”U—[’[ ×!3Ñ!3Ó4×8Ò8Ðbcˆ
Ü—’ØÐB�×#Ñ# A bÐ)ÐB¨:ÐB°zÑBØ!Ø×$Ñ$Ø×&Ñ&ô	
ˆð ˆÜ#,¨WÖ#5ÑˆKØ˜Œ{ÙØÕ)×,Ñ,°L×4GÑ4GÌuÏzÉzÐ,ÓZˆDØ ¨[¸1­_Ð=¸cÀ4È¸lÕKˆEØ˜#˜t˜)Õ$ˆEØJO�3˜¨�Ð.°ÀµÐ0FÐFÑGØÕŠFñ $6ð ˆùò% ?s   …0Ec                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r=   r¸   rU  r?   rK  )rB   r_   s   "€rC   rD   rž   D  s3   ø€ ÷ ñ ÙŸ™ðá—<‘<ðñ 
�‰ñrE   c                óF  € VP                   ^ ,          pV P                  R9   d.   V P                   ^ ,          V8X  d   \        P                  W4      # V P                  ^8X  d?   V P                   ^,          VP                   ^,          8X  d   \        P	                  W4      # V # )zFPack a per-sample mask to match a flattened kept-token feature tensor.)é   é   )r~   rQ  r›   rí  rÝ  )r¸   rU  rÚ  s   && rC   Ú _pack_attention_mask_for_featureÚ-AWQProcessor._pack_attention_mask_for_featureC  s„   € ð —‘ Õ"ˆà×Ñ &Ô(¨^×-AÑ-AÀ!Õ-DÈÔ-MÜ×9Ñ9¸.ÓTÐTà×Ñ !Ô#¨×(<Ñ(<¸QÕ(?À9Ç?Á?ÐSTÕCUÔ(UÜ×5Ñ5°nÓPÐPàÐrE   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r=   rÁ  rU  r?   rK  )rB   r_   s   "€rC   rD   rž   U  s8   ø€ ÷ Kñ KÙ—l‘lðKá—<‘<ðKñ 
�‰ñKrE   c                ó  € VP                   ^ ,          pV P                  ^8w  g*   V P                   ^,          VP                   ^,          8w  d   V # V P                   ^ ,          ^V39  d   V # \        P                  W4      # )zKPack per-sample position ids to match flattened kept-token feature tensors.)r~   rQ  r›   rÝ  )rÁ  rU  rÚ  s   && rC   Ú_pack_position_ids_for_featureÚ+AWQProcessor._pack_position_ids_for_featureT  so   € ð —‘ Õ"ˆØ×Ñ Ô! \×%7Ñ%7¸Õ%:¸i¿o¹oÈaÕ>PÔ%PØÐà×Ñ˜aÕ ¨¨E¨
Ô2ØÐä×1Ñ1°,ÓJÐJrE   c                ól   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[S[S[3,          /# )r=   ÚinpÚmodule_kwargsr?   )r@   rq   r   rY   r   )rB   r_   s   "€rC   rD   rž   d  sB   ø€ ÷ Wñ Wá�\‰\ðWñ ™C¡˜H•~ðWñ 
‰c‘3ˆh�ñ	WrE   c                ó:  € \        V4      pVP                  R4      p\        P                  ! V4      '       d2   VP	                  4       ^8  g   \        P                  ! V4      '       g   V# VP	                  4       ^8¼  d   \        VP                  ^ ,          4      M^pVP	                  4       ^8¼  d   \        VP                  ^,          4      M\        VP                  ^ ,          4      pV^8w  g   VP                  ^8  d   V#  \        V4      pTe   TP                  ^8w  d   T# \        TP                  \        P                  R7      P                  4       P                  4       4      pTP                  ^ ,          ^8g  ;'       gN    TP                  R,          T8H  ;'       d0    TP                  ^8  ;'       g    TP                  R,          ^T39   p	Y†8w  g
   T	'       EgÌ   Tp
TP                  ^ ,          ^8X  Ed   TP                  ^8X  d'   TP                  R,          T8¼  d   TRRT13,          p
MâTP                  ^8X  dZ   TP                  R,          T8¼  dB   TP                  R,          ^8X  g   TP                  R,          T8¼  d   TRRT1RT13,          p
MxTP                  ^8X  dh   TP                  R,          T8¼  dP   TP                  R,          ^8X  d   TRRRT13,          p
M(TP                  R,          T8¼  d   TRRT1RT13,          p
Y¤J d'   TP                  RR4       TP                  RR4       T# Y£R&   TP                  R4      p\        P                  ! T4      '       d:   TP                  ^8¼  d)   TP                  R,          T8¼  d   TRRT13,          TR&   T# T P                  YG4      TR&   TP                  R4      p\        P                  ! T4      '       d   T P!                  Y·4      TR&   T#   \         d    Tu # i ; i)	a%  Align masks and positions to packed feature tensors used during AWQ replay.

AWQ capture hooks can flatten kept tokens from multiple batch rows into
one replay tensor shaped like `[1, kept_tokens, hidden]`. The original
cached kwargs still describe the pre-packed batch layout, for example an
attention mask shaped `[B, 1, S, S]` or position ids shaped `[B, S]`.
Passing those batched kwargs to replay produces shape mismatches in
attention because the replay activations no longer have the original
batch and sequence structure.

When the packed token count matches the keep-mask derived from the
cached attention mask, we rebuild `attention_mask` and `position_ids`
to match the packed layout. If the counts do not match, we drop those
kwargs rather than pass incompatible shapes into attention replay.
r¸   Nrt   .r�  rÁ  r{   rã  )rg   r¢   r@   rP  rw   rZ   r~   rQ  r.   rä   r�   r   r‰   rä  Úpopró  r÷  )rÔ   rú  rû  Úaligned_kwargsr¸   Úinput_batchÚ	input_seqrU  rè  Úmask_seq_matchesÚcropped_maskrÁ  s   &&&         rC   Ú_align_module_kwargs_to_inputÚ*AWQProcessor._align_module_kwargs_to_inputd  s£  € ô* ˜mÓ,ˆØ'×+Ñ+Ð,<Ó=ˆÜ�Š˜s×#Ò# s§w¡w£y°1¤}¼E¿OºOÈN×<[Ò<[Ø!Ð!ð ,/¯7©7«9¸¬>”c˜#Ÿ)™) A�,Ô'¸qˆØ),¯©«°a¬”C˜Ÿ	™	 !�Ô%¼SÀÇÁÈ1ÅÓ=Nˆ	Ø˜!Ô˜~×2Ñ2°QÔ6Ø!Ð!ð	"Ü*¨>Ó:ˆIð Ò 	§¡°!Ô 3Ø!Ð!ä˜Ÿ™¬E¯K©K˜Ó8×<Ñ<Ó>×CÑCÓEÓFˆ
ð *×/Ñ/°Õ2°aÑ7÷ 
ð 
Ø× Ñ  Õ$¨	Ñ1÷ Xð XØ×$Ñ$ qÑ(×VÐV¨N×,@Ñ,@ÀÕ,DÈÈIÈÑ,Vð 	ð Ô"×*:Ð*:ð *ˆLØ×#Ñ# AÕ&¨!Õ+Ø!×&Ñ&¨!Ô+°×0DÑ0DÀRÕ0HÈIÔ0UØ#1°#°z¸	°z°/Õ#B‘LØ#×(Ñ(¨AÔ-°.×2FÑ2FÀrÕ2JÈiÔ2WØ%×+Ñ+¨BÕ/°1Ô4¸×8LÑ8LÈRÕ8PÐT]Ô8]Ø'5°c¸:¸I¸:ÀzÈ	ÀzÐ6QÕ'R˜øØ#×(Ñ(¨AÔ-°.×2FÑ2FÀrÕ2JÈiÔ2WØ%×+Ñ+¨BÕ/°1Ô4Ø'5°c¸2¸zÀ	¸zÐ6IÕ'J™Ø'×-Ñ-¨bÕ1°YÔ>Ø'5°c¸:¸I¸:ÀzÈ	ÀzÐ6QÕ'R˜àÓ-Ø×"Ñ"Ð#3°TÔ:Ø×"Ñ" >°4Ô8Ø%Ð%à/;Ð+Ñ,Ø)×-Ñ-¨nÓ=ˆLÜ�Š˜|×,Ò,°×1BÑ1BÀaÔ1GÈL×L^ÑL^Ð_aÕLbÐfoÔLoØ1=¸cÀ:ÀIÀ:¸oÕ1N�˜~Ñ.Ø!Ð!à+/×+PÑ+PÐQ_Ó+kˆÐ'Ñ(à%×)Ñ)¨.Ó9ˆÜ�?Š?˜<×(Ò(Ø-1×-PÑ-PÐQ]Ó-iˆN˜>Ñ*àÐøôe ô 	"Ø!Ò!ð	"ús   ÄP
 Ð
PÐPc                ó\   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[ S[,          /# )r=   Úprevious_subsetr?   )r
   r   rY   r   r[   )rB   r_   s   "€rC   rD   rž   ½  s2   ø€ ÷ 0ñ 0¹hÁtÉCÑQ\ÐL\ÕG]Õ>^ð 0ÑckÑlqÕcrñ 0rE   c           	     óö  € V'       g   R# . pVP                  4        F˜  p\        VP                  RR4      pVf   K   \        P                  ! 4       ;_uu_ 4        VP                  \        VP                  4       P                  4       P                  4       P                  4       4      4       RRR4       Kš  	  V'       g   R# \        \        V4      \        V4      ,          4      #   + '       g   i     KÛ  ; i)zOEstimates the average weight scale of the previous subset for reuse heuristics.Nr|   )r¸  rH   r>   r@   Úno_gradr€   r[   r}   r„   Úmeanrä  r‰   r(  )rÔ   r  r¸  r�   r|   s   &&   rC   Ú_capture_previous_subset_scaleÚ+AWQProcessor._capture_previous_subset_scale½  s¬   € ÷ Ùà ˆØ+×2Ñ2Ö4ˆLÜ˜\×0Ñ0°(¸DÓAˆFØŠ~ÙÜ—’—•Ø—‘œe F§M¡M£O×$7Ñ$7Ó$9×$>Ñ$>Ó$@×$EÑ$EÓ$GÓHÔI÷ !‘ñ	 5÷ Ùä”S˜“[¤3 v£;Õ.Ó/Ð/÷ !—�ús   ÁAC'Ã'C8c                óP   <€ V ^8„  d   QhRS[ RS[S[S[P                  3,          /# )r=   r¡   r?   )rN   r   rY   r@   rq   )rB   r_   s   "€rC   rD   rž   Ð  s-   ø€ ÷ @ñ @©>ð @¹dÁ3ÉÏÉÐCTÕ>Uñ @rE   c                ó¾	  a€ / p/ p/ p\        VP                  4      pV Uu0 uF  qfP                  R^4      ^ ,          kK  	  pp\        V4       Fc  pW€P                  9   g   K  W…9  g   K  V P                  V4      p	V	'       g   K8  V	P                  RR4      '       g   KR  VP                  V4       Ke  	  \        V4      V n	        V EFõ  pV P                  P                  V4      ;'       g    / p
V
P                  R. 4      pV
P                  R. 4      pV'       g+   \        P                  ! ^ 4      W&&   / W6&   RRR^ R	^ R
^ /WF&   K  \        V4      \        V4      8X  d€   \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       dF   \        \        WË4      R R7      pV Uu. uF  qî^ ,          NK  	  ppV Uu. uF  qî^,          NK  	  ppV P                  V4      p	T	;'       g    / P                  R4      pVR8X  dè   T	;'       g    / P                  R4      pVe   \        V4      MV P!                  V4      pV^ 8X  d=   Vf9   V^ ,          P#                  ^^ V^ ,          P$                  R,          34      W&&   ^ pMV P'                  VVR7      w  W&&   p/ W6&   \        W&,          P$                  R,          4      pW&,          .V
R&   R.V
R&   RRRVR	VR
\        V4      RV/WF&   EM™VR9  d   \)        RV: RV: R24      hV P+                  V4      '       d¨   \        P,                  ! V^ R7      W&&   V P/                  V4      W6&   W&,          .V
R&   R.V
R&   \1        \        W&,          P$                  R,          4      ^4      o\        W&,          P3                  4       S,          4      pRRRVR	VR
\        V4      /WF&   MÀVR,          W&&   V'       d
   VR,          MRpV P/                  V.4      W6&   W&,          .V
R&   V.V
R&   \1        \        W&,          P$                  R,          4      ^4      o\5        V3R lV 4       4      p\        W&,          P3                  4       S,          4      pRRRVR	VR
\        V4      /WF&   W&,          f   EK×  W&,          P3                  4       ^ 8”  g   EKõ  EKø  	  W0n        W@n        V# u upi u upi u upi )al  Collapse cached per-batch inputs into one replay tensor per module.

Model-specific pointwise policies pack variable-length batches into
bounded token rows, so every calibration batch contributes to AWQ scale
statistics. Generic sequence-sensitive modules retain the legacy
behavior: concatenate equal shapes, otherwise keep the latest feature
and aligned kwargs.
rs   r[  Fr:  r;  Úmoder™  rˆ  r£  Úbatchesc              3   óB   "  € T F  qR J;'       d    V^ 8¬  x € K  	  R # 5ir]  ra   )r_  r’  s   & rC   rb  Ú5AWQProcessor._layer_input_features.<locals>.<genexpr>ý  s"   é € ÐTÁm¸U TÐ)×8Ð8¨e°q©jÔ8Ãmùs   ‚‘Tc                 ó&   € \        V ^ ,          4      # )r   )rZ   )rä  s   &rC   r•  Ú4AWQProcessor._layer_input_features.<locals>.<lambda>  s   € ¤S¨¨a­¤\rE   r—  Ú
token_rowsrŽ  N)rŽ  rÚ  z)Unsupported AWQ feature aggregation mode z for rv   c              3   ód   <"  € T F%  p\        VP                  4       S,          4      x € K'  	  R # 5ir]  )rZ   rT  )r_  r|  r‡  s   & €rC   rb  r  >  s$   øé € Ð UÉWÀ6¤ V§\¡\£^°vÕ%=×!>Ð!>ËWùs   ƒ-0Úlatest_batchr{   rã  )NrÚ  )ÚlistrQ   rþ   rž  r?  r4  r¢   r€   rh   rÌ   r@   r™  r(  r  rŸ  rZ   r‹  rš  r~   rµ  rK   r€  rƒ   rÓ  r„  rT  r‰   rÍ   rÊ   )rÔ   r¡   ÚfeaturesrÅ  Úfeature_statsÚfeature_namesr`  ÚrootsÚrootr3  rF  rw  r;  Úorderedrä  Úaggregation_modeÚconfigured_max_tokensrŽ  rˆ  r£  ÚtokensÚlast_batch_indexr‡  s   &&                    @rC   Ú_layer_input_featuresÚ"AWQProcessor._layer_input_featuresÐ  s®  ø€ ð -/ˆØ46ˆØ35ˆÜ˜UŸ]™]Ó+ˆÙ3@ÓA±=¨4—‘˜C Ó# A×&Ð&±=ˆÐAÜ˜5–MˆDØ—z‘zÖ! dÖ&?Ø×9Ñ9¸$Ó?�ß‘6˜fŸj™j¨¸×?Ô?Ø!×(Ñ(¨Ö.ñ	 "ô $' }Ó#5ˆÔ ä!ˆDØ—J‘J—N‘N 4Ó(×.Ð.¨BˆEØ*/¯)©)°H¸bÓ*AˆGØ16·±¸?ÈBÓ1OˆMßÜ!&§¢¨Q£�‘Ø')�Ñ$à˜GØ  !Ø% qØ˜qð	'�Ñ#ñ ô �MÓ"¤c¨'£lÔ2ß“CÑTÁmÓT—C—C’CÑTÁmÓT×TÒTä Ü˜Ó/Ù1ô�ñ 6=Ó =±W¨T a§ ±W�Ð =Ù/6Ó7©w t Ÿ7˜7©w�Ð7à×5Ñ5°dÓ;ˆFØ &§ ¨"×1Ñ1°&Ó9ÐØ <Ô/Ø)/¯¨°2×(:Ñ(:¸<Ó(HÐ%ð -Ò8ô Ð-Ô.à×/Ñ/°Ó8ð ð
  ”?Ð'<Ò'DØ%,¨Q¥Z×%9Ñ%9¸1¸aÀÈÅ×AQÑAQÐRTÕAUÐ:VÓ%W�H‘NØ!"‘Jà15×1FÑ1FØØ#-ð 2Gó 2Ñ.�H‘N Jð (*�Ñ$Ü"% h¥n×&:Ñ&:¸2Õ&>Ó"?�Ø#+¥>Ð"2��h‘Ø*.¨��oÑ&à˜LØ  *Ø% Øœs 7›|Ø  *ð'�Ó#ð "¨Ô8Ü Ø?Ð@PÑ?Sð TØ™( !ð%óð ð ×/Ñ/°×8Ò8Ü!&§¢¨7¸Ô!:�‘Ø'+×'NÑ'NÈ}Ó']�Ñ$Ø#+¥>Ð"2��h‘Ø*.¨��oÑ&ÜœS ¥×!5Ñ!5°bÕ!9Ó:¸AÓ>�Ü˜X�^×1Ñ1Ó3°vÕ=Ó>�à˜GØ  &Ø% vØœs 7›|ð	'�Ò#ð ")¨¥�‘ß8E =°Ö#4È4Ð Ø'+×'NÑ'NÐP`ÐOaÓ'b�Ñ$Ø#+¥>Ð"2��h‘Ø*:Ð);��oÑ&ÜœS ¥×!5Ñ!5°bÕ!9Ó:¸AÓ>�Ü Ô UÉWÓ UÓU�
Ü"% h¥n×&:Ñ&:Ó&<ÀÕ&FÓ"G�à˜NØ  *Ø% Øœs 7›|ð	'�Ñ#ð �~Õ)¨h­n×.BÑ.BÓ.DÀq×.HÚñA "ðN $2Ô Ø+ÔØˆùòe BùòJ !>ùÚ7s   ¡!SÆ5SÇSc                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# )r=   Úfeature_statr?   )r   rY   r   rZ   )rB   r_   s   "€rC   rD   rž   R  s$   ø€ ÷ $ñ $±g¹cÁ3¸hÕ6Gð $ÉCñ $rE   c                óŽ   € VP                  R4      R8X  d%   \        VP                  R^ 4      4      pV^ 8”  d   V# V P                  # )zDReturn the sample count exposed through the legacy quantization log.r  r  r£  )r¢   rZ   r½   )rÔ   r%  r£  s   && rC   Ú_feature_nsamples_for_logÚ&AWQProcessor._feature_nsamples_for_logR  sI   € ð ×Ñ˜FÓ# |Ô3Ü! ,×"2Ñ"2Ð3DÀaÓ"HÓIˆOØ Ô"Ø&Ð&Ø×#Ñ#Ð#rE   c                óJ   <€ V ^8„  d   QhRS[ RS[S[S[,          ,          RR/# )r=   r¡   Úfallback_task_namesr?   N)rN   r
   r   rY   )rB   r_   s   "€rC   rD   rž   [  s2   ø€ ÷ 7ñ 7áð7ñ &¡c©#¥hÕ/ð7ð 
ñ	7rE   c                ó<  € RVn         VP                  P                  4        VP                  P                  4        RVn        VP
                  P                  4        RVn        RVn        V P                  ;'       g    T;'       g    \        4       pV P                  ;_uu_ 4        V FI  pV P                  P                  VR4      pV'       g   K)  RV9   g   K2  VR,          P                  4        KK  	  RRR4       \        4       V n        / V n        / V n        / V n        \!        V P"                  R4      '       d   \%        V P"                  R4       \!        V P"                  R4      '       d   \%        V P"                  R4       R# R#   + '       g   i     Lœ; i)z>Release all per-layer AWQ state after a successful completion.TNr:  r  Ú
prev_scale)rV   rQ   rì   rW   rT   rS   rR   rU   rÌ   rh   rX   r?  rý  rÊ   rË   rÍ   ÚhasattrrÂ   Údelattr)rÔ   r¡   r*  Ú
task_namesr`  Ú
task_entrys   &&&   rC   Ú_finalize_quantized_layerÚ&AWQProcessor._finalize_quantized_layer[  s5  € ð ˆŒØ�‰×ÑÔØ×Ñ×#Ñ#Ô%Ø!ˆÔØ×Ñ×%Ñ%Ô'Ø!ˆÔØ&*ˆÔ#à×-Ñ-×OÐOÐ2E×2NÐ2NÌËˆ
Ø�Y�Y‹YÛ"�Ø!ŸZ™ZŸ^™^¨D°$Ó7�
ß‘: (¨jÖ"8Ø˜xÕ(×.Ñ.Ö0ñ #÷ ô $'£5ˆÔ Ø ˆÔØ(*ˆÔ%Ø#%ˆÔ ä�4×&Ñ&¨×6Ò6Ü�D×'Ñ'¨Ô7Ü�4×&Ñ&¨×5Ò5Ü�D×'Ñ'¨Ö6ñ 6÷ �Yús   Â''FÃFÃFÆF	c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r=   r  r¡   Úreasonr?   N)rZ   rN   rY   )rB   r_   s   "€rC   rD   rž   {  s9   ø€ ÷ Uñ UáðUñ ðUñ ð	Uð
 
ñUrE   c           
     óŠ  € R pVP                   P                  4        UUu/ uF.  w  rV\        V! V4      \        \        4      4      '       g   K,  WVbK0  	  ppp\
        P                  RVV4       V'       d   V P                  V. R7       M\
        P                  RV4       V P                  V\        V4      R7       R# u uppi )zIFalls back to direct quantization when AWQ scaling cannot proceed safely.c                óJ   € \        V \        4      '       d   V P                  # T # ©z<Returns the underlying module when wrapped in `NamedModule`.©r£   r   r>   )Úmods   &rC   ÚunwrapÚ5AWQProcessor._quantize_layer_fallback.<locals>.unwrapƒ  s   € ô ",¨C´×!=Ò!=�3—:‘:ÐFÀ3ÐFrE   z8AWQProcessor: layer %s using fallback quantization (%s).©Úscales_listz<AWQProcessor: layer %s had no supported modules to quantize.©r*  N)
rQ   Úitemsr£   rR  r   ÚlogÚwarningÚapply_quantr1  rh   )rÔ   r  r¡   r4  r:  r`  r>   Únamed_childss   &&&&    rC   Ú_quantize_layer_fallbackÚ%AWQProcessor._quantize_layer_fallback{  s­   € ò	Gð !&§¡× 3Ñ 3Ô 5ô
á 5‘�Ü™& ›.¬%Ô0EÓ*F×Gô ˆDŠLÙ 5ð 	ñ 
ô 	�‰ØFØØô	
÷ Ø×Ñ˜\°rÐÕ:ä�K‰KÐVÐXcÔdà×&Ñ& uÄ#ÀlÓBSÐ&ÖTùó#
s   ¡)B?ÁB?c                ó   <€ V ^8„  d   QhRR/# r$  ra   )rB   r_   s   "€rC   rD   rž   ›  s   ø€ ÷ ?0ñ ?0°Dñ ?0rE   c                óÆ  € \        V RR4      pVf   R# / p\        VRR4      '       d   VP                  R,          pW2R&   MRVR&   V P                  4       p\        VRR4      '       d   VP                  R,          MRpRp\        VRR4      '       d%   VP                  R,          pV'       d
   V^ ,          pVEe�   VEeŠ   TpVP                  4       ^8X  d   VP                  ^ 4      pVP                  4       ^8¼  d   VP                  ^,          MVP                  ^ ,          p	VP                  4       ^8¼  d   VP                  ^ ,          M^p
V P                  VP                  4      pV P                  WHP                  4      pVe#   VP                  V8w  d   VP                  V4      pVe5   VP                  R,          V	8X  d   VP                  VP                  4      pMQ\        P                  ! W˜P                  \        P                  R7      pVP                  ^ 4      P                  V
R4      pWÂR&   Ve    V! WŒ4      pWÒR&   M	MVe   WRR&   \        VR
R4      '       d=   VP&                  R,          ;'       g    / pVP)                  4        F  w  ppVVV&   K  	  W n        R#   \          d-   p\"        P%                  R	T	TP                  T4        Rp?L‰Rp?ii ; i)zKRefreshes cached kwargs such as masks and rotary embeddings for AWQ search.r¿  NrÀ  r¸   rÁ  Úlayer_inputsrO  Úposition_embeddingszVAWQProcessor: failed to refresh rotary position_embeddings (seq_len=%s, device=%s): %srÂ  r{   )rH   rÀ  rß   rÁ  rH  rw   rB  r~   rò   rA   ræ   r�   r@   r¡  ÚlongrÙ  rä   r@  ÚdebugrÂ  r?  rÉ   )rÔ   rÆ  Ú	refreshedÚmaskrÝ   Úpos_ids_cacheÚhidden_cacheÚlast_inputsÚx_for_rotaryÚseq_lenrÚ  rG   Úpos_for_rotaryÚpeÚexcÚlatest_kwargsr˜  rN  s   &                 rC   Ú"_refresh_forward_kwargs_from_cacheÚ/AWQProcessor._refresh_forward_kwargs_from_cache›  s«  € ô ˜˜n¨dÓ3ˆØŠ=Ùà-/ˆ	ä�5Ð+¨T×2Ò2Ø×(Ñ(¨Õ,ˆDØ*.Ð&Ò'à*.ˆIÐ&Ñ'à×&Ñ&Ó(ˆÜ29¸%ÀÐQU×2VÒ2V˜×*Ñ*¨2Ö.Ð\`ˆØˆÜ�5˜.¨$×/Ò/Ø×,Ñ,¨RÕ0ˆKßØ*¨1�~�àÓ ,Ó":Ø'ˆLØ×ÑÓ! QÔ&Ø+×5Ñ5°aÓ8�Ø/;×/?Ñ/?Ó/AÀQÔ/F�l×(Ñ(¨Ö+ÈL×L^ÑL^Ð_`ÕLaˆGØ-9×-=Ñ-=Ó-?À1Ô-D�L×&Ñ& qÖ)È!ˆEà×0Ñ0°×1DÑ1DÓEˆFØ ×3Ñ3°F×<OÑ<OÓPˆMØÒ(¨\×-@Ñ-@ÀMÔ-QØ+Ÿ™¨}Ó=�àÒ(¨]×-@Ñ-@ÀÕ-DÈÔ-OØ!.×!1Ñ!1°,×2EÑ2EÓ!F‘ä!&§¢¨g×>QÑ>QÔY^×YcÑYcÔ!d�Ø!/×!9Ñ!9¸!Ó!<×!CÑ!CÀEÈ2Ó!N�à(6�nÑ%ØÒ!ðÙ Ó=�BØ79Ð3Ò4ð "ð Ò&Ø(5�nÑ%ä�5Ð.°×5Ò5Ø!×4Ñ4°RÕ8×>Ð>¸BˆMØ+×1Ñ1Ö3‘
��UØ!&�	˜#“ñ 4ð '0Ö#øô# !ô ä—I‘Ið6àØ$×+Ñ+Ø÷ñ ûðús   È<J) Ê)K Ê4"KËK c                óf   <€ V ^8„  d   QhRS[ S[,          RS[S[S[P                  3,          RS[/# )r=   Úlayer_namesÚ
input_featr?   )r	   rY   r   r@   rq   r\   )rB   r_   s   "€rC   rD   rž   Ü  s;   ø€ ÷ $
ñ $
á™#•Yð$
ñ ™™eŸl™lÐ*Õ+ð$
ñ 
ñ	$
rE   c                ó¶  € ^RI Hp ^ pV F÷  pVP                  V4      pVe   VP                  4       ^ 8X  d    R# V P                  P                  V/ 4      pVP                  R4      R8X  d#   RV9   d   V\        VR,          4      ,          pK„  RV9   d   V\        VR,          4      ,          pK¦  VP                  4       ^8¼  d   VP                  R	,          M^pWFP                  4       \        V^4      ,          ,          pKù  	  \        V RR4      ;'       g    V P                  p	T! V P                  \        V4      V	'       d   \        V	4      4      # R4      # )
zJReturns whether a scaling group lacks enough captured activations for AWQ.)Úshould_use_fallbackNTr  r  rˆ  r£  r'  r{   )Úutils.fallbackr]  r¢   rT  rÊ   rZ   rw   r~   r„  rH   r½   rÓ   r[   )
rÔ   rZ  r[  r]  Úcaptured_tokensr`  Úfeatr%  r‡  Úexpected_tokenss
   &&&       rC   Ú_should_fallback_groupÚ#AWQProcessor._should_fallback_groupÜ  s)  € õ 	9àˆÛˆDØ—>‘> $Ó'ˆDØŠ|˜tŸz™z›|¨qÔ0Úà×.Ñ.×2Ñ2°4¸Ó<ˆLØ×Ñ Ó'¨<Ô7¸LÈLÔ<Xð
  ¤3 |°LÕ'AÓ#BÕB’Ø" lÔ2ð  ¤3 |Ð4EÕ'FÓ#GÕG’à+/¯8©8«:¸¬?˜Ÿ™ BžÀ�Ø§:¡:£<´3°v¸q³>Õ#AÕA’ñ'  ô* " $Ð(BÀDÓI×aÐaÈT×MaÑMaˆÙ"Ø�M‰MÜ�/Ó"ß&5ŒE�/Ó"ó
ð 	
ð <@ó
ð 	
rE   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r=   r  r¡   r?   Nr  )rB   r_   s   "€rC   rD   rž     s,   ø€ ÷ @Uñ @U©3ð @U±~ð @UÈ$ñ @UrE   c                óT  € VP                   '       d   R# VP                  pVfŠ   VP                  '       dx   \        \	        VP                  P                  4       4      4      pVP                  P                  R^4      ^ ,          p\        V P                  P                  V4      w  r6W2n        VP                  pVf   \        RV 24      h\        P                  RV\        VP                  4      \        VP                  4      VP                   \#        VP                  P%                  4       4      R,          4       V P'                  V4      p/ V n        VP+                  4        U	U
u. uF  w  ršV
P-                  4       ^ 8X  g   K  V	NK   	  pp	p
V'       d"   V P.                  '       g   \        RV R24      hR pVP                  P+                  4        U	Uu/ uF.  w  r�\1        V! V4      \3        \4        4      4      '       g   K,  W�bK0  	  pp	p\7        V P8                  4      p\7        \;        V R	/ 4      4      VR	&   \=        V P>                  R
V4       \=        V P>                  RVP@                  4       V P                  PC                  VVV4      pV'       g5   \        PE                  RV4       V PG                  V\I        V4      R7       R# . pV Fj  p\7        V4      pVPK                  R4      ;'       g    TpVPK                  R4      ;'       g    TpV PM                  VV4      VR&   VPO                  V4       Kl  	  . p. p\I        4       pV EF  pVPK                  R4      ;'       g    . pVPK                  R4      pV Uu. uFD  p\1        V\P        PR                  PT                  4      '       d   \W        VV4      M
\Y        V4      NKF  	  ppV P.                  '       d,   V P[                  VV4      '       d   VP]                  V4       K½  V'       d
   V^ ,          MRpVVJ p\1        V\R        P^                  4      '       d×   \1        V\R        P^                  4      '       d·   V'       g¯   VP`                  Pb                  ^ ,          VP`                  Pb                  ^,          8w  dr    \W        VV4      p \W        VV4      p \        Pg                  RVV\3        VP`                  Pb                  4      V \3        VP`                  Pb                  4      4       EKÊ  V U	u. uF  q™V9  g   K  V	NK  	  p!p	V!'       d   VPO                  VV!34       EK  VPO                  V4       EK  	  V'       d)   \        Pg                  RV\        V4      VR,          4       TpVP+                  4        U	U
u/ uF  w  rš\i        V
4      V	bK  	  p"p	p
V F½  pVPk                  RR4      p#V#V9  d*   V"PK                  \i        VPK                  R4      4      4      p#V#f   KK  VPK                  R4      ;'       g    .  FS  p\1        V\P        PR                  PT                  4      '       d   \W        VV4      M
\Y        V4      p$V#V P(                  V$&   KU  	  K¿  	  V'       g=   V'       g5   \        PE                  RV4       V PG                  V\I        V4      R7       R# . p%VR,           F†  pVPK                  R4      ;'       g    . pVR,           Uu. uFD  p\1        V\P        PR                  PT                  4      '       d   \W        VV4      M
\Y        V4      NKF  	  p&pV%PO                  V&4       Kˆ  	  \        P                  RV\        V4      V%4       V Uu. uF  pV Pl                  ! V3/ VB NK  	  p'p \o        VV'VR7       \        T'\W        T P                  T4      R,           4      p'T P€                  '       d~   T Pƒ                  TTP+                  4        U	U0u/ uF  w  p	p0T	T9  g   K  T	T0P„                  bK  	  up0p	T4      p1\�        TT14       \        T1\W        T P                  T4      R,           4      p1T U2u/ uF  p2T2T9   g   K  T2TT2,          bK  	  p3p2TP+                  4        U	U0u/ uF  w  p	p0Y˜9   g   K  T	T9  g   K  T	T0bK  	  pp	p0T P‡                  TT'4       T3'       dE   \        PE                  R&T\        T34      \#        T34      R',          4       T P‡                  T3. R(7       T PG                  T\I        T4      R7       R# u up
p	i u upp	i u upi   \d         d    \Y        T4      p EL²i ; i  \d         d    \Y        T4      p  ELÂi ; iu up	i u up
p	i u upi u upi   \         Edì   p(. p)T' EF½  w  p*pp+p,RT*RRR. RR/p \q        TT*4      pM  \d         d    Rp Mi ; iTe   \;        TRR4      MRp-\1        T-\P        Pr                  4      '       d   \3        T-Pb                  4      TR&   M%Tf   R TR&   M\u        T4      Pv                   R!2TR&   . p.T F´  p/ \q        TT/4      pM%  \d         d    T.PO                  T/R 34        K2  i ; i\;        TRR4      p-\1        T-\P        Pr                  4      '       d)   T.PO                  T/\3        T-Pb                  4      34       K‹  T.PO                  T/\u        T4      Pv                   R!234       K¶  	  T.TR&   \y        T+R"4      '       d5    \{        T+P-                  4       4      TR&   M  \d         d	    R#TR&    Mi ; iT)PO                  T4       EKÀ  	  \        P}                  R$TT(T)R%,          4       h Rp(?(ii ; iu up0p	i u up2i u up0p	i ))zDRuns the AWQ scaling, clipping, and quantization flow for one layer.Nrs   z=AWQProcessor: unable to resolve layer module for layer index zjAWQProcessor: layer %s tracking %s modules before quantization (subsets processed=%s/%s); first modules=%s:Né   Nz<AWQProcessor error: missing activation features for modules z with fallback disabled.c                óJ   € \        V \        4      '       d   V P                  # T # r7  r8  )Úms   &rC   r:  Ú,AWQProcessor._quantize_layer.<locals>.unwrap'  s   € ô  *¨!¬[×9Ò9�1—8‘8Ð@¸qÐ@rE   rÍ   r  r,  zZAWQProcessor: no module configuration generated for layer index %s; skipping quantization.r>  Úmodule2inspectrÐ  rn   Úprev_opzsAWQProcessor: layer %s skipping scaling group due to dimension mismatch prev_op=%s shape=%s first_layer=%s shape=%szUAWQProcessor: layer %s skipping %d scaling groups due to missing features (sample=%s):Nrñ  NÚ_input_feature_namerú  z_AWQProcessor: no valid scaling groups for layer %s after filtering; marking layer as quantized.:Nrò  Nz=AWQProcessor: layer %s sanitized %d scaling groups; sample=%s)Úinput_feat_dictÚprevÚ
prev_shapeÚlayer_shapesÚscale_elemsr|   Úmissingz (no weight)rT  ÚunknownzXAWQProcessor: apply_scale failed at layer %s with %s. Shape summary (first 5 groups): %s:Né   Nz4AWQProcessor: layer %s fallback quant %d modules: %s:Né   Nr<  )DrV   rT   rQ   ÚnextÚiterr¸  Ú	full_nameÚrsplitr5   rÃ   rÆ   rJ   r@  Úinfor(  rS   rR   r  rÃ  r"  rË   r?  rT  rÓ   r£   rR  r   rg   rÉ   rH   ÚsetattrrÂ   rU   Úawq_get_modules_for_scalingrA  r1  rh   r¢   Ú_sanitize_kwargsr€   r@   r   r   r(   rY   rb  rÄ  rp   r|   r~   rä   rK  rë   rý  Ú_search_best_scaler&   r)   rq   r   rb   r-  rZ   Úerrorr'   r%   Ú_search_best_clipr>   rB  )4rÔ   r  r¡   rT   Úsample_moduleÚ
layer_pathrÞ   Úlayer_module_refr[  r`  r|  rr  r:  r>   rC  Úmodule_kwargs_globalÚmodule_configÚsanitized_module_configrF  Úinspect_moduleÚentry_kwargsÚfiltered_module_configÚskipped_groupsÚfallback_namesÚcfgÚlayers_sampleÚprev_moduler�   rZ  Úfirst_layer_moduleÚsame_moduleÚ	prev_nameÚ
first_nameÚmissing_layersÚfeature_name_by_idÚfeature_nameÚ
layer_nameÚsample_groupsÚlayers_namesr=  rU  Údebug_entriesÚprev_op_nameÚscalesÚ_lossr|   rp  ÚlnameÚnamedÚ	clip_listÚnÚfallback_named_childss4   &&&                                                 rC   Ú_quantize_layerÚAWQProcessor._quantize_layer  sí
  € ð �?�?ˆ?Ùà×)Ñ)ˆØÒ E§M§M MÜ ¤ e§m¡m×&:Ñ&:Ó&<Ó!=Ó>ˆMØ&×0Ñ0×7Ñ7¸¸QÓ?ÀÕBˆJÜ7¸¿¹×8MÑ8MÈzÓZ‰OˆLØ!-Ôà ×-Ñ-ÐàÒ#ÜÐ!^Ð_jÐ^kÐlÓmÐmä�‰ØxØÜ�—‘ÓÜ�×'Ñ'Ó(Ø×ÑÜ�—‘×#Ñ#Ó%Ó& rÕ*ô	
ð ×/Ñ/°Ó6ˆ
Ø(*ˆÔ%Ø,6×,<Ñ,<Ô,>ÔVÑ,>™L˜DÀ&Ç,Á,Ã.ÐTUÑBU—4�4Ñ,>ˆÑVß˜4Ÿ=Ÿ=˜=ÜØNÈwÈið X*ð +óð ò	Að !&§¡× 3Ñ 3Ô 5ô
á 5‘�Ü™& ›.¬%Ô0EÓ*F×Gô ˆDŠLÙ 5ð 	ñ 
ô  $ D×$?Ñ$?Ó@ÐÜ6:Ü�DÐ/°Ó4ó7
ÐÐ2Ñ3ô 	�×#Ñ# ]°KÔ@Ü�×#Ñ# \°5×3NÑ3NÔOàŸ™×CÑCØØØ ó
ˆ÷ Ü�K‰KØlØôð ×*Ñ*¨5ÄcÈ,ÓFWÐ*ÔXÙà.0ÐÛ"ˆEÜ˜“KˆEØ"ŸY™YÐ'7Ó8×LÐLÐ<LˆNØ Ÿ9™9 XÓ.×FÐFÐ2FˆLØ"×3Ñ3°LÀ.ÓQˆE�(‰OØ#×*Ñ*¨5Ö1ñ #ð .0ÐØ<>ˆÜ›ˆÜ*ˆCØŸG™G HÓ-×3Ð3°ˆMØŸ'™' )Ó,ˆKñ +óá*�Eô 9CÀ5Ì%Ï(É(Ï/É/×8ZÒ8Z”Ð,¨eÔ4Ô`cÐdiÓ`jÒjÙ*ð ð ð �}�}ˆ} ×!<Ñ!<¸[È*×!UÒ!UØ×%Ñ% kÔ2Ùç5B ¨qÖ!1ÈÐà%Ð);Ð;ˆKä˜;¬¯	©	×2Ò2ÜÐ1´2·9±9×=Ò=ß#Ø×&Ñ&×,Ñ,¨QÕ/Ð3E×3LÑ3L×3RÑ3RÐSTÕ3UÔUð1Ü +Ð,<¸kÓ J�Ið9Ü!,Ð-=Ð?QÓ!R�Jô —	‘	ð JØØÜ˜+×,Ñ,×2Ñ2Ó3ØÜÐ,×3Ñ3×9Ñ9Ó:ôò á/:ÓU©{ tÈ*Ñ>TŸd˜d©{ˆNÐUßØ×%Ñ% {°NÐ&CÔDÚØ"×)Ñ)¨#×.ñW +÷Z Ü�I‰IØgØÜ�NÓ#Ø˜rÕ"ô	ð #9ÐØCM×CSÑCSÔCUÔVÑCU±<°4œb ›j¨$Ò.ÑCUÐÑVÛ*ˆCØŸ7™7Ð#8¸$Ó?ˆLØ :Ô-Ø1×5Ñ5´b¸¿¹À»Ó6HÓI�ØÒ#ÙØŸ™ Ó*×0Ð0¨bÒ0�ô " %¬¯©¯©×9Ò9ô  Ð 0°%Ô8ä˜U›ð ð
 =I�×-Ñ-¨jÓ9ó 1ñ +÷ '¯~Ü�K‰KØqØôð ×*Ñ*¨5ÄcÈ,ÓFWÐ*ÔXÙàˆØ*¨2×.Ð.ˆCØŸG™G HÓ-×3Ð3°ˆMð ERð  SUö  EVó  Wñ  EVð  |AÄJÈuÔV[×V^ÑV^×VeÑVe×DfÒDfœKÐ(8¸%Ô@ÔloÐpuÓlvÒvñ  EVˆLð  WØ× Ñ  Ö.ñ /ô
 	�‰ØKØÜÐ'Ó(Øô		
ñ 1ó
á0�ð ×#Ò#Ð$4Ñ>¸Ô>Ù0ð 	ð 
ð
,	ÜÐ(¨+ÀzÕRôX (ØÜ˜Ÿ
™
Ð$4Ó5¸Õ;ó
ˆð
 �?�?ˆ?Ø×.Ñ.Ø Ø7C×7IÑ7IÔ7KÔjÑ7K©¨¨eÈtÐ[iÑOiÔ#��u—|‘|Ò#Ñ7KÒjØóˆIô
 Ð'¨Ô3Ü)ØÜ˜DŸJ™JÐ(8Ó9¸CÕ?óˆIñ $ó!
á#�Ø�LÑ ô ˆAˆ|˜A�ÒÙ#ð 	ð !
ð 8D×7IÑ7IÔ7Kô  BÑ7K©¨¨eÈtÑOaœÐfjð  sAñ  gAœ˜˜ešÑ7Kˆñ  Bà×Ñ˜ {Ô3ç Ü�K‰KØFØÜÐ)Ó*ÜÐ*Ó+¨BÕ/ô	ð ×ÑÐ2ÀÐÔCà×&Ñ& uÄ#ÀlÓBSÐ&ÖTùóG Wùó
ùòVøô& !ô 1Ü # KÓ 0“Ið1ûô !ô 9Ü!$Ð%7Ó!8“Jð9üò Vùó Wùò2 Wùò
øô õ *	ØˆMÜ<GÑ8�˜k¨6°5Ø ¨|¸TÀ>ÐSUÐWdÐfjÐk�ð'Ü"0Ð1AÀ<Ó"P‘KøÜ ô 'Ø"&’Kð'úàALÒAXœ ¨h¸Ô=Ð^b�Ü˜f¤e§l¡l×3Ò3Ü*/°·±Ó*=�E˜,Ò'Ø Ò(Ø*3�E˜,Ò'ä-1°+Ó->×-GÑ-GÐ,HÈÐ*U�E˜,Ñ'à!�Û(�Eð!Ü'5Ð6FÈÓ'N™øÜ$ô !Ø$×+Ñ+¨U°IÐ,>Ô?Ú ð!úô % \°8¸TÓB�FÜ! &¬%¯,©,×7Ò7Ø$×+Ñ+¨U´E¸&¿,¹,Ó4GÐ,HÖIà$×+Ñ+¨U´t¸LÓ7I×7RÑ7RÐ6SÐS_Ð4`Ð,aÖbñ )ð )5��nÑ%Ü˜6 7×+Ò+ð9Ü/2°6·<±<³>Ó/B˜˜mÒ,øÜ$ô 9Ø/8˜˜mÓ,ð9úà×$Ñ$ U×+ñA =HôD �I‰IØjØØØ˜bÕ!ô	ð ûðU*	üóf kùò!
ùó Bs  Å)d?Æd?Ç)eÈeÎA
eÒ+eÒ8e-Ôf
Ô,f
Ö-fÜA
fÞfÞ'f ànàná/	ná=nâ n$â0n$â9n$åe*å)e*å-fæfænæ+nçgçnçg çnçg ç A;néi)é(né)j	ênê
j	êBnì(mínímínímí9nînc                ó^   <€ V ^8„  d   QhRS[ S[P                  ,          RS[P                  /# )r=   rn   rú  )r	   r   rp   r@   rq   )rB   r_   s   "€rC   rD   rž     s1   ø€ ÷ \
ñ \
ñ ™Ÿ™•Oð	\
ñ
 —‘ñ\
rE   c                óð  € Vf   \        V4      ^8X  g   Q hV^ ,          pRV9   d   VP                  R4       \        V P                  RR4      p\	        W0P                  P
                  4      pVP                  4       P                  R	VP                  R	,          4      p	V	P                  ^ 4      p
V	P                  ^4      p\        P                  ! . \        P                  R7      P                  4       pTp\        V P                  WÛ,          ,          4      p\!        Wê4      p\#        V^4      p\        P$                  ! V\        P                  VP&                  R7      p\)        ^ W®4       FS  p\!        VV,           V
4      pV	VV pVP+                  \        P                  4      P-                  ^ R7      pVV,          pKU  	  Wú,          P+                  VP.                  4      p?V P1                  We4      p\        V R/ 4      pV P1                  VV4      pVP3                  4        F  w  ppVP5                  VV4       K  	  V P7                  VV4      pV'       dÎ   \9        \        P:                  ! 4       4      ;_uu_ 4        V P=                  WEV4       Uu. uF�  pVP?                  \        P@                  ! VP.                  4      P                   \        P@                  ! VP.                  4      P"                  4      PC                  4       PE                  4       NKƒ  	  ppRRR4       MÕVP+                  \G        VPI                  4       4      P&                  4      p\9        \        P:                  ! 4       4      ;_uu_ 4        V PK                  WEV4      pRRR4       XP?                  \        P@                  ! VP.                  4      P                   \        P@                  ! VP.                  4      P"                  4      pV PM                  WHVWSXV4      w  pp\O        W4      \Q        V Uu. uF  p\O        VV4      NK  	  up4      VV3# u upi   + '       g   i     L_; i  + '       g   i     LÔ; iu upi )
z;Searches the best per-channel AWQ scale for a module group.NÚ	use_cacheÚ scale_search_chunked_activationsTrt   rz   rv   rÉ   r{   ))r(  rý  rH   r¨   r™   ro   r„   Úviewr~   Úsizer@   r|  r‚   Úelement_sizerZ   rÇ   r…  r„  rŠ   rA   r›  r�   r‰   ru   r}  r?  rÒ   r  r/   Úinference_modeÚ_iter_module_forward_outputsÚclipræ  r}   r=  rv  Ú
parametersÚ_module_forwardÚ_compute_best_scaler(   rR  )rÔ   r>   rk  rn   rú  rj  rÐ  Úuse_chunked_scale_searchÚw_meanÚinp_flatÚnum_elementsrŒ   Úfloat32_sizeÚelement_size_bytesÚ
chunk_sizeÚx_sumr¨  ÚendÚchunkÚ	chunk_sumÚx_meanrû  Úglobal_kwargsÚglobal_allowed_kwargsr˜  rN  ÚoutputÚfp16_outputÚbest_scalesÚlossrh  s   &&&&&&&                        rC   r~  ÚAWQProcessor._search_best_scale  s†  € ð Ò!Ü�v“; !Ô#Ð#Ð#Ø# A�YˆNà˜&Ô Ø�J‰J�{Ô#ô
 $+¨4¯9©9Ð6XÐZ^Ó#_Ð ô *¨&·)±)×2FÑ2FÓGˆð
 —7‘7“9—>‘> " c§i¡i°¥mÓ4ˆØ—}‘} QÓ'ˆØ—}‘} QÓ'ˆÜ—|’| B¬e¯m©mÔ<×IÑIÓKˆØ)Ðô ˜×.Ñ.Ð3EÕ3TÕUÓVˆ
Ü˜Ó2ˆ
Ü˜ QÓ'ˆ
ô —’˜L´·±ÀcÇjÁjÔQˆä�q˜,Ö3ˆAÜ�a˜*•n lÓ3ˆCØ˜Q˜s�OˆEàŸ™¤§¡Ó/×3Ñ3¸Ð3Ó:ˆIØ�YÕŠEñ 4ð Õ&×*Ñ*¨3¯9©9Ó5ˆØð ×-Ñ-¨fÓEˆÜ Ð&>ÀÓCˆØ $× 5Ñ 5°mÀ^Ó TÐØ/×5Ñ5Ö7‰JˆC�Ø×$Ñ$ S¨%Ö0ñ 8à×:Ñ:¸3ÀÓNˆç#ô ”U×)Ò)Ó+×,Õ,ð #'×"CÑ"CÀCÐYfÔ"góá"g˜ð —K‘K¤§¢¨F¯L©LÓ 9× =Ñ =¼u¿{º{È6Ï<É<Ó?X×?\Ñ?\Ó]×dÑdÓf×jÑjÖlÙ"gð ð ÷ -Ð,ð —&‘&œ˜n×7Ñ7Ó9Ó:×AÑAÓBˆCÜ”U×)Ò)Ó+×,Õ,Ø"×2Ñ2°3ÈÓV�÷ -à%×*Ñ*¬5¯;ª;°{×7HÑ7HÓ+I×+MÑ+MÌuÏ{Ê{Ð[f×[lÑ[lÓOm×OqÑOqÓrˆKð !×4Ñ4Ø˜ ¸Àmó
Ñˆ�Tô
 ˜Ó(Ü±6Ó:±6¨a”;˜v qÖ)±6Ñ:Ó;ØØð	
ð 	
ùò#÷ -×,ú÷ -×,üò ;s1   ÊQÊBQÌQÎQ Ð)Q3
ÑQÑQ	Ñ Q0	c                óL  € . p. ROpV F’  p\        V Uu. uF  qwV9   NK	  	  up4      '       d   K(  W&,          p\        V4      p	\        V4      p
\        WŠR7       V P	                  VP
                  W6,          4      pVP                  Wk34       \        W‰R7       K”  	  V# u upi )z@Searches per-layer clipping thresholds for AWQ-eligible linears.rê   )Úq_Úk_Úqueryr˜  ÚWqkv)rd  r0   rL   r6   Ú_compute_best_clipr|   r€   )rÔ   r�   Únamed_linearsr[  rŸ  Úavoid_clippingr`  rÞ   ÚlinearÚoriginal_devicerG   Úmax_vals   &&&&        rC   r€  ÚAWQProcessor._search_best_clipc  sž   € ð ˆ	Ú=ˆã!ˆDä¡~Ó6¡~ !˜”I¡~Ñ6×7Ò7Ùà"Õ(ˆFÜ(¨Ó0ˆOÜ7¸Ó?ˆMÜ�FÕ1à×-Ñ-Ø—‘˜zÕ/óˆGð ×Ñ˜d˜_Ô-Ü�F×3ñ "ð  Ðùò 7s   •B!
c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r=   Úwr[  rK  )rB   r_   s   "€rC   rD   rž   }  s+   ø€ ÷ @'ñ @'á�|‰|ð@'ñ Ÿ™ñ@'rE   c           	     ó´  € VP                  4       ^8X  g   Q hVP                  pV P                  P                  ^ 8”  d   V P                  P                  MV^,          pVP	                  R	VP                  R	,          4      pVP                  ^VP                  ^ ,          R	V4      p\        ^VP                  ^,          V,          4      pVRRRV13,          pVP                  V^ ,          ^R	V4      pV^ ,          R,          ^ 8X  d   RM^@p	V^ ,          V	,          ^ 8X  g   Q hTp
. pV
P                  p\        P                  ! V
RV	 4      p\        P                  ! V4      pVP                  V4      p\        V^ ,          V	,          4       EFž  pW¯V	,          V^,           V	,           pVP                  4       P                  R	RR7      pVP                  4       p\        P                  ! V4      R,          pVRVP                  ^ ,           pVRVP                  ^ ,           pW!,          P!                  R	R7      p\        \#        WC,          4      4       FÀ  pV^VV,          ,
          ,          pV) p\        P$                  ! VVVVR7       V P'                  VV4       VV,          P!                  R	R7      pVV,
          P)                  ^4      P+                  ^R7      P	                  VP                  4      pVV8  pVV,          VV&   VV,          VV&   KÂ  	  VP-                  V4       EK¡  	  \        P.                  ! V^ R7      p??VP1                  ^4      # )
zQFinds the clipping bound that minimizes reconstruction error for a weight tensor.râ  Né   Trx   g    eÍÍArv   ©Úoutr{   )rw   r~   r¨   ro   r¨  r…   r„  rA   r@   Ú
empty_liker�   r›  r„   r†   ÚcloneÚ	ones_liker‰   rZ   ÚclampÚ_pseudo_quantize_tensor_intoÚpowr	  r€   rƒ   Úsqueeze)rÔ   rÑ  r[  Ún_gridÚ
max_shrinkÚn_sample_tokenÚorg_w_shapero   Ú	step_sizeÚoc_batch_sizeÚw_allÚbest_max_val_allrA   Úscratch_clampÚscratch_quantÚi_bÚorg_max_valÚbest_max_valÚmin_errsÚclamp_sliceÚquant_sliceÚorg_outÚi_srÎ  Úmin_valÚcur_outÚerrÚcur_best_idxs   &&&&&&                      rC   rÉ  ÚAWQProcessor._compute_best_clip|  sé  € ð �u‰u‹w˜!Œ|Ðˆ|Ø—g‘gˆð .2¯Y©Y×-AÑ-AÀAÔ-E�T—Y‘Y×)Ò)È;ÐWXÍ>ˆ
Ø—_‘_ R¨×)9Ñ)9¸"Õ)=Ó>ˆ
Ø×'Ñ'¨¨:×+;Ñ+;¸AÕ+>ÀÀJÓOˆ
ô ˜˜:×+Ñ+¨AÕ.°.Õ@ÓAˆ	Ø ¡; Y ; Õ/ˆ
à�I‰I�k !•n a¨¨ZÓ8ˆà*¨1�~°Õ3°qÔ8™¸bˆØ˜1�~ Õ-°Ô2Ð2Ð2ØˆØÐØ—‘ˆä×(Ò(¨¨~°Ð)>Ó?ˆÜ×(Ò(¨Ó7ˆØ—]‘] 6Ó*ˆ
ä˜ Q�¨=Õ8×9ˆCØ˜MÕ)¨C°!­G°}Õ+DÐEˆAàŸ%™%›'Ÿ,™,¨2°t˜,Ó<ˆKà&×,Ñ,Ó.ˆLÜ—’ {Ó3°cÕ9ˆHØ'¨¨!¯'©'°!­*Ð5ˆKØ'¨¨!¯'©'°!­*Ð5ˆKà!•~×*Ñ*¨rÐ*Ó2ˆGäœS Õ!4Ó5Ö6�Ø%¨¨S°6­\Õ)9Õ:�Ø"˜(�Ü—’˜A˜w¨°[ÕAØ×1Ñ1°+¸{ÔKØ%¨Õ3×8Ñ8¸RÐ8Ó@�ð  Õ(×-Ñ-¨aÓ0×5Ñ5¸!Ð5Ó<×AÑAÀ(Ç.Á.ÓQ�Ø" X™~�Ø),¨\Õ):�˜Ñ&Ø-4°\Õ-B�˜\Ó*ñ 7ð ×#Ñ# L×1ñ1 :ô4 —y’yÐ!1°qÔ9ˆØØà×#Ñ# AÓ&Ð&rE   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r=   rÑ  rK  )rB   r_   s   "€rC   rD   rž   ¿  s   ø€ ÷ - ñ - ©¯©ñ - rE   c                ó0  € VP                   pV P                  P                  ^ 8”  dy   VR,          V P                  P                  ,          ^ 8X  g*   Q RVR,           RV P                  P                   R24       hVP                  RV P                  P                  4      pVP	                  4       ^8X  g   Q h\
        P                  ! V4      P                  4       ^ 8X  g   Q hV P                  P                  '       gø   VP                  ^RR7      pVP                  ^RR7      p^V P                  P                  ,          ^,
          p^ pW4,
          P                  RR7      V,          p\
        P                  ! WG,          4      ) P                  We4      p\
        P                  ! \
        P                  ! W,          4      V,           We4      V,
          V,          pVP                  V^ ,          R4      pMÃVP!                  4       P                  ^RR7      pVP                  RR7      p^V P                  P                  ^,
          ,          ^,
          p^V P                  P                  ^,
          ,          ) pW5,          p\
        P                  ! \
        P                  ! W,          4      We4      V,          p\
        P                  ! V4      P                  4       ^ 8X  g   Q h\
        P                  ! V4      P                  4       ^ 8X  g   Q hVP                  V^ ,          R4      pV P                  P                  '       dA   \
        P"                  ! V^ ^V P                  P                  ^,
          ,          ,           4      pVP                  V4      pWX3# )	zMSimulates AWQ quantization and returns dequantized weights plus scales/zeros.zorg_w_shape (z$) must be a multiple of group_size (z)!Trx   çñhãˆµøä>©r…  r{   )r~   r¨   ro   r…   rw   r@   Úisnanr‰   Úsymr†   ÚaminÚbitsrÙ  ÚroundÚclamp_r¨  r„   Ú	full_like)	rÔ   rÑ  rà  rÎ  rï  Úmax_intÚmin_intr›  rŠ   s	   &&       rC   Úpseudo_quantize_tensorÚ#AWQProcessor.pseudo_quantize_tensor¿  sÖ  € ð —g‘gˆØ�9‰9×Ñ !Ô#Ø˜r•? T§Y¡Y×%9Ñ%9Õ9¸QÔ>ð  ^À-ÐP[Ð\^ÕP_ÐO`ð  aEð  FJ÷  FOñ  FO÷  FZñ  FZð  E[ð  []ð  A^ó  ^Ð>Ø—	‘	˜"˜dŸi™i×2Ñ2Ó3ˆAØ�u‰u‹w˜!Œ|Ðˆ|Ü�{Š{˜1‹~×!Ñ!Ó# qÔ(Ð(Ð(ð �y‰y�}�}ˆ}Ø—f‘f ¨D�fÓ1ˆGØ—f‘f ¨D�fÓ1ˆGØ˜Ÿ™Ÿ™Õ'¨!Õ+ˆGØˆGØÕ'×.Ñ.°4Ð.Ó8¸7ÕBˆFÜ—k’k 'Õ"2Ó3Ð3×;Ñ;¸GÓMˆEä—’œEŸKšK¨­
Ó3°eÕ;¸WÓNÐQVÕVØõˆAð —J‘J˜{¨1�~¨rÓ2‰Eà—e‘e“g—l‘l q°$�lÓ7ˆGØ—m‘m¨�mÓ-ˆGØ˜DŸI™IŸN™N¨QÕ.Õ/°!Õ3ˆGØ˜dŸi™iŸn™n¨qÕ0Õ1Ð2ˆGØÕ&ˆFÜ—’œEŸKšK¨­
Ó3°WÓFÈÕOˆAä�{Š{˜6Ó"×&Ñ&Ó(¨AÔ-Ð-Ð-Ü�{Š{˜1‹~×!Ñ!Ó# qÔ(Ð(Ð(à—‘˜[¨�^¨RÓ0ˆð �9‰9�=�=ˆ=Ü—O’O F¨A°°d·i±i·n±nÀqÕ6HÕ0IÕ,IÓJˆEà�I‰I�kÓ"ˆà˜%ÐÐrE   c                óR   <€ V ^8„  d   QhRS[ P                  RS[ P                  RR/# )r=   ÚsrcÚdstr?   NrK  )rB   r_   s   "€rC   rD   rž   ï  s+   ø€ ÷ %"ñ %"±·±ð %"Á5Ç<Á<ð %"ÐTXñ %"rE   c                óp  € VP                   pV P                  P                  ^ 8”  dN   VP                  RV P                  P                  4      pVP                  RV P                  P                  4      pM*VP	                  V^ ,          R4      pVP                  V4      pV P                  P                  '       Eg   VP                  ^RR7      pVP                  ^RR7      p^V P                  P                  ,          ^,
          p^ p	Wg,
          P                  RR7      V,          p
\        P                  ! Wz,          4      ) P                  W˜4      pVP                  V4       VP                  V
4       \        P                  ! WUR7       VP!                  V4       VP                  W˜4       VP#                  V4       VP%                  V
4       R# VP'                  4       P                  ^RR7      P                  RR7      p^V P                  P                  ^,
          ,          ^,
          p^V P                  P                  ^,
          ,          ) p	Wh,          p
VP                  V4       VP                  V
4       \        P                  ! WUR7       VP                  W˜4       VP%                  V
4       R# )zNWrites pseudo-quantized values into a destination tensor without reallocating.Trx   rö  r÷  rÔ  Nr{   )r~   r¨   ro   r¨  r…   Ú
reshape_asrù  r†   rú  rû  rÙ  r@   rü  rý  Úcopy_r‡   rˆ   Úsub_Úmul_r„   )rÔ   r  r  Ú	org_shapeÚsrc_viewÚdst_viewrÎ  rï  rÿ  r   r›  rŠ   s   &&&         rC   rÚ  Ú)AWQProcessor._pseudo_quantize_tensor_intoî  só  € ð
 —I‘Iˆ	Ø�9‰9×Ñ !Ô#Ø—x‘x  D§I¡I×$8Ñ$8Ó9ˆHØ—x‘x  D§I¡I×$8Ñ$8Ó9‰Hà—{‘{ 9¨Q¥<°Ó4ˆHØ—~‘~ hÓ/ˆHà�y‰y�}�}‰}Ø—m‘m¨°4�mÓ8ˆGØ—m‘m¨°4�mÓ8ˆGØ˜4Ÿ9™9Ÿ>™>Õ)¨AÕ-ˆGØˆGØÕ'×.Ñ.°4Ð.Ó8¸7ÕBˆFÜ—k’k 'Õ"2Ó3Ð3×;Ñ;¸GÓMˆEà�N‰N˜8Ô$Ø�M‰M˜&Ô!Ü�KŠK˜Õ/Ø�M‰M˜%Ô Ø�O‰O˜GÔ-Ø�M‰M˜%Ô Ø�M‰M˜&Ö!à—l‘l“n×)Ñ)¨a¸Ð)Ó>×DÑDÈÐDÓNˆGØ˜DŸI™IŸN™N¨QÕ.Õ/°!Õ3ˆGØ˜dŸi™iŸn™n¨qÕ0Õ1Ð2ˆGØÕ&ˆFà�N‰N˜8Ô$Ø�M‰M˜&Ô!Ü�KŠK˜Õ/Ø�O‰O˜GÔ-Ø�M‰M˜&Ö!rE   c                óà   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  P                  RS[S[P
                  ,          RS[ P                  RS[/# )r=   Úxr²  r¼  rj  Úlinears2scalerÀ  rÐ  )r@   rq   r   r   r	   rp   r   )rB   r_   s   "€rC   rD   rž     sz   ø€ ÷ v6ñ v6á�<‰<ðv6ñ —‘ðv6ñ —‘ð	v6ñ
 Ÿ™Ÿ™ðv6ñ ™BŸI™I•ðv6ñ —\‘\ðv6ñ ñv6rE   c           	     óZ  € ^p. p	R
p
Rp\        R4      pV Uu/ uFV  pWÝP                  P                  4       P                  \        P
                  4      P                  4       P                  4       bKX  	  pp \        VP                  4       4      P                  pVP                  R
4      P                  V4      pVP                  R
4      P                  V4      p\        V P                  RR4      pVe   V\        V4      ,          p\        V P                   RR4      p\#        V4       EFÞ  pVV,          pV P$                  '       dG   VP'                  V4      VP'                  ^V,
          4      R,           ,          P)                  RR7      pM0VP'                  V4      P)                  RR7      P                  R
4      pVVP+                  4       VP-                  4       ,          P/                  4       ,          pVP                  ^R
4      P                  V4      p^V\        P0                  ! V4      &   ^V\        P2                  ! V4      &   V F_  pVP                  P5                  V4       V P7                  VP                  VP                  4       VP                  P9                  V4       Ka  	  V'       Ed9   Rp^ p\;        V P=                  W4      V P?                  WV4      4       Fñ  w  ppVPA                  \        PB                  ! VPD                  4      P,                  \        PB                  ! VPD                  4      P*                  4      pVP                  VP                  VPD                  R	7      pVV,
          P                  4       pVVP'                  ^4      PG                  4       PI                  4       ,          pVVPK                  4       ,          pKó  	  V\+        V^4      ,          pM‡V PM                  WV4      pVPA                  \        PB                  ! VPD                  4      P,                  \        PB                  ! VPD                  4      P*                  4      pV PO                  VVV4      pV	PQ                  V4       VV8  d   TpTp
VPS                  4       pV F]  pVP                  PU                  Wí,          P                  VP                  P                  VP                  PD                  R	7      4       K_  	  EKá  	  V F]  pVP                  PU                  Wí,          P                  VP                  P                  VP                  PD                  R	7      4       K_  	  VPW                  4        V
R
8X  d   \X        P[                  V	4       \        h\        P2                  ! V4      PG                  4       ^ 8X  g   Q V4       hVP                  4       P                  4       V3# u upi   \         d    TP                  p ELv\         d    TP                  p EL�i ; i)a  
Compute loss and select best scales

L(s) = || Q(W * s) (s^-1 * X) - W * X ||
Q: weight quantization function | pseudo_quantize_tensor(W * s)
X: inputs from calib dataset    | X
W: original weights in FP16     | layer
s: per channel scaling factor   | s^-1 * X
NÚinfr,  r§  Tg-Cëâ6?r÷  ç        rO  r{   ).r[   r|   r}   r�   r@   r‚   r=  rS  rv  r®  rA   ÚStopIterationrä   r¨  rH   rÂ   r¨   r›  rÈ   rÛ  rÙ  r„  r…  ÚsqrtÚisinfrø  r
  rÚ  r‡   rŸ  Ú_iter_reference_output_chunksr¬  r­  ræ  ru   r‰   rä  rT  r¯  Ú_compute_lossr€   r×  r  rì   r@  rK  )rÔ   r  r²  r¼  rj  r  rÀ  rÐ  rÝ  ÚhistoryÚ
best_ratiorÁ  Ú
best_errorÚfcÚorig_weights_cpurA   Úprev_scale_hintr±  Úratior›  Úscales_viewÚ
total_lossÚtotal_elementsÚ	ref_chunkÚint_w_outputÚdiffrÂ  s   &&&&&&&&                   rC   r°  Ú AWQProcessor._compute_best_scale  sæ  € ð& ˆØˆØˆ
ØˆÜ˜5“\ˆ
ñ $ó;
ñ $�ð —	‘	× Ñ Ó"×%Ñ%¤e§m¡mÓ4×8Ñ8Ó:×EÑEÓGÒGÙ#ð 	ð ;
ð	Ü˜.×3Ñ3Ó5Ó6×=Ñ=ˆFð
 —‘˜R“×#Ñ# FÓ+ˆØ—‘˜R“×#Ñ# FÓ+ˆä! $×"5Ñ"5°|ÀTÓJˆØÒ&Øœe OÓ4Õ4ˆFô
 $+¨4¯9©9Ð6XÐZ^Ó#_Ð ä˜6—]ˆEà˜F•NˆEð ××ÐØ Ÿ*™* UÓ+¨v¯z©z¸!¸e½)Ó/DÀtÕ/KÕL×SÑSÐX\ÐSÓ]‘àŸ™ EÓ*×0Ñ0°TÐ0Ó:×?Ñ?ÀÓC�Ø˜vŸz™z›|¨f¯j©j«lÕ:×@Ñ@ÓBÕBˆFØ Ÿ+™+ a¨Ó,×/Ñ/°Ó7ˆKð +,ˆF”5—;’;˜vÓ&Ñ'Ø*+ˆF”5—;’;˜vÓ&Ñ'ó
 $�Ø—	‘	—‘˜{Ô+Ø×1Ñ1°"·)±)¸R¿Y¹YÔGØ—	‘	—‘˜{Ö+ñ $÷ (Ð'ð !�
Ø!"�Ü/2Ø×6Ñ6°qÓFØ×5Ñ5°aÈÓPö0Ñ+�I˜|ð $0×#4Ñ#4´U·[²[À×ASÑASÓ5T×5XÑ5XÔZ_×ZeÒZeÐfr×fxÑfxÓZy×Z}ÑZ}Ó#~�LØ )§¡°L×4GÑ4GÈ|×OaÑOa Ó b�IØ%¨Õ4×;Ñ;Ó=�DØ $§(¡(¨1£+§/¡/Ó"3×"8Ñ"8Ó":Õ:�JØ" d§j¡j£lÕ2’Nñ0ð "¤C¨¸Ó$:Õ:‘ð  $×3Ñ3°AÀvÓN�Ø+×0Ñ0´·²¸\×=OÑ=OÓ1P×1TÑ1TÔV[×VaÒVaÐbn×btÑbtÓVu×VyÑVyÓz�Ø×)Ñ)¨+°|ÀVÓL�à�N‰N˜4Ô Ø�jÔ Ø!�
Ø"�
Ø$Ÿl™l›n�Û#�Ø—	‘	—‘Ð 0Õ 4× 7Ñ 7¸r¿y¹y×?OÑ?OÐWY×W`ÑW`×WfÑWfÐ 7Ó gÖhô $ñm #ót  ˆBØ�I‰I�O‰OÐ,Õ0×3Ñ3¸2¿9¹9×;KÑ;KÐSU×S\ÑS\×SbÑSbÐ3ÓcÖdñ  à×ÑÔ à˜ÔÜ�I‰I�gÔÜˆOä�{Š{˜;Ó'×+Ñ+Ó-°Ô2Ð?°KÓ?Ð2à×!Ñ!Ó#×'Ñ'Ó)¨:Ð5Ð5ùòy;
øô ô 	Ø—X‘X‹FÜô 	Ø—X‘X‹Fð	ús$   ˜AW1Á7#W6 ×6X*ØX*ØX*Ø)X*c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r=   rÀ  r%  rA   )r@   rq   rA   )rB   r_   s   "€rC   rD   rž   �  s5   ø€ ÷ ñ áŸ™ðñ  Ÿ,™,ðñ —L‘Lñ	rE   c                ó:  € RpVP                  R4      pVP                  R4      pVP                  ^ 4      pVP                  4       pV P                  V^,          ,          p	\	        W—4      p	\
        P                  ! WY4      p
\
        P                  ! Wi4      p\        W«4       Fm  w  rÍVP                  V4      VP                  V4      ,
          P                  4       P                  ^4      P                  4       P                  4       pWN,          pKo  	  WG,          pV# )zEComputes chunked mean-squared reconstruction loss under a memory cap.r  r{   )r¨  r©  rª  rÇ   r…  r@   rþ   rŸ  r�   r[   rÛ  r‰   rä  )rÔ   rÀ  r%  rA   rÂ  Úfp16_output_flatÚint_w_output_flatr´  r¶  r·  Úfp16_chunksÚint_w_chunksÚ
fp16_chunkÚint_w_chunkÚ
chunk_losss   &&&&           rC   r  ÚAWQProcessor._compute_loss�  sû   € ð ˆØ&×+Ñ+¨BÓ/ÐØ(×-Ñ-¨bÓ1ÐØ'×,Ñ,¨QÓ/ˆØ(×5Ñ5Ó7Ðð ×*Ñ*Ð/AÀAÕ/EÕFˆ
Ü˜Ó2ˆ
ô —k’kÐ"2Ó?ˆÜ—{’{Ð#4ÓAˆô (+¨;Ö'EÑ#ˆJØ$Ÿ-™-¨Ó/°+·.±.ÀÓ2HÕH×OÑOÓQ×UÑUÐVWÓX×\Ñ\Ó^×cÑcÓeˆJØÕŠDñ (Fð
 	ÕˆàˆrE   c                ó‚   <€ V ^8„  d   QhRS[ P                  RS[ P                  P                  RS[RS[ P                  /# )r=   r  r>   rû  r?   ©r@   rq   r   r   r   )rB   r_   s   "€rC   rD   rž   ²  s=   ø€ ÷ 
)ñ 
)Ù—\‘\ð
)Ù+0¯8©8¯?©?ð
)ÙKOð
)á	�‰ñ
)rE   c                óÖ   € \        V P                  WV4      4      pV'       g   \        P                  ! V4      # \	        V4      ^8X  d
   V^ ,          # \        P
                  ! V^ R7      # )zHRuns a module forward with sanitized kwargs and optional micro-batching.rv   )r  r¬  r@   rÖ  r(  rƒ   )rÔ   r  r>   rû  Úoutputss   &&&& rC   r¯  ÚAWQProcessor._module_forward±  sV   € ô �t×8Ñ8¸ÀMÓRÓSˆßÜ×#Ò# AÓ&Ð&Üˆw‹<˜1ÔØ˜1•:ÐÜ�yŠy˜ aÔ(Ð(rE   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  P                  RS[/# )r=   r  r>   rû  r3  )rB   r_   s   "€rC   rD   rž   ¿  s6   ø€ ÷ /ñ /Ù—\‘\ð/Ù+0¯8©8¯?©?ð/ÙKOñ/rE   c              #  ó  aa"  € \        V4      pRp \        VP                  4       4      P                  p\        VP                  4       4       EF  w  rV\        V\        P                  4      '       d/   Ve)   VP                  V8w  d   VP                  V4      W5&   KP  KR  KT  \        V\        \        34      '       g   Kr  . pRpV Fm  p	\        V	\        P                  4      '       d:   Ve6   V	P                  V8w  d%   VP                  V	P                  V4      4       RpK\  VP                  V	4       Ko  	  V'       g   Kó  \        V4      ! V4      W5&   EK	  	  Rp
Rp \        P                   ! VP"                  4      P                  pRV9   p
RV9   pVP)                  4       ^8X  d"   V
'       g	   V'       d   VP+                  ^ 4      pRpRpVP)                  4       ^8¼  dP   VP,                  ^ ,          pVP)                  4       ^8¼  d   VP,                  ^,          MVP,                  ^ ,          pM^pVP,                  ^ ,          pV P/                  4       p\1        V P2                  RR4      ;'       d    RV9   pVEez   VEeu   V'       Edl   V'       Egc   T P5                  T;'       g    VP                  4      pT P7                  Yô;'       g    VP                  4      pV
'       d   VP9                  R4      MRpV
'       g   RpVe   VP,                  R
,          V8w  d‚   \        P:                  ! TT;'       g    VP                  \        P<                  R7      pVP)                  4       ^8¼  d"   VP+                  ^ 4      P?                  VR
4      pV
'       d   VVR&   TpM2TP                  T;'       g    VP                  4      pV
'       d   VVR&   Vf   TMVP                  V4      pV! VV4      VR&   MˆV
'       d�   Ve}   RV9  dv   \        P:                  ! YÔ;'       g    VP                  \        P<                  R7      pVP)                  4       ^8¼  d"   VP+                  ^ 4      P?                  VR
4      pVVR&   V P@                  '       d   V P@                  ^ 8”  d   V P@                  MRpVe.   VP)                  4       ^ 8X  g   VP,                  ^ ,          V8:  dW   Ve#   VP                  V8w  d   VP                  V4      MTpV! V3/ VB p\        V\        4      '       d
   V^ ,          pVx € R# VP)                  4       ^ 8”  d   \C        VP,                  ^ ,          4      M^oVV3R lo^ p\        PD                  ! VV^ R	7       F®  pVe#   VP                  V8w  d   VP                  V4      MTpVP                  4        UUu/ uF!  w  rVVS! VVVP,                  ^ ,          4      bK#  	  pppV! V3/ VB p\        V\        4      '       d
   V^ ,          pVx € VVP,                  ^ ,          ,          pK°  	  R#   \         d    Rp EL\
         d    Rp EL*i ; i  \$        \&        3 d     ELåi ; iu uppi 5i)zGYields forward outputs chunk-by-chunk to reduce peak activation memory.NFTrÁ  rI  Ú)awq_preserve_explicit_position_embeddingsrO  c                óF  <€ \        V \        P                  4      '       d6   V P                  ^ 8”  d#   V P                  ^ ,          S8X  d   WW,            # V # \        V \
        \        34      '       d*   V  Uu. uF  pS! W1V4      NK  	  pp\        V 4      ! V4      # V # u upi )zBSlices batch-shaped kwargs to match a micro-batched forward chunk.)r£   r@   rq   rQ  r~   r  rR  r   )ÚvalÚstartr­  rä  ÚslicedÚ_slice_valueÚfull_batch_sizes   &&&  €€rC   r>  Ú?AWQProcessor._iter_module_forward_outputs.<locals>._slice_value'  sˆ   ø€ ô ˜#œuŸ|™|×,Ò,Ø—8‘8˜a”< C§I¡I¨a¥L°OÔ$CØ U¥^Ð4Ð4Ø�
Ü˜#¤¤e˜}×-Ò-ÙHKÓLÉÀ™, t°FÖ;É�ÐLÜ˜C”y Ó(Ð(ØˆJùò Ms   Á7Brv   r{   )#rg   rv  r®  rA   r  rä   r  r?  r£   r@   rq   r�   rR  r€   r   ÚinspectÚ	signatureÚforwardrK   rI   rw   rB  r~   rß   rH   rÃ   rò   ræ   r¢   r¡  rJ  rÙ  r¾   rZ   rþ   )rÔ   r  r>   rû  rG   r˜  rN  Ú	convertedÚchangedrä  Úsupports_position_idsÚsupports_position_embeddingsrB  rR  Ú	batch_dimrÝ   Úpreserve_position_embeddingsrå   Úpos_idsÚ
pos_valuesrS  rQ  Úeffective_quant_batch_sizeÚ	x_forwardÚmodule_outputÚbatch_offsetÚ	x_partialÚpartial_kwargsÚpartial_outputr>  r?  s   &&&&                         @@rC   r¬  Ú)AWQProcessor._iter_module_forward_outputs¾  s{  ùé € ô ˜]Ó+ˆàˆð	!Ü  ×!2Ñ!2Ó!4Ó5×<Ñ<ˆMô ˜}×2Ñ2Ó4×5‰JˆCÜ˜%¤§¡×.Ò.Ø Ò,°·±ÀÔ1NØ).¯©°-Ó)@�MÓ&ñ 2OÑ,ä˜E¤D¬% =×1Ô1Ø�	Ø�Û!�DÜ! $¬¯©×5Ò5¸-Ò:SÐX\×XcÑXcÐgtÔXtØ!×(Ñ(¨¯©°Ó)?Ô@Ø"&šà!×(Ñ(¨Ö.ñ "÷ ‘7Ü)-¨e¬°YÓ)?�MÔ&ñ 6ð  !&ÐØ',Ð$ð	Ü×)Ò)¨&¯.©.Ó9×DÑDˆIØ$2°iÑ$?Ð!Ø+@ÀIÑ+MÐ(ð �5‰5‹7�aŒ<×2×6RØ—‘˜A“ˆAàˆØˆ	Ø�5‰5‹7�aŒ<ØŸ™ �
ˆIØ$%§E¡E£G¨q¤L�a—g‘g˜a–j°a·g±g¸aµj‰GàˆIØ—g‘g˜a•jˆGà×&Ñ&Ó(ˆä�D—O‘OÐ%PÐRWÓX÷ 7ð 7Ø%¨Ñ6ð 	%ð
 ÓØÓ"ß,Ð,ß0Ð0à×0Ñ0°×1JÐ1JÀ!Ç(Á(ÓKˆFØ ×3Ñ3°F×<UÐ<UÈQÏXÉXÓVˆMß;P�m×'Ñ'¨Ô7ÐVZˆGß(Ø�ØŠ '§-¡-°Õ"3°wÔ">Ü"Ÿ\š\¨'¸-×:SÐ:SÈ1Ï8É8Ô[`×[eÑ[eÔf�
Ø—5‘5“7˜a”<Ø!+×!5Ñ!5°aÓ!8×!?Ñ!?À	È2Ó!N�Jß(Ø4>�M .Ñ1Ø!+‘à!(§¡¨M×,KÐ,K¸W¿^¹^Ó!L�ß(Ø4B�M .Ñ1à -Ò 5™1¸1¿4¹4ÀÓ;NˆLÙ39¸,ÈÓ3WˆMÐ/Ò0ß" wÒ':¸~ÐUbÔ?bÜŸš g×6OÐ6OÀqÇxÁxÔW\×WaÑWaÔbˆJØ�u‰u‹w˜!Œ|Ø'×1Ñ1°!Ó4×;Ñ;¸IÀrÓJ�
Ø,6ˆM˜.Ñ)à?C×?U×?UÐ?UÐZ^×ZpÑZpÐstÔZt T×%;Ò%;Ðz~Ð"ð 'Ò.Ø�u‰u‹w˜!Œ|Ø�w‰w�q�zÐ7Ô7à/<Ò/HÈQÏXÉXÐYfÔMf˜Ÿ™˜]Ô+ÐlmˆIÙ" 9Ñ>°Ñ>ˆMÜ˜-¬×/Ò/Ø -¨aÕ 0�ØÒÙà-.¯U©U«W°q¬[œ#˜aŸg™g a�jœ/¸aˆö
	ð ˆÜŸš QÐ(BÈ×JˆIØ7DÒ7PÐU^×UeÑUeÐivÔUv˜	Ÿ™ ]Ô3ð  }FˆIð #0×"5Ñ"5Ô"7ôá"7‘J�Cð ‘\ %¨°y·±ÀqÕ7IÓJÒJÙ"7ð ñ ñ $ IÑ@°Ñ@ˆNÜ˜.¬%×0Ò0Ø!/°Õ!2�Ø Ò Ø˜IŸO™O¨AÕ.Õ.ŠLó KøôW ô 	!Ø ‹MÜô 	!Ø ‹Mð	!ûô2 œIÐ&ô 	Úð	üódùsÜ   „Z“#Y ¶BZÃA<ZÅZÅ4Y$ ÆZÆ0ZÆ8B;ZÉ4ZÊZÊZÊ*$ZËZË(ZÌ7ZÌ;AZÎZÎ6ZÏ0ZÐ #ZÐ$A-ZÒD9Z×'Y<×2AZÙY!ÙZÙY!ÙY!ÙZÙ Y!Ù!ZÙ$Y9Ù5ZÙ8Y9Ù9	Zc                ó4   <€ V ^8„  d   QhRS[ P                  /# )r=   r  rK  )rB   r_   s   "€rC   rD   rž   @  s   ø€ ÷ ñ ©u¯|©|ñ rE   c              #  ó‚  "  € \        V\        P                  4      '       dŽ   V P                  '       d   V P                  ^ 8”  d   V P                  MRpVe.   VP	                  4       ^ 8X  g   VP
                  ^ ,          V8:  d   Vx € R# \        P                  ! W#^ R7       F  pVx € K	  	  R# V F  pVx € K	  	  R# 5i)zNNormalizes reference outputs to the same chunking contract as forward outputs.Nrv   )r£   r@   rq   r¾   rw   r~   rþ   )rÔ   r  Úreference_outputrL  r$  s   &&&  rC   r  Ú*AWQProcessor._iter_reference_output_chunks@  s¢   é € ô Ð&¬¯©×5Ò5ØCG×CY×CYÐCYÐ^b×^tÑ^tÐwxÔ^x¨×)?Ò)?ð  CÐ&à*Ò2Ø—5‘5“7˜a”<Ø—7‘7˜1•:Ð!;Ô;à&Ò&Ùä"Ÿ[š[Ð)9Ð[\×]�	Ø”ñ ^áã)ˆIØŒOó *ùs   ‚2B?µB
B?c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# )r=   rÊ  )r   rY   r   )rB   r_   s   "€rC   rD   rž   T  s!   ø€ ÷ |#ñ |#©©c±;Ð.>Õ)?ñ |#rE   c           	     óÜ  a€ \         P                   ! 4       pVP                  4        EF-  w  poRSP                   R2pV P                  V4       V P	                  S4      p\        V\        V4      R7       SP                  P                  R4      p^ pVP                  P                  P                  ^,          p	\        V\        4      '       dA   \        VP                  R^ 4      ;'       g    ^ 4      p\        VP                  RV	4      4      p	VP                  P                  p
V'       d=   V
P                  V
P                  ^ ,          V4      p\         P"                  ! W«3^R7      p
V P%                  V
4      w  rÍpV'       d    VRR	V	13,          pV P&                  P(                  ^ 8”  dZ   \+        ^\,        P.                  ! W�P&                  P(                  ,          4      4      pVRR	V13,          pVe   VRR	V13,          pMVRR	V	13,          pVe   VRR	V	13,          pSP1                  R
VRV/4       ??V P2                  '       dÈ   SP                  P                  P4                  \         P6                  8X  d   VP                  P                  V,
          pMYVP                  P                  P9                  \         P:                  R7      VP9                  \         P:                  R7      ,
          pSP                  P=                  RV/4       SP                  P=                  RV/4       \        V\        4      '       d   SP                  P?                  RR	4       WÆP                  n
        \         P                   ! 4       V,
          pR	pV FL  w  pppp\@        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       g   KJ  Tp M	  Vf   RpMVR pV PB                  P                  SP                  / 4      pV PD                  P                  SP                  SP                  4      pV PB                  P                  VV4      pV PG                  V4      p/ \H        V P                  4       b\J        SPL                  b\N        SP                  b\P        V PS                  S4      b\T        V PW                  S4      b\X        Vb\Z        V bR\        VP                  R^ 4      4      bR\        VP                  R^ 4      4      bR\        VP                  R^ 4      4      bRVP                  RR4      bRVbR\        VP                  R^ 4      4      bR\        VP                  R^ 4      4      bR \        VP                  R^ 4      4      bR!VP                  RR4      b\\        VR" b\^        V Pa                  4       /CpV Pb                  ;_uu_ 4        V Pd                  Pg                  R#SPL                   R$SP                   24       V Ph                  Pg                  V4       R	R	R	4       V Pk                  V4       EK0  	  R	#   + '       g   i     L(; i)%zEPseudo-quantizes selected linears and stages AWQ tensors for packing.zQuantizing z	 in layerrê   Útp_pad_infoÚpad_colsÚoriginal_columnsrv   râ  NÚq_scalesÚq_zerosrt   Ú	w_wq_diffÚwqc              3   óB   <"  € T F  pSP                   V9   x € K  	  R # 5ir]  )r`  )r_  r–  r�   s   & €rC   rb  Ú+AWQProcessor.apply_quant.<locals>.<genexpr>�  s   øé € ÐUÉ¸:�|×(Ñ(¨JÖ6Ëùs   ƒTFznot applicablez.10fÚactivation_raw_tokensrˆ  Úactivation_retained_tokensr£  Úactivation_batchesr  Úactivation_aggregationr  rs  Úscale_featureÚscale_raw_tokensÚscale_retained_tokensÚscale_batchesÚscale_aggregationz.3fzlayer-Ú-)6Útimer?  r`  Údraw_progressr¥   r6   rL   r¡   r¢   r|   Údatar~   r£   rg   rZ   Ú	new_zerosr@   rƒ   r  r¨   ro   r„  ÚmathÚceilÚstream_state_payload_to_cpur­   ru   Úfloat16r�   r‚   rÄ  rý  rd  rÊ   rË   r'  r   r   r  r   r   Úmodule_feature_summaryr   Úmodule_dtype_size_summaryr   r   r   r   Údevice_memory_reportrX   Úmodule_namesr€   r@  Úlog_new_row)rÔ   rÊ  r=  Ú
start_timer`  Ú
base_titleÚlinear_layerÚtp_infor[  Úoriginal_colsÚweight_for_quantÚpadr`  r›  rŠ   Úvalid_groupsr_  ÚdurationÚavg_loss_valuerÞ   rZ  rÂ  Úloss_summaryÚactivation_statrg  Ú
scale_statÚretained_samplesÚstatr�   s   &&&                         @rC   rB  ÚAWQProcessor.apply_quantT  sá  ø€ ô —Y’Y“[ˆ
Ø"/×"5Ñ"5×"7ÑˆD�,Ø& |×'8Ñ'8Ð&9¸ÐCˆJØ×Ñ˜zÔ*à×;Ñ;¸LÓIˆLÜ�LÔ)DÀ\Ó)RÕSà"×(Ñ(×,Ñ,¨]Ó;ˆGØˆHØ(×/Ñ/×4Ñ4×:Ñ:¸1Õ=ˆMÜ˜'¤4×(Ò(Ü˜wŸ{™{¨:°qÓ9×>Ð>¸QÓ?�Ü # G§K¡KÐ0BÀMÓ$RÓ S�à+×2Ñ2×7Ñ7ÐßØ&×0Ñ0Ð1A×1GÑ1GÈÕ1JÈHÓU�Ü#(§9¢9Ð.>Ð-DÈ!Ô#LÐ à $× ;Ñ ;Ø ó!ÑˆB˜÷ Ø˜˜>˜M˜>Ð)Õ*�Ø—9‘9×'Ñ'¨!Ô+Ü#& q¬$¯)ª)°MÇIÁI×DXÑDXÕ4XÓ*YÓ#Z�LØ# A }¨ }Ð$4Õ5�FØÒ(Ø % a¨¨,¨Ð&6Õ 7˜øà# A ~¨ ~Ð$5Õ6�FØÒ(Ø % a¨¨-¨Ð&7Õ 8˜à×4Ñ4à Ø˜uðôð ˜à×'×'Ð'Ø×&Ñ&×+Ñ+×1Ñ1´U·]±]ÔBà ,× 3Ñ 3× 8Ñ 8¸2Õ =‘Ið !-× 3Ñ 3× 8Ñ 8× ;Ñ ;Ä%Ç-Á-Ð ;Ó PÐSU×SXÑSXÔ_d×_lÑ_lÐSXÓSmÕ m�Ià×"Ñ"×)Ñ)Ø ð+ô ð ×Ñ×%Ñ%Ø�bð'ô ô ˜'¤4×(Ò(Ø×"Ñ"×&Ñ& }°dÔ;à')×ÑÔ$ô —y’y“{ ZÕ/ˆHà!ˆNÛ+6Ñ'��;  4ß“3ÔUÉÓU—3—3’3ÔUÉÓU×UÔUØ%)�NÙñ ,7ð
 Ò%à/‘à"0°Ð!6�ð #×1Ñ1×5Ñ5Ø×!Ñ!ØóˆOð !×9Ñ9×=Ñ=Ø×!Ñ!Ø×!Ñ!óˆMð ×,Ñ,×0Ñ0ØØóˆJð  $×=Ñ=¸jÓIÐðÜ  $§)¡)£+ðä! <×#;Ñ#;ðô # L×$5Ñ$5ðô & t×'BÑ'BÀ<Ó'Pð	ô
 " 4×#AÑ#AÀ,Ó#Oðô  ðô #Ð'7Ð&8ðð (¬¨_×-@Ñ-@ÀÈqÓ-QÓ)Rðð -¬c°/×2EÑ2EÐFWÐYZÓ2[Ó.\ðð %¤c¨/×*=Ñ*=¸iÈÓ*KÓ&Lðð )¨/×*=Ñ*=¸fÀiÓ*Pðð   ðð #¤C¨
¯©°|ÀQÓ(GÓ$Hðð (¬¨Z¯^©^Ð<MÈqÓ-QÓ)Rðð  ¤ Z§^¡^°I¸qÓ%AÓ!Bðð  $ Z§^¡^°F¸IÓ%Fð!ô$ ! X¨c Nð%ô( $ T×%>Ñ%>Ó%@ñ)ˆDð, ——“Ø×!Ñ!×(Ñ(¨6°,×2JÑ2JÐ1KÈ1È\×M^ÑM^ÐL_Ð)`ÔaØ—‘—‘ Ô%÷ ð
 ×Ñ˜T×"óq #8÷f —ús   ×*AYÙY+c                ó¨   € \         P                  ! VP                  4      P                  p/ pVP	                  4        F  w  rVWS9   g   K  WdV&   K  	  V# )a0  
Remove the arguments that are not supported in the module's
forward pass to avoid breaking behaviour between different versions
of transformers.

Args:
    inputs_kwargs (`dict`):
        The input dictionary to pass to the model layer
    module (`torch.nn.Module`):
        Target module to quantize.
)rA  rB  rC  r®  r?  )rÔ   Úinputs_kwargsr>   Úmodule_signatureÚsanitized_kwargsÚkÚvs   &&&    rC   r}  ÚAWQProcessor._sanitize_kwargsÒ  sP   € ô #×,Ò,¨V¯^©^Ó<×GÑGÐØÐØ!×'Ñ'Ö)‰DˆAØÖ$Ø&' Ó#ñ *ð  ÐrE   c                ó    <€ V ^8„  d   QhRS[ /# )r=   r>   r   )rB   r_   s   "€rC   rD   rž   å  s   ø€ ÷ $/ñ $/¡ñ $/rE   c           	     ó   € V P                   P                  VP                  R7      RJ d   R# \        W P                   P                  4      V n        V P                  VP                  4      pVP                  ;_uu_ 4        WP                  VP                  &   VP                  P                  R4      pVP                  f   Ve   WTn        VP                  ;'       g    TpVP                  '       g:   Ve6    \        V4      pVP                  P!                  VP#                  4       4       VP                  P%                  VP                  4       RRR4       V P                  ;_uu_ 4        VP                  P'                  R^4      ^ ,          pV P)                  V4      p	V	'       d9   V	P                  RR4      '       d!   V P*                  P-                  VR. R. /4       V P*                  P                  VP                  4      p
V
f   R. /V P*                  VP                  &   MV
P-                  R. 4       RRR4       R#   \         d    / p ELPi ; i  + '       g   i     EL; i  + '       g   i     R# ; i)	zNRegisters a module with its layer state and initializes input capture buckets.)r–  FNrT   rs   r[  r:  r;  )r¨   r  rx  r1   rÓ   r  r  rX   rQ   r`  r¡   r¢   rT   rW   r4   rä   rÄ  rÃ  r@  rþ   r4  r?  rÒ   )rÔ   r>   rÓ   rÐ  Úlayer_staterƒ  Úeffective_layerÚall_linearsÚ	root_namerr  rF  s   &&&,       rC   Ú
preprocessÚAWQProcessor.preprocesså  sí  € ð �9‰9× Ñ ¨F×,<Ñ,<Ð Ó=ÀÓFÙô +¨8·Y±Y×5GÑ5GÓHˆŒØ×+Ñ+¨F×,>Ñ,>Ó?ˆØ××ÓØ/5×Ñ §¡Ñ,Ø%Ÿ|™|×/Ñ/°Ó?ÐØ×'Ñ'Ò/Ð4DÒ4PØ+;Ô(Ø)×6Ñ6×JÐJÐ:JˆOØ×.×.Ð.°?Ò3Nð%Ü".¨Ó"?�Kð ×+Ñ+×2Ñ2°;×3CÑ3CÓ3EÔFØ×'Ñ'×+Ñ+¨F¯K©KÔ8÷ ð �Y�Y‹Yð Ÿ™×)Ñ)¨#¨qÓ1°!Õ4ˆIØ×:Ñ:¸9ÓEˆKß˜{Ÿ™¨~¸u×EÒEØ—
‘
×%Ñ% i°(¸BÀÐQSÐ1TÔUØ—J‘J—N‘N 6§;¡;Ó/ˆEØŠ}Ø+3°R¨.�—
‘
˜6Ÿ;™;Ò'à× Ñ  ¨2Ô.÷ ‰Yøô	 !ô %Ø"$“Kð%ú÷ ×Ðú÷ �YˆYúsR   Â AIÃIÃ4IÃ9IÄAIÅ.AI,ÇA7I,ÉIÉIÉIÉIÉI)	É,I=	c                ó&   <€ V ^8„  d   QhRS[ RS[/# r<   )r   r\   )rB   r_   s   "€rC   rD   rž   	  s   ø€ ÷ 6ñ 6¡ð 6±ñ 6rE   c                óX   € V P                   P                  VP                  R4      '       * # )zAReports whether preprocessing excluded this module from AWQ work.F)r?  r¢   r`  )rÔ   r>   s   &&rC   Ú
is_skippedÚAWQProcessor.is_skipped	  s    € ð —:‘:—>‘> &§+¡+¨uÓ5Ô5Ð5rE   c                ó€   <€ V ^8„  d   QhRS[ RS[S[S[S[P
                  R3,          S[P
                  .R3,          /# )r=   r`  r?   .N)rY   r   r   r   r@   rq   )rB   r_   s   "€rC   rD   rž   	  sC   ø€ ÷ ñ ©ð ±¹6Á5ÉÏÉÐWZÐIZÕC[Ñ]b×]iÑ]iÐ:jÐlpÐ:pÕ1qñ rE   c                ó   a a€ R VV 3R llpV# )zFReturns the forward hook that caches module input activations for AWQ.c                ór   € V ^8„  d   QhR\         \        P                  R3,          R\        P                  /# )r=   rú  .rÕ  )r   r@   rq   )rB   s   "rC   rD   Ú7AWQProcessor.pre_process_fwd_hook.<locals>.__annotate__	  s,   € ÷ 	6ñ 	6œe¤E§L¡L°#Ð$5Õ6ð 	6¼U¿\¹\ñ 	6rE   c                óž   <€ V'       g   R# Tp\        V\        \        34      '       d   V'       d
   V^ ,          pSP                  SV4       R# )zDRecords the module input tensor for later AWQ scale and clip search.N)r£   rR  r  rH  )r>   rú  rÕ  r8  r`  rÔ   s   &&& €€rC   ÚhookÚ/AWQProcessor.pre_process_fwd_hook.<locals>.hook	  s<   ø€ ÷ ÙØˆGÜ˜'¤E¬4 =×1Ò1·gØ! !�*�Ø×&Ñ& t¨WÖ5rE   ra   )rÔ   r`  r¢  s   ff rC   Úpre_process_fwd_hookÚ!AWQProcessor.pre_process_fwd_hook	  s   ù€ ÷	6ñ 	6ð ˆrE   c                ó¾   <€ V ^8„  d   QhRS[ RS[P                  RS[S[S[S[ 3,          ,          RS[S[S[S[ 3,          ,          RS[S[,          RS[S[,          /# )r=   r>   rA   Úsubsetr  Úsubset_indexrR   )r   r@   rA   r
   r   rY   rZ   )rB   r_   s   "€rC   rD   rž   	  sq   ø€ ÷ 59ñ 59áð59ñ —‘ð59ñ ™™c¡;Ð.Õ/Õ0ð	59ñ
 "¡$¡s©KÐ'7Õ"8Õ9ð59ñ ™s•mð59ñ ™s•mñ59rE   c                óF  € V P                  4        VP                  pV P                  V4      pVP                  ;_uu_ 4        Veh   VP                  P                  V4       VP                  f?   VP                  4        F*  p	V	P                  P                  R4      p
V
f   K$  W¨n         M	  Ve   Whn
        Ve   VP                  P                  V4       Ve&   VP                  P                  VP                  4       V'       d   V P!                  V4      Vn        VP                  pVP                  '       d4   VP                  P%                  VP                  P'                  4       4      pVP(                  '       * ;'       de    \+        VP                  4      ;'       dH    V'       * ;'       d9    VP                  RJ ;'       g#    \-        VP                  4      VP                  8¬  pV'       d   V P/                  Wx4       RRR4       R#   + '       g   i     R# ; i)zGAccumulates subset progress and triggers layer quantization when ready.NrT   )rW  r  r  rX   rQ   rÄ  rT   r¸  r¡   r¢   rR   rS   r@  rW   rC  r`  r
  rU   ÚintersectionrÃ  rV   r\   r(  r¢  )rÔ   r>   rA   r§  r  r¨  rR   r  r¡   Ú	candidaterƒ  Úpending_in_scopeÚshould_quantizes   &&&&&&&      rC   ÚprocessÚAWQProcessor.process	  sº  € ð 	×/Ñ/Ô1Ø×(Ñ(ˆØ×%Ñ% kÓ2ˆà�Z�Z‹ZØÒ!Ø—‘×$Ñ$ VÔ,Ø×%Ñ%Ò-Ø%+§]¡]¦_˜	Ø+4¯?©?×+>Ñ+>¸~Ó+NÐ(Ø+Ô7Ø1AÔ.Ù!ñ	 &5ð Ò'Ø%1Ô"ØÒ'Ø×'Ñ'×+Ñ+¨LÔ9àÒ!Ø×%Ñ%×-Ñ-¨f¯k©kÔ:çØ.2×.QÑ.QÐRaÓ.b�Ô+ð  %×4Ñ4ÐØ�}�}ˆ}Ø#(×#8Ñ#8×#EÑ#EÀeÇmÁm×FXÑFXÓFZÓ#[Ð ð —O‘OÔ#÷ ð Ü˜Ÿ™Ó'÷ð à(Ô(÷ð ð ×&Ñ&¨$Ð.÷ Jð JÜ˜5×2Ñ2Ó3°u×7IÑ7IÑIð ÷ Ø×$Ñ$ [Ô8÷M �Z�ZŠZús?   ÁAHÂ$A#HÄ3HÄ<A
HÆHÆ$HÆ3HÇ	*HÇ4HÈH 	c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r=   r>   rÆ   )r   r   )rB   r_   s   "€rC   rD   rž   V	  s   ø€ ÷ !ñ !©ð !¹Zñ !rE   c                ó(   € V P                  V4       R# )z7Delegates AWQ module packing to the shared pack helper.N)r8   )rÔ   r>   rÆ   rÐ  s   &&&,rC   Úsubmodule_finalizeÚAWQProcessor.submodule_finalizeV	  s   € ð 	×Ñ˜Ö rE   c                ó*
  € VP                  4        V P                  ;_uu_ 4        V P                  '       d>   VP                  P	                  R4      P                  \        4      VP                  n        VP                  P	                  RR4       VP                  P	                  RR4       VP                  P                  R4      f   \        RVP                  4       VP                  P	                  R4      P                  4       pVP                  P	                  R4      P                  4       pRRR4       XP                  \        8X  g   Q hXP                  \        8X  g   Q hV P                  VP                  4      pVP                  V P                  P                   P#                  VP                  4      /p\%        VR\%        VR	R
4      4      p\%        VR\%        VR	R4      4      p\%        V P                  RR4      pVe   \&        P(                  ! 4       MRp	\+        R\,        VR7      ;_uu_ 4        \/        V4      ;_uu_ 4        \1        VP                  VV P2                  P4                  V P2                  P6                  V P2                  P8                  V P2                  P:                  V P                  P                   VV P2                  P<                  V P2                  P                  V P                  P>                  V P2                  P@                  V PB                  RVP                  PD                  R7       RRR4       RRR4       Ve3   V	e/   VPG                  R\&        P(                  ! 4       V	,
          VR7       V P                  P                   P#                  VP                  4      p
\I        W¤4      '       d   VP                  V
/M/ pVe   \&        P(                  ! 4       MRp\+        R\,        VR7      ;_uu_ 4        \/        V4      ;_uu_ 4        \K        VP                  VVVRVVV P                  V P2                  R7	      pRRR4       RRR4       VeG   VeA   TPG                  R\&        P(                  ! 4       V,
          T RX;'       g    R R2R7       R# R# R#   + '       g   i     ELŠ; i  + '       g   i     EL‹; i  + '       g   i     EL—; i  + '       g   i     L ; i  + '       g   i     L«; i)zLCreates the AWQ quantized module and packs saved scales/zero-points into it.r`  rÑ  Nr_  r^  Úmoddddr]  rx  r`  Ú Úquant_region_timerr7   )Úloggerr  F)r`  Ú
linear_clsrû  Údesc_actÚdynamicro   r>   Ú	submodulerù  rA   Úlm_head_nameÚ
pack_dtyperB   Úregister_buffersru   Úsubmodule_finalize_create)rÛ  Úpack)	r`  ÚqModulesr]  r^  Úq_g_idxrn   Úquant_linear_clsrX   Úquantize_configÚsubmodule_finalize_packz [zmodule.pack_originalÚ])&Ústream_syncrX   r­   r¡   rý  r�   r:   r|   ro  r¢   Úprintrx  r×  rA   r  rÃ   rÆ   Úget_submodulerH   rm  Úperf_counterr3   r@  r9   r7   r¨   Úruntime_bitsrº  r»  ro   rù  Úlm_headr¾  rB   ru   Úrecordr£   r8   )rÔ   r>   r^  r]  rÄ  rn   Úmodule_labelÚ
parent_keyÚtimerÚcreate_startÚqmodulerÂ  Ú
pack_startÚpacker_labels   &&            rC   r8   ÚAWQProcessor.pack_module[	  sç  € ð
 	×ÑÔØ�i�i‹ià×'×'Ð'Ø%+§\¡\×%5Ñ%5°dÓ%;×%>Ñ%>¼sÓ%C�—‘Ô"à�L‰L×Ñ˜S $Ô'Ø�L‰L×Ñ˜[¨$Ô/à�|‰|×Ñ 	Ó*Ò2Ü�h × 0Ñ 0Ô1à—l‘l×&Ñ& yÓ1×7Ñ7Ó9ˆGØ—|‘|×'Ñ'¨
Ó3×9Ñ9Ó;ˆH÷ ð �~‰~¤Ô$Ð$Ð$Ø�‰¤#Ô%Ð%Ð%Ø×7Ñ7¸×8HÑ8HÓIÐØ×"Ñ" D§O¡O×$9Ñ$9×$GÑ$GÈ×HXÑHXÓ$YÐZˆÜ˜v {´G¸FÀFÈBÓ4OÓPˆÜ˜V [´'¸&À&È$Ó2OÓPˆ
ä˜Ÿ™Ð)=¸tÓDˆØ.3Ò.?”t×(Ò(Ô*ÀTˆÜØ%ÜØ(÷
ö 
ô
 $ J×/Õ/Ü#Ø×)Ñ)Ø/ØŸ™×/Ñ/Ø!ŸY™Y×/Ñ/Ø ŸI™I×-Ñ-Ø#Ÿy™y×3Ñ3ØŸ?™?×0Ñ0Ø$ØŸ	™	Ÿ™ØŸ9™9×+Ñ+Ø!%§¡×!8Ñ!8Ø#Ÿy™y×3Ñ3ØŸ;™;Ø%*Ø Ÿ-™-×-Ñ-õ÷ 0÷
ð. Ò Ò!9Ø�L‰LØ+Ü×!Ò!Ó# lÕ2Ø#ð ô ð —/‘/×'Ñ'×5Ñ5°f×6FÑ6FÓGˆô ˜'×4Ò4ð ×Ñ˜wÑ'àð 	ð
 -2Ò,=”T×&Ò&Ô(À4ˆ
ÜØÜØ(÷
ö 
ô
 $ J×/Õ/Ü*Ø×)Ñ)Ø%Ø%Ø#Ø Ø!Ø%5ØŸ™Ø$(§I¡Iô
 �÷ 0÷
ð" Ò Ò!7Ø�L‰LØ)Ü×!Ò!Ó# jÕ0Ø&˜ r¨,×*PÐ*PÐ:PÐ)QÐQRÐSð ö ñ "8Ñ÷Y �iˆiú÷6 0×/Ð/ú÷
÷ 
ð 
ú÷T 0×/ú÷
÷ 
úsU   ¥DR3È:SÉC7S	ÍSÐTÐ$3S/	ÑTÒ3S	ÓSÓ	SÓS,	Ó/S?Ó:TÔT	c                ó    <€ V ^8„  d   QhRS[ /# )r=   rÆ   r   )rB   r_   s   "€rC   rD   rž   ´	  s   ø€ ÷ 0ñ 0™jñ 0rE   c                óx   <€ RVn         \        P                  VP                  n        \
        SV `  ! RRV/VB  R# )zDMarks the model as AWQ-quantized and runs shared finalization logic.TrÆ   Nra   )rV   r+   ÚAWQrÅ  rÄ   r¹   Úfinalize)rÔ   rÆ   rÐ  rÖ   s   &&,€rC   rÚ  ÚAWQProcessor.finalize´	  s3   ø€ ð ˆŒä'-§z¡zˆ×ÑÔ$ä‰ÒÑ/˜uÐ/¨Ô/rE   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r=   Úprocessor_indexr?   )rZ   r\   )rB   r_   s   "€rC   rD   rž   ¾	  s   ø€ ÷ ñ ¹#ð Á$ñ rE   c                ó8   € V P                   f   \        R4      hR# )zJEnsures AWQ received calibration data before the quantization loop starts.z5GPTQProcessor's calibration_dataset must be provided.T)rö   rK   )rÔ   rÝ  s   &&rC   Úverify_calibration_datasetÚ'AWQProcessor.verify_calibration_dataset¾	  s   € ð ×#Ñ#Ò+ÜÐTÓUÐUárE   c                ó    <€ V ^8„  d   QhRS[ /# rÙ   )rY   )rB   r_   s   "€rC   rD   rž   Ç	  s   ø€ ÷ ñ ‘Sñ rE   c                ó   € R# )zAReturns the processor label used in logs and lifecycle reporting.r  ra   )Úclss   &rC   r`  ÚAWQProcessor.nameÆ	  s   € ñ rE   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r=   r`  r?   )rY   r\   )rB   r_   s   "€rC   rD   rž   Ì	  s   ø€ ÷ `ñ `©3ð `±4ñ `rE   c                ó  € V P                   P                  V4      ;'       g    / pVP                  R. 4      pVRJ;'       dK    \        V4      ^ 8„  ;'       d5    \        ;QJ d    R V 4       F  '       d   K   R# 	  R# ! R V 4       4      # )zDReports whether a module has any non-empty captured AWQ activations.r:  Nc              3   óF   "  € T F  qP                  4       ^ 8„  x € K  	  R# 5irm  )rT  )r_  Úts   & rC   rb  Ú6AWQProcessor.has_captured_input_ids.<locals>.<genexpr>Ñ	  s   é € Ð?_ÑW^ÐRSÇÁÃ	ÈAÆÓW^ùs   ‚!FT)r?  r¢   r(  r  )rÔ   r`  rF  rw  s   &&  rC   Úhas_captured_input_idsÚ#AWQProcessor.has_captured_input_idsÌ	  sw   € ð —
‘
—‘˜tÓ$×*Ð*¨ˆØ&+§i¡i°¸"Ó&=ˆØ˜dÐ"×_Ð_¤s¨7£|°aÑ'7×_Ð_¿C»CÑ?_ÑW^Ó?_¿C¼CÐ_ºCÐ_¸CÑ?_ÑW^Ó?_Ó<_Ð_rE   )rÍ   rÊ   rÌ   r¿   rÀ   rÉ   r½   r¾   rÏ   rÎ   rÐ   rÂ   rË   r%   r»   r­   rÈ   rÓ   rB   rÃ   rÇ   rÆ   r¼   r·   )TFNr]  )é   g      à?i   )NNNNN)Frb   rc   rd   re   rf   Ústaticmethodr¥   rº   rß   ræ   rò   r÷   r   rÅ   r  r  r  r!  rÑ   r4  rH  rA  re  rs  r€  r‹  rµ  r»  rÓ  rÝ  rí  ró  r÷  r  r
  r"  r'  r1  rD  rW  rb  r¢  r@   r«  r~  r€  rÉ  r  rÚ  r°  r  r¯  r¬  r  rB  r}  r—  r›  r¤  r®  r²  r8   rÚ  rß  Úclassmethodr`  rê  rj   rk   Ú__classcell__)rÖ   r_   s   @@rC   r›   r›   �   sˆ  ù‡ € ÙRà÷#ó ð#÷G&õ G&÷RUð U÷ò ÷$ð $òL[÷

ð 
÷Uð U÷0
Eò 
E÷ð õõB÷%ð %÷>ð ð 9Fð
 #÷9Fò 9F÷vð ÷0Lð L÷0ð ð8 ÷

ó ð

ð ÷Ió ðIð: ÷mEó ðmEð^ ÷ó ð÷<?ð ?ðB ÷:ó ð:ð ÷ó ðð. ÷ó ðð  ÷Kó ðK÷Wð W÷r0ð 0÷&@ð @÷D$ð $÷7ò 7÷@Uð U÷@?0ð ?0÷B$
ð $
÷L@Uð @UðD ×ÒÓð  Ø÷\
ñ \
ó ð\
ð| ×ÒÓñó ðð0 ×ÒÓ÷@'ñ @'ó ð@'÷D- ð - ð^ ×ÒÓ÷%"ó ð%"ð` ÷v6ò v6ðp ×ÒÓ÷ó ððB ×ÒÓ÷
)ó ð
)ð ×ÒÓ÷/ó ð/÷Bð ÷(|#ð |#ò| ÷&$/ò $/÷L6ð 6÷
ð ÷59ò 59÷p!ð !ò
W÷r0ó 0÷ð ð ÷ó ð÷
`÷ `ð `rE   r›   )Zrí   rA  rq  r]   rm  Úcollections.abcr   Údataclassesr   r   Útypingr   r   r   r	   r
   r   r   r@   r   Útorch.nnr   Úlooper.loop_processorr   r   r   r   Úlooper.named_moduler   Úmodelsr   Úmodels._constr   r   Úmodels.writerr   r   r   r   r   r   r   Únn_modules.qlinear.gemm_awqr    Únn_modules.qlinear.gemv_awqr!   Ú nn_modules.qlinear.gemv_fast_awqr"   r#   Únn_modules.qlinear.torch_awqr$   Úquantization.awq.quantize.scaler%   r&   Úquantization.awq.utils.moduler'   r(   r)   Úquantization.configr*   r+   r,   r-   Úutils.attn_maskr.   Ú	utils.ctxr/   Úutils.devicer0   r^  r1   Úutils.loggerr2   r3   Úutils.modelr4   r5   r6   r7   r8   Úutils.module_locksr9   Úutils.torchr:   r@  rL   rN   r–   r™   r›   ra   rE   rC   Ú<module>r     sÈ   ðó Û Û Û Û Ý #ß (ß B× BÑ Bã Ý Ý ç lÓ lÝ -Ý ß 9÷h÷ hñ hå 7Ý 7ß NÝ 9ß Eß ZÑ Zß VÓ VÝ 0Ý Ý %Ý /ß 7ß lÕ lÝ 3Ý áƒn€õ	ð ÷
Að 
Aó ð
Aõ7õt
6ôD%`�=ö D%`rE   