§
    }ŠtjhÎ  ã            .       óÒ  — 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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 dd
lmZ ddlmZ ddl 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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z<  e!j=        e>¦  «        Z?de@de@dz  deAe@e@dz  f         fd„ZBdeCe@         dz  dede@dz  deCe         dz  fd„ZDdZEee@ e8d¬¦  «        f         ZFee@dz   e9d¬¦  «        f         ZGee@dz   e9d e.e¦  «        ¬ ¦  «        f         ZHeeCe@         dz   e9d!d"d#¬¦  «        f         ZIee@dz   e9d$d%¬¦  «        f         ZJee@dz   e9d&¬¦  «        f         ZKeeL e9d'd(d)¬¦  «        f         ZMee@dz   e9d*¬¦  «        f         ZNee@dz   e9d+d,¬¦  «        f         ZOeeCeP         dz   e9d-d.¬¦  «        f         ZQeeL e9d/d0¬¦  «        f         ZReeCe@         dz   e9d1d2¬¦  «        f         ZSee@dz   e9d3d4d5¬¦  «        f         ZTeeLdz   e9d6¬¦  «        f         ZUeeLdz   e9d7¬¦  «        f         ZVee@ e8d8¬¦  «        f         ZWee@ e8d9¬¦  «        f         ZXeeCe@         dz   e8d:¬¦  «        f         ZYeeCe@          e8d;¬¦  «        f         ZZee@ e8d<¬¦  «        f         Z[eeCe@         dz   e8d=¬¦  «        f         Z\ee@ e8d>¬¦  «        f         Z]eeCe@         dz   e9d?d@dA¬¦  «        f         Z^ e6dB¬¦  «        Z_dedCeddfdD„Z`e_ a                    dEdFdGig dH¢¬I¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dÜdKeFdLeZdMe+dNe-dOeJdPeIdQe^dRe*dSe,dTeHdUeKdVeMdWeQdXeRdYeOdeNdZe1ddf$d[„¦   «         Zbe_ a                    d\g d]¢¬^¦  «        	 	 	 	 dÝde[d_eeL e9d`dadb¬¦  «        f         dceePdz   e9dddedf¬¦  «        f         deNdZe1ddfdg„¦   «         Zcdhede@e@f         dieCeAe@e@e@f                  deLfdj„ZedkePddfdl„Zfde@dmeede@ef                  dneCe@         deeAeLe@eCeCe@ePz                    f                  fdo„Zge_ a                    dpdqg¬^¦  «        	 	 	 dÞdre\deNdZe1ddfds„¦   «         Zhe_ a                    dtg du¢¬^¦  «        	 	 	 	 	 	 	 	 dßdweeL e9dxdydz¬¦  «        f         d{eeCe@         dz   e9d| e.e¦  «        d}¬~¦  «        f         dPeeCe@         dz   e9d!d"d¬¦  «        f         dOee@dz   e9d$d€¬¦  «        f         d�eeP e9d‚dƒ¬¦  «        f         deNdZe1d„eeCe@         dz   e9d`d…d†¬¦  «        f         ddfd‡„¦   «         Zie_ a                    dˆd‰g¬^¦  «        dàdŠ„¦   «         Zje_ a                    d‹dŒg¬^¦  «        	 	 dádreeCe@          e8d�¬¦  «        f         deNdZe1ddfdŽ„¦   «         Zke_ a                    d�d�g¬^¦  «        	 	 dáde[deNdZe1ddfd‘„¦   «         Zle_ a                    d’g d“¢¬^¦  «        	 	 	 dÞdreeCe@          e8d”¬¦  «        f         dUee@dz   e9d•¬¦  «        f         deNdZe1ddf
d–„¦   «         Zme_ a                    d—g d˜¢¬^¦  «        	 	 	 	 	 dâde[dOeJdPeId™eeL e9dšd›¬¦  «        f         deNdZe1ddfdœ„¦   «         Zne_ a                    dXg d�¢¬^¦  «        	 	 	 	 dãde[dže0dŸe/deNdZe1ddfd „¦   «         Zo e6d¡¬¦  «        Zpe_ q                    epd¢¬£¦  «         ep a                    dEdFdGig d¤¢¬I¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 däd¥eXd¦eYdKeGdTeHdMe+dNe-dOeJdPeIdQe^dRe*dSe,dUeKdVeMdWeQdXeRdYeOdeNdZe1d§eSd¨eTddf*d©„¦   «         Zr e6dª¬¦  «        Zse_ q                    esd«¬£¦  «         es a                    dEdFdGid¬g¬I¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dåd­eWdKeFdLeZd®eUd¯eVdMe+dNe-dOeJdPeIdQe^dRe*dSe,dTeHdUeKdWeQdYeOdeNdZe1ddf&d°„¦   «         Ztes a                    dtd±g¬^¦  «        	 	 	 	 dÝdweeL e9dxdyd²¬¦  «        f         deNdZe1d„eeCe@         dz   e9d`d…d³¬¦  «        f         ddf
d´„¦   «         Zues a                    d‹dµg¬^¦  «        	 	 dád¶eeCe@          e8d·¬¦  «        f         deNdZe1ddfd¸„¦   «         Zves a                    d¹dºg¬^¦  «        	 	 dád»e]deNdZe1ddfd¼„¦   «         Zwes a                    d®d½g¬^¦  «        	 	 dád»e]deNdZe1ddfd¾„¦   «         Zxes a                    d¿dÀg¬^¦  «        	 	 dád»e]deNdZe1ddfdÁ„¦   «         Zyes a                    dÂdÃg¬^¦  «        	 	 dád»e]deNdZe1ddfdÄ„¦   «         Zzes a                    d—g dÅ¢¬^¦  «        	 	 	 	 	 dâd»e]dOeJdPeId™eeL e9dšdÆ¬¦  «        f         deNdZe1ddfdÇ„¦   «         Z{ e6dÈ¬¦  «        Z|es q                    e|d¢¬£¦  «         e| a                    dEdFdGidÉdÊg¬I¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dæd­eWd¥eXd¦eYd®eUd¯eVdKeGdTeHdMe+dNe-dOeJdPeIdQe^dRe*dSe,dUeKdWeQdYeOdeNdZe1d§eSd¨eTddf,dË„¦   «         Z}dÌede@ef         d—ede@e@f         dz  dede@ef         fdÍ„Z~dOe@dz  dPeCe@         dz  deLfdÎ„Zdd£œd—eCe@         dz  dOe@dz  dede@e@f         dz  fdÏ„Z€dÐeCeCe@ePz                    dÑeCe@         de@fdÒ„Z� edÓ¦  «        Z‚dÔee‚         dÕedÖee‚         f         d×edddfdØ„ZƒdÙej„        j…        dÕedÖee‚         f         dÚeCed         dee‚         fdÛ„Z†dS )çz@Contains commands to interact with jobs on the Hugging Face Hub.é    N)ÚCallableÚIterable)Úfnmatch)ÚPath)ÚEmptyÚQueue)Ú	AnnotatedÚAnyÚTypeVar)Úurlsplit)ÚHfApiÚJobHardwareÚJobInfoÚJobStageÚVolumeÚ	constants)ÚTERMINAL_JOB_STAGES)ÚCLIError)Úlogging)Ú_format_size)Ú_split_mount)Úformat_durationÚparse_durationé   )Ú
EnvFileOptÚEnvOptÚSecretsFileOptÚ
SecretsOptÚ
SoftChoiceÚSshDryRunOptÚSshIdentityFileOptÚTokenOptÚexec_sshÚ
get_hf_apiÚparse_env_mapÚparse_volumesÚtyper_factory)ÚArgumentÚOption)Ú_dataclass_to_dictÚoutÚ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       úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/huggingface_hub/cli/jobs.pyÚ_parse_namespace_from_job_idr7   :   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/r0   ú )Ú
startswithr   ÚHF_PROTOCOLÚextendr&   r   r   r   Ú
expanduserÚis_dirÚsync_job_volumer=   r+   ÚhintÚsourceÚpathÚappend)	r9   r:   r-   ÚresultÚraw_specrF   Ú
mount_pathr=   Úvolumes	            r6   Ú_parse_and_sync_job_volumesrM   V   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ÑÔÐÑØ€Mr8   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`.)rN   Ú
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 command.zPMax duration: int with s (seconds, default), m (minutes), h (hours) or d (days).z-dz--detachz3Run the Job in the background and print the Job ID.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--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--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 concurrentlyzWOne 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: Ú zJob z finished with stage 'r1   z
 completedN)Úfetch_job_logsÚidÚownerÚnamer+   ÚtextÚwait_for_jobÚstatusÚstager   Ú	COMPLETEDÚmessager   )r:   rP   ÚlogÚfinalr^   s        r6   Ú_stream_logs_and_check_statusra   >  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Ð(Ð(Ð(Ñ)Ô)Ð)Ð)Ð)r8   Ú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ÚexamplesFÚimageÚcommandÚenvÚsecretsrX   ÚlabelrL   Úenv_fileÚsecrets_fileÚflavorÚtimeoutÚdetachÚexposeÚsshÚresource_group_idÚtokenc                 ó  — t          ||¦  «        }t          ||¦  «        }t          |¬¦  «        }|                     | |||t          ||¬¦  «        t	          |||¬¦  «        |	|
||||¬¦  «        }t          j        d|j        |j        pi  	                    d¦  «        |j
        ¬¦  «         t          ||¦  «        sI|j        pi  	                    d¦  «        }t          j        d|› d	|j        j        › d
|j        › d�¦  «         t          |j        j        t$          ¦  «        r@d                     d„ |j        j        D ¦   «         ¦  «        }t          j        d|› �¦  «         t          |j        j        t*          ¦  «        r*t          j        d|j        j        › d
|j        › d�¦  «         |rK|j        j        › d
|j        › �}t          j        d|› d|› d�¦  «         t          j        d|› d�¦  «         dS t-          ||¦  «         dS )z
Run a Job.©rs   ©rX   ©r:   r-   )rf   rg   rh   ri   Úlabelsr9   rm   rn   rp   rq   rr   r-   úJob startedrX   ©rV   rX   ÚurlúJob auto-named 'ú('. Pass `--name` or run `hf jobs labels r0   ú --name NAME` to rename it.ú
c              3   ó    K  — | ]	}d |› �V — Œ
dS ©z  N© ©Ú.0r{   s     r6   ú	<genexpr>zjobs_run.<locals>.<genexpr>ƒ  ó(   è è € ÐFÐF¨˜˜c˜˜ÐFÐFÐFÐFÐFÐFr8   úSExposed ports are reachable at (requires an HF token with read access to the job):
úUse `hf jobs ssh ú&` to open an SSH session into the job.úUse `hf jobs logs -f ú&` to stream logs, or `hf jobs inspect ú` to check status.úUse `hf jobs wait ú` to block until it finishes.N)r%   r$   Úrun_jobÚ_parse_labels_maprM   r+   rI   rV   rx   Úgetr{   Ú_has_explicit_namerE   rW   rX   Ú
isinstancer[   Úexpose_urlsÚlistÚjoinÚssh_urlÚstrra   )rf   rg   rh   ri   rX   rj   rL   rk   rl   rm   rn   ro   rp   rq   rr   r-   rs   Úenv_mapÚsecrets_mapr:   rP   Ú	auto_nameÚurlsÚjob_refs                           r6   Újobs_runrž   J  sV  € õ> ˜C Ñ*Ô*€GÝ ¨Ñ6Ô6€Kå
˜5Ð
!Ñ
!Ô
!€CØ
�+Š+ØØØØÝ  ¨TÐ2Ñ2Ô2Ý+¨F¸ÀyÐQÑQÔQØØØØØ+Øð ñ ô €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ñ	
ô 	
ð 	
õ �#”*Ô(­$Ñ/Ô/ð pØ�yŠyÐFÐF¨s¬zÔ/EÐFÑFÔFÑFÔFˆÝŒÐnÐhlÐnÐnÑoÔoÐoÝ�#”*Ô$¥cÑ*Ô*ð fÝŒÐd S¤Y¤^ÐdÐd°c´fÐdÐdÐdÑeÔeÐeØð Ø”Y”^Ð.Ð. c¤fÐ.Ð.ˆÝŒÐs¨ÐsÐsÐX_ÐsÐsÐsÑtÔtÐtÝŒÐL gÐLÐLÐLÑMÔMÐMØˆÝ! # sÑ+Ô+Ð+Ð+Ð+r8   Ú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>)re   rR   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%|r|› d| › �n| }t          j        d|› d�¦  «         dS 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.
    ru   )r,   r-   rR   r    r0   z#Stream ended. Run `hf jobs inspect z6` to check the final status (e.g. COMPLETED or ERROR).N)r7   r$   rU   r+   rY   rE   )	r,   rR   r    r-   rs   r:   rŸ   r_   r�   s	            r6   Ú	jobs_logsr¢   �  s¸   € õN 5°V¸YÑGÔGÑ€FˆIå
˜5Ð
!Ñ
!Ô
!€CØ×Ò V°yÈÐVZÐÑ[Ô[€DØð ð ˆÝŒ�‰ŒˆˆØð xØ-6ÐB�YÐ)Ð) Ð)Ð)Ð)¸FˆÝŒÐv°wÐvÐvÐvÑwÔwÐwÐwÐwðxð xr8   Újob_propertiesÚfiltersc                 óè   — |D ]n\  }}}|                       |¦  «        }|€
|dk    rŒ$ dS t          |                     ¦   «         |                     ¦   «         ¦  «        }|dk    r|r|dk    r|r dS ŒodS )z5Check if scheduled job matches all specified filters.Nú!=Fú=T)r‘   r   Úlower)r£   r¤   ÚkeyÚop_strÚpatternÚvalueÚmatchs          r6   Ú_matches_filtersr®   Á  sˆ   € à 'ð ð ÑˆˆV�WØ×"Ò" 3Ñ'Ô'ˆØˆ=Ø˜Š~ˆ~ØØ�5�5Ý˜Ÿš™œ w§}¢}¡¤Ñ7Ô7ˆØ�cŠMˆM %ˆM¨V°tª^¨^À¨^Ø�5�5øØˆ4r8   Únc                 óT   — d}d}t          | ¦  «        D ]}t          ||¬¦  «         Œd S )Nz[1Az[2K)Úend)ÚrangeÚprint)r¯   ÚLINE_UPÚ
LINE_CLEARÚis       r6   Ú_clear_liner·   Ï  sA   € Ø€GØ€JÝ�1‰XŒXð 'ð 'ˆÝˆg˜:Ð&Ñ&Ô&Ð&Ð&ð'ð 'r8   Úmetrics_streamÚtable_headersc              #   ó¤  K  — |D �]Â}| |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dgt	          |¦  «        z  gt	          |d         ¦  «        dz
  z  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  }Œtn)|dgt	          |¦  «        t	          |¦  «        z
  z  z  }|g}d| |fV — �ŒÄd| g fV — d S )NÚcpu_usage_pctú%Úcpu_millicoresg     @�@r   éd   Úmemory_used_bytesÚmemory_total_bytesé   zB / ÚBÚrx_bpszbps / Útx_bpsÚbpsÚgpusrT   ÚutilizationúN/AFT)Úroundr   r“   ÚdictÚlenÚzipÚsorted)r,   r¸   r¹   ÚmetricsÚrowÚrowsÚgpu_idÚgpus           r6   Ú_get_jobs_stats_rowsrÓ   Ö  sA  è è € ð "ð "ñ "ˆàØ�Ô'Ð*Ð*Ð*Ý�'Ð*Ô+¨fÑ4°aÑ8Ô8Ý�S˜7Ð#6Ô7Ñ7¸'ÐBVÔ:WÑWÐYZÑ[Ô[Ð^Ð^Ð^Ý˜GÐ$7Ô8Ñ9Ô9ÐmÐm½|ÈGÐThÔLiÑ?jÔ?jÐmÐmÐmÝ˜G HÔ-Ñ.Ô.ÐZÐZµlÀ7È8ÔCTÑ6UÔ6UÐZÐZÐZð
ˆð �6Œ?ð 	�z¨'°&¬/½4Ñ@Ô@ð 	Ø�5˜R˜D¥3 s¡8¤8™OÐ,µ°G¸F´OÑ0DÔ0DÀqÑ0HÑIÑIˆDÝ" 4­°¸´Ñ)@Ô)@ÑAÔAð ð ‘��VØ˜f”o fÔ-�ØØ˜=Ô)Ð,Ð,Ð,Ý˜S 3Ð':Ô#;Ñ;¸cÐBVÔ>WÑWÐYZÑ[Ô[Ð^Ð^Ð^Ý# CÐ(;Ô$<Ñ=Ô=ÐmÐmÅ<ÐPSÐThÔPiÑCjÔCjÐmÐmÐmðñ ��ðð �E�7�c -Ñ0Ô0µ3°s±8´8Ñ;Ñ<Ñ<ˆCØ�5ˆDØ�V˜TÐ!Ð!Ð!Ð!Ñ!Ø
�˜Ð
ÐÐÐÐÐr8   Ústatszhf jobs stats <job_id>Újob_idsc                 ó6  ‡‡‡‡— | �1g }| D ]*}t          |‰¦  «        \  }Š|                     |¦  «         Œ+|} t          |¬¦  «        Š‰€‰                     ¦   «         d         Š| € d„ ‰                     ‰¬¦  «        D ¦   «         } t          | ¦  «        dk    rt          j        d¦  «         dS g d¢Št          j	         
                    t          | ¦  «        ¦  «        5 }i Š| D ]"}|g}|d	„ ‰d
d…         D ¦   «         z  }|g‰|<   Œ#t          j        ¦   «         }ˆfd„‰D ¦   «         }t          t          |‰¬¦  «        ¦  «         ˆˆˆfd„| D ¦   «         }	t          |t          |	¬¦  «        D ]’\  }
}}|
r‰                     |d¦  «         n|‰|<   t          j        ¦   «         }||z
  t"          k    rMt%          dt          |¦  «        z   ¦  «         ˆfd„‰D ¦   «         }t          t          |‰¬¦  «        ¦  «         |}Œ“	 ddd¦  «         dS # 1 swxY w Y   dS )z7Fetch the resource usage statistics and metrics of JobsNru   rX   c                 óJ   — g | ] }|j         r|j         j        nd dv ¯|j        ‘Œ!S )ÚUNKNOWN)ÚRUNNINGÚUPDATING)r[   r\   rV   ©r„   rP   s     r6   ú
<listcomp>zjobs_stats.<locals>.<listcomp>  sA   € ð 
ð 
ð 
àØ$'¤JÐ=�”
Ô Ð °IÐBYÐYÐYð ŒFàYÐYÐYr8   ©r-   r   zNo running jobs found)	zJOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGEc                 ó&   — g | ]}d |v sd|v rdnd‘ŒS )r0   ÚUSAGEz-- / --z--r‚   )r„   Úheaders     r6   rÜ   zjobs_stats.<locals>.<listcomp>  s/   € ÐpÐpÐpÐTZ #¨ - -°7¸fÐ3DÐ3D�I�IÈ4ÐpÐpÐpr8   r   c                 ó*   •— g | ]}‰|         D ]}|‘ŒŒS r‚   r‚   ©r„   r,   rÏ   Úrows_per_job_ids      €r6   rÜ   zjobs_stats.<locals>.<listcomp>  s,   ø€ Ð[Ð[Ð[˜fÀ?ÐSYÔCZÐ[Ð[¸C�cÐ[Ð[Ð[Ð[r8   )Úheadersc                 óF   •— g | ]}|‰                      |‰¬ ¦  «        ‰dœ‘ŒS )rS   )r,   r¸   r¹   )Úfetch_job_metrics)r„   r,   r:   r-   r¹   s     €€€r6   rÜ   zjobs_stats.<locals>.<listcomp>"  sO   ø€ ð 
ð 
ð 
ð ð	 !Ø"%×"7Ò"7¸vÐQZÐ"7Ñ"[Ô"[Ø!.ðð ð
ð 
ð 
r8   )Úkwargs_listrÁ   c                 ó*   •— g | ]}‰|         D ]}|‘ŒŒS r‚   r‚   râ   s      €r6   rÜ   zjobs_stats.<locals>.<listcomp>2  s,   ø€ ÐcÐcÐc fÈ?Ð[aÔKbÐcÐcÀC˜cÐcÐcÐcÐcr8   )r7   rH   r$   ÚwhoamiÚ	list_jobsrË   r+   rY   ÚmultiprocessingÚpoolÚ
ThreadPoolÚtimer³   Ú	_tabulateÚiflatmap_unorderedrÓ   ÚpopÚSTATS_UPDATE_MIN_INTERVALr·   )rÕ   r-   rs   Ú
parsed_idsr,   rì   rÏ   Úlast_update_timeÚ
total_rowsrç   ÚdonerÐ   Únowr:   rã   r¹   s    `           @@@r6   Ú
jobs_statsrø   ò  sõ  øøøø€ ð ÐØˆ
Øð 	&ð 	&ˆFÝ <¸VÀYÑ OÔ OÑˆF�IØ×Ò˜fÑ%Ô%Ð%Ð%ØˆÝ
˜5Ð
!Ñ
!Ô
!€CØÐØ—J’J‘L”L Ô(ˆ	Ø€ð
ð 
à—}’}¨y�}Ñ9Ô9ð
ñ 
ô 
ˆõ
 ˆ7�|„|�qÒÐÝŒÐ(Ñ)Ô)Ð)Øˆð
ð 
ð 
€Mõ 
Ô	×	(Ò	(­¨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Ø#&Ð øð
	'ð)'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 's   ÃD!HÈHÈH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=1r¾   Ú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`.)rO   rN   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).Úfilterz--filterz2(Deprecated) Use `--status` and `--label` instead.c                 ó  — t          |¬¦  «        }|rt          j        d|› d�¦  «         | 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.
    ru   zIgnoring filter 'zc'. `-f`/`--filter` is deprecated and will be removed in a future release. Use `--status`/`--label`.z0`-a`/`--all` cannot be combined with `--status`.c              3   óf   K  — | ],}|                      ¦   «         ¯|                      ¦   «         V — Œ-d S ©N)Ústrip)r„   Úparts     r6   r…   zjobs_ps.<locals>.<genexpr>‡  s7   è è € ÐVÐV¨TÈÏÊÉÌÐV˜DŸJšJ™LœLÐVÐVÐVÐVÐVÐVr8   ú,Nr§   zInvalid label filter 'z"': must be in the form 'key=value'rX   z6Cannot filter by both `--name` and `--label name=...`.)r-   r[   rx   Fr   r   TÚ	durationsrg   rV   rT   r,   rx   rÈ   Údocker_imageúimage/spacer>   Ú
created_até   ÚTÚcreatedr[   r\   rØ   Úrunning_secsÚruntime)r,   rX   r  rg   r  r[   r
  ©rä   Úid_keyzOutput truncated to z4 Jobs. Use `--limit 0` to show all (or `--limit N`).ú, c              3   ó    K  — | ]	}d |› �V — Œ
dS )zstatus=Nr‚   )r„   Úss     r6   r…   zjobs_ps.<locals>.<genexpr>Ä  s(   è è € Ð7Ð7 Q�=˜Q�=�=Ð7Ð7Ð7Ð7Ð7Ð7r8   c              3   ó,   K  — | ]\  }}d |› d|› �V — ŒdS )zlabel=r§   Nr‚   )r„   ÚkÚvs      r6   r…   zjobs_ps.<locals>.<genexpr>Ä  s:   è è € Ð:gÐ:gÑPTÐPQÐSTÐ;KÀAÐ;KÐ;KÈÐ;KÐ;KÐ:gÐ:gÐ:gÐ:gÐ:gÐ:gr8   zNo jobs matched filters: zHNo running jobs. Use `-a`/`--all` to include finished (and failed) jobs.)r$   r+   Úwarningr   rA   r3   r   rÙ   r¬   Ú
SCHEDULINGrê   r•   Ú	itertoolsÚislicerË   r*   r‘   r–   Úreplacer   rH   ÚtablerE   ÚitemsrY   )rù   r[   rj   rX   rú   r-   rs   rû   r:   Úraw_statusesr¬   Úserver_statusesrx   Úitemr©   Ú	jobs_iterÚ	truncatedÚjobsÚ	job_itemsrP   Újob_itemr  ÚcmdÚfilters_msgs                           r6   Újobs_psr$  7  sn  € õD ˜5Ð
!Ñ
!Ô
!€Càð 
ÝŒðp ð pð pð pñ	
ô 	
ð 	
ð
 ð 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r8   Ú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 JobsrT   zx ú (ú)ú$z.4fÚfreeé<   z.2f)rX   zpretty nameÚcpuÚramÚstorageÚacceleratorzcost/minz	cost/hourzLUse `hf jobs run --flavor <name> ...` to request a specific hardware flavor.N)r$   Úlist_jobs_hardwarer/  ÚquantityÚmodelÚvramÚunit_cost_usdrH   rX   Úpretty_namer,  r-  Úephemeral_storager+   r  rE   )r:   Úhardware_listr  ÚhwÚaccelerator_infoÚcost_minÚ	cost_hours          r6   Ú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Ð[Ñ\Ô\Ð\Ð\Ð\r8   Ú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 Jobsru   c                 ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS )rS   )Úinspect_job)r„   r,   r:   r-   s     €€r6   rÜ   z jobs_inspect.<locals>.<listcomp>ù  s)   ø€ ÐVÐVÐVÀFˆC�OŠO 6°YˆOÑ?Ô?ÐVÐVÐVr8   c                 óT   — g | ]%}t          t          |¦  «        |j        ¬ ¦  «        ‘Œ&S ©)rx   )Ú_surface_namer*   rx   rÛ   s     r6   rÜ   z jobs_inspect.<locals>.<listcomp>ú  s0   € ÐYÐYÐYÈS�}Õ/°Ñ4Ô4¸S¼ZÐHÑHÔHÐYÐYÐYr8   rV   ©r  N©r7   rH   r$   r+   r  )rÕ   r-   rs   ró   r,   r  r:   s    `    @r6   Újobs_inspectrF  ç  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Ðgr8   Úcancelzhf jobs cancel <job_id>c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )zCancel a Jobru   rS   zJob cancelled©rV   N)r7   r$   Ú
cancel_jobr+   rI   )r,   r-   rs   r:   s       r6   Újobs_cancelrK  ý  sY   € õ 5°V¸YÑGÔGÑ€FˆIÝ
˜5Ð
!Ñ
!Ô
!€CØ‡N‚N˜&¨I€NÑ6Ô6Ð6Ý„Jˆ 6Ð*Ñ*Ô*Ð*Ð*Ð*r8   Ú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     r6   r…   zjobs_wait.<locals>.<genexpr>2  s(   è è € ÐFÐF B�˜B™œÐFÐFÐFÐFÐFÐFr8   )r©   Nru   zWaiting for z Job(s) to finish...)rn   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 ))rV   r\   r^   )rV   r˜   r[   r\   r^   rÛ   s     r6   rÜ   zjobs_wait.<locals>.<listcomp>@  s7   € ÐmÐmÐmÐad�c”f¥s¨3¬:Ô+;Ñ'<Ô'<ÈÌÔI[Ð\Ð\ÐmÐmÐmr8   c                 óF   — g | ]}|j         j        t          j        k    ¯|‘ŒS r‚   )r[   r\   r   r]   rÛ   s     r6   rÜ   zjobs_wait.<locals>.<listcomp>A  s*   € ÐLÐLÐL�c S¤ZÔ%5½Ô9KÒ%KÐ%KˆcÐ%KÐ%KÐ%Kr8   z of z' Job(s) did not complete successfully: c              3   óD   K  — | ]}|j         › d |j        j        › d�V — ŒdS )r'  r(  N)rV   r[   r\   rÛ   s     r6   r…   zjobs_wait.<locals>.<genexpr>E  s:   è è € ÐKÐK¸S˜3œ6Ð8Ð8 S¤ZÔ%5Ð8Ð8Ð8ÐKÐKÐKÐKÐKÐKr8   )Úsetr7   rH   ÚaddrË   r   r–   rÍ   r˜   rñ   r   r$   r+   r[   rZ   ÚTimeoutErrorrö   r  )rÕ   rn   r-   rs   ró   Ú
namespacesr,   Ú	parsed_idÚparsed_namespaceÚtimeout_secsr:   r[   r  Úfaileds                 r6   Ú	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rx   )z*hf jobs labels <job_id> --name training-v2z8hf jobs labels <job_id> --label env=prod --label team=mlzhf jobs labels <job_id> --clearÚclearz--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.ru   rS   rX   rv   )r,   rx   r-   úLabels updated©rV   rX   )r   r7   r$   r@  rx   r�   Úupdate_job_labelsr+   rI   rV   r‘   )
r,   rX   rj   r\  r-   rs   r:   Úcurrent_labelsrx   rP   s
             r6   Újobs_labelsrd  I  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ÐDr8   )zhf jobs ssh <job_id>zhf jobs ssh <job_id> --dry-runz)hf jobs ssh <job_id> -i ~/.ssh/id_ed25519Úidentity_fileÚdry_runc                 ó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.
    ru   rS   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.ú@)Úportre  rf  )r7   r$   r@  r[   r—   r   r\   r   rV   r   rÙ   r+   rZ   rö   r   r#   ÚusernameÚhostnamerj  )	r,   re  rf  r-   rs   r:   rP   r[   r—   s	            r6   Újobs_sshrm  n  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ØŒ\Ø#Øð	ñ ô ð ð ð r8   zFRun UV scripts (Python with inline dependencies) on HF infrastructure.Úuvrv   )z,hf jobs uv run --name my-script my_script.pyz$hf jobs uv run --detach my_script.pyz1hf jobs uv run ml_training.py --flavor a10g-smallz+hf jobs uv run --with transformers train.pyzNhf jobs uv run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt script.pyÚscriptÚscript_argsÚwith_Úpythonc                 ó$  — t          ||	¦  «        }t          ||
¦  «        }t          |¬¦  «        }|                     | |pg |||||t          ||¬¦  «        t	          |||¬¦  «        ||||||¬¦  «        }t          j        d|j        |j        pi  	                    d¦  «        |j
        ¬¦  «         t          ||¦  «        sI|j        pi  	                    d¦  «        }t          j        d|› d	|j        j        › d
|j        › d�¦  «         t          |j        j        t$          ¦  «        r@d                     d„ |j        j        D ¦   «         ¦  «        }t          j        d|› �¦  «         t          |j        j        t*          ¦  «        r*t          j        d|j        j        › d
|j        › d�¦  «         |rK|j        j        › d
|j        › �}t          j        d|› d|› d�¦  «         t          j        d|› d�¦  «         dS t-          ||¦  «         dS )ú8Run a UV script (local file or URL) on HF infrastructureru   rv   rw   )ro  rp  Údependenciesrr  rf   rh   ri   rx   r9   rm   rn   rp   rq   rr   r-   ry   rX   rz   r|   r}   r0   r~   r   c              3   ó    K  — | ]	}d |› �V — Œ
dS r�   r‚   rƒ   s     r6   r…   zjobs_uv_run.<locals>.<genexpr>ß  r†   r8   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   N)r%   r$   Ú
run_uv_jobr�   rM   r+   rI   rV   rx   r‘   r{   r’   rE   rW   rX   r“   r[   r”   r•   r–   r—   r˜   ra   )ro  rp  rf   rm   rh   ri   rX   rj   rL   rk   rl   rn   ro   rp   rq   rr   r-   rs   rq  rr  r™   rš   r:   rP   r›   rœ   r�   s                              r6   Újobs_uv_runrx     se  € õD ˜C Ñ*Ô*€GÝ ¨Ñ6Ô6€Kå
˜5Ð
!Ñ
!Ô
!€CØ
�.Š.ØØÐ% 2ØØØØØÝ  ¨TÐ2Ñ2Ô2Ý+¨F¸ÀyÐQÑQÔQØØØØØ+Øð ñ ô €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ñ	
ô 	
ð 	
õ �#”*Ô(­$Ñ/Ô/ð pØ�yŠyÐFÐF¨s¬zÔ/EÐFÑFÔFÑFÔFˆÝŒÐnÐhlÐnÐnÑoÔoÐoÝ�#”*Ô$¥cÑ*Ô*ð fÝŒÐd S¤Y¤^ÐdÐd°c´fÐdÐdÐdÑeÔeÐeØð Ø”Y”^Ð.Ð. c¤fÐ.Ð.ˆÝŒÐs¨ÐsÐsÐX_ÐsÐsÐsÑtÔtÐtÝŒÐL gÐLÐLÐLÑMÔMÐMØˆÝ! # sÑ+Ô+Ð+Ð+Ð+r8   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                 óp  — t          ||
¦  «        }t          ||¦  «        }t          |¬¦  «        }|                     ||| ||||t          ||¬¦  «        t	          |	||¬¦  «        |||||¬¦  «        }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.ru   rv   rw   )rf   rg   rz  r{  r|  rh   ri   rx   r9   rm   rn   rp   rr   r-   úScheduled Job createdrX   ra  úScheduled Job auto-named 'ú2'. Pass `--name` or run `hf jobs scheduled labels r0   r~   úUse `hf jobs scheduled inspect ú` to view its details.N)r%   r$   Úcreate_scheduled_jobr�   rM   r+   rI   rV   Újob_specrx   r‘   r’   rE   rW   rX   )rz  rf   rg   r{  r|  rh   ri   rX   rj   rL   rk   rl   rm   rn   rp   rr   r-   rs   r™   rš   r:   Úscheduled_jobr›   s                          r6   Úscheduled_runr†  ï  s„  € õ4 ˜C Ñ*Ô*€GÝ ¨Ñ6Ô6€Kå
˜5Ð
!Ñ
!Ô
!€CØ×,Ò,ØØØØØØØÝ  ¨TÐ2Ñ2Ô2Ý+¨F¸ÀyÐQÑQÔQØØØØ+Øð -ñ ô €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Ðsr8   zhf jobs scheduled lsz1Show all scheduled Jobs (default hides suspended)z>Filter output based on conditions provided (format: key=value)c                 ó  — t          |¬¦  «        }|                     |¬¦  «        }g }|pg D ]˜}d|v rz|                     dd¦  «        \  }}	|                     d¦  «        rd}
|dd…         }nd}
|                     |                     ¦   «         |
|	                     ¦   «         f¦  «         Œ€t          j        d	|› d
�¦  «         Œ™g }|D ]¨}|j        pd}| s|rŒ|j	        j
        pd}|j	        j        pg }|rd                     |¦  «        nd}|j	        j        pi                      d¦  «        pd}|j        ||t!          |¦  «        |dœ}t#          ||¦  «        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¬ ¦  «         |s8|r6d!                     d"„ |D ¦   «         ¦  «        }t          j        d#|› �¦  «         |r@|d$         d         }t          j        d%|› d&�¦  «         t          j        d'|› d(�¦  «         dS dS ))zList scheduled Jobsru   rÝ   r§   r   ú!r¦   Néÿÿÿÿz Ignoring invalid filter format 'z'. Use key=value format.FrÈ   r>   rX   )rV   rX   rf   r{  rg   r„  r[   Úlast_jobrg   rx   r  r  Úatr  r  Úlast_runÚnext_job_run_atÚnext_runr{  )rV   rX   rz  r  rg   rŒ  rŽ  r{  rV   r  r  c              3   ó.   K  — | ]\  }}}|› |› |› �V — Œd S rþ   r‚   )r„   r  Úor  s       r6   r…   zscheduled_ps.<locals>.<genexpr>z  s4   è è € ÐDÐD±°°A°q 1  a ¨  ÐDÐDÐDÐDÐDÐDr8   z#No scheduled jobs matched filters: r   r�  z(` to view details about a scheduled job.zUse `hf jobs scheduled trigger z)` to trigger a scheduled job immediately.)r$   Úlist_scheduled_jobsr3   ÚendswithrH   r¨   r+   r  r{  r„  r  rg   r–   rx   r‘   rV   r˜   r®   r*   r  r  rY   rE   )rù   r-   rs   rû   r:   Úscheduled_jobsr¤   Úfr©   r¬   ÚopÚfiltered_jobsr…  r{  Úimage_or_spacer"  Úcommand_strÚjob_nameÚpropsr  Úsjr  r„  Ústatus_dictrŠ  r#  Úfirst_item_ids                              r6   Úscheduled_psrž  '  s&  € õ, ˜5Ð
!Ñ
!Ô
!€CØ×,Ò,°yÐ,ÑAÔA€NØ*,€GØˆ\�rð Xð XˆØ�!ˆ8ˆ8ØŸš  a™œ‰JˆC�à�|Š|˜CÑ Ô ð Ø�Ø˜#˜2˜#”h��à�Ø�NŠN˜CŸIšI™KœK¨¨U¯[ª[©]¬]Ð;Ñ<Ô<Ð<Ð<åŒKÐV¸1ÐVÐVÐVÑWÔWÐWÐWð €MØ'ð ,ð ,ˆØÔ'Ð0¨5ˆØð 	�wð 	ØØ&Ô/Ô<ÐEÀˆØÔ$Ô,Ð2°ˆØ'*Ð5�c—h’h˜s‘m”m�m°ˆØ!Ô*Ô1Ð7°R×<Ò<¸VÑDÔDÐMÈˆàÔ"ØØ#Ý˜7‘|”|Ø"ð
ð 
ˆõ    wÑ/Ô/ð 	ØØ×Ò˜]Ñ+Ô+Ð+Ð+ð #%€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Øðñ ô ð ð
 ð F�Wð FØ—i’iÐDÐD¸GÐDÑDÔDÑDÔDˆÝŒÐD°{ÐDÐDÑEÔEÐEØð mØ˜aœ œˆÝŒÐj°=ÐjÐjÐjÑkÔkÐkÝŒÐk°=ÐkÐkÐkÑlÔlÐlÐlÐlðmð mr8   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 Jobsru   c                 ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS )©Úscheduled_job_idr-   )Úinspect_scheduled_job)r„   r£  r:   r-   s     €€r6   rÜ   z%scheduled_inspect.<locals>.<listcomp>”  s=   ø€ ð ð ð àð 	×!Ò!Ð3CÈyÐ!ÑYÔYðð ð r8   c                 ó^   — g | ]*}t          t          |¦  «        |j        j        ¬ ¦  «        ‘Œ+S rB  )rC  r*   r„  rx   )r„   r›  s     r6   rÜ   z%scheduled_inspect.<locals>.<listcomp>˜  s4   € ÐiÐiÐiÐTV�}Õ/°Ñ3Ô3¸B¼KÔ<NÐOÑOÔOÐiÐiÐir8   rV   rD  NrE  )rŸ  r-   rs   ró   r,   r“  r:   s    `    @r6   Úscheduled_inspectr¦  ‚  s¶   øø€ ð €JØ#ð "ð "ˆÝ8¸ÀÑKÔKÑˆ�	Ø×Ò˜&Ñ!Ô!Ð!Ð!Ø"ÐÝ
˜5Ð
!Ñ
!Ô
!€Cðð ð ð ð à 1ðñ ô €Nõ „IÐiÐiÐZhÐiÑiÔiÐrvÐwÑwÔwÐwÐwÐwr8   Údeletezhf jobs scheduled delete <id>r£  c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )zDelete a scheduled Job.ru   r¢  zScheduled Job deletedrI  N)r7   r$   Údelete_scheduled_jobr+   rI   ©r£  r-   rs   r:   s       r6   Úscheduled_deleter«  ›  ób   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ×ÒÐ.>È)ÐÑTÔTÐTÝ„JÐ&Ð+;Ð<Ñ<Ô<Ð<Ð<Ð<r8   zhf jobs scheduled suspend <id>c                 óÖ   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         t          j        d| › d�¦  «         dS )z Suspend (pause) a scheduled Job.ru   r¢  zScheduled Job suspendedrI  zUse `hf jobs scheduled resume z` to resume it.N)r7   r$   Úsuspend_scheduled_jobr+   rI   rE   rª  s       r6   Úscheduled_suspendr¯  ¨  s   € õ #?Ð?OÐQZÑ"[Ô"[ÑÐ�iÝ
˜5Ð
!Ñ
!Ô
!€CØ×ÒÐ/?È9ÐÑUÔUÐUÝ„JÐ(Ð-=Ð>Ñ>Ô>Ð>Ý„HÐOÐ.>ÐOÐOÐOÑPÔPÐPÐPÐPr8   Úresumezhf jobs scheduled resume <id>c                 ó¦   — t          | |¦  «        \  } }t          |¬¦  «        }|                     | |¬¦  «         t          j        d| ¬¦  «         dS )z!Resume (unpause) a scheduled Job.ru   r¢  zScheduled Job resumedrI  N)r7   r$   Úresume_scheduled_jobr+   rI   rª  s       r6   Úscheduled_resumer³  ¶  r¬  r8   Ú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).ru   r¢  zScheduled Job triggered)rV   r{   rŠ   r0   z` to stream logs.N)
r7   r$   Útrigger_scheduled_jobr+   rI   rV   r{   rE   rW   rX   )r£  r-   rs   r:   rP   s        r6   Úscheduled_triggerr·  Ã  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ÐPr8   )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_  ru   r¢  rX   rv   )r£  rx   r-   r`  ra  )r   r7   r$   r¤  r„  rx   r�   Úupdate_scheduled_job_labelsr+   rI   rV   r‘   )
r£  rX   rj   r\  r-   rs   r:   rc  rx   r…  s
             r6   Úscheduled_labelsrº  Ñ  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ÐNr8   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                 óz  — t          ||¦  «        }t          ||¦  «        }t          |¬¦  «        }|                     ||pg | |||||||t          |
|	¬¦  «        t	          |||¬¦  «        |||||¬¦  «        }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 )rt  ru   rv   rw   )ro  rp  rz  r{  r|  ru  rr  rf   rh   ri   rx   r9   rm   rn   rp   rr   r-   r~  rX   ra  r  r€  r0   r~   r�  r‚  N)r%   r$   Úcreate_scheduled_uv_jobr�   rM   r+   rI   rV   r„  rx   r‘   r’   rE   rW   rX   )rz  ro  rp  r{  r|  rf   rm   rh   ri   rX   rj   rL   rk   rl   rn   rp   rr   r-   rs   rq  rr  r™   rš   r:   rP   r›   s                             r6   Úscheduled_uv_runr½  þ  sŠ  € õ@ ˜C Ñ*Ô*€GÝ ¨Ñ6Ô6€Kå
˜5Ð
!Ñ
!Ô
!€CØ
×
%Ò
%ØØÐ% 2ØØØØØØØØÝ  ¨TÐ2Ñ2Ô2Ý+¨F¸ÀyÐQÑQÔQØØØØ+Øð# &ñ ô €Cõ& „JÐ&¨3¬6¸¼Ô9LÐ9RÐPR×8WÒ8WÐX^Ñ8_Ô8_Ð`Ñ`Ô`Ð`Ý˜d EÑ*Ô*ð 
Ø”\Ô(Ð.¨B×3Ò3°FÑ;Ô;ˆ	ÝŒð^¨ð ^ð ^Ø),¬¬ð^ð ^Ø:=¼&ð^ð ^ð ^ñ	
ô 	
ð 	
õ „HÐ^¨s¬y¬~Ð^Ð^ÀÄÐ^Ð^Ð^Ñ_Ô_Ð_Ð_Ð_r8   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.
    rX   ©r‘   )r  rx   rX   s      r6   rC  rC  B  s5   € ð ˆL�b×Ò˜fÑ%Ô%€DØ€|ØˆØ�DÐ!˜DÐ!Ð!r8   c                 ó@   — | dupt          d„ |pg D ¦   «         ¦  «        S )zLWhether the user explicitly named the Job (via `--name` or a `name=` label).Nc              3   óV   K  — | ]$}|                      d d¦  «        d         dk    V — Œ%dS )r§   r   r   rX   N)r3   )r„   r  s     r6   r…   z%_has_explicit_name.<locals>.<genexpr>P  s:   è è € Ð"[Ð"[Àt 4§:¢:¨c°1Ñ#5Ô#5°aÔ#8¸FÒ#BÐ"[Ð"[Ð"[Ð"[Ð"[Ð"[r8   )Úany)rX   rj   s     r6   r’   r’   N  s.   € à�tÐÐ[�sÐ"[Ð"[ÈuÈ{ÐXZÐ"[Ñ"[Ô"[Ñ[Ô[Ð[r8   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   rT   rX   z4--name and --label name=... cannot both be provided.)r3   r   )rx   rX   Ú
labels_mapÚ	label_varr©   r¬   s         r6   r�   r�   S  s“   € ð ð �d�lØˆtØ!#€JØ�\˜rð  ð  ˆ	Ø03°yÐ0@Ð0@�Y—_’_ S¨!Ñ,Ô,Ð,ÀyÐRTÀo‰
ˆˆUØˆ
�3‰ˆØÐØ�ZÐÐÝÐQÑRÔRÐRØ!ˆ
�6ÑØÐr8   rÐ   rä   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Ë   r˜   )r„   Úxs     r6   r…   z'_tabulate.<locals>.<listcomp>.<genexpr>p  s.   è è € Ð/Ð/ a•c�#˜a™&œ&‘k”kÐ/Ð/Ð/Ð/Ð/Ð/r8   )Úmax)r„   Úcols     r6   rÜ   z_tabulate.<locals>.<listcomp>p  s/   € ÐOÐOÐO°C•#Ð/Ð/¨3Ð/Ñ/Ô/Ñ/Ô/ÐOÐOÐOr8   é   rÁ   z{{:{}}} c                 ó   — g | ]}d |z  ‘ŒS )ú-r‚   )r„   Úws     r6   rÜ   z_tabulate.<locals>.<listcomp>z  s   € Ð$AÐ$AÐ$A° S¨1¡WÐ$AÐ$AÐ$Ar8   c                 ó¬   — g | ]Q\  }}t          t          |¦  «        ¦  «        |k    rt          |¦  «        d |dz
  …         dz   nt          |¦  «        ‘ŒRS )Né   z...rÉ  )r„   rÊ  Ú	col_widths      r6   rÜ   z_tabulate.<locals>.<listcomp>|  sf   € ð 
ð 
ð 
á��9õ 03µ3°q±6´6©{¬{¸YÒ/FÐ/F�C�‰FŒF�?�Y ‘]�?Ô# eÑ+Ð+ÍCÐPQÉFÌFð
ð 
ð 
r8   r   )rÌ   rË  ÚshutilÚget_terminal_sizeÚcolumnsrË   ÚsumÚindexÚformatrH   r–   )	rÐ   rä   Ú
col_widthsÚterminal_widthÚcol_to_minimizeÚ
row_formatÚlinesrÏ   Úrow_format_argss	            r6   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ÑÔÐr8   r  ÚqueueÚfunc.Úkwargsc                 óF   —  |di |¤ŽD ]}|                       |¦  «         Œd S )Nr‚   )Úput)rà  rá  râ  rI   s       r6   Ú_write_generator_to_queuerå  ‡  s<   € Ø�$�.�.˜�.�.ð ð ˆØ�	Š	�&ÑÔÐÐðð r8   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     €€€r6   rÜ   z&iflatmap_unordered.<locals>.<listcomp>œ  s2   ø€ ÐrÐrÐrÐ\b�T×%Ò%Õ&?À%ÈÈvÐAVÑWÔWÐrÐrÐrr8   Tçš™™™™™©?©rn   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rþ   )Úready©r„   Úasync_results     r6   r…   z%iflatmap_unordered.<locals>.<genexpr>¢  s.   è è € ÐNÐN°�|×)Ò)Ñ+Ô+ÐNÐNÐNÐNÐNÐNr8   c                 ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )ré  rê  r¿  rí  s     r6   rÜ   z&iflatmap_unordered.<locals>.<listcomp>©  s)   € ÐNÐNÐN°ˆ\×Ò dÐÑ+Ô+ÐNÐNÐNr8   N)r   r‘   r   rù   ÚemptyÚKeyboardInterruptrë   rU  )rì   rá  rç   Úasync_resultsrà  s   ``  @r6   rð   rð   Œ  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)NNNNNNNNNFNFNNN)FNNN)NNN)FNNNr¾   NNN)r.   N)NN)NNFNN)NFNN)NNNNNNNNNNNFNFNNNNN)NNNNNNNNNNNNNNN)NNNNNNNNNNNNNNNNNNN)‡Ú__doc__r  rë   Úmultiprocessing.poolrÔ  rî   Úcollections.abcr   r   r   Úpathlibr   rà  r   r   Útypingr	   r
   r   Úurllib.parser   Úhuggingface_hubr   r   r   r   r   r   Úhuggingface_hub._jobs_apir   Ú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%   r&   r'   Ú
_frameworkr(   r)   Ú_outputr*   r+   Ú
get_loggerÚ__name__Úloggerr˜   Útupler7   r•   rM   rò   ÚImageArgÚImageOptÚ	FlavorOptÚ	LabelsOptÚNameOptÚ
TimeoutOptÚboolÚ	DetachOptÚNamespaceOptÚResourceGroupIdOptÚintÚ	ExposeOptÚSshEnabledOptÚWithOptÚ	PythonOptÚ
SuspendOptÚConcurrencyOptÚScheduleArgÚ	ScriptArgÚScriptArgsArgÚ
CommandArgÚJobIdArgÚ	JobIdsArgÚScheduledJobIdArgÚJobVolumesOptÚjobs_clira   rg   rž   r¢   rÊ   r®   r·   rÓ   rø   r$  r<  rF  rK  r[  rd  rm  Úuv_appÚ	add_grouprx  Úscheduled_appr†  rž  r¦  r«  r¯  r³  r·  rº  Úscheduled_uv_appr½  rC  r’   r�   rï   r  rå  rì   rí   rð   r‚   r8   r6   ú<module>r%     s1  ðð GÐ Fà Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø !Ð !Ð !Ð !Ð !Ð !à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø +Ð +Ð +Ð +Ð +Ð +Ø )Ð )Ð )Ð )Ð )Ð )Ø =Ð =Ð =Ð =Ð =Ð =Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ð.¨ð .¸¸t¹ð .ÈÈcÐSVÐY]ÑS]ÈoÔH^ð .ð .ð .ð .ð8)Ø�#ŒY˜Ñð)Ø',ð)Ø9<¸t¹ð)à	ˆ&„\�DÑð)ð )ð )ð )ðX  Ð ð ØØ€HØ'ðñ ô ðô€ð Øˆ$�JØ
€FØ=ðñ ô ðô€ð Øˆ$�JØ
€FØrØ�:˜kÑ*Ô*ðñ ô ðô€	ð Øˆ„I�ÑØ
€FØØØBðñ ô ðô€	ð Øˆ$�JØ
€FØð `ðñ ô ðô€ð Øˆ$�JØ
€FØ_ðñ ô ðô€
ð ØØ
€FØØØBðñ ô ðô€	ð Øˆ$�JØ
€FØeðñ ô ðô€ð Øˆ$�JØ
€FØð oðñ ô ðôÐ ð Øˆ„I�ÑØ
€FØð Gðñ ô ðô€	ð ØØ
€FØð pðñ ô ðô€ð Øˆ„I�ÑØ
€FØØ4ðñ ô ðô€ð Øˆ$�JØ
€FØØØDðñ ô ðô€	ð Øˆ4�KØ
€FØ0ðñ ô ðô€
ð Øˆ4�KØ
€FØGðñ ô ðô€ð ØØ€HØfðñ ô ðô€ð ØØ€HØ3ðñ ô ðô€	ð Øˆ„I�ÑØ€HØ'ðñ ô ðô€ð Øˆ„IØ€HØ"ðñ ô ðô€
ð ØØ€HØ-ðñ ô ðô€ð Øˆ„I�ÑØ€HØ.ðñ ô ðô€	ð ØØ€HØAðñ ô ðôÐ ð Øˆ„I�ÑØ
€FØØðeð	ñ 	ô 	ð
ô€ð ˆ=Ð?Ð@Ñ@Ô@€ð	* uð 	*°7ð 	*¸tð 	*ð 	*ð 	*ð 	*ð 
×ÒØ	Ø.°Ð5ðð ð ð ñ 
ô 
ð ØØØØ ØØ#'ØØØØØØ,0Ø"Øð#7,ð 7,Øð7,àð7,ð 
ð7,ð ð	7,ð
 ð7,ð ð7,ð ð7,ð ð7,ð !ð7,ð ð7,ð ð7,ð ð7,ð ð7,ð 
ð7,ð *ð7,ð  ð!7,ð" ð#7,ð$ 
ð%7,ð 7,ð 7,ñ
ô 
ð7,ðt 
×ÒØ
ðð ð ð ñ ô ð$ 	ð 	Ø"Øð'&xð &xØð&xàØØˆØØð Eð	
ñ 	
ô 	
ð	ôð&xð Øˆd‰
ØˆØØð Jð	
ñ 	
ô 	
ð	ôð&xð$ ð%&xð& ð'&xð( 
ð)&xð &xð &xñô ð&xðR T¨#¨s¨(¤^ð ¸dÀ5ÈÈcÐSVÈÔCWÔ>Xð Ð]að ð ð ð ð'�3ð '˜4ð 'ð 'ð 'ð 'ðØðØ!)¨$¨s°C¨x¬.Ô!9ðØJNÈsÌ)ðàˆe�D˜#˜t D¨¨s©¤OÔ4Ð4Ô5Ô6ðð ð ð ð8 
×Ò�'Ð%=Ð$>ÐÑ?Ô?àØ"ØðA'ð A'ØðA'àðA'ð ðA'ð 
ð	A'ð A'ð A'ñ @Ô?ðA'ðH 
×ÒØðð ð ð ñ 
ô 
ð& 	ð 	ð 	ð 	ð 	Ø"Øð 	ðaFað FaØ	ØØˆØØØjð	
ñ 	
ô 	
ð	ô
ðFað ØˆSŒ	�DÑØˆØØ!�z (Ñ+Ô+Øyð	
ñ 	
ô 	
ð	ôðFað" ØˆSŒ	�DÑØˆØØð Oð	
ñ 	
ô 	
ð	ôð#Fað2 Øˆd‰
ØˆØØYð	
ñ 	
ô 	
ð	ôð3Fað@ ØØˆØØVð	
ñ 	
ô 	
ð	ôðAFaðN ðOFaðP ðQFaðR ØˆSŒ	�DÑØˆØØØEð	
ñ 	
ô 	
ð	ôðSFaðb 
ðcFað Fað Fañ
ô 
ðFaðR 
×Ò�*Ð(:Ð';ÐÑ<Ô<ð]ð ]ð ]ñ =Ô<ð]ð6 
×Ò�)Ð'AÐ&BÐÑCÔCð #Øðhð hØØˆSŒ	ØˆØ=ð	
ñ 	
ô 	
ð	ôðhð ðhð ðhð 
ðhð hð hñ DÔCðhð* 
×Ò�(Ð&?Ð%@ÐÑ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Ø"ØØØð)=,ð =,Øð=,àð=,ð ð=,ð ð	=,ð
 
ð=,ð ð=,ð ð=,ð ð=,ð ð=,ð ð=,ð !ð=,ð ð=,ð ð=,ð ð=,ð 
ð=,ð  *ð!=,ð" ð#=,ð$ ð%=,ð& ð'=,ð( ð)=,ð* 
ð+=,ð =,ð =,ñ
ô 
ð=,ð@ �Ð#QÐRÑRÔR€Ø × Ò �= {Ð Ñ 3Ô 3Ð 3ð ×ÒØ	Ø.°Ð5ØbÐcð ñ ô ð Ø"&ØØØØØ ØØ#'ØØØØ,0Ø"Øð%0tð 0tØð0tàð0tð ð0tð ð	0tð
  ð0tð 
ð0tð ð0tð ð0tð ð0tð ð0tð ð0tð !ð0tð ð0tð ð0tð ð0tð  *ð!0tð" ð#0tð$ ð%0tð& 
ð'0tð 0tð 0tñô ð
0tðf ×ÒÐ'Ð3IÐ2JÐÑKÔKð 	Ø"Øð 	ð%Wmð WmØ	ØØˆØØØDð	
ñ 	
ô 	
ð	ô
ðWmð ðWmð ðWmð ØˆSŒ	�DÑØˆØØØQð	
ñ 	
ô 	
ð	ôðWmð& 
ð'Wmð Wmð Wmñ LÔKðWmðt ×Ò�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ð	=ð ×Ò�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Ø"ØØØð+6`ð 6`Øð6`àð6`ð ð6`ð ð	6`ð
  ð6`ð ð6`ð ð6`ð 
ð6`ð ð6`ð ð6`ð ð6`ð ð6`ð ð6`ð !ð6`ð ð6`ð  ð!6`ð" *ð#6`ð$ ð%6`ð& ð'6`ð( ð)6`ð* ð+6`ð, 
ð-6`ð 6`ð 6`ñô ð6`ðx	"˜˜S #˜Xœð 	"°4¸¸S¸´>ÀDÑ3Hð 	"ÈTÐRUÐWZÐRZÌ^ð 	"ð 	"ð 	"ð 	"ð\˜S 4™Zð \°°S´	¸DÑ0@ð \ÀTð \ð \ð \ð \ð
 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„[ðð ð ð ð ð r8   