+
    "Ý³j:  ã                  óŽ  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHtHtHtH	t	 ^ RI
t
^ RIt^ RIH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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*H+t+H,t,H-t- ^RI.H/t/ ^RI0H1t1 ^RI2H3t3 ^RI4H5t5 ^RI6H7t7 ]5! 4        Rt8RRRRRRRR/t9R R lt: ! R R]4      t;RR.t<R# )é    )ÚannotationsN)ÚCallableÚDictÚOptionalÚTuple)ÚModule)Ú_ConvNd)Úquantize_exl3)ÚDTYPE_SIZE_COLUMNÚExecutionConfigÚMODULE_FEATURE_COLUMNÚLoopProcessor)ÚNamedModule)Ú
BaseQModel)	ÚPROCESS_LOG_FWD_TIMEÚPROCESS_LOG_LAYERÚPROCESS_LOG_MODULEÚPROCESS_LOG_NAMEÚPROCESS_LOG_TIMEÚPROCESS_USED_MEMORYÚQUANT_LOG_DAMPÚQUANT_LOG_LOSSÚQUANT_LOG_NSAMPLES)ÚExllamaV3Linear)ÚQuantizeConfig)Ú
EXL3ConfigÚFORMATÚ
GPTQConfigÚMETHOD)ÚGPTQ)Ú
get_device)Úcreate_exllamav3_module)Úsetup_logger)Úparent_module_lockgš™™™™™™?ÚalwaysTÚneverFÚautoc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úqcfgr   Úmodule_full_nameÚstrÚreturnzOptional[EXL3Config]© )Úformats   "Úe/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/looper/exllamav3_processor.pyÚ__annotate__r1   6   s&   € ÷ ñ Ø
ðàðð ñó    c                óÖ  € V P                  VR7      R8X  d   R# \        P                  ! V 4      pV P                  eœ   V P                  VRVP                  4      Vn        V P                  VRVP
                  4      Vn        V P                  VRR4      pVe   W2n        V P                  VRR4      pVe   WBn        V P                  VRR4      pVe   WRn        VP                  4        V# )	zJClones and applies per-module EXL3 dynamic overrides, or skips the module.©Ú
layer_nameFNÚbitsÚ	head_bitsÚ
out_scalesÚcodebookÚcalibration)
Údynamic_getÚcopyÚdeepcopyÚdynamicr6   r7   r8   r9   r:   Ú__post_init__)r*   r+   Ú
qcfg_cloneÚout_scales_overrideÚcodebook_overrideÚcalibration_overrides   &&    r0   Ú!clone_exllamav3_config_for_modulerD   6   sè   € ð ×ÑÐ#3ÐÓ4¸Ô=Ùä—’˜tÓ$€Jà‡|�|ÒØ×*Ñ*Ð+;¸VÀZÇ_Á_ÓUˆ
ŒØ#×/Ñ/Ð0@À+Èz×OcÑOcÓdˆ
Ôà"×.Ñ.Ð/?ÀÈtÓTÐØÒ*Ø$7Ô!à ×,Ñ,Ð-=¸zÈ4ÓPÐØÒ(Ø"3Ôà#×/Ñ/Ð0@À-ÐQUÓVÐØÒ+Ø%9Ô"à×ÑÔØÐr2   c                  óæ   a € ] tR t^UtRtR R V 3R llltR tR!R R lltR R ltR	 R
 lt	R R lt
R R ltR R ltR R ltR R ltR"R R lltR R ltR V 3R lltR R ltR R ltRtV ;t# )#ÚEXL3Processorz?Captures activations and repacks modules into ExLlamaV3 format.c               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r)   r*   r   Úcalibration_concat_sizeúOptional[int]Úcalibration_sortzOptional[str]Ú
batch_sizeÚintÚrequire_fwdÚboolÚcalibration_concat_separatorÚlm_head_namer,   r.   )r/   s   "r0   r1   ÚEXL3Processor.__annotate__X   sR   € ÷ !,ñ !,ð ð!,ð "/ð!,ð (ð!,ð ð!,ð ð!,ð '4ð!,ð ñ!,r2   c                óž   <€ \         SV `  VVVVVV	VV\        VRRR7      R7	       . V n        W n        \
        P                  ! 4       V n        R# )zEInitializes EXL3 processing and tracks the lm_head naming convention.T)rM   Úfwd_replay_after_processÚsubset_forward_early_stop)	Ú	tokenizerr*   r:   rH   rJ   rO   Úprepare_dataset_funcrK   Úexecution_configN)ÚsuperÚ__init__r   Ú
avg_lossesrP   Ú	threadingÚLockÚ_stats_lock)ÚselfrU   r*   r:   rV   rH   rJ   rK   rM   rO   rP   Ú	__class__s   &&&&&&&&&&&€r0   rY   ÚEXL3Processor.__init__X   s^   ø€ ô 	‰ÑØØØ#Ø$;Ø-Ø)EØ!5Ø!Ü,Ø'Ø)-Ø*.ôð 	ô 	
ð  ˆŒØ(ÔÜ$Ÿ>š>Ó+ˆÖr2   c                ó   € \        R4      h)zJRejects dataset replacement because EXL3 capture is fixed at construction.z6EXL3Processor's calibration_dataset cannot be modified)ÚNotImplementedError)r^   Úcalibration_datasets   &&r0   Úset_calibration_datasetÚ%EXL3Processor.set_calibration_dataset{   s   € ô "Ð"ZÓ[Ð[r2   c               ó   € V ^8„  d   QhRR/# )r)   Úmoduler   r.   )r/   s   "r0   r1   rQ   €   s   € ÷ 
ñ 
 ñ 
r2   c           
     óx  € ??\        V P                  VP                  4      pVf   R# \        \	        ^VP
                  4      R
RRVP                  VP                  RR7      p\        WR7      p\        V RR4      Vn
        VP                  P                  RR7       RVR	V/V P                  VP                  &   R# )zABuilds the capture task and effective EXL3 config for one module.NFT)r6   Ú
group_sizeÚdesc_actÚsymÚdeviceÚ
pack_dtypeÚact_group_aware)rg   r*   Útotal_calibration_tokens)Ú
perchannelÚcapturer*   éÿÿÿÿ)rD   r*   Ú	full_namer   ÚmaxÚruntime_bitsrl   rm   r    ÚgetattrÚexpected_nsamplesÚ	quantizerÚ	configureÚtasksÚname)r^   rg   ÚfallbackÚkwargsÚmodule_qcfgÚcapture_qcfgÚtasks   &&&,   r0   Ú
preprocessÚEXL3Processor.preprocess€   s³   € ð �fä7¸¿	¹	À6×CSÑCSÓTˆØÒÙä!Ü�Q˜×0Ñ0Ó1ØØØØ×%Ñ%Ø"×-Ñ-Ø!ô
ˆô ˜6Ô5ˆÜ!(¨Ð/IÈ4Ó!PˆÔØ�‰× Ñ ¨DÐ Ô1ð �tØ�Kð#
ˆ�
‰
�6—;‘;Ór2   c               ó    € V ^8„  d   QhRRRR/# ©r)   rg   r   r-   rN   r.   )r/   s   "r0   r1   rQ   œ   s   € ÷ ;ñ ; ð ;°ñ ;r2   c                óR   € V P                   P                  VP                  R4      RJ # )zAReports whether preprocessing omitted this module from EXL3 work.F)rz   Úgetr{   ©r^   rg   s   &&r0   Ú
is_skippedÚEXL3Processor.is_skippedœ   s"   € ð �z‰z�~‰~˜fŸk™k¨5Ó1°UÐ:Ð:r2   c               ó    € V ^8„  d   QhRRRR/# )r)   r{   r,   r-   z@Callable[[Module, Tuple[torch.Tensor, ...], torch.Tensor], None]r.   )r/   s   "r0   r1   rQ   ¡   s   € ÷ ñ ¨ð Ð1qñ r2   c                ó   a a€ R VV 3R llpV# )zHReturns the forward hook that feeds captured batches into the EXL3 task.c               ó    € V ^8„  d   QhRRRR/# )r)   ÚinpzTuple[torch.Tensor, ...]Úoutútorch.Tensorr.   )r/   s   "r0   r1   Ú8EXL3Processor.pre_process_fwd_hook.<locals>.__annotate__¤   s   € ÷ 	ñ 	Ð5ð 	¸Lñ 	r2   c                ó¾   <€ SP                   S,          R,          pSP                  4       pVP                  V^ ,          P                  VP                  VR7       ??R# )z7Records one activation batch for the EXL3 capture task.rq   )Úbatch_indexN)rz   Úcurrent_batch_indexÚ	add_batchÚdata)rg   r�   rŽ   rq   Ú	batch_idxr{   r^   s   &&&  €€r0   ÚtmpÚ/EXL3Processor.pre_process_fwd_hook.<locals>.tmp¤   sL   ø€ ð —j‘j Õ& yÕ1ˆGØ×0Ñ0Ó2ˆIØ×Ñ˜c !�fŸk™k¨3¯8©8ÀÐÔKØ’Sr2   r.   )r^   r{   r—   s   ff r0   Úpre_process_fwd_hookÚ"EXL3Processor.pre_process_fwd_hook¡   s   ù€ ÷	ñ 	ð ˆ
r2   c               ó    € V ^8„  d   QhRRRR/# r„   r.   )r/   s   "r0   r1   rQ   ®   s   € ÷ Bñ B +ð B°$ñ Br2   c                óŒ   € VP                   V P                  8X  d   R# VP                   P                  RV P                   24      # )zBReturns whether the named module corresponds to the model lm_head.TÚ.)rs   rP   Úendswithr‡   s   &&r0   Ú_is_lm_headÚEXL3Processor._is_lm_head®   s@   € ð ×Ñ˜t×0Ñ0Ô0ÙØ×Ñ×(Ñ(¨1¨T×->Ñ->Ð,?Ð)@ÓAÐAr2   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   rg   r   r~   r   r-   rL   r.   )r/   s   "r0   r1   rQ   µ   s!   € ÷ 0ñ 0 ;ð 0¸Zð 0ÈCñ 0r2   c                ó¶   € V P                  V4      '       d.   VP                  e    \        ^\        VP                  4      4      # \        ^VP                  4      # )z<Chooses lm_head-specific bitwidth overrides when configured.)rŸ   r7   rt   rL   ru   )r^   rg   r~   s   &&&r0   Ú_target_bitsÚEXL3Processor._target_bitsµ   sK   € ð ×Ñ˜F×#Ò#¨×(=Ñ(=Ò(IÜ�qœ#˜k×3Ñ3Ó4Ó5Ð5Ü�1�k×.Ñ.Ó/Ð/r2   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r)   rg   r   r~   r   rl   útorch.devicer-   zDict[str, object]r.   )r/   s   "r0   r1   rQ   ¼   s2   € ÷ ñ àðð  ðð ð	ð
 
ñr2   c           
     óÞ   € RV P                  W4      RV.R\        P                  VP                  R4      R\        RR/pVP
                  R8X  d   R	VR&   V# VP
                  R
8X  d   R	VR
&   V# )z:Builds the argument bundle passed into the EXL3 quantizer.ÚKÚdevicesÚapply_out_scalesNÚ	sigma_regÚseedi  ÚmcgTÚmul1)r£   Ú_OUT_SCALES_TO_ARGr†   r8   Ú_EXL3_SIGMA_REGr9   )r^   rg   r~   rl   Ú
quant_argss   &&&& r0   Ú_build_quant_argsÚEXL3Processor._build_quant_args¼   s‡   € ð �×"Ñ" 6Ó7Ø˜�xØÔ 2× 6Ñ 6°{×7MÑ7MÈtÓ TØœØ�Cð)
ˆ
ð ×Ñ 5Ô(Ø $ˆJ�uÑð Ðð ×!Ñ! VÔ+Ø!%ˆJ�vÑàÐr2   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   rq   r    rl   r¦   r-   r�   r.   )r/   s   "r0   r1   rQ   Ó   s!   € ÷ =ñ =¨4ð =¸ð =È,ñ =r2   c                óž   € VP                  RVR7      pVP                  4       P                  4       P                  \        P
                  4      # )zBExports the captured dense weight matrix in EXL3 quantizer layout.T)r<   rl   )Úclone_moduleÚtÚ
contiguousÚtoÚtorchÚfloat32)r^   rq   rl   Ú
normalizeds   &&& r0   Ú_quant_input_weightÚ!EXL3Processor._quant_input_weightÓ   s=   € ð ×)Ñ)¨t¸FÐ)ÓCˆ
Ø�|‰|‹~×(Ñ(Ó*×-Ñ-¬e¯m©mÓ<Ð<r2   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   rg   r   Úquantized_weightr�   r-   r.   )r/   s   "r0   r1   rQ   Ù   s'   € ÷ `ñ `¨[ð `ÈLð `Ð]iñ `r2   c                ó  € \        V\        4      '       d   VP                  MTp\        V\        P                  4      '       d4   VP                  4       P                  VP                  P                  4      # \        V\        P                  P                  \        34      '       dB   VP                  4       P                  4       P                  VP                  P                  4      # \        RVP                  P                    24      h)zDReshapes the EXL3 output weight back into the wrapped module layout.zUnsupported EXL3 module type: )Ú
isinstancer   rg   ÚtransformersÚConv1Dr¸   Úview_asÚweightr•   rº   ÚnnÚLinearr	   r·   rb   r_   Ú__name__)r^   rg   rÀ   Útargets   &&& r0   Ú_restore_module_weightÚ$EXL3Processor._restore_module_weightÙ   s¹   € ô #-¨V´[×"AÒ"A�—’Àvˆä�fœl×1Ñ1×2Ò2Ø#×.Ñ.Ó0×8Ñ8¸¿¹×9KÑ9KÓLÐLä�fœuŸx™xŸ™´Ð8×9Ò9Ø#×%Ñ%Ó'×2Ñ2Ó4×<Ñ<¸V¿]¹]×=OÑ=OÓPÐPä!Ð$BÀ6×CSÑCS×C\ÑC\ÐB]Ð"^Ó_Ð_r2   c               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R	/# )r)   rg   r   rl   r¦   Úsubsetz Optional[Dict[str, NamedModule]]Úprevious_subsetÚsubset_indexrI   Úsubset_totalr.   )r/   s   "r0   r1   rQ   æ   sV   € ÷ oQñ oQàðoQð ðoQð 1ð	oQð
 :ðoQð $ðoQð $ñoQr2   c                óä
  € ????RVP                    R2pV P                  V4       V P                  VP                   ,          pVR,          p	VR,          p
T;'       g    \        VP                  4      p\
        P                  ! V4      pVP                  R8w  d   \        R4      h\        P                  ! 4       pV	P                  VR7       V	P                  pVf   \        R	VP                   R
24      hV	P                  ^ 8:  d   \        RVP                   R
24      hRVRV	P                  RR/pV P!                  WV4      pV P#                  W›4      p\%        VVVRR7      w  ppp\        P                  ! 4       V,
          p\'        V4      pVP(                  e   VP(                  P+                  4       VR&   VP-                  V4       V P/                  VV4      pVP1                  VP2                  P4                  R7      VP2                  n        \9        V	RR4      p\9        V	RR4      p\;        V\<        4      '       d   TpM"\;        V\>        \@        34      '       d   VR MRp\B        V P                  4       \D        VPF                  \H        VP                   \J        V PM                  V4      \N        V PQ                  V4      \R        V\T        V	P                   \V        \X        R \Z        VR \\        V P_                  4       \`        V Pc                  4       /pV'       d    \?        VPe                  R^ 4      ;'       g    ^ 4      pV'       ds   \A        VPe                  RR4      ;'       g    R4      pVPe                  R4      p\=        V4      VR&   VR VR &   VPe                  R!R"4      VR#&   Ve   \=        V4      VR$&   V'       do   \?        VPe                  R^ 4      ;'       g    ^ 4      pV'       dB   \A        VPe                  R%^ 4      ;'       g    R4      V,          p\=        V4      VR&&   VR VR'&   V Pf                  Ph                  e*   V Pf                  Pk                  VP                  R(7      VR)&   V Pl                  ;_uu_ 4        V Pn                  Pq                  V4       \;        V\>        \@        34      '       d   V Pr                  Pq                  V4       V Pt                  Pq                  R*VPF                   R+VP                    24       V Pv                  Pq                  V4       RRR4       V Py                  V4       V	P{                  4        ?????R#   + '       g   i     L8; i),zDRuns EXL3 quantization for one module and stages its packed tensors.zQuantizing z	 in layerrq   r*   Úcudaz.EXL3 quantization requires CUDA/HIP execution.)Útarget_deviceNz+EXL3 failed to capture Hessian for module `z`.z5EXL3 captured no calibration activations for module `ÚHÚcountÚ	finalizedFT)rÆ   ÚH_datar±   Úreturn_weight_qÚbias)ÚdtypeÚ_borrow_workspace_last_summaryÚ_borrow_workspace_totalsz.10fÚunknownz.5fz.3fÚrequestsÚhit_rateg        Ú
chunk_rowsÚworkspace_cache_requestsz.1%Úworkspace_cache_hit_rateÚstaging_dtypeÚ Úworkspace_stage_dtypeÚworkspace_chunk_rowsÚmaterialized_hitsÚworkspace_total_requestsÚworkspace_total_hit_rater4   r>   zlayer-Ú-)>r{   Údraw_progressrz   r!   rg   rº   rl   ÚtypeÚ
ValueErrorÚtimeÚperf_counterÚfinalize_hessianrÕ   ÚRuntimeErrorrs   Únsamplesr²   r½   r
   ÚdictrÚ   ÚdetachÚstream_state_payload_to_cpurË   r¹   rÆ   rÛ   r•   rv   rÂ   r,   rL   Úfloatr   r   Úlayer_indexr   r   Úmodule_feature_summaryr   Úmodule_dtype_size_summaryr   r   r   r°   r   r   Úformatted_fwd_timer   Údevice_memory_reportr†   r*   r>   r;   r]   Ú	durationsÚappendrZ   Úmodule_namesÚlogÚlog_new_rowÚfree) r^   rg   rl   rÎ   rÏ   rÐ   rÑ   Ú
base_titleÚ
task_entryrq   r~   rÔ   Ú
start_timeÚhessianÚh_datar±   Úinput_weightÚweight_qÚ	proxy_errÚout_tensorsÚdurationÚstream_payloadÚrestored_weightÚworkspace_summaryÚworkspace_totalsÚloss_displayÚstatrß   rà   rá   Útotal_requestsÚcumulative_hit_rates    &&&&&&&                         r0   ÚprocessÚEXL3Processor.processæ   s¹  € ð �O \°<à" 6§;¡; -¨yÐ9ˆ
Ø×Ñ˜:Ô&à—Z‘Z §¡Õ,ˆ
Ø" 9Õ-ˆØ",¨VÕ"4ˆà×;Ð;¤*¨V¯]©]Ó";ˆÜŸš ]Ó3ˆØ×Ñ Ô'ÜÐMÓNÐNä×&Ò&Ó(ˆ
Ø× Ñ ¨}Ð Ô=Ø—)‘)ˆØŠ?ÜÐ!LÈV×M]ÑM]ÐL^Ð^`ÐaÓbÐbØ×Ñ˜qÔ ÜÐ!VÐW]×WgÑWgÐVhÐhjÐkÓlÐlð �Ø�W×%Ñ%Ø˜ð
ˆð ×+Ñ+¨FÀÓOˆ
Ø×/Ñ/°ÓGˆÜ+8ØØØ!Ø ô	,
Ñ(ˆ�)˜[ô ×$Ò$Ó&¨Õ3ˆä˜kÓ*ˆØ�;‰;Ò"Ø%+§[¡[×%7Ñ%7Ó%9ˆN˜6Ñ"Ø×*Ñ*¨>Ô:à×5Ñ5°f¸hÓGˆØ,×/Ñ/°f·m±m×6IÑ6IÐ/ÓJˆ�‰Ôä# GÐ-MÈtÓTÐÜ" 7Ð,FÈÓMÐä�i¤×%Ò%Ø$‰Lä2<¸YÌÌeÈ×2UÒ2U˜i¨Ñ-Ð[dˆLô ˜dŸi™i›kÜ˜v×1Ñ1Ü §¡Ü! 4×#>Ñ#>¸vÓ#FÜ˜t×=Ñ=¸fÓEÜ˜LÜ 7×#3Ñ#3Ð"4Üœ¨sÐ3Ü ¨# Ü  $×"9Ñ"9Ó";Ü ×!:Ñ!:Ó!<ð
ˆ÷ ÜÐ,×0Ñ0°¸QÓ?×DÐDÀ1ÓEˆHßÜ Ð!2×!6Ñ!6°zÀ3Ó!G×!NÐ!NÈ3ÓO�Ø.×2Ñ2°<Ó@�
Ü36°x³=�Ð/Ñ0Ø6>¸s°^�Ð/Ñ0Ø0A×0EÑ0EÀoÐWYÓ0Z�Ð,Ñ-ØÒ)Ü36°z³?�DÐ/Ñ0ßÜ Ð!1×!5Ñ!5°jÀ!Ó!D×!IÐ!IÈÓJˆNßäÐ*×.Ñ.Ð/BÀAÓF×MÐMÈ#ÓNÐQ_Õ_ð $ô 47°~Ó3F�Ð/Ñ0Ø6IÈ#Ð5N�Ð/Ñ0à�9‰9×ÑÒ(Ø"Ÿi™i×3Ñ3¸v×?OÑ?OÐ3ÓPˆD�‰Oà××ÓØ�N‰N×!Ñ! (Ô+Ü˜)¤c¬5 \×2Ò2Ø—‘×&Ñ& yÔ1Ø×Ñ×$Ñ$ v¨f×.@Ñ.@Ð-AÀÀ6Ç;Á;À-Ð%PÔQØ�H‰H�O‰O˜DÔ!÷ ð 	×Ñ˜Ôà�‰ŒØ˜/¨8°[Â.÷ ×ús   ÒB#UÕU/	c               ó    € V ^8„  d   QhRRRR/# )r)   rg   r   Úmodelr   r.   )r/   s   "r0   r1   rQ   W  s   € ÷ 0ñ 0¨ð 0¸Zñ 0r2   c           	     óx  € ?VP                  4        / pV P                  ;_uu_ 4        VP                  P                  RR4       R F7  pVP                  P                  VR4      pVf   K%  VP	                  4       WE&   K9  	  RRR4       \        VR\        VRR4      4      p\        V4      ;_uu_ 4        \        VP                  VP                  VVR7       RRR4       VP                  R4       \        VRR4      e   VP                  R4       R# R#   + '       g   i     Lœ; i  + '       g   i     LX; i)	zABuilds and installs the ExLlamaV3 module from the staged tensors.ÚwNrÚ   rs   r{   )Úmodule_rootr{   Ú	submoduleÚtensorsrÆ   )ÚtrellisÚsuhÚsvhÚsuÚsvrÚ   r­   r®   )Ústream_syncr]   ÚstateÚpopÚclonerv   r$   r"   r  rs   Úunregister_parameter)r^   rg   r  r}   r  Útensor_nameÚtensorÚ
parent_keys   &&&,    r0   Úsubmodule_finalizeÚ EXL3Processor.submodule_finalizeW  sý   € ð à×ÑÔà+-ˆØ××ÓØ�L‰L×Ñ˜S $Ô'Û[�ØŸ™×)Ñ)¨+°tÓ<�ØÔ%Ø+1¯<©<«>�GÓ(ñ  \÷ ô ˜V [´'¸&À&È$Ó2OÓPˆ
Ü 
×+Õ+Ü#Ø!ŸK™KØ×%Ñ%Ø Øõ	÷ ,ð 	×#Ñ# HÔ-Ü�6˜6 4Ó(Ò4Ø×'Ñ'¨Ö/ñ 5÷# ×ú÷ ,×+ús   ¨?DÁ,DÂ5$D)ÄD&	Ä)D9	c               ó   € V ^8„  d   QhRR/# )r)   r  r   r.   )r/   s   "r0   r1   rQ   s  s   € ÷ 0ñ 0˜jñ 0r2   c                óÌ   <€ RVn         \        P                  VP                  n        \
        P                  VP                  n        \        Vn        \        SV `(  ! RRV/VB  R# )zEMarks the model as EXL3-quantized and runs shared finalization logic.Tr  Nr.   )Ú	quantizedr   ÚEXL3Úquantize_configÚmethodr   r/   r   Úqlinear_kernelrX   Úfinalize)r^   r  r}   r_   s   &&,€r0   r4  ÚEXL3Processor.finalizes  sM   ø€ ð ˆŒÜ'-§{¡{ˆ×ÑÔ$Ü'-§{¡{ˆ×ÑÔ$Ü.ˆÔÜ‰ÒÑ/˜uÐ/¨Ô/r2   c               ó    € V ^8„  d   QhRRRR/# )r)   Úprocessor_indexrL   r-   rN   r.   )r/   s   "r0   r1   rQ   |  s   € ÷ ñ ¸#ð À$ñ r2   c                ó:   € ?V P                   f   \        R4      hR# )zKEnsures EXL3 received calibration data before the quantization loop starts.z5EXL3Processor's calibration_dataset must be provided.T)rc   rî   )r^   r7  s   &&r0   Úverify_calibration_datasetÚ(EXL3Processor.verify_calibration_dataset|  s"   € ð Ø×#Ñ#Ò+ÜÐTÓUÐUÙr2   c               ó   € V ^8„  d   QhRR/# )r)   r-   r,   r.   )r/   s   "r0   r1   rQ   „  s   € ÷ ñ �cñ r2   c                ó   € R# )zAReturns the processor label used in logs and lifecycle reporting.Úexl3r.   )r^   s   &r0   r{   ÚEXL3Processor.name„  s   € ñ r2   )r]   rZ   rP   )TNÚlm_head)N)NNNNN)rÉ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rY   rd   r�   rˆ   r™   rŸ   r£   r²   r½   rË   r  r+  r4  r9  r{   Ú__static_attributes__Ú__classcell__)r_   s   @r0   rF   rF   U   sg   ø† ÙI÷!,ò !,òF\÷

õ8;õ
õBõ0õõ.=õ`÷oQõb0÷80ð 0õ÷ó r2   rF   rD   )=Ú
__future__r   r<   r[   rï   Útypingr   r   r   r   rº   rÃ   Útorch.nnr   Útorch.nn.modules.convr	   Ú)exllamav3.modules.quant.exl3_lib.quantizer
   Úlooper.loop_processorr   r   r   r   Úlooper.named_moduler   Úmodelsr   Úmodels.writerr   r   r   r   r   r   r   r   r   Únn_modules.exllamav3r   Úquantizationr   Úquantization.configr   r   r   r   Úquantization.gptqr    Úutils.devicer!   Úutils.exllamav3r"   Úutils.loggerr#   Úutils.module_locksr$   r°   r¯   rD   rF   Ú__all__r.   r2   r0   Ú<module>rX     s©   ðõ #ã Û Û ß 2Ó 2ã Û Ý Ý )å Eß lÓ lÝ -Ý ÷
÷ 
õ 
õ 3Ý )ß HÓ HÝ $Ý %Ý 5Ý 'Ý 3ñ „à€àˆdØˆUØ
ˆDØˆ$ð	Ð õô>r�Mô rðj	 Ð?Ð
@‚r2   