ó
ã™xTc           @   sŒ  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 Z d  d l	 Z	 d „  Z
 d e f d „  ƒ  YZ d  d  d	 „ Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d e f d „  ƒ  YZ# d  „  Z$ d! „  Z% e& d" k rˆe
 ƒ  e% ƒ  n  d S(#   iÿÿÿÿ(   t   division(   t   thread_with_callback_and_wait(   t   process_with_callbacks(   t   Sorryt   AbortNc       	      sf  g  ‰  ‡  f d †  }  ‡  f d †  } d d  ‡  f d † } | ƒ  ˆ  d d d g k s[ t ‚ xd  d d g f |  d d g f g D]Þ \ } } xÏ t d	 ƒ D]Á } g  ‰  t d
 | d | d | ƒ } | d  k rÙ | j ƒ  n
 | j ƒ  x t | ƒ D] } | j ƒ  qð W| j d t ƒ j ƒ  ˆ  | k s,t ‚ | d k  r™ | j	 | d | d d g ƒ q™ q™ Wq€ Wd  S(   Nc            s   ˆ  j  |  d ƒ d  S(   Ni
   (   t   append(   t   i(   t	   collected(    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   first_callback   s    c            s   ˆ  j  |  d ƒ |  d k  S(   Ni
   i   (   R   (   R   (   R   (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   callback   s    i   c            sk   d } x^ | d  k	 s! | |  k rf ˆ  j | ƒ | d  k	 rY | | ƒ } | t k rY PqY n  | d 7} q	 Wd  S(   Ni   (   t   NoneR   t   False(   t   nR	   R   t   status(   R   (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   run   s    i   i   i
   iöÿÿÿi   R   R	   R   t   last_iterationi   (
   R
   t   AssertionErrort   xrangeR   t   startt!   start_and_wait_for_first_callbackt   resumet   Truet   joint   extend(   R   R	   R   t	   callback1t   expectedt   n_resumet   tR   (    (   R   sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   exercise_threading   s0    
	
t   _callback_handlerc           B   sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d d „ Z
 RS(	   c         C   s1   d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   R
   t   _errt   _resultt   _abortt   _stdoutt   _other(   t   self(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   __init__;   s
    				c         C   s   | |  _  | |  _ d  S(   N(   R   t   _tb(   R#   t   errort   traceback_info(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   cb_errB   s    	c         C   s   t  |  _ d  S(   N(   R   R    (   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   cb_abortF   s    c         C   s   | |  _  d  S(   N(   R   (   R#   t   result(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt	   cb_resultI   s    c         C   s:   |  j  d  k	 r' |  j  t | ƒ 7_  n t | ƒ |  _  d  S(   N(   R!   R
   t   str(   R#   t   stdout(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt	   cb_stdoutL   s     c         C   s2   |  j  d  k	 r" |  j  j | ƒ n | g |  _  d  S(   N(   R"   R
   R   (   R#   t   data(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   cb_otherP   s    c         C   s.   |  j  d  k	 s t ‚ |  j d  k s* t ‚ d  S(   N(   R   R
   R   R   (   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_error_raisedV   s    c         C   sm   |  j  d  k s t ‚ |  j d  k s* t ‚ |  j | k s? t ‚ |  j | k sT t ‚ |  j | k si t ‚ d  S(   N(   R   R
   R   R    R   R!   R"   (   R#   t   expected_resultt   expected_stdoutt   expected_other(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_run_successZ   s
    N(   t   __name__t
   __module__R$   R(   R)   R+   R.   R0   R1   R
   R5   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyR   :   s   							c         C   s@   |  d k  r | d k  s t  ‚ | d k r6 | d k s< t  ‚ t S(   Ni    (   R   R   (   t   at   bt   ct   d(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt    _inner_target_with_args_and_kwdsc   s    c         C   s   t  |  | Ž  S(   N(   R<   (   t   argst   kwdst
   connection(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function01h   s    c          C   s“   t  ƒ  }  t d t d d d i d d 6d d 6d |  j d	 |  j d
 |  j d |  j ƒ } | j ƒ  x | j ƒ  rr qc W|  j	 d t
 d d  d d  ƒ d  S(   Nt   targetR=   iþÿÿÿt   kwargsi   R:   R;   t   callback_stdoutt   callback_finalt   callback_errt   callback_otherR2   R3   R4   (   iþÿÿÿiþÿÿÿ(   R   R   R@   R.   R+   R(   R0   R   t   isAliveR5   R   R
   (   t   cht   p(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_args_kwdsk   s    				
c          C   s
   d }  d  S(   Ni   (    (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _inner_target_no_return|   s    c         C   s   t  |  | Ž  S(   N(   RK   (   R=   R>   R?   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function02   s    c          C   sm   t  ƒ  }  t d t d |  j d |  j d |  j d |  j ƒ } | j ƒ  x | j ƒ  rX qI W|  j	 d d  ƒ d  S(   NRA   RC   RD   RE   RF   R2   (   R   R   RL   R.   R+   R(   R0   R   RG   R5   R
   (   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_no_return_value‚   s    				
c         C   s-   x& t  d ƒ D] } | GH| j | ƒ q Wd S(   Ni   (   R   t   send(   R=   R>   R?   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function03�   s    c          C   s‹   t  ƒ  }  t d t d |  j d |  j d |  j d |  j ƒ } | j ƒ  x | j ƒ  rX qI Wd } |  j	 d d d	 | d
 d d d d g ƒ d  S(   NRA   RC   RD   RE   RF   s   0
1
2
3
R2   i   R3   R4   i    i   i   i   (
   R   R   RO   R.   R+   R(   R0   R   RG   R5   (   RH   RI   t   tstout(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_callbacks–   s    				
c         C   sD   |  d  k r t j }  n  x% t d ƒ D] } |  j d | ƒ q% Wd  S(   Niè  s   %s
(   R
   t   sysR-   R   t   write(   t   outR   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt
   _tst_print«   s
    c         C   s   t  |  | Ž  S(   N(   RU   (   R=   R>   R?   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function04²   s    c          C   sœ   d d  l  }  |  j ƒ  } t | ƒ xs t t g D]e } t ƒ  } t d t d | j d | ƒ } | j	 ƒ  x | j
 ƒ  rx qi W| j ƒ  | j k s/ t ‚ q/ Wd  S(   NiÿÿÿÿRA   RC   t   buffer_stdout(   t	   cStringIOt   StringIORU   R   R   R   R   RV   R.   R   RG   t   getvalueR!   R   (   RX   t   tmpoutRW   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt
   tst_stdoutµ   s    
			
c         C   s   t  d ƒ ‚ d  S(   Nt   _target_function05a(   t	   Exception(   R=   R>   R?   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyR]   Æ   s    c         C   s   t  d ƒ ‚ d  S(   Nt   _target_function05b(   R   (   R=   R>   R?   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyR_   É   s    c          C   s“   xŒ t  t g D]~ }  t ƒ  } t d |  d | j d | j ƒ } | j ƒ  x | j ƒ  rY qJ W| j ƒ  |  t k r t	 | j
 t ƒ s‹ t ‚ q q Wd  S(   NRA   RE   RD   (   R]   R_   R   R   R(   R+   R   RG   R1   t
   isinstanceR   R   R   (   t   fRH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_exceptionsÌ   s    		

c         C   s-   x& t  d ƒ D] } | GHt j d ƒ q Wd  S(   Ni
   i   (   R   t   timet   sleep(   R=   R>   R?   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function06Ý   s    c          C   sa   t  ƒ  }  t d t d |  j ƒ } | j ƒ  | j ƒ  x | j ƒ  rG q8 W|  j t k s] t	 ‚ d  S(   NRA   t   callback_abort(
   R   R   Re   R)   R   t   abortRG   R    R   R   (   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_abort_simpleâ   s    	

c         C   s   t  j d ƒ t ƒ  ‚ d  S(   Ni   (   Rc   Rd   R   (   R=   R>   R?   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function07í   s    c          C   sa   t  ƒ  }  t d t d |  j ƒ } | j ƒ  | j ƒ  x | j ƒ  rG q8 W|  j t k s] t	 ‚ d  S(   NRA   Rf   (
   R   R   Ri   R)   R   Rg   RG   R    R   R   (   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_abort_2ñ   s    	

c         C   s_   d d  l  } d d  l } | j ƒ  } | j j | ƒ t j d ƒ | j d ƒ t j d ƒ d  S(   Niÿÿÿÿi   s   Hello, world!(   t   libtbx.callbacksRX   RY   t	   call_backt   set_warning_logRc   Rd   t   warn(   R=   R>   R?   t   libtbxRX   t   log(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function08ü   s    c          C   sz   t  ƒ  }  t d t d |  j ƒ } | j ƒ  x | j ƒ  r= q. W|  j d j d k sZ t ‚ |  j d j	 d k sv t ‚ d  S(   NRA   RF   i    Rn   s   Hello, world!(
   R   R   Rq   R0   R   RG   R"   t   messageR   R/   (   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_warn_callback  s    	
c         C   s-   x& t  d ƒ D] } | GHt j d ƒ q Wd  S(   Ni
   i   (   t   rangeRc   Rd   (   R=   R>   R?   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   _target_function09  s    t   _callback_handler_2c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s(   d |  _  t |  _ t |  _ t |  _ d  S(   Nt    (   t   linesR   t   pausedt   resumedt   aborted(   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyR$     s    			c         C   s   |  j  | 7_  d  S(   N(   Rx   (   R#   R/   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   cb_print  s    c         C   s   t  |  _ d  S(   N(   R   Ry   (   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   cb_pause   s    c         C   s   t  |  _ t |  _ d  S(   N(   R   Rz   R   Ry   (   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt	   cb_resume#  s    	c         C   s   t  |  _ d  S(   N(   R   R{   (   R#   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyR)   '  s    (   R6   R7   R$   R|   R}   R~   R)   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyRv     s
   				c          C   s™  t  j d k r d GHnt ƒ  }  t d t d |  j d |  j d |  j d |  j ƒ } | j	 ƒ  t
 j d ƒ | j ƒ  |  j sƒ t ‚ t |  j ƒ } t
 j d	 ƒ |  j | k s´ t ‚ | j ƒ  |  j sÍ t ‚ x | j ƒ  rß qÐ W|  j sð t ‚ |  j j ƒ  d
 d d d d d d d d d g
 k s)t ‚ t ƒ  }  t d t d |  j d |  j d |  j d |  j ƒ } | j	 ƒ  t
 j d ƒ | j ƒ  |  j s•t ‚ d  S(   Nt   win32s5   Skipping pause/resume test (not available on Windows)RA   RC   t   callback_pauset   callback_resumeRf   i   i   t   0t   1t   2t   3t   4t   5t   6t   7t   8t   9i   (   RR   t   platformRv   R   Ru   R|   R}   R~   R)   R   Rc   Rd   t   pauseRy   R   R,   Rx   R   Rz   RG   R{   t
   splitlinest   kill(   RH   RI   t   current_data(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   tst_pause_resume_kill*  sB    				


9				

c          C   sq   yC t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  Wn" t	 k
 rg }  d Gt
 |  ƒ GHn Xd GHd  S(   Ns   Skipping thread_utils tests:t   OK(   RJ   RM   RQ   R\   Rb   Rh   Rj   Rs   R‘   t   ImportErrorR,   (   t   e(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   exercise_processP  s    t   __main__('   t
   __future__R    t   libtbx.thread_utilsR   R   t   libtbx.utilsR   R   Rc   RR   R   t   objectR   R<   R@   RJ   RK   RL   RM   RO   RQ   R
   RU   RV   R\   R]   R_   Rb   Re   Rh   Ri   Rj   Rq   Rs   Ru   Rv   R‘   R•   R6   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_thread_utils.pyt   <module>   sD   	.)																					&	