ó
    ÷“,j¿O  ã                   ó6  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKrS SKrS SKrS SKJr  S SKrS SKJr  S SKJrJrJrJrJr  S SKJr  S SKJ r   S SK!J"r"J#r#J$r$J%r%   S SK&Jr'   " S	 S
\5      r) " S S5      r*\	 " S S5      5       r+S(S jr,S r-S r.S r/S r0S r1\"SSS4S jr2\14S jr3S)S jr4Sr5Sr6Sr7Sr8 " S S\Rr                  5      r: " S S \5      r;S*S! jr<S+S" jr= " S# S$\5      r>S+S% jr?S& r@S+S' jrAg! \( a    Sr' N¡f = f),é    N)Ú	dataclass)ÚValue)ÚImage)ÚDatasetÚ
DataLoaderÚSubsetRandomSamplerÚIterableDatasetÚget_worker_info)ÚDistributedSampler)Ú_shuffle)Úbase_plus_extÚ
url_openerÚtar_file_expanderÚvalid_samplec                   ó*   • \ rS rSrSS jrS rS rSrg)Ú
CsvDataseté   Nc                 ó   • [         R                  " SU S35        [        R                  " XS9nXs   R	                  5       U l        Xt   R	                  5       U l        X l        [         R                  " S5        X`l        g )NzLoading csv data from Ú.)ÚsepzDone loading data.)	ÚloggingÚdebugÚpdÚread_csvÚtolistÚimagesÚcaptionsÚ
transformsÚtokenize)ÚselfÚinput_filenamer   Úimg_keyÚcaption_keyr   Ú	tokenizerÚdfs           Ú¢C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\open_clip_train/data.pyÚ__init__ÚCsvDataset.__init__   sb   € Ü�ŠÐ.¨~Ð.>¸aÐ@ÔAÜ�[Š[˜Ñ1ˆà‘k×(Ñ(Ó*ˆŒØ™×.Ñ.Ó0ˆŒØ$ŒÜ�ŠÐ*Ô+à!�ó    c                 ó,   • [        U R                  5      $ ©N)Úlenr   ©r    s    r&   Ú__len__ÚCsvDataset.__len__)   s   € Ü�4—=‘=Ó!Ð!r)   c                 óÔ   • U R                  [        R                  " [        U R                  U   5      5      5      nU R                  [        U R                  U   5      /5      S   nX#4$ ©Nr   )r   r   ÚopenÚstrr   r   r   )r    Úidxr   Útextss       r&   Ú__getitem__ÚCsvDataset.__getitem__,   sS   € Ø—‘¤§¢¬C°·±¸CÑ0@Ó,AÓ!BÓCˆØ—‘œs 4§=¡=°Ñ#5Ó6Ð7Ó8¸Ñ;ˆØˆ}Ðr)   )r   r   r   r   )Ú	N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r'   r.   r6   Ú__static_attributes__© r)   r&   r   r      s   † ô	"ò"õr)   r   c                   ó2   • \ rS rSrSS\4S jjrS rS rSrg)	ÚSharedEpoché2   Úepochc                 ó&   • [        SU5      U l        g )NÚi)r   Úshared_epoch©r    rC   s     r&   r'   ÚSharedEpoch.__init__3   s   € Ü! # uÓ-ˆÕr)   c                 ó$   • XR                   l        g r+   ©rF   ÚvaluerG   s     r&   Ú	set_valueÚSharedEpoch.set_value6   s   € Ø"'×ÑÕr)   c                 ó.   • U R                   R                  $ r+   rJ   r-   s    r&   Ú	get_valueÚSharedEpoch.get_value9   s   € Ø× Ñ ×&Ñ&Ð&r)   )rF   N©r   )	r:   r;   r<   r=   Úintr'   rL   rO   r>   r?   r)   r&   rA   rA   2   s   † ñ.˜cõ .ò(õ'r)   rA   c                   óB   • \ rS rSr% \\S'   Sr\\S'   Sr\	\S'   S r
Srg)ÚDataInfoé=   Ú
dataloaderNÚsamplerrF   c                 óæ   • U R                   b  U R                   R                  U5        U R                  b<  [        U R                  [        5      (       a  U R                  R                  U5        g g g r+   )rF   rL   rW   Ú
isinstancer   Ú	set_epochrG   s     r&   rZ   ÚDataInfo.set_epochC   sX   € Ø×ÑÑ(Ø×Ñ×'Ñ'¨Ô.Ø�<‰<Ñ#¬
°4·<±<ÔAS×(TÑ(TØ�L‰L×"Ñ" 5Õ)ð )UÐ#r)   r?   )r:   r;   r<   r=   r   Ú__annotations__rW   r   rF   rA   rZ   r>   r?   r)   r&   rT   rT   =   s"   ‡ àÓØ"&€GÐÓ&Ø $€L�+Ó$õ*r)   rT   c                 ój  • Uc#  [         R                  R                  U 5      nUS 4$ [        U [        5      (       aá  U R                  S5      nUR                  S5      n[        U5      [        U5      :X  d    S[        U5       S[        U5       S35       eU Vs/ s H  n[        U5      PM     nn/ / pe[        X15       HW  u  pt[        [        R                  " U5      5      nU V	s/ s H  o”PM     n
n	UR                  U5        UR                  U
5        MY     XV4$ [        U 5      nXQ4$ s  snf s  sn	f )Nz::z(Expected the number of data components (z) and weights(z) to match.)ÚwdsÚ
shardlistsÚexpand_urlsrY   r3   Úsplitr,   ÚfloatÚzipÚlistÚbraceexpandÚextend)ÚurlsÚweightsÚexpanded_urlsÚurllistÚweightÚall_urlsÚall_weightsÚurlÚexpanded_urlÚ_Úexpanded_weightss              r&   r`   r`   J   s)  € Ø�ÜŸ™×2Ñ2°4Ó8ˆØ˜dÐ"Ð"Ü�$œ×ÑØ—*‘*˜TÓ"ˆØ—-‘- Ó%ˆÜ�7‹|œs 7›|Ó+ð 	mØ6´s¸7³|°nÀNÔSVÐW^ÓS_ÐR`Ð`kÐló	mÐ+á/6Ó7ªw V”5˜–=©wˆÐ7Ø " B�+Ü˜wÖ0‰KˆCÜ¤× 7Ò 7¸Ó <Ó=ˆLÙ0<Ó=²¨1¢±ÐÐ=Ø�O‰O˜LÔ)Ø×ÑÐ/Ö0ñ	 1ð
 Ð$Ð$ä˜“:ˆØÐ Ð ùò 8ùò  >s   ÂD+Ã'D0c                 óÄ  • [        U 5      u  p[        R                  R                  US   5      n[        R                  R	                  US5      n[        R                  R	                  US5      n[        R                  R                  U5      (       af  [        R                  " [        US5      5      n[        U Vs/ s H.  n[        U[        R                  R                  U5         5      PM0     sn5      nOU[        R                  R                  U5      (       a/  [        R                  " [        US5      R                  5       5      nOS n[        U5      n	X‰4$ s  snf )Nr   z
sizes.jsonr.   Úr)r`   ÚosÚpathÚdirnameÚjoinÚexistsÚjsonÚloadr2   ÚsumrR   ÚbasenameÚastÚliteral_evalÚreadr,   )
ÚshardsÚshards_listrp   Údir_pathÚsizes_filenameÚlen_filenameÚsizesÚshardÚ
total_sizeÚ
num_shardss
             r&   Úget_dataset_sizer‰   `   sù   € Ü  Ó(�N€KÜ�w‰w�‰˜{¨1™~Ó.€HÜ—W‘W—\‘\ (¨LÓ9€NÜ—7‘7—<‘< ¨)Ó4€LÜ	‡w�w‡~�~�n×%Ñ%Ü—	’	œ$˜~¨sÓ3Ó4ˆÜÉ;ÓWÊ;À%œ#˜e¤B§G¡G×$4Ñ$4°UÓ$;Ñ<Ö=É;ÑWÓX‰
Ü	�‰�‰˜×	%Ñ	%ä×%Ò%¤d¨<¸Ó&=×&BÑ&BÓ&DÓE‰
àˆ
ô �[Ó!€JØÐ!Ð!ùò Xs   Â=5Ec                 óD  • US;   d   eUS:H  nUu  pEUS:X  a  SSK Jn  U" U R                  US9nOAU(       a  U R                  nUn	OU R                  nUn	U(       d   e[
        R                  " X‰S9nU(       aà  [        R                  " [        UR                  5      5      n
[        R                  " UR                  5      nSn[        S	5       HR  nX½:H  n[        X®   5      n[        R                  " U5      nS
US U& [        R                  R                  U5        UX®'   MT     U
R                  S5      n
[!        [        R"                  " U
5      S   5      nOS n[$        R&                  R(                  R+                  UU R,                  U R.                  US9n[1        UUS9$ )N)ÚtrainÚvalÚv2r‹   r�   r   )ÚImageNetV2Dataset)ÚlocationÚ	transform)r�   rB   éè  é   rR   )Ú
batch_sizeÚnum_workersrW   )rV   rW   )Úimagenetv2_pytorchrŽ   Úimagenet_v2Úimagenet_trainÚimagenet_valÚdatasetsÚImageFolderÚnpÚzerosr,   ÚtargetsÚarrayÚrangeÚrandomÚshuffleÚastyper   ÚwhereÚtorchÚutilsÚdatar   r“   ÚworkersrT   )ÚargsÚpreprocess_fnsra   Úis_trainÚpreprocess_trainÚpreprocess_valrŽ   ÚdatasetÚ	data_pathÚpreprocess_fnÚidxsÚtarget_arrayÚkÚcÚmÚnÚarrrW   rV   s                      r&   Úget_imagenetr·   v   sl  € ØÐ*Ó*Ð*Ð*Ø˜Ñ€HØ'5Ñ$Ðà�ƒ}Ý8Ù#¨T×-=Ñ-=ÈÑX‰æØ×+Ñ+ˆIØ,‰Mà×)Ñ)ˆIØ*ˆMÞÐˆyä×&Ò& yÑJˆæÜ�xŠxœ˜GŸO™OÓ,Ó-ˆÜ—x’x §¡Ó0ˆØˆÜ�t–ˆAØÑ!ˆAÜ�D‘G“ˆAÜ—(’(˜1“+ˆCØˆC��ˆGÜ�I‰I×Ñ˜cÔ"ØˆD‹Gñ ð �{‰{˜5Ó!ˆÜ%¤b§h¢h¨t£n°QÑ&7Ó8‰àˆä—‘×!Ñ!×,Ñ,ØØ—?‘?Ø—L‘LØð	 -ð €Jô ˜z°7Ñ;Ð;r)   c                 ó¦   • S[         R                  S'   Su  pU  H2  u  p4US-  nU[        U5      -  n[        U5      [        U5      :X  a  M2   e   X4$ )NÚ0Ú	WDS_EPOCH)r   r   r’   )rt   Úenvironr,   )rV   Ú
n_elementsÚ	n_batchesr   r5   s        r&   Úcount_samplesr¾   ¤   s\   € Ø!„B‡J�Jˆ{ÑØ Ñ€JÛ#‰ˆØ�Q‰ˆ	Ø”c˜&“kÑ!ˆ
Ü�6‹{œc %›jÕ(Ð(Ð(ñ $ð Ð Ð r)   c                 ót   • SU ;   nSU ;   =(       d    SU ;   =(       d    SU ;   =(       d    SU ;   nU=(       a    U$ )NÚtxtÚpngÚjpgÚjpegÚwebpr?   )ÚsampleÚhas_captionÚ	has_images      r&   Úfilter_no_caption_or_no_imagerÈ   ®   s=   € Ø˜F‘?€KØ˜&‘×[ E¨V¡O×[°vÀÑ7G×[È6ÐU[ÑK[€IØ×$˜9Ð$r)   c                 óJ   • [         R                  " S[        U 5       S35        g)zTCall in an exception handler to ignore any exception, issue a warning, and continue.zHandling webdataset error (z). Ignoring.T)r   ÚwarningÚrepr)Úexns    r&   Úlog_and_continuerÍ   ´   s   € ä‡O‚OÐ1´$°s³)°¸LÐIÔJØr)   Tc              #   óT  #   • SnU  H‡  n[        U[        5      (       d   eUS   US   p‡U" U5      u  pšU	c  M2  U(       a  U
R                  5       n
Ub  X•S   :w  d  X¥;   a   [        U5      (       a  Uv •  [        X–S   S9nUb  X£;   d  Mƒ  X…U
'   M‰     [        U5      (       a  Uv •  gg7f)zßReturn function over iterator that groups key, value pairs into samples.

:param keys: function that splits the key into key and extension (base_plus_ext)
:param lcase: convert suffixes to lower case (Default value = True)
NÚfnamer¦   Ú__key__Ú__url__)rÐ   rÑ   )rY   ÚdictÚlowerr   )r¦   ÚkeysÚlcaseÚsuffixesÚhandlerÚcurrent_sampleÚ
filesamplerÏ   rK   ÚprefixÚsuffixs              r&   Úgroup_by_keys_nothrowrÜ   º   s½   é € ð €NÛˆ
Ü˜*¤d×+Ñ+Ð+Ð+Ø! 'Ñ*¨J°vÑ,>ˆuÙ˜e›‰ˆØ‰>ÙÞØ—\‘\“^ˆFð Ñ! V¸iÑ/HÓ%HÈFÓLdÜ˜N×+Ñ+Ø$Ò$Ü!¨&ÀYÑ:OÑPˆNØÑ˜vÕ1Ø%*˜6Ó"ñ! ô" �N×#Ñ#ØÓð $ùs   ‚BB(Â
B(c                 ó<   • [        XS9n[        X!S9n[        X1S9nU$ )N©r×   )r   r   rÜ   )Úsrcr×   ÚstreamsÚfilesÚsampless        r&   Útarfile_to_samples_nothrowrã   Ö   s%   € ä˜Ñ.€GÜ˜gÑ7€EÜ# EÑ;€GØ€Nr)   c                 ó¸   • [        5       nUb0  UR                  nU (       a  X [        SUR                  5      -  -  nU$ [        R
                  R                  5       $ )z'get dataloader worker seed from pytorchr’   )r
   ÚseedÚmaxr”   r^   r¥   Úpytorch_worker_seed)Ú	incrementÚworker_inforå   s      r&   rç   rç   Þ   sP   € ä!Ó#€KØÑà×ÑˆÞà¤ A {×'>Ñ'>Ó ?Ñ?Ñ?ˆDØˆä�9‰9×(Ñ(Ó*Ð*r)   iÐ  iô  iˆ  r‘   c                   ó,   • \ rS rSr    SS jrS rSrg)Údetshuffle2éò   c                 ó4   • Xl         X l        X0l        X@l        g r+   ©ÚbufsizeÚinitialrå   rC   )r    rï   rð   rå   rC   s        r&   r'   Údetshuffle2.__init__ó   s   € ð ŒØŒØŒ	Ø�
r)   c                 óœ  • [        U R                  [        5      (       a  U R                  R                  5       nO!U =R                  S-  sl        U R                  n[        R
                  " 5       nU R                  S:  a  [        U5      nOU R                  U-   nUR                  U5        [        XR                  U R                  U5      $ )Nr’   r   )rY   rC   rA   rO   r    ÚRandområ   rç   r   rï   rð   )r    rß   rC   Úrngrå   s        r&   ÚrunÚdetshuffle2.runÿ   s�   € Ü�d—j‘j¤+×.Ñ.Ø—J‘J×(Ñ(Ó*‰Eð �JŠJ˜!‰O�JØ—J‘JˆEÜ�mŠm‹oˆØ�9‰9�q‹=ä& uÓ-‰Dð —9‘9˜uÑ$ˆDØ�‰�ŒÜ˜Ÿ\™\¨4¯<©<¸Ó=Ð=r)   )rï   rC   rð   rå   N)r‘   éd   r   éÿÿÿÿ)r:   r;   r<   r=   r'   rõ   r>   r?   r)   r&   rë   rë   ò   s   † ð ØØØô
õ>r)   rë   c                   óT   ^ • \ rS rSrSrS\R                  SSS4U 4S jjrS rSr	U =r
$ )	ÚResampledShards2i  z,An iterable dataset yielding a list of urls.NFrø   c                 óÚ  >• [         TU ]  5         [        X5      u  pXl        X l        U R                  b`  [        U R                  5      [        U R                  5      :X  d4   S[        U R                  5       S[        U R                  5       S35       e[        U R                  S   [        5      (       d   eX0l        [        R                  " 5       U l        X@l        XPl        X`l        g)z{Sample shards from the shard list with replacement.

:param urls: a list of URLs as a Python list or brace notation string
NzNumber of urls z and weights z should match.r   )Úsuperr'   r`   rg   rh   r,   rY   r3   Únshardsr    ró   rô   Úworker_seedÚdeterministicrC   )r    rg   rh   rý   rþ   rÿ   rC   Ú	__class__s          €r&   r'   ÚResampledShards2.__init__  s¼   ø€ ô 	‰ÑÔÜ# DÓ2‰ˆØŒ	ØŒØ�<‰<Ñ#Ü�t—y‘y“>¤S¨¯©Ó%6Ó6ð aØ!¤# d§i¡i£.Ð!1°¼sÀ4Ç<Á<Ó?PÐ>QÐQ_Ð`óaÐ6ä˜$Ÿ)™) A™,¬×,Ñ,Ð,Ð,ØŒÜ—=’=“?ˆŒØ&ÔØ*ÔØ�
r)   c           	   #   óš  #   • [        U R                  [        5      (       a  U R                  R                  5       nO!U =R                  S-  sl        U R                  nU R                  (       aG  U R
                  c  [        U5      nOU R                  5       U-   nU R                  R                  U5        [        U R                  5       H{  nU R                  c0  [        U R                  R                  U R                  5      S9v •  M@  [        U R                  R                  U R                  U R                  SS9S   S9v •  M}     g7f)z#Return an iterator over the shards.r’   N)rn   )rh   r²   r   )rY   rC   rA   rO   rÿ   rþ   rç   rô   rå   rŸ   rý   rh   rÒ   Úchoicerg   Úchoices)r    rC   rå   rp   s       r&   Ú__iter__ÚResampledShards2.__iter__0  së   é € ä�d—j‘j¤+×.Ñ.Ø—J‘J×(Ñ(Ó*‰Eð �JŠJ˜!‰O�JØ—J‘JˆEØ××à×ÑÑ'ä*¨5Ó1‘à×'Ñ'Ó)¨EÑ1�Ø�H‰H�M‰M˜$ÔÜ�t—|‘|Ö$ˆAØ�|‰|Ñ#Ü˜tŸx™xŸ™¨t¯y©yÓ9Ñ:Ô:ä˜tŸx™x×/Ñ/°·	±	À4Ç<Á<ÐSTÐ/ÐUÐVWÑXÑYÔYò	 %ùs   ‚E	E)rÿ   rC   rý   rô   rg   rh   rþ   )r:   r;   r<   r=   Ú__doc__ÚsysÚmaxsizer'   r  r>   Ú__classcell__)r   s   @r&   rú   rú     s,   ø† Ù6ð
 Ø—‘ØØØ÷÷6Zð Zr)   rú   c                 óf  ^• U(       a  U R                   OU R                  nUc   e[        U SS5      =(       a    UnS nU(       a:  U R                  b  U R                  n	O5[	        U5      u  p˜U	(       d  [        S5      eOU R                  =(       d    Sn	[        US9n
U(       a  U R                  b  U(       d   S5       eU(       a  [        UU R                  SU
S9/nO[        R                  " U5      /nU(       a†  U(       dL  UR                  [        [        [        U R                   U
S	9[        R"                  [        R$                  /5        UR                  [&        [        R(                  " [*        [,        S
9/5        O7UR                  [        R$                  [        R.                  " [0        S9/5        UR                  [        R2                  " [4        5      [        R6                  " S[0        S9[        R8                  " SSS9[        R:                  " UU4S jS9[        R<                  " SS5      [        R>                  " U R@                  U(       + S9/5        [        RB                  " U6 nU(       aÐ  U(       dC  U=(       d    [E        [G        U5      S   5      nX€RH                  U RJ                  -  :¼  d   S5       eU(       a  [L        RN                  O[L        RP                  nU R@                  U RJ                  -  nU" Xž-  5      n[S        SU RH                  5      nU" UU-  5      nUU-  nXþ-  n	URU                  U5      nO"[L        RP                  " X�R@                  -  5      n[        RV                  " US SU RH                  U RH                  S:„  S9nUUl,        U	Ul-        []        UU
S9$ )NÚdataset_resampledFz¦Currently, the number of dataset samples must be specified for the training dataset. Please specify it via `--train-num-samples` if no dataset length info is present.r   )rC   zl--train_data_upsampling_factors is only supported when sampling with replacement (with --dataset-resampled).T)rh   rÿ   rC   rî   )rï   rð   rÞ   Úpilrgbzjpg;png;jpeg;webprÀ   )ÚimageÚtextc                 ó   >• T" U 5      S   $ r1   r?   ©r  r$   s    €r&   Ú<lambda>Ú!get_wds_dataset.<locals>.<lambda>‰  s   ø€ ¹YÀt»_ÈQÒ=Or)   r  r  )Úpartialz)number of shards must be >= total workersr’   )r“   r¡   r”   Úpersistent_workers)rV   rF   )/Ú
train_dataÚval_dataÚgetattrÚtrain_num_samplesr‰   ÚRuntimeErrorÚval_num_samplesrA   Útrain_data_upsampling_factorsrú   r^   ÚSimpleShardListrf   rë   Ú_SHARD_SHUFFLE_SIZEÚ_SHARD_SHUFFLE_INITIALrå   Úsplit_by_nodeÚsplit_by_workerrã   r¡   Ú_SAMPLE_SHUFFLE_SIZEÚ_SAMPLE_SHUFFLE_INITIALÚtarfile_to_samplesrÍ   ÚselectrÈ   ÚdecodeÚrenameÚmap_dictÚto_tupleÚbatchedr“   ÚDataPipeliner,   r`   r§   Ú
world_sizeÚmathÚfloorÚceilræ   Ú
with_epochÚ	WebLoaderÚnum_batchesÚnum_samplesrT   )r¨   Úpreprocess_imgrª   rC   r.  r$   Úinput_shardsÚ	resampledrˆ   r3  rF   Úpipeliner­   Úround_fnÚglobal_batch_sizer2  r”   Únum_worker_batchesrV   s        `             r&   Úget_wds_datasetr;  H  s"  ø€ Þ&.�4—?’?°D·M±M€LØÑ#Ð#Ð#Ü˜Ð1°5Ó9×F¸h€Ià€JÞØ×!Ñ!Ñ-Ø×0Ñ0‰Kä&6°|Ó&DÑ#ˆKÞÜ"ðhóið ið ð ×*Ñ*×/¨aˆä UÑ+€Læ�D×6Ñ6ÑBÞð  	Ið  Ió  	IˆyæÜ$ØØ×6Ñ6ØØñ	
ð ‰ô ×'Ò'¨Ó5Ð6ˆö ÞØ�O‰OÜÜ/Ü2ØŸ™Ø&ñ	ô ×!Ñ!Ü×#Ñ#ð	ô 	ð 	�‰ä&Ü�KŠKÜ,Ü/ñð
õ 	ð 	�‰Ü×Ñä×"Ò"Ô+;Ñ<ð
ô 	ð
 ‡O�OÜ�
Š
Ô0Ó1Ü�
Š
�8Ô%5Ñ6Ü�
Š
Ð,°5Ñ9Ü�Š˜>Ô0OÑPÜ�Š�W˜fÓ%Ü�Š�D—O‘O°¬\Ñ:ðô ô ×Ò Ð)€GæÞØ#×H¤s¬;°|Ó+DÀQÑ+GÓ'HˆJØ§¡°·±Ñ!?Ó?ÐlÐAlÓlÐ?æ!&”4—:’:¬D¯I©IˆØ ŸO™O¨d¯o©oÑ=ÐÙ˜{Ñ>Ó?ˆÜ˜!˜TŸ\™\Ó*ˆÙ% k°KÑ&?Ó@ÐØ(¨;Ñ6ˆØ!Ñ5ˆØ×$Ñ$Ð%7Ó8‰ô —i’i ¯o©oÑ =Ó>ˆä—’ØØØØ—L‘LØŸ<™<¨!Ñ+ñ€Jð. )€JÔØ(€JÔä˜z¸ÑEÐEr)   c           
      ó¬  • U(       a  U R                   OU R                  nU(       d   e[        UUU R                  U R                  U R
                  US9n[        U5      nU R                  (       a  U(       a  [        U5      OS nU=(       a    US L n	[        UU R                  U	U R                  SUUS9n
Xzl        [        U
5      U
l        [        X¨5      $ )N)r"   r#   r   r$   T©r“   r¡   r”   Ú
pin_memoryrW   Ú	drop_last)r  r  r   Úcsv_img_keyÚcsv_caption_keyÚcsv_separatorr,   Údistributedr   r   r“   r§   r3  r2  rT   )r¨   r¯   rª   rC   r$   r!   r­   r3  rW   r¡   rV   s              r&   Úget_csv_datasetrD  ¾  sÀ   € Þ(0�T—_’_°d·m±m€NÞÐˆ>ÜØØØ× Ñ Ø×(Ñ(Ø×ÑØñ€Gô �g“,€KØ-1×-=×-=Æ(Ô  Ô)ÐPT€GØ×*˜7 d˜?€GäØØ—?‘?ØØ—L‘LØØØñ€Jð )ÔÜ  ›_€JÔä�JÓ(Ð(r)   c                   ó4   • \ rS rSr     SS jrS rS rSrg)ÚSyntheticDatasetiÜ  Nc                 ó„   ^• Xl         X l        X0l        [        R                  " SU5      U l        X@l        U4S jU l        g )NÚRGBc                 ó   >• T" U 5      S   $ r1   r?   r  s    €r&   r  Ú+SyntheticDataset.__init__.<locals>.<lambda>ì  s   ø€ ©9°T«?¸1Ò+=r)   )r�   Ú
image_sizeÚcaptionr   Únewr  Údataset_sizeÚpreprocess_txt)r    r�   rK  rL  rN  r$   s        `r&   r'   ÚSyntheticDataset.__init__Þ  s4   ø€ ð #ŒØ$ŒØŒÜ—Y’Y˜u jÓ1ˆŒ
Ø(Ôä=ˆÕr)   c                 ó   • U R                   $ r+   )rN  r-   s    r&   r.   ÚSyntheticDataset.__len__î  s   € Ø× Ñ Ð r)   c                 óŒ   • U R                   b  U R                  U R                  5      nWU R                  U R                  5      4$ r+   )r�   r  rO  rL  )r    r4   r  s      r&   r6   ÚSyntheticDataset.__getitem__ñ  s8   € Ø�>‰>Ñ%Ø—N‘N 4§:¡:Ó.ˆEØ�d×)Ñ)¨$¯,©,Ó7Ð7Ð7r)   )rL  rN  r  rK  rO  r�   )N)éà   rU  zDummy captionr÷   Nr9   r?   r)   r&   rF  rF  Ü  s"   † ð Ø!Ø#ØØô>ò !õ8r)   rF  c           
      ó`  • UR                   S   R                  n[        XU R                  US9n[	        U5      nU R
                  (       a  U(       a  [        U5      OS nU=(       a    US L n	[        UU R                  U	U R                  SUUS9n
Xzl
        [	        U
5      U
l        [        X¨5      $ )Nr   )r�   rK  rN  r$   Tr=  )r   ÚsizerF  r  r,   rC  r   r   r“   r§   r3  r2  rT   )r¨   r¯   rª   rC   r$   rK  r­   r3  rW   r¡   rV   s              r&   Úget_synthetic_datasetrX  ÷  s¦   € Ø×)Ñ)¨!Ñ,×1Ñ1€JÜØÀT×E[ÑE[Ðgpñr€Gä�g“,€KØ-1×-=×-=Æ(Ô  Ô)ÐPT€GØ×*˜7 d˜?€GäØØ—?‘?ØØ—L‘LØØØñ€Jð )ÔÜ  ›_€JÔä�JÓ(Ð(r)   c                 óè   • US:X  a  [         $ US:X  a  [        $ US:X  a  [        $ US:X  a;  U R                  S5      S   nUS;   a  [        $ US;   a  [         $ [	        S	U S35      e[	        S
U 35      e)NÚ
webdatasetÚcsvÚ	syntheticÚautor   rø   )r[  Útsv)Útarz;Tried to figure out dataset type, but failed for extension zUnsupported dataset type: )r;  rD  rX  ra   Ú
ValueError)r®   Údataset_typeÚexts      r&   Úget_dataset_fnrc    s“   € Ø�|Ó#ÜÐØ	˜Ó	ÜÐØ	˜Ó	$Ü$Ð$Ø	˜Ó	Ø�o‰o˜cÓ" 2Ñ&ˆØ�.Ó Ü"Ð"Ø�G‹^Ü"Ð"äØMÈcÈUÐRSÐTóVð Vô Ð5°l°^ÐDÓEÐEr)   c                 óŠ  • Uu  pE0 nU R                   (       d  U R                  S:X  a)  [        U R                   U R                  5      " XSX#S9US'   U R                  (       a)  [        U R                  U R                  5      " XSUS9US'   U R                  b  [        XS5      US'   U R                  b  [        XS	5      US
'   U$ )Nr\  T)rª   rC   r$   r‹   F)rª   r$   rŒ   zimagenet-valr�   zimagenet-v2)r  ra  rc  r  r˜   r·   r–   )r¨   r©   rC   r$   r«   r¬   r¦   s          r&   Úget_datare  "  s¼   € Ø'5Ñ$ÐØ€Dà‡‡˜$×+Ñ+¨{Ó:Ü& t§¡¸×8IÑ8IÔJØ¨T¸ñUˆˆW‰ð ‡}‡}Ü$ T§]¡]°D×4EÑ4EÔFØ¨5¸IñGˆˆU‰ð ×ÑÑ$Ü+¨DÀ%ÓHˆˆ^Ñà×ÑÑ#Ü*¨4ÀÓFˆˆ]Ñà€Kr)   r+   rQ   )r   FN)r   N)Br}   ry   r   r-  rt   r    r  re   Údataclassesr   Úmultiprocessingr   Únumpyr›   Úpandasr   r¤   Útorchvision.datasetsr™   rZ  r^   ÚPILr   Útorch.utils.datar   r   r   r	   r
   Útorch.utils.data.distributedr   Úwebdataset.filtersr   Úwebdataset.tariteratorsr   r   r   r   Úhorovod.torchÚhvdÚImportErrorr   rA   rT   r`   r‰   r·   r¾   rÈ   rÍ   rÜ   rã   rç   r  r  r"  r#  ÚPipelineStagerë   rú   r;  rD  rF  rX  rc  re  r?   r)   r&   Ú<module>rt     s9  ðÛ 
Û Û Û Û 	Û Û 
Û Ý !Ý !ã Û Û Ý 'Û Ý ß gÕ gÝ ;Ý 'ß ^Ó ^ðÝô
�ô ÷*'ñ 'ð ÷	*ð 	*ó ð	*ô!ò,"ò,+<ò\!ò%òð &3¸$ÈÐW[ô ð8 -=ô ô+ð Ð ØÐ ØÐ ØÐ ô>�#×#Ñ#ô >ô@3Z�ô 3ZôlsFôl)ô<8�wô 8ô6)ò.Fõ(øðS ó Ø
‚Cðús   Á0D ÄDÄD