§
    ìXÊj@ ã            <       óX  — d 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m	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddl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m Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZO ddlPmQZQmRZRmSZS  e.jT        eU¦  «        ZVdeWdeWdz  deXeWeWdz  f         fd„ZYdeZeW         dz  dedeWdz  deZe$         dz  fd„Z[e G d„ d¦  «        ¦   «         Z\eded eWd!eZeW         dz  d"eZeW         dz  d#eWdz  d$eWdz  d%eWdz  d&eZeW         dz  d'eWdz  d(eZeW         dz  d)eWdz  d*eWdz  d+e]dz  d,eWdz  d-eZeW         dz  d.eZeW         dz  deWdz  d/eWdz  d0eZeW         dz  d1e^de
e\ddf         f*d2„¦   «         Z_d3d4œd(eZeW         dz  d)eWdz  d1e^de`eWeWdz  f         fd5„Zad3d4œd6eZeW         d7e`eWeWdz  f         d1e^de`eWeWdz  f         fd8„Zbd9eZeW         d:eZeW         deXeZeW         eZeW         f         fd;„Zcdddd<œd$eWdz  d*eWdz  deWdz  d&e`eWeWdz  f         d(e`eWeWdz  f         d=eZeW         d/eWdz  d0eZeW         dz  d>eZeW         dz  deZeW         fd?„Zdd@ZedAd3dBœdCe`eWef         dDe	eW         d1e^ddfdE„ZfdFeWdGedDe	eW         deWfdH„ZgdIZheeW eJdJ¬K¦  «        f         ZieeWdz   eKdL¬K¦  «        f         ZjeeWdz   eKdM e>e ¦  «        ¬N¦  «        f         ZkeeZeW         dz   eKdOdPdQ¬K¦  «        f         ZleeWdz   eKdRdS¬K¦  «        f         ZmeeWdz   eKdT¬K¦  «        f         Znee]dz   eKdUddV¬W¦  «        f         Zoee^ eKdXdYdZ¬K¦  «        f         Zpee^ eKd[d\¬K¦  «        f         ZqeeWdz   eKd]¬K¦  «        f         ZreeWdz   eKd^d_¬K¦  «        f         ZseeZe]         dz   eKd`da¬K¦  «        f         ZteeZe]         dz   eKdbdc¬K¦  «        f         Zuee^ eKddde¬K¦  «        f         ZveeWdz   eKdfdg¬K¦  «        f         ZweeZeW         dz   eKdhdi¬K¦  «        f         ZxeeZeW         dz   eKdjdk¬K¦  «        f         ZyeeWdz   eKdldmdn¬K¦  «        f         Zzee^dz   eKdo¬K¦  «        f         Z{ee^dz   eKdp¬K¦  «        f         Z|eeW eJdq¬K¦  «        f         Z}eeW eJdr¬K¦  «        f         Z~eeZeW         dz   eJds¬K¦  «        f         ZeeZeW          eJdt¬K¦  «        f         Z€eeW eJdu¬K¦  «        f         Z�eeZeW         dz   eJdv¬K¦  «        f         Z‚eeW eJdw¬K¦  «        f         ZƒeeZeW         dz   eKdxdydz¬K¦  «        f         Z„ eHd{¬K¦  «        Z…ded|e!ddfd}„Z†ded|e!d~e^ddfd„Z‡e… ˆ                    d€d�d‚ig dƒ¢¬„¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dd#eid…e€d&e8d(e=d,emd-eld.e„d'e7d)e<d$ekd*end+eod~epd1eqd†etd‡eudˆevd/ewd‰exdŠesderd‹eAdŒe9d�e:dŽe;ddf4d�„¦   «         Z‰e… ˆ                    d�g d‘¢¬’¦  «        	 	 	 	 �dde�d“ee^ eKd”d•d–¬K¦  «        f         d—ee]dz   eKd˜d™dš¬K¦  «        f         derd‹eAddfd›„¦   «         ZŠdœe]ddfd�„Z‹deWdže`eWef         dŸeZeW         deZeZeWe]z                    fd „ZŒdeWd¡ee`eWef                  dŸeZeW         deeXe^eWeZeZeWe]z                    f                  fd¢„Z�e… ˆ                    d£g d¤¢¬’¦  «        	 	 	 	 �dd¥e‚d“ee^ eKd”d•d¦¬K¦  «        f         derd‹eAddf
d§„¦   «         ZŽe… ˆ                    d¨g d©¢¬’¦  «        	 	 	 	 	 	 	 �dd«ee^ eKd¬d­d®¬K¦  «        f         d¯eeZeW         dz   eKd° e>e#¦  «        d±¬²¦  «        f         d-eeZeW         dz   eKdOdPd³¬K¦  «        f         d,eeWdz   eKdRd´¬K¦  «        f         dµee] eKd¶d·¬K¦  «        f         derd‹eAddfd¸„¦   «         Z�e… ˆ                    d¹dºg¬’¦  «        �d d»„¦   «         Z�e… ˆ                    d¼d½g¬’¦  «        	 	 �d!d¥eeZeW          eJd¾¬K¦  «        f         derd‹eAddfd¿„¦   «         Z‘e… ˆ                    dÀdÁdÂg¬’¦  «        	 	 	 �d"de�d~epderd‹eAddf
dÃ„¦   «         Z’e… ˆ                    d†g dÄ¢¬’¦  «        	 	 	 	 	 �d#de�dÅeeZe]         dz   eJdÆ¬K¦  «        f         dÇeeZe]         dz   eKdÈdÉ¬K¦  «        f         dÊee^ eKdËdÌ¬K¦  «        f         derd‹eAddfdÍ„¦   «         Z“e… ˆ                    dÎdÏg¬’¦  «        	 	 �d!de�derd‹eAddfdÐ„¦   «         Z”e… ˆ                    dÑg dÒ¢¬’¦  «        	 	 	 �d$d¥eeZeW          eJdÓ¬K¦  «        f         d*eeWdz   eKdÔ¬K¦  «        f         derd‹eAddf
dÕ„¦   «         Z•e… ˆ                    dÖg d×¢¬’¦  «        	 	 	 	 	 �d#de�d,emd-eldÊee^ eKdËdØ¬K¦  «        f         derd‹eAddfdÙ„¦   «         Z–e… ˆ                    dˆg dÚ¢¬’¦  «        	 	 	 	 �dde�dÛe@d1e?derd‹eAddfdÜ„¦   «         Z— eHdÝ¬K¦  «        Z˜e… ™                    e˜dÞ¬ß¦  «         e˜ ˆ                    d€d�d‚ig dà¢¬„¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d%d e~d!ed#ejd$ekd&e8d(e=d,emd-eld.e„d'e7d)e<d*end+eod~epd1eqd†etd‡eudˆevd/ewd‰exdŠesderd‹eAdáeyd%ezdŒe9d�e:dŽe;ddf:dâ„¦   «         Zš G dã„ däeWe¦  «        Z› eHdå¬K¦  «        Zœe… ™                    eœdæ¬ß¦  «         eœ ˆ                    d€d�d‚idçg¬„¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d&dèe}d#eid…e€dée{dêe|d&e8d(e=d,emd-eld.e„d'e7d)e<d$ekd*end+eod1eqd†etd‡eudŠesderd‹eAdŒe9d�e:dŽe;ddf2dë„¦   «         Z�eœ ˆ                    d¨g dì¢¬’¦  «        	 	 	 	 	 	 �d'd«ee^ eKd¬d­dí¬K¦  «        f         d¯eeZeW         dz   eKd° e>e›¦  «        dî¬²¦  «        f         d-eeZeW         dz   eKdOdPdï¬K¦  «        f         d,eeWdz   eKdRdð¬K¦  «        f         derd‹eAddfdñ„¦   «         Zžeœ ˆ                    d¼dòg¬’¦  «        	 	 �d!dóeeZeW          eJdô¬K¦  «        f         derd‹eAddfdõ„¦   «         ZŸeœ ˆ                    död÷g¬’¦  «        	 	 �d!døeƒderd‹eAddfdù„¦   «         Z eœ ˆ                    dédúg¬’¦  «        	 	 �d!døeƒderd‹eAddfdû„¦   «         Z¡eœ ˆ                    düdýg¬’¦  «        	 	 �d!døeƒderd‹eAddfdþ„¦   «         Z¢eœ ˆ                    dÿ�d g¬’¦  «        	 	 �d!døeƒdèe}derd‹eAddf
�d„¦   «         Z£eœ ˆ                    �d�dg¬’¦  «        	 	 �d!døeƒderd‹eAddf�d„¦   «         Z¤eœ ˆ                    dÖg �d¢¬’¦  «        	 	 	 	 	 �d#døeƒd,emd-eldÊee^ eKdË�d¬K¦  «        f         derd‹eAddf�d„¦   «         Z¥ eH�d¬K¦  «        Z¦eœ ™                    e¦dÞ¬ß¦  «         e¦ ˆ                    d€d�d‚i�d	�d
g¬„¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d(dèe}d e~d!edée{dêe|d#ejd$ekd&e8d(e=d,emd-eld.e„d'e7d)e<d*end+eod1eqd†etd‡eudŠesderd‹eAdáeyd%ezdŒe9d�e:dŽe;ddf8�d„¦   «         Z§�de`eWef         dÖe`eWeWf         dz  de`eWef         f�d„Z¨�d)d,eWdz  d-eZeW         dz  dDe	eW         de^f�d„Z©ddßœdÖeZeW         dz  d,eWdz  de`eWeWf         dz  f�d„Zª�deZeZeWe]z                    �deZeW         deWf�d„Z« e�d¦  «        Z¬�dee¬         �de�dee¬         f         �de`ddf�d„Z­�dej®        j¯        �de�dee¬         f         �deZe`         dee¬         f�d„Z°dS (*  z@Contains commands to interact with jobs on the Hugging Face Hub.é    N)ÚCallableÚ
CollectionÚ	GeneratorÚIterable)Úcontextmanager)Ú	dataclassÚfield)ÚEnum)ÚPath)ÚEmptyÚQueue)Ú	AnnotatedÚAnyÚTypeVar)Úurlsplit)ÚHfApiÚJobHardwareÚJobInfoÚ
JobNetworkÚJobStageÚVolumeÚ	constants)ÚDEFAULT_UV_IMAGEÚTERMINAL_JOB_STAGESÚ_default_job_name_from_imageÚ_default_job_name_from_script)ÚCLIError)Úlogging)Ú_format_size©Ú_split_mount)Úformat_durationÚparse_durationé   )Ú
EnvFileOptÚEnvOptÚ	FormatOptÚJsonOptÚQuietOptÚSecretsFileOptÚ
SecretsOptÚ
SoftChoiceÚSshDryRunOptÚSshIdentityFileOptÚTokenOptÚ_get_extended_environÚexec_sshÚ
get_hf_apiÚparse_env_mapÚparse_volumesÚset_output_formatÚtyper_factory)ÚArgumentÚOption)ÚOutputFormatÚ_dataclass_to_dictÚout)Ú
TABLE_NAMEÚUvScriptHeaderÚload_uv_scriptÚjob_idÚ	namespaceÚreturnc                 ó0  — | st          d¦  «        ‚|                      d¦  «        dk    rt          d| › d�¦  «        ‚d| vr| |fS |                      dd¦  «        \  }}|r|st          d| › d�¦  «        ‚|�||k    rt          d|› d|› d	�¦  «        ‚||fS )
a&  Extract namespace from job_id if provided in 'namespace/job_id' format.

    Allows users to pass job IDs copied from the Hub UI (e.g. 'username/job_id')
    instead of only bare job IDs. If the namespace is also provided explicitly via
    --namespace and conflicts, a CLIError is raised.
    zJob ID cannot be empty.ú/r$   z<Job ID must be in the form 'job_id' or 'namespace/job_id': 'z'.Nz(Conflicting namespace: got --namespace='z ' but job ID implies namespace='ú')r   ÚcountÚsplit)r?   r@   Úextracted_namespaceÚparsed_job_ids       úIC:\Projects\Historical\venv\Lib\site-packages\huggingface_hub/cli/jobs.pyÚ_parse_namespace_from_job_idrJ   H   sð   € ð ð 2ÝÐ0Ñ1Ô1Ð1à‡|‚|�CÑÔ˜1ÒÐÝÐ`ÐV\Ð`Ð`Ð`ÑaÔaÐaà
�&ÐÐØ�yÐ Ð à)/¯ª°c¸1Ñ)=Ô)=Ñ&Ð˜Øð b mð bÝÐ`ÐV\Ð`Ð`Ð`ÑaÔaÐaàÐ Ð.AÒ!AÐ!AÝØx°yÐxÐxÐbuÐxÐxÐxñ
ô 
ð 	
ð Ð-Ð-Ð-ó    ÚvolumesÚapic                óT  — | sdS g }| D �]}|                      t          j        ¦  «        r&|                     t	          |g¦  «        pg ¦  «         ŒHt          ||¬¦  «        \  }}}|€t          d|› d�¦  «        ‚t          |¦  «                             ¦   «          	                    ¦   «         st          d|› d�¦  «        ‚| 
                    |||�|nd|¬¦  «        }|j        d	u r*t          j        d
|› d|j        › d|j        › d|› �¦  «         |                     |¦  «         �Œ|S )a  Parse `-v` specs for Jobs commands.

    Same as [`parse_volumes`] but the source side can also be a local directory: it is synced to a
    bucket via [`HfApi.sync_job_volume`] and the resulting bucket subfolder is mounted (read-only
    unless ':rw' is specified).
    N©Úrawz#Missing mount path in volume spec 'zC'. Expected 'LOCAL_DIR:/MOUNT_PATH[:ro|:rw]' (e.g. './data:/data').zVolume source 'z�' is not an existing local directory. To mount a repo or bucket instead, use the 'hf://' syntax (e.g. 'hf://buckets/my-org/my-bucket:/data').T)Ú	read_onlyr@   FzVolume 'zg' is mounted read-write. Once the job is over, pull back its data with:
  hf buckets sync hf://buckets/rC   ú )Ú
startswithr   ÚHF_PROTOCOLÚextendr4   r!   r   r   Ú
expanduserÚis_dirÚsync_job_volumerQ   r;   ÚhintÚsourceÚpathÚappend)	rL   rM   r@   ÚresultÚraw_specrZ   Ú
mount_pathrQ   Úvolumes	            rI   Ú_parse_and_sync_job_volumesra   d   s¹  € ð ð Øˆtà€FØð ñ ˆØ×Ò�yÔ4Ñ5Ô5ð 	Ø�MŠM�-¨¨
Ñ3Ô3Ð9°rÑ:Ô:Ð:Øõ )5°XÀ8Ð(LÑ(LÔ(LÑ%ˆ�
˜IØÐÝð D°hð  Dð  Dð  Dñô ð õ �F‰|Œ|×&Ò&Ñ(Ô(×/Ò/Ñ1Ô1ð 	Ýðz &ð zð zð zñô ð ð ×$Ò$ØØØ#,Ð#8�i�i¸dØð	 %ñ 
ô 
ˆð Ô˜uÐ$Ð$ÝŒHðY˜:ð Yð YØ28´-ðYð YØBHÄ+ðYð YØPVðYð Yñô ð ð 	�Š�fÑÔÐÑØ€MrK   c                   ó  — e Zd ZU dZeed<   	  ee¬¦  «        Zee         ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZedz  ed	<   dZedz  ed
<   dZedz  ed<    ee¬¦  «        Zeeedz  f         ed<    ee¬¦  «        Zeeedz  f         ed<    ee¬¦  «        Zeeef         ed<    ee¬¦  «        Zee         ed<   dZee         dz  ed<    ee¬¦  «        Zee         ed<    ee¬¦  «        Zee         ed<   dS )Ú_UvJobConfigzeResolved launch configuration of a UV Job: CLI flags merged with the script's `[tool.hf-jobs]` table.Úscript)Údefault_factoryÚscript_argsNÚimageÚflavorÚpythonÚtimeoutr@   Únetwork_groupÚenvÚsecretsÚlabelsÚvolume_specsrL   Únetwork_aliasesÚfrom_script)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r	   Úlistrf   rg   rh   ri   rj   r@   rk   Údictrl   rm   rn   ro   rL   r   rp   Úsetrq   © rK   rI   rc   rc   �   s²  € € € € € € àoÐoà€K€K�KØqà"˜U°4Ð8Ñ8Ô8€K��c”Ð8Ð8Ñ8Ø€Eˆ3�‰:ÐÐÑØ€FˆC�$‰JÐÐÑØ€FˆC�$‰JÐÐÑØ€GˆS�4‰ZÐÐÑØ €Iˆs�T‰zÐ Ð Ñ Ø $€M�3˜‘:Ð$Ð$Ñ$Ø!& °tÐ!<Ñ!<Ô!<€Cˆˆc�3˜‘:ˆoÔ	Ð<Ð<Ñ<Ø%* U¸4Ð%@Ñ%@Ô%@€GˆT�#�s˜T‘z�/Ô"Ð@Ð@Ñ@Ø"˜U°4Ð8Ñ8Ô8€FˆD��c�ŒNÐ8Ð8Ñ8Ø#˜e°DÐ9Ñ9Ô9€L�$�s”)Ð9Ð9Ñ9Ø#'€GˆT�&Œ\˜DÑ Ð'Ð'Ñ'Ø!& °tÐ!<Ñ!<Ô!<€O�T˜#”YÐ<Ð<Ñ<à!˜E°#Ð6Ñ6Ô6€K��S”Ð6Ð6Ñ6Ø`Ð`rK   rc   rd   rf   Údependenciesrg   rh   ri   rl   Úenv_filerm   Úsecrets_filerj   ÚattemptsÚnameÚlabelr`   rk   rp   Údry_runc              #   ó  ‡‡‡‡ K  — t          |¦  «        5 }|j        pt          ¦   «         Št          ¦   «         Šdt          dt          dz  dt          dz  fˆˆfd„} |d|¦  «        } |d|¦  «        } |d|¦  «        } |d	|¦  «        } |d
|¦  «        } |d|¦  «        }|s#‰j        r‰                     d¦  «         ‰j        }t          ||¦  «        Šˆfd„‰j         	                    ¦   «         D ¦   «         }‰ 
                    d„ |D ¦   «         ¦  «         i |¥‰¥Št          |	|
|¬¦  «        }t          ‰j        ||¬¦  «        }‰ 
                    d„ |D ¦   «         ¦  «         i |¥|¥}t          ||¬¦  «        pi Š i ‰j        ¥‰j        �	d‰j        ini ¥}ˆ fd„| 	                    ¦   «         D ¦   «         }‰ 
                    d„ |D ¦   «         ¦  «         i |¥‰ ¥Š t#          |pg ‰j        ¦  «        \  }}‰ 
                    d„ |D ¦   «         ¦  «         t'          |j        |pg ||||||‰|‰ ||rdnt+          || |¬¦  «        |pg ‰¬¦  «        }d|j        vrŠt-          ||j        t1          |j        |j        |j        |j        |j        |j        |j        |j        |j        pt>          |j         pdg|pg ¢|�t	          |¦  «        gng ¢¬¦	  «	        ¬¦  «        |j        d<   |V — ddd¦  «         dS # 1 swxY w Y   dS )aw  Merge the CLI flags with the `[tool.hf-jobs]` table the script carries, if any.

    An explicit CLI flag always wins over the script; `env`, `labels`, `secrets` and `volumes` are merged
    entry by entry (by key, by name and by mount path respectively), so a script value and a CLI value
    only ever conflict when they target the same entry. `network_aliases` is the exception: the aliases
    a Job claims form a set, so `--network-alias` replaces the script's list rather than adding to it.

    A URL script is downloaded to a temporary file that lives until the `with` block exits: submit the
    Job inside the block.
    ÚkeyÚ	cli_valueNrA   c                 ób   •— |�|S t          ‰| ¦  «        x}�‰                     | ¦  «         |S dS )z2Keep the CLI value, and fall back to the script's.N)ÚgetattrÚadd)r„   r…   Úscript_valuerq   Úheaders      €€rI   Úpickz$_resolve_uv_job_config.<locals>.pickÏ   sA   ø€ àÐ$Ø Ð Ý '¨°Ñ 4Ô 4Ð4�ÐAØ—’ Ñ$Ô$Ð$Ø#Ð#Ø�4rK   rg   rh   ri   rj   r@   rk   rp   c                 ó$   •— i | ]\  }}|‰v¯	||“ŒS r{   r{   )Ú.0r„   ÚvalueÚenv_maps      €rI   ú
<dictcomp>z*_resolve_uv_job_config.<locals>.<dictcomp>ä   s*   ø€ Ð\Ð\Ð\¡Z S¨%ÈÐT[ÐI[ÐI[�c˜5ÐI[ÐI[ÐI[rK   c              3   ó    K  — | ]	}d |› �V — Œ
dS )zenv.Nr{   ©r�   r„   s     rI   ú	<genexpr>z)_resolve_uv_job_config.<locals>.<genexpr>å   s(   è è € Ð>Ð>¨C˜< #˜<˜<Ð>Ð>Ð>Ð>Ð>Ð>rK   ©r‚   c              3   ó    K  — | ]	}d |› �V — Œ
dS )zsecrets.Nr{   r’   s     rI   r“   z)_resolve_uv_job_config.<locals>.<genexpr>ê   s+   è è € ÐFÐF°Ð+ cÐ+Ð+ÐFÐFÐFÐFÐFÐFrK   ©r€   r€   c                 ó$   •— i | ]\  }}|‰v¯	||“ŒS r{   r{   )r�   r„   rŽ   Ú
labels_maps      €rI   r�   z*_resolve_uv_job_config.<locals>.<dictcomp>ð   s*   ø€ ÐeÐeÐe©
¨¨UÈsÐZdÐOdÐOd˜˜eÐOdÐOdÐOdrK   c              3   ó    K  — | ]	}d |› �V — Œ
dS )zlabels.Nr{   r’   s     rI   r“   z)_resolve_uv_job_config.<locals>.<genexpr>ñ   s(   è è € ÐDÐD¨s˜? S˜?˜?ÐDÐDÐDÐDÐDÐDrK   c              3   ó    K  — | ]	}d |› �V — Œ
dS )zvolumes.Nr{   ©r�   Úspecs     rI   r“   z)_resolve_uv_job_config.<locals>.<genexpr>õ   s+   è è € ÐMÐM°Ð, dÐ,Ð,ÐMÐMÐMÐMÐMÐMrK   ©rM   r@   )rd   rf   rg   rh   ri   rj   r@   rk   rl   rm   rn   ro   rL   rp   rq   Ú ©	rh   rj   r@   rl   rm   ro   rk   rp   Úextra©Úconfig_parts)!r>   rŠ   r=   rz   rv   rp   rˆ   r3   rl   ÚitemsÚupdateÚ_parse_secrets_mapÚ_resolve_script_secretsrm   Ú_parse_labels_maprn   r€   Ú_merge_volume_specsrL   rc   rd   ra   r   rf   Ú_name_hash_partsrh   rj   r@   ro   rk   rg   r   ri   )!rM   rd   rf   r|   rg   rh   ri   rl   r}   rm   r~   rj   r   r€   r�   r`   r@   rk   rp   r‚   rZ   r‹   Ú
script_envÚsecrets_mapÚscript_secretsÚscript_labelsro   Úscript_volume_specsÚconfigr�   rq   rŠ   r˜   s!                                @@@@rI   Ú_resolve_uv_job_configr°   ©   sB  øøøøè è € õD 
˜Ñ	Ô	ð U 6Ø”Ð2¥.Ñ"2Ô"2ˆÝ #¡¤ˆð	•cð 	¥c¨D¡jð 	µS¸4±Zð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ��W˜eÑ$Ô$ˆØ��h Ñ'Ô'ˆØ��h Ñ'Ô'ˆØ�$�y 'Ñ*Ô*ˆØ�D˜ iÑ0Ô0ˆ	Ø˜˜_¨mÑ<Ô<ˆàð 	5 6Ô#9ð 	5Ø�OŠOÐ-Ñ.Ô.Ð.Ø$Ô4ˆOå  XÑ.Ô.ˆØ\Ð\Ð\Ð\°6´:×3CÒ3CÑ3EÔ3EÐ\Ñ\Ô\ˆ
Ø×ÒÐ>Ð>°:Ð>Ñ>Ô>Ñ>Ô>Ð>Ø+�ZÐ+ 7Ð+ˆå(¨°,ÈÐPÑPÔPˆÝ0°´ÀÐV]Ð^Ñ^Ô^ˆØ×ÒÐFÐF°~ÐFÑFÔFÑFÔFÐFØ7˜Ð7¨;Ð7ˆå& u°4Ð8Ñ8Ô8Ð>¸Bˆ
àg˜6œ=ÐgÀfÄkÐF]¨f°f´kÐ-BÐ-BÐceÐgˆØeÐeÐeÐe°m×6IÒ6IÑ6KÔ6KÐeÑeÔeˆØ×ÒÐDÐD°mÐDÑDÔDÑDÔDÐDØ4˜Ð4¨Ð4ˆ
å,?ÀÀÈ"ÈfÌnÑ,]Ô,]Ñ)ˆÐ)Ø×ÒÐMÐMÐ9LÐMÑMÔMÑMÔMÐMåØ”=Ø#Ð) rØØØØØØ'ØØØØ%à#Ðp�D�DÕ)DÀ\ÐWZÐfoÐ)pÑ)pÔ)pØ+Ð1¨rØ#ð!
ñ 
ô 
ˆð$ ˜œÐ&Ð&õ %BØØÔ"Ý-Ø!œ=Ø"œNØ$Ô.Øœ
Ø"œNØ!'Ô!4Ø"(Ô"6Ø$*Ô$:àœÐ8Õ(8ØœÐ+¨ðð 'Ð,¨"ðð .6Ð-A�3˜x™=œ=˜/˜/Àrð	ðñ ô ð%ñ %ô %ˆFŒM˜&Ñ!ð( ˆˆˆðkUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uð Uð Us   –KK<Ë<L ÌL Fr”   c                óê   ‡‡— t          | |¦  «        Šˆˆfd„| pg D ¦   «         }|r1|s/t          dd                     |¦  «        › d|d         › d�¦  «        ‚i ‰¥t                               |¦  «        ¥S )a7  Parse `--secrets`/`--secrets-file`, failing if a bare `--secrets NAME` is not set locally.

    Same behavior as for the secrets requested by a script (see `_resolve_script_secrets`): a missing secret
    is an error rather than silently dropped, except in `--dry-run` where it is displayed as `<not set>`.
    c                 óL   •— g | ] }d |v¯|                      ¦   «         xŠ‰v¯‰‘Œ!S ©ú=©Ústrip)r�   rŽ   r€   r«   s     €€rI   ú
<listcomp>z&_parse_secrets_map.<locals>.<listcomp>,  s@   ø€ ÐrÐrÐr˜°#¸UÐ2BÐ2BÐPU×P[ÒP[ÑP]ÔP]ÐH]ÈÐfqÐGqÐGqˆtÐGqÐGqÐGqrK   z9The following secret(s) are not set in your environment: ú, ú$. Export them locally (e.g. `export r   ú)=...`) or use `--secrets-file` otherwise.)r3   r   Újoinry   Úfromkeys)rm   r~   r‚   Úmissingr€   r«   s       @@rI   r¥   r¥   #  s®   øø€ õ   ¨Ñ6Ô6€KØrÐrÐrÐrÐr  ¨BÐrÑrÔr€GØð 
�wð 
ÝðhÈÏ	Ê	ÐRYÑHZÔHZð hð hØ29¸!´*ðhð hð hñ
ô 
ð 	
ð 5ˆkÐ4�TŸ]š]¨7Ñ3Ô3Ð4Ð4rK   ÚnamesÚcli_secretsc          	      ó¦  — | si S t          ¦   «         }i }g }| D ],}||v rŒ||v r||         ||<   Œ|                     |¦  «         Œ-|r1|s/t          dd                     |¦  «        › d|d         › d�¦  «        ‚|r:t	          j        dt          › dd                     |¦  «        › d|rd	nd
› d�¦  «         i |¥t                               |¦  «        ¥S )a¤  Resolve the secrets requested by a script from the caller's environment.

    A script only lists secret *names*: values always come from whoever runs it (`HF_TOKEN` also
    resolves from `hf auth login`). A requested secret that is not set locally is an error rather than
    an empty value: forgetting to export a secret before launching is easy, and debugging the Job that
    results from it is not.

    In `--dry-run` a missing secret is not an error but a `None` value, displayed as `<not set>` in the
    summary: nothing is submitted, so the point is to see the full configuration of a script - including
    one whose secrets are not provisioned locally (yet).
    zTThe script requires the following secret(s), which are not set in your environment: r¸   r¹   r   rº   zThe script's [z] table requests z+: the value(s) from your local environment zwould bezwill bez sent to the Job.)	r0   r\   r   r»   r;   Úwarningr<   ry   r¼   )r¾   r¿   r‚   ÚenvironÚresolvedr½   r€   s          rI   r¦   r¦   5  sV  € ð ð Øˆ	Ý#Ñ%Ô%€GØ&(€HØ€GØð !ð !ˆØ�;ÐÐØØ�7ˆ?ˆ?Ø$ Tœ]ˆH�T‰NˆNà�NŠN˜4Ñ Ô Ð Ð Øð 
�wð 
ÝðhÐcg×clÒclÐmtÑcuÔcuð hð hØ29¸!´*ðhð hð hñ
ô 
ð 	
ð ð 
ÝŒðT�Zð Tð T¸$¿)º)ÀHÑ:MÔ:Mð Tð TØ*1Ð@˜J˜J°yðTð Tð Tñ	
ô 	
ð 	
ð 2ˆhÐ1�$Ÿ-š-¨Ñ0Ô0Ð1Ð1rK   Ú	cli_specsÚscript_specsc                 óF   ‡— d„ | D ¦   «         Šˆfd„|D ¦   «         }|| z   |fS )z¢Merge `-v` specs with the ones from the script. Returns `(all specs, specs from the script)`.

    A CLI mount overrides the script's mount at the same path.
    c                 ó<   — h | ]}t          ||¬ ¦  «        d         ’ŒS ©rO   r$   r    r›   s     rI   ú	<setcomp>z&_merge_volume_specs.<locals>.<setcomp>a  s*   € ÐMÐMÐM¸4•| D¨dÐ3Ñ3Ô3°AÔ6ÐMÐMÐMrK   c                 óF   •— g | ]}t          ||¬ ¦  «        d         ‰v¯|‘ŒS rÈ   r    )r�   rœ   Úcli_mount_pathss     €rI   r·   z'_merge_volume_specs.<locals>.<listcomp>b  s6   ø€ ÐdÐdÐd�T­\¸$ÀDÐ-IÑ-IÔ-IÈ!Ô-LÐTcÐ-cÐ-cˆDÐ-cÐ-cÐ-crK   r{   )rÄ   rÅ   ÚkeptrË   s      @rI   r¨   r¨   \  sB   ø€ ð
 NÐMÀ9ÐMÑMÔM€OØdÐdÐdÐd˜\ÐdÑdÔd€DØ�)Ñ˜TÐ!Ð!rK   )rk   rp   r    ro   r    c        	         óÄ   — | pt           j        j        |pd|pd|pdg|pg ¢d„ t          |                     ¦   «         ¦  «        D ¦   «         ¢t          |¦  «        ¢|¢|pg ¢S )a„  The resolved launch values hashed into a Job's default name, on top of its image/script.

    Same inputs for `hf jobs run` and `hf jobs uv run`, so that both name Jobs after what they actually
    submit (`extra` carries what is specific to UV runs). Env *values* are part of the hash since they
    change what the Job does; secrets only contribute their names, never their values.
    rž   c              3   ó*   K  — | ]\  }}|› d |› �V — ŒdS )r´   Nr{   )r�   r„   rŽ   s      rI   r“   z#_name_hash_parts.<locals>.<genexpr>~  s4   è è € Ð	AÐ	A™z˜s EˆSÐ
Ð
�5Ð
Ð
Ð	AÐ	AÐ	AÐ	AÐ	AÐ	ArK   )r   Ú	CPU_BASICrŽ   Úsortedr£   rŸ   s	            rI   r©   r©   f  s’   € ð& 	Ð-•+Ô'Ô-Øˆ�2Øˆ�RØÐ˜ð	
ð
 ˆ+�2ð
ð 
BÐ	A­V°C·I²I±K´KÑ-@Ô-@Ð	AÑ	AÔ	Að
õ 
�‰Œð
ð 
ð
ð Ð
˜Rð
ð 
rK   z (from script)r{   ©rq   r‚   Úvaluesrq   c                ó   ‡‡‡— ˆfd„|                       ¦   «         D ¦   «         }t          d„ |D ¦   «         ¦  «        Šdg}|D ]G\  Š}|‰‰v rt          ndz  }|ˆˆfd„t          |                     d¦  «        ¦  «        D ¦   «         z  }ŒHd                     |¦  «        }|rt          j        |› d�¦  «         dS t          j        |¦  «         dS )	ad  Echo the launch configuration of a Job before submitting it.

    Printed on every run, so that what is sent to the Jobs API is always visible - in particular the
    values injected by a script's `[tool.hf-jobs]` table, which are marked as such. Goes to stderr for a
    real run, and to stdout for `--dry-run`, where it is the output of the command.
    c                 óN   •— g | ]!\  }}|d dg i dfv¯|t          ||‰¦  «        f‘Œ"S )Nrž   F)Ú_format_job_value)r�   r„   rŽ   rq   s      €rI   r·   z&_print_job_summary.<locals>.<listcomp>�  sO   ø€ ð ð ð áˆC�Ø˜˜r 2 r¨5Ð1Ð1Ð1ð 
Õ  U¨KÑ8Ô8Ð9à1Ð1Ð1rK   c              3   ó:   K  — | ]\  }}t          |¦  «        V — Œd S ©N©Úlen)r�   r„   Ú_s      rI   r“   z%_print_job_summary.<locals>.<genexpr>”  s,   è è € Ð,Ð,™V˜S !•�C‘”Ð,Ð,Ð,Ð,Ð,Ð,rK   zJob configuration:rž   c                 ó\   •— g | ](\  }}d |dk    r‰nd                      ‰¦  «        › d |› �‘Œ)S )ú  r   rž   )Úljust)r�   ÚindexÚliner„   Úwidths      €€rI   r·   z&_print_job_summary.<locals>.<listcomp>™  sU   ø€ ð 
ð 
ð 
ÙHSÈÈtÐC˜ !š˜�#�#¨×2Ò2°5Ñ9Ô9ÐCÐC¸TÐCÐCð
ð 
ð 
rK   ú
z
(dry run) Job not submitted.N)	r£   ÚmaxÚ_FROM_SCRIPTÚ	enumeraterF   r»   r;   ÚtextÚlog)	rÒ   rq   r‚   ÚrowsÚlinesrŽ   Úsummaryr„   rà   s	    `     @@rI   Ú_print_job_summaryrê   ˆ  s%  øøø€ ðð ð ð à Ÿ,š,™.œ.ðñ ô €Dõ
 Ð,Ð, tÐ,Ñ,Ô,Ñ,Ô,€EØ!Ð"€EØð 
ð 
‰
ˆˆUØ ¨Ð!3Ð!3•�¸Ñ;ˆàð 
ð 
ð 
ð 
ð 
ÝW`Ðaf×alÒalÐmqÑarÔarÑWsÔWsð
ñ 
ô 
ñ 	
ˆˆð �iŠi˜ÑÔ€GØð ÝŒ�GÐ;Ð;Ð;Ñ<Ô<Ð<Ð<Ð<åŒ�ÑÔÐÐÐrK   r„   rŽ   c                 óð  ‡ ‡— ‰ xdk    rL i }|                      ¦   «         D ]3\  }}|pd}|› dt          |¦  «        dk    r|dd…         dz   n|› �||<   Œ4nnxdk    r  d	„ |                      ¦   «         D ¦   «         }nHxd
k    r  d„ |                      ¦   «         D ¦   «         }n"dk    rd„ |D ¦   «         }n	 t          |¦  «        S d                     ˆˆ fd„|                      ¦   «         D ¦   «         ¦  «        S )zVFormat config entries, redacting secrets and marking values inherited from the script.rl   rž   r´   é<   Né;   u   â€¦rm   c                 ó,   — i | ]\  }}||› d |�dnd› �“ŒS )r´   Nz***z	<not set>r{   ©r�   r€   Úitems      rI   r�   z%_format_job_value.<locals>.<dictcomp>­  s8   € ÐtÐtÐtÑXbÐX\Ð^b�t ÐSÐS°Ð0@ u uÀkÐSÐSÐtÐtÐtrK   rn   c                 ó$   — i | ]\  }}||› d |› �“ŒS r³   r{   rï   s      rI   r�   z%_format_job_value.<locals>.<dictcomp>¯  s,   € ÐNÐNÐN±*°$¸�t Ð-Ð- tÐ-Ð-ÐNÐNÐNrK   rL   c                 ó   — i | ]}||“ŒS r{   r{   r›   s     rI   r�   z%_format_job_value.<locals>.<dictcomp>±  s   € Ð4Ð4Ð4 d�t˜TÐ4Ð4Ð4rK   rá   c              3   óH   •K  — | ]\  }}|‰› d |› �‰v rt           ndz   V — ŒdS )ú.rž   N)rã   )r�   r€   rå   rq   r„   s      €€rI   r“   z$_format_job_value.<locals>.<genexpr>´  sH   øè è € ÐwÐwÑYcÐY]Ð_c�T°¨_¨_°d¨_¨_ÀÐ-KÐ-K�\˜\ÐQSÑTÐwÐwÐwÐwÐwÐwrK   )r£   rÙ   rv   r»   )r„   rŽ   rq   Úentriesr€   rð   rå   s   ` `    rI   rÕ   rÕ   £  s6  øø€ à
ØˆUŠUˆUˆUàˆGØ#Ÿkšk™mœmð Zð Z‘
��dØ�z˜r�Ø#'Ð YÐ Y½sÀ4¹y¼yÈ2º~¸~¨$¨s°¨s¬)°eÑ*;Ð*;ÐSWÐ YÐ Y�˜‘�ðZð ˆYŠYˆYˆYØtÐtÐfk×fqÒfqÑfsÔfsÐtÑtÔtˆGˆGØˆXŠXˆXˆXØNÐNÀÇÂÁÄÐNÑNÔNˆGˆGØŠYˆYØ4Ð4¨eÐ4Ñ4Ô4ˆGˆGØÝ�u‘:”:ÐØ�9Š9ÐwÐwÐwÐwÐwÐgn×gtÒgtÑgvÔgvÐwÑwÔwÑwÔwÐwrK   gš™™™™™¹?zThe Docker image to use.)Úhelpz.Use a custom Docker image with `uv` installed.zcFlavor for the hardware. Run 'hf jobs hardware' to list available flavors. Defaults to `cpu-basic`.)rö   Ú
click_typez-lz--labelz3Set labels. E.g. --label KEY=VALUE or --label LABELz--namez¦Name the Job. Stored as the `name` label. Names do not have to be unique. Defaults to the image or script name plus a short hash of the resolved launch configuration.zPMax duration: int with s (seconds, default), m (minutes), h (hours) or d (days).z
--attemptsz9Maximum attempts, including the first run. Defaults to 1.)Úminrö   z-dz--detachz3Run the Job in the background and print the Job ID.z	--dry-runz@Print the resolved Job configuration without submitting the Job.zVThe namespace where the job will be running. Defaults to the current user's namespace.z--resource-group-idzŸThe ID of the resource group to create the Job in. Used to control access to resources within an organization and for cost attribution/spending-limit features.z--exposez÷Expose a container port through the jobs proxy. Repeat the flag for multiple ports (e.g. `--expose 8000 --expose 8001`). Each exposed port is reachable on the public jobs domain; access requires an HF token with read access to the job's namespace.z--expose-publicz™Expose a container port through the jobs proxy without authentication. Repeat the flag for multiple ports. No need to also pass the port with `--expose`.z--sshz Make the job's container reachable over SSH. Connect with `hf jobs ssh <job_id>`. Requires an SSH public key registered on https://huggingface.co/settings/keys.z--network-groupa  Join a network group. Jobs in the same namespace and resource group sharing a group are placed together and reach each other on every port. Inside each member, `$HF_NETWORK_GROUP_HOSTNAME` resolves to every member. Lowercase alphanumerics and dashes, 46 characters max.z--network-aliaszþClaim an alias in the network group. Members reach the jobs claiming it at `${HF_NETWORK_GROUP_PREFIX}<alias>`. Repeat the flag for several aliases. Lowercase alphanumerics and dashes, 34 characters max, unique within the job. Requires `--network-group`.z--withz%Run with the given packages installedz-pz--pythonz5The Python interpreter to use for the run environmentz!Suspend (pause) the scheduled Jobz8Allow multiple instances of this Job to run concurrentlyz]One of @annually, @yearly, @monthly, @weekly, @daily, @hourly, or a CRON schedule expression.z$UV script to run (local file or URL)zArguments for the scriptzThe command to run.zJob ID (or 'namespace/job_id')zJob IDs (or 'namespace/job_id')z2Scheduled Job ID (or 'namespace/scheduled_job_id')z-vz--volumeaÓ  Mount one or more volumes. Format: hf://[TYPE/]SOURCE:/MOUNT_PATH[:ro|:rw] or LOCAL_DIR:/MOUNT_PATH[:ro|:rw]. TYPE is one of: models, datasets, spaces, buckets. TYPE defaults to models if omitted. models, datasets and spaces are always mounted read-only. buckets are read+write by default. A local directory source is first synced to a bucket and mounted read-only by default. E.g. -v hf://datasets/org/ds:/data or -v hf://buckets/org/b:/mnt:ro or -v ./inputs:/inputszRun and manage Jobs on the Hub.Újobc                 óÄ  — |                       |j        |j        j        d¬¦  «        D ]}t	          j        |¦  «         Œ|                      |j        |j        j        ¬¦  «        }|j        j        t          j
        k    rD|j        j        rd|j        j        › �nd}t          d|j        › d|j        j        › d|› �¦  «        ‚t	          j        d|j        › d	�¦  «         d
S )zcStream Job logs until the Job ends, then fail the command if the Job did not complete successfully.T©r?   r@   Úfollow©r?   r@   z: rž   zJob z finished with stage 'rD   z
 completedN)Úfetch_job_logsÚidÚownerr€   r;   rå   Úwait_for_jobÚstatusÚstager   Ú	COMPLETEDÚmessager   )rM   rù   ræ   Úfinalr  s        rI   Ú_stream_logs_and_check_statusr  ™  sâ   € à×!Ò!¨¬¸3¼9¼>ÐRVÐ!ÑWÔWð ð ˆÝŒ�‰Œˆˆà×Ò C¤F°c´i´nÐÑEÔE€EØ„|Ô�XÔ/Ò/Ð/Ø16´Ô1EÐMÐ-�u”|Ô+Ð-Ð-Ð-È2ˆÝÐ\˜eœhÐ\Ð\¸e¼lÔ>PÐ\Ð\ÐSZÐ\Ð\Ñ]Ô]Ð]Ý„HÐ(�E”HÐ(Ð(Ð(Ñ)Ô)Ð)Ð)Ð)rK   Údetachc                ón  — |j         j        › d|j        › �}t          |j        j        t          ¦  «        r@d                     d„ |j        j        D ¦   «         ¦  «        }t          j	        d|› �¦  «         t          |j        j
        t          ¦  «        rt          j	        d|› d�¦  «         t          |j        t          ¦  «        r'|j        j        }t          j	        d|› d|› d	�¦  «         |r5t          j	        d
|› d|› d�¦  «         t          j	        d|› d�¦  «         dS t          | |¦  «         dS )zZPrint hints about how to reach a started Job, then stream its logs unless `detach` is set.rC   rá   c              3   ó    K  — | ]	}d |› �V — Œ
dS )rÜ   Nr{   )r�   Úurls     rI   r“   z._hint_or_follow_started_job.<locals>.<genexpr>©  s(   è è € ÐFÐF¨˜˜c˜˜ÐFÐFÐFÐFÐFÐFrK   z Exposed ports are reachable at:
zUse `hf jobs ssh z&` to open an SSH session into the job.zJoined network group 'zK'. Jobs of this namespace and resource group started with `--network-group z…` reach each other at `$HF_NETWORK_GROUP_HOSTNAME` (every member) or `${HF_NETWORK_GROUP_PREFIX}<alias>` (members claiming an alias).úUse `hf jobs logs -f z&` to stream logs, or `hf jobs inspect z` to check status.zUse `hf jobs wait z` to block until it finishes.N)r   r€   rÿ   Ú
isinstancer  Úexpose_urlsrx   r»   r;   rY   Ússh_urlrv   Únetworkr   Úgroupr  )rM   rù   r  Újob_refÚurlsr  s         rI   Ú_hint_or_follow_started_jobr  ¥  se  € à””Ð*Ð* #¤&Ð*Ð*€GÝ�#”*Ô(­$Ñ/Ô/ð =Ø�yŠyÐFÐF¨s¬zÔ/EÐFÑFÔFÑFÔFˆÝŒÐ;°TÐ;Ð;Ñ<Ô<Ð<Ý�#”*Ô$¥cÑ*Ô*ð VÝŒÐT WÐTÐTÐTÑUÔUÐUÝ�#”+�zÑ*Ô*ð 
Ø”Ô!ˆÝŒðR Uð Rð RØ %ðRð Rð Rñ	
ô 	
ð 	
ð
 ð ÝŒÐs¨ÐsÐsÐX_ÐsÐsÐsÑtÔtÐtÝŒÐL gÐLÐLÐLÑMÔMÐMØˆÝ! # sÑ+Ô+Ð+Ð+Ð+rK   ÚrunÚignore_unknown_optionsT)zFhf jobs run --name hello-world python:3.12 python -c 'print("Hello!")'z1hf jobs run --detach python:3.12 python script.pyz3hf jobs run -e FOO=foo python:3.12 python script.pyz;hf jobs run --secrets HF_TOKEN python:3.12 python script.pyz^hf jobs run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt python:3.12 python script.py)Úcontext_settingsÚexamplesÚcommandÚexposeÚexpose_publicÚsshÚnetwork_aliasÚresource_group_idÚtokenÚformatÚjson_outputÚquietc                 ó�  — t          |||¦  «         t          ||¦  «        }t          |||¬¦  «        }t          ||¬¦  «        pi }|                     dt          | |t          |	|
|�t          |¦  «        gnd||||pg ||¬¦	  «	        ¬¦  «        ¦  «         t          |¬¦  «        }|rdnt          |||¬¦  «        }t          i d	| “d
t          j        |¦  «        “d|	pt          j        j        “d|
“d|“d|“d|“d|pg “d|“dd                     d„ |pg D ¦   «         ¦  «        “dd                     d„ |pg D ¦   «         ¦  «        “d|“d|“dd                     |pg ¦  «        “d|“d|“|¬¦  «         |rdS |                     | ||||||	|
||||||||¬¦  «        }t#          j        d|j        |j        pi                      d¦  «        |j        ¬¦  «         t/          ||¦  «        sI|j        pi                      d¦  «        }t#          j        d|› d |j        j        › d!|j        › d"�¦  «         t7          |||¬#¦  «         dS )$z
Run a Job.r”   r–   r€   N)	rh   rj   r    r@   rl   rm   ro   rk   rp   r¡   ©r  r�   rg   r  rh   rj   r   rl   rm   rL   rn   r  rR   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   ©rv   ©r�   Úports     rI   r“   zjobs_run.<locals>.<genexpr>  ó(   è è € ÐBÐB¨T�s 4™yœyÐBÐBÐBÐBÐBÐBrK   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   zjobs_run.<locals>.<genexpr>  ó(   è è € Ð%PÐ%P°D¥c¨$¡i¤iÐ%PÐ%PÐ%PÐ%PÐ%PÐ%PrK   r  rk   rp   r  r@   )rg   r  rl   rm   rn   rL   rh   rj   r   r  r  r  rk   rp   r  r@   úJob started©rÿ   r€   r  úJob auto-named 'ú('. Pass `--name` or run `hf jobs labels rC   ú --name NAME` to rename it.©r  )r5   r3   r¥   r§   Ú
setdefaultr   r©   rv   r2   ra   rê   Úshlexr»   r   rÏ   rŽ   Úrun_jobr;   r]   rÿ   rn   Úgetr  Ú_has_explicit_namerY   r   r€   r  ) rg   r  rl   rm   r€   r�   r`   r}   r~   rh   rj   r   r  r‚   r  r  r  rk   r  r  r@   r  r   r!  r"  r�   r«   r˜   rM   rL   rù   Ú	auto_names                                    rI   Újobs_runr8  »  sf  € õN �f˜k¨5Ñ1Ô1Ð1Ý˜C Ñ*Ô*€GÝ$ W¨lÀGÐLÑLÔL€KÝ" 5¨tÐ4Ñ4Ô4Ð:¸€JØ×ÒØÝ$ØØÝ)ØØØ)1Ð)=•s˜8‘}”}�o�oÀ4Ø#ØØ#Ø#˜\ rØ+Ø -ð
ñ 
ô 
ð	
ñ 	
ô 	
ñô ð õ& ˜5Ð
!Ñ
!Ô
!€CØÐdˆdˆdÕ#>¸vÈ3ÐZcÐ#dÑ#dÔ#d€GÝð	
Ø�Uð	
à•u”z 'Ñ*Ô*ð	
ð �fÐ;¥Ô 5Ô ;ð	
ð �wð		
ð
 ˜ð	
ð �7ð	
ð �{ð	
ð �v�| ð	
ð �jð	
ð �c—h’hÐBÐB°V°\¸rÐBÑBÔBÑBÔBð	
ð ˜SŸXšXÐ%PÐ%P¸MÐ<OÈRÐ%PÑ%PÔ%PÑPÔPð	
ð �3ð	
ð ˜]ð	
ð ˜sŸxšx¨Ð(;¸Ñ<Ô<ð	
ð  Ð!2ð	
ð  ˜ð!	
ð$ ð'ñ ô ð ð* ð ØˆØ
�+Š+ØØØØØØØØØØØ#ØØ#Ø%Ø+Øð! ñ ô €Cõ$ „Jˆ} ¤¨s¬zÐ/?¸R×.DÒ.DÀVÑ.LÔ.LÐRUÔRYÐZÑZÔZÐZÝ˜d EÑ*Ô*ð 
Ø”ZÐ% 2×*Ò*¨6Ñ2Ô2ˆ	ÝŒðT˜yð Tð TØ"œyœ~ðTð TØ03´ðTð Tð Tñ	
ô 	
ð 	
õ    S°Ð8Ñ8Ô8Ð8Ð8Ð8rK   Úlogs)zhf jobs logs <job_id>zhf jobs logs -f <job_id>zhf jobs logs --tail 20 <job_id>z#hf jobs logs -f --tail 100 <job_id>)r  rü   z-fz--followzqFollow log output (stream until the job completes). Without this flag, only currently available logs are printed.Útailz-nz--tailzvNumber of lines to show from the end of the logs. When combined with --follow, starts streaming from the last N lines.c                 ó.  — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |||¬¦  «        }|D ]}t          j        |¦  «         Œ|r|› d| › �n| }|rt          j        d|› d�¦  «         dS t          j        d|› d�¦  «         dS )	a­  Fetch the logs of a Job.

    By default, prints currently available logs and exits (non-blocking).
    Use --follow/-f to stream logs in real-time until the job completes.
    Use --tail/-n to limit the number of lines returned (server-side when supported).

    Note: following exits when the log stream ends, regardless of whether the Job
    succeeded or failed. Run `hf jobs inspect <job_id>` to check the final status.
    r$  )r?   r@   rü   r:  rC   ú#Stream ended. Run `hf jobs inspect ú6` to check the final status (e.g. COMPLETED or ERROR).z2If the job is still running, use `hf jobs logs -f z(` to stream new logs until it completes.N)rJ   r2   rþ   r;   rå   rY   )	r?   rü   r:  r@   r  rM   r9  ræ   r  s	            rI   Ú	jobs_logsr>  .  s×   € õN 5°V¸YÑGÔGÑ€FˆIå
˜5Ð
!Ñ
!Ô
!€CØ×Ò V°yÈÐVZÐÑ[Ô[€DØð ð ˆÝŒ�‰ŒˆˆØ)2Ð>�Ð%Ð%˜VÐ%Ð%Ð%¸€GØð 
ÝŒÐv°wÐvÐvÐvÑwÔwÐwÐwÐwåŒØrÀÐrÐrÐrñ	
ô 	
ð 	
ð 	
ð 	
rK   Únc                 óT   — d}d}t          | ¦  «        D ]}t          ||¬¦  «         Œd S )Nz[1Az[2K)Úend)ÚrangeÚprint)r?  ÚLINE_UPÚ
LINE_CLEARÚis       rI   Ú_clear_linerG  d  sA   € Ø€GØ€JÝ�1‰XŒXð 'ð 'ˆÝˆg˜:Ð&Ñ&Ô&Ð&Ð&ð'ð 'rK   ÚmetricsÚtable_headersc                 ó~  ‡— | |d         › d�t          |d         dz  d¦  «        t          d|d         z  |d         z  d	¦  «        › d�t          |d         ¦  «        › d
t          |d         ¦  «        › d�t          |d         ¦  «        › dt          |d         ¦  «        › d�gŠ|d         rét          |d         t          ¦  «        rÎ‰gˆfd„t	          t          |d         ¦  «        dz
  ¦  «        D ¦   «         z   }t          |t          |d         ¦  «        ¦  «        D ]s\  Š}|d         |         }‰|d         › d�t          d|d         z  |d         z  d	¦  «        › d�t          |d         ¦  «        › d
t          |d         ¦  «        › d�gz  ŠŒt|S ‰dgt          |¦  «        t          ‰¦  «        z
  z  z  Š‰gS )NÚcpu_usage_pctú%Úcpu_millicoresg     @�@r$   éd   Úmemory_used_bytesÚmemory_total_bytesé   zB / ÚBÚrx_bpszbps / Útx_bpsÚbpsÚgpusc                 ó6   •— g | ]}d gt          ‰¦  «        z  ‘ŒS )rž   rØ   )r�   rÚ   Úrows     €rI   r·   z*_format_job_stats_rows.<locals>.<listcomp>u  s%   ø€ Ð.hÐ.hÐ.hÀ1°¨tµc¸#±h´h©Ð.hÐ.hÐ.hrK   ÚutilizationúN/A)Úroundr   r  ry   rB  rÙ   ÚziprÐ   )r?   rH  rI  rç   Úgpu_idÚgpurX  s         @rI   Ú_format_job_stats_rowsr_  k  s
  ø€ àØ�?Ô#Ð&Ð&Ð&ÝˆgÐ&Ô'¨&Ñ0°!Ñ4Ô4Ý��wÐ2Ô3Ñ3°gÐ>RÔ6SÑSÐUVÑWÔWÐZÐZÐZÝ˜Ð 3Ô4Ñ5Ô5ÐiÐi½<ÈÐPdÔHeÑ;fÔ;fÐiÐiÐiÝ˜ Ô)Ñ*Ô*ÐVÐVµ,¸wÀxÔ?PÑ2QÔ2QÐVÐVÐVð€Cð ˆv„ð 	�: g¨f¤oµtÑ<Ô<ð 	Ø'* eÐ.hÐ.hÐ.hÐ.hÍÍcÐRYÐZ`ÔRaÑNbÔNbÐefÑNfÑHgÔHgÐ.hÑ.hÔ.hÑ&hˆÝ˜t¥V¨G°F¬OÑ%<Ô%<Ñ=Ô=ð 	ð 	‰KˆC�Ø˜&”/ &Ô)ˆCØØ�}Ô%Ð(Ð(Ð(Ý˜˜sÐ#6Ô7Ñ7¸#Ð>RÔ:SÑSÐUVÑWÔWÐZÐZÐZÝ Ð$7Ô 8Ñ9Ô9ÐiÐi½|ÈCÐPdÔLeÑ?fÔ?fÐiÐiÐiðñ ˆCˆCð
 ˆØˆEˆ7•c˜-Ñ(Ô(­3¨s©8¬8Ñ3Ñ4Ñ4€CØˆ5€LrK   Úmetrics_streamc              #   óN   K  — |D ]}d| t          | ||¦  «        fV — Œd| g fV — d S )NFT©r_  )r?   r`  rI  rH  s       rI   Ú_get_jobs_stats_rowsrc  ‚  sU   è è € ð "ð Tð TˆØ�VÕ3°F¸GÀ]ÑSÔSÐSÐSÐSÐSÐSØ
�˜Ð
ÐÐÐÐÐrK   Ústats)zhf jobs statszhf jobs stats <job_id>zhf jobs stats -f <job_id>Újob_idsziFollow stats output (live view until the Jobs complete). Without this flag, a single snapshot is printed.c                 ó.  ‡‡‡‡— |r<t           j        t          j        k    r"t	          dt           j        j        › d�¦  «        ‚| �1g }| D ]*}t          |‰¦  «        \  }Š|                     |¦  «         Œ+|} t          |¬¦  «        Š‰€‰ 	                    ¦   «         d         Š| € d„ ‰ 
                    ‰¬¦  «        D ¦   «         } t          | ¦  «        dk    r*t          j        g ¦  «         t          j        d	¦  «         dS g d
¢Š|�sodt          dt          t          t           f         dz  fˆˆfd„}t"          j                             t          | ¦  «        ¦  «        5 }|                     || ¦  «        }ddd¦  «         n# 1 swxY w Y   g }	t+          | |¦  «        D ]9\  }}
|
€t          j        d|› d�¦  «         Œ |	                     d|i|
¥¦  «         Œ:t           j        t          j        k    rm|	rkˆfd„|	D ¦   «         }t          j        t1          |‰¬¦  «        ¦  «         d                     ˆfd„|	D ¦   «         ¦  «        }t          j        d|› d�¦  «         nt          j        |	d¬¦  «         dS t"          j                             t          | ¦  «        ¦  «        5 }i Š| D ]"}|g}|d„ ‰dd…         D ¦   «         z  }|g‰|<   Œ#t5          j        ¦   «         }ˆfd„‰D ¦   «         }t7          t1          |‰¬¦  «        ¦  «         ˆˆˆfd„| D ¦   «         }t9          |t:          |¬¦  «        D ]’\  }}}|r‰                     |d¦  «         n|‰|<   t5          j        ¦   «         }||z
  t>          k    rMtA          dt          |¦  «        z   ¦  «         ˆfd„‰D ¦   «         }t7          t1          |‰¬¦  «        ¦  «         |}Œ“	 ddd¦  «         n# 1 swxY w Y   d                     ˆfd„| D ¦   «         ¦  «        }t          j        d|› d �¦  «         dS )!zÒFetch the resource usage statistics and metrics of Jobs.

    By default, prints a snapshot of the current stats and exits (non-blocking).
    Use --follow/-f to display live stats until the Jobs complete.
    zD`--follow` displays a live terminal view and is not supported with 'z3' output. Run without `--follow` to get a snapshot.Nr$  r€   c                 óJ   — g | ] }|j         r|j         j        nd dv ¯|j        ‘Œ!S )ÚUNKNOWN)ÚRUNNINGÚUPDATING)r  r  rÿ   ©r�   rù   s     rI   r·   zjobs_stats.<locals>.<listcomp>³  sA   € ð 
ð 
ð 
àØ$'¤JÐ=�”
Ô Ð °IÐBYÐYÐYð ŒFàYÐYÐYrK   )r@   r   zHNo running jobs. Use `hf jobs ps -a` to list finished (and failed) jobs.)	zJOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGEr?   rA   c                 óh   •— t          t          ‰                     | ‰¬¦  «        ¦  «        d ¦  «        S )Nrý   )ÚnextÚiterÚfetch_job_metrics)r?   rM   r@   s    €€rI   Úfetch_latest_metricsz(jobs_stats.<locals>.fetch_latest_metricsÉ  s/   ø€ Ý�˜S×2Ò2¸&ÈIÐ2ÑVÔVÑWÔWÐY]Ñ^Ô^Ð^rK   zNo stats available for Job z. Is it running?c                 óH   •— g | ]}t          |d          |‰¦  «        D ]}|‘ŒŒS )r?   rb  )r�   rð   rX  rI  s      €rI   r·   zjobs_stats.<locals>.<listcomp>Õ  s:   ø€ ÐqÐqÐq˜DÕ5KÈDÐQYÌNÐ\`ÐboÑ5pÔ5pÐqÐq¨c�CÐqÐqÐqÐqrK   )ÚheadersrR   c              3   ó2   •K  — | ]}‰› d |d         › �V — ŒdS )rC   r?   Nr{   )r�   rð   r@   s     €rI   r“   zjobs_stats.<locals>.<genexpr>×  s5   øè è € ÐRÐRÀD 9Ð ?Ð ?¨t°H¬~Ð ?Ð ?ÐRÐRÐRÐRÐRÐRrK   zUse `hf jobs stats -f z` to follow live stats.©Úid_keyc                 ó&   — g | ]}d |v sd|v rdnd‘ŒS )rC   ÚUSAGEz-- / --z--r{   )r�   rŠ   s     rI   r·   zjobs_stats.<locals>.<listcomp>à  s/   € ÐpÐpÐpÐTZ #¨ - -°7¸fÐ3DÐ3D�I�IÈ4ÐpÐpÐprK   r$   c                 ó*   •— g | ]}‰|         D ]}|‘ŒŒS r{   r{   ©r�   r?   rX  Úrows_per_job_ids      €rI   r·   zjobs_stats.<locals>.<listcomp>ã  s,   ø€ Ð[Ð[Ð[˜fÀ?ÐSYÔCZÐ[Ð[¸C�cÐ[Ð[Ð[Ð[rK   c                 óH   •— g | ]}|‰                      |‰d ¬¦  «        ‰dœ‘ŒS )Trû   )r?   r`  rI  )ro  )r�   r?   rM   r@   rI  s     €€€rI   r·   zjobs_stats.<locals>.<listcomp>è  sR   ø€ ð 
ð 
ð 
ð ð	 !Ø"%×"7Ò"7¸vÐQZÐcgÐ"7Ñ"hÔ"hØ!.ðð ð
ð 
ð 
rK   )Úkwargs_listrQ  c                 ó*   •— g | ]}‰|         D ]}|‘ŒŒS r{   r{   ry  s      €rI   r·   zjobs_stats.<locals>.<listcomp>ø  s,   ø€ ÐcÐcÐc fÈ?Ð[aÔKbÐcÐcÀC˜cÐcÐcÐcÐcrK   c              3   ó&   •K  — | ]}‰› d |› �V — ŒdS )rC   Nr{   )r�   r?   r@   s     €rI   r“   zjobs_stats.<locals>.<genexpr>û  s1   øè è € ÐFÐF°F˜9Ð/Ð/ vÐ/Ð/ÐFÐFÐFÐFÐFÐFrK   r<  r=  )!r;   Úmoder9   Úhumanr   rŽ   rJ   r\   r2   ÚwhoamiÚ	list_jobsrÙ   ÚtablerY   rv   ry   r   ÚmultiprocessingÚpoolÚ
ThreadPoolÚmapr\  rÁ   rå   Ú	_tabulater»   ÚtimerC  Úiflatmap_unorderedrc  ÚpopÚSTATS_UPDATE_MIN_INTERVALrG  )re  rü   r@   r  Ú
parsed_idsr?   rp  r…  Úlatest_metricsr£   rH  rç   Újob_refsrX  Úlast_update_timeÚ
total_rowsr|  ÚdoneÚnowrM   rz  rI  s     `                @@@rI   Ú
jobs_statsr”  Š  sx  øøøø€ ð4 ð 
•#”(�lÔ0Ò0Ð0Ýð9ÕSVÔS[ÔSað 9ð 9ð 9ñ
ô 
ð 	
ð ÐØˆ
Øð 	&ð 	&ˆFÝ <¸VÀYÑ OÔ OÑˆF�IØ×Ò˜fÑ%Ô%Ð%Ð%ØˆÝ
˜5Ð
!Ñ
!Ô
!€CØÐØ—J’J‘L”L Ô(ˆ	Ø€ð
ð 
à—}’}¨y�}Ñ9Ô9ð
ñ 
ô 
ˆõ
 ˆ7�|„|�qÒÐÝŒ	�"‰ŒˆÝŒÐ[Ñ\Ô\Ð\Øˆð
ð 
ð 
€Mð ñ ð	_­ð 	_µµc½3°h´À$Ñ1Fð 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_õ Ô!×,Ò,­S°©\¬\Ñ:Ô:ð 	E¸dØ!ŸXšXÐ&:¸GÑDÔDˆNð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	EàˆÝ" 7¨NÑ;Ô;ð 	<ð 	<‰OˆF�GØˆÝ”ÐR¸&ÐRÐRÐRÑSÔSÐSÐSà—’˜h¨Ð:°'Ð:Ñ;Ô;Ð;Ð;ÝŒ8•|Ô)Ò)Ð)¨eÐ)ØqÐqÐqÐq EÐqÑqÔqˆDÝŒH•Y˜t¨]Ð;Ñ;Ô;Ñ<Ô<Ð<Ø—x’xÐRÐRÐRÐRÈEÐRÑRÔRÑRÔRˆHÝŒHÐO¨hÐOÐOÐOÑPÔPÐPÐPåŒI�e HÐ-Ñ-Ô-Ð-ØˆÝ	Ô	×	(Ò	(­¨W©¬Ñ	6Ô	6ð '¸$Ø<>ˆØð 	,ð 	,ˆFØ$* 8ˆCØÐpÐpÐ^kÐlmÐlnÐlnÔ^oÐpÑpÔpÑpˆCØ'* eˆO˜FÑ#Ð#Ýœ9™;œ;ÐØ[Ð[Ð[Ð[¨Ð[Ñ[Ô[ˆ
õ 	�i˜
¨MÐ:Ñ:Ô:Ñ;Ô;Ð;ð
ð 
ð 
ð 
ð 
ð 
ð "ð
ñ 
ô 
ˆõ #5°TÕ;OÐ]hÐ"iÑ"iÔ"ið 
	'ð 
	'ÑˆD�&˜$Øð /Ø×#Ò# F¨DÑ1Ô1Ð1Ð1à*.� Ñ'Ý”)‘+”+ˆCØÐ%Ñ%Õ)BÒBÐBÝ˜A¥ J¡¤Ñ/Ñ0Ô0Ð0ØcÐcÐcÐc°ÐcÑcÔc�
Ý•i 
°MÐBÑBÔBÑCÔCÐCØ#&Ð øð
	'ð)'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð> �xŠxÐFÐFÐFÐF¸gÐFÑFÔFÑFÔF€HÝ„HÐs°8ÐsÐsÐsÑtÔtÐtÐtÐts%   ÅFÆFÆFÊ#D!OÏOÏOzlist | ls | ps)z
hf jobs lszhf jobs ls -az&hf jobs ls --status running,schedulingzhf jobs ls --name training-v2z+hf jobs ls --label env=prod --label team=mlz%hf jobs ls --all --label hf-sandbox=1rN  Úallz-az--allzWShow all Jobs (default shows running and scheduling). Cannot be combined with --status.r  z--statuszfOnly show Jobs with the given status. Comma-separated or repeated, e.g. `--status running,scheduling`.)r÷   rö   z{Only show Jobs with the given `key=value` label. Repeat to require several labels, e.g. `--label env=prod --label team=ml`.zFOnly show Jobs with the given name (shortcut for `--label name=NAME`).Úlimitz--limitzCMaximum number of Jobs to display. Set to 0 to show all (no limit).c                 óÞ  — t          |¬¦  «        }| r|rt          d¦  «        ‚g }|pg D ]4}	|                     d„ |	                     d¦  «        D ¦   «         ¦  «         Œ5|r|}
n'| rd}
n"t          j        j        t          j        j        g}
i }|pg D ]6}d|vrt          d|› d�¦  «        ‚|                     d¦  «        \  }}	|	||<   Œ7|�d	|v rt          d
¦  «        ‚||d	<   |                     ||
|pd¬¦  «        }d}|dk    rEt          t          j        ||dz   ¦  «        ¦  «        }t          |¦  «        |k    rd}|d|…         }nt          |¦  «        }g }|D �]d}t          |¦  «        }|                     d¦  «        pi }|                     d¦  «        pg }|                     dd¦  «        |d<   |                     d¦  «        pi                      d	¦  «        pd|d	<   |                     d¦  «        pd|d<   |rd                     |¦  «        nd|d<   |                     d¦  «        r$|d         dd…                              dd¦  «        nd|d<   |                     d¦  «        pi                      dd ¦  «        |d<   t#          |                     d!¦  «        ¦  «        |d"<   |                     |¦  «         �Œft'          j        |g d#¢d¬$¦  «         |rt'          j        d%|› d&�¦  «         |st|s|rXd'                     g d(„ |D ¦   «         ¢d)„ |                     ¦   «         D ¦   «         ¢¦  «        }t'          j        d*|› �¦  «         dS | st'          j        d+¦  «         dS dS dS ),z½List Jobs.

    Use `--status` to filter by status (see [`JobStage`] for possible values) and `--label` to filter by `key=value`
    labels. A Job must match every filter to be listed.
    r$  ú0`-a`/`--all` cannot be combined with `--status`.c              3   óf   K  — | ],}|                      ¦   «         ¯|                      ¦   «         V — Œ-d S r×   rµ   ©r�   Úparts     rI   r“   zjobs_ps.<locals>.<genexpr>A  s7   è è € ÐVÐV¨TÈÏÊÉÌÐV˜DŸJšJ™LœLÐVÐVÐVÐVÐVÐVrK   ú,Nr´   úInvalid label filter 'ú"': must be in the form 'key=value'r€   ú6Cannot filter by both `--name` and `--label name=...`.)r@   r  rn   Fr   r$   TÚ	durationsr  rÿ   rž   r?   rn   rZ  Údocker_imageúimage/spacerR   Ú
created_até   ÚTÚcreatedr  r  rh  Úrunning_secsÚruntime)r?   r€   r¢  r  r¦  r  r¨  ©rr  ru  zOutput truncated to z4 Jobs. Use `--limit 0` to show all (or `--limit N`).r¸   c              3   ó    K  — | ]	}d |› �V — Œ
dS ©zstatus=Nr{   ©r�   Úss     rI   r“   zjobs_ps.<locals>.<genexpr>~  ó(   è è € Ð7Ð7 Q�=˜Q�=�=Ð7Ð7Ð7Ð7Ð7Ð7rK   c              3   ó,   K  — | ]\  }}d |› d|› �V — ŒdS ©zlabel=r´   Nr{   ©r�   ÚkÚvs      rI   r“   zjobs_ps.<locals>.<genexpr>~  ó:   è è € Ð:gÐ:gÑPTÐPQÐSTÐ;KÀAÐ;KÐ;KÈÐ;KÐ;KÐ:gÐ:gÐ:gÐ:gÐ:gÐ:grK   zNo jobs matched filters: zHNo running jobs. Use `-a`/`--all` to include finished (and failed) jobs.)r2   r   rU   rF   r   ri  rŽ   Ú
SCHEDULINGr‚  rx   Ú	itertoolsÚislicerÙ   r:   r5  r»   Úreplacer"   r\   r;   rƒ  rY   r£   rå   )r•  r  r�   r€   r–  r@   r  rM   Úraw_statusesrŽ   Úserver_statusesrn   rð   r„   Ú	jobs_iterÚ	truncatedÚjobsÚ	job_itemsrù   Újob_itemr   ÚcmdÚfilters_msgs                          rI   Újobs_psrÂ  ÿ  s6  € õt ˜5Ð
!Ñ
!Ô
!€Cà
ð Kˆvð KÝÐIÑJÔJÐJð !€LØ�˜2ð Wð WˆØ×ÒÐVÐV°U·[²[ÀÑ5EÔ5EÐVÑVÔVÑVÔVÐVÐVð ð NØ&ˆˆØ	ð NØˆˆå#Ô+Ô1µ8Ô3FÔ3LÐMˆð  €FØ�˜ð ð ˆØ�dˆ?ˆ?ÝÐ\°DÐ\Ð\Ð\Ñ]Ô]Ð]Ø—Z’Z ‘_”_‰
ˆˆUØˆˆs‰ˆð ÐØ�VÐÐÝÐSÑTÔTÐTØˆˆv‰à—’¨	¸/ÐRXÐR`Ð\`�ÑaÔa€Ið €IØˆq‚y€yÝ•IÔ$ Y°¸±	Ñ:Ô:Ñ;Ô;ˆÝˆt‰9Œ9�uÒÐØˆIØ˜˜˜”<ˆDøå�I‰Œˆð ')€IØð #ñ #ˆÝ% cÑ*Ô*ˆØ—L’L Ñ-Ô-Ð3°ˆ	Ø�lŠl˜9Ñ%Ô%Ð+¨ˆØ%Ÿ\š\¨$°Ñ3Ô3ˆ�ÑØ$ŸLšL¨Ñ2Ô2Ð8°b×=Ò=¸fÑEÔEÐNÈˆ�ÑØ"*§,¢,¨~Ñ">Ô">Ð"GÀ%ˆ�ÑØ/2Ð=˜cŸhšh s™mœm˜m¸ˆ�ÑØOWÏ|Ê|Ð\hÑOiÔOiÐt˜h |Ô4°S°b°SÔ9×AÒAÀ#ÀsÑKÔKÐKÐotˆ�ÑØ&Ÿlšl¨8Ñ4Ô4Ð:¸×?Ò?ÀÈÑSÔSˆ�ÑÝ-¨i¯mªm¸NÑ.KÔ.KÑLÔLˆ�ÑØ×Ò˜Ñ"Ô"Ð"Ñ"å„IØØ\Ð\Ð\Øðñ ô ð ð
 ð eÝŒÐc¨ÐcÐcÐcÑdÔdÐdØð aØð 	a˜6ð 	aØŸ)š)ØhÐ7Ð7¨,Ð7Ñ7Ô7ÐhÐ:gÐ:gÐX^×XdÒXdÑXfÔXfÐ:gÑ:gÔ:gÐhñô ˆKõ ŒHÐ>°Ð>Ð>Ñ?Ô?Ð?Ð?Ð?Øð 	aÝŒHÐ_Ñ`Ô`Ð`Ð`Ð`ðað að	að 	arK   Úhardwarezhf jobs hardwarec                  óÐ  — t          ¦   «         } |                      ¦   «         }g }|D ]–}d}|j        r)|j        j        › d|j        j        › d|j        j        › d�}|j        rd|j        d›�nd}|j        rd|j        dz  d	›�nd}|                     |j        |j	        |j
        |j        |j        |||d
œ¦  «         Œ—t          j        |¦  «         t          j        d¦  «         dS )z(List available hardware options for Jobsrž   zx ú (ú)ú$z.4fÚfreerì   z.2f)r€   zpretty nameÚcpuÚramÚstorageÚacceleratorzcost/minz	cost/hourzLUse `hf jobs run --flavor <name> ...` to request a specific hardware flavor.N)r2   Úlist_jobs_hardwarerÌ  ÚquantityÚmodelÚvramÚunit_cost_usdr\   r€   Úpretty_namerÉ  rÊ  Úephemeral_storager;   rƒ  rY   )rM   Úhardware_listr£   ÚhwÚaccelerator_infoÚcost_minÚ	cost_hours          rI   Újobs_hardwarerÙ  …  s+  € õ ‰,Œ,€CØ×*Ò*Ñ,Ô,€MØ€EØð 
ð 
ˆØÐØŒ>ð 	lØ"$¤.Ô"9ÐkÐk¸R¼^Ô=QÐkÐkÐUWÔUcÔUhÐkÐkÐkÐØ13Ô1AÐMÐ-�rÔ'Ð-Ð-Ð-Ð-ÀvˆØ79Ô7GÐSÐ3˜Ô(¨2Ñ-Ð3Ð3Ð3Ð3ÈVˆ	Ø�ŠàœØ!œ~Ø”vØ”vØÔ/Ø/Ø$Ø&ð	ð 	ñ	
ô 	
ð 	
ð 	
õ „IˆeÑÔÐÝ„HÐ[Ñ\Ô\Ð\Ð\Ð\rK   Úinspectzhf jobs inspect <job_id>z*Job IDs to inspect (or 'namespace/job_id')c                 óê   ‡‡— g }| D ]*}t          |‰¦  «        \  }Š|                     |¦  «         Œ+|} t          |¬¦  «        Šˆˆfd„| D ¦   «         }t          j        d„ |D ¦   «         d¬¦  «         dS )z0Display detailed information on one or more Jobsr$  c                 ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS )rý   )Úinspect_job)r�   r?   rM   r@   s     €€rI   r·   z jobs_inspect.<locals>.<listcomp>³  s)   ø€ ÐVÐVÐVÀFˆC�OŠO 6°YˆOÑ?Ô?ÐVÐVÐVrK   c                 óT   — g | ]%}t          t          |¦  «        |j        ¬ ¦  «        ‘Œ&S ©)rn   )Ú_surface_namer:   rn   rk  s     rI   r·   z jobs_inspect.<locals>.<listcomp>´  s0   € ÐYÐYÐYÈS�}Õ/°Ñ4Ô4¸S¼ZÐHÑHÔHÐYÐYÐYrK   rÿ   rt  N©rJ   r\   r2   r;   rƒ  )re  r@   r  r�  r?   r½  rM   s    `    @rI   Újobs_inspectrâ  ¡  s¢   øø€ ð €JØð "ð "ˆÝ8¸ÀÑKÔKÑˆ�	Ø×Ò˜&Ñ!Ô!Ð!Ð!Ø€GÝ
˜5Ð
!Ñ
!Ô
!€CØVÐVÐVÐVÐVÈgÐVÑVÔV€DÝ„IÐYÐYÐTXÐYÑYÔYÐbfÐgÑgÔgÐgÐgÐgrK   Úrerunzhf jobs rerun <job_id>zhf jobs rerun --detach <job_id>c                 ó  — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «        }t          j        d|j        |j        pi                      d¦  «        |j        ¬¦  «         t          |||¬¦  «         dS )z*Run a new Job with an existing Job's spec.r$  rý   r,  r€   r-  r1  N)
rJ   r2   Ú	rerun_jobr;   r]   rÿ   rn   r5  r  r  )r?   r  r@   r  rM   rù   s         rI   Ú
jobs_rerunræ  ·  sŒ   € õ 5°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØ
�-Š-˜v°ˆ-Ñ
;Ô
;€CÝ„Jˆ} ¤¨s¬zÐ/?¸R×.DÒ.DÀVÑ.LÔ.LÐRUÔRYÐZÑZÔZÐZÝ  S°Ð8Ñ8Ô8Ð8Ð8Ð8rK   )zhf jobs expose <job_id> 8000z*hf jobs expose <job_id> 8000 --public 9000zhf jobs expose <job_id> --clearÚportszlPorts to expose through the jobs proxy. Access requires an HF token with read access to the job's namespace.Úpublicz--publicz�Expose a port without authentication. Repeat the flag for multiple ports. No need to also pass the port as a positional argument.Úclearz--clearzClose all exposed ports.c                 ó(  — |r|s|rt          d¦  «        ‚|s|s|st          d¦  «        ‚t          | |¦  «        \  } }t          |¬¦  «        }|                     | |||¬¦  «        }t	          j        d|j        |j        pg |j        pg ¬¦  «         dS )z'Replace exposed ports on a running Job.z6`--clear` cannot be combined with ports or `--public`.zKPass at least one port or `--public` port, or `--clear` to close all ports.r$  )r?   r  r  r@   zExposed ports updated)rÿ   rç  Úpublic_portsN)	r   rJ   r2   Úupdate_job_exposer;   r]   rÿ   r  r  )r?   rç  rè  ré  r@   r  rM   rù   s           rI   Újobs_exposerí  Æ  sÈ   € ð8 ð Q�%ð Q˜6ð QÝÐOÑPÔPÐPØð f˜ð f vð fÝÐdÑeÔeÐeÝ4°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØ
×
Ò
 v°eÈ6Ð]fÐ
Ñ
gÔ
g€CÝ„JÐ&¨3¬6¸¼Ð9IÀrÐX[ÔXiÐXoÐmoÐpÑpÔpÐpÐpÐprK   Úcancelzhf jobs cancel <job_id>c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )zCancel a Jobr$  rý   zJob cancelled©rÿ   N)rJ   r2   Ú
cancel_jobr;   r]   )r?   r@   r  rM   s       rI   Újobs_cancelrò  ì  sY   € õ 5°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØ‡N‚N˜&¨I€NÑ6Ô6Ð6Ý„Jˆ 6Ð*Ñ*Ô*Ð*Ð*Ð*rK   Úwait)zhf jobs wait <job_id>z"hf jobs wait <job_id_1> <job_id_2>z"hf jobs ls -q | xargs hf jobs waitz,Job IDs to wait for (or 'namespace/job_id').zTMax time to wait: int with s (seconds, default), m (minutes), h (hours) or d (days).c           
      óð  — g }t          ¦   «         }| D ]?}t          ||¦  «        \  }}|                     |¦  «         |                     |¦  «         Œ@t	          |¦  «        dk    rCt          dd                     d„ t          |t          ¬¦  «        D ¦   «         ¦  «        z   ¦  «        ‚| 	                    ¦   «         }|�t          |¦  «        nd}	t          |¬¦  «        }
t          j        dt	          |¦  «        › d	�¦  «        }	 |
                     ||	|¬
¦  «        }n7# t          $ r* |                     d¦  «         t          d|› d�¦  «        d‚w xY w|                     t	          |¦  «        › d�¦  «         t          j        d„ |D ¦   «         ¦  «         d„ |D ¦   «         }|rOt          t	          |¦  «        › dt	          |¦  «        › d�d                     d„ |D ¦   «         ¦  «        z   ¦  «        ‚dS )a  Wait for one or more Jobs to reach a terminal state.

    Blocks until every Job has finished, then exits with code 0 if all Jobs completed
    successfully, or a non-zero exit code if any Job was canceled, errored or deleted.

    All Jobs must belong to the same namespace.
    r$   z0All Job IDs must be in the same namespace, got: r¸   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  )r�   Únss     rI   r“   zjobs_wait.<locals>.<genexpr>!  s(   è è € ÐFÐF B�˜B™œÐFÐFÐFÐFÐFÐFrK   )r„   Nr$  zWaiting for z Job(s) to finish...)rj   r@   z
Timed out.zTimed out after z waiting for Job(s) to finish.z Job(s) finished.c                 óf   — g | ].}|j         t          |j        j        ¦  «        |j        j        d œ‘Œ/S ))rÿ   r  r  )rÿ   rv   r  r  r  rk  s     rI   r·   zjobs_wait.<locals>.<listcomp>/  s7   € ÐmÐmÐmÐad�c”f¥s¨3¬:Ô+;Ñ'<Ô'<ÈÌÔI[Ð\Ð\ÐmÐmÐmrK   c                 óF   — g | ]}|j         j        t          j        k    ¯|‘ŒS r{   )r  r  r   r  rk  s     rI   r·   zjobs_wait.<locals>.<listcomp>0  s*   € ÐLÐLÐL�c S¤ZÔ%5½Ô9KÒ%KÐ%KˆcÐ%KÐ%KÐ%KrK   z of z' Job(s) did not complete successfully: c              3   óD   K  — | ]}|j         › d |j        j        › d�V — ŒdS )rÅ  rÆ  N)rÿ   r  r  rk  s     rI   r“   zjobs_wait.<locals>.<genexpr>4  s:   è è € ÐKÐK¸S˜3œ6Ð8Ð8 S¤ZÔ%5Ð8Ð8Ð8ÐKÐKÐKÐKÐKÐKrK   )rz   rJ   r\   rˆ   rÙ   r   r»   rÐ   rv   r‹  r#   r2   r;   r  r  ÚTimeoutErrorr’  rƒ  )re  rj   r@   r  r�  Ú
namespacesr?   Ú	parsed_idÚparsed_namespaceÚtimeout_secsrM   r  r½  Úfaileds                 rI   Ú	jobs_waitr   ù  s>  € ð> €JÝ‘”€JØð )ð )ˆÝ&BÀ6È9Ñ&UÔ&UÑ#ˆ	Ð#Ø×Ò˜)Ñ$Ô$Ð$Ø�ŠÐ'Ñ(Ô(Ð(Ð(Ý
ˆ:�„˜ÒÐÝØ>Ø�iŠiÐFÐF­&°ÅÐ*EÑ*EÔ*EÐFÑFÔFÑFÔFñGñ
ô 
ð 	
ð —’Ñ Ô €IØ.5Ð.A•> 'Ñ*Ô*Ð*Àt€Lå
˜5Ð
!Ñ
!Ô
!€CÝŒZÐL¥s¨:¡¤ÐLÐLÐLÑMÔM€Fð]Ø×Ò 
°LÈIÐÑVÔVˆˆøÝð ]ð ]ð ]Ø�Š�LÑ!Ô!Ð!ÝÐQ¨'ÐQÐQÐQÑRÔRÐX\Ð\ð]øøøð ‡K‚K•3�t‘9”9Ð/Ð/Ð/Ñ0Ô0Ð0å„IÐmÐmÐhlÐmÑmÔmÑnÔnÐnØLÐL˜TÐLÑLÔL€FØð 
ÝÝ�6‰{Œ{ÐRÐR¥ D¡	¤	ÐRÐRÐRØ�iŠiÐKÐKÀFÐKÑKÔKÑKÔKñLñ
ô 
ð 	
ð
ð 
s   ÄD Ä4Ern   )z*hf jobs labels <job_id> --name training-v2z8hf jobs labels <job_id> --label env=prod --label team=mlzhf jobs labels <job_id> --clearzRemove all labels from the job.c                 óª  — |s|€|st          d¦  «        ‚|s|�|rt          d¦  «        ‚t          | |¦  «        \  } }t          |¬¦  «        }|�)|s'|                     | |¬¦  «        j        pi }i |¥d|i¥}nt          ||¬¦  «        pi }|                     | ||¬¦  «        }	t          j        d	|	j	        | 
                    d¦  «        ¬
¦  «         dS )zfUpdate labels on a Job. Passing --label replaces all existing labels; passing --name alone keeps them.NúePlease set a name with --name or at least one label with --label. To remove all labels, pass --clear.úlCannot set a name or labels and clear them at the same time. Please use --name/--label or --clear, not both.r$  rý   r€   r–   )r?   rn   r@   úLabels updated©rÿ   r€   )r   rJ   r2   rÝ  rn   r§   Úupdate_job_labelsr;   r]   rÿ   r5  )
r?   r€   r�   ré  r@   r  rM   Úcurrent_labelsrn   rù   s
             rI   Újobs_labelsr  8  s  € ð" ð 
�T�\¨%�\ÝØsñ
ô 
ð 	
ð 	ð 
�Ð! uÐ!ÝØzñ
ô 
ð 	
õ 5°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØÐ ÐàŸš°À)˜ÑLÔLÔSÐYÐWYˆØ1�NÐ1 F¨DÐ1Ð1ˆˆå" 5¨tÐ4Ñ4Ô4Ð:¸ˆØ
×
Ò
 v°fÈ	Ð
Ñ
RÔ
R€CÝ„JÐ C¤F°·²¸FÑ1CÔ1CÐDÑDÔDÐDÐDÐDrK   )zhf jobs ssh <job_id>zhf jobs ssh <job_id> --dry-runz)hf jobs ssh <job_id> -i ~/.ssh/id_ed25519Úidentity_filec                 óJ  — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «        }|j        j        €t          d¦  «        ‚|j        j        t          v r%t          d|j        › d|j        j        › d�¦  «        ‚|j        j        t          j
        k    r»t          j        d|j        › d	|j        j        › d
�¦  «        }|                     |j        |t          j
        g¬¦  «        }|j        j        t          j
        k    r:|                     d¦  «         t          d|j        › d|j        j        › d�¦  «        ‚|                     d¦  «         t          |j        j        ¦  «        }t          |j        › d|j        › �|j        ||¬¦  «         dS )a   SSH into a running Job.

    If the Job is not yet running, waits until it reaches the RUNNING state before
    connecting. Requires the Job to be started with SSH enabled (`hf jobs run --ssh ...`)
    and your SSH public key to be registered at https://huggingface.co/settings/keys.
    r$  rý   Nz[SSH is not enabled on this job. Start a job with SSH support using `hf jobs run --ssh ...`.zCannot SSH into job 'z%': job has already finished (stage: 'z').zWaiting for job 'z' to be running (stage: 'z')...)r?   r@   ÚstageszJob finished.z1': job finished before reaching RUNNING (stage: 'zJob is running.ú@)r(  r	  r‚   )rJ   r2   rÝ  r  r  r   r  r   rÿ   r   ri  r;   r  r’  r   r1   ÚusernameÚhostnamer(  )	r?   r	  r‚   r@   r  rM   rù   r  r  s	            rI   Újobs_sshr  ]  s´  € õ* 5°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØ
�/Š/ °9ˆ/Ñ
=Ô
=€CØ
„zÔÐ!ÝÐtÑuÔuÐuØ
„zÔÕ.Ð.Ð.ÝÐq¨s¬vÐqÐqÐ\_Ô\fÔ\lÐqÐqÐqÑrÔrÐrØ
„zÔ�8Ô+Ò+Ð+Ý”Ðh°´ÐhÐhÐQTÔQ[ÔQaÐhÐhÐhÑiÔiˆØ×Ò c¤f¸	Í8ÔK[ÐJ\ÐÑ]Ô]ˆØŒ:Ô�xÔ/Ò/Ð/Ø�KŠK˜Ñ(Ô(Ð(ÝØv¨¬ÐvÐvÐadÔakÔaqÐvÐvÐvñô ð ð 	�ŠÐ%Ñ&Ô&Ð&Ý�s”zÔ)Ñ*Ô*€GÝØÔÐ0Ð0˜gÔ.Ð0Ð0ØŒ\Ø#Øð	ñ ô ð ð ð rK   zFRun UV scripts (Python with inline dependencies) on HF infrastructure.Úuvr–   )z,hf jobs uv run --name my-script my_script.pyz$hf jobs uv run --detach my_script.pyz1hf jobs uv run --flavor a10g-small ml_training.pyz+hf jobs uv run --with transformers train.pyzNhf jobs uv run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt script.pyz"hf jobs uv run --dry-run script.pyÚwith_c                 óŠ  — t          |||¦  «         t          |¬¦  «        }t          d+i d|“d| “d|“d|“d|“d|“d|“d	|“d
|	“d|“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“Ž5 }t          i d| “dt	          j        |j        ¦  «        “dd                     |pg ¦  «        “d|j        pt          “d|j	        pt          j        j        “d|j        “d|j        “d|“d	|j        “d|j        “d|j        “d|j        “dd                     d„ |pg D ¦   «         ¦  «        “dd                     d„ |pg D ¦   «         ¦  «        “d|“d|j        “dd                     |j        ¦  «        “||j        d œ¥|j        |¬!¦  «         |r	 d"d"d"¦  «         d"S |                     |j        |j        ||j        |j        |j        |j        |j        |j        |j	        |j        |||||j        |j        pd"||j        ¬#¦  «        }d"d"d"¦  «         n# 1 swxY w Y   t5          j        d$|j        |j        pi                      d¦  «        |j        ¬%¦  «         t?          |||j        ¦  «        sI|j        pi                      d¦  «        }t5          j         d&|› d'|j!        j"        › d(|j        › d)�¦  «         tG          |||¬*¦  «         d"S ),ú8Run a UV script (local file or URL) on HF infrastructurer$  rM   rd   rf   r|   rg   rh   ri   rl   r}   rm   r~   rj   r   r€   r�   r`   r@   rk   rp   r‚   ÚargsÚwithrR   rL   rn   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   zjobs_uv_run.<locals>.<genexpr>à  ó(   è è € Ð"FÐ"F°¥3 t¡9¤9Ð"FÐ"FÐ"FÐ"FÐ"FÐ"FrK   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   zjobs_uv_run.<locals>.<genexpr>á  ó(   è è € Ð)TÐ)T¸­#¨d©)¬)Ð)TÐ)TÐ)TÐ)TÐ)TÐ)TrK   r  ©r  r@   rÑ   N)rd   rf   r|   ri   rg   rl   rm   rn   rL   rh   rj   r   r  r  r  rk   rp   r  r@   r,  r-  r.  r/  rC   r0  r1  r{   )$r5   r2   r°   rê   r3  r»   rf   rg   r   rh   r   rÏ   rŽ   ri   rj   rl   rm   ro   rn   rk   rp   r@   rq   Ú
run_uv_jobrd   rL   r;   r]   rÿ   r5  r  r6  rY   r   r€   r  ) rd   rf   rg   rh   rl   rm   r€   r�   r`   r}   r~   rj   r   r  r‚   r  r  r  rk   r  r  r@   r  r  ri   r   r!  r"  rM   r¯   rù   r7  s                                    rI   Újobs_uv_runr  �  s´  € õV �f˜k¨5Ñ1Ô1Ð1Ý
˜5Ð
!Ñ
!Ô
!€CÝ	ð 
ð 
ð 
ØˆCð
àˆvð
ð  �Kð
ð �Uð	
ð
 ˆeð
ð ˆvð
ð ˆvð
ð ˆCð
ð �ð
ð �ð
ð "�\ð
ð �ð
ð �ð
ð ˆTð
ð ˆeð
ð  ˆvð!
ð" �)ð#
ð$ $�mð%
ð& &˜ð'
ð( �ð)
ð E
ð* 
ÝðØ˜&ðà�œ
 6Ô#5Ñ6Ô6ðð ˜Ÿš  ¨"Ñ-Ô-ðð ˜œÐ9Õ)9ð	ð
 ˜&œ-ÐF­;Ô+@Ô+Fðð ˜&œ-ðð ˜6œ>ðð ˜Hðð �v”zðð ˜6œ>ðð ˜6Ô.ðð ˜&œ-ðð ˜#Ÿ(š(Ð"FÐ"F¸¸À2Ð"FÑ"FÔ"FÑFÔFðð   §¢Ð)TÐ)TÀÐ@SÐQSÐ)TÑ)TÔ)TÑ!TÔ!Tðð �sðð    Ô!5ð!ð" " 3§8¢8¨FÔ,BÑ#CÔ#Cð#ð$ &7Ø#Ô-ð'ð ð ð* Ô*Øð/	
ñ 	
ô 	
ð 	
ð2 ð 	ØðaE
ð E
ð E
ñ E
ô E
ð E
ð E
ð E
ðb �nŠnØ”=ØÔ*ØØ”=Ø”,Ø”
Ø”NØ”=Ø”NØ”=Ø”NØØØ'ØØ Ô.Ø"Ô2Ð:°dØ/ØÔ&ð' ñ 
ô 
ˆðcE
ð E
ð E
ñ E
ô E
ð E
ð E
ð E
ð E
ð E
ð E
øøøð E
ð E
ð E
ð E
õL „Jˆ} ¤¨s¬zÐ/?¸R×.DÒ.DÀVÑ.LÔ.LÐRUÔRYÐZÑZÔZÐZÝ˜d E¨6Ô+=Ñ>Ô>ð 
Ø”ZÐ% 2×*Ò*¨6Ñ2Ô2ˆ	ÝŒðT˜yð Tð TØ"œyœ~ðTð TØ03´ðTð Tð Tñ	
ô 	
ð 	
õ    S°Ð8Ñ8Ô8Ð8Ð8Ð8s   Á(DHÆA+HÈHÈHc                   ó   — e Zd ZdZdZdZdS )ÚScheduledJobStatusFilterz§Possible values for `hf jobs scheduled ls --status`.

    Scheduled Jobs are not "running": they are either active (i.e. they will trigger new runs) or suspended.
    ÚactiveÚ	suspendedN)rr   rs   rt   ru   ÚACTIVEÚ	SUSPENDEDr{   rK   rI   r  r    s$   € € € € € ðð ð
 €FØ€I€I€IrK   r  z,Create and manage scheduled Jobs on the Hub.Ú	scheduledzRhf jobs scheduled run "0 0 * * *" --name daily-script python:3.12 python script.pyÚscheduleÚsuspendÚconcurrencyc                 óš  — t          |||¦  «         t          ||
¦  «        }t          |||¬¦  «        }t          ||¬¦  «        pi }|                     dt          ||t          |||�t          |¦  «        gnd||||	pg ¬¦  «        ¬¦  «        ¦  «         t          |¬¦  «        }|rdnt          |	||¬¦  «        }t          i d	| “d
|“d|“d|“dt          j        |¦  «        “d|pt          j        j        “d|“d|“d|“d|“d|	pg “d|“dd                     d„ |pg D ¦   «         ¦  «        “dd                     d„ |pg D ¦   «         ¦  «        “d|“d|“|¬¦  «         |rdS |                     ||| |||||||||||||¬¦  «        }t#          j        d|j        |j        j        pi                      d¦  «        ¬¦  «         t/          ||¦  «        sN|j        j        pi                      d¦  «        }t#          j        d|› d |j        j        › d!|j        › d"�¦  «         t#          j        d#|j        j        › d!|j        › d$�¦  «         dS )%zSchedule a Job.r”   r–   r€   N)rh   rj   r    r@   rl   rm   ro   r¡   r$  r�   r$  r%  r&  rg   r  rh   rj   r   rl   rm   rL   rn   r  rR   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   z scheduled_run.<locals>.<genexpr>_  r)  rK   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   z scheduled_run.<locals>.<genexpr>`  r+  rK   r  r@   )rg   r  r$  r%  r&  rl   rm   rn   rL   rh   rj   r   r  r  r  r@   úScheduled Job createdr  úScheduled Job auto-named 'ú2'. Pass `--name` or run `hf jobs scheduled labels rC   r0  úUse `hf jobs scheduled inspect ú` to view its details.)r5   r3   r¥   r§   r2  r   r©   rv   r2   ra   rê   r3  r»   r   rÏ   rŽ   Úcreate_scheduled_jobr;   r]   rÿ   Újob_specrn   r5  r6  rY   r   r€   )r$  rg   r  r%  r&  rl   rm   r€   r�   r`   r}   r~   rh   rj   r   r‚   r  r  r  r@   r  r   r!  r"  r�   r«   r˜   rM   rL   Úscheduled_jobr7  s                                  rI   Úscheduled_runr2    sr  € õ@ �f˜k¨5Ñ1Ô1Ð1Ý˜C Ñ*Ô*€GÝ$ W¨lÀGÐLÑLÔL€KÝ" 5¨tÐ4Ñ4Ô4Ð:¸€JØ×ÒØÝ$ØØÝ)ØØØ)1Ð)=•s˜8‘}”}�o�oÀ4Ø#ØØ#Ø#˜\ rðñ ô ð	
ñ 	
ô 	
ñô ð õ" ˜5Ð
!Ñ
!Ô
!€CØÐdˆdˆdÕ#>¸vÈ3ÐZcÐ#dÑ#dÔ#d€GÝð	
Ø˜ð	
à�wð	
ð ˜;ð	
ð �Uð		
ð
 •u”z 'Ñ*Ô*ð	
ð �fÐ;¥Ô 5Ô ;ð	
ð �wð	
ð ˜ð	
ð �7ð	
ð �{ð	
ð �v�| ð	
ð �jð	
ð �c—h’hÐBÐB°V°\¸rÐBÑBÔBÑBÔBð	
ð ˜SŸXšXÐ%PÐ%P¸MÐ<OÈRÐ%PÑ%PÔ%PÑPÔPð	
ð  Ð!2ð	
ð  ˜ð!	
ð$ ð'ñ ô ð ð* ð ØˆØ×,Ò,ØØØØØØØØØØØØØØ#Ø+Øð! -ñ ô €Mõ$ „JÐ&¨=Ô+;À=ÔCYÔC`ÐCfÐdf×BkÒBkÐlrÑBsÔBsÐtÑtÔtÐtÝ˜d EÑ*Ô*ð 
Ø"Ô+Ô2Ð8°b×=Ò=¸fÑEÔEˆ	ÝŒðr¨ð rð rØ)6Ô)<Ô)Aðrð rØDQÔDTðrð rð rñ	
ô 	
ð 	
õ „HÐr¨}Ô/BÔ/GÐrÐrÈ-ÔJZÐrÐrÐrÑsÔsÐsÐsÐsrK   )zhf jobs scheduled lszhf jobs scheduled ls -az'hf jobs scheduled ls --status suspendedz(hf jobs scheduled ls --name daily-scriptz5hf jobs scheduled ls --label env=prod --label team=mlzTShow all scheduled Jobs (default hides suspended). Cannot be combined with --status.zgOnly show scheduled Jobs with the given status. Comma-separated or repeated, e.g. `--status suspended`.z…Only show scheduled Jobs with the given `key=value` label. Repeat to require several labels, e.g. `--label env=prod --label team=ml`.zPOnly show scheduled Jobs with the given name (shortcut for `--label name=NAME`).c                 óR  — t          |¬¦  «        }| r|rt          d¦  «        ‚g }|pg D ]4}|                     d„ |                     d¦  «        D ¦   «         ¦  «         Œ5d„ |D ¦   «         }	|	r%t          d|	› dd„ t          D ¦   «         › d	�¦  «        ‚|rt          j        |v }
t          j        |v }nd
}
| }i }|pg D ]7}d|vrt          d|› d�¦  «        ‚|                     dd¦  «        \  }}|||<   Œ8|�d|v rt          d¦  «        ‚||d<   |                     ||pd¬¦  «        }g }|D ]*}|j        pd}|r|sŒ|s|
sŒ| 	                    |¦  «         Œ+g }|D �]~}t          |¦  «        }|                     d¦  «        pi }|                     d¦  «        pi }|                     d¦  «        }|                     d¦  «        pg }|                     d¦  «        pi                      d¦  «        pd|d<   |                     d¦  «        pd|d<   |rd                     |¦  «        nd|d<   |r9|                     d¦  «        r$|d         dd…                              dd¦  «        nd|d <   |                     d!¦  «        r$|d!         dd…                              dd¦  «        nd|d"<   |                     d#¦  «        pd|d#<   | 	                    |¦  «         �Œ€t          j        |g d$¢d%¬&¦  «         |sq|s|rWd'                     g d(„ |D ¦   «         ¢d)„ |                     ¦   «         D ¦   «         ¢¦  «        }t          j        d*|› �¦  «         n| st          j        d+¦  «         |r@|d,         d%         }t          j        d-|› d.�¦  «         t          j        d/|› d0�¦  «         dS dS )1zÄList scheduled Jobs.

    Use `--status` to filter by status (`active` or `suspended`) and `--label` to filter by `key=value` labels.
    A scheduled Job must match every filter to be listed.
    r$  r˜  c              3   óŠ   K  — | ]>}|                      ¦   «         ¯|                      ¦   «                              ¦   «         V — Œ?d S r×   )r¶   Úlowerrš  s     rI   r“   zscheduled_ps.<locals>.<genexpr>Ä  sH   è è € Ð^Ð^°TÐQU×Q[ÒQ[ÑQ]ÔQ]Ð^˜DŸJšJ™LœL×.Ò.Ñ0Ô0Ð^Ð^Ð^Ð^Ð^Ð^rK   rœ  c                 ó>   — g | ]}|t          t          ¦  «        v¯|‘ŒS r{   )Útupler  r¬  s     rI   r·   z scheduled_ps.<locals>.<listcomp>Æ  s+   € Ð\Ð\Ð\˜a°1½EÕBZÑ<[Ô<[Ð3[Ð3[˜Ð3[Ð3[Ð3[rK   zInvalid status filter(s) z: expected one of c                 ó   — g | ]	}|j         ‘Œ
S r{   )rŽ   r¬  s     rI   r·   z scheduled_ps.<locals>.<listcomp>Ê  s   € Ð;Ð;Ð;˜Q�”Ð;Ð;Ð;rK   rô   Tr´   r�  rž  r$   Nr€   rŸ  )r@   rn   Fr0  r  Úlast_jobr  rn   rZ  r¡  r¢  rR   Úatr¤  r¥  Úlast_runÚnext_job_run_atÚnext_runr%  )rÿ   r€   r$  r¢  r  r;  r=  r%  rÿ   r©  r¸   c              3   ó    K  — | ]	}d |› �V — Œ
dS r«  r{   r¬  s     rI   r“   zscheduled_ps.<locals>.<genexpr>  r®  rK   c              3   ó,   K  — | ]\  }}d |› d|› �V — ŒdS r°  r{   r±  s      rI   r“   zscheduled_ps.<locals>.<genexpr>  r´  rK   z#No scheduled jobs matched filters: zENo active scheduled jobs. Use `-a`/`--all` to include suspended ones.r   r-  z(` to view details about a scheduled job.zUse `hf jobs scheduled trigger z)` to trigger a scheduled job immediately.)r2   r   rU   rF   r  r!  r"  Úlist_scheduled_jobsr%  r\   r:   r5  r»   r¸  r;   rƒ  r£   rå   rY   )r•  r  r�   r€   r@   r  rM   r¹  rŽ   Úunknown_statusesÚshow_activeÚshow_suspendedrn   Ú	raw_labelr„   Úscheduled_jobsÚfiltered_jobsr1  r%  r£   Úsjrð   r0  Ústatus_dictr9  rÀ  rÁ  Úfirst_item_ids                               rI   Úscheduled_psrJ  „  sÖ  € õp ˜5Ð
!Ñ
!Ô
!€Cà
ð Kˆvð KÝÐIÑJÔJÐJð !€LØ�˜2ð _ð _ˆØ×ÒÐ^Ð^¸U¿[º[ÈÑ=MÔ=MÐ^Ñ^Ô^Ñ^Ô^Ð^Ð^à\Ð\ <Ð\Ñ\Ô\ÐØð 
Ýð?Ð(8ð ?ð ?Ø;Ð;Õ":Ð;Ñ;Ô;ð?ð ?ð ?ñ
ô 
ð 	
ð
 ð Ý.Ô5¸ÐEˆÝ1Ô;¸|ÐKˆˆàˆØˆð  €FØ�[˜bð ð ˆ	Ø�iÐÐÝÐa°IÐaÐaÐaÑbÔbÐbØ—_’_ S¨!Ñ,Ô,‰
ˆˆUØˆˆs‰ˆð ÐØ�VÐÐÝÐSÑTÔTÐTØˆˆv‰à×,Ò,°yÈÈÐSWÐ,ÑXÔX€Nà€MØ'ð ,ð ,ˆØÔ'Ð0¨5ˆØð 	˜>ð 	ØØð 	˜{ð 	ØØ×Ò˜]Ñ+Ô+Ð+Ð+ð #%€EØð ñ ˆÝ! "Ñ%Ô%ˆØ—8’8˜JÑ'Ô'Ð-¨2ˆØ—h’h˜xÑ(Ô(Ð.¨BˆØ—?’? :Ñ.Ô.ˆØ�lŠl˜9Ñ%Ô%Ð+¨ˆØ Ÿš XÑ.Ô.Ð4°"×9Ò9¸&ÑAÔAÐJÀUˆˆV‰Ø&Ÿlšl¨>Ñ:Ô:ÐC¸eˆˆ]ÑØ+.Ð9˜#Ÿ(š( 3™-œ-˜-°EˆˆY‰ØDLÐnÐQY×Q]ÒQ]Ð^bÑQcÔQcÐn˜8 Dœ>¨#¨2¨#Ô.×6Ò6°s¸CÑ@Ô@Ð@ÐinˆˆZÑàEPÇ_Â_ÐUfÑEgÔEgÐrˆKÐ)Ô*¨3¨B¨3Ô/×7Ò7¸¸SÑAÔAÐAÐmrð 	ˆZÑð Ÿ(š( 9Ñ-Ô-Ð6°ˆˆY‰Ø�Š�TÑÔÐÑå„IØØgÐgÐgØðñ ô ð ð
 ð ^Øð 	^˜6ð 	^ØŸ)š)ØhÐ7Ð7¨,Ð7Ñ7Ô7ÐhÐ:gÐ:gÐX^×XdÒXdÑXfÔXfÐ:gÑ:gÔ:gÐhñô ˆKõ ŒHÐH¸;ÐHÐHÑIÔIÐIÐIØð 	^ÝŒHÐ\Ñ]Ô]Ð]Øð mØ˜aœ œˆÝŒÐj°=ÐjÐjÐjÑkÔkÐkÝŒÐk°=ÐkÐkÐkÑlÔlÐlÐlÐlðmð mrK   zhf jobs scheduled inspect <id>Úscheduled_job_idsz>Scheduled Job IDs to inspect (or 'namespace/scheduled_job_id')c                 óê   ‡‡— g }| D ]*}t          |‰¦  «        \  }Š|                     |¦  «         Œ+|} t          |¬¦  «        Šˆˆfd„| D ¦   «         }t          j        d„ |D ¦   «         d¬¦  «         dS )z:Display detailed information on one or more scheduled Jobsr$  c                 ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS )©Úscheduled_job_idr@   )Úinspect_scheduled_job)r�   rO  rM   r@   s     €€rI   r·   z%scheduled_inspect.<locals>.<listcomp>$  s=   ø€ ð ð ð àð 	×!Ò!Ð3CÈyÐ!ÑYÔYðð ð rK   c                 ó^   — g | ]*}t          t          |¦  «        |j        j        ¬ ¦  «        ‘Œ+S rß  )rà  r:   r0  rn   )r�   rG  s     rI   r·   z%scheduled_inspect.<locals>.<listcomp>(  s4   € ÐiÐiÐiÐTV�}Õ/°Ñ3Ô3¸B¼KÔ<NÐOÑOÔOÐiÐiÐirK   rÿ   rt  Nrá  )rK  r@   r  r�  r?   rE  rM   s    `    @rI   Úscheduled_inspectrR    s¶   øø€ ð €JØ#ð "ð "ˆÝ8¸ÀÑKÔKÑˆ�	Ø×Ò˜&Ñ!Ô!Ð!Ð!Ø"ÐÝ
˜5Ð
!Ñ
!Ô
!€Cðð ð ð ð à 1ðñ ô €Nõ „IÐiÐiÐZhÐiÑiÔiÐrvÐwÑwÔwÐwÐwÐwrK   Údeletezhf jobs scheduled delete <id>rO  c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )zDelete a scheduled Job.r$  rN  zScheduled Job deletedrð  N)rJ   r2   Údelete_scheduled_jobr;   r]   ©rO  r@   r  rM   s       rI   Úscheduled_deleterW  +  ób   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ×ÒÐ.>È)ÐÑTÔTÐTÝ„JÐ&Ð+;Ð<Ñ<Ô<Ð<Ð<Ð<rK   zhf jobs scheduled suspend <id>c                 óÖ   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         t          j        d| › d�¦  «         dS )z Suspend (pause) a scheduled Job.r$  rN  zScheduled Job suspendedrð  zUse `hf jobs scheduled resume z` to resume it.N)rJ   r2   Úsuspend_scheduled_jobr;   r]   rY   rV  s       rI   Úscheduled_suspendr[  8  s   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ×ÒÐ/?È9ÐÑUÔUÐUÝ„JÐ(Ð-=Ð>Ñ>Ô>Ð>Ý„HÐOÐ.>ÐOÐOÐOÑPÔPÐPÐPÐPrK   Úresumezhf jobs scheduled resume <id>c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )z!Resume (unpause) a scheduled Job.r$  rN  zScheduled Job resumedrð  N)rJ   r2   Úresume_scheduled_jobr;   r]   rV  s       rI   Úscheduled_resumer_  F  rX  rK   Ú
reschedulez-hf jobs scheduled reschedule <id> "0 9 * * 1"c                 ó  — t          | |¦  «        \  } }t          |¬¦  «        }|                     | ||¬¦  «        }t          j        d|j        |j        ¬¦  «         t          j        d|j        j	        › d|j        › d�¦  «         dS )	z!Change when a scheduled Job runs.r$  )rO  r$  r@   zScheduled Job rescheduled)rÿ   r$  r-  rC   z` to see its next run.N)
rJ   r2   Úupdate_scheduled_job_scheduler;   r]   rÿ   r$  rY   r   r€   )rO  r$  r@   r  rM   rù   s         rI   Úscheduled_reschedulerc  S  s”   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ
×
+Ò
+Ð=MÐX`ÐluÐ
+Ñ
vÔ
v€CÝ„JÐ*¨s¬vÀÄÐMÑMÔMÐMÝ„HÐ^¨s¬y¬~Ð^Ð^ÀÄÐ^Ð^Ð^Ñ_Ô_Ð_Ð_Ð_rK   Útriggerzhf jobs scheduled trigger <id>c                 ó  — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «        }t          j        d|j        |j        ¬¦  «         t          j        d|j        j	        › d|j        › d�¦  «         dS )	zJTrigger a scheduled Job to run immediately (does not change the schedule).r$  rN  zScheduled Job triggered)rÿ   r  r  rC   z` to stream logs.N)
rJ   r2   Útrigger_scheduled_jobr;   r]   rÿ   r  rY   r   r€   )rO  r@   r  rM   rù   s        rI   Úscheduled_triggerrg  b  s‘   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ
×
#Ò
#Ð5EÐQZÐ
#Ñ
[Ô
[€CÝ„JÐ(¨S¬V¸¼ÐAÑAÔAÐAÝ„HÐO S¤Y¤^ÐOÐO°c´fÐOÐOÐOÑPÔPÐPÐPÐPrK   )z1hf jobs scheduled labels <id> --name daily-scriptz>hf jobs scheduled labels <id> --label env=prod --label team=mlz%hf jobs scheduled labels <id> --clearz)Remove all labels from the scheduled job.c                 ó´  — |s|€|st          d¦  «        ‚|s|�|rt          d¦  «        ‚t          | |¦  «        \  } }t          |¬¦  «        }|�.|s,|                     | |¬¦  «        j        j        pi }i |¥d|i¥}nt          ||¬¦  «        pi }|                     | ||¬¦  «        }	t          j	        d	|	j
        |                     d¦  «        ¬
¦  «         dS )zpUpdate labels on a scheduled Job. Passing --label replaces all existing labels; passing --name alone keeps them.Nr  r  r$  rN  r€   r–   )rO  rn   r@   r  r  )r   rJ   r2   rP  r0  rn   r§   Úupdate_scheduled_job_labelsr;   r]   rÿ   r5  )
rO  r€   r�   ré  r@   r  rM   r  rn   r1  s
             rI   Úscheduled_labelsrj  p  s0  € ð" ð 
�T�\¨%�\ÝØsñ
ô 
ð 	
ð 	ð 
�Ð! uÐ!ÝØzñ
ô 
ð 	
õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØÐ Ðð ×%Ò%Ð7GÐS\Ð%Ñ]Ô]ÔfÔmÐsÐqsð 	ð 2�NÐ1 F¨DÐ1Ð1ˆˆå" 5¨tÐ4Ñ4Ô4Ð:¸ˆØ×3Ò3Ø)°&ÀIð 4ñ ô €Mõ „JÐ MÔ$4¸6¿:º:ÀfÑ;MÔ;MÐNÑNÔNÐNÐNÐNrK   z)Schedule UV scripts on HF infrastructure.zBhf jobs scheduled uv run "0 0 * * *" --name daily-script script.pyz<hf jobs scheduled uv run "0 0 * * *" script.py --with pandasc                 ó¼  — t          |||¦  «         t          |¬¦  «        }t          d0i d|“d|“d|“d|“d|“d|“d|“d	|“d
|“d|“d|“d|“d|“d|	“d|
“d|“d|“dd“dd“d|“Ž5 }|j        s|j        rt          dt          › d�¦  «        ‚t          i d| “d|“d|“d|“dt          j	        |j
        ¦  «        “dd 	                    |pg ¦  «        “d|j        pt          “d|j        pt          j        j        “d|j        “d|j        “d|“d	|j        “d|j        “d|j        “d |j        “d!d 	                    d"„ |pg D ¦   «         ¦  «        “d#d 	                    d$„ |pg D ¦   «         ¦  «        “||j        d%œ¥|j        |¬&¦  «         |r	 ddd¦  «         dS |                     |j        |j
        | ||||j        |j        |j        |j        |j        |j        |j        |j        |||||j        ¬'¦  «        }ddd¦  «         n# 1 swxY w Y   t9          j        d(|j        |j        j        pi                       d¦  «        ¬)¦  «         tC          |	|
|j        ¦  «        sN|j        j        pi                       d¦  «        }t9          j"        d*|› d+|j#        j$        › d,|j        › d-�¦  «         t9          j"        d.|j#        j$        › d,|j        › d/�¦  «         dS )1r  r$  rM   rd   rf   r|   rg   rh   ri   rl   r}   rm   r~   rj   r   r€   r�   r`   r@   rk   Nrp   r‚   zjScheduled Jobs do not support network groups: remove 'network_group'/'network_aliases' from the script's [z] table to schedule it.r$  r%  r&  r  r  rR   rL   rn   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   z#scheduled_uv_run.<locals>.<genexpr>ò  r  rK   r  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r×   r&  r'  s     rI   r“   z#scheduled_uv_run.<locals>.<genexpr>ó  r  rK   r  rÑ   )rd   rf   r$  r%  r&  r|   ri   rg   rl   rm   rn   rL   rh   rj   r   r  r  r  r@   r*  r  r+  r,  rC   r0  r-  r.  r{   )%r5   r2   r°   rk   rp   r   r<   rê   r3  r»   rf   rg   r   rh   r   rÏ   rŽ   ri   rj   rl   rm   ro   rn   r@   rq   Úcreate_scheduled_uv_jobrd   rL   r;   r]   rÿ   r0  r5  r6  rY   r   r€   )r$  rd   rf   r%  r&  rg   rh   rl   rm   r€   r�   r`   r}   r~   rj   r   r‚   r  r  r  r@   r  r  ri   r   r!  r"  rM   r¯   rù   r7  s                                  rI   Úscheduled_uv_runro  �  sõ  € õL �f˜k¨5Ñ1Ô1Ð1Ý
˜5Ð
!Ñ
!Ô
!€CÝ	ð 
ð 
ð 
ØˆCð
àˆvð
ð  �Kð
ð �Uð	
ð
 ˆeð
ð ˆvð
ð ˆvð
ð ˆCð
ð �ð
ð �ð
ð "�\ð
ð �ð
ð �ð
ð ˆTð
ð ˆeð
ð  ˆvð!
ð" �)ð#
ð& �dð'
ð( ˜ð)
ð* �ð+
ð K
ð, 
ØÔð 	 6Ô#9ð 	ÝðBÝ(ðBð Bð Bñô ð õ 	ðØ˜Hðà˜7ðð ˜{ðð ˜&ð	ð
 �œ
 6Ô#5Ñ6Ô6ðð ˜Ÿš  ¨"Ñ-Ô-ðð ˜œÐ9Õ)9ðð ˜&œ-ÐF­;Ô+@Ô+Fðð ˜&œ-ðð ˜6œ>ðð ˜Hðð �v”zðð ˜6œ>ðð ˜6Ô.ðð ˜&œ-ðð  ˜#Ÿ(š(Ð"FÐ"F¸¸À2Ð"FÑ"FÔ"FÑFÔFð!ð"   §¢Ð)TÐ)TÀÐ@SÐQSÐ)TÑ)TÔ)TÑ!TÔ!Tð#ð$ &7Ø#Ô-ð'ð ð ð* Ô*Øð/	
ñ 	
ô 	
ð 	
ð2 ð 	ØðmK
ð K
ð K
ñ K
ô K
ð K
ð K
ð K
ðn ×)Ò)Ø”=ØÔ*ØØØ#ØØ”=Ø”,Ø”
Ø”NØ”=Ø”NØ”=Ø”NØØØ'Ø/ØÔ&ð' *ñ 
ô 
ˆðoK
ð K
ð K
ñ K
ô K
ð K
ð K
ð K
ð K
ð K
ð K
øøøð K
ð K
ð K
ð K
õX „JÐ&¨3¬6¸¼Ô9LÐ9RÐPR×8WÒ8WÐX^Ñ8_Ô8_Ð`Ñ`Ô`Ð`Ý˜d E¨6Ô+=Ñ>Ô>ð 
Ø”\Ô(Ð.¨B×3Ò3°FÑ;Ô;ˆ	ÝŒð^¨ð ^ð ^Ø),¬¬ð^ð ^Ø:=¼&ð^ð ^ð ^ñ	
ô 	
ð 	
õ „HÐ^¨s¬y¬~Ð^Ð^ÀÄÐ^Ð^Ð^Ñ_Ô_Ð_Ð_Ð_s   Á(D(HÆAHÈHÈHrð   c                óD   — |pi                       d¦  «        }|€| S d|i| ¥S )a  Promote the `name` label to a top-level `name` field for display.

    The `name` is kept inside `labels` too (the dataclasses and API payloads are unchanged); this
    only makes it a first-class column/field in command outputs. No-op when there is no name.
    r€   ©r5  )rð   rn   r€   s      rI   rà  rà    s5   € ð ˆL�b×Ò˜fÑ%Ô%€DØ€|ØˆØ�DÐ!˜DÐ!Ð!rK   c                 óH   — | dupd|v pt          d„ |pg D ¦   «         ¦  «        S )zlWhether the Job was named on purpose: via `--name`, a `name=` label, or the script's `[tool.hf-jobs]` table.Nzlabels.namec              3   óV   K  — | ]$}|                      d d¦  «        d         dk    V — Œ%dS )r´   r$   r   r€   N)rF   )r�   rð   s     rI   r“   z%_has_explicit_name.<locals>.<genexpr>/  s:   è è € ÐGÐG°4ˆt�zŠz˜#˜qÑ!Ô! !Ô$¨Ò.ÐGÐGÐGÐGÐGÐGrK   )Úany)r€   r�   rq   s      rI   r6  r6  *  sC   € ð 	�DÐð 	HØ˜KÐ'ð	HåÐGÐG¸5¸;ÀBÐGÑGÔGÑGÔGðrK   c                ó¤   — | s|€dS i }| pg D ](}d|v r|                      dd¦  «        n|df\  }}|||<   Œ)|�d|v rt          d¦  «        ‚||d<   |S )a  Parse label key-value pairs from CLI arguments.

    Args:
        labels: List of label strings in KEY=VALUE format. If KEY only, then VALUE is set to empty string.

    Returns:
        Dictionary mapping label keys to values, or None if no labels or name provided.
    Nr´   r$   rž   r€   z4--name and --label name=... cannot both be provided.)rF   r   )rn   r€   r˜   Ú	label_varr„   rŽ   s         rI   r§   r§   3  s“   € ð ð �d�lØˆtØ!#€JØ�\˜rð  ð  ˆ	Ø03°yÐ0@Ð0@�Y—_’_ S¨!Ñ,Ô,Ð,ÀyÐRTÀo‰
ˆˆUØˆ
�3‰ˆØÐØ�ZÐÐÝÐQÑRÔRÐRØ!ˆ
�6ÑØÐrK   rç   rr  c                 ó’  — d„ t          g | ¢|‘R Ž D ¦   «         }t          t          j        ¦   «         j        t          |¦  «        dz  ¦  «        }t          |¦  «        t          |¦  «        z   |k    r¦|                     t          |¦  «        ¦  «        }||xx         dz  cc<   t          |¦  «        t          |¦  «        z   |k    r.|t          |¦  «        z
  t          |¦  «        z
  ||         z   ||<   t          |¦  «        t          |¦  «        z   |k    °¦ dt          |¦  «        z  j        |Ž }g }| 	                     |j        |Ž ¦  «         | 	                     |j        d„ |D ¦   «         Ž ¦  «         | D ]9}d„ t          ||¦  «        D ¦   «         }| 	                     |j        |Ž ¦  «         Œ:d 
                    |¦  «        S )z‰
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c                 ó@   — g | ]}t          d „ |D ¦   «         ¦  «        ‘ŒS )c              3   óN   K  — | ] }t          t          |¦  «        ¦  «        V — Œ!d S r×   ©rÙ   rv   )r�   Úxs     rI   r“   z'_tabulate.<locals>.<listcomp>.<genexpr>P  s.   è è € Ð/Ð/ a•c�#˜a™&œ&‘k”kÐ/Ð/Ð/Ð/Ð/Ð/rK   )râ   )r�   Úcols     rI   r·   z_tabulate.<locals>.<listcomp>P  s/   € ÐOÐOÐO°C•#Ð/Ð/¨3Ð/Ñ/Ô/Ñ/Ô/ÐOÐOÐOrK   é   rQ  z{{:{}}} c                 ó   — g | ]}d |z  ‘ŒS )ú-r{   )r�   Úws     rI   r·   z_tabulate.<locals>.<listcomp>Z  s   € Ð$AÐ$AÐ$A° S¨1¡WÐ$AÐ$AÐ$ArK   c                 ó¬   — g | ]Q\  }}t          t          |¦  «        ¦  «        |k    rt          |¦  «        d |dz
  …         dz   nt          |¦  «        ‘ŒRS )Né   z...rz  )r�   r{  Ú	col_widths      rI   r·   z_tabulate.<locals>.<listcomp>\  sf   € ð 
ð 
ð 
á��9õ 03µ3°q±6´6©{¬{¸YÒ/FÐ/F�C�‰FŒF�?�Y ‘]�?Ô# eÑ+Ð+ÍCÐPQÉFÌFð
ð 
ð 
rK   rá   )r\  râ   ÚshutilÚget_terminal_sizeÚcolumnsrÙ   ÚsumrÞ   r   r\   r»   )	rç   rr  Ú
col_widthsÚterminal_widthÚcol_to_minimizeÚ
row_formatrè   rX  Úrow_format_argss	            rI   rˆ  rˆ  I  sÞ  € ð PÐO½3Ð;NÀÐ;NÀgÐ;NÐ;NÐ;NÐOÑOÔO€JÝ�Ô1Ñ3Ô3Ô;½SÀ¹\¼\ÈBÑ=NÑOÔO€NÝ
ˆg‰,Œ,�˜Z™œÑ
(¨>Ò
9Ð
9Ø$×*Ò*­3¨z©?¬?Ñ;Ô;ˆØ�?Ð#Ð#Ô#¨Ñ)Ð#Ð#Ñ#Ýˆw‰<Œ<�#˜j™/œ/Ñ)¨^Ò;Ð;Ø*8½3¸z¹?¼?Ñ*JÍSÐQXÉ\Ì\Ñ*YÐ\fÐgvÔ\wÑ*wˆJ�Ñ'õ	 ˆg‰,Œ,�˜Z™œÑ
(¨>Ò
9Ð
9ð
 4�*�s 7™|œ|Ñ+Ô3°ZÐ@€JØ€EØ	‡L‚LÐ"�Ô" GÐ,Ñ-Ô-Ð-Ø	‡L‚LÐ"�Ô"Ð$AÐ$A°jÐ$AÑ$AÔ$AÐBÑCÔCÐCØð :ð :ˆð
ð 
å # C¨Ñ 4Ô 4ð
ñ 
ô 
ˆð 	�ŠÐ&�ZÔ&¨Ð8Ñ9Ô9Ð9Ð9Ø�9Š9�UÑÔÐrK   r¥  ÚqueueÚfunc.Úkwargsc                 óF   —  |di |¤ŽD ]}|                       |¦  «         Œd S )Nr{   )Úput)r�  rŽ  r�  r]   s       rI   Ú_write_generator_to_queuer’  g  s<   € Ø�$�.�.˜�.�.ð ð ˆØ�	Š	�&ÑÔÐÐðð rK   r…  r|  c             #   óº  ‡ ‡‡K  — t          ¦   «         Šˆˆ ˆfd„|D ¦   «         }	 	 	 ‰                     d¬¦  «        V — n?# t          $ r2 t          d„ |D ¦   «         ¦  «        r‰                     ¦   «         rY nY nw xY wŒZn# t
          $ r Y nw xY w	 d„ |D ¦   «          dS # t          j        $ r Y dS w xY w# 	 d„ |D ¦   «          w # t          j        $ r Y w w xY wxY w)a;  
    Takes a function that returns an iterable of items, and run it in parallel using threads to return the flattened iterable of items as they arrive.

    This is inspired by those three `map()` variants, and is the mix of all three:

    * `imap()`: like `map()` but returns an iterable instead of a list of results
    * `imap_unordered()`: like `imap()` but the output is sorted by time of arrival
    * `flatmap()`: like `map()` but given a function which returns a list, `flatmap()` returns the flattened list that is the concatenation of all the output lists
    c                 óL   •— g | ] }‰                      t          ‰‰|f¦  «        ‘Œ!S r{   )Úapply_asyncr’  )r�   r�  rŽ  r…  r�  s     €€€rI   r·   z&iflatmap_unordered.<locals>.<listcomp>|  s2   ø€ ÐrÐrÐrÐ\b�T×%Ò%Õ&?À%ÈÈvÐAVÑWÔWÐrÐrÐrrK   Tçš™™™™™©?©rj   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r×   )Úready©r�   Úasync_results     rI   r“   z%iflatmap_unordered.<locals>.<genexpr>‚  s.   è è € ÐNÐN°�|×)Ò)Ñ+Ô+ÐNÐNÐNÐNÐNÐNrK   c                 ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )r–  r—  rq  rš  s     rI   r·   z&iflatmap_unordered.<locals>.<listcomp>‰  s)   € ÐNÐNÐN°ˆ\×Ò dÐÑ+Ô+ÐNÐNÐNrK   N)r   r5  r   r•  ÚemptyÚKeyboardInterruptr„  rú  )r…  rŽ  r|  Úasync_resultsr�  s   ``  @rI   rŠ  rŠ  l  sf  øøøè è € õ ‘g”g€EØrÐrÐrÐrÐrÐrÐfqÐrÑrÔr€Mðð	ðØ—i’i¨�iÑ-Ô-Ð-Ð-Ð-Ð-øÝð ð ð ÝÐNÐNÀÐNÑNÔNÑNÔNð ÐSX×S^ÒS^ÑS`ÔS`ð Ø�Eøøðøøøð	ð
 øÝð ð ð Øˆðøøøð	ØNÐNÀÐNÑNÔNÐNÐNÐNøÝÔ+ð 	ð 	ð 	ØˆDˆDð	øøøøð	ØNÐNÀÐNÑNÔNÐNÐNøÝÔ+ð 	ð 	ð 	ØˆDð	øøøøøøs�   ¥B §A  ¿B Á 7A<Á7B Á;A<Á<B Â B6 Â
BÂB6 ÂBÂB6 ÂB  Â B3Â2B3Â6CÂ8CÃCÃCÃCÃCÃC)NNNNNNNNNNFFNNFNNNNNNFF)FNNN)NFNN)FNNNrN  NN)rA   N)NN)FNN)NNFNN)NNN)NNNNNNNNNNNNFFNNFNNNNNNNNFF)NNNNNNNNNNNNFNNNNNNFF)FNNNNN)NNNNNNNNNNNNNNFNNNNNNNNFF)r{   )±ru   r¶  r„  Úmultiprocessing.poolr3  r„  r‰  Úcollections.abcr   r   r   r   Ú
contextlibr   Údataclassesr   r	   Úenumr
   Úpathlibr   r�  r   r   Útypingr   r   r   Úurllib.parser   Úhuggingface_hubr   r   r   r   r   r   r   Úhuggingface_hub._jobs_apir   r   r   r   Úhuggingface_hub.errorsr   Úhuggingface_hub.utilsr   Ú$huggingface_hub.utils._cache_managerr   Úhuggingface_hub.utils._hf_urisr!   Úhuggingface_hub.utils._parsingr"   r#   Ú
_cli_utilsr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Ú
_frameworkr7   r8   Ú_outputr9   r:   r;   Ú_uv_script_headerr<   r=   r>   Ú
get_loggerrr   Úloggerrv   r7  rJ   rx   ra   rc   ÚintÚboolr°   ry   r¥   r¦   r¨   r©   rã   rê   rÕ   rŒ  ÚImageArgÚImageOptÚ	FlavorOptÚ	LabelsOptÚNameOptÚ
TimeoutOptÚAttemptsOptÚ	DetachOptÚ	DryRunOptÚNamespaceOptÚResourceGroupIdOptÚ	ExposeOptÚExposePublicOptÚSshEnabledOptÚNetworkGroupOptÚNetworkAliasOptÚWithOptÚ	PythonOptÚ
SuspendOptÚConcurrencyOptÚScheduleArgÚ	ScriptArgÚScriptArgsArgÚ
CommandArgÚJobIdArgÚ	JobIdsArgÚScheduledJobIdArgÚJobVolumesOptÚjobs_clir  r  r  r8  r>  rG  r_  rc  r”  rÂ  rÙ  râ  ræ  rí  rò  r   r  r  Úuv_appÚ	add_groupr  r  Úscheduled_appr2  rJ  rR  rW  r[  r_  rc  rg  rj  Úscheduled_uv_appro  rà  r6  r§   rˆ  r¥  r’  r…  r†  rŠ  r{   rK   rI   ú<module>rØ     sb&  ðð GÐ Fà Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø !Ð !Ð !Ð !Ð !Ð !à `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø )Ð )Ð )Ð )Ð )Ð )Ø =Ð =Ð =Ð =Ð =Ð =Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð( )Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ið 
ˆÔ	˜HÑ	%Ô	%€ð.¨ð .¸¸t¹ð .ÈÈcÐSVÐY]ÑS]ÈoÔH^ð .ð .ð .ð .ð8)Ø�#ŒY˜Ñð)Ø',ð)Ø9<¸t¹ð)à	ˆ&„\�DÑð)ð )ð )ð )ðX ðað að að að añ aô añ „ðað0 ðvà	ðvð ðvð �c”˜TÑ!ð	vð
 �s”)˜dÑ"ðvð �‰:ðvð �$‰Jðvð �$‰Jðvð 
ˆcŒ�TÑ	ðvð �D‰jðvð �#ŒY˜Ñðvð ˜‘*ðvð �4‰Zðvð �D‰jðvð �‰*ðvð  �Œ9�tÑð!vð" �ŒI˜Ñð#vð$ �T‰zð%vð& ˜‘:ð'vð( ˜#”Y Ñ%ð)vð* ð+vð, ˆ|˜T 4Ð'Ô(ð-vð vð vñ „ðvðt MRð5ð 5ð 5Ø�#ŒY˜Ñð5Ø-0°4©Zð5ØEIð5à	ˆ#ˆs�T‰zˆ/Ôð5ð 5ð 5ð 5ð& NSð$2ð $2ð $2Ø�Œ9ð$2Ø#'¨¨S°4©Z¨Ô#8ð$2ØFJð$2à	ˆ#ˆs�T‰zˆ/Ôð$2ð $2ð $2ð $2ðN" 4¨¤9ð "¸DÀ¼Ið "È%ÐPTÐUXÔPYÐ[_Ð`cÔ[dÐPdÔJeð "ð "ð "ð "ð$ !%Ø(,Ø"ðð ð à�$‰Jðð �4‰Zðð �T‰zð	ð
 
ˆc�3˜‘:ˆoÔ	ðð �#�s˜T‘z�/Ô"ðð �s”)ðð ˜‘:ðð ˜#”Y Ñ%ðð �Œ9�tÑðð 
ˆ#„Yðð ð ð ð>  €ð RTÐejð ð ð ˜t C¨ Hœ~ð ¸zÈ#¼ð Ð^bð Ðosð ð ð ð ð6x˜3ð x sð x¸ÀC¼ð xÈSð xð xð xð xð(  Ð ð ØØ€HØ'ðñ ô ðô€ð Øˆ$�JØ
€FØ=ðñ ô ðô€ð Øˆ$�JØ
€FØrØ�:˜kÑ*Ô*ðñ ô ðô€	ð Øˆ„I�ÑØ
€FØØØBðñ ô ðô€	ð Øˆ$�JØ
€FØð vðñ ô ðô€ð Øˆ$�JØ
€FØ_ðñ ô ðô€
ð Øˆ$�JØ
€Fˆ<˜QÐ%`ÐaÑaÔaðcô€ð
 ØØ
€FØØØBðñ ô ðô€	ð ØØ
€FØØOðñ ô ðô€	ð Øˆ$�JØ
€FØeðñ ô ðô€ð Øˆ$�JØ
€FØð oðñ ô ðôÐ ð Øˆ„I�ÑØ
€FØð Gðñ ô ðô€	ð Øˆ„I�ÑØ
€FØð iðñ ô ðô€ð ØØ
€FØð pðñ ô ðô€ð Øˆ$�JØ
€FØð ]ðñ ô ðô€ð Øˆ„I�ÑØ
€FØð Nðñ ô ðô€ð Øˆ„I�ÑØ
€FØØ4ðñ ô ðô€ð Øˆ$�JØ
€FØØØDðñ ô ðô€	ð Øˆ4�KØ
€FØ0ðñ ô ðô€
ð Øˆ4�KØ
€FØGðñ ô ðô€ð ØØ€HØlðñ ô ðô€ð ØØ€HØ3ðñ ô ðô€	ð Øˆ„I�ÑØ€HØ'ðñ ô ðô€ð Øˆ„IØ€HØ"ðñ ô ðô€
ð ØØ€HØ-ðñ ô ðô€ð Øˆ„I�ÑØ€HØ.ðñ ô ðô€	ð ØØ€HØAðñ ô ðôÐ ð Øˆ„I�ÑØ
€FØØðeð	ñ 	ô 	ð
ô€ð ˆ=Ð?Ð@Ñ@Ô@€ð	* uð 	*°7ð 	*¸tð 	*ð 	*ð 	*ð 	*ð, Uð ,°ð ,ÀTð ,Èdð ,ð ,ð ,ð ,ð, 
×ÒØ	Ø.°Ð5ðð ð ð ñ 
ô 
ð ØØØØ ØØ#'ØØØ ØØØØ%)ØØ%)Ø%)Ø,0Ø"ØØØ Øñ3e9ð e9Øðe9àðe9ð 
ðe9ð ð	e9ð
 ðe9ð ðe9ð ðe9ð ðe9ð !ðe9ð ðe9ð ðe9ð ðe9ð ðe9ð ðe9ð ðe9ð  #ð!e9ð" 
ð#e9ð$ #ð%e9ð& #ð'e9ð( *ð)e9ð* ð+e9ð, ð-e9ð. ð/e9ð0 ð1e9ð2 ð3e9ð4 
ð5e9ð e9ð e9ñ
ô 
ðe9ðP 
×ÒØ
ðð ð ð ñ ô ð$ 	ð 	Ø"Øñ'*
ð *
Øð*
àØØˆØØð Eð	
ñ 	
ô 	
ð	ôð*
ð Øˆd‰
ØˆØØð Jð	
ñ 	
ô 	
ð	ôð*
ð$ ð%*
ð& ð'*
ð( 
ð)*
ð *
ð *
ñô ð*
ðZ'�3ð '˜4ð 'ð 'ð 'ð 'ð 3ð °°c¸3°h´ð ÐPTÐUXÔPYð Ð^bÐcgÐhkÐnqÑhqÔcrÔ^sð ð ð ð ð.ØðØ!)¨$¨s°C¨x¬.Ô!9ðØJNÈsÌ)ðàˆe�D˜#˜t D¨¨s©¤OÔ4Ð4Ô5Ô6ðð ð ð ð 
×ÒØðð ð ð ñ ô ð ð 	Ø"Øñjuð juØðjuàØØˆØØØ|ð	
ñ 	
ô 	
ð	ôðjuð ðjuð ðjuð 
ðjuð juð juñô ðjuðZ 
×ÒØðð ð ð ñ 
ô 
ð& 	ð 	ð 	ð 	ð 	Ø"ØñQxað xaØ	ØØˆØØØjð	
ñ 	
ô 	
ð	ô
ðxað ØˆSŒ	�DÑØˆØØ!�z (Ñ+Ô+Øyð	
ñ 	
ô 	
ð	ôðxað" ØˆSŒ	�DÑØˆØØð Oð	
ñ 	
ô 	
ð	ôð#xað2 Øˆd‰
ØˆØØYð	
ñ 	
ô 	
ð	ôð3xað@ ØØˆØØVð	
ñ 	
ô 	
ð	ôðAxaðN ðOxaðP ðQxaðR 
ðSxað xað xañ
ô 
ðxaðv 
×Ò�*Ð(:Ð';ÐÑ<Ô<ñ]ð ]ð ]ñ =Ô<ð]ð6 
×Ò�)Ð'AÐ&BÐÑCÔCð #Øñhð hØØˆSŒ	ØˆØ=ð	
ñ 	
ô 	
ð	ôðhð ðhð ðhð 
ðhð hð hñ DÔCðhð* 
×Ò�'Ð%=Ð?`Ð$aÐÑbÔbð Ø"Øñ	9ð 9Øð9àð9ð ð9ð ð	9ð
 
ð9ð 9ð 9ñ cÔbð9ð 
×ÒØðð ð ð ñ ô ð 	ð 	ØQVØ"Øñ#qð qØðqàØˆSŒ	�DÑØˆØð	
ñ 	
ô 	
ð	ôðqð ØˆSŒ	�DÑØˆØð Uð	
ñ 	
ô 	
ð	ôðqð �T˜6˜6 )Ð2LÐMÑMÔMÐMÔNðqð  ð!qð" ð#qð$ 
ð%qð qð qñô ðqð< 
×Ò�(Ð&?Ð%@ÐÑAÔAð #Øñ	+ð 	+Øð	+àð	+ð ð	+ð 
ð		+ð 	+ð 	+ñ BÔAð	+ð 
×ÒØ
ðð ð ð ñ ô ð( 	Ø"Øñ4
ð 4
ØØˆSŒ	ØˆØ?ð	
ñ 	
ô 	
ð	ôð4
ð Øˆd‰
ØˆØgð	
ñ 	
ô 	
ð	ôð4
ð ð4
ð ð4
ð 
ð4
ð 4
ð 4
ñô ð4
ðn 
×ÒØðð ð ð ñ ô ð ØØX]Ø"ØñEð EØðEà
ðEð ðEð �T˜6˜6 )Ð2SÐTÑTÔTÐTÔUð	Eð
 ðEð ðEð 
ðEð Eð Eñô ðEð: 
×ÒØ	ðð ð ð ñ ô ð )-Ø!Ø"Øñ#ð #Øð#à%ð#ð ð#ð ð	#ð
 ð#ð 
ð#ð #ð #ñô ð#ðL 
ˆÐdÐ	eÑ	eÔ	e€Ø × Ò �6 Ð Ñ %Ô %Ð %ð ‡‚Ø	Ø.°Ð5ðð ð ð ñ ô ð "&ØØØØØØØ ØØ#'ØØ ØØØØ%)ØØ%)Ø%)Ø,0Ø"ØØØØØ Øñ9n9ð n9Øðn9àðn9ð ðn9ð ð	n9ð
 
ðn9ð ðn9ð ðn9ð ðn9ð ðn9ð ðn9ð !ðn9ð ðn9ð ðn9ð ðn9ð ðn9ð  ð!n9ð" #ð#n9ð$ 
ð%n9ð& #ð'n9ð( #ð)n9ð* *ð+n9ð, ð-n9ð. ð/n9ð0 ð1n9ð2 ð3n9ð4 ð5n9ð6 ð7n9ð8 ð9n9ð: 
ð;n9ð n9ð n9ñô ðn9ðbð ð ð ð ˜s Dñ ô ð ð �Ð#QÐRÑRÔR€Ø × Ò �= {Ð Ñ 3Ô 3Ð 3ð ×ÒØ	Ø.°Ð5ØbÐcð ñ ô ð Ø"&ØØØØØ ØØ#'ØØØ ØØØ%)Ø,0Ø"ØØØ Øñ1btð btØðbtàðbtð ðbtð ð	btð
  ðbtð 
ðbtð ðbtð ðbtð ðbtð ðbtð ðbtð !ðbtð ðbtð ðbtð ðbtð  ð!btð" ð#btð$ #ð%btð& *ð'btð( ð)btð* ð+btð, ð-btð. ð/btð0 ð1btð2 
ð3btð btð btñô ð
btðJ ×ÒØðð ð ð ñ 	ô 	ð$ 	ð 	ð 	ð 	Ø"ØñOAmð AmØ	ØØˆØØØgð	
ñ 	
ô 	
ð	ô
ðAmð ØˆSŒ	�DÑØˆØØ!�zÐ":Ñ;Ô;ð)ð		
ñ 	
ô 	
ð	ô
ðAmð( ØˆSŒ	�DÑØˆØØð7ð		
ñ 	
ô 	
ð	ô
ð)Amð> Øˆd‰
ØˆØØcð	
ñ 	
ô 	
ð	ôð?AmðL ðMAmðN ðOAmðP 
ðQAmð Amð Amñ	ô 	ðAmðH ×Ò�yÐ,LÐ+MÐÑNÔNð #Øñxð xØ ØˆSŒ	ØˆØQð	
ñ 	
ô 	
ð	ôðxð ðxð ðxð 
ðxð xð xñ OÔNðxð0 ×Ò�xÐ+JÐ*KÐÑLÔLð #Øñ	=ð 	=Ø'ð	=àð	=ð ð	=ð 
ð		=ð 	=ð 	=ñ MÔLð	=ð ×Ò�yÐ,LÐ+MÐÑNÔNð #Øñ
Qð 
QØ'ð
Qàð
Qð ð
Qð 
ð	
Qð 
Qð 
Qñ OÔNð
Qð ×Ò�xÐ+JÐ*KÐÑLÔLð #Øñ	=ð 	=Ø'ð	=àð	=ð ð	=ð 
ð		=ð 	=ð 	=ñ MÔLð	=ð ×Ò�|Ñ/^Ð._ÐÑ`Ô`ð #Øñ	`ð `Ø'ð`àð`ð ð`ð ð	`ð
 
ð`ñ `ð `ñ aÔ`ð`ð ×Ò‘yÑ,LÐ+MÐÑNÔNð #Øñ
Qð 
QØ'ð
Qàð
Qð ð
Qð 
ð	
Qñ 
Qð 
Qñ OÔNð
Qð ×ÒØðñ ð ð ñ ô ð ØØbgØ"ØñOð OØ'ðOà
ðOð ðOð �T˜6˜6 )Ñ2]Ð^Ñ^Ô^Ð^Ô_ð	Oð
 ðOð ðOð 
ðOñ Oð Oñô ðOðB !�=Ñ&QÐRÑRÔRÐ Ø × Ò Ð(¨tÐ Ñ 4Ô 4Ð 4ð ×ÒØ	Ø.°Ð5áLÙFðð ñ ô ð "&ØØ"&ØØØØØØØ ØØ#'ØØ ØØØ%)Ø,0Ø"ØØØØØ Øñ7s`ð s`Øðs`àðs`ð ðs`ð ð	s`ð
  ðs`ð ðs`ð ðs`ð 
ðs`ð ðs`ð ðs`ð ðs`ð ðs`ð ðs`ð !ðs`ð ðs`ð  ð!s`ð" ð#s`ð$ ð%s`ð& #ð's`ð( *ð)s`ð* ð+s`ð, ð-s`ð. ð/s`ð0 ð1s`ð2 ð3s`ð4 ð5s`ð6 ð7s`ð8 
ð9s`ñ s`ð s`ñô ðs`ñr	"˜˜S #˜Xœð 	"°4¸¸S¸´>ÀDÑ3Hð 	"ÈTÐRUÐWZÐRZÌ^ð 	"ñ 	"ð 	"ð 	"ñð ˜S 4™Zð °°S´	¸DÑ0@ð ÈzÐZ]Ìð Ðhlð ñ ð ð ð GKð ð ð ˜d 3œi¨$Ñ.ð ¸¸t¹ð ÈtÐTWÐY\ÐT\Ì~Ð`dÑOdð ñ ð ð ñ,�D˜˜c C™iœÔ)ñ °D¸´Ið À#ð ñ ð ð ð6 €G‰C�L„L€ñ U¨1¤Xñ °X¹cÀ8ÈAÄ;Ð>NÔ5Oñ ÐY]ð Ðbfð ñ ð ð ñ
Ø
Ô
Ô
)ñà
‘3˜ œÐ#Ô
$ñð �d”ð	ð
 ˆa„[ðñ ð ð ð ð rK   