
    aiU{              $       ^   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 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mZm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  ddl!m"Z" ddl#m$Z$m%Z%m&Z&  ejN                  e(      Z)eD  cg c]  } | jT                  dk7  s| jT                    c} Z+dZ,ee- ej\                  d      f   Z/eee-    ej`                  d      f   Z1eee    ej`                  d      f   Z2eee3e-       ej`                  ddd      f   Z4eee3e-       ej`                  ddd      f   Z5eee-    ej`                  dd      f   Z6eee-    ej`                  d      f   Z7eee-    ej`                  d      f   Z8ee9 ej`                  ddd       f   Z:eee-    ej`                  d!      f   Z;eee3e-       ej`                  d"d#      f   Z<eee-    ej`                  d$d%d&      f   Z=eee9    ej`                  d'      f   Z>eee9    ej`                  d(      f   Z?ee- ej\                  d)      f   Z@ee- ej\                  d*      f   ZAeee3e-       ej\                  d+      f   ZBee3e-    ej\                  d,      f   ZCee- ej\                  d-      f   ZDeee3e-       ej\                  d.      f   ZEee- ej\                  d/      f   ZF e&d0      ZGeGj                  d1d2d3d4i5      	 	 	 	 	 	 	 	 	 dd6e/d7eCd8e4d9e5d:e6d;e7d<e2d=e8d>e:d?e;d@e$dAdfdB       ZIeGj                  dCdD      	 	 ddEeDd?e;d@e$dAdfdF       ZJdGeKe-e-f   dHeKe-e-f   dAe9fdIZLdJe3e3ee-eMf         dKe3e-   dLe3e-   dMee-   dAdf
dNZNdOeMdAdfdPZOdEe-dQeeKe-ef      dRe3e-   dAeePe9e-e3e3ee-eMf         f      fdSZQeGj                  dTdU      	 	 	 ddVeEd?e;d@e$dAdfdW       ZReGj                  dXdY      	 	 	 	 	 ddZee9 ej`                  d[d\d]      f   d?e;d@e$d^eee3e-       ej`                  d_d`da      f   dbeee-    ej`                  dc      f   dAdfdd       ZSeGj                  dedf      ddg       ZTeGj                  dhdi      	 	 ddVee3e-    ej\                  dj      f   d?e;d@e$dAdfdk       ZUeGj                  dldm      	 	 ddEeDd?e;d@e$dAdfdn       ZV e&do      ZWeGj                  eWdpq       eWj                  d1drd3d4i5      	 	 	 	 	 	 	 	 	 	 	 	 	 ddseAdteBd6e1d<e2d8e4d9e5d:e6d;e7d=e8d>e:d?e;d@e$due<dve=dAdfdw       ZY e&dx      ZZeGj                  eZdyq       eZj                  d1dzd3d4i5      	 	 	 	 	 	 	 	 	 	 dd{e@d6e/d7eCd|e>d}e?d8e4d9e5d:e6d;e7d<e2d=e8d?e;d@e$dAdfd~       Z[eZj                  dXd      	 	 	 	 	 ddZee9 ej`                  d[d\d      f   d?e;d@e$d^eee3e-       ej`                  d_d`da      f   dbeee-    ej`                  ddc      f   dAdfd       Z\eZj                  dhd      	 	 ddee3e-    ej\                  d      f   d?e;d@e$dAdfd       Z]eZj                  dd      	 	 ddeFd?e;d@e$dAdfd       Z^eZj                  d|d      	 	 ddeFd?e;d@e$dAdfd       Z_eZj                  dd      	 	 ddeFd?e;d@e$dAdfd       Z` e&d      ZaeZj                  eadpq       eaj                  d1drd3d4i5      	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd{e@dseAdteBd|e>d}e?d6e1d<e2d8e4d9e5d:e6d;e7d=e8d?e;d@e$due<dve=dAdf"d       ZbdJe3e3ee-eMf         dKe3e-   dAe-fdZcdAee-e-f   fdZd ed      Zedeee   dedeee   f   deKdAdfdZfdej                  j                  dedeee   f   de3eK   dAeee   fdZiyc c} w )a@  Contains commands to interact with jobs on the Hugging Face Hub.

Usage:
    # run a job
    hf jobs run <image> <command>

    # List running or completed jobs
    hf jobs ps [-a] [-f key=value] [--format TEMPLATE]

    # Stream logs from a job
    hf jobs logs <job-id>

    # Stream resources usage stats and metrics from a job
    hf jobs stats <job-id>

    # Inspect detailed information about a job
    hf jobs inspect <job-id>

    # Cancel a running job
    hf jobs cancel <job-id>

    # List available hardware options
    hf jobs hardware

    # Run a UV script
    hf jobs uv run <script>

    # Schedule a job
    hf jobs scheduled run <schedule> <image> <command>

    # List scheduled jobs
    hf jobs scheduled ps [-a] [-f key=value] [--format TEMPLATE]

    # Inspect a scheduled job
    hf jobs scheduled inspect <scheduled_job_id>

    # Suspend a scheduled job
    hf jobs scheduled suspend <scheduled_job_id>

    # Resume a scheduled job
    hf jobs scheduled resume <scheduled_job_id>

    # Delete a scheduled job
    hf jobs scheduled delete <scheduled_job_id>

    N)asdict)Path)EmptyQueue)	AnnotatedAnyCallableDictIterableOptionalTypeVarUnion)SpaceHardware	get_token)HfHubHTTPError)logging)_format_size)load_dotenv   )TokenOpt
get_hf_apityper_factoryz	zero-a10gg?zThe Docker image to use.)helpz.Use a custom Docker image with `uv` installed.ztFlavor for the hardware, as in HF Spaces. Run 'hf jobs hardware' to list available flavors. Defaults to `cpu-basic`.z-ez--envz/Set environment variables. E.g. --env ENV=valuez-sz	--secretszvSet secret environment variables. E.g. --secrets SECRET=value or `--secrets HF_TOKEN` to pass your Hugging Face token.z
--env-filez(Read in a file of environment variables.z/Read in a file of secret environment variables.zVMax duration: int/float 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--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 IDzJob IDszScheduled Job IDzRun and manage Jobs on the Hub.runz	Run a Jobignore_unknown_optionsT)r   context_settingsimagecommandenvsecretsenv_filesecrets_fileflavortimeoutdetach	namespacetokenreturnc           	         i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |
      }|j                  | ||||||	      }t        d|j                          t        d|j                          |ry |j                  |j                        D ]  }t        |        y )Nenvironr'   )r   r   r   r    r#   r$   r&   Job started with ID: 	View at: job_id)updater   r   	read_textosr+   copy_get_extended_environr   run_jobprintidurlfetch_job_logs)r   r   r   r    r!   r"   r#   r$   r%   r&   r'   env_map	env_valuesecrets_mapextended_environsecretapijoblogs                      b/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/huggingface_hub/cli/jobs.pyjobs_runrD      sW    )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ -/K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C
++  C 
!#&&
*+	IcggY
 !!!0 c
    logszFetch the logs of a Jobr0   c                 b    t        |      }|j                  | |      D ]  }t        |        y Nr,   r0   r&   )r   r:   r7   )r0   r&   r'   r@   rB   s        rC   	jobs_logsrJ   *  s4     5
!C!!9!E c
rE   job_propertiesfiltersc                 <   |j                         D ]  \  }}|| vr yd|v sd|v rQ|j                  dd      j                  dd      }t        j                  d| d| |   t        j                        rc y|j                         | |   j                         vs y y)	z5Check if scheduled job matches all specified filters.F*?z.*.^$T)itemsreplaceresearch
IGNORECASElower)rK   rL   keypatternregex_patterns        rC   _matches_filtersr\   5  s     Wn$'>SG^#OOC6>>sCHM99qq1>#3FV]]_N3$7$=$=$?? rE   rowsheadersaliasesfmtc           	          |rS|}| D ]K  }|}t        |      D ].  \  }}d| d}	|	|v s|j                  |	t        ||               }0 t        |       M yt        t	        | |             y)z,Print output according to the chosen format.z{{.z}})r^   N)	enumeraterT   strr7   	_tabulate)
r]   r^   r_   r`   templaterowlineifieldplaceholders
             rC   _print_outputrk   G  s      	CD%g. B5 %eWD1$&<<SQ[ADB $K	 	ig./rE   nc                 F    d}d}t        |       D ]  }t        ||        y )Nz[1Az[2K)end)ranger7   )rl   LINE_UP
LINE_CLEARrh   s       rC   _clear_linerr   Z  s)    GJ1X 'g:&'rE   metrics_streamtable_headersc              #     K   |D ]J  }| |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   rt        |d   t              r|gdgt	        |      z  gt	        |d         dz
  z  z   }t        |t        |d               D ]R  \  }}|d   |   }||d    dt        d|d   z  |d   z  d	       dt        |d          d
t        |d          dgz  }T n!|dgt	        |      t	        |      z
  z  z  }|g}d| |f M d| g f y w)Ncpu_usage_pct%cpu_millicoresg     @@r   d   memory_used_bytesmemory_total_bytes   zB / Brx_bpszbps / tx_bpsbpsgpus utilizationN/AFT)roundr   
isinstancedictlenzipsorted)r0   rs   rt   metricsrf   r]   gpu_idgpus           rC   _get_jobs_stats_rowsr   a  s     " "'(*'*+f4a8S7#677'BV:WWYZ[\\]^G$789:$|GThLi?j>kklmGH-./vl78CT6U5VVYZ
 6?z'&/4@5RD3s8O,GFO0Dq0HIID"4)@A Vfof-=)*!,S3':#;;cBV>WWYZ[\\]^#C(;$<=>d<PSThPiCjBkklm  E7c-03s8;<<C5DVT!!+", 
s   EEstatsz7Fetch the resource usage statistics and metrics of Jobsjob_idsc           	      4   t        |      }||j                         d   }| O|j                  |      D cg c]4  }|j                  r|j                  j                  nddv r|j
                  6 } }t        |       dk(  rt        d       y g d}g d	}t        j                  j                  t        |             5 }i }| D ]+  }	|	g}
|
|d
d  D cg c]  }d|v sd|v rdnd c}z  }
|
g||	<   - t        j                         }|D 	
cg c]  }	||	   D ]  }
|
  }}	}
t        |||d        | D 	cg c]  }	|	|j                  |	|      |d }}	t        |t        |      D ]  \  }}	}|r|j!                  |	d        n|||	<   t        j                         }||z
  t"        k\  sBt%        dt        |      z          |D 	
cg c]  }	||	   D ]  }
|
  }}	}
t        |||d        |} 	 d d d        y c c}w c c}w c c}
}	w c c}	w c c}
}	w # 1 sw Y   y xY w)Nr,   namer&   UNKNOWNRUNNINGUPDATINGr   zNo running jobs found)	JOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGE)	r8   rv   rx   memory_used_bytes_pct!memory_used_bytes_and_total_bytesrx_bps_and_tx_bpsgpu_utilizationgpu_memory_used_bytes_pct%gpu_memory_used_bytes_and_total_bytesr   /USAGEz-- / --z--rI   )r0   rs   rt   )kwargs_listr|   )r   whoami	list_jobsstatusstager8   r   r7   multiprocessingpool
ThreadPooltimerk   fetch_job_metricsiflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALrr   )r   r&   r'   r@   rA   rt   headers_aliasesr   rows_per_job_idr0   rf   headerlast_update_time
total_rowsr   doner]   nows                     rC   
jobs_statsr   }  sh    5
!CJJL(	 }}y}9
$'JJ

  IBYY FF
 

 7|q%&
M
O 
			(	(W	6 '$BD 	,F*0C^klmln^opTZ#-7f3DI4OppC'*eOF#	,  99;(7[f?SYCZ[Cc[c[
[j-$G "
 	 !"%"7"7vQZ"7"[!.
 
 #5T;O]h"i 
	'D&$##FD1*.'))+C%%)BBAJ/00?cf?[aKbcCcccc
cj-$O#& 
	'%' '=
D q \
  d5' 'sN   9G3=HG8
#&H	G=H1HAH%HH
H8HHpsz	List Jobsallz-az--allz*Show all Jobs (default shows just running)filterz-fz--filterz>Filter output based on conditions provided (format: key=value)formatz%Format output using a custom templatec           
      \   	 t        |      }|j                  |      }g d}g d}g }	i }
|xs g D ]>  }d|v r)|j                  dd      \  }}||
|j                         <   0t	        d| d       @ |D ]  }|j
                  r|j
                  j                  nd	}| s|d
vr.|j                  }|j                  xs d}|j                  xs g }|rdj                  |      nd}|j                  r|j                  j                  d      nd}|||j                         |d}t        ||
      s|	j                  |||||g        |	sM|
r:ddj                  |
j                         D cg c]  \  }}| d|  c}}       nd}t	        d|        y t!        |	|||       y c c}}w # t"        $ r}t	        d|        Y d }~y d }~wt$        t&        t(        f$ r}t	        d|        Y d }~y d }~wt*        $ r.}t	        dt-        |      j.                   d|        Y d }~y d }~ww xY w)Nr,   r   )r   IMAGE/SPACECOMMANDCREATEDSTATUS)r8   r   r   createdr   =r   )Warning: Ignoring invalid filter format ''. Use key=value format.r   r   r    %Y-%m-%d %H:%M:%S)r8   r   r   r    matching filters: , r   zNo jobs foundzError fetching jobs data: zError processing jobs data: Unexpected error - : )r   r   splitrX   r7   r   r   r8   docker_imager   join
created_atstrftimer\   appendrS   rk   r   KeyError
ValueError	TypeError	Exceptiontype__name__)r   r&   r'   r   r   r@   jobsrt   r   r]   rL   frY   valuerA   r   r0   image_or_spacecmdcommand_strr   propskvfilters_msges                             rC   jobs_psr     s:   6;=u%}}y}1QI,."$2 	_AaxWWS!_
U',		$A!D\]^	_  	SC),SZZ%%F6)@@VVF !--6N ++#C+.#((3-EK JM001DE]bJ "NfllnalmE#E73 KKj&QR3	S8 _f%dii0X1A3as0X&Y%Z[ln  M+/0dM?FC 1Y  0*1#.//j), 2,QC011 =#DG$4$4#5Rs;<<=sH   E(F+ *F%;F+ F+ %F+ +	H+4GH+G11H+=$H&&H+hardwarez(List available hardware options for Jobsc            
         	 t               } | j                         }g d}g d}g }|D ]  }d}|j                  rG|j                  j                   d|j                  j                   d|j                  j
                   d}|j                  d|j                  dnd}|j                  d|j                  d	z  d
nd}|j                  |j                  |j                  xs d|j                  |j                  |||g        |st        d       y t        |||d        y # t        $ r}	t        d|	        Y d }	~	y d }	~	wt        $ r.}	t        dt!        |	      j"                   d|	        Y d }	~	y d }	~	ww xY w)N)NAMEzPRETTY NAMECPURAMACCELERATORzCOST/MINz	COST/HOUR)r   
prettyNamecpuramacceleratorcostMincostHourr   zx z ()rR   z.4f<   z.2fzNo hardware options foundzError fetching hardware data: r   r   )r   list_jobs_hardwarer   quantitymodelvramunit_cost_usdr   r   pretty_namer   r   r7   rk   r   r   r   r   )
r@   hardware_listrt   r   r]   hwaccelerator_infocost_min	cost_hourr   s
             rC   jobs_hardwarer     su   =l..0ed,. 	sB$~~&(nn&=&=%>bAUAU@VVXY[YgYgYlYlXmmn#o 575E5E5Q2++C01W\H;=;K;K;W!B,,r1#67]bIKK".."9E266266K[]egpqr	s -.dM?DA 4.qc233 =#DG$4$4#5Rs;<<=s*   DD" D" "	E8+D>>E8
$E33E8inspectz0Display detailed information on one or more JobszThe jobs to inspectc           
          t        |      }| D cg c]  }|j                  ||       }}t        t        j                  |D cg c]  }t        |       c}dt                     y c c}w c c}w )Nr,   rI      indentdefault)r   inspect_jobr7   jsondumpsr   rc   )r   r&   r'   r@   r0   r   rA   s          rC   jobs_inspectr  9  s[     5
!CNUVFCOO6YO?VDV	$**T2cfSk21c
JK W2   A*A/cancelzCancel a Jobc                 B    t        |      }|j                  | |       y rH   )r   
cancel_job)r0   r&   r'   r@   s       rC   jobs_cancelr	  I  s     5
!CNN&IN6rE   zERun UV scripts (Python with inline dependencies) on HF infrastructureuv)r   z8Run a UV script (local file or URL) on HF infrastructurescriptscript_argswith_pythonc                    i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  | |xs g ||||||||

      }t        d|j                          t        d|j                          |	ry |j                  |j                        D ]  }t        |        y )Nr*   r,   )
r  r  dependenciesr  r   r   r    r#   r$   r&   r-   r.   r/   )r1   r   r   r2   r3   r+   r4   r5   r   
run_uv_jobr7   r8   r9   r:   )r  r  r   r#   r   r    r!   r"   r$   r%   r&   r'   r  r  r;   r<   r=   r>   r?   r@   rA   rB   s                         rC   jobs_uv_runr  W  sc   * )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C
..%2  C 
!#&&
*+	IcggY
 !!!0 c
rE   z,Create and manage scheduled Jobs on the Hub.	scheduledzSchedule a Jobschedulesuspendconcurrencyc                 ~   i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  ||| |||||	|
|
      }t        d|j                          y )Nr*   r,   )
r   r   r  r  r  r   r    r#   r$   r&   Scheduled Job created with ID: )r1   r   r   r2   r3   r+   r4   r5   r   create_scheduled_jobr7   r8   )r  r   r   r  r  r   r    r!   r"   r#   r$   r&   r'   r;   r<   r=   r>   r?   r@   scheduled_jobs                       rC   scheduled_runr    s"     )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C,, - M 
+M,<,<+=
>?rE   zList scheduled Jobsz1Show all scheduled Jobs (default hides suspended)z--formatc           
      .   	 t        |      }|j                  |      }g d}g d}g }	i }
|xs g D ]>  }d|v r)|j                  dd      \  }}||
|j                         <   0t	        d| d       @ |D ]7  }|j
                  xs d	}| s|r|j                  }|j                  xs d
}|j                  j                  xs d
}|j                  j                  xs g }|rdj                  |      nd
}|j                  j                  r/|j                  j                  j                  j                  d      nd
}|j                  j                   r%|j                  j                   j                  d      nd
}||t#        |      |d}t%        ||
      s |	j'                  |||||||g       : |	sM|
r:ddj                  |
j)                         D cg c]  \  }}| d|  c}}       nd}t	        d|        y t+        |	|||       y c c}}w # t,        $ r}t	        d|        Y d }~y d }~wt.        t0        t2        f$ r}t	        d|        Y d }~y d }~wt4        $ r.}t	        dt7        |      j8                   d|        Y d }~y d }~ww xY w)Nr,   r   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPEND)r8   r  r   r   lastnextr  r   r   r   r   Fr   r   r   )r8   r   r  r   r   r   r   zNo scheduled jobs foundz$Error fetching scheduled jobs data: z&Error processing scheduled jobs data: r   r   )r   list_scheduled_jobsr   rX   r7   r  r8   r  job_specr   r   r   r   last_jobatr   next_job_run_atrc   r\   r   rS   rk   r   r   r   r   r   r   r   )r   r&   r'   r   r   r@   scheduled_jobsrt   r   r]   rL   r   rY   r   r  r  sj_idr  r   r   r   last_job_atr&  r   r   r   r   r   s                               rC   scheduled_psr*    s   83=u%0090Eg[,."$2 	_AaxWWS!_
U',		$A!D\]^	_ , 	oM#++4uG7!$$E$--6H*33@@IEN((006BC+.#((3-EK !''00 $$--0099:MN  !''77 $$44==>QR 
 !>c'l_jkE#E73KK.+{Tcelmn-	o0 _f%dii0X1A3as0X&Y%Z[ln  +K=9:dM?FC	 1Y  :4QC899j), <6qc:;; =#DG$4$4#5Rs;<<=sH   GH H$H ?H H 	JH00JIJ&$JJz:Display detailed information on one or more scheduled Jobsscheduled_job_idszThe scheduled jobs to inspectc           
          t        |      }| D cg c]  }|j                  ||       }}t        t        j                  |D cg c]  }t        |       c}dt                     y c c}w c c}w )Nr,   scheduled_job_idr&   r   r   )r   inspect_scheduled_jobr7   r  r  r   rc   )r+  r&   r'   r@   r.  r'  r  s          rC   scheduled_inspectr0    sr     5
!C !2 	!!3Cy!YN  
$**Pf]+PYZdg
hi	 Qr  deletezDelete a scheduled Jobr.  c                 B    t        |      }|j                  | |       y Nr,   r-  )r   delete_scheduled_jobr.  r&   r'   r@   s       rC   scheduled_deleter6  $  "     5
!C.>)TrE   zSuspend (pause) a scheduled Jobc                 B    t        |      }|j                  | |       y r3  )r   suspend_scheduled_jobr5  s       rC   scheduled_suspendr:  .  s"     5
!C/?9UrE   resumez Resume (unpause) a scheduled Jobc                 B    t        |      }|j                  | |       y r3  )r   resume_scheduled_jobr5  s       rC   scheduled_resumer>  8  r7  rE   z(Schedule UV scripts on HF infrastructurec                    i }|	rO|j                  t        t        |	      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|
r3|j                  t        t        |
      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  ||xs g | ||||||||||      }t        d|j                          y )Nr*   r,   )r  r  r  r  r  r  r  r   r   r    r#   r$   r&   r  )r1   r   r   r2   r3   r+   r4   r5   r   create_scheduled_uv_jobr7   r8   )r  r  r  r  r  r   r#   r   r    r!   r"   r$   r&   r'   r  r  r;   r<   r=   r>   r?   r@   rA   s                          rC   scheduled_uv_runrA  F  s-   . )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C

%
%%2 & C 
+CFF8
45rE   c           
         t        g | | D cg c]  }t        d |D               }}t        t        j                         j                  t        |      dz        }t        |      t        |      z   |kD  r|j                  t        |            }||xx   dz  cc<   t        |      t        |      z   |k  r#|t        |      z
  t        |      z
  ||   z   ||<   t        |      t        |      z   |kD  r dt        |      z  j                  | }g }|j                   |j                  |        |j                   |j                  |D cg c]  }d|z  	 c}        | D ]r  }	t        |	|      D 
cg c];  \  }
}t        t        |
            |kD  rt        |
      d|dz
   dz   n
t        |
      = }}
}|j                   |j                  |        t d	j                  |      S c c}w c c}w c c}}
w )
z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c              3   D   K   | ]  }t        t        |              y wN)r   rc   ).0xs     rC   	<genexpr>z_tabulate.<locals>.<genexpr>  s     /ac#a&k/s       r|   z{{:{}}} -N   z...
)r   maxr3   get_terminal_sizecolumnsr   sumindexr   r   rc   r   )r]   r^   col
col_widthsterminal_widthcol_to_minimize
row_formatlineswrf   rF  	col_widthrow_format_argss                rC   rd   rd     s    <?;N;Ng;NOC#/3//OJO--/77W9JKN
g,Z
(>
9$**3z?;?#)#w<#j/)^;*83z?*JSQX\*Y\fgv\w*wJ'	 g,Z
(>
9
 4*s7|+33Z@JE	LL"""G,-	LL"""j$AS1W$ABC : !$C 4
9 033q6{Y/FCF?Y]#e+CPQFR
 
 	&Z&&89: 99U# P %B
s   G*G/6A G4c                  d    t         j                  j                         } t               x}|| d<   | S )NHF_TOKEN)r3   r+   r4   r   )r>   r'   s     rC   r5   r5     s1    zz()',$rE   Tqueuefunc.kwargsc                 @     |di |D ]  }| j                  |        y )N )put)r]  r^  r_  results       rC   _write_generator_to_queuerd    s#    .. 		&rE   r   r   c          	   #   6  K   t               }|D cg c]  }| j                  t        |||f       }}	 	 	 |j                  d       c c}w # t        $ r' t        d |D              r|j                         rY nY 5w xY wn# t        $ r Y nw xY w	 |D cg c]  }|j                  d       nc c}w c} y# t        j                  $ r Y yw xY w# 	 |D cg c]  }|j                  d       nc c}w c} w # t        j                  $ r Y w w xY wxY w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
    g?)r$   c              3   <   K   | ]  }|j                           y wrD  )ready)rE  async_results     rC   rG  z%iflatmap_unordered.<locals>.<genexpr>  s     N|))+Ns   N)
r   apply_asyncrd  getr   r   emptyKeyboardInterruptr   TimeoutError)r   r^  r   r]  r_  async_resultsrh  s          rC   r   r     s     gEfqr\bT%%&?%vAVWrMriii--  s
  NNNSXS^S^S` 	@MN\d+NN++ 			@MN\d+NN++ 		s   D ADB A 
B D+B ;B ?B  B C 	BC BC B; B21	B; :D;CDCDDC=C43	C=<D=DDDDD)	NNNNNNFNN)NN)NNN)FNNNN)r(   N)NNNNNNNNFNNNN)
NNNNNNNNNN)NNNNNNNNNNNNNN)j__doc__r  r   multiprocessing.poolr3   rU   r   dataclassesr   pathlibr   r]  r   r   typingr   r   r	   r
   r   r   r   r   typerhuggingface_hubr   r   huggingface_hub.errorsr   huggingface_hub.utilsr   $huggingface_hub.utils._cache_managerr   huggingface_hub.utils._dotenvr   
_cli_utilsr   r   r   
get_loggerr   loggerr   SUGGESTED_FLAVORSr   rc   ArgumentImageArgOptionImageOpt	FlavorOptlistEnvOpt
SecretsOpt
EnvFileOptSecretsFileOpt
TimeoutOptbool	DetachOptNamespaceOptWithOpt	PythonOpt
SuspendOptConcurrencyOptScheduleArg	ScriptArgScriptArgsArg
CommandArgJobIdArg	JobIdsArgScheduledJobIdArgjobs_clir   rD   rJ   r   r\   intrk   rr   tupler   r   r   r   r  r	  uv_app	add_typerr  scheduled_appr  r*  r0  r6  r:  r>  scheduled_uv_apprA  rd   r5   r\  rd  r   r   r   )items   0rC   <module>r     s  -^    	 	     U U U  4 1 ) = 5 ; ; 
		H	%,9WDTZZ;=VTZZW   ENN' SMELL= ]ELL D	 
T#YELL>
 T#YELL F
 SMELL7
 SMELL> SMELLe
 ELLB	 SMELLe T#YELL4 SMELLD	 TNELL0
 TNELLG ENNf ENN3	 T#YENN' IENN"
 ENN T#YENN	 ENN  ?@ 
%k=UW[<\] #'",,, 
, 	,
 , !, , , , , , 
, ^,^ 
&89 #  
	 :T#s(^ d38n QU $0
tE#s(O$
%004S	0DHI0T\]`Ta0	0&'3 '4 '!)$sCx.!9JNs)eD#tDsCx$9::;<8 
' YZ"C'C'C' C' 
	C' [C'L 
$[) 	" 	 	1U=	=	
	
U= U= U= cQ	
	U=& 8	
	'U=2 
3U= *U=p 
*#MN= O=6 
)"TU #LS	&	
	L L L 
L VL 
(0 #777 7 
	7 17 
c	d   6  % 		C.5   "&#'"000 0 	0
 
0 0 0 !0 0 0 0 0 0 0 
0
0f #QR   ={  3 u#3G_aeFfg
 "&#'"(@(@(@ (@ 	(@
  (@ 
(@ (@ (@ !(@ (@ (@ (@ (@ 
(@ h(@V t"78 	" 	 	3N=	D	
	
N= N= N= cQ	
	N=& 8	
	'N=4 
5N= 9N=b y'cd #j S	0	
	j j j 
j ej$ x&>? #U'UU U 
	U @U y'HI #V'VV V 
	V JV x&HI #U'UU U 
	U JU !&PQ    (t  4 		C.5   "&"&#'"!.6.6.6 .6 	.6
  .6 .6 .6 
.6 .6 .6 !.6 .6 .6 .6 .6  !.6" 
#.6
.6hDeCHo./ $s)  6tCH~  CLU1X Xc8A;>N5O Y] bf 




)
)
3#
$ d	
 a[i Xs   ^*^*