
    z%i                         	 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 g dZej(                  Zej,                  Zej0                  Zej4                  Zej6                  Z	 ej8                  ZdZej=                  d       ej@                  Z!	 ejD                  Z#ejH                  Z$[da%da&d
 Z'd Z(d Z)d Z*d Z+d Z,eZ-d Z" G d d      Z.e.Z/ G d d      Z0 G d d      Z1 G d de1      Z2 G d d      Z3 G d d      Z4 G d de5      Z6 ed      jn                  Z8d  Z9 e"       a:i Z;i Z< e
       Z= e       a> e?       a@d! ZA G d" d#      ZB	 d d$lmCaDmEZF t        ZKd+ ZL G d, d-eB      ZM G d. d/eB      ZN G d0 d1eB      ZOd2 ZPd3 ZQd4 ZRd5 ZSd6 ZTd7 ZUg ZVd	aWd8 ZXd d9lmYZY  eN       aZd: Z[d; Z\	 d d<lm]Z^ d> Z` eaed?      r ej                  e`@       yy# e$ r
 d dlmZ Y w xY w# e$ r d	ZY pw xY w# e$ r dZ#Y ew xY w# e$ r d d%lGmHZI d d&lmJZJ  eJd'd(      ZEd) ZFd* aDY w xY w# e$ r	 d d=l_m^Z^ Y w xY w)A    N)	monotonic)WeakSet)count)deque)	get_identactive_count	Conditioncurrent_thread	enumeratemain_threadTIMEOUT_MAXEventLockRLock	SemaphoreBoundedSemaphoreThreadBarrierBrokenBarrierErrorTimerThreadError
setprofilesettracelocal
stack_size
excepthookExceptHookArgsgettrace
getprofilesetprofile_all_threadssettrace_all_threadsTget_native_idFc                 
    	 | a y N_profile_hookfuncs    =/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/threading.pyr   r   <   s     M    c                 F    	 t        |        t        j                  |        y r$   )r   _sys_setprofileallthreadsr'   s    r)   r    r    E   s     tt$r*   c                      	 t         S r$   r%    r*   r)   r   r   O   s    Er*   c                 
    	 | a y r$   _trace_hookr'   s    r)   r   r   S   s     Kr*   c                 F    	 t        |        t        j                  |        y r$   )r   r,   _settraceallthreadsr'   s    r)   r!   r!   \   s     TNT"r*   c                      	 t         S r$   r1   r/   r*   r)   r   r   f   s    @r*   c                  <    	 t         t        | i |S t        | i |S r$   )_CRLock_PyRLock)argskwargss     r)   r   r   n   s.     (((D#F##r*   c                   J    e Zd Z	 d Zd Zd ZddZeZd Zd Z	d Z
d Zd	 Zy
)_RLockc                 >    t               | _        d | _        d| _        y Nr   )_allocate_lock_block_owner_countselfs    r)   __init__z_RLock.__init__   s    $&r*   c                 6   | j                   }	 t        |   j                  }d| j                  j                         rdnd| j                  j                  | j                  j                  || j                  t        t        |             fz  S # t        $ r Y vw xY w)Nz)<%s %s.%s object owner=%r count=%d at %s>lockedunlocked)rA   _activenameKeyErrorr@   rG   	__class__
__module____qualname__rB   hexid)rD   owners     r)   __repr__z_RLock.__repr__   s    	EN''E ;**,H*NN%%NN''KK4M>
 
 	
  		s   B 	BBc                 T    | j                   j                          d | _        d| _        y r>   )r@   _at_fork_reinitrA   rB   rC   s    r)   rT   z_RLock._at_fork_reinit   s     ##%r*   c                     	 t               }| j                  |k(  r| xj                  dz  c_        y| j                  j	                  ||      }|r|| _        d| _        |S N   )r   rA   rB   r@   acquire)rD   blockingtimeoutmercs        r)   rX   z_RLock.acquire   sY    	2 [;;"KK1K[[  73DKDK	r*   c                     	 | j                   t               k7  rt        d      | j                  dz
  x| _        }|s"d | _         | j                  j                          y y )Ncannot release un-acquired lockrW   )rA   r   RuntimeErrorrB   r@   release)rD   r   s     r)   r`   z_RLock.release   sV    	 ;;)+%@AA"kkAo-eDKKK! r*   c                 $    | j                          y r$   r`   rD   tvtbs       r)   __exit__z_RLock.__exit__       r*   c                 V    | j                   j                          |\  | _        | _        y r$   )r@   rX   rB   rA   )rD   states     r)   _acquire_restorez_RLock._acquire_restore   s     #( T[r*   c                     | j                   dk(  rt        d      | j                   }d| _         | j                  }d | _        | j                  j	                          ||fS )Nr   r^   )rB   r_   rA   r@   r`   )rD   r   rQ   s      r)   _release_savez_RLock._release_save   sT    ;;!@AAu~r*   c                 0    | j                   t               k(  S r$   )rA   r   rC   s    r)   	_is_ownedz_RLock._is_owned   s    {{ik))r*   NT)__name__rM   rN   rE   rR   rT   rX   	__enter__r`   rg   rk   rm   ro   r/   r*   r)   r<   r<   {   s<    


"H I".
)*r*   r<   c                   d    e Zd Z	 ddZd Zd Zd Zd Zd Zd Z	d	 Z
dd
ZddZddZd Zd Zy)r	   Nc                 :   |
t               }|| _        |j                  | _        |j                  | _        t	        |d      r|j
                  | _        t	        |d      r|j                  | _        t	        |d      r|j                  | _        t               | _	        y )Nrm   rk   ro   )
r   _lockrX   r`   hasattrrm   rk   ro   _deque_waitersrD   locks     r)   rE   zCondition.__init__   s|    <7D
|||| 4)!%!3!3D4+,$($9$9D!4%!^^DNr*   c                 l    | j                   j                          | j                  j                          y r$   )rv   rT   ry   clearrC   s    r)   rT   zCondition._at_fork_reinit  s"    

""$r*   c                 6    | j                   j                         S r$   )rv   rs   rC   s    r)   rs   zCondition.__enter__  s    zz##%%r*   c                 4     | j                   j                  | S r$   )rv   rg   )rD   r9   s     r)   rg   zCondition.__exit__  s    "tzz""D))r*   c                 J    d| j                   t        | j                        fz  S )Nz<Condition(%s, %d)>)rv   lenry   rC   s    r)   rR   zCondition.__repr__  s    $

C4F'GGGr*   c                 8    | j                   j                          y r$   )rv   r`   rC   s    r)   rm   zCondition._release_save      

r*   c                 8    | j                   j                          y r$   )rv   rX   )rD   xs     r)   rk   zCondition._acquire_restore"  r   r*   c                 p    | j                   j                  d      r| j                   j                          yy)NFT)rv   rX   r`   rC   s    r)   ro   zCondition._is_owned%  s,     ::e$JJ r*   c                 P   	 | j                         st        d      t               }|j                          | j                  j                  |       | j                         }d}	 ||j                          d}n)|dkD  r|j                  d|      }n|j                  d      }|| j                  |       |s	 | j                  j                  |       S S # t        $ r Y S w xY w# | j                  |       |s,	 | j                  j                  |       w # t        $ r Y w w xY ww xY w)Nzcannot wait on un-acquired lockFTr   )
ro   r_   r?   rX   ry   appendrm   rk   remove
ValueError)rD   rZ   waitersaved_stategotits        r)   waitzCondition.wait.  s   	, ~~@AA!V$((*	 Q;"NN49E"NN51E!!+.MM((0  " 	 !!+.MM((0!  sB   %?C$ 8C	C! C!$D%9DD%	D!D% D!!D%c                     	 d }|} |       }|sB|%|t               |z   }n|t               z
  }|dk  r	 |S | j                  |        |       }|sB|S r>   )_timer   )rD   	predicaterZ   endtimewaittimeresults         r)   wait_forzCondition.wait_for^  sr    	 #?#g0G&0H1}  IIh[F  r*   c                    	 | j                         st        d      | j                  }|r=|dkD  r7|d   }	 |j                          |dz  }	 |j	                  |       |r|dkD  r5y y y y # t        $ r Y )w xY w# t
        $ r Y &w xY w)Nz!cannot notify on un-acquired lockr   rW   )ro   r_   ry   r`   r   r   )rD   nwaitersr   s       r)   notifyzCondition.notifyu  s    	 ~~BCC--!a%QZF	  Qv& !a%g%g   
   s#   A) A8 )	A54A58	BBc                 N    	 | j                  t        | j                               y r$   )r   r   ry   rC   s    r)   
notify_allzCondition.notify_all  s    	 	C&'r*   c                 ^    	 dd l }|j                  dt        d       | j                          y )Nr   z3notifyAll() is deprecated, use notify_all() instead   
stacklevel)warningswarnDeprecationWarningr   rD   r   s     r)   	notifyAllzCondition.notifyAll  s/    	
 	K(Q 	 	8r*   r$   rW   )rr   rM   rN   rE   rT   rs   rg   rR   rm   rk   ro   r   r   r   r   r   r/   r*   r)   r	   r	      sJ    	!$&*H.`.<(	r*   r	   c                   6    e Zd Z	 ddZd ZddZeZddZd Zy)	r   c                 b    |dk  rt        d      t        t                     | _        || _        y )Nr   z$semaphore initial value must be >= 0)r   r	   r   _cond_value)rD   values     r)   rE   zSemaphore.__init__  s*    19CDDtv&
r*   c           	          | j                   }d|j                   d|j                   dt        |       dd| j                   d	S )N<. at #x: value=>)rL   rM   rN   rP   r   rD   clss     r)   rR   zSemaphore.__repr__  sK    nnCNN#1S%5%5$6d2d8B- H++a) 	*r*   Nc                 d   	 |s|t        d      d}d }| j                  5  | j                  dk(  rS|sng|#|t               |z   }n|t               z
  }|dk  rnB| j                  j	                  |       | j                  dk(  rS| xj                  dz  c_        d}d d d        |S # 1 sw Y   |S xY w)Nz.can't specify timeout for non-blocking acquireFr   rW   T)r   r   r   r   r   )rD   rY   rZ   r\   r   s        r)   rX   zSemaphore.acquire  s    	. G/MNNZZ 	++"&"''G"3")EG"3"a<!

( ++" q 	 		 	s   A"B%B%%B/c                     	 |dk  rt        d      | j                  5  | xj                  |z  c_        | j                  j                  |       d d d        y # 1 sw Y   y xY w)NrW   n must be one or more)r   r   r   r   rD   r   s     r)   r`   zSemaphore.release  sX    	 q5455ZZ 	!KK1KJJa 	! 	! 	!s   1AA!c                 $    | j                          y r$   rb   rc   s       r)   rg   zSemaphore.__exit__  rh   r*   r   )TN)	rr   rM   rN   rE   rR   rX   rs   r`   rg   r/   r*   r)   r   r     s(    *
+Z I!r*   r   c                   0     e Zd Z	 d fd	Zd ZddZ xZS )r   c                 2    t         |   |       || _        y r$   )superrE   _initial_value)rD   r   rL   s     r)   rE   zBoundedSemaphore.__init__  s    #r*   c                     | j                   }d|j                   d|j                   dt        |       dd| j                   d| j
                   dS )Nr   r   r   r   r   /r   )rL   rM   rN   rP   r   r   r   s     r)   rR   zBoundedSemaphore.__repr__  sY    nnCNN#1S%5%5$6d2d8B- H++a(;(;'<A? 	@r*   c                    	 |dk  rt        d      | j                  5  | j                  |z   | j                  kD  rt        d      | xj                  |z  c_        | j                  j	                  |       d d d        y # 1 sw Y   y xY w)NrW   r   z!Semaphore released too many times)r   r   r   r   r   r   s     r)   r`   zBoundedSemaphore.release  sz    	 q5455ZZ 	!{{Q!4!44 !DEEKK1KJJa 		! 	! 	!s   AA??Br   )rr   rM   rN   rE   rR   r`   __classcell__)rL   s   @r)   r   r     s     $@
!r*   r   c                   @    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d
d	Z
y)r   c                 B    t        t                     | _        d| _        y NF)r	   r   r   _flagrC   s    r)   rE   zEvent.__init__7  s    tv&

r*   c           	          | j                   }| j                  rdnd}d|j                   d|j                   dt	        |       dd| d	S )	Nsetunsetr   r   r   r   z: r   )rL   r   rM   rN   rP   )rD   r   statuss      r)   rR   zEvent.__repr__;  sL    nn**'3>>"!C$4$4#5T"T(2bPQRRr*   c                 8    | j                   j                          y r$   )r   rT   rC   s    r)   rT   zEvent._at_fork_reinit@  s    

""$r*   c                     	 | j                   S r$   )r   rC   s    r)   is_setzEvent.is_setD  s    Czzr*   c                 \    	 dd l }|j                  dt        d       | j                         S )Nr   z+isSet() is deprecated, use is_set() insteadr   r   )r   r   r   r   r   s     r)   isSetzEvent.isSetH  s1    	
 	C(Q 	 	8{{}r*   c                     	 | j                   5  d| _        | j                   j                          d d d        y # 1 sw Y   y xY wNT)r   r   r   rC   s    r)   r   z	Event.setS  s<    	 ZZ 	$DJJJ!!#	$ 	$ 	$s	   "9Ac                 V    	 | j                   5  d| _        d d d        y # 1 sw Y   y xY wr   )r   r   rC   s    r)   r}   zEvent.clear^  s,    	 ZZ 	DJ	 	 	s   (Nc                     	 | j                   5  | j                  }|s| j                   j                  |      }|cd d d        S # 1 sw Y   y xY wr$   )r   r   r   )rD   rZ   signaleds      r)   r   z
Event.waith  sF    	 ZZ 	zzH::??73		 	 	s   +AAr$   )rr   rM   rN   rE   rR   rT   r   r   r   r}   r   r/   r*   r)   r   r   ,  s0    S
%		$r*   r   c                   ~    e Zd Z	 ddZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zed        Zed        Zed        Zy)r   Nc                 |    	 t        t                     | _        || _        || _        || _        d| _        d| _        y r>   )r	   r   r   _action_timeout_parties_staterB   )rD   partiesactionrZ   s       r)   rE   zBarrier.__init__  s:    	 tv&
r*   c                    | j                   }| j                  r*d|j                   d|j                   dt	        |       ddS d|j                   d|j                   dt	        |       dd| j
                   d| j                   dS )	Nr   r   r   r   z	: broken>z
: waiters=r   r   )rL   brokenrM   rN   rP   	n_waitingr   r   s     r)   rR   zBarrier.__repr__  s    nn;;s~~&a(8(8'9bhr])TTCNN#1S%5%5$6d2d8B- H NN+1T\\N!= 	>r*   c                    	 || j                   }| j                  5  | j                          | j                  }| xj                  dz  c_        	 |dz   | j                  k(  r| j                          n| j                  |       || xj                  dz  c_        | j                          cd d d        S # | xj                  dz  c_        | j                          w xY w# 1 sw Y   y xY wrV   )r   r   _enterrB   r   _release_wait_exit)rD   rZ   indexs      r)   r   zBarrier.wait  s    	 ?mmGZZ 	KKMKKEKK1K19-MMO JJw'q 

	 	 q 

	 	s#   2C5B3%C3'CCC&c                     | j                   dv r)| j                  j                          | j                   dv r)| j                   dk  rt        y )Nrq   rW   r   )r   r   r   r   rC   s    r)   r   zBarrier._enter  sB    kkW$JJOO kkW$ ;;?$$ r*   c                     	 | j                   r| j                          d| _        | j                  j                          y #  | j	                           xY wrV   )r   r   r   r   _breakrC   s    r)   r   zBarrier._release  sA    		||DKJJ!!#	KKMs   =A   Ac                       j                   j                   fd|      s j                          t         j                  dk  rt        y )Nc                  "     j                   dk7  S r>   r   rC   s   r)   <lambda>zBarrier._wait.<locals>.<lambda>  s    DKK1,< r*   r   )r   r   r   r   r   rD   rZ   s   ` r)   r   zBarrier._wait  s=    zz""#<gFKKM$$;;?$$ r*   c                     | j                   dk(  r1| j                  dv r"d| _        | j                  j                          y y y )Nr   r   )rB   r   r   r   rC   s    r)   r   zBarrier._exit  s;    ;;!{{g%

%%' & r*   c                    	 | j                   5  | j                  dkD  r.| j                  dk(  rd| _        n| j                  dk(  rd| _        nd| _        | j                   j                          d d d        y # 1 sw Y   y xY w)Nr   rq   )r   rB   r   r   rC   s    r)   resetzBarrier.reset  so    	 ZZ 	${{Q;;!#"$DK[[B& #%DKJJ!!#	$ 	$ 	$s   AA66A?c                 h    	 | j                   5  | j                          d d d        y # 1 sw Y   y xY wr$   )r   r   rC   s    r)   abortzBarrier.abort  s.    	 ZZ 	KKM	 	 	s   (1c                 F    d| _         | j                  j                          y Nr   )r   r   r   rC   s    r)   r   zBarrier._break  s     

r*   c                     	 | j                   S r$   )r   rC   s    r)   r   zBarrier.parties  s    H}}r*   c                 <    	 | j                   dk(  r| j                  S yr>   )r   rB   rC   s    r)   r   zBarrier.n_waiting  s     L ;;!;;r*   c                 "    	 | j                   dk(  S r   r   rC   s    r)   r   zBarrier.broken$  s    >{{b  r*   NNr$   )rr   rM   rN   rE   rR   r   r   r   r   r   r   r   r   propertyr   r   r   r/   r*   r)   r   r     su     >< 
 ($(      ! !r*   r   c                       e Zd Zy)r   N)rr   rM   rN   r/   r*   r)   r   r   *  s    r*   r   rW   c                     | t               z  S r$   )_counter)name_templates    r)   _newnamer   0  s    8:%%r*   c                      	 t         D  cg c]  } | j                         r|  }} t         j                  |       y c c} w r$   )_shutdown_locksrG   difference_update)r{   	to_removes     r)   _maintain_shutdown_locksr  B  s8     #2G$GIG%%i0 Hs   <<c                   $   e Zd Z	 dZ	 	 ddddZd Zd Zd Zd Zd	 Z	d
 Z
erd Zd Zd Zd Zd ZddZddZed        Zej*                  d        Zed        Zered        Zd Zed        Zej*                  d        Zd Zd Zd Zd Zy) r   FN)daemonc                   	 |i }|rt        |      }n#t        d      }|	 |j                  }|d| dz  }|| _        || _        || _        || _        ||rt               st        d      || _
        nt               j                  | _
        d | _        t        rd | _        d | _        t#               | _        d| _        d| _        t*        j,                  | _        t1               | _        t4        j7                  |        y # t        $ r Y w xY w)Nz	Thread-%dz ()z4daemon threads are disabled in this (sub)interpreterFT)strr   rr   AttributeError_target_name_args_kwargs_daemon_threads_allowedr_   	_daemonicr
   r  _ident_HAVE_THREAD_NATIVE_ID
_native_id_tstate_lockr   _started_is_stopped_initializedr,   stderr_stderr_make_invoke_excepthook_invoke_excepthook	_danglingadd)rD   grouptargetrJ   r9   r:   r  target_names           r)   rE   zThread.__init__]  s   	, >Ft9DK(D!"(//KbQ//D 

57"#YZZ#DN+-44DN!"DO   {{"9";d1 & s   C? ?	D
Dc                     | j                   j                          |rB| j                  5| j                  j                          | j                  j                          y y d| _        d | _        y r   )r  rT   r  rX   r  )rD   is_alives     r)   _reset_internal_lockszThread._reset_internal_locks  s`     	%%'   ,!!113!!))+ -  $D $Dr*   c                 ,   d}| j                   j                         rd}| j                          | j                  rd}| j                  r|dz  }| j
                  |d| j
                  z  z  }d| j                  j                  d| j                  d|d	S )
Ninitialstartedstoppedz daemonz %sr   (z, z)>)	r  r   r!  r  r  r  rL   rr   r  )rD   r   s     r)   rR   zThread.__repr__  s}    ==!FF>>iF;;"edkk))F!%!8!8$**fMMr*   c                    	 | j                   st        d      | j                  j                         rt        d      t        5  | t
        | <   d d d        	 t        | j                  d       | j                  j                          y # 1 sw Y   ;xY w# t        $ r$ t        5  t
        | = d d d         # 1 sw Y    xY ww xY w)Nzthread.__init__() not calledz threads can only be started oncer/   )
r  r_   r  r   _active_limbo_lock_limbo_start_new_thread
_bootstrap	Exceptionr   rC   s    r)   startzThread.start  s    	   =>>==!ABB 	 F4L	 	door2
 		  	   	# !4L!!	s0   
BB BC#B4+	C4B=	9Cc                     	 	 | j                   & | j                   | j                  i | j                   | ` | `| `y # | ` | `| `w xY wr$   )r
  r  r  rC   s    r)   runz
Thread.run  sN    		7||'djj9DLL9 dj$,dj$,s	   2< Ac                 Z    	 | j                          y #  | j                  rt        Y y  xY wr$   )_bootstrap_innerr  r,   rC   s    r)   r,  zThread._bootstrap  s+    	!!#	~~$,s    **c                 "    t               | _        y r$   )r   r  rC   s    r)   
_set_identzThread._set_ident  s    kr*   c                 "    t               | _        y r$   )r"   r  rC   s    r)   _set_native_idzThread._set_native_id  s    +oDOr*   c                     	 t               | _        | j                  j                          | j                  s9t        5  t                t        j                  | j                         d d d        y y # 1 sw Y   y xY wr$   )_set_sentinelr  rX   r  _shutdown_locks_lockr  r   r  rC   s    r)   _set_tstate_lockzThread._set_tstate_lock  sh    	 *O!!#{{% 7(*##D$5$567 7 7 7s   *A11A:c                 (   	 | j                          | j                          t        r| j                          | j                  j                          t        5  | t        | j                  <   t        | = d d d        t        rt        j                  t               t        rt        j                  t               	 | j                          | j#                          y # 1 sw Y   ixY w#  | j!                  |        Y 2xY w# | j#                          w xY wr$   )r4  r:  r  r6  r  r   r)  rI   r  r*  r2   r,   r   r&   r   r0  r  _deleterC   s    r)   r2  zThread._bootstrap_inner  s    	OO!!#%##%MM# !'+$4L! k*..
 LLN! !.''-LLNs7   AC? C3AC? :C' C$ C? 'C<:C? ?Dc                     | j                   }| d| _        d | _         | j                  st        5  t	                d d d        y y y # 1 sw Y   y xY wr   )r  r  r  r9  r  rz   s     r)   _stopzThread._stop"  sU    "    {{% +(*+ + + +s   AAc                 Z    	 t         5  t        t               = d d d        y # 1 sw Y   y xY wr$   )r)  rI   r   rC   s    r)   r<  zThread._delete=  s'    K 	%	$	% 	% 	%s   !*c                 
   	 | j                   st        d      | j                  j                         st        d      | t	               u rt        d      || j                          y | j                  t        |d             y )NThread.__init__() not calledz'cannot join thread before it is startedzcannot join current threadr   )rZ   )r  r_   r  r   r
   _wait_for_tstate_lockmaxr   s     r)   joinzThread.joinF  s{    	.   =>>}}##%HII>##;<<?&&( &&s7A&?r*   c                     | j                   }|y 	 |j                  ||      r!|j                          | j                          y y #  |j	                         r |j                          | j                           xY wr$   )r  rX   r`   r>  rG   )rD   blockrZ   r{   s       r)   rB  zThread._wait_for_tstate_lockl  sj       < 	||E7+

 ,	{{}
 

s   2A 3A8c                     	 | j                   S r$   )r  rC   s    r)   rJ   zThread.name  s    	 zzr*   c                 $    t        |      | _        y r$   )r  r  )rD   rJ   s     r)   rJ   zThread.name  s     Y
r*   c                     	 | j                   S r$   )r  rC   s    r)   identzThread.ident  s    	 {{r*   c                     	 | j                   S r$   )r  rC   s    r)   	native_idzThread.native_id  s     ??"r*   c                     	 | j                   s| j                  j                         sy| j                  d       | j                    S r   )r  r  r   rB  rC   s    r)   r!  zThread.is_alive  sA    	 4==#7#7#9""5)####r*   c                     	 | j                   S r$   )r  rC   s    r)   r  zThread.daemon  s    		 ~~r*   c                     | j                   st        d      |rt               st        d      | j                  j	                         rt        d      || _        y )NrA  z/daemon threads are disabled in this interpreterz)cannot set daemon status of active thread)r  r_   r  r  r   r  )rD   daemonics     r)   r  zThread.daemon  sO      =>>35PQQ==!JKK!r*   c                 T    	 dd l }|j                  dt        d       | j                  S )Nr   z:isDaemon() is deprecated, get the daemon attribute insteadr   r   r   r   r   r  r   s     r)   isDaemonzThread.isDaemon  s/    	
 	R(Q 	 	8{{r*   c                 L    	 dd l }|j                  dt        d       || _        y )Nr   z;setDaemon() is deprecated, set the daemon attribute insteadr   r   rR  )rD   rP  r   s      r)   	setDaemonzThread.setDaemon  s,    	
 	S(Q 	 	8r*   c                 T    	 dd l }|j                  dt        d       | j                  S )Nr   z7getName() is deprecated, get the name attribute insteadr   r   r   r   r   rJ   r   s     r)   getNamezThread.getName  s/    	
 	O(Q 	 	8yyr*   c                 L    	 dd l }|j                  dt        d       || _        y )Nr   z7setName() is deprecated, set the name attribute insteadr   r   rW  )rD   rJ   r   s      r)   setNamezThread.setName  s,    	
 	O(Q 	 	8	r*   )NNNr/   Nr$   rp   )rr   rM   rN   r  rE   r"  rR   r.  r0  r,  r4  r  r6  r:  r2  r>  r<  rD  rB  r   rJ   setterrJ  rL  r!  r  rS  rU  rX  rZ  r/   r*   r)   r   r   R  s    L59!%:15:x%"N47"(" 	.7.+6%$@L6   
[[  	 	 		# 
	#$   ]]" "				r*   r   )_excepthook_ExceptHookArgs)print_exception)
namedtupler   z'exc_type exc_value exc_traceback threadc                     t        |  S r$   )r]  )r9   s    r)   r   r     s    %%r*   c                   	 | j                   t        k(  ry t        !t        j                  t        j                  }n&| j                  | j                  j
                  }|y y | j                  | j                  j                  }n
t               }t        d| d|d       t        | j                   | j                  | j                  |       |j                          y )NzException in thread :Tfileflush)rd  )exc_type
SystemExitr,   r  threadr  rJ   r   print_print_exception	exc_valueexc_tracebackre  )r9   r  rJ   s      r)   r   r     s    	 ==J& 7[[F[[$[[((F~  ;;";;##D;D$TF!,	'8J8J$	&r*   c                      t         t        j                   t        d      t        d      t        j                  t        t        fd} | S )Nzthreading.excepthook is Nonezsys.excepthook is Nonec                 X   	 t         }|}t        g  
       |       } ||       d }y # t        $ rm}d|_        ~j                  j                  }n| j
                  } d|d       j                   j                   }n	} | 
         Y d }~d }y d }~ww xY w# d }w xY w)NTz"Exception in threading.excepthook:rc  )r   r   r-  __suppress_context__r  r  )rh  hookr9   excr  sys_excepthooklocal_print	local_sysold_excepthookold_sys_excepthooksys_exc_infos         r)   invoke_excepthookz2_make_invoke_excepthook.<locals>.invoke_excepthookE  s    	D|%!";LN";F";<DJ* D)  	,'+C$$)9)9)E"))<#41 $)=)=)I!*!5!5!3LN+ D)	,( Ds'   &, 	B"A!BB% B""B% %B))r   r,   r_   exc_infori  )rx  rs  rt  ru  rv  rw  s    @@@@@r)   r  r  5  s^    
  N9::!344==LKI @ r*   c                   "    e Zd Z	 ddZd Zd Zy)r   Nc                     t         j                  |        || _        || _        ||ng | _        ||ni | _        t               | _        y r$   )r   rE   intervalfunctionr9   r:   r   finished)rD   r|  r}  r9   r:   s        r)   rE   zTimer.__init__s  sA       ,D"	 & 2fr*   c                 :    	 | j                   j                          y r$   )r~  r   rC   s    r)   cancelzTimer.cancel{  s    7r*   c                    | j                   j                  | j                         | j                   j                         s& | j                  | j
                  i | j                   | j                   j                          y r$   )r~  r   r|  r   r}  r9   r:   r   rC   s    r)   r0  z	Timer.run  sS    4==)}}##%DMM49944r*   r   )rr   rM   rN   rE   r  r0  r/   r*   r)   r   r   j  s     r*   r   c                       e Zd Zd Zy)_MainThreadc                 0   t         j                  | dd       | j                          | j                  j	                          | j                          t        r| j                          t        5  | t        | j                  <   d d d        y # 1 sw Y   y xY w)N
MainThreadFrJ   r  )r   rE   r:  r  r   r4  r  r6  r)  rI   r  rC   s    r)   rE   z_MainThread.__init__  so    <>!! 	(#'GDKK 	( 	( 	(s   /BBN)rr   rM   rN   rE   r/   r*   r)   r  r    s    (r*   r  c                   &    e Zd Zd Zd Zd ZddZy)_DummyThreadc                 2   t         j                  | t        d      t                      | j                  j                          | j                          t        r| j                          t        5  | t        | j                  <   d d d        y # 1 sw Y   y xY w)NzDummy-%dr  )r   rE   r   r  r  r   r4  r  r6  r)  rI   r  rC   s    r)   rE   z_DummyThread.__init__  ss    8J#768 	 	: 	!! 	(#'GDKK 	( 	( 	(s   0BBc                      y r$   r/   rC   s    r)   r>  z_DummyThread._stop  s    r*   c                      yr   r/   rC   s    r)   r!  z_DummyThread.is_alive  s    r*   Nc                      y r$   r/   r   s     r)   rD  z_DummyThread.join  s    r*   r$   )rr   rM   rN   rE   r>  r!  rD  r/   r*   r)   r  r    s    	(3r*   r  c                  Z    	 	 t         t                  S # t        $ r t               cY S w xY wr$   )rI   r   rK   r  r/   r*   r)   r
   r
     s0    y{## ~s    **c                  P    	 dd l } | j                  dt        d       t               S )Nr   z;currentThread() is deprecated, use current_thread() insteadr   r   )r   r   r   r
   r   s    r)   currentThreadr    s.    
 MMO$  4r*   c                  z    	 t         5  t        t              t        t              z   cd d d        S # 1 sw Y   y xY wr$   )r)  r   rI   r*  r/   r*   r)   r   r     s1     
 *7|c&k)* * *s   1:c                  P    	 dd l } | j                  dt        d       t               S )Nr   z7activeCount() is deprecated, use active_count() insteadr   r   )r   r   r   r   r  s    r)   activeCountr    s-    
 MMK$  4>r*   c                  x    t        t        j                               t        t        j                               z   S r$   )listrI   valuesr*  r/   r*   r)   
_enumerater    s$     !D$999r*   c                      	 t         5  t        t        j                               t        t        j                               z   cd d d        S # 1 sw Y   y xY wr$   )r)  r  rI   r  r*  r/   r*   r)   r   r     s@     
 >GNN$%V]]_(==> > >s   ;AAc                     	 t         rt        d      t        j                  | g|i |}t        j                  |       y )Nz$can't register atexit after shutdown)_SHUTTING_DOWNr_   	functoolspartial_threading_atexitsr   )r(   argr:   calls       r)   _register_atexitr    s@     ABBT2C262Dd#r*   )r   c                     	 t         j                  ry dat        t              D ]	  }  |          t         j
                  t               k(  r5t         j                  }|j                          t         j                          n	 	 t        5  t        t              }t        j                          d d d        sy |D ]"  }|j                          |j                          $ ]# 1 sw Y   4xY wr   )_main_threadr  r  reversedr  rJ  r   r  r`   r>  r9  r  r   r}   rX   )atexit_calltlocklocksr{   s       r)   	_shutdownr    s      N   23  Y[())
 	 	 ! 	$)E!!#	$  	DLLNLLN	 	$ 	$s   $CC(c                      	 t         S r$   )r  r/   r*   r)   r   r   I  s    
 r*   )_local)r   c                  H   	 t               ai } 	 t        t                  }|at               at               a
t        5  t        t                     }|j                  t               |D ]O  }||u r(|j                  d       t               }||_        || |<   /|j                  d       |j!                          Q t"        j%                          t        j%                          t        j                  |        d d d        y # t        $ r t               }Y w xY w# 1 sw Y   y xY w)NTF)r   r)  rI   r   rK   r  r  r?   r9  r   r   r  updater  r"  r  r>  r*  r}   )
new_activecurrentthreadsrh  rJ  s        r)   _after_forkr  Z  s     J )+& L *+eO	 ! jl#y! 	F   ,,T2! %$*
5! ,,U3	 	z"-! !    -	 ! !s   C? B:D?DDD!register_at_fork)after_in_child)cos_ossysr,   _threadr  timer   r   _weakrefsetr   	itertoolsr   rB   _collectionsr   rx   ImportErrorcollections__all__start_new_threadr+  daemon_threads_allowedr  allocate_lockr?   r8  r   r"   r  r   r	  errorr   r   r7   r   r&   r2   r   r    r   r   r!   r   r   r<   r8   r	   r   r   r   r   r_   r   __next__r   r   r)  rI   r*  r  r9  r   r   r  r   r\  r   r]  r   	tracebackr^  rj  r_  __excepthook__r  r   r  r  r
   r  r   r  r  r   r  r  r  r   r  r  r   r  r   _threading_localr  rw   r  r/   r*   r)   <module>r     s   A     #  %,,< ,, !88 &&%%	#))M!NN?# mmmmG !!
 %# $t* t*l q qhT Tn*!y *!ZO Oz^! ^!B	 	
 !9& W 
	I	
 &' %1 n nb+<\ 0jF <
(& 
(*36 34
	
*	:	>  $"  }2p''
2!j 3"#C4 $E4  ,++,>  #"#
  Gj&  (=& 13O&(`
  '&'sY   G ,G1 G? H 8H3 G.-G.1G<;G<?H
	H
 H0/H03I I