+
    "Ý³j–  ã                   ó  a € R# tC0 t ^ RI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HtHtHt ^ RIt^ RIHt ^ RIHt ^ RIHt ^R	IHt ^R
I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,H-t- ^RI.H/t/ ^RI0H1t1 ^RI2H3t3H4t4H5t5H6t6 ]/! 4       t7]! R4      t8Rt9Rt:]#]!]"]9]:]'](]&]$] ]%R.t;] ^ k R R lt< ! R R]=4      t> ! R R4      t?] ! R R4      4       t@ ! R R 4      tAR! R" ltBR# )$é    N)Ú	dataclass)Údatetime)ÚPath)ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTuple)ÚDevice)ÚTensor)ÚModule)ÚDEVICE_THREAD_POOL©Ú
InputCache©Ú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)ÚQuantizeConfig)Ú	ANSIColorÚ
color_text)Úsetup_logger)Úget_random_string)ÚCPUÚDEVICE_0ÚDEVICE_1ÚHAS_NPUÚlogszfeat: in, outzdtype: sizeÚdynamicc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚvalueÚreturn)ÚfloatÚstr)Úformats   "Ú`/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/looper/loop_processor.pyÚ__annotate__r3   ?   s   € ÷ ñ ”uð ¤ñ ó    c                óP   € V R P                  R4      P                  R4      pV R2# )z7Formats a GiB value without unnecessary trailing zeros.ú.2fÚ0Ú.ÚG)Úrstrip)r-   Útexts   & r2   Ú_format_gibr<   ?   s/   € ð �Cˆ[× Ñ  Ó%×,Ñ,¨SÓ1€DØˆV�1ˆ:Ðr4   c                   óò   a a€ ] tR t^Ft oRtV 3R ltV 3R ltV 3R ltV 3R ltV 3R lt	V 3R lt
V 3R ltRV 3R	 lltRV 3R
 lltV 3R ltV 3R ltV 3R ltV 3R ltV 3R ltV 3R ltV 3R ltRtVtV ;t# )Ú_ThreadSafeDictzDDictionary with synchronized mutations and snapshot-based iteration.c                ó\   <€ \         SV `  ! V/ VB  \        P                  ! 4       V n        R # ©N)ÚsuperÚ__init__Ú	threadingÚRLockÚ_lock©ÚselfÚargsÚkwargsÚ	__class__s   &*,€r2   rB   Ú_ThreadSafeDict.__init__I   s#   ø€ Ü‰Ò˜$Ð) &Ò)Ü—_’_Ó&ˆŽ
r4   c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  V4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Ú__getitem__©rG   ÚkeyrJ   s   &&€r2   rM   Ú_ThreadSafeDict.__getitem__M   s%   ø€ Ø�Z�Z‹ZÜ‘7Ñ& sÓ+÷ �Z�Z‹Zúó	   –0°A	c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  W4       R R R 4       R #   + '       g   i     R # ; ir@   )rE   rA   Ú__setitem__)rG   rO   r-   rJ   s   &&&€r2   rS   Ú_ThreadSafeDict.__setitem__Q   s%   ø€ Ø�Z�Z‹ZÜ‰GÑ Ô+÷ �Z�ZŠZúó	   –0°A	c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  V4       R R R 4       R #   + '       g   i     R # ; ir@   )rE   rA   Ú__delitem__rN   s   &&€r2   rW   Ú_ThreadSafeDict.__delitem__U   s%   ø€ Ø�Z�Z‹ZÜ‰GÑ Ô$÷ �Z�ZŠZúrU   c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  V4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Ú__contains__rN   s   &&€r2   rZ   Ú_ThreadSafeDict.__contains__Y   s%   ø€ Ø�Z�Z‹ZÜ‘7Ñ'¨Ó,÷ �Z�Z‹ZúrQ   c           	     óª   <€ V P                   ;_uu_ 4        \        \        \        SV `  4       4      4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   ÚiterÚlistrA   Ú__iter__©rG   rJ   s   &€r2   r_   Ú_ThreadSafeDict.__iter__]   s-   ø€ Ø�Z�Z‹ZÜœœU™WÑ-Ó/Ó0Ó1÷ �Z�Z‹Zús   – AÁA	c                ó†   <€ V P                   ;_uu_ 4        \        SV `	  4       uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Ú__len__r`   s   &€r2   rc   Ú_ThreadSafeDict.__len__a   ó"   ø€ Ø�Z�Z‹ZÜ‘7‘?Ó$÷ �Z�Z‹Zúó	   –/¯A 	c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  W4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Úget©rG   rO   ÚdefaultrJ   s   &&&€r2   rh   Ú_ThreadSafeDict.gete   s$   ø€ Ø�Z�Z‹ZÜ‘7‘;˜sÓ,÷ �Z�Z‹ZúrQ   c                óˆ   <€ V P                   ;_uu_ 4        \        SV `	  W4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Ú
setdefaultri   s   &&&€r2   rm   Ú_ThreadSafeDict.setdefaulti   s%   ø€ Ø�Z�Z‹ZÜ‘7Ñ% cÓ3÷ �Z�Z‹ZúrQ   c                óŽ   <€ V P                   ;_uu_ 4        \        SV `  ! V.VO5!  uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Úpop)rG   rO   rH   rJ   s   &&*€r2   rp   Ú_ThreadSafeDict.popm   s)   ø€ Ø�Z�Z‹ZÜ‘7’;˜sÐ* TÓ*÷ �Z�Z‹Zús	   –3³A	c                ó†   <€ V P                   ;_uu_ 4        \        SV `	  4       uuR R R 4       #   + '       g   i     R # ; ir@   )rE   rA   Úpopitemr`   s   &€r2   rs   Ú_ThreadSafeDict.popitemq   re   rf   c                ó†   <€ V P                   ;_uu_ 4        \        SV `	  4        R R R 4       R #   + '       g   i     R # ; ir@   )rE   rA   Úclearr`   s   &€r2   rv   Ú_ThreadSafeDict.clearu   s!   ø€ Ø�Z�Z‹ZÜ‰G‰MŒO÷ �Z�ZŠZús	   –/¯A 	c                óŠ   <€ V P                   ;_uu_ 4        \        SV `  ! V/ VB  R R R 4       R #   + '       g   i     R # ; ir@   )rE   rA   ÚupdaterF   s   &*,€r2   ry   Ú_ThreadSafeDict.updatey   s)   ø€ Ø�Z�Z‹ZÜ‰GŠN˜DÐ+ FÒ+÷ �Z�ZŠZús	   –1±A	c                ó˜   <€ V P                   ;_uu_ 4        \        \        SV `  4       4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   r^   rA   Úkeysr`   s   &€r2   r|   Ú_ThreadSafeDict.keys}   s&   ø€ Ø�Z�Z‹ZÜœ™™›Ó'÷ �Z�Z‹Zúó	   –8¸A		c                ó˜   <€ V P                   ;_uu_ 4        \        \        SV `  4       4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   r^   rA   Úvaluesr`   s   &€r2   r€   Ú_ThreadSafeDict.values�   s'   ø€ Ø�Z�Z‹ZÜœ™™Ó(Ó)÷ �Z�Z‹Zúr~   c                ó˜   <€ V P                   ;_uu_ 4        \        \        SV `  4       4      uuR R R 4       #   + '       g   i     R # ; ir@   )rE   r^   rA   Úitemsr`   s   &€r2   rƒ   Ú_ThreadSafeDict.items…   s&   ø€ Ø�Z�Z‹ZÜœ™™›Ó(÷ �Z�Z‹Zúr~   )rE   r@   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB   rM   rS   rW   rZ   r_   rc   rh   rm   rp   rs   rv   ry   r|   r€   rƒ   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)rJ   Ú__classdict__s   @@r2   r>   r>   F   s]   ù‡ € ÙNõ'õ,õ,õ%õ-õ2õ%÷-÷4õ+õ%õõ,õ(õ*÷)õ )r4   r>   c                   ó�   a € ] tR t^Št o R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tV 3R
 lR lt	V 3R lR lt
RtV tR# )Ú_ThreadSafeInputCachezISynchronize replacement and attribute access for a shared ``InputCache``.c                ó    <€ V ^8„  d   QhRS[ /# )r,   Úcacher   )r1   r�   s   "€r2   r3   Ú"_ThreadSafeInputCache.__annotate__�   s   ø€ ÷ =ñ =™jñ =r4   c                óˆ   € \         P                  V R V4       \         P                  V R\        P                  ! 4       4       R# )Ú_cacherE   N)ÚobjectÚ__setattr__rC   rD   ©rG   r‘   s   &&r2   rB   Ú_ThreadSafeInputCache.__init__�   s-   € Ü×Ñ˜4 ¨5Ô1Ü×Ñ˜4 ¬)¯/ª/Ó*;Ö<r4   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r,   r‘   r.   N©r   )r1   r�   s   "€r2   r3   r’   ‘   s   ø€ ÷ 6ñ 6™sð 6 tñ 6r4   c                óâ   € \        V\        4      '       d   VP                  4       pV P                  ;_uu_ 4        \        P                  V R V4       RRR4       R#   + '       g   i     R# ; i©r”   N)Ú
isinstancer�   ÚunwraprE   r•   r–   r—   s   &&r2   Ú	set_cacheÚ_ThreadSafeInputCache.set_cache‘   sB   € Ü�eÔ2×3Ò3Ø—L‘L“NˆEØ�Z�Z‹ZÜ×Ñ˜t X¨uÔ5÷ �Z�ZŠZús   »AÁA.	c                ó    <€ V ^8„  d   QhRS[ /# ©r,   r.   r   )r1   r�   s   "€r2   r3   r’   —   s   ø€ ÷ ;ñ ;™
ñ ;r4   c                ó”   € V P                   ;_uu_ 4        \        P                  V R 4      uuRRR4       #   + '       g   i     R# ; irœ   )rE   r•   Ú__getattribute__©rG   s   &r2   rž   Ú_ThreadSafeInputCache.unwrap—   s'   € Ø�Z�Z‹ZÜ×*Ñ*¨4°Ó:÷ �Z�Z‹Zús	   •6¶A	c                ó    <€ V ^8„  d   QhRS[ /# ©r,   Úname©r0   )r1   r�   s   "€r2   r3   r’   ›   s   ø€ ÷ Jñ J¡ñ Jr4   c                ó¨   € V P                   ;_uu_ 4        \        \        P                  V R 4      V4      uuRRR4       #   + '       g   i     R# ; irœ   )rE   Úgetattrr•   r¤   ©rG   r©   s   &&r2   Ú__getattr__Ú!_ThreadSafeInputCache.__getattr__›   s.   € Ø�Z�Z‹ZÜœ6×2Ñ2°4¸ÓBÀDÓI÷ �Z�Z‹Zúó   • A Á A	c                ó    <€ V ^8„  d   QhRS[ /# r¨   rª   )r1   r�   s   "€r2   r3   r’   Ÿ   s   ø€ ÷ Jñ J¡ñ Jr4   c                óæ   € VR9   d   \         P                  WV4       R# V P                  ;_uu_ 4        \        \         P	                  V R 4      W4       RRR4       R#   + '       g   i     R# ; i)r”   N>   rE   r”   )r•   r–   rE   Úsetattrr¤   )rG   r©   r-   s   &&&r2   r–   Ú!_ThreadSafeInputCache.__setattr__Ÿ   sJ   € ØÐ&Ô&Ü×Ñ˜t¨5Ô1ÙØ�Z�Z‹ZÜ”F×+Ñ+¨D°(Ó;¸TÔI÷ �Z�ZŠZús   ´!AÁA0	c                ó    <€ V ^8„  d   QhRS[ /# r¨   rª   )r1   r�   s   "€r2   r3   r’   ¦   s   ø€ ÷ Cñ C¡ñ Cr4   c                ó¨   € V P                   ;_uu_ 4        \        \        P                  V R 4      V4       RRR4       R#   + '       g   i     R# ; irœ   )rE   Údelattrr•   r¤   r­   s   &&r2   Ú__delattr__Ú!_ThreadSafeInputCache.__delattr__¦   s.   € Ø�Z�Z‹ZÜ”F×+Ñ+¨D°(Ó;¸TÔB÷ �Z�ZŠZús   •!A Á A	© N)r…   r†   r‡   rˆ   r‰   rB   rŸ   rž   r®   r–   r¸   rŠ   r‹   ©r�   s   @r2   r�   r�   Š   sJ   ø‡ € ÙS÷=ð =÷6ð 6÷;ð ;÷Jð J÷Jð J÷Cö Cr4   r�   c                   óH   a € ] tR t^«t o RtRtRtRtRtRt	Rt
V 3R ltRtV tR# )ÚExecutionConfigav  Describe how a processor participates in forward replay and activation capture.

Processor defaults:

+--------------+------+------------------------+---------------------------+----------------+--------------------+
| Processor     | fwd? | replay_after_process? | single_pass_all_modules?  | early_stop?    | activation_capture?|
+--------------+------+------------------------+---------------------------+----------------+--------------------+
| GPTQ          | yes  | yes                    | no                        | yes            | no                 |
| AWQ           | yes  | yes                    | no                        | yes            | yes                |
| ParoQuant     | yes  | yes                    | no                        | yes            | yes                |
| Native        | yes  | no                     | yes                       | no             | no                 |
| WeightOnly    | no   | no                     | no/default                | no/default     | no                 |
+--------------+------+------------------------+---------------------------+----------------+--------------------+
TFc                ób   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   # )r,   Úrequire_fwdÚfwd_replay_after_processÚfwd_all_modules_in_single_passÚsubset_forward_early_stopÚenable_activation_captureÚcapture_layer_forward_context)Úbool)r1   r�   s   "€r2   r3   ÚExecutionConfig.__annotate__«   sS   ø‡ ‚ ñ$ Ññ% ñ* #Ñ)ñ+ ñ. %)Ñ0ñ/ ñ2  $Ñ+ñ3 ñ6  $Ñ+ñ7 ñ> $(Ñ/ò? r4   rº   N)r…   r†   r‡   rˆ   r‰   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   Ú__annotate_func__rŠ   r‹   r»   s   @r2   r½   r½   «   s:   ø‡ € ñð  €Kð &*Ðà+0Ð"à&+Ðà&+Ðð +0Ð!÷? ƒ r4   r½   c                   ó°  a € ] tR t^Ît o RtRhV 3R lR llt]V 3R lR l4       tRiV 3R lR llt]V 3R	 lR
 l4       t	V 3R lR lt
V 3R lR ltR tR tR 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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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tV 3R* lR+ ltV 3R, lR- ltV 3R. lR/ ltV 3R0 lR1 ltV 3R2 lR3 ltV 3R4 lR5 lt RjV 3R6 lR7 llt!RjV 3R8 lR9 llt"R: t#R; t$R< t%V 3R= lR> lt&R? t'R@ t(V 3RA lRB lt)V 3RC lRD lt*V 3RE lRF lt+V 3RG lRH lt,V 3RI lRJ lt-V 3RK lRL lt.RMRRNR/V 3RO lRP llt/RQ t0V 3RR lRS lt1RkV 3RT lRU llt2V 3RV lRW lt3V 3RX lRY lt4RlV 3RZ lR[ llt5V 3R\ lR] lt6V 3R^ lR_ lt7R` t8V 3Ra lRb lt9V 3Rc lRd lt:V 3Re lRf lt;Rgt<V t=R# )mÚLoopProcessorzABase lifecycle coordinator shared by all quantization processors.Nc                ó”   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[,          RS[S[,          RS[S[,          RS[RS[S[,          /# )r,   ÚqcfgÚprepare_dataset_funcÚcalibration_concat_sizeÚcalibration_sortÚcalibration_concat_separatorÚ
batch_sizeÚexecution_config)r    r
   r   Úintr0   r½   )r1   r�   s   "€r2   r3   ÚLoopProcessor.__annotate__Ñ   sp   ø€ ÷ s,ñ s,á+ðs,ñ #+©8Õ"4ð	s,ñ
 &.©c¥]ðs,ñ '¡s�mðs,ñ +3±3­-ðs,ñ ðs,ñ '¡Õ7ñs,r4   c
                ó  € \         P                  ! 4       V n        / V n        \         P                  ! 4       V n        \         P                  ! 4       V n        \         P                  ! 4       V n        \         P                  ! 4       V n        \         P                  ! 4       V n	        Wn
        W n        RV n        T	;'       g    \        4       V n        \        \!        . . . . 4      4      V n        \%        4       V n        RV n        RV n        RV n        . V n        . V n        . V n        . V n        . V n        ^ V n        . V n        RV n        ^V n        \@        PB                  ! 4       PE                  R4      p
\G        V PI                  V PK                  4       V
4      4      V n&        V PO                  4       V n(        V PS                  4       V n*        \W        4       V n,        VEea   \[        V4      ^ 8X  d   \]        R4      hRpRp\[        V4      V8  d&   \6        P_                  RV R\[        V4       R24       Vf   \]        R4      hV! VVVVVR	7      p^ p^ pV Fš  pVR
,          p\a        V\b        Pd                  4      '       dR   VPg                  4       ^8:  d   VPh                  R,          pM3\]        RPk                  VPg                  4       4      4      h\[        V4      pVV8”  d   TpVV,          pKœ  	  V\[        V4      ,          pVV8  d   \6        P_                  RV RV R24       \[        V4      V n6        W0n7        M^ V n6        . V n7        V Pq                  V Pn                  4      V n9        \         Pt                  ! 4       V n;        R# )zIInitializes shared processor state, logging, and calibration bookkeeping.Nz%m_%d_%Y_%Hh_%Mm_%Ssz&Calibration dataset must not be empty.é   z-Calibration dataset size should be more than z. Current: r8   zHprepare_dataset_func must be provided when calibration data is supplied.)Úcalibration_datasetÚcalibration_dataset_concat_sizeÚcalibration_dataset_sortrÐ   rÏ   Ú	input_idsznExpected a 1-dimensional tensor or 2-dimensional tensor for 'input_ids', but got a tensor with {0} dimensions.zNThe average length of input_ids of calibration_dataset should be greater than z: actual avg: éÿÿÿÿ)<rC   ÚLockÚlockÚ_resultsÚ_results_lockÚ_progress_lockÚ_fwd_time_lockrD   Ú_device_smi_lockÚ_input_cache_lockÚ	tokenizerrË   Úqcfg_dynamicr½   rÑ   r�   r   Úinputs_cacher>   ÚtasksÚpbÚfwd_timeÚlayer_countÚgpu_memorysÚcpu_memorysÚ	durationsÚmodule_namesÚlogÚlog_call_countÚ_log_column_labelsÚ_log_columnsÚ_log_header_intervalr   ÚnowÚstrftimer0   Ú_build_log_file_pathr©   Úlog_tmp_log_file_nameÚ_init_device_smi_handlesÚ_device_smi_handlesÚ_init_cpu_device_handleÚ_cpu_device_smiÚsetÚ_device_metric_failuresÚlenÚ
ValueErrorÚwarnr�   Útorchr   ÚdimÚshaper1   Únum_batchesrÖ   Ú_compute_total_tokensÚtotal_calibration_tokensÚlocalÚ
_batch_tls)rG   rã   rË   ÚcalibrationrÌ   rÍ   rÎ   rÏ   rÐ   rÑ   Úcurrent_timeÚmin_calibration_dataset_sizeÚ,min_calibration_dataset_input_ids_avg_lengthÚtotal_input_ids_lengthÚmax_input_id_lengthÚrowrÙ   Úinput_ids_lengthÚavgs   &&&&&&&&&&         r2   rB   ÚLoopProcessor.__init__Ñ   s<  € ô —N’NÓ$ˆŒ	ð )+ˆŒÜ&Ÿ^š^Ó-ˆÔÜ'ŸnšnÓ.ˆÔÜ'ŸnšnÓ.ˆÔÜ )§¢Ó 1ˆÔÜ!*§¢Ó!2ˆÔà"ŒØŒ	Ø ˆÔð !1× EÐ E´OÓ4EˆÔä1´*¸RÀÀRÈÓ2LÓMˆÔÜ$Ó&ˆŒ
àˆŒØˆŒØˆÔð ˆÔØˆÔØˆŒØˆÔð ˆŒØˆÔØ-/ˆÔØ ˆÔØ$&ˆÔ!Ü—|’|“~×.Ñ.Ð/EÓFˆÜ%(¨×)BÑ)BÀ4Ç9Á9Ã;ÐP\Ó)]Ó%^ˆÔ"Ø#'×#@Ñ#@Ó#BˆÔ Ø#×;Ñ;Ó=ˆÔÜ14³ˆÔ$ð Ó"Ü�;Ó 1Ô$Ü Ð!IÓJÐJà+.Ð(Ø;>Ð8Ü�;ÓÐ">Ô>Ü—‘ÐHÐIeÐHfð g+Ü+.¨{Ó+;Ð*<¸Að?ô @ð $Ò+Ü Ð!kÓlÐlá.Ø$/Ø0GØ)9Ø%Ø-IôˆKð &'Ð"Ø"#ÐÛ"�Ø Õ,�	Ü˜i¬¯©×6Ò6Ø —}‘}“¨!Ô+Ø+4¯?©?¸2Õ+>Ñ(ä(ð M÷  Tñ  TØ )§¡£ó1ó2ð 2ô (+¨9£~Ð$à#Ð&9Ô9Ø*:Ð'Ø&Ð*:Õ:Ò&ñ #ð )¬3¨{Ó+;Õ;ˆCàÐAÔAÜ—‘ÐiØ"NÐ!OÈ~Ð^aÐ]bÐbcðeô fô  # ;Ó/ˆDÔØ'2Õ$à ˆDÔØ')ˆDÔ$à(,×(BÑ(BÀ4×C[ÑC[Ó(\ˆÔ%ô
 $Ÿ/š/Ó+ˆŽr4   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r,   Úprocessor_namer	  r.   )r0   r   )r1   r�   s   "€r2   r3   rÓ   G  s'   ø€ ÷ hñ h©Sð hÁð hÉñ hr4   c                ól   € \         P                  RRR7       \         V  R\        4        RV R2,          # )zFPlace processor temp log files under the project-local logs directory.T)ÚparentsÚexist_okÚ_log_Ú_time_z.log)Ú_PROJECT_LOG_DIRÚmkdirr$   )r  r	  s   &&r2   rõ   Ú"LoopProcessor._build_log_file_pathF  s>   € ô 	×Ñ t°dÐÔ;Ü ^Ð$4°EÔ:KÓ:MÐ9NÈfÐUaÐTbÐbfÐ"gÕgÐgr4   c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )r,   ÚtitleÚsubtitler.   Nrª   )r1   r�   s   "€r2   r3   rÓ   M  s"   ø€ ÷ ;ñ ;¡3ð ;±#ð ;¸tñ ;r4   c                ó
  € V P                   ;_uu_ 4        V P                  f    RRR4       R# V P                  P                  V4      P                  V4      P	                  4        RRR4       R#   + '       g   i     R# ; i)zPBest-effort progress-bar redraw for processors with an attached progress handle.N)rß   rç   r  r  Údraw)rG   r  r  s   &&&r2   Údraw_progressÚLoopProcessor.draw_progressM  sY   € ð × × Ó Ø�w‰wŠØ÷ !Ñ ð �G‰G�M‰M˜%Ó ×)Ñ)¨(Ó3×8Ñ8Ô:÷ !× × Ò ús   •A1¯8A1Á1B	c                ó    <€ V ^8„  d   QhRS[ /# r¢   ©rÒ   )r1   r�   s   "€r2   r3   rÓ   V  s   ø€ ÷ ñ ±cñ r4   c                óž  € V '       g   ^ # ^ pV  EF  p\        V\        4      '       g   K  RV9   du   VR,          p\        V\        P                  4      '       d0   V\	        VP                  4       P                  4       4      ,          pM V\        R V 4       4      ,          pK—  VP                  R4      pVf   K®  \        V\        P                  4      '       d#   V\	        VP                  4       4      ,          pKð   V\        V4      ,          pEK  	  V#   \         d    T^ ,          p L‹i ; i  \         d    T^ ,          p EK<  i ; i)z;Counts total calibration tokens using masks when available.Úattention_maskc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir@   r$  )Ú.0Úxs   & r2   Ú	<genexpr>Ú6LoopProcessor._compute_total_tokens.<locals>.<genexpr>e  s   é € Ð$:±T°¤S¨§V V³Tùs   ‚rÙ   )r�   Údictr   r   rÒ   ÚsumÚitemÚ	Exceptionrh   Únumelrý   )rÖ   Útotalr  ÚmaskrÙ   s   &    r2   r  Ú#LoopProcessor._compute_total_tokensU  s  € ÷ #ÙØˆÜ&ˆCÜ˜c¤4×(Ò(ÙØ 3Ô&ØÐ+Õ,�Ü˜d¤E§L¡L×1Ò1ØœS §¡£§¡Ó!2Ó3Õ3‘Eð#Ø¤Ñ$:±TÓ$:Ó!:Õ:˜ñ ØŸ™ Ó,ˆIØÒ ÙÜ˜)¤U§\¡\×2Ò2Øœ˜YŸ_™_Ó.Ó/Õ/’ðØœS ›^Õ+“Eñ) 'ð. ˆøô %ô #Ø �
šð#ûô !ô Ø˜Q•J”Eðús$   ÂDÄ D3ÄD0Ä/D0Ä3EÅEc                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r,   Úbatch_indexr.   N©r
   rÒ   )r1   r�   s   "€r2   r3   rÓ   u  s   ø€ ÷ 5ñ 5±H¹SµMð 5Àdñ 5r4   c                ó®   € Vf7   \        V P                  R4      '       d   \        V P                  R4       R# R# \        V4      V P                  n        R# )z@Stores the active calibration batch index in thread-local state.NÚindex)Úhasattrr  r·   rÒ   r8  )rG   r5  s   &&r2   Ú_set_current_batch_indexÚ&LoopProcessor._set_current_batch_indexu  sA   € ð ÒÜ�t—‘¨×0Ò0Ü˜Ÿ™¨Ö1ñ 1ô %(¨Ó$4ˆD�O‰OÖ!r4   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r¢   r6  )r1   r�   s   "€r2   r3   rÓ   ~  s   ø€ ÷ 7ñ 7¡X©c¥]ñ 7r4   c                ó0   € \        V P                  RR4      # )z@Returns the thread-local calibration batch index, if one is set.r8  N)r¬   r  r¥   s   &r2   Úcurrent_batch_indexÚ!LoopProcessor.current_batch_index~  s   € ô �t—‘¨°Ó6Ð6r4   c                óÎ   € \        V P                  R4      ;_uu_ 4       p\        P                  ! W^R7       VP	                  R4       RRR4       R#   + '       g   i     R# ; i)zAAppends one serialized log record to the processor temp log file.Úa)ÚindentÚ
N)Úopenrö   ÚjsonÚdumpÚwrite)rG   ÚstatÚfs   && r2   Ú_async_log_writerÚLoopProcessor._async_log_writerƒ  sA   € ô �$×,Ñ,¨c×2Ô2°aÜ�IŠI�d aÕ(Ø�G‰G�DŒM÷ 3×2×2Ò2ús   Ÿ*AÁA$	c                óR   € \         P                  ! \        V P                  V4       R# )z@Schedules asynchronous log persistence on the serial CPU worker.N)r   Úsubmit_serialr%   rJ  )rG   rH  s   &&r2   Úlog_save_asyncÚLoopProcessor.log_save_asyncŠ  s   € ô 	×(Ò(¬¨d×.DÑ.DÀdÖKr4   c                ó¼  € V P                   ;_uu_ 4        V ;P                  ^,          un        V P                  V4      pV P                  f    RRR4       R# V'       g#   V P                  V P                  ,          ^8X  d%   V P                  P
                  P                  4        V P                   Uu. uF%  pV P                  W1P                  VR4      V4      NK'  	  ppV P                  P
                  ! V!   \        P                  ! RR4      R9  d”   \        P                  RVP                  \        R4      VP                  \        R4      VP                  \        R4      VP                  \         R4      VP                  \"        R4      VP                  \$        R4      4       RRR4       V P'                  V4       R# u upi   + '       g   i     L(; i)z?Prints a formatted log row and queues it for async persistence.NÚ ÚGPTQMODEL_LOG_QUANT_STATSr7   zCQuant stat: method=%s layer=%s module=%s samples=%s loss=%s time=%s)rQ  r7   ÚfalseÚFalse)rÜ   rï   Ú_ensure_log_columnsrñ   rò   ÚinfoÚheaderrð   Ú_format_log_valuerh   ÚosÚgetenvrî   r   r   r   r   r   r   rN  )rG   rH  Úcolumns_rebuiltÚcolumnÚ
row_valuess   &&   r2   Úlog_new_rowÚLoopProcessor.log_new_row�  sq  € ð �Y�Y‹YØ×Ò 1Õ$ÕØ"×6Ñ6°tÓ<ˆOà× Ñ Ò(Ø÷ ‰Y÷  $×"5Ñ"5¸×8QÑ8QÕ"QÐUVÔ"VØ×!Ñ!×&Ñ&×-Ñ-Ô/ð #×5Ò5óá5�Fð ×&Ñ& v¯x©x¸ÀÓ/CÀTÖJÙ5ð ð ð ×Ñ×"Ò" JÒ/ô �yŠyÐ4°cÓ:ÐB]Ô]Ü—‘ØYØ—H‘HÔ-¨rÓ2Ø—H‘HÔ.°Ó3Ø—H‘HÔ/°Ó4Ø—H‘HÔ/°Ó4Ø—H‘Hœ^¨RÓ0Ø—H‘HÔ-¨rÓ2ô÷% ð8 	×Ñ˜DÖ!ùò%÷ �Yús+   •:GÁGÁ!AGÂ5+GÃ CGÇGÇG	c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   Ú
loss_valuer.   )r/   r!   )r1   r�   s   "€r2   r3   rÓ   ±  s   ø€ ÷ (ñ (¡Uð (©yñ (r4   c                óÚ   € VR8:  d   \         P                  # V^8:  d   \         P                  # V^8:  d   \         P                  # V^8:  d   \         P                  # \         P
                  # )z=Maps a quantization loss value to a terminal highlight color.gš™™™™™¹?)r!   ÚGREENÚCYANÚYELLOWÚORANGEÚ
BRIGHT_RED)rG   ra  s   &&r2   Ú
loss_colorÚLoopProcessor.loss_color±  sZ   € ð ˜ÔÜ—?‘?Ð"Ø˜1Œ_Ü—>‘>Ð!Ø˜1Œ_Ü×#Ñ#Ð#Ø˜2ÔÜ×#Ñ#Ð#ä×'Ñ'Ð'r4   c                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# )r,   rH  r.   )r   r0   r   rÅ   )r1   r�   s   "€r2   r3   rÓ   ¿  s#   ø€ ÷ ñ ©©S±#¨X­ð ¹4ñ r4   c                ó°  € \        \        4      pVP                  4        F  pW29  g   K  VP                  V4       K  	  V P                  e   W P
                  8X  d   R# W n        V P
                   Uu. uF	  pRVRR/NK  	  pp\        P                  V^R7      V n        V P                  P                  P                  RRRR	R
RRRRRRR4       R# u upi )z7Expands the CLI log table to include any new stat keys.FÚlabelÚwidthÚfit)ÚcolsÚpaddingÚgptqÚ13zmlp.experts.110.down_projz(4096, 11008)zint8: 11.5MBz0.0000158448Ú36616z0.05000z0.841z7.984zcuda:0=9.1GBrQ  T)
r^   ÚDEFAULT_LOG_COLUMNSr|   Úappendrñ   rð   rî   ÚcolumnsrV  Úsimulate)rG   rH  Údesired_labelsrO   rl  Úcolumn_specss   &&    r2   rU  Ú!LoopProcessor._ensure_log_columns¿  sÑ   € ô Ô1Ó2ˆØ—9‘9–;ˆCØÖ(Ø×%Ñ% cÖ*ñ ð ×ÑÒ(¨^×?VÑ?VÔ-VÙà"0ÔØFJ×F]ÒF]Ó^ÑF]¸U˜ %¨°%Ó8ÑF]ˆÐ^ÜŸK™K¨\À1˜KÓEˆÔà×Ñ×Ñ×'Ñ'Ø�DÐ5°Ø˜NØ�Y ¨°.Àô	Eñ ùò _s   Á4Cc                óH   <€ V ^8„  d   QhRS[ RS[RS[S[ S[3,          RS[ /# )r,   rO   r-   rH  r.   )r0   r   r   )r1   r�   s   "€r2   r3   rÓ   Ô  s1   ø€ ÷ ñ ¡Sð ±ð ¹DÁÁcÀ½Nð Ésñ r4   c                óL  € Vf   RM
\        V4      pV\        8X  dM   V'       dE   VP                  4       P                  4       p V P	                  \        V4      4      p\        YF4      # V\        8X  d5   V'       d-    \        V4      pT P                  Ys4      pTe   \        YF4      # V#   \        \        3 dP    TP                  R4      '       g   TP                  R4      '       d   \        T\        P                  4      u # Tu # i ; i  \        \        3 d    Tu # i ; i)z@Formats one log cell, applying colors to loss and sample counts.rQ  Úfallbackz	fallback()r0   r   ÚstripÚlowerrh  r/   Ú	TypeErrorrþ   ÚendswithÚ
startswithr"   r!   rf  r   Ú_samples_color)rG   rO   r-   rH  r;   ÚcleanedÚ
color_codeÚsamples_values   &&&&    r2   rX  ÚLoopProcessor._format_log_valueÔ  sÿ   € ð ’]‰r¬¨E«
ˆà”.Ô §TØ—j‘j“l×(Ñ(Ó*ˆGðØ!Ÿ_™_¬U°4«[Ó9�
ô
 ˜dÓ/Ð/àÔ$Ô$¯ðÜ % d£�ð ×,Ñ,¨]ÓAˆJØÒ%Ü! $Ó3Ð3àˆøô! œzÐ*ô Ø×#Ñ# J×/Ò/°7×3EÑ3EÀk×3RÒ3RÜ% d¬I×,<Ñ,<Ó=Ò=Ø’ðûô œzÐ*ô Ø’ðús6   ÁB* Á=D Â*'D
ÃD
Ã)D
ÄD
Ä	D
ÄD#Ä"D#c                óR   <€ V ^8„  d   QhRS[ RS[S[S[3,          RS[S[,          /# )r,   r†  rH  r.   )r/   r   r0   r   r
   r!   )r1   r�   s   "€r2   r3   rÓ   ï  s0   ø€ ÷ ñ ©Eð ¹¹cÁ3¸h½ð ÉHÑU^ÕL_ñ r4   c                óª  € \        VP                  \        R4      4      P                  4       pVP	                  R4      '       d   RMRpRV,          pRV,          pRV,          pRV,          pW8¼  d   \
        P                  # W8¼  d   \
        P                  # W8¼  d   \
        P                  # W8  d   \
        P                  # \
        P                  # )	zEColors sample counts relative to method-specific adequacy thresholds.rQ  Úawqg      $@g      ð?i   i   iô  i   )r0   rh   r   r  r‚  r!   ÚBRIGHT_GREENrc  rf  rg  ÚRED)	rG   r†  rH  Úquant_methodÚdivisorÚthreshold_greenÚthreshold_dark_greenÚthreshold_orangeÚthreshold_reds	   &&&      r2   rƒ  ÚLoopProcessor._samples_colorï  s°   € ô ˜4Ÿ8™8Ô$4°bÓ9Ó:×@Ñ@ÓBˆà&×1Ñ1°%×8Ò8‘$¸cˆà �.ˆØ# g�~ÐØ �=ÐØ˜g�ˆàÔ+Ü×)Ñ)Ð)ØÔ0Ü—?‘?Ð"ØÔ,Ü×#Ñ#Ð#ØÔ(Ü×'Ñ'Ð'Ü�}‰}Ðr4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r,   Úmoduler.   ©r   r0   )r1   r�   s   "€r2   r3   rÓ     s   ø€ ÷ ñ ©[ð ¹Sñ r4   c                óØ   € VP                   P                  R4      pVP                   P                  R4      p\        V\        4      '       d   \        V\        4      '       d   V RV 2# R# )z:Formats cached input/output feature sizes for log display.Úin_featuresÚout_featuresú, rQ  )Ústaterh   r�   rÒ   )rG   r–  r™  rš  s   &&  r2   Úmodule_feature_summaryÚ$LoopProcessor.module_feature_summary  sY   € ð —l‘l×&Ñ& }Ó5ˆØ—|‘|×'Ñ'¨Ó7ˆä�k¤3×'Ò'¬J°|ÄS×,IÒ,IØ!�] " \ NÐ3Ð3Ùr4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r•  r—  )r1   r�   s   "€r2   r3   rÓ     s   ø€ ÷ 1ñ 1±ð 1Áñ 1r4   c                ó¾  € \        VP                  RR4      p\        VRR4      p^ p\        V\        P                  4      '       d-   WBP                  4       VP                  4       ,          ,          pM¹T;'       g    \        VRR4      pVP                  P                  R4      pVP                  P                  R4      pVei   \        V\        4      '       dS   \        V\        4      '       d=   \        P                  ! RVR7      P                  4       pWEV,          V,          ,          p\        VP                  RR4      p\        V\        P                  4      '       d,   WHP                  4       VP                  4       ,          ,          pW@P                  V4      ,          pT;'       g    \        VRR4      pV P                  V4      p	VR,          p
V	 R	V
R
 R2# )zAFormats dtype and total persistent tensor footprint for a module.ÚweightNÚdtypeÚmodule_dtyper™  rš  )r¢  Úbiasz: z.1fÚMBrº   é   )r¬   r–  r�   r   r   r0  Úelement_sizerœ  rh   rÒ   ÚemptyÚ_state_tensor_bytesÚ_format_dtype)rG   r–  r¡  r¢  Útotal_bytesr™  rš  r§  r¤  Údtype_labelÚsize_mbs   &&         r2   Úmodule_dtype_size_summaryÚ'LoopProcessor.module_dtype_size_summary  sx  € ô ˜Ÿ™¨°$Ó7ˆÜ˜ ¨Ó.ˆØˆä�fœeŸl™l×+Ò+ØŸ<™<›>¨F×,?Ñ,?Ó,AÕAÕA‰Kà×BÐBœW V¨^¸TÓBˆEØ Ÿ,™,×*Ñ*¨=Ó9ˆKØ!Ÿ<™<×+Ñ+¨NÓ;ˆLØÒ ¤Z°¼S×%AÒ%AÄjÐQ]Ô_b×FcÒFcÜ$Ÿ{š{¨2°UÔ;×HÑHÓJ�Ø¨\Õ9¸LÕHÕH�ä�v—}‘} f¨dÓ3ˆÜ�dœEŸL™L×)Ò)ØŸ:™:›<¨$×*;Ñ*;Ó*=Õ=Õ=ˆKð 	×/Ñ/°Ó7Õ7ˆà×>Ð>œ ¨¸Ó>ˆØ×(Ñ(¨Ó/ˆØ Õ-ˆØ�˜b ¨ ¨RÐ0Ð0r4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r•  )r   rÒ   )r1   r�   s   "€r2   r3   rÓ   ,  s   ø€ ÷ 	ñ 	©+ð 	¹#ñ 	r4   c                ó¤   € \        4       p^ pVP                  P                  4        F%  w  rEVR9   d   K  W0P                  WR4      ,          pK'  	  V# )z;Counts bytes held by tensor-like entries in `module.state`.>   r™  rš  )rû   rœ  rƒ   Ú_collect_tensor_bytes)rG   r–  Úseenr1  rO   r-   s   &&    r2   r©  Ú!LoopProcessor._state_tensor_bytes,  sO   € ô ›ˆØˆØ Ÿ,™,×,Ñ,Ö.‰JˆCØÐ5Ô5ÙØ×/Ñ/°Ó<Õ<ŠEñ /ð ˆr4   c                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r,   Úobjr³  r.   )r   r   rÒ   )r1   r�   s   "€r2   r3   rÓ   7  s&   ø€ ÷ ñ ©ð ±C¹µHð Áñ r4   c                ó‚  a a€ \        V\        P                  4      '       dK   \        V4      pVS9   d   ^ # SP	                  V4       VP                  4       VP                  4       ,          # \        V\        \        \        34      '       d   \        VV 3R lV 4       4      # \        V\        4      '       d%   \        VV 3R lVP                  4        4       4      # \        VR4      '       dP   \        VR4      '       d>   S P                  VP                  S4      S P                  VP                   S4      ,           # ^ # )zGRecursively sums tensor storage while avoiding double-counting aliases.c              3   óH   <"  € T F  pSP                  VS4      x € K  	  R # 5ir@   ©r²  ©r(  r.  r³  rG   s   & €€r2   r*  Ú6LoopProcessor._collect_tensor_bytes.<locals>.<genexpr>B  s!   øé € ÐNÉ#À$�t×1Ñ1°$¸×=Ð=Ë#ùó   ƒ"c              3   óH   <"  € T F  pSP                  VS4      x € K  	  R # 5ir@   r¹  rº  s   & €€r2   r*  r»  E  s!   øé € ÐWÉ,À$�t×1Ñ1°$¸×=Ð=Ë,ùr¼  Úlora_AÚlora_B)r�   r   r   ÚidÚaddr0  r§  r^   Útuplerû   r-  r,  r€   r9  r²  r¾  r¿  )rG   r¶  r³  Úobj_ids   f&f r2   r²  Ú#LoopProcessor._collect_tensor_bytes7  sê   ù€ ô �cœ5Ÿ<™<×(Ò(Ü˜“WˆFØ˜Œ~ÙØ�H‰H�VÔØ—9‘9“; ×!1Ñ!1Ó!3Õ3Ð3ä�cœD¤%¬Ð-×.Ò.ÜÕNÉ#ÓNÓNÐNä�cœ4× Ò ÜÕWÈ#Ï*É*Ì,ÓWÓWÐWô �3˜×!Ò!¤g¨c°8×&<Ò&<à×*Ñ*¨3¯:©:°tÓ<Ø×,Ñ,¨S¯Z©Z¸Ó>õ?ðñ
 r4   c                óJ   <€ V ^8„  d   QhRS[ S[P                  ,          RS[/# )r,   r¢  r.   )r
   r   r¢  r0   )r1   r�   s   "€r2   r3   rÓ   P  s$   ø€ ÷ 5ñ 5¡8©E¯K©KÕ#8ð 5¹Sñ 5r4   c                ó¶   € Vf   R# \        V4      pVP                  R4      '       d   VP                  R^4      ^,          pRRRRRR	/pVP                  W"4      # )
z.Shortens dtype names for compact table output.ún/aztorch.r8   Úbfloat16Úbf16Úfloat16Úf16Úfloat32Úf32)r0   r‚  Úsplitrh   )rG   r¢  Ú	dtype_strÚdtype_aliass   &&  r2   rª  ÚLoopProcessor._format_dtypeP  sd   € ð Š=Ùä˜“Jˆ	Ø×Ñ ×)Ò)Ø!Ÿ™¨¨QÓ/°Õ2ˆIð ˜Ø�uØ�uð
ˆð �‰˜yÓ4Ð4r4   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r¢   )r   r0   r   )r1   r�   s   "€r2   r3   rÓ   b  s   ø€ ÷ ñ ©$©s±F¨{Õ*;ñ r4   c                ó¼   € / pV P                  4        F  p \        V4      W&   K  	  V#   \         d'   p\        P	                  RT RT 24        Rp?KC  Rp?ii ; i)zBCreates Device-SMI handles for all discovered accelerator devices.z&Device-SMI initialisation failed for `ú`: N)Ú_discover_accelerator_devicesr   r/  rî   Údebug)rG   ÚhandlesÚ	device_idÚexcs   &   r2   r÷   Ú&LoopProcessor._init_device_smi_handlesb  si   € ð &(ˆà×;Ñ;Ö=ˆIðXÜ%+¨IÓ%6�Ó"ñ >ð ˆøô ô XÜ—	‘	ÐBÀ9À+ÈSÐQTÐPUÐV×WÒWûðXús   —*ªAµAÁAc                ó0   <€ V ^8„  d   QhRS[ S[,          /# r¢   )r
   r   )r1   r�   s   "€r2   r3   rÓ   o  s   ø€ ÷ ñ ©±&Õ)9ñ r4   c                ó|   €  \        R4      #   \         d$   p\        P                  RT 24        Rp?R# Rp?ii ; i)zDCreates the optional Device-SMI handle used for CPU memory tracking.Úcpuz&Device-SMI CPU initialisation failed: N)r   r/  rî   rÖ  )rG   rÙ  s   & r2   rù   Ú%LoopProcessor._init_cpu_device_handleo  s8   € ð	Ü˜%“=Ð øÜô 	Ü�I‰IÐ>¸s¸eÐDÔEÝûð	ús   ‚
 �;˜6¶;c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r¢   )r	   r0   )r1   r�   s   "€r2   r3   rÓ   x  s   ø€ ÷ ñ ©t±C­yñ r4   c                óT  € . p\        \        R4      '       d�    \        P                  P                  4       '       dj   \	        \        P
                  RR4      '       d   RMRp\        \        P                  P                  4       4       F  pVP                  V RV 24       K  	  \	        \        RR4      pVeh    \        P                  P                  4       '       dC   \        \        P                  P                  4       4       F  pVP                  RV 24       K  	  \        '       dF    \        \        P                  P                  4       4       F  pVP                  RV 24       K  	  V# V#   \         d     LÜi ; i  \         d     Lqi ; i  \         d     T# i ; i)	z>Lists CUDA/ROCm/XPU device identifiers visible to the runtime.ÚcudaÚhipNÚrocmÚ:Úxpuzxpu:znpu:)r9  r   rá  Úis_availabler¬   ÚversionÚrangeÚdevice_countru  r/  rå  r(   Únpu)rG   ÚdevicesÚdevice_typeÚidxrå  s   &    r2   rÕ  Ú+LoopProcessor._discover_accelerator_devicesx  s[  € ð  ˆä”5˜&×!Ò!ðÜ—:‘:×*Ñ*×,Ò,Ü,3´E·M±MÀ5È$×,OÒ,O¡&ÐU[�KÜ$¤U§Z¡Z×%<Ñ%<Ó%>Ö?˜ØŸ™¨+¨°a¸°uÐ'=Ö>ñ  @ô
 ”e˜U DÓ)ˆØŠ?ðÜ—9‘9×)Ñ)×+Ò+Ü$¤U§Y¡Y×%;Ñ%;Ó%=Ö>˜ØŸ™¨¨c¨U |Ö4ñ  ?÷
 ‹7ðÜ ¤§¡×!7Ñ!7Ó!9Ö:�CØ—N‘N T¨#¨ <Ö0ñ ;ð
 ˆˆwˆøô' ô Ùðûô ô Ùðûô ô ØàˆðúsC   š#E6 ¾A)E6 Â=#F Ã!AF Ä0AF Å6FÆFÆFÆFÆF'Æ&F'c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   Ú
device_keyÚhandle)r0   r   )r1   r�   s   "€r2   r3   rÓ   ˜  s   ø€ ÷ 
ñ 
©Sð 
¹&ñ 
r4   c           	     ó\  € V P                   ;_uu_ 4         VP                  RR7      uuRRR4       #   \         dZ   pYP                  9  d7   \        P                  RT RT 24       T P                  P                  T4        Rp?RRR4       R# Rp?ii ; i  + '       g   i     R# ; i)zJQueries Device-SMI metrics once per device, suppressing repeated failures.T)ÚfastNzDevice-SMI metrics failed for `rÔ  )rá   Úmetricsr/  rü   rî   rÖ  rÁ  )rG   rð  rñ  rÙ  s   &&& r2   Ú_safe_query_metricÚ LoopProcessor._safe_query_metric˜  sŽ   € ð ×"×"Ó"ðØ—~‘~¨4�~Ó0÷ #Ò"øô ô Ø×%AÑ%AÔAÜ—I‘IÐ ?À
¸|È3ÈsÈeÐTÔUØ×0Ñ0×4Ñ4°ZÔ@Û÷ #Ñ"ûðú÷ #×"Ð"ús,   •B—3³B¾ABÂBÂBÂBÂB+	c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r¢   )r   r0   r/   )r1   r�   s   "€r2   r3   rÓ   ¤  s   ø€ ÷ 
ñ 
©T±#±u°*Õ-=ñ 
r4   c                ó  € V P                   ;_uu_ 4        / pV P                  P                  4        F1  w  r#V P                  W#4      pVf   K  VP                  R,          W&   K3  	  VuuRRR4       #   + '       g   i     R# ; i)z<Captures current accelerator memory usage in GiB per device.Né   @)rá   rø   rƒ   rõ  Úmemory_used)rG   ÚsnapshotrØ  rñ  rô  s   &    r2   Ú_snapshot_device_memory_gibÚ)LoopProcessor._snapshot_device_memory_gib¤  sq   € ð ×"×"Ó"Ø)+ˆHØ%)×%=Ñ%=×%CÑ%CÖ%EÑ!�	Ø×1Ñ1°)ÓD�Ø’?ÙØ&-×&9Ñ&9¸YÕ&G�Ó#ñ	 &Fð
 ÷ #×"×"Ó"ús   •AA3Á3B	c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r¢   )r
   r/   )r1   r�   s   "€r2   r3   rÓ   °  s   ø€ ÷ 	5ñ 	5©(±5­/ñ 	5r4   c                ó  € V P                   ;_uu_ 4        V P                  f    RRR4       R# V P                  RV P                  4      pVf    RRR4       R# VP                  R,          uuRRR4       #   + '       g   i     R# ; i)z8Captures current CPU memory usage in GiB when supported.NrÝ  rù  )rá   rú   rõ  rú  )rG   rô  s   & r2   Ú_snapshot_cpu_memory_gibÚ&LoopProcessor._snapshot_cpu_memory_gib°  sp   € ð ×"×"Ó"Ø×#Ñ#Ò+Ø÷ #Ñ"ð ×-Ñ-¨e°T×5IÑ5IÓJˆGØŠØ÷ #Ñ"ð ×&Ñ&¨)Õ4÷ #×"×"Ó"ús   •A7¯!A7ÁA7Á7B	c                ó    <€ V ^8„  d   QhRS[ /# r¢   rª   )r1   r�   s   "€r2   r3   rÓ   »  s   ø€ ÷ $ñ $¡cñ $r4   c                ó   € V P                  4       pV'       g   R# / p\        VP                  4       4       F?  w  pw  rEVP                  R4      w  rgpVP	                  V. 4      P                  W…V34       KA  	  . p	VP                  4        Fj  w  rjV
'       g   K  R R lp\        W«R7       UUu. uF  w  rup\        V4      NK  	  pppV R2RP                  V4      ,           pV	P                  V4       Kl  	  RP                  V	4      # u uppi )	z@Formats current accelerator memory usage for processor log rows.rÇ  rä  c                ó~   € V ^8„  d   QhR\         \        \        \        3,          R\         \        \        3,          /# )r,   r.  r.   )r   r0   r/   rÒ   )r1   s   "r2   r3   Ú8LoopProcessor.device_memory_report.<locals>.__annotate__Ì  s-   € ÷ $ñ $œu¤S¬%´ _Õ5ð $¼%ÄÄSÀ½/ñ $r4   c                ó^   € V w  rp ^ \        V4      3#   \        \        3 d    ^T3u # i ; i)zBSorts indexed devices numerically while preserving fallback order.)rÒ   r€  rþ   )r.  r8  Ú_Úorders   &   r2   Úsort_keyÚ4LoopProcessor.device_memory_report.<locals>.sort_keyÌ  s=   € ð #'‘�˜%ð$Øœc %›j˜=Ð(øÜ!¤:Ð.ô $Ø˜e˜8’Oð$ús   ‡ ”,«,)rO   Ú r›  z | )	rü  Ú	enumeraterƒ   Ú	partitionrm   ru  Úsortedr<   Újoin)rG   rû  Úgroupedr  rØ  r-   Úfamilyr  r8  ÚsegmentsÚentriesr	  r€   Úsegments   &             r2   Údevice_memory_reportÚ"LoopProcessor.device_memory_report»  sø   € ð ×3Ñ3Ó5ˆßÙà;=ˆÜ)2°8·>±>Ó3CÖ)DÑ%ˆEÑ%�IØ(×2Ñ2°3Ó7ÑˆF�uØ×Ñ˜v rÓ*×1Ñ1°5ÀÐ2GÖHñ *Eð !ˆØ&Ÿ}™}ž‰OˆFßÙõ$ô =CÀ7Õ<YÔZÑ<Y©[¨Q°q”k %Ö(Ñ<YˆFÑZØ˜ �l T§Y¡Y¨vÓ%6Õ6ˆGØ�O‰O˜GÖ$ñ  /ð" �z‰z˜(Ó#Ð#ùó	 [s   Â/D
c                ó   <€ V ^8„  d   QhRR/# )r,   r.   Nrº   )r1   r�   s   "€r2   r3   rÓ   Û  s   ø€ ÷ ,ñ ,¨4ñ ,r4   c           	     ó  € V P                   ;_uu_ 4        V P                  P                  4        F  p VP                  4        K  	  V P                  P                  4        V P                  e#    V P                  P                  4        RV n        RRR4       R#   \         d    \
        P                  RRR7        K‘  i ; i  \         d    \
        P                  RRR7        L^i ; i  + '       g   i     R# ; i)z6Closes all Device-SMI handles owned by this processor.z7Failed to close device telemetry handle during cleanup.T)Úexc_infoNz4Failed to close CPU telemetry handle during cleanup.)	rá   rø   r€   Úcloser/  rî   rÖ  rv   rú   )rG   rñ  s   & r2   Ú_close_device_smi_handlesÚ'LoopProcessor._close_device_smi_handlesÛ  s×   € ð ×"×"Ó"Ø×2Ñ2×9Ñ9Ö;�ðhØ—L‘L–Nñ <ð
 ×$Ñ$×*Ñ*Ô,à×#Ñ#Ò/ðeØ×(Ñ(×.Ñ.Ô0ð (,�Ô$÷ #Ñ"øô !ô hÜ—I‘IÐWÐbf�I×gðhûô !ô eÜ—I‘IÐTÐ_c�IÖdðeú÷ #×"Ð"úsR   •C-´BÁ,C-Á1CÂC-Â"C	Â>C-ÃC	ÃC-Ã"C*Ã'C-Ã)C*Ã*C-Ã-C>	c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   rO   r-   ©r0   r   )r1   r�   s   "€r2   r3   rÓ   î  s   ø€ ÷ 'ñ '™sð '©3ñ 'r4   c                ó„   € V P                   ;_uu_ 4        W P                  V&   RRR4       R#   + '       g   i     R# ; i)z/Stores a processor-scoped result by module key.N)rÞ   rÝ   )rG   rO   r-   s   &&&r2   Úresult_saveÚLoopProcessor.result_saveî  s+   € ð ××Óà!&�M‰M˜#Ñ÷  ××Òús   •.®?	c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r,   rO   rj   r.   r  )r1   r�   s   "€r2   r3   rÓ   ö  s"   ø€ ÷ 3ñ 3™cð 3©Cð 3¹3ñ 3r4   c                óž   € V P                   ;_uu_ 4        V P                  P                  W4      uuRRR4       #   + '       g   i     R# ; i)z)Fetches a processor-scoped result by key.N)rÞ   rÝ   rh   ©rG   rO   rj   s   &&&r2   Ú
result_getÚLoopProcessor.result_getö  ó1   € ð ××ÓØ—=‘=×$Ñ$ SÓ2÷  ××Óúó	   •;»A	c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   rO   rj   r  )r1   r�   s   "€r2   r3   rÓ   ý  s   ø€ ÷ 3ñ 3™cð 3©Cñ 3r4   c                óž   € V P                   ;_uu_ 4        V P                  P                  W4      uuRRR4       #   + '       g   i     R# ; i)z5Removes and returns a processor-scoped result by key.N)rÞ   rÝ   rp   r$  s   &&&r2   Ú
result_popÚLoopProcessor.result_popý  r'  r(  c                ó’   € V P                   ;_uu_ 4        \        V P                  4      uuRRR4       #   + '       g   i     R# ; i)z*Returns the full processor result mapping.N)rÞ   r,  rÝ   r¥   s   &r2   ÚresultsÚLoopProcessor.results  s+   € ð ××ÓÜ˜Ÿ™Ó&÷  ××Óús	   •5µA	c                óp  € V P                   ;_uu_ 4        RV P                  P                  4       RV P                  RV P                  RV P
                  RV P                  4       RR Uu/ uF"  p\        W4      '       g   K  V\        W4      bK$  	  up/uuRRR4       # u upi   + '       g   i     R# ; i)	zÜReturn boundary state, never live tasks, locks, or partial accumulators.

The execution must be quiescent. Processors with additional persistent
state extend this protocol instead of teaching the looper their internals.
r‘   rî   r  r  r.  Ú
statisticsN©rì   rí   rê   rë   rï   Ú
avg_losses)	rÜ   rå   rž   rî   r  r  r.  r9  r¬   )rG   rO   s   & r2   Úcontinuation_state_dictÚ%LoopProcessor.continuation_state_dict
  s˜   € ð �Y�Y‹Yà˜×*Ñ*×1Ñ1Ó3Ø�t—x‘xØ˜t×/Ñ/Ø*¨D×,IÑ,IØ˜4Ÿ<™<›>Øázóáz˜Ü˜t×)ô ,�Cœ Ó+Ò+Ùzñð÷ ŠYùò÷ �YˆYús$   •AB$Á)BÂBÂB$ÂB$Â$B5	c           	     óð  € V P                   ;_uu_ 4        V P                  VR,          4       VR,          V n        VR,          V n        VR,          V n        V P
                  ;_uu_ 4        \        VR,          4      V n        RRR4       R F5  pW!P                  R/ 4      9   g   K  \        WVR,          V,          4       K7  	  RRR4       R#   + '       g   i     LU; i  + '       g   i     R# ; i)	zFRestore completed work; unfinished tasks are created by normal replay.r‘   rî   r  r  r.  Nr1  r2  )
rÜ   Úreceive_input_cacherî   r  r  rÞ   r,  rÝ   rh   r³   )rG   rœ  rO   s   && r2   Úload_continuation_state_dictÚ*LoopProcessor.load_continuation_state_dict  s¯   € à�Y�Y‹YØ×$Ñ$ U¨7¥^Ô4Ø˜U•|ˆDŒHØ$ ]Õ3ˆDÔØ,1Ð2LÕ,MˆDÔ)Ø×#×#Ó#Ü $ U¨9Õ%5Ó 6�”÷ $ãr�ØŸ)™) L°"Ó5Ö5Ü˜D u¨\Õ':¸3Õ'?Ö@ñ s÷ ‰Y÷
 $×#ú÷ �YˆYús*   •AC$Á,C	Â C$Â)C$ÃC!ÃC$Ã$C5	c                ó    <€ V ^8„  d   QhRS[ /# )r,   Úlayer_indexr$  )r1   r�   s   "€r2   r3   rÓ   +  s   ø€ ÷ 
0ñ 
0©sñ 
0r4   c                ó   € V P                  4       pV'       d5   \        VP                  4       4      pV P                  P	                  V4       V P                  4       pVe   V P                  P	                  V4       R# R# )zERecords current accelerator and CPU memory snapshots for diagnostics.N)rü  r-  r€   rê   ru  r   rë   )rG   r;  Údevice_snapshotÚtotal_gpu_memoryÚ
cpu_memorys   &&   r2   Úcollect_memory_infoÚ!LoopProcessor.collect_memory_info+  sk   € ð ×:Ñ:Ó<ˆßÜ" ?×#9Ñ#9Ó#;Ó<ÐØ×Ñ×#Ñ#Ð$4Ô5à×2Ñ2Ó4ˆ
ØÒ!Ø×Ñ×#Ñ# JÖ/ñ "r4   c                ó   € R# )zAPlaceholder for future Plotly-based processor log visualizations.Nrº   r¥   s   &r2   Ú
log_plotlyÚLoopProcessor.log_plotly7  ó   € ñ 	r4   c                ó   € R# )zDOverride point for processors that need to replace calibration data.Nrº   )rG   rÖ   s   &&r2   Úset_calibration_datasetÚ%LoopProcessor.set_calibration_dataset<  rE  r4   c                ó    <€ V ^8„  d   QhRS[ /# )r,   rè   )r/   )r1   r�   s   "€r2   r3   rÓ   A  s   ø€ ÷ %ñ %¡Uñ %r4   c                ót   € V P                   ;_uu_ 4        Wn        RRR4       R#   + '       g   i     R# ; i)z4Stores the latest forward-pass duration for logging.N©rà   rè   ©rG   rè   s   &&r2   Úset_fwd_timeÚLoopProcessor.set_fwd_timeA  s$   € ð × × Ó Ø$ŒM÷ !× × Ò ús   •&¦7	c                ó    <€ V ^8„  d   QhRS[ /# r¢   rª   )r1   r�   s   "€r2   r3   rÓ   G  s   ø€ ÷ %ñ %¡Cñ %r4   c                ó¨   € V P                   ;_uu_ 4        V P                  e   V P                  MRpVR uuRRR4       #   + '       g   i     R# ; i)z8Returns the stored forward time as a fixed-width string.Ng        z.3frK  rL  s   & r2   Úformatted_fwd_timeÚ LoopProcessor.formatted_fwd_timeG  s:   € ð × × Ó Ø(,¯©Ò(A�t—}’}ÀsˆHØ˜s�^÷ !× × Ó úr°   c                ó    <€ V ^8„  d   QhRS[ /# )r,   r–  r   )r1   r�   s   "€r2   r3   rÓ   O  s   ø€ ÷ ñ ¡ñ r4   c                ó   € R# )zFOverride point for per-module setup before forward capture/processing.Nrº   )rG   r–  rI   s   &&,r2   Ú
preprocessÚLoopProcessor.preprocessO  rE  r4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r•  )r   rÅ   )r1   r�   s   "€r2   r3   rÓ   U  s   ø€ ÷ ñ ¡ð ±ñ r4   c                ó   € R# )z5Override point for dynamic per-module skip decisions.Nrº   )rG   r–  s   &&r2   Ú
is_skippedÚLoopProcessor.is_skippedU  rE  r4   c                ó    <€ V ^8„  d   QhRS[ /# )r,   Úinput_cacherš   )r1   r�   s   "€r2   r3   rÓ   Z  s   ø€ ÷ 	Añ 	A©sñ 	Ar4   c                óB  € V P                   ;_uu_ 4        \        V RR4      p\        V\        4      '       d   VP	                  V4       M8\        V\        4      '       d   VP                  4       MTp\        V4      V n        RRR4       R#   + '       g   i     R# ; i)z?Injects the shared input cache for the current processor stage.rå   N)râ   r¬   r�   r�   rŸ   rž   rå   )rG   r\  Úcurrentr‘   s   &&  r2   r7  Ú!LoopProcessor.receive_input_cacheZ  st   € ð ×#×#Ó#Ü˜d N°DÓ9ˆGÜ˜'Ô#8×9Ò9Ø×!Ñ! +Õ.ä0:¸;ÔH]×0^Ò0^˜×*Ñ*Ô,Ðdo�Ü$9¸%Ó$@�Ô!÷ $×#×#Ò#ús   •A.BÂB	c                ó@   <€ V ^8„  d   QhRS[ S[ S[,          ,          /# )r,   Úlayer_inputs)r	   r   )r1   r�   s   "€r2   r3   rÓ   g  s   ø€ ÷ :ñ :±±d¹6µlÕ1Cñ :r4   c                óˆ   € V P                   ;_uu_ 4        WP                  n        RRR4       R#   + '       g   i     R# ; i)z<Replaces cached layer outputs that feed the next loop stage.N)râ   rå   ra  )rG   ra  s   &&r2   Úreceive_layer_inputsÚ"LoopProcessor.receive_layer_inputsg  s+   € ð ×#×#Ó#Ø-9×ÑÔ*÷ $×#×#Ò#ús	   •0°A	Úsubset_indexÚsubset_totalc                óÈ   <€ V ^8„  d   QhRS[ RS[S[S[,          ,          RS[S[S[S[3,          ,          RS[S[S[,          ,          RS[S[ ,          RS[S[ ,          RR/# )	r,   r;  ra  Úlayer_input_kwargsÚlayer_outputsre  rf  r.   N)rÒ   r	   r   r   r0   r
   )r1   r�   s   "€r2   r3   rÓ   m  s{   ø€ ÷ 
ñ 
ñ ð
ñ ™4¡�<Õ(ð	
ñ
 !¡¡c©6 kÕ!2Õ3ð
ñ ™D¡�LÕ)ð
ñ ™s•mð
ñ ™s•mð
ð 
ñ
r4   c               ó   € ??????R# )zDOverride point for processors that need original layer IO snapshots.Nrº   )rG   r;  ra  rh  ri  re  rf  s   &$$$$$$r2   Úreceive_layer_forward_contextÚ+LoopProcessor.receive_layer_forward_contextm  s   € ð ØØØØÚr4   c                ó¾   € V P                   P                  4        V P                  ;_uu_ 4        . V P                  n        RRR4       R#   + '       g   i     R# ; i)z?Drops transient task data and cached layer inputs after replay.N)ræ   rv   râ   rå   ra  r¥   s   &r2   Úclear_cache_dataÚLoopProcessor.clear_cache_data‚  s=   € ð 	�
‰
×ÑÔØ×#×#Ó#Ø-/ˆD×ÑÔ*÷ $×#×#Ò#ús   ¯AÁA	c                ó€   <€ V ^8„  d   QhRS[ RS[S[S[S[P
                  R3,          S[P
                  .R3,          /# )r,   r©   r.   .N)r0   r   r   r   r   r   )r1   r�   s   "€r2   r3   rÓ   ‰  sC   ø€ ÷ ñ ©ð ±¹6Á5ÉÏÉÐWZÐIZÕC[Ñ]b×]iÑ]iÐ:jÐlpÐ:pÕ1qñ r4   c                ó   € R# )z@Override point for per-module forward hooks used during capture.Nrº   r­   s   &&r2   Úpre_process_fwd_hookÚ"LoopProcessor.pre_process_fwd_hook‰  rE  r4   c          
      óX   <€ V ^8„  d   QhRS[ RS[S[,          RS[RS[S[S[3,          /# )r,   ÚmodelÚsubset_namesÚis_lm_head_moduler.   )r   r	   r0   rÅ   r   )r1   r�   s   "€r2   r3   rÓ   Ž  s?   ø€ ÷ ñ áðñ ™3•iðñ  ð	ñ
 
‰c‘3ˆh�ñr4   c                ó   € ???/ # )zìOptionally elect one capture leader per explicit shared-input group in ``subset_names``.

Called before capture hooks are registered for a subset pass. Returns
``{follower: leader}``; processors that do not dedup capture return ``{}``.
rº   )rG   ru  rv  rw  s   &&&&r2   Úbegin_shared_input_captureÚ(LoopProcessor.begin_shared_input_captureŽ  s   € ð �<Ð!2Øˆ	r4   c                ó\   <€ V ^8„  d   QhRS[ S[,          RS[S[S[S[3,          ,          /# )r,   rv  r.   )r	   r0   r
   r   r   )r1   r�   s   "€r2   r3   rÓ   �  s/   ø€ ÷ ñ ±T¹#µYð Á8ÉDÑQTÑVYÐQYÍNÕC[ñ r4   c                ó   € ?R# )zNPropagate leader statistics and optionally return capture lifecycle telemetry.Nrº   )rG   rv  s   &&r2   Úend_shared_input_captureÚ&LoopProcessor.end_shared_input_capture�  s
   € ð Ùr4   c                óB   <€ V ^8„  d   QhRS[ RS[RS[S[,          RS[/# )r,   Ú	moe_blockÚmoe_block_namer×  r.   )r   r0   r	   r   rÅ   )r1   r�   s   "€r2   r3   rÓ   £  s7   ø€ ÷ ñ áðñ ðñ ‘c•ð	ñ
 
ñr4   c                ó   € ???R# )a	  Optionally register a processor-specific MoE-root capture hook.

The generic subset executor invokes this lifecycle extension without
knowing which processor owns the feature. Processors that do not need
a shared MoE-root capture leave the default no-op unchanged.
Frº   )rG   r€  r�  r×  s   &&&&r2   Úregister_moe_root_capture_hookÚ,LoopProcessor.register_moe_root_capture_hook£  s   € ð �~ wÙr4   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–  ÚdeviceÚsubsetÚprevious_subsetre  rf  )r   r   r†  r
   r   r0   rÒ   )r1   r�   s   "€r2   r3   rÓ   ´  sq   ø€ ÷ ñ áðñ —L‘Lðñ ™T¡#¡{Ð"2Õ3Õ4ð	ñ
 &¡d©3±Ð+;Õ&<Õ=ðñ #¡3�-ðñ #¡3�-ñr4   c                ó   € R# )zDOverride point for the main per-module quantization or capture step.Nrº   )rG   r–  r†  r‡  rˆ  re  rf  s   &&&&&&&r2   ÚprocessÚLoopProcessor.process´  s   € ñ 	r4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   r–  ru  )r   r   )r1   r�   s   "€r2   r3   rÓ   Ã  s   ø€ ÷ ñ ©ð ¹Zñ r4   c                ó   € R# )zDOverride point for per-module packing/finalization after processing.Nrº   )rG   r–  ru  rI   s   &&&,r2   Úsubmodule_finalizeÚ LoopProcessor.submodule_finalizeÃ  rE  r4   c                ó    <€ V ^8„  d   QhRS[ /# )r,   ru  r   )r1   r�   s   "€r2   r3   rÓ   Ë  s   ø€ ÷ ñ ™jñ r4   c                ó.   € V P                  4        V =V =R# )zEReleases shared processor resources after the full quantization loop.N)r  rå   rÝ   )rG   ru  rI   s   &&,r2   ÚfinalizeÚLoopProcessor.finalizeË  s   € ð 	×&Ñ&Ô(ØÐØŠMr4   c                ó
   € V = R# )z;Drops the retained calibration dataset to free host memory.N)rÖ   r¥   s   &r2   Úrelease_calibration_datasetÚ)LoopProcessor.release_calibration_dataset×  s
   € ð Ò$r4   c                ó    <€ V ^8„  d   QhRS[ /# r¢   r$  )r1   r�   s   "€r2   r3   rÓ   Ü  s   ø€ ÷  ñ  ¡ñ  r4   c                ó   € V P                   # )z3Returns the number of prepared calibration batches.)r  r¥   s   &r2   Únumber_batchesÚLoopProcessor.number_batchesÜ  s   € ð ×ÑÐr4   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   Úprocessor_indexr.   )rÒ   rÅ   )r1   r�   s   "€r2   r3   rÓ   á  s   ø€ ÷ ñ ¹#ð Á$ñ r4   c                ó   € R# )z>Override point for validating or reusing calibration datasets.Nrº   )rG   rœ  s   &&r2   Úverify_calibration_datasetÚ(LoopProcessor.verify_calibration_datasetá  rE  r4   c                ó    <€ V ^8„  d   QhRS[ /# r¢   rª   )r1   r�   s   "€r2   r3   rÓ   æ  s   ø€ ÷ ñ ‘cñ r4   c                ó   € R# )z@Override point for the processor name shown in logs and reports.Nrº   r¥   s   &r2   r©   ÚLoopProcessor.nameæ  rE  r4   )!r  rú   rü   rø   rá   rà   râ   rð   rñ   rò   rß   rÝ   rÞ   rÖ   rë   rì   rÑ   rè   rê   rå   ré   rÜ   rî   rï   rö   rí   r  rç   rË   rä   ræ   rã   r  )NNNNé   N)rQ  r@   )F)NNNNN)>r…   r†   r‡   rˆ   r‰   rB   Ústaticmethodrõ   r!  r  r:  r>  rJ  rN  r^  rh  rU  rX  rƒ  r�  r®  r©  r²  rª  r÷   rù   rÕ  rõ  rü  r   r  r  r   r%  r+  r.  r4  r8  r@  rC  rG  rM  rQ  rU  rY  r7  rc  rk  rn  rr  ry  r}  rƒ  rŠ  rŽ  r’  r•  r™  rž  r©   rŠ   r‹   r»   s   @r2   rÉ   rÉ   Î   s&  ø‡ € ÙK÷s,ò s,ðj ÷hó ðh÷;ò ;ð ÷ó ð÷>5ð 5÷7ð 7ò
òLò"÷B(ð (÷ð ÷*ð ÷6ð ÷,ð ÷1ð 1÷:	ð 	÷ð ÷25ð 5÷$ð ÷ð ÷ð ÷@
ð 
÷
ð 
÷	5ð 	5÷$ð $÷@,ð ,÷&'ð '÷3ò 3÷3ò 3ò'òò(A÷
0ð 
0òò
÷
%ð %÷%ð %÷ð ÷ð ÷
	Að 	A÷:ð :ð
ð '+ð
ð '+÷
ò 
ò*0÷ð ÷
ò ÷ð ÷ð ÷"ò ÷ð ÷ð ò%÷
 ð  ÷
ð ÷
ö r4   rÉ   c                ó$   € V ^8„  d   QhR\         /# r¢   rª   )r1   s   "r2   r3   r3   ë  s   € ÷ ñ œñ r4   c                 ó`  € \         P                  P                  \        4      p V P	                  R^ 4      R,          p\         P                  P                  4       ^8”  dI   \         P                  P                  \        4      pVP	                  R^ 4      R,          pVR RVR R2pV# VR R2pV# )zCReturns current CUDA memory usage for the first one or two devices.zactive_bytes.all.currentr6   zMB, r¥  r¦  )r   rá  Úmemory_statsr&   rh   ré  r'   )Ústats_0Úactive_0Ústats_1Úactive_1Ú
max_memorys        r2   Úget_max_memoryr­  ë  s¡   € ô �j‰j×%Ñ%¤hÓ/€GØ�{‰{Ð5°qÓ9¸IÕE€Hä‡z�z×ÑÓ  1Ô$Ü—*‘*×)Ñ)¬(Ó3ˆØ—;‘;Ð9¸1Ó=À	ÕIˆà  �~ T¨(°3¨°rÐ:ˆ
ð Ðð ! �~ RÐ(ˆ
ØÐr4   c                óV   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   # )r,   rt  )Ú__conditional_annotations__r	   r0   )r1   s   "r2   r3   r3      s"   € ‡�÷Tò ”Tœ#•Yñ òU r4   )Dr¯  rE  rY  rC   Údataclassesr   r   Úpathlibr   Útypingr   r   r   r	   r
   r   r   r   Ú
device_smir   r   Útorch.nnr   rQ  r   Úlooper.input_cacher   Úlooper.named_moduler   Úmodelsr   Úmodels.writerr   r   r   r   r   r   r   r   r   Úquantization.configr    Úutils.colorsr!   r"   Úutils.loggerr#   Úutils.random_strr$   Úutils.torchr%   r&   r'   r(   rî   r  ÚMODULE_FEATURE_COLUMNÚDTYPE_SIZE_COLUMNrt  r<   r,  r>   r�   r½   rÉ   r­  r3   )r¯  s   @r2   Ú<module>rÀ     sÿ   øð÷
 €Û 	Û Ý !Ý Ý ß B× BÑ Bã Ý Ý Ý å !Ý +Ý -Ý ÷
÷ 
õ 
õ 1ß 0Ý 'Ý 0ß :Ó :ñ ƒn€á˜“<Ð à'Ð Ø!Ð ð ØØØØØØØØØØØð"Ð ó õ ôA)�dô A)÷HCñ CðB ÷0ð 0ó ð0÷D[ñ [÷zr4   