o
    i?                     @   s  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 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 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 ddlmZ ddlmZ ddl m!Z! ddl"Z#ddl$Z$ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl)m+Z+ ddl)m,Z, ddl)m-Z ddl.m/Z/ ddl.m0Z0 ddl1m2Z2 ddl1m3Z3 ddl1m4Z4 dd l1m5Z5 dd!l"m6Z6 dd"l"m7Z7 dd#l"m8Z8 dd$l"m9Z9 dd%l"m:Z: dd&l;m<Z< dd'l;m;Z; dd(l)m=Z= dd)l>T d*Z?d+Z@d+ZAeBd,jCZCd-aDG d.d/ d/eeE ZFd0eeGdB  eeHdB  B d1eId2eId3eJeK d4deLB f
d5d6ZMd7eNdB fd8d9ZOd7ePeQ d:eQjRd;eQjSfd<d=ZTd>eeQeEf d7ePeQ d?e3dB d4eeQeEf fd@dAZUd>eeQeeEddf f d7ePeQ d?e3dB d4eeQeeEddf f fdBdCZVdDeWd4eLfdEdFZXdS )G
    N)ThreadPoolExecutor)nullcontext)copy_context)	timedelta)partial)wraps)ForkProcess)PicklingError)Empty)Queue)Thread)TYPE_CHECKING)Callable)	Generator)Genericassert_never   )Config)reload_server_portsdebug)drop_params)gradio_request_var)SimpleQueue   )client)torch)
AllowToken)GPUSize)NvidiaIndex)
NvidiaUUID)GradioPartialContext)error)get_server_port)patch_gradio_queue)try_process_queue_event) remove_tqdm_multiprocessing_lock)tqdm)apply_cleanups)*i  g?forkFc                   @   s   e Zd ZU eed< eeeef  ed< ee	dB  ed< e
ed< deeeeef  ee	dB  eeee gdf dedefd	d
Zdd ZdS )Workerprocess	arg_queueN	res_queue	_sentineltargetallow_tokennvidia_uuidc                    s   t | jdd| _t | _t | _td| jj  td| jj  t	  t
  }d ur5 |hO   tO   fddt  D }| j| j|||f}trU||  t||dd| _| j  | j  d S )NT)r2   daemonz self.arg_queue._writer.fileno()=z self.res_queue._writer.fileno()=c                    s   g | ]}|j j v r|jqS  )laddrportfd).0connserver_portsr6   H/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/wrappers.py
<listcomp>X   s    z#Worker.__init__.<locals>.<listcomp>)r2   argsr5   )r   _close_on_exitr1   r   r/   r0   r   _writerfilenosetr%   r   psutilProcessconnectionsr   r.   start)selfr2   r3   r4   gradio_server_portfdsr@   r6   r<   r>   __init__C   s(   

zWorker.__init__c                 C   sJ   | j j }d us
J | j   | j  | j  t| | jd  d S N)	r.   pidjoinr/   closer0   wlock_releaser*   put)rI   rN   r6   r6   r>   rA   d   s   


zWorker._close_on_exit)__name__
__module____qualname__r	   __annotations__r   tupleParamsr#   Resr   r   r   r"   listintstrrL   rA   r6   r6   r6   r>   r-   =   s*   
 
	

!r-   r0   r3   r4   rK   returnc                    s  |D ]1}zt | W q ty3 } zt|tr#|jdkr#W Y d }~qt|W  Y d }~  S d }~ww zt  W n tyJ   td t	
  Y nw t td ur`tjr`tddtt jddz[t|  Jd dtf fd	d
t| t t  t| t d }t  dkrdtt  fdd}tj|d W d    W d S 1 sw   Y  W d S  ty } z
t|W  Y d }~S d }~ww )N	   z*Error while trying to remove tqdm mp_lock:d   zZeroGPU initw)totaldescfiler   nc                    s0    | 7  d ur t d j  d S d S )Nr_   )updateroundrd   rd   )current_progressprogressr6   r>   re      s   zworker_init.<locals>.updater   c                    s   |    S rM   r6   rg   )	remainingtransfer_sizere   r6   r>   <lambda>   s    zworker_init.<locals>.<lambda>)callback)osrP   	Exception
isinstanceOSErrorerrnoexception_resultr(   print	traceback	print_excr   r)   r   zero_gpu_v2opendevnullr&   floatr   allowSPAWN_PROGRESS_CLEANUPr   unpatchinitSPAWN_PROGRESS_INITsizemove)r0   r3   r4   rK   r9   erm   r6   )rh   ri   rj   rk   re   r>   worker_initm   sL   


&r   durationc                 C   s    | d u s	t | tr| S t| dS )N)seconds)rp   r   )r   r6   r6   r>   process_duration   s   
r   r@   kwargsc                 O   s   t | s| S | |i |S rM   )callable)r   r@   r   r6   r6   r>   static_duration   s   r   taskgpu_sizec                    s   dd l }t i ttdtjdtjdtf fdd}dtt	t
tf  dttt|jf d B  d	td
tdtt f
fddtdsPi |_|S )Nr   r@   r   r]   c                     s  t r	| i |S d }t g| R i |}t|}tj||d}|j}|j}|j}t	tj
|}z|}	W n tyG   d }	Y nw |	d urc|	j rc|jrc|	j s[J |	j sbJ nt||}	z|	j| |ft f W n ty   |dd  w 	 |	j }
|
d u r|ddd tddt|
tr|dd |
jd ur|
jjrt|
j d|
j_|
jt|
j td|
jt|
tr|	|< |  |
j S t|
t!rt"|
j#g|
j$R i |
j% qt&|
 q)Ntask_idrequestr   r   Tfailr   	allow_404ZeroGPU worker errorGPU task abortedF)'forkedgetr   r   r   schedule
allowTokennvidiaIndex
nvidiaUUIDr   releasepopKeyErrorr.   is_aliveidler/   emptyr0   r-   rR   r#   r
   r$   rp   ExceptionResultgradio_errorprint_exceptionrt   ru   	error_clsOkResultvalueGradioQueueEventr'   method_namer@   r   r   )r@   r   r   	duration_schedule_responser3   nvidia_indexr4   r   workerresr   r   request_varr   r   thread_wrapperworkersr6   r>   gradio_handler   s`   










z0regular_function_wrapper.<locals>.gradio_handlerr/   r0   r3   r4   rK   c                    s   da ttjt| j d}	 z
|  \\ }W n
 ty#   Y d S w |s;t|||d }d ur9| d S d} fdd}t	
| t }	t }
|
|	j|}W d    n1 saw   Y  |  q)NTFr0   r3   r4   rK   c               
      s   z	 i } W n t y } z
t|} W Y d }~n	d }~ww t| } z|  W d S  tyF } zt| W Y d }~d S d }~ww rM   )ro   rs   r   rR   r
   )r   r   r@   r   r0   r   r6   r>   run_task  s   zBregular_function_wrapper.<locals>.thread_wrapper.<locals>.run_task)r   signalSIGTERMr   rP   r   rq   r   rR   r#   applyr   r   submitrunresult)r/   r0   r3   r4   rK   initializedgradio_contextr   r   contextexecutorfuturer   r@   r   r0   r>   r      s:   

z0regular_function_wrapper.<locals>.thread_wrapperrV   )gradior   idr   Paramr@   r   rY   r   rW   rX   r#   RegularResQueueResultErrorr\   rZ   r[   hasattrrV   )r   r   r   grr   r6   r   r>   regular_function_wrapper   s(   ,8
,r   c                    s   dd l t i ttdtjdtjdttd d f f fdd}dt	t
ttf  dt	ttjf d B  d	td
tdtt f
fddtdsVi |_|S )Nr   r@   r   r]   c               	   ?   st   t r| i |E d H  d S d }tg| R i |}t|}tj	||d}|j}|j|j}t	tj
|z}W n tyM   d }Y nw |d uri|j ri|jri|j saJ |j shJ nt
||}z|j| |ft f W n ty   dd  w t dtttjf d B  f fdd}ddlm  t }	|	t j ||}
|
!d	d
  	 zjt"d}W n t#y   t$dt"d  w t%|t&rt'ddt%|t(r|j)d ur|j)j*rt+|j, d|j)_*|j)t+|j, t'd|j-t%|t.rnt%|t/r|j0V  qt$d|d  | qW d    d S 1 s3w   Y  d S )Nr   Tr   r   c                    s   	 | j  }|d u rddd t  d S t|tr)dd | d S t|tr=| <   t  d S t|trKt|j q t|t	r_t
|jg|jR i |j q td|d  | q)NTr   r   z#fill_yield_queue: assert_never(res=))r0   r   rR   AbortedResultrp   r   	EndResultr   r   r   r'   r   r@   r   r   )r   r   )r   r   r   r   yield_queuer6   r>   fill_yield_queueK  s0   






zLgenerator_function_wrapper.<locals>.gradio_handler.<locals>.fill_yield_queuer   r   c                 S   s   t dS )Nzfill_yield_queue DONEr   )_r6   r6   r>   rl   f  s    zDgenerator_function_wrapper.<locals>.gradio_handler.<locals>.<lambda>)timeoutz.yield_queue TIMEOUT (GENERATOR_GLOBAL_TIMEOUT=r   r   r   Fz!gradio_handler: assert_never(res=)1r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r/   r   r0   r-   rR   r#   r
   ThreadQueueGeneratorResQueueResultrY   r   typing_extensionsr   r   r   r   r   add_done_callbackGENERATOR_GLOBAL_TIMEOUTr   r   rp   r   r$   r   r   r   rt   ru   r   r   r   r   )r@   r   r   r   r   r3   r4   r   r   r   fr   r   r   r   r   r   r   r   r   )r   r   r   r   r>   r   )  sx   

,




$z2generator_function_wrapper.<locals>.gradio_handlerr/   r0   r3   r4   rK   c           
         s   da ttjt| j d}	 z
|  \\ }W n
 ty#   Y d S w |s;t|||d }d ur9| d S d} fdd}t	
| t }	|	t j| W d    n1 s_w   Y  t  q)NTFr   c               
      s    i } 	 zt | }W n# ty   Y d S  ty1 } zt| W Y d }~d S d }~ww z	t| W n tyU } zt| W Y d }~d S d }~ww qrM   )nextStopIterationro   rR   rs   r   r
   )genr   r   r   r6   r>   iterate  s&   zCgenerator_function_wrapper.<locals>.thread_wrapper.<locals>.iterate)r   r   r   r   rP   r   rq   r   rR   r#   r   r   r   r   r   r   )
r/   r0   r3   r4   rK   r   r   r   r   r   r   r   r>   r     s8   

z2generator_function_wrapper.<locals>.thread_wrapperrV   )r   r   r   r   r   r@   r   r   rY   r   rW   rX   r#   r   r   r\   rZ   r[   r   rV   )r   r   r   r   r6   r   r>   generator_function_wrapper  s(   8W
1r   excc                 C   sN   t t| | | j}d }t| tjr| }t|dd|_t	d
|| jj|dS )Nr   T )ru   r   r   )ru   format_exceptiontype__traceback__rp   r   r   getattrr   r   rO   	__class__rS   )r   	formattedr   r6   r6   r>   rs     s   rs   )Y__doc__multiprocessingrn   r   ru   warningsconcurrent.futuresr   
contextlibr   contextvarsr   datetimer   	functoolsr   r   multiprocessing.contextr	   pickler
   queuer   r   r   	threadingr   typingr   r   r   r   r   r   r   r   rE   configr   	reloadingr   utilsr   r   r   r   r   r   r   apir   r    r!   r"   r#   r$   r%   r&   r'   r)   r(   r*   typesr   r|   r   get_contextrF   r   rY   r-   r   r   r\   rZ   r[   r   r   Durationr   DynamicDurationr   r@   r   r   r   r   ro   rs   r6   r6   r6   r>   <module>   s    0
-


w
 