+
    "Ý³jå1  ã                   óš   € ^ RI t ^ RIt^ RIHt ^ RIHtHtHtHt ^ RI	t	^ RI	H
t
Ht ^ RIHt ^ RIHt RR R lltRR	 R
 lltRR R lltR# )é    N)Úpartial)ÚCallableÚDictÚListÚOptional)Ú
LongTensorÚTensor)Ú
DataLoader)ÚPreTrainedTokenizerc                ó"  € V ^8„  d   QhR\         \        \        \        ,          3,          R\        R\        R\        R\        \
        ,          R\        R\        R\        R	\        R
\        R\         \        \        \        ,          3,          /# )é   ÚsamplesÚprompt_col_nameÚlabel_col_nameÚ	tokenizerÚpreprocess_fnÚsample_max_lenÚblock_max_lenÚadd_eos_tokenÚtruncate_promptÚmerge_prompt_labelÚreturn)	r   Ústrr   r   r   r   ÚintÚboolr   )Úformats   "ÚU/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/utils/data.pyÚ__annotate__r      s¤   € ÷ }ñ }Ü”#”tœC•y�.Õ!ð}äð}ô ð}ô #ð	}ô
 œHÕ%ð}ô ð}ô ð}ô ð}ô ð}ô ð}ô 
Œ#Œt”JÕÐ
Õ ñ}ó    c
           
     óê  a	€ V'       d	   V! V 4      p W,          p
W,          pV! V
RR7      R,          pV! VRR7      R,          p. p\        \        WÍ4      4       F‰  w  pw  ppV'       d   VVP                  .,          p\        V4      p\        V4      pVV,           V,
          pV^ 8”  d   V'       d   VVR pMVRV)  pVWÏ&   VWß&   V'       d   Kx  VP	                  V4       K‹  	  \        \        \        WÍ4      4       UUUu. uF  w  pw  ppWþ9  g   K  VV3NK  	  upppV	3R lR7      p. p. p^ p^ pV FÀ  pVw  pp\        V4      pS	'       d   V\        V4      ,          pVV8:  d   Tp Tp!M"\        V4      VV,
          ,          V,           p Tp!VV ,           V8”  d2   VP	                  \        P                  ! V4      V34       . p^ p^ pTp!Tp VP	                  V4       \        VV!4      pVV ,          pKÂ  	  V'       d(   VP	                  \        P                  ! V4      V34       ???R. R. R. /p"V EFª  w  p#p. p$. p%. p\        V# U&u. uF  p&\        V&^,          4      NK  	  up&4      p'V# EF#  p&V&w  pp\        V4      p!S	'       d   V!\        V4      ,          p!VV!,
          p(S	'       dc   V$P	                  VP                  .V(,          V,           V,           4       VP	                  R	.V(\        V4      ,           ,          V,           4       MZV$P	                  VP                  .V(,          V,           4       VP	                  R	.V'\        V4      ,
          ,          V,           4       V%P	                  ^ .V(,          ^.V!,          ,           4       EK&  	  V"R,          P	                  V$4       V"R,          P	                  V%4       V"R,          P	                  V4       EK­  	  V"# u upppi u up&i )
aý  A simple implementation of text generation oriented smart batching to maximize VRAM usage when evaluation

:param samples: Dict[str, List[str]], samples that used to make data blocks
:param prompt_col_name: str, name of the key in samples whose value stores prompt
:param label_col_name: str, name of the key in samples whose value stores label
:param tokenizer: transformers.PretrainedTokenizer, tokenizer that used to tokenize samples
:param preprocess_fn: Optional[Callable], optional function that used to preprocess samples such as
    refactor the data structure of samples, note the output of this function must be a dict whose keys
    at least contains `prompt_col_name` and `label_col_name`
:param sample_max_len: int, defaults to 1024, max tokens number of each sample (before padding)
:param block_max_len: int, defaults to 2048, max tokens number of each data block (after padding)
:param add_eos_token: bool, defaults to False, whether add eos_token or not to the label
:param truncate_prompt: bool, defaults to True, whether to truncate prompt if the sample's total tokens
    number exceeds `sample_max_len`, if not, will truncate label and drop this sample when all tokens
    in label are truncated
:param merge_prompt_label: bool, defaults to False, will merge label into prompt if set to True, usually
    this only required when doing language modeling task
:return: Dict[str, List[torch.LongTensor]], a dict whose keys are `input_ids`, `attention_mask` and
    `label` and values are a list of torch.LongTensor
F)Ú
truncationÚ	input_idsNc                 óŠ   <€ S'       d*   \        V ^ ,          4      \        V ^,          4      ,           # \        V ^ ,          4      # )r   )Úlen)Úxr   s   &€r   Ú<lambda>Ú!make_data_block.<locals>.<lambda>P   s-   ø€ ×1C”s˜1˜Q�4“y¤3 q¨¥t£9Õ,ÐRÌÈQÈqÍTËÐRr   )ÚkeyÚattention_maskÚlabelsiœÿÿÿ)	Ú	enumerateÚzipÚeos_token_idr$   ÚappendÚsortedÚcopyÚmaxÚpad_token_id))r   r   r   r   r   r   r   r   r   r   Úpromptsr*   Útokenized_promptsÚtokenized_labelsÚdropped_indicesÚidxÚtokenized_promptÚtokenized_labelÚ
len_promptÚ	len_labelÚ
exceed_lenÚpÚlÚtokenized_samplesÚsample_blocksÚsample_blockÚblk_max_lenÚblk_total_lenÚtokenized_sampleÚ
prompt_idsÚ	label_idsÚori_sample_lenÚadditional_lenÚ
sample_lenÚnew_samplesÚblockr"   r)   ÚsampleÚlabel_max_lenÚpad_nums)   &&&&&&&&&f                               r   Úmake_data_blockrO      sÖ  ø€ ÷@ Ù Ó(ˆàÕ&€GØÕ$€Fñ " '°eÔ<¸[ÕIÐÙ  °EÔ:¸;ÕGÐð €OÜ4=¼cÐBSÓ>fÖ4gÑ0ˆÑ0Ð ßØ 	× 6Ñ 6Ð7Õ7ˆOÜÐ)Ó*ˆ
Ü˜Ó(ˆ	Ø )Õ+¨nÕ<ˆ
Ø˜Œ>ßØ#3°J°KÐ#@Ñ à"1°,°J°;Ð"?�Ø!1ÐÑØ /ÐÑß‰Ø×"Ñ" 3Ö'ñ 5hô" Ü#,¬SÐ1BÓ-UÔ#VÕuÑ#V‘K�C™˜!˜QÐZ]ÑZtŒˆ!ˆQ‹Ñ#VÓuÜRôÐð €MØ€LØ€KØ€MÛ-ÐØ 0Ñˆ
�IÜ˜Z›ˆßØœc )›nÕ,ˆNØ˜[Ô(Ø(ˆNØ$‰Jä  Ó.°.À;Õ2NÕOÐR`Õ`ˆNØ'ˆJà˜>Õ)¨MÔ9Ø× Ñ ¤$§)¢)¨LÓ"9¸;Ð!GÔHØˆLØˆKØˆMØ'ˆJØ+ˆNà×ÑÐ,Ô-Ü˜+ zÓ2ˆØ˜Õ'Šñ- .÷0 Ø×ÑœdŸiši¨Ó5°{ÐCÔDØØØà Ð$4°b¸(ÀBÐG€Kä+Ñˆˆ{Øˆ	ØˆØˆ	Ü¹%Ó@¹%°œS ¨¥ž^¹%Ñ@ÓAˆäˆFØ06Ñ-Ð˜oÜÐ-Ó.ˆJß!Øœc /Ó2Õ2�
Ø! JÕ.ˆGß!Ø× Ñ  )×"8Ñ"8Ð!9¸GÕ!CÐFVÕ!VÐYhÕ!hÔiØ× Ñ  $ ¨7´SÐ9IÓ5JÕ+JÕ!KÈoÕ!]Õ^à× Ñ  )×"8Ñ"8Ð!9¸GÕ!CÐFVÕ!VÔWØ× Ñ  $ ¨=¼3¸Ó;OÕ+OÕ!PÐSbÕ!bÔcØ×!Ñ! 1 #¨¥-°1°#¸
Õ2BÕ"B×Cñ ð 	�KÕ ×'Ñ'¨	Ô2ØÐ$Õ%×,Ñ,¨^Ô<Ø�HÕ×$Ñ$ Y×/ñ- ,ð0 Ðùô 	vùòV As   ÄO)ÄO)ÉO0
c          
      óÎ   € V ^8„  d   QhR\         \        \        \         \         \        ,          ,          3,          ,          R\        R\        R\        \        \        3,          /# )r   Úbatchr2   Úpadding_sider   )r   r   r   r   r	   )r   s   "r   r   r   �   sV   € ÷ Tñ TÜ””Sœ$œt¤C�y�/Ð)Õ*Õ+ðTäðTô ðTô 
Œ#Œvˆ+Õñ	Tr   c           	     ó„  a€ . p. pV  Fø  pVR,          pVR,          p\        V4      \        V4      8X  g   Q R4       h\        \        V4      4       F«  p\        P                  ! Wh,          \        P                  R7      p	\        P                  ! Wx,          \        P
                  R7      p
V	P                  4       V
P                  4       8w  d   \        R4      hVP                  V	4       VP                  V
4       K­  	  Kú  	  V'       d   \        R V 4       4      M^ oRR V3R lllpRR	 V3R
 lllpVR8X  d   TpMVR8X  d   TpM\        RV R24      hV Uu. uF  qí! Wá\        P                  R7      NK  	  ppV Uu. uF  qí! VR\        P
                  R7      NK  	  ppV'       d   \        P                  ! V^ R7      M%\        P                  ! R\        P                  R7      pV'       d   \        P                  ! V^ R7      M%\        P                  ! R\        P
                  R7      pRVRV/# u upi u upi )ay  
Collate an outer batch (size B) of items, where each item holds multiple rows.
We flatten the rows across items, pad to a global max length, and stack into
[total_rows, max_len] tensors for HF Transformers.

Each element of `batch` looks like:
  {
    "input_ids": List[List[int]],       # rows
    "attention_mask": List[List[int]],  # rows (0/1 ints, cast to bool here)
  }
r"   r)   z2input_ids and attention_mask row counts must match)Údtypez?Row has mismatched lengths between input_ids and attention_maskc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5i©N)Únumel)Ú.0Úts   & r   Ú	<genexpr>Úcollate_data.<locals>.<genexpr>·   s   é € Ð.¡X —'‘'—)�)£Xùs   ‚c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# ©r   Úrowr   ©Útorchr	   )r   s   "r   r   Ú"collate_data.<locals>.__annotate__º   s"   € ÷ 

ñ 

”u—|‘|ð 

¼u¿|¹|ñ 

r   c           
      óä   <€ SV P                  4       ,
          pV^ 8:  d   V # \        P                  ! T \        P                  ! V3Y;'       g    V P                  V P
                  R7      .^ R7      # ©r   )rT   Údevice©Údim©rW   r`   ÚcatÚfullrT   rd   ©r^   Ú	pad_valuerT   Úpad_lenÚmax_lens   &&& €r   Ú	right_padÚcollate_data.<locals>.right_padº   sb   ø€ Ø˜CŸI™I›KÕ'ˆØ�aŒ<ØˆJÜ�yŠyàÜ—
’
˜G˜: y×8JÐ8JÀÇÁÐSV×S]ÑS]Ô^ðð ô
ð 	
r   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# r]   r_   )r   s   "r   r   ra   Æ   s"   € ÷ 

ñ 

”e—l‘lð 

¼e¿l¹lñ 

r   c           	      óä   <€ SV P                  4       ,
          pV^ 8:  d   V # \        P                  ! \        P                  ! V3Y;'       g    V P                  V P
                  R7      V .^ R7      # rc   rg   rj   s   &&& €r   Úleft_padÚcollate_data.<locals>.left_padÆ   sb   ø€ Ø˜CŸI™I›KÕ'ˆØ�aŒ<ØˆJÜ�yŠyä—
’
˜G˜: y×8JÐ8JÀÇÁÐSV×S]ÑS]Ô^Øðð ô
ð 	
r   ÚleftÚrightzUnsupported padding_side `z`. Expected `left` or `right`.Fre   rV   )r   r   )r$   Úranger`   Ú	as_tensorÚlongr   rW   Ú
ValueErrorr.   r1   ÚstackÚempty)rQ   r2   rR   Úrows_idsÚ	rows_maskÚitemÚids_listÚmsk_listÚrÚidsÚmskrn   rr   Úpad_fnrY   Ú
padded_idsÚ
padded_mskr"   r)   rm   s   &&&                @r   Úcollate_datar‡   �   sÏ  ø€ ð" €HØ€IãˆØ˜Õ$ˆØÐ(Õ)ˆô �8‹}¤ H£Ô-ÐcÐ/cÓcÐ-ä”s˜8“}Ö%ˆAÜ—/’/ (¥+´U·Z±ZÔ@ˆCä—/’/ (¥+´U·Z±ZÔ@ˆCà�y‰y‹{˜cŸi™i›kÔ)Ü Ð!bÓcÐcà�O‰O˜CÔ Ø×Ñ˜SÖ!ó &ñ ÷& 3;ŒcÑ.¡XÓ.Ô.À€G÷

ò 

÷

ò 

ð �vÔØ‰Ø	˜Ô	 Ø‰äÐ5°l°^ÐCaÐbÓcÐcáEMÓNÁXÀ�&˜´·
±
×;ÁX€JÐNá>GÓH¹i¸�&˜˜E¬¯©×4¹i€JÐH÷ 3=”—’˜J¨AÕ.Ä%Ç+Â+ÈfÔ\a×\fÑ\fÔBg€Iß7A”U—[’[ °Õ3ÄuÇ{Â{ÐSYÔaf×akÑakÔGl€Nð 	�YØ˜.ðð ùò OùâHs   Å H8Æ!H=c                ó$  € V ^8„  d   QhR\         R\         R\         R\        R\        \        ,          R\        \        ,          R\        R\        R	\        R
\
        R\
        R\
        R\        \        ,          R\        \        ,          R\        /# )r   Údata_path_or_namer   r   r   Úload_fnr   Únum_samplesr   r   r   r   r   Úload_fn_kwargsÚpreprocess_fn_kwargsr   )r   r   r   r   r   r   Údictr
   )r   s   "r   r   r   ç   sÁ   € ÷ [ñ [Üð[äð[ô ð[ô #ð	[ô
 ”hÕð[ô œHÕ%ð[ô ð[ô ð[ô ð[ô ð[ô ð[ô ð[ô œT•Nð[ô #¤4�.ð[ô  ñ![r   c                ó�  € ^ RI HpHpHp V'       g   / pV'       g   / pV'       d   V! V 3/ VB pM	V! V 3/ VB p\	        VVV34      '       d,   RV9   d   VR,          pMRV9   d   VR,          pM	VR,          pVP                  \        P                  ! \        \        V4      4      \        \        V4      V4      4      RR7      pVP                  \        R\        V4      ^VP                  RRRVR	VR
VR\        V3/ VB RVRVRV	RV
RV/	R7      p^VR&   RVR&   \        \        VP                   R7      VR&   \#        V3/ VB pV# )aè  load dataset and build dataloader

:param data_path_or_name: str, dataset name in hf-hub or local file path
:param prompt_col_name: str, see `make_data_block`
:param label_col_name: str, see `make_data_block`
:param tokenizer: str, see `make_data_block`
:param load_fn: Optional[Callable], defaults to None, function used to load dataset, if not specified,
    use `datasets.load_dataset`
:param preprocess_fn: Optional[Callable], see `make_data_block`
:param num_samples: int, defaults to 128, total samples used to evaluation
:param sample_max_len: int, see `make_data_block`
:param block_max_len: int, see `make_data_block`
:param add_eos_token: bool, see `make_data_block`
:param truncate_prompt: bool, see `make_data_block`
:param merge_prompt_label: bool, see `make_data_block`
:param load_fn_kwargs: Optional[dict], defaults to None, keyword arguments used
    for `load_fn` or `datasets.load_dataset`
:param preprocess_fn_kwargs: Optional[dict], defaults to None, keyword arguments used
    for `preprocess_fn`
:param kwargs: additional keyword arguments will be passed to torch's `DataLoader` initialization,
    note values of `batch_size`, `shuffle` and `collate_fn` will always be overridden to fixed value
:return: torch.utils.data.DataLoader
)ÚDatasetDictÚIterableDatasetDictÚload_datasetÚ
evaluationÚtestÚtrainT)ÚindicesÚkeep_in_memoryFr   r   r   r   r   r   r   r   r   )ÚbatchedÚ
batch_sizeÚnum_procÚremove_columnsr—   Úload_from_cache_fileÚ	fn_kwargsr™   Úshuffle)r2   Ú
collate_fn)Údatasetsr�   r‘   r’   Ú
isinstanceÚselectÚrandomrL   rv   r$   ÚminÚmaprO   Úcolumn_namesr   r‡   r2   r
   )r‰   r   r   r   rŠ   r   r‹   r   r   r   r   r   rŒ   r�   Úkwargsr�   r‘   r’   ÚdsÚdls   &&&&&&&&&&&&&&,     r   Úget_dataloaderrª   ç   sf  € ÷P HÑGçØˆßØ!ÐçÙÐ&Ñ9¨.Ñ9‰áÐ+Ñ>¨~Ñ>ˆä�"�{Ð$7Ð8×9Ò9Ø˜2ÔØ�LÕ!‰BØ�rŒ\Ø�F•‰Bà�G•ˆBà	�‰Ü—’œe¤C¨£G›n¬c´#°b³'¸;Ó.GÓHØð 
ó 
€Bð 
�‰ÜØÜ�r“7ØØ—‘ØØ"à˜Ø˜nØ˜ØœW ]ÑKÐ6JÑKØ˜nØ˜]Ø˜]Ø˜Ø Ð"4ð

ð 
ó 
€Bð, €Fˆ<ÑØ€Fˆ9ÑÜ"¤<¸i×>TÑ>TÔU€Fˆ<ÑÜ	�BÑ	!˜&Ñ	!€Bà€Ir   )Né   é   FTF)ru   )
NNé€   r«   r¬   FTFNN)r0   r£   Ú	functoolsr   Útypingr   r   r   r   r`   r   r	   Útorch.utils.datar
   Útransformersr   rO   r‡   rª   © r   r   Ú<module>r³      s<   ðó Û Ý ß 1Ó 1ã ß $Ý 'Ý ,÷}÷~T÷n[ñ [r   