ó
ã™xTc        	   @   sÄ  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 Z d  d l Z d  d l Z y d  d l Z Wn e k
 rÕ d Z n Xd  d l Z e e d	 e j ƒ Z d
 d „ Z d d d „ Z d d „ Z d e f d „  ƒ  YZ e d ƒ Z e d ƒ Z  d d6 d „  ƒ  YZ! d „  Z" e# d „ Z$ d „  Z% d „  Z& d „  Z' d d e! d d „ Z( d d d „ Z) d „  Z* d e! d d  „ Z+ d d! „ Z, d d e! d" d# „ Z- d d e! d$ d% „ Z. d& d' „ Z/ d d d( „ Z0 e# d) „ Z1 d* d+ „ Z2 d, „  Z3 d- d. „ Z4 d/ „  Z5 d0 e f d1 „  ƒ  YZ6 d d d e# d2 „ Z7 d
 e8 d d g  e# e# e# d3 „ Z9 d4 „  Z: e; d5 k rÀe: ƒ  n  d S(7   iÿÿÿÿ(   t   division(   t   option_parser(   t   Sorry(   t   show_string(   t   easy_run(   t   introspectionN(   t   matht   unified_diffi    c         C   s}   d d l  m } | d | d ƒ } t j j | j ƒ } | j ƒ  j d ƒ rZ | d  } n  | d t | j	 ƒ 7} d | |  S(   Niÿÿÿÿ(   t   caller_locationt   frames_backi   s   .pyiýÿÿÿt   _(
   t   libtbx.introspectionR   t   ost   patht   basenamet	   file_namet   lowert   endswitht   strt   line_number(   t   suffixR	   R   t   callert   s(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   compose_tmp_suffix   s     t    t   wc         C   sP   d d  l  } | j d t |  d d ƒd d ƒ \ } } t j | ƒ t | | ƒ S(   NiÿÿÿÿR   R	   i   t   dirt   .(   t   tempfilet   mkstempR   R   t   closet   open(   R   t   modeR   t   fdt   name(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   open_tmp_file   s    	c         C   s.   d d  l  } | j d t |  d d ƒd d ƒ S(   NiÿÿÿÿR   R	   i   R   R   (   R   t   mkdtempR   (   R   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   open_tmp_directory&   s    	t   pickle_detectorc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   d  |  _ d |  _ d  S(   Ni    (   t   Nonet   unpickled_countert   counter(   t   O(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   __init__-   s    	c         C   s   |  j  d 7_  i |  j  d 6S(   Ni   R)   (   R)   (   R*   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   __getstate__0   s    c         C   s2   t  | ƒ d k s t ‚ | d |  _ d |  _ d  S(   Ni   R)   i    (   t   lent   AssertionErrorR(   R)   (   R*   t   state(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   __setstate__3   s    (   t   __name__t
   __module__R+   R,   R0   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyR&   ,   s   		s   Exception expected.s   Exception not expected.t   Defaultc           B   s   e  Z RS(    (   R1   R2   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyR3   ;   s    c         C   s¥   t  j |  ƒ } | j d k r" t St | j ƒ d k rs d | j d k rN t St d |  d j | j ƒ f ƒ ‚ n" t d |  d j | j ƒ f ƒ ‚ d s¡ t	 ‚ d  S(   Ni    t   Usages   Bad stderr output from %s:
%ss   
s,   Bad return code from %s - dumping stdout:
%s(
   R   t   fully_bufferedt   return_codet   TrueR-   t   stderr_linest   stdout_linesR   t   joinR.   (   t   cmdt   result(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt
   test_usage=   s    	c         C   s  | r! t  j  ƒ  } t  j ƒ  } n  t t j _ g  t j d D] } | j ƒ  ^ q; } t	 d d d d ƒ j
 d d d d	 d
 d d d d d d d ƒj
 d d d d d t ƒj
 d d d d d t ƒj
 d d d d d t ƒj d | d d ƒ } | j }	 t d  k s|	 j d k rpxÏt |	 |  | | ƒ D]C }
 |
 GHt j j ƒ  t j d |
 ƒ Ht j j ƒ  t j j ƒ  q&Wnrt j ƒ  } x* t |	 |  | | ƒ D] }
 | j |
 ƒ q’Wg  } t j ƒ  } t j ƒ  } x^ t |	 j ƒ D]M } t j ƒ  } t j | ƒ t j d t | | | | ƒ ƒ } | j  | ƒ q×Wx | D] } | j! ƒ  q/Wd } x– y_ | j" ƒ  } t# | t$ ƒ r¥| d } t j d | IJ| d 7} | |	 j k rªPqªn | GHWqLt% k
 rÞHd GHd GHd  GHd GH| j& ƒ  PqLXqL| rd! | t  j ƒ  t  j  ƒ  | | f GHn  d  S("   Ni   t   usages   run_tests [-j n]t   descriptionsS   Run several threads in parallel, each picking and then running tests one at a time.s   -js	   --threadst   actiont   storet   typet   intt   defaultt   helps   number of threadst   metavart   INTs   -vs	   --verboset
   store_trues   -qs   --quicks   -gs
   --valgrindt   argst	   max_nargsi    t   commandt   targets   
 +++ thread %s +++
s,   ********************************************s,   ** Received Keyboard Interrupt            **s,   ** Waiting for running tests to terminate **s   TIME (%s) (%s) %7.2f %s('   t   timet   asctimeR7   t   libtbxt   envt   full_testingt   syst   argvR   R   t   optiont   Falset   processt   optionst	   threadingR'   t   threadst   iter_tests_cmdt   stdoutt   flushR   t   callt   stderrt   Queuet   putt   Eventt   xrangeR   t   tempnamt   mkdirt   Threadt   make_pick_and_run_testst   appendt   startt   gett
   isinstancet   tuplet   KeyboardInterruptt   set(   t	   build_dirt   dist_dirt   tst_listt   display_timest   t0Rh   t   argRI   t   command_linet   coR;   t	   cmd_queuet   threads_poolt	   log_queuet   interruptedt   it   working_dirt   tt   finished_threadst   logt   msg(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt	   run_testsM   s�    &											

 	
	c            s   ‡  ‡ ‡ ‡ f d †  } | S(   Nc       
      s×   xÐ ˆ j  ƒ  sÒ yŠ ˆ  j d t d d ƒ }  d |  } t j j |  d t d t j j d t j j d ˆ ƒ} | j ƒ  | d	 | j	 j
 ƒ  7} ˆ j | ƒ Wq t j k
 r½ ˆ j d ƒ Pq t k
 rÎ Pq Xq Wd  S(   Nt   blockt   timeoutgš™™™™™É?s   
%s
t   shellR[   R^   t   cwds   
%st   done(   s   done(   t   isSetRi   R7   R   t
   subprocesst   Popent   PIPEt   STDOUTt   waitR[   t   readR`   R_   t   EmptyRl   (   R;   R~   t   proc(   Rv   Ry   Rx   R{   (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   funcœ   s"    
	
(    (   R{   Ry   Rv   Rx   R�   (    (   Rv   Ry   Rx   R{   sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyRf   š   s    c         c   sÐ  xÉ| D]Á} d } t  | ƒ t  g  ƒ k r� |  d  k	 ra |  j ra d d j d g | d ƒ } n/ |  d  k	 r� |  j r� d d j | d ƒ } n  | d } n |  d  k	 r¸ |  j r¸ q n  | j d ƒ rÜ | j d | ƒ } n | j d | ƒ } | j d ƒ d k  s	t ‚ | j d	 ƒ d k  s$t ‚ t	 j
 j | ƒ } d } | j d
 ƒ rv|  d  k	 ri|  j rid } n  | d 7} n1 |  d  k	 r§|  j r§t	 j j d d ƒ d } n  | d	 | d	 7} | | 7} | Vq Wd  S(   NR   t    s	   --Verbosei   i    s   $Bs   $Dt   $t   "s   .pys   libtbx.valgrind s   libtbx.python t   LIBTBX_VALGRINDs   valgrind --tool=memcheck(   RB   R'   t   verboseR:   t   quickt
   startswitht   replacet   findR.   R   R   t   normpathR   t   valgrindt   environRi   (   Ru   Rn   Ro   Rp   t   tstt   cmd_argst   tst_pathR;   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyRZ   °   s6    !		
c      	   C   sÅ  t  |  t ƒ s t  |  t ƒ r( |  | k St |  d ƒ rÀ t |  ƒ t | ƒ k rt t d t |  ƒ t | ƒ f ƒ ‚ n  xE t t |  ƒ ƒ D]1 } t |  | | | | | | | d ƒ s‡ t Sq‡ Wt	 St  |  t
 ƒ } t  | t
 ƒ } | r@| r@t |  j | j | | | | d ƒ st St |  j | j | | | | d ƒ s<t St	 S| r–t |  j | | | | | d ƒ slt St |  j d | | | | d ƒ s’t St	 S| rìt |  | j | | | | d ƒ sÂt St d | j | | | | d ƒ sèt St	 St	 }	 |  | }
 t |
 ƒ | k r\| d  k r#t }	 q\t |  | ƒ | } | |
 | }
 |
 d k r\t }	 q\n  | d  k	 rÁd } |	 s}d } n  | | t |  ƒ | IJ| | t | ƒ | IJ| | j ƒ  IJt	 S|	 S(	   Nt   __len__s0   approx_equal ERROR: len(a1) != len(a2): %d != %ds     s   real s   imag i    R   s    approx_equal ERROR(   Rj   R   t   unicodet   hasattrR-   R.   Rb   t   approx_equal_coreRU   R7   t   complext   realt   imagt   absR'   t   maxt   rstrip(   t   a1t   a2t   epst
   multipliert   outt   prefixRz   t   is_complex_1t   is_complex_2t   okt   dt   amt
   annotation(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyR¢   Ï   sp    
$""
		g�íµ ÷Æ°>g    _ Bc         C   s–   t  |  | | | d  | ƒ } | r’ | d  k	 r’ | t k rF t j } n  | | d I| IJ| | d I| IJt  |  | | | | | ƒ s’ t ‚ n  | S(   Ns   approx_equal eps:s   approx_equal multiplier:(   R¢   R'   R3   RR   R[   R.   (   R©   Rª   R«   R¬   R­   R®   R±   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   approx_equal
  s     $c         C   s   t  |  | | | d d  ƒS(   NR­   (   Rµ   R'   (   R©   Rª   R«   R¬   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   not_approx_equal  s    c         C   sô  t  |  d ƒ rv t |  ƒ t | ƒ k s- t ‚ xB t t |  ƒ ƒ D]. } t |  | | | | | | d ƒ s@ t Sq@ Wt St |  t ƒ rÕ t |  j	 | j	 | | | d ƒ s« t St |  j
 | j
 | | | d ƒ sÑ t St St } |  d k só | d k rt |  | ƒ | k r‹t } q‹nv t t j t |  ƒ ƒ ƒ } t t j t | ƒ ƒ ƒ } t j t | | ƒ ƒ }	 t |  |	 | |	 ƒ | k r‹t } n  | d  k	 rðd }
 | s¬d }
 n  | | t |  ƒ |
 IJ| | t | ƒ |
 IJ| | j ƒ  IJt S| S(   NRŸ   s     s   real s   imag i    R   s    eps_eq ERROR(   R¡   R-   R.   Rb   t   eps_eq_coreRU   R7   Rj   R£   R¤   R¥   R¦   t   roundR   R~   t   expR§   R'   R   R¨   (   R©   Rª   R«   R­   R®   Rz   R±   t   l1t   l2t   mR´   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyR·     s<    $""		c         C   s|   t  |  | | d  | ƒ } | rx | d  k	 rx | t k rC t j } n  | | d I| IJt  |  | | | | ƒ sx t ‚ n  | S(   Ns   eps_eq eps:(   R·   R'   R3   RR   R[   R.   (   R©   Rª   R«   R­   R®   R±   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   eps_eq7  s     !c         C   s   t  |  | | d  ƒ S(   N(   R½   R'   (   R©   Rª   R«   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt
   not_eps_eq?  s    s   INFO LOW VALUE: c      	   C   s  t  |  t t f ƒ r½ |  | | k  r½ | d  k	 r¹ |  | | k  r¹ | d  k	 r¹ | t k re t j } n  t j d d d t	 d | d | ƒ | d | t
 |  ƒ t
 | ƒ t
 | ƒ f IJq¹ n  t	 S| d  k	 r| t k rá t j } n  | d Id t
 |  ƒ t
 | ƒ t
 | ƒ f IJn  t S(	   NR	   i   t   reverseR­   R®   s5   %sis_below_limit(value=%s, limit=%s, info_low_eps=%s)s   ERROR:s*   is_below_limit(value=%s, limit=%s, eps=%s)(   Rj   RC   t   floatR'   R3   RR   R[   R   t
   show_stackR7   R   RU   (   t   valuet   limitR«   t   info_low_epsR­   t   info_prefix(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   is_below_limitB  s$    % 	+ 
%s   INFO HIGH VALUE: c      	   C   s  t  |  t t f ƒ r½ |  | | k r½ | d  k	 r¹ |  | | k r¹ | d  k	 r¹ | t k re t j } n  t j d d d t	 d | d | ƒ | d | t
 |  ƒ t
 | ƒ t
 | ƒ f IJq¹ n  t	 S| d  k	 r| t k rá t j } n  | d Id t
 |  ƒ t
 | ƒ t
 | ƒ f IJn  t S(	   NR	   i   R¿   R­   R®   s6   %sis_above_limit(value=%s, limit=%s, info_high_eps=%s)s   ERROR:s*   is_above_limit(value=%s, limit=%s, eps=%s)(   Rj   RC   RÀ   R'   R3   RR   R[   R   RÁ   R7   R   RU   (   RÂ   RÃ   R«   t   info_high_epsR­   RÅ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   is_above_limitZ  s$    % 	+ 
%i   c   	      C   sÓ   | d k r t  ƒ  ‚ n  |  | k r( t S|  d k | d k k rD t Sd d  l } t |  ƒ } | j | | j | d ƒ ƒ } t | d | ƒ } | d | } | d d | } t | t | ƒ ƒ t | | ƒ k S(   Ni4   g        iÿÿÿÿi   i   (   t
   ValueErrorR7   RU   R   R¦   t   floorR~   RC   (	   t   selft   othert	   precisionR   t   Tt   Npt   significandt   val1t   val2(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   precision_approx_equalr  s     c         C   sx  t  |  t ƒ s% d j |  ƒ d }  n  | d  k rF | d  k sÍ t ‚ n‡ |  j d ƒ } g  }  x\ | D]T } x> | D]6 } | d k  r” | t | ƒ 7} n  |  j | | ƒ qo W|  j d ƒ qb Wd j |  d  ƒ }  |  | k r=|  j d ƒ sù | j d ƒ r|  d 7}  | d 7} n  d j t	 | j d ƒ |  j d ƒ ƒ ƒ GHt
 S| d  k	 rtt | ƒ | k rtd | t | ƒ f GHt
 St S(   Ns   
i   i    s   ...
R   iÿÿÿÿsD   show_diff: expected_number_of_lines != len(a.splitlines()): %d != %d(   Rj   R   R:   R'   R.   t
   splitlinesR-   Rg   R   t   diff_functionR7   RU   (   t   at   bt
   selectionst   expected_number_of_linest   a_linest	   selectionRz   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt	   show_diff†  s2      
)c            s]  t  ˆ t ƒ r ˆ j ƒ  ‰ n  t  | t ƒ r< | j ƒ  } n  t | ƒ d k sT t ‚ ‡  ‡ f d †  } | d ‰  x; t ˆ ƒ D]& \ } } | ˆ  k r} ˆ | ‰ Pq} q} W| ƒ  | d ‰  xo t ˆ ƒ D]Z \ } } | r| j ˆ  ƒ rˆ |  ‰ | d  } PqqÅ | ˆ  k rÅ ˆ | d  ‰ PqÅ qÅ W| ƒ  d j ˆ ƒ d ‰ d j | ƒ d } t ˆ | ƒ S(   Ni   c              s9   d GHd d GHd j  ˆ ƒ GHd d GHt d ˆ  ƒ ‚ d  S(   Ns   block_show_diff() lines:t   -iP   s   
s   Expected line not found: "%s"(   R:   R.   (    (   t   elinet   lines(    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   raise_not_found¨  s
    		i    iÿÿÿÿs   
(	   Rj   R   RÔ   R-   R.   t	   enumerateR–   R:   RÜ   (   Rß   t   expectedt   last_startswithRà   Rz   t   line(    (   RÞ   Rß   sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   block_show_diff¢  s4    




s   
...
c         C   s]   t  | t ƒ s t ‚ t } | j | ƒ } x, | D]$ } t d |  d | ƒ r1 t } q1 q1 W| S(   NRß   Râ   (   Rj   R   R.   RU   t   splitRå   R7   (   Rß   Râ   t   block_speratorR<   t   expected_blocks(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   blocks_show_diffÆ  s    c         C   sÅ   t  |  t ƒ r |  j ƒ  }  n  t  | t ƒ r< | j ƒ  } n  t | ƒ d k sT t ‚ | d k  r� t |  ƒ | t | ƒ d } n  d j |  | | t | ƒ !ƒ d }  d j | ƒ d } t |  | ƒ S(   Ni    i   s   
(   Rj   R   RÔ   R-   R.   R:   RÜ   (   Rß   t   anchor_indexRâ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   anchored_block_show_diffÏ  s    !$s   contains_substring() c         C   sw   t  |  t ƒ s t ‚ t  | t ƒ s* t ‚ |  j | ƒ d k  rs d | GHd „  } | |  ƒ d GHd GH| | ƒ t St S(   Ni    s
   %sFAILURE:c         S   sO   d d GH|  j  d ƒ s* |  j  t j ƒ r= t j j |  ƒ n |  GHd d GHd  S(   Nt   viO   s   
t   ^(   R   R   t   linesepRR   R[   t   write(   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   showã  s
    	!s     ACTUAL ----^s   EXPECTED ----v(   Rj   R   R.   R˜   RU   R7   (   t   actualRâ   t   failure_prefixRð   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   contains_substringÛ  s    		

c         C   s   t  d |  d | d d ƒ S(   NRñ   Râ   Rò   s   contains_lines() (   Ró   (   Rß   Râ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   contains_linesñ  s    t   RunCommandErrorc           B   s   e  Z RS(    (   R1   R2   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyRõ   õ  s    c            sÉ   ˆ ˆ  g j  d  ƒ d k s! t ‚ ˆ d  k rH t ˆ  ƒ j ƒ  j ƒ  ‰ n  ‡  ‡ ‡ f d †  } t } xB ˆ D]: } | d k rŒ | d d ƒ n  | j d ƒ rj t } qj qj W| rÅ | rÅ | d d ƒ n  d  S(   Ni   c            sd   ˆ r ˆ GHHn  d j  ˆ ƒ GH|  d } ˆ  d  k r@ | d 7} n | d t ˆ  ƒ 7} t | ƒ ‚ d  S(   Ns   
s    detected in outputR   s   : (   R:   R'   R   Rõ   (   t   detectedR   (   R   Rß   t   show_command_if_error(    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   show_and_raiseÿ  s    
s"   Traceback (most recent call last):Rö   t	   Tracebacks   Sorry:s   "Sorry:"(	   t   countR'   R.   R   RŒ   RÔ   RU   R–   R7   (   Rß   R   R÷   t   sorry_expectedRø   t
   have_sorryRä   (    (   R   Rß   R÷   sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   _check_command_output÷  s    !c	         C   sà  | d k s t  ‚ | d k r- |  GHHd }	 n |  }	 | | g | }
 xm |
 D]e } | d k rb qJ n  t j j | ƒ r„ t j | ƒ n  t j j | ƒ rJ t d t | ƒ ƒ ‚ qJ qJ W| rRt	 j
 j ƒ  t	 j j ƒ  t j d |  d | ƒ } t | j ƒ d k r3| d k r|  GHHn  d j | j ƒ GH| j ƒ  n  t d | j d |	 d | ƒ n t j d |  ƒ d } xR | | g D]D } | d k sut j j | ƒ r qun  t d	 | d |	 d | ƒ quWxK |
 D]C } | d k rÜqÄn  t j j | ƒ sÄt d
 t | ƒ ƒ ‚ qÄqÄW| d k r8| d k	 r8d j | j ƒ GHHn  | rÏ| d k	 rÏ| d k	 rÏ| d k r�d t | ƒ t | ƒ f GHHn  t t | ƒ j ƒ  t | ƒ j ƒ  ƒ rÏt j d d d t d d ƒ d GHqÏn  t	 j
 j ƒ  | S(   sY  This function starts another process to run command, with some
pre-call and post-call processing.
Before running command, the expected output files are removed:

  log_file_name
  stdout_file_name
  result_file_names

After command is finished, log_file_name and stdout_file_name are scanned
for Traceback and Sorry. An exception is raised if there are any
matches. sorry_expected=True suppresses the scanning for Sorry.

With buffered=True easy_run.fully_buffered() is used. If there
is any output to stderr of the child process, an exception is
raised. The run_command() return value is the result of the
easy_run.fully_buffered() call.

With buffered=False easy_run.call() is used. I.e. stdout and stderr
of the command are connected to stdout and stderr of the parent
process. stderr is not checked. The run_command() return value is None.

It is generally best to use buffered=True, and even better not to
use this function at all if command is another Python script. It
is better to organize the command script such that it can be called
directly from within the same Python process running the unit tests.
i    s   Unable to remove file: %sRK   t   join_stdout_stderrs   
Rß   R÷   Rû   R   s   Missing output file: %si   s
   diff %s %sR	   R¿   R®   s   INFO_LOG_STDOUT_DIFFERENCE: t   ERROR_LOG_STDOUT_DIFFERENCEN(   R.   R'   R   R   t   isfilet   removet   existsRõ   R   RR   R[   R\   R^   R   R5   R-   R8   R:   R9   t   raise_if_errorsRý   R]   RÜ   R   RŒ   R   RÁ   R7   (   RK   R”   t   bufferedt   log_file_namet   stdout_file_namet   result_file_namest   show_diff_log_stdoutRû   Rþ   R÷   t   all_file_namesR   t
   cmd_result(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   run_command  s|    %	  			
  '	c    	      C   s³  d d l  m }  t d d ƒ s% t ‚ |  ƒ  } t d d d | ƒsJ t ‚ t | j ƒ  j d d ƒ d ƒ sr t ‚ |  ƒ  } t d d	 d | ƒs— t ‚ t | j ƒ  j d d ƒ d
 ƒ s¿ t ‚ |  ƒ  } t d d- d | ƒsä t ‚ t d d. ƒ sù t ‚ |  ƒ  } t d d d | ƒst ‚ t d d ƒ s3t ‚ |  ƒ  } t d d g d d g g d d g d d g g d | d d ƒs‚t ‚ t | j ƒ  j d d ƒ d ƒ sªt ‚ t d d ƒ s¿t ‚ |  ƒ  } t d d d | ƒsät ‚ t | j ƒ  j d d ƒ d ƒ st ‚ |  ƒ  } t d d	 d | ƒs1t ‚ t | j ƒ  j d d ƒ d ƒ sYt ‚ |  ƒ  } t d d/ d | ƒs~t ‚ t d d0 ƒ s“t ‚ |  ƒ  } t d d d | ƒs¸t ‚ t d d ƒ sÍt ‚ |  ƒ  } t d d g d d g g d d g d d g g d | d d ƒst ‚ t | j ƒ  j d d ƒ d ƒ sDt ‚ t d d d d d d	 ƒ set ‚ |  ƒ  } t d d d d d d	 d d d | ƒ s›t ‚ t | j ƒ  d d d g g d d ƒsÉt ‚ |  ƒ  } t d d d d d d	 d | ƒ sút ‚ t | j ƒ  d  ƒ st ‚ |  ƒ  } t d d  d d d d d | ƒ sGt ‚ t d d  d d! d d d | ƒ sot ‚ t | j ƒ  d" ƒ s‹t ‚ t
 d d d d d d	 ƒ s¬t ‚ |  ƒ  } t
 d d d d d d	 d# d d | ƒ sât ‚ t | j ƒ  d$ d d g g d d ƒst ‚ |  ƒ  } t
 d d d d d d	 d | ƒ sAt ‚ t | j ƒ  d% ƒ s]t ‚ |  ƒ  } t
 d d  d d! d d d | ƒ sŽt ‚ t
 d d  d d d d d | ƒ s¶t ‚ t | j ƒ  d& ƒ sÒt ‚ d d  l } d d  l } x{| | g D]m} t ƒ  } | j d  k st ‚ | j d k s0t ‚ | j | d ƒ } | j d  k sWt ‚ | j d k slt ‚ | j | ƒ } | j d k s�t ‚ | j d k s¥t ‚ | j | d ƒ | j d	 k sÊt ‚ | j d k sßt ‚ | j | d ƒ | j d k st ‚ | j | d ƒ } | j d	 k s+t ‚ | j | ƒ } | j d	 k sOt ‚ | j d k s÷t ‚ q÷Wt d' d( d) d* ƒt k s‰t ‚ t d' d( d) d+ ƒt k sªt ‚ d, GHd  S(1   Niÿÿÿÿ(   t   StringIOi   i    R­   s   1e-006s   1e-06sj   approx_equal eps: 1e-06
approx_equal multiplier: 10000000000.0
1 approx_equal ERROR
0 approx_equal ERROR

i   sj   approx_equal eps: 1e-06
approx_equal multiplier: 10000000000.0
1 approx_equal ERROR
2 approx_equal ERROR

gñhãˆµøä>g�íµ ÷Æ°>y               @i   y               ÀR®   s   $%sõ   $%approx_equal eps: 1e-06
$%approx_equal multiplier: 10000000000.0
$%    0
$%    0
$%
$%    1
$%    1
$%
$%    real 0.0
$%    real 0.0
$%    real
$%    imag 2.0 approx_equal ERROR
$%    imag -2.0 approx_equal ERROR
$%    imag
$%    3
$%    3
$%
s1   eps_eq eps: 1e-06
1 eps_eq ERROR
0 eps_eq ERROR

s1   eps_eq eps: 1e-06
1 eps_eq ERROR
2 eps_eq ERROR

sº   $%eps_eq eps: 1e-06
$%    0
$%    0
$%
$%    1
$%    1
$%
$%    real 0.0
$%    real 0.0
$%    real
$%    imag 2.0 eps_eq ERROR
$%    imag -2.0 eps_eq ERROR
$%    imag
$%    3
$%    3
$%
RÂ   i   RÃ   i
   R«   RÄ   sB   INFO LOW VALUE: is_below_limit(value=5, limit=10, info_low_eps=1)
RØ   RÙ   i   s1   ERROR: is_below_limit(value=15, limit=10, eps=2)
iýÿÿÿse   ERROR: is_below_limit(value=None, limit=3, eps=1)
ERROR: is_below_limit(value=None, limit=-3, eps=1)
RÇ   sD   INFO HIGH VALUE: is_above_limit(value=10, limit=5, info_high_eps=1)
s1   ERROR: is_above_limit(value=10, limit=15, eps=2)
se   ERROR: is_above_limit(value=None, limit=-3, eps=1)
ERROR: is_above_limit(value=None, limit=3, eps=1)
gƒ¥º€—™é?gõiý¡™é?RÍ   i   i   t   OKgrÄZ|
 ð?gzo ð?grÄZ|
 ð?gzo ð?(   t	   cStringIOR  Rµ   R.   RÜ   t   getvalueR—   R½   RÆ   R'   RÈ   t   picklet   cPickleR&   R(   R)   t   dumpst   loadsRÓ   R7   RU   (	   R  R­   R  R  t   pR²   R   t   lt   k(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   exerciseu  s¶    					F					F!	-"	(	((!	-"	(	((	!!t   __main__(    (<   t
   __future__R    t   libtbx.option_parserR   t   libtbx.utilsR   t   libtbx.str_utilsR   RO   R   R   t   libtbx.load_envt   difflibt   stdlibR   RR   R   RM   RX   t   ImportErrorR'   R_   t   getattrt   ndiffRÕ   R   R#   R%   t   objectR&   t   RuntimeErrort   Exception_expectedt   Exception_not_expectedR3   R=   RU   R€   Rf   RZ   R¢   Rµ   R¶   R·   R½   R¾   RÆ   RÈ   RÓ   RÜ   Rå   Ré   Rë   Ró   Rô   Rõ   Rý   R7   R  R  R1   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/test_utils/__init__.pyt   <module>   s€   
	M			;		!$			Y	š