Ë
    °ëj³[  ã                   óN  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZmZ dd
lmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' erddl(m)Z)  ejT                  e+«      Z,dZ-dZ.dZ/ddddddddœddde0dee0ef   de0dee0   de1deeee0   e0f      deeee0   e0f      dee2   d e1d!e2fd"„Z3 G d#„ d$e jh                  «      Z5eeef   Z6 G d%„ d&«      Z7d'e7ddde0de0de0f
d(„Z8d'e7d)eee5ee6   f      fd*„Z9d+e6d)dfd,„Z:d-ee6   ddde0de0de0d)dfd.„Z;d+e6ddde0de0de0d)dfd/„Z<d-ee6   ddde0de0de0d)dfd0„Z= G d1„ d2e«      Z>d+e6d)e>fd3„Z?d4d5d)ee6   fd6„Z@d4d5d7e2d)ee6   fd8„ZAd4d5d)ee6   fd9„ZBd:e0d)dfd;„ZCy)<é    N)Údatetime)ÚPath)ÚLock)ÚTYPE_CHECKINGÚListÚOptionalÚTupleÚUnioné   )Ú	constants)ÚCommitOperationAddÚ
UploadInfoÚ_fetch_upload_modes)ÚLocalUploadFileMetadataÚLocalUploadFilePathsÚget_local_upload_pathsÚread_upload_metadata)ÚDEFAULT_REVISIONÚ
REPO_TYPES)ÚDEFAULT_IGNORE_PATTERNSÚfilter_repo_objectsÚtqdm)Ú_format_size)Úsha_fileobj)ÚHfApié
   éK   é–   FTé<   )ÚrevisionÚprivateÚallow_patternsÚignore_patternsÚnum_workersÚprint_reportÚprint_report_everyÚapir   Úrepo_idÚfolder_pathÚ	repo_typer    r!   r"   r#   r$   r%   r&   c                óö  ‡— |€t        d«      ‚|t        vrt        dt        › �«      ‚|€t        }t        ‰«      j	                  «       j                  «       Š‰j                  «       st        d‰› d�«      ‚|€g }nt        |t        «      r|g}|t        z  }|€'t        j                  «       xs d}t        |dz
  d«      }| j                  |||d¬	«      }t        j                  d
|› �«       |j                   }t#        ˆfd„‰j%                  d«      D «       ||¬«      }|D �cg c]  }t'        ‰|«      ‘Œ }}t        j                  dt)        |«      › d�«       t+        |d¬«      D �cg c]  }|t-        ‰|j.                  «      f‘Œ }}t1        |«      }t3        |«      D �cg c]#  }t5        j6                  t8        || |||dœ¬«      ‘Œ% }}|D ]  }|j;                  «        Œ |	rt=        d|j?                  «       z   «       tA        j@                  «       }	 tA        jB                  d«       tA        j@                  «       |z
  |
k\  r/|	rtE        |j?                  «       «       tA        j@                  «       }|jG                  «       rtI        j                  d«       nŒ…|D ]  }|jK                  «        Œ t        j                  |j?                  «       «       tI        j                  d«       yc c}w c c}w c c}w )zŒUpload a large folder to the Hub in the most resilient way possible.

    See [`HfApi.upload_large_folder`] for the full documentation.
    Nz For large uploads, `repo_type` is explicitly required. Please set it to `model`, `dataset` or `space`. If you are using the CLI, pass it as `--repo-type=model`.z"Invalid repo type, must be one of zProvided path: 'z' is not a directoryr   é   T)r(   r*   r!   Úexist_okzRepo created: c              3   ó~   •K  — | ]4  }|j                  «       sŒ|j                  ‰«      j                  «       –— Œ6 y ­w©N)Úis_fileÚrelative_toÚas_posix)Ú.0Úpathr)   s     €úq/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/huggingface_hub/_upload_large_folder.pyú	<genexpr>z/upload_large_folder_internal.<locals>.<genexpr>b   s1   øè ø€ Òi°dÐZ^×ZfÑZfÕZhˆ×	Ñ	˜+Ó	&×	/Ñ	/×	1Ñiùs   ƒ=™$=z**/*)r"   r#   zFound z candidate files to uploadzRecovering from metadata files)Údesc)Ústatusr'   r(   r*   r    )ÚtargetÚkwargsz

zIs done: exiting main loopzUpload is complete!)&Ú
ValueErrorr   r   r   Ú
expanduserÚresolveÚis_dirÚ
isinstanceÚstrr   ÚosÚ	cpu_countÚmaxÚcreate_repoÚloggerÚinfor(   r   Úglobr   Úlenr   r   Úpath_in_repoÚLargeUploadStatusÚrangeÚ	threadingÚThreadÚ_worker_jobÚstartÚprintÚcurrent_reportÚtimeÚsleepÚ_print_overwriteÚis_doneÚloggingÚjoin)r'   r(   r)   r*   r    r!   r"   r#   r$   r%   r&   Únb_coresÚrepo_urlÚfiltered_paths_listÚrelpathÚ
paths_listÚpathsÚitemsr8   Ú_ÚthreadsÚthreadÚlast_report_tss     `                    r5   Úupload_large_folder_internalrc   0   sæ  ø€ ð& ÐÜðIó
ð 	
ð œ
Ñ"ÜÐ=¼j¸\ÐJÓKÐKØÐÜ#ˆä�{Ó#×.Ñ.Ó0×8Ñ8Ó:€KØ×ÑÔÜÐ+¨K¨=Ð8LÐMÓNÐNàÐØ‰Ü	�O¤SÔ	)Ø*Ð+ˆØÔ.Ñ.€OàÐÜ—<‘<“>Ò& QˆÜ˜( Q™,¨Ó*ˆð �‰ w¸)ÈWÐ_cˆÓd€HÜ
‡K�K�.  
Ð+Ô,Ø×Ñ€Gô .Ûi¸k×>NÑ>NÈvÓ>VÔiØ%Ø'ôÐð
 ObÖbÀ7Ô(¨°gÕ>Ðb€JÐbÜ
‡K�K�&œ˜Z›Ð)Ð)CÐDÔEô
 ˜*Ð+KÔLöàð 
Ô$ [°%×2DÑ2DÓEÒFð€Eð ô ˜uÓ%€Fô �{Ó#öð ô 	×ÑÜà ØØ"Ø&Ø$ñö		
ð€Gð ð ò ˆØ�‰�ðñ Üˆf�v×,Ñ,Ó.Ñ.Ô/Ü—Y‘Y“[€NØ
Ü�
‰
�1ŒÜ�9‰9‹;˜Ñ'Ð+=Ò=ÙÜ  ×!6Ñ!6Ó!8Ô9Ü!ŸY™Y›[ˆNØ�>‰>ÔÜ�L‰LÐ5Ô6Øð ð ò ˆØ�‰�ðô ‡K�K�×%Ñ%Ó'Ô(Ü‡L�LÐ&Õ'ùò] cùòùòs   Ä$K,Å*K1Æ#(K6c                   ó¶   — e Zd Z ej                  «       Z ej                  «       Z ej                  «       Z ej                  «       Z ej                  «       Z	y)Ú	WorkerJobN)
Ú__name__Ú
__module__Ú__qualname__ÚenumÚautoÚSHA256ÚGET_UPLOAD_MODEÚPREUPLOAD_LFSÚCOMMITÚWAIT© ó    r5   re   re   œ   sC   „ ØˆT�Y‰Y‹[€FØ�d—i‘i“k€OØ�D—I‘I“K€MØˆT�Y‰Y‹[€FØˆ4�9‰9‹;�Drq   re   c                   ó:   — e Zd ZdZdee   fd„Zdefd„Zde	fd„Z
y)rJ   zBContains information, queues and tasks for a large upload process.r^   c                 óN  — || _         t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        t        «       | _        d| _	        d| _
        d| _        d| _        d| _        d | _        t        j                   «       | _        | j                   D ]Ù  }|\  }}|j$                  €| j                  j'                  |«       Œ0|j(                  €| j                  j'                  |«       ŒX|j(                  dk(  r(|j*                  s| j
                  j'                  |«       Œ�|j,                  s| j                  j'                  |«       Œ·t.        j1                  d|j2                  › d�«       ŒÛ y )Nr   ÚlfszSkipping file z! (already uploaded and committed))r^   ÚqueueÚQueueÚqueue_sha256Úqueue_get_upload_modeÚqueue_preupload_lfsÚqueue_commitr   ÚlockÚnb_workers_sha256Únb_workers_get_upload_modeÚnb_workers_preupload_lfsÚnb_workers_commitÚnb_workers_waitingÚlast_commit_attemptr   ÚnowÚ_started_atÚsha256ÚputÚupload_modeÚis_uploadedÚis_committedrE   ÚdebugrI   )Úselfr^   Úitemr]   Úmetadatas        r5   Ú__init__zLargeUploadStatus.__init__ª   sJ  € ØˆŒ
Ü7<·{±{³}ˆÔÜ@EÇÁÃˆÔ"Ü>C¿k¹k»mˆÔ Ü7<·{±{³}ˆÔÜ“FˆŒ	à&'ˆÔØ/0ˆÔ'Ø-.ˆÔ%Ø&'ˆÔØ'(ˆÔØ48ˆÔ ä#Ÿ<™<›>ˆÔð —J‘Jò 	eˆDØ"‰OˆE�8Ø�‰Ð&Ø×!Ñ!×%Ñ% dÕ+Ø×%Ñ%Ð-Ø×*Ñ*×.Ñ.¨tÕ4Ø×%Ñ%¨Ò.°x×7KÒ7KØ×(Ñ(×,Ñ,¨TÕ2Ø×*Ò*Ø×!Ñ!×%Ñ% dÕ+ä—‘˜~¨e×.@Ñ.@Ð-AÐAbÐcÕdñ	erq   Úreturnc                 ó€  — d}d}d}d}d}d}d}d}d}	d}
d}| j                   5  | j                  D ]±  \  }}|j                  r|
dz  }
Œ|	|j                  z  }	|dz  }|j                  �|dz  }||j                  z  }|j
                  dk(  r|dz  }|j
                  €|dz  }|j                  r|dz  }||j                  z  }|j                  sŒž|dz  }||j                  z  }Œ³ t        |	«      }t        j                  «       }|j                  d«      }|| j                  z
  }t        |«      j                  d«      d   }d}|d|› d	|› d
�z  }|dz  }|dz  }|d|› d|› d	t        |«      › d|› d�	z  }|d|› d|› d	t        |«      › d|› d�	z  }|dkD  r	|d|› d�z  }|d|› d|› d	t        |«      › d|› d�	z  }|d|
› d�z  }|dz  }|d| j                  › d�z  }|d| j                   › d�z  }|d| j"                  › d�z  }|d| j$                  › d�z  }|d| j&                  › d�z  }|dz  }|cddd«       S # 1 sw Y   yxY w)z<Generate a report of the current status of the large upload.r   r   Nrt   z%Y-%m-%d %H:%M:%Sú.z
----------ú z (z) z----------
z	Files:   zhashed ú/z) | zpre-uploaded: ú)z (+z unsure)z | committed: z | ignored: ú
z	Workers: z	hashing: z | zget upload mode: zpre-uploading: zcommitting: z	waiting: z3---------------------------------------------------)r{   r^   Úshould_ignoreÚsizer„   r†   r‡   rˆ   r   r   r‚   Ústrftimerƒ   r@   Úsplitr|   r}   r~   r   r€   )rŠ   Ú	nb_hashedÚsize_hashedÚnb_preuploadedÚnb_lfsÚnb_lfs_unsureÚsize_preuploadedÚnb_committedÚsize_committedÚ
total_sizeÚignored_filesÚtotal_filesr_   rŒ   Útotal_size_strr‚   Únow_strÚelapsedÚelapsed_strÚmessages                       r5   rQ   z LargeUploadStatus.current_reportÉ   s  € àˆ	ØˆØˆØˆØˆØÐØˆØˆØˆ
ØˆØˆà�Y‰Yñ /	Ø#Ÿz™zò 4‘��8Ø×)Ò)Ø! QÑ&�MØØ˜hŸm™mÑ+�
Ø˜qÑ �Ø—?‘?Ð.Ø ‘N�IØ 8§=¡=Ñ0�KØ×'Ñ'¨5Ò0Ø˜a‘K�FØ×'Ñ'Ð/Ø! QÑ&�MØ×'Ò'Ø" aÑ'�NØ$¨¯©Ñ5Ð$Ø×(Ó(Ø  AÑ%�LØ" h§m¡mÑ3‘Nð%4ô& *¨*Ó5ˆNä—,‘,“.ˆCØ—l‘lÐ#6Ó7ˆGØ˜D×,Ñ,Ñ,ˆGÜ˜g›,×,Ñ,¨SÓ1°!Ñ4ˆKà%ˆGØ˜˜7˜) 2 k ]°"Ð5Ñ5ˆGØ�Ñ&ˆGà�{Ñ"ˆGØ˜  ¨1¨[¨M¸¼LÈÓ<UÐ;VÐVWÐXfÐWgÐgkÐlÑlˆGØ˜¨Ð'7°q¸¸ÀÄ<ÐP`ÓCaÐBbÐbcÐdrÐcsÐstÐuÑuˆGØ˜qÒ Ø˜S  ¨xÐ8Ñ8�Ø˜¨ ~°Q°{°mÀ2ÄlÐSaÓFbÐEcÐcdÐesÐdtÐtuÐvÑvˆGØ˜ m _°BÐ7Ñ7ˆGà�{Ñ"ˆGØ˜ 4×#9Ñ#9Ð":¸#Ð>Ñ>ˆGØÐ*¨4×+JÑ+JÐ*KÈ3ÐOÑOˆGØ˜¨×)FÑ)FÐ(GÀsÐKÑKˆGØ˜ d×&<Ñ&<Ð%=¸SÐAÑAˆGØ˜ 4×#:Ñ#:Ð";¸2Ð>Ñ>ˆGØ�xÑˆGà÷_/	÷ /	ò /	ús   £B*H4ÃEH4È4H=c                 ó~   — | j                   5  t        d„ | j                  D «       «      cd d d «       S # 1 sw Y   y xY w)Nc              3   óV   K  — | ]!  \  }}|j                   xs |j                  –— Œ# y ­wr/   ©rˆ   r•   ©r3   r_   rŒ   s      r5   r6   z,LargeUploadStatus.is_done.<locals>.<genexpr>
  s(   è ø€ ÒeÉ;È1Èh�x×,Ñ,ÒF°×0FÑ0FÓFÑeùó   ‚'))r{   Úallr^   ©rŠ   s    r5   rU   zLargeUploadStatus.is_done  s7   € Ø�Y‰Yñ 	fÜÑeÐZ^×ZdÑZdÔeÓe÷	f÷ 	fò 	fús   �3³<N)rf   rg   rh   Ú__doc__r   Ú
JOB_ITEM_Tr�   r@   rQ   ÚboolrU   rp   rq   r5   rJ   rJ   §   s3   „ ÙLðe˜d :Ñ.ó eð>= ó =ð~f˜ô frq   rJ   r8   c                 ó¤  — 	 d}t        | «      }|€y|\  }}|t        j                  k(  rX|d   }	 t        |«       | j                  j                  |«       | j                  5  | xj                  dz  c_        ddd«       �n|t        j                  k(  rÇ	 t!        |||||¬«       |D ]…  }|\  }
}|j"                  rŒ|j$                  dk(  r| j&                  j                  |«       Œ@|j$                  dk(  r| j(                  j                  |«       Œk| j                  j                  |«       Œ‡ | j                  5  | xj*                  dz  c_        ddd«       �n-|t        j,                  k(  r\|d   }	 t/        |||||¬«       | j(                  j                  |«       | j                  5  | xj0                  dz  c_        ddd«       n¾|t        j2                  k(  rU	 t5        |||||¬«       | j                  5  t7        j6                  «       | _        | xj:                  dz  c_        ddd«       nV|t        j<                  k(  rCt7        j>                  t@        «       | j                  5  | xjB                  dz  c_!        ddd«       �Œ‰# t        $ r ‚ t        $ rR}	t        j                  d|	› �«       t        j                  «        | j                  j                  |«       Y d}	~	�Œ”d}	~	ww xY w# 1 sw Y   ŒrxY w# t        $ r ‚ t        $ r7}	t        j                  d|	› �«       t        j                  «        Y d}	~	�Œœd}	~	ww xY w# 1 sw Y   ŒÊxY w# t        $ r ‚ t        $ rR}	t        j                  d	|	› �«       t        j                  «        | j&                  j                  |«       Y d}	~	�Œd}	~	ww xY w# 1 sw Y   �Œ>xY w# t        $ r ‚ t        $ rY}	t        j                  d
|	› �«       t        j                  «        |D ]  }| j(                  j                  |«       Œ Y d}	~	�ŒAd}	~	ww xY w# 1 sw Y   �Œ¹xY w# 1 sw Y   �ŒÆxY w)aª  
    Main process for a worker. The worker will perform tasks based on the priority list until all files are uploaded
    and committed. If no tasks are available, the worker will wait for 10 seconds before checking again.

    If a task fails for any reason, the item(s) are put back in the queue for another worker to pick up.

    Read `upload_large_folder` docstring for more information on how tasks are prioritized.
    Nr   zFailed to compute sha256: r   )r'   r(   r*   r    zFailed to get upload mode: rt   ÚregularzFailed to preupload LFS: zFailed to commit: )"Ú_determine_next_jobre   rk   Ú_compute_sha256rx   r…   ÚKeyboardInterruptÚ	ExceptionrE   ÚerrorÚ	tracebackÚ
format_excrw   r{   r|   rl   Ú_get_upload_moder•   r†   ry   rz   r}   rm   Ú_preupload_lfsr~   rn   Ú_commitrR   r�   r   ro   rS   ÚWAITING_TIME_IF_NO_TASKSr€   )r8   r'   r(   r*   r    Únext_jobÚjobr^   r‹   Úer_   rŒ   s               r5   rN   rN     sâ  € ð ØAEˆô ' vÓ.ˆØÐØØ‰
ˆˆUð ”)×"Ñ"Ò"Ø˜‘8ˆDð.Ü Ô%Ø×,Ñ,×0Ñ0°Ô6ð —‘ñ .Ø×(Ò(¨AÑ-Õ(÷.ñ .ð ”I×-Ñ-Ò-ð'Ü  ¨C¸ÈIÐ`hÕið ò 	;�Ø"‘��8Ø×)Ò)ØØ×'Ñ'¨5Ò0Ø×.Ñ.×2Ñ2°4Õ8Ø×)Ñ)¨YÒ6Ø×'Ñ'×+Ñ+¨DÕ1à×0Ñ0×4Ñ4°TÕ:ð	;ð —‘ñ 7Ø×1Ò1°QÑ6Õ1÷7ñ 7ð ”I×+Ñ+Ò+Ø˜‘8ˆDð5Ü˜t¨°gÈÐ]eÕfØ×#Ñ#×'Ñ'¨Ô-ð —‘ñ 5Ø×/Ò/°1Ñ4Õ/÷5ð 5ð ”I×$Ñ$Ò$ð2Ü˜ 3°À9ÐW_Õ`ð —‘ñ .Ü-1¯Y©Y«[�Ô*Ø×(Ò(¨AÑ-Õ(÷.ð .ð ”I—N‘NÒ"Ü�J‰JÔ/Ô0Ø—‘ñ /Ø×)Ò)¨QÑ.Õ)÷/ñi øô %ò ØÜò .Ü—‘Ð9¸!¸Ð=Ô>Ü×$Ñ$Ô&Ø×#Ñ#×'Ñ'¨×-Ò-ûð.ú÷
.ð .ûô %ò ØÜò 'Ü—‘Ð:¸1¸#Ð>Ô?Ü×$Ñ$×&Ò&ûð'ú÷(7ð 7ûô %ò ØÜò 5Ü—‘Ð8¸¸Ð<Ô=Ü×$Ñ$Ô&Ø×*Ñ*×.Ñ.¨t×4Ò4ûð5ú÷
5ñ 5ûô %ò ØÜò 2Ü—‘Ð1°!°Ð5Ô6Ü×$Ñ$Ô&Ø!ò 2�DØ×'Ñ'×+Ñ+¨DÕ1ö2ûð2ú÷
.ñ .ú÷/ñ /úsž   °&J Á"K2ÂK> Ä<M
Å5+M Æ,N=ÇO
 Ç;/P8É+QÊK/ÊAK*Ë*K/Ë2K;Ë>MÌ,MÍMÍ
MÍN:Í(AN5Î5N:Î=OÏ
P5ÏAP0Ð0P5Ð8QÑQrŽ   c                 ó0  — | j                   5  | j                  dk(  r¥| j                  j                  «       dkD  rˆ| j                  �|t        j
                  «       | j                  z
  dkD  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S | j                  dk(  ru| j                  j                  «       dk\  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S | j                  j                  «       dk\  rY| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  d	«      fcd d d «       S | j                  j                  «       dkD  rg| j                   dk(  rX| xj                   dz  c_        t        j                  d
«       t        j"                  t%        | j                  «      fcd d d «       S | j&                  j                  «       dkD  rg| j(                  dk(  rX| xj(                  dz  c_        t        j                  d«       t        j*                  t%        | j&                  «      fcd d d «       S | j                  j                  «       dkD  rh| j                  dk(  rY| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  d	«      fcd d d «       S | j                  j                  «       dkD  rw| j                   dk(  st,        j.                  sX| xj                   dz  c_        t        j                  d«       t        j"                  t%        | j                  «      fcd d d «       S | j&                  j                  «       dkD  rX| xj(                  dz  c_        t        j                  d«       t        j*                  t%        | j&                  «      fcd d d «       S | j                  j                  «       dkD  rY| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  d	«      fcd d d «       S | j                  dk(  r¥| j                  j                  «       dkD  rˆ| j                  �|t        j
                  «       | j                  z
  dkD  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S | j                  dk(  rù| j                  j                  «       dkD  rÜ| j&                  j                  «       dk(  r¿| j                  j                  «       dk(  r¢| j                  j                  «       dk(  r…| j(                  dk(  rv| j                  dk(  rg| j                   dk(  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S t1        d„ | j2                  D «       «      rt        j5                  d«       	 d d d «       y | xj6                  dz  c_        t        j                  dt8        › d�«       t        j:                  g fcd d d «       S # 1 sw Y   y xY w)Nr   i,  r   z;Job: commit (more than 5 minutes since last commit attempt)r   zJob: commit (>100 files ready)r   z&Job: get upload mode (>10 files ready)é2   z5Job: preupload LFS (no other worker preuploading LFS)z.Job: sha256 (no other worker computing sha256)z:Job: get upload mode (no other worker getting upload mode)zJob: preupload LFSzJob: sha256zJob: get upload moder   z-Job: commit (1 min since last commit attempt)zJob: commitc              3   óV   K  — | ]!  \  }}|j                   xs |j                  –— Œ# y ­wr/   r«   r¬   s      r5   r6   z&_determine_next_job.<locals>.<genexpr>Ð  s(   è ø€ ÒaÁ[ÀQÈ�×&Ñ&Ò@¨(×*@Ñ*@Ó@Ñaùr­   z.All files have been processed! Exiting worker.zNo task available, waiting... (zs))r{   r   rz   Úqsizer�   rR   rE   r‰   re   rn   Ú_get_items_to_commitrx   r}   rl   Ú_get_nry   r~   rm   Ú_get_onerw   r|   rk   r   ÚHF_HUB_ENABLE_HF_TRANSFERr®   r^   rF   r€   r¿   ro   )r8   s    r5   rµ   rµ   t  sÌ  € Ø	�‰ñ c(ð ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×*Ñ*Ð6Ü—	‘	“˜f×8Ñ8Ñ8¸6ÒAà×$Ò$¨Ñ)Õ$Ü�L‰LÐVÔWÜ×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷c(ñ c(ð ×%Ñ%¨Ò*¨v×/BÑ/B×/HÑ/HÓ/JÈcÒ/QØ×$Ò$¨Ñ)Õ$Ü�L‰LÐ9Ô:Ü×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷!c(ñ c(ð& ×)Ñ)×/Ñ/Ó1°RÒ7Ø×-Ò-°Ñ2Õ-Ü�L‰LÐAÔBÜ×-Ñ-¬v°f×6RÑ6RÐTVÓ/WÐX÷-c(ñ c(ð2 ×'Ñ'×-Ñ-Ó/°!Ò3¸×8WÑ8WÐ[\Ò8\Ø×+Ò+¨qÑ0Õ+Ü�L‰LÐPÔQÜ×+Ñ+¬X°f×6PÑ6PÓ-QÐR÷9c(ñ c(ð> × Ñ ×&Ñ&Ó(¨1Ò,°×1IÑ1IÈQÒ1NØ×$Ò$¨Ñ)Õ$Ü�L‰LÐIÔJÜ×$Ñ$¤h¨v×/BÑ/BÓ&CÐD÷Ec(ñ c(ðJ ×)Ñ)×/Ñ/Ó1°AÒ5¸&×:[Ñ:[Ð_`Ò:`Ø×-Ò-°Ñ2Õ-Ü�L‰LÐUÔVÜ×-Ñ-¬v°f×6RÑ6RÐTVÓ/WÐX÷Qc(ñ c(ðX ×'Ñ'×-Ñ-Ó/°!Ò3Ø×+Ñ+¨qÒ0¼	×8[Ò8[à×+Ò+¨qÑ0Õ+Ü�L‰LÐ-Ô.Ü×+Ñ+¬X°f×6PÑ6PÓ-QÐR÷cc(ñ c(ðh × Ñ ×&Ñ&Ó(¨1Ò,Ø×$Ò$¨Ñ)Õ$Ü�L‰L˜Ô'Ü×$Ñ$¤h¨v×/BÑ/BÓ&CÐD÷oc(ñ c(ðt ×)Ñ)×/Ñ/Ó1°AÒ5Ø×-Ò-°Ñ2Õ-Ü�L‰LÐ/Ô0Ü×-Ñ-¬v°f×6RÑ6RÐTVÓ/WÐX÷{c(ñ c(ðB ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×*Ñ*Ð6Ü—	‘	“˜f×8Ñ8Ñ8¸6ÒAà×$Ò$¨Ñ)Õ$Ü�L‰LÐHÔIÜ×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷Qc(ñ c(ðZ ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×#Ñ#×)Ñ)Ó+¨qÒ0Ø×,Ñ,×2Ñ2Ó4¸Ò9Ø×*Ñ*×0Ñ0Ó2°aÒ7Ø×(Ñ(¨AÒ-Ø×1Ñ1°QÒ6Ø×/Ñ/°1Ò4à×$Ò$¨Ñ)Õ$Ü�L‰L˜Ô'Ü×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷qc(ñ c(ôv ÑaÐTZ×T`ÑT`ÔaÔaÜ�K‰KÐHÔIØ÷{c(ð c(ðB ×%Ò%¨Ñ*Õ%Ü�L‰LÐ:Ô;SÐ:TÐTVÐWÔXÜ—N‘N BÐ'÷Gc(÷ c(ò c(ús_   �B+\ÃA:\ÅA,\Æ<A:\É A:\ËA;\Í	B
\ÏA+\ÑA,\ÓB*\Õ<C>\Ú2\Ú?A\Ü\r‹   c                 óä   — | \  }}|j                   €B|j                  j                  d«      5 }t        |«      j	                  «       |_         ddd«       |j                  |«       y# 1 sw Y   ŒxY w)z1Compute sha256 of a file and save it in metadata.NÚrb)r„   Ú	file_pathÚopenr   ÚhexÚsave)r‹   r]   rŒ   Úfs       r5   r¶   r¶   à  s^   € à�O€Eˆ8Ø‡�ÐØ�_‰_×!Ñ! $Ó'ð 	3¨1Ü)¨!›n×0Ñ0Ó2ˆHŒO÷	3à‡M�M�%Õ÷	3ð 	3ús   ­A&Á&A/r^   c                 ó  — | D �cg c]  }t        |«      ‘Œ }}t        ||||j                  «       |¬«       t        | |«      D ]=  \  }}|\  }}	|j                  |	_        |j                  |	_        |	j                  |«       Œ? yc c}w )zmGet upload mode for each file and update metadata.

    Also receive info if the file should be ignored.
    )Ú	additionsr*   r(   Úheadersr    N)	Ú_build_hacky_operationr   Ú_build_hf_headersÚzipÚ_upload_moder†   Ú_should_ignorer•   rÐ   )
r^   r'   r(   r*   r    r‹   rÓ   Úadditionr]   rŒ   s
             r5   r¼   r¼   é  s‘   € ð
 ;@Ö@°$Ô'¨Õ-Ð@€IÐ@ÜØØØØ×%Ñ%Ó'Øõô ˜e YÓ/ò ‰ˆˆhØ‰ˆˆxØ'×4Ñ4ˆÔØ!)×!8Ñ!8ˆÔØ�‰�eÕñ	ùò As   …Bc                 ó€   — | \  }}t        | «      }|j                  ||||g¬«       d|_        |j                  |«       y)z'Preupload LFS file and update metadata.)r(   r*   r    rÓ   TN)rÕ   Úpreupload_lfs_filesr‡   rÐ   )r‹   r'   r(   r*   r    r]   rŒ   rÚ   s           r5   r½   r½   ý  sL   € à�O€Eˆ8Ü% dÓ+€HØ×ÑØØØØ�*ð	 ô ð  €HÔØ‡M�M�%Õrq   c                 ó®   — | D �cg c]  }t        |«      ‘Œ }}|j                  ||||d¬«       | D ]  \  }}d|_        |j                  |«       Œ yc c}w )zCommit files to the repo.z(Add files using upload-large-folder tool)r(   r*   r    Ú
operationsÚcommit_messageTN)rÕ   Úcreate_commitrˆ   rÐ   )	r^   r'   r(   r*   r    r‹   rÓ   r]   rŒ   s	            r5   r¾   r¾     sl   € à:?Ö@°$Ô'¨Õ-Ð@€IÐ@Ø×ÑØØØØØAð ô ð !ò ‰ˆˆxØ $ˆÔØ�‰�eÕñùò As   …Ac                   ó   — e Zd Zdd„Zy)ÚHackyCommitOperationAddNc                 ón   — t        | j                  t        «      rt        | j                  «      | _        y y r/   )r?   Úpath_or_fileobjr   r@   r¯   s    r5   Ú__post_init__z%HackyCommitOperationAdd.__post_init__!  s*   € Ü�d×*Ñ*¬DÔ1Ü#& t×';Ñ';Ó#<ˆDÕ ð 2rq   )rŽ   N)rf   rg   rh   rå   rp   rq   r5   râ   râ      s   „ ô=rq   râ   c                 ó|  — | \  }}t        |j                  |j                  ¬«      }|j                  j                  d«      5 }|j	                  d«      d d }d d d «       |j
                  €t        d«      ‚t        t        j                  |j
                  «      |j                  ¬«      |_        |S # 1 sw Y   Œ\xY w)N)rI   rä   rÌ   i   z&sha256 must have been computed by now!)r„   r–   Úsample)râ   rI   rÍ   rÎ   Úpeekr„   r;   r   ÚbytesÚfromhexr–   Úupload_info)r‹   r]   rŒ   Ú	operationÚfilerç   s         r5   rÕ   rÕ   &  s£   € Ø�O€Eˆ8Ü'°U×5GÑ5GÐY^×YhÑYhÔi€IØ	�‰×	Ñ	˜dÓ	#ð & tØ—‘˜3“  Ð%ˆ÷&à‡�ÐÜÐAÓBÐBÜ&¬e¯m©m¸H¿O¹OÓ.LÐS[×S`ÑS`ÐioÔp€IÔØÐ÷&ð &ús   ÁB2Â2B;ru   zqueue.Queue[JOB_ITEM_T]c                 ó&   —  | j                   «       gS r/   )Úget)ru   s    r5   rÉ   rÉ   6  s   € ØˆE�I‰I‹Kˆ=Ðrq   Únc                 óŽ   — t        t         | j                  «       |«      «      D �cg c]  } | j                  «       ‘Œ c}S c c}w r/   )rK   ÚminrÆ   rï   )ru   rð   r_   s      r5   rÈ   rÈ   :  s2   € Ü!&¤s¨;¨5¯;©;«=¸!Ó'<Ó!=Ö>˜AˆIˆE�I‰I�KÒ>Ð>ùÒ>s   §Ac                 óê   — g }d\  }}	  | j                   «       dk(  r|S |t        k\  s	|t        k\  r|S  | j                  «       }|j	                  |«       |\  }}|j
                  dk(  r|dz  }n|dz  }Œl)zXSpecial case for commit job: the number of items to commit depends on the type of files.)r   r   r   rt   r   )rÆ   ÚMAX_NB_LFS_FILES_PER_COMMITÚMAX_NB_REGULAR_FILES_PER_COMMITrï   Úappendr†   )ru   r^   rœ   Ú
nb_regularr‹   r_   rŒ   s          r5   rÇ   rÇ   >  sŒ   € ð !€EØÑ€FˆJØ
àˆ5�;‰;‹=˜AÒØˆLð Ô0Ò0°JÔBaÒ4aØˆLð ˆu�y‰y‹{ˆØ�‰�TÔØ‰ˆˆ8Ø×Ñ 5Ò(Ø�a‰K‰Fà˜!‰OˆJð! rq   Úreportc                 ó$  ‡— | dz  } t        j                  «       j                  Št        ˆfd„| j	                  «       D «       «      }t        |«      D ]@  }t        j                  j                  d«       t        j                  j                  d«       ŒB t        j                  j                  | «       t        j                  j                  d‰t        | j	                  «       d   «      z
  z  «       t        j                  j                  «        y)z÷Print a report, overwriting the previous lines.

    Since tqdm in using `sys.stderr` to (re-)write progress bars, we need to use `sys.stdout`
    to print the report.

    Note: works well only if no other process is writing to `sys.stdout`!
    r”   c              3   ó@   •K  — | ]  }t        |«      ‰z  d z   –— Œ y­w)r   N)rH   )r3   ÚlineÚterminal_widths     €r5   r6   z#_print_overwrite.<locals>.<genexpr>c  s   øè ø€ ÒS°t”3�t“9 Ñ.°Õ2ÑSùs   ƒz[Kz[Fr‘   éÿÿÿÿN)ÚshutilÚget_terminal_sizeÚcolumnsÚsumÚ
splitlinesrK   ÚsysÚstdoutÚwriterH   Úflush)rø   Únb_linesr_   rü   s      @r5   rT   rT   V  sÉ   ø€ ð ˆd�N€Fä×-Ñ-Ó/×7Ñ7€Nô ÓS¸v×?PÑ?PÓ?RÔSÓS€Hô �8‹_ò #ˆÜ�
‰
×Ñ˜Ô$Ü�
‰
×Ñ˜Õ"ð#ô
 ‡J�J×Ñ�VÔÜ‡J�J×Ñ�S˜N¬S°×1BÑ1BÓ1DÀRÑ1HÓ-IÑIÑJÔKÜ‡J�J×ÑÕrq   )Dri   rV   rA   ru   rþ   r  rL   rR   rº   r   Úpathlibr   r   Útypingr   r   r   r	   r
   Ú r   Ú_commit_apir   r   r   Ú_local_folderr   r   r   r   r   r   Úutilsr   r   r   Úutils._cache_managerr   Ú	utils.shar   Úhf_apir   Ú	getLoggerrf   rE   r¿   rõ   rô   r@   r²   Úintrc   ÚEnumre   r±   rJ   rN   rµ   r¶   r¼   r½   r¾   râ   rÕ   rÉ   rÈ   rÇ   rT   rp   rq   r5   ú<module>r     s  ðó Û Û 	Û Û Û 
Û Û Û Ý Ý Ý ß >Õ >å ß LÑ Lß vÓ vß 3ß EÑ EÝ .Ý "ñ Ýà	ˆ×	Ñ	˜8Ó	$€àÐ Ø"$Ð Ø!Ð ð #ØØ6:Ø7;Ø!%ØØ òd(Ø	ðd(àðd(ð �s˜D�yÑ!ðd(ð
 ðd(ð �s‰mðd(ð ðd(ð ˜U 4¨¡9¨c >Ñ2Ñ3ðd(ð ˜e D¨¡I¨s NÑ3Ñ4ðd(ð ˜#‘ðd(ð ðd(ð ód(ôX�—	‘	ô ð Ð'Ð)@Ð@ÑA€
÷cfñ cfðLd/Øðd/à	ðd/ð ðd/ð ð	d/ð
 ód/ðNd(Ð 1ð d(°h¸uÀYÐPTÐU_ÑP`ÐE`Ñ?aÑ6bó d(ðX˜*ð ¨ó ð˜D Ñ,ð °7ð ÀSð ÐUXð Ðdgð Ðlpó ð(˜ð ¨'ð ¸Cð ÈCð Ð[^ð Ðcgó ð�4˜
Ñ#ð ¨'ð ¸Cð ÈCð Ð[^ð Ðcgó ô(=Ð0ô =ð ð Ð0Gó ð Ð-ð °$°zÑ2Bó ð?Ð+ð ?°ð ?¸¸ZÑ8Hó ?ðÐ 9ð ¸dÀ:Ñ>Nó ð0˜Sð  Tô rq   