ó
ê™xTc           @   s“  d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l Z e j Z d d „ Z	 d e
 f d „  ƒ  YZ d d	 „ Z d d e d d
 d „ Z d „  Z d „  Z d „  Z d „  Z i d d 6d d 6d d 6d d 6d d 6Z d e
 f d „  ƒ  YZ y d e j ƒ  Z Wn e k
 r'd Z n Xd e f d „  ƒ  YZ d „  Z d  e f d! „  ƒ  YZ e a d d" „ Z d# e
 f d$ „  ƒ  YZ d% e
 f d& „  ƒ  YZ e  d' k r�d( „  Z! e! d d d ƒ d3 k sÎt" ‚ t e k sàt" ‚ d, Ge d- d. ƒ GHt e k	 st" ‚ e ƒ  t k st" ‚ e ƒ  j# ƒ  d g d/ Z$ e ƒ  j% ƒ  [$ e ƒ  j# d0 e& ƒ e ƒ  j# ƒ  e' e ƒ  ƒ j( d1 ƒ d k s‡t" ‚ d2 GHn  d S(4   iÿÿÿÿ(   t   division(   t   Auto(   t
   group_argsNi    c         C   s$   t  j |  d ƒ j } | j | j  S(   Ni   (   t   syst	   _getframet   f_codet   co_varnamest   co_argcount(   t   frames_backR   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   varnames   s    t   caller_locationc           B   s   e  Z d  d „ Z d „  Z RS(   i    c         C   s2   t  j | d ƒ } | j j |  _ | j |  _ d  S(   Ni   (   R   R   R   t   co_filenamet	   file_namet   f_linenot   line_number(   t   selfR   t   f(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   __init__   s    c         C   s   d |  j  |  j f S(   Ns   %s(%d)(   R   R   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   __str__   s    (   t   __name__t
   __module__R   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR
      s   c         C   s#   t  d |  d ƒ GHt j j ƒ  d  S(   NR   i   (   R
   R   t   stdoutt   flush(   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   check_point   s    t    c         C   sî   | d  k r t j } n  g  } yz xs t r– |  d  k	 rF | |  k rF Pn  t j | d ƒ } | j | d | | j j | j | j j	 f ƒ | d 7} q$ WWn t
 k
 r« n X| r¿ | j ƒ  n  | d k rÏ | Sx | D] } | | IJqÖ Wd  S(   Ni   s   show_stack(%d): %s(%d) %st   return_lines(   t   NoneR   R   t   TrueR   t   appendR   R   R   t   co_namet
   ValueErrort   reverse(   t   max_frames_backR   R   t   outt   prefixt   linesR   t   line(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt
   show_stack   s&     	$ c           C   s4   t  j j ƒ  t d t  j d d ƒ t  j j ƒ  d  S(   NR!   R   i   (   R   t
   __stdout__R   R%   t
   __stderr__(    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   show_stack_true_stderr1   s    c         C   sE   | d k rA t  j j ƒ  d |  j j |  j f GHt  j j ƒ  n  t S(   NR$   s   %s(%d)(   R   t   stderrR   R   R   R   R   t   print_trace(   t   framet   eventt   arg(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR*   6   s
    c          C   s“   d t  j k r‚ d d l m }  |  ƒ  } t d | ƒ xJ | j ƒ  j ƒ  D]3 } | j d ƒ d k rH | j d ƒ rH d GHd  SqH Wn  t  j	 t
 ƒ d  S(	   Nt   pydociÿÿÿÿ(   t   StringIOR!   s   pydoc.pyi    s    clisJ   libtbx.introspection.start_print_trace(): pydoc.cli() detected: no tracing(   R   t   modulest	   cStringIOR/   R%   t   getvaluet
   splitlinest   findt   endswitht   settraceR*   (   R/   t   sR$   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   start_print_trace=   s    	$c           C   s   t  j d  ƒ d  S(   N(   R   R6   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   stop_print_traceI   s    i   t   KBi   t   MBi   t   GBi   t   TBi   t   PBt   proc_file_readerc           B   s   e  Z d  „  Z RS(   c         C   s»   |  j  d  k r d  Sy |  j  j | ƒ } Wn t k
 r= d  SX|  j  | j d  d ƒ } t | ƒ d k  rm d  St j | d j ƒ  ƒ } y t	 | d ƒ } Wn t k
 r® d  SX| d | S(   Ni   i   i   i   (
   t   proc_statusR   t   indexR   t   splitt   lent   kb_exponentst   gett   uppert   int(   R   t   vm_keyt   it   fldst   exponentt   num(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt	   get_bytesU   s    (   R   R   RM   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR?   S   s   s   /proc/%d/statust   virtual_memory_infoc           B   sŒ   e  Z e Z d  Z d  Z d  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d d e d „ Z d d e d	 „ Z d
 „  Z d „  Z RS(   i    c         C   s:   y t  t ƒ j ƒ  |  _ Wn t k
 r5 d  |  _ n Xd  S(   N(   t   opent   _proc_statust   readR@   t   IOErrorR   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR   r   s    c         C   s@   |  j  d ƒ } | d  k	 r' t t _ n  t t j | ƒ t _ | S(   Ns   VmPeak:(   RM   R   R   RN   t   have_vmpeakt   maxt   max_virtual_memory_size(   R   t   result(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   virtual_memory_peak_sizex   s    c         C   s(   |  j  d ƒ } t t j | ƒ t _ | S(   Ns   VmSize:(   RM   RT   RN   RU   (   R   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   virtual_memory_size€   s    c         C   s(   |  j  d ƒ } t t j | ƒ t _ | S(   Ns   VmRSS:(   RM   RT   RN   t   max_resident_set_size(   R   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   resident_set_size†   s    c         C   s(   |  j  d ƒ } t t j | ƒ t _ | S(   Ns   VmStk:(   RM   RT   RN   t   max_stack_size(   R   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt
   stack_sizeŒ   s    c         C   s>   |  j  d  k	 r: |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  n  d  S(   N(   R@   R   RW   RX   RZ   R\   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt
   update_max’   s
    


R   c         C   sÖ  | d  k r t j } n  d d l m } | |  j ƒ  ƒ } | |  j ƒ  ƒ } | |  j ƒ  ƒ } d t t	 | ƒ t	 | ƒ t	 | ƒ ƒ } | d }	 | d }
 | d } | sé | |	 I| | IJ| |
 I| | IJ| | I| | IJné |  j
 ƒ  t } | | j ƒ } | | j ƒ } | | j ƒ } d t t	 | ƒ t	 | ƒ t	 | ƒ ƒ } | j r`d } n d } | |	 I| | I| I| | IJ| |
 I| | Id I| | IJ| | I| | Id I| | IJd  S(	   Niÿÿÿÿ(   t   size_as_string_with_commass   %%%dss   Virtual memory size:s   Resident set size:  s   Stack size:         s       exact max:s     approx. max:(   R   R   R   t   libtbx.str_utilsR^   RX   RZ   R\   RT   RC   RW   RN   RU   RY   R[   RS   (   R   R!   R"   t   show_maxR^   t   vmst   rsst   stst   fmtt   lvmst   lrsst   lstst   vmit   max_vmst   max_rsst   max_stst   max_fmtt   vms_what_max(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   show™   s4     (



(		$$c         C   s2   |  j  d  k	 r. |  j d | d | d | ƒ n  d  S(   NR!   R"   R`   (   R@   R   Rn   (   R   R!   R"   R`   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   show_if_available¶   s    c         C   s   d S(   Ns   Virtual memorys   Resident sett   Stack(   s   Virtual memorys   Resident setRp   (    (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   current_max_sizes_legendº   s    c         C   s"   t  d |  j d |  j d |  j ƒ S(   Nt   virtual_memoryt   resident_sett   stack(   R   RU   RY   R[   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   current_max_sizes½   s    		N(   R   R   t   FalseRS   RU   RY   R[   R   RW   RX   RZ   R\   R]   R   Rn   Ro   Rq   Ru   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyRN   k   s   							c          C   s  d }  t  j |  ƒ s d  Sd d l m } x× | j d |  d ƒ j D]¼ } | j ƒ  } | j d ƒ sj qC n  | j	 ƒ  } t
 | ƒ d k rŽ qC n  y t | d ƒ } Wn t k
 r¸ qC n X| d	 k rË qC n  t j | d
 j ƒ  ƒ } | d  k rö qC n  | d | SWd  S(   Ns   /usr/sbin/system_profileriÿÿÿÿ(   t   easy_runt   commands    SPHardwareDataTypes   Memory:i   i   i    i   i   (   t   opt   isfileR   t   libtbxRw   t   fully_bufferedt   stdout_linest   stript
   startswithRB   RC   RG   R   RD   RE   RF   (   t   cmdRw   R$   RJ   RL   RK   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   get_mac_os_x_memory_totalÃ   s.    t   machine_memory_infoc           B   s2   e  Z d  „  Z d „  Z d „  Z d d d „ Z RS(   c         C   ss   d  |  _ t |  _ t |  _ t j d ƒ rZ y t d ƒ j ƒ  |  _ Wqo t	 k
 rV qo Xn t
 ƒ  |  _ d  |  _ d  S(   Ns   /proc/meminfo(   R   R@   R   t   _memory_totalt   _memory_freeRy   Rz   RO   RQ   RR   R�   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR   Þ   s    			c         C   s2   |  j  } | t k r. |  j d ƒ } |  _  n  | S(   Ns	   MemTotal:(   Rƒ   R   RM   (   R   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   memory_totalë   s    	c         C   s2   |  j  } | t k r. |  j d ƒ } |  _  n  | S(   Ns   MemFree:(   R„   R   RM   (   R   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   memory_freeñ   s    	R   c         C   sŸ   | d  k r t j } n  d d l m } | |  j ƒ  ƒ } | |  j ƒ  ƒ } d t t | ƒ t | ƒ ƒ } | | d I| | IJ| | d I| | IJd  S(   Niÿÿÿÿ(   R^   s   %%%dss   Memory total: s   Memory free:  (	   R   R   R   R_   R^   R…   R†   RT   RC   (   R   R!   R"   R^   t   mtt   mfRd   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyRn   ÷   s     N(   R   R   R   R…   R†   R   Rn   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR‚   Ü   s   			c         C   sÕ  t  t k rÁd  a  y d d  l } Wn t k
 r5 n+ Xy | j ƒ  } Wn t k
 rY n X| a  t  d  k rº y d d  l } Wn t k
 r� qº X| j j	 j
 ƒ  } | d k rº | a  qº n  t  d  k rud } t j | ƒ rud } xv t | ƒ j ƒ  j ƒ  D]\ } | j d ƒ sqú n  | d j d d ƒ j d d ƒ } | j d	 ƒ sLqú n  | d
 7} qú W| d k rr| a  qrqun  t  d  k r®d } t j | ƒ r®d d d g } d  g t | ƒ } d d l m }	 x¶ |	 j d | d ƒ j D]› } | j ƒ  } x† t | ƒ D]x \ }
 } | j | ƒ ry t | t | ƒ ƒ } Wn t k
 rLqn X| d k ry| |
 d  k ry| | |
 <qyqqWqâWx' | D] } | d  k	 rˆ| a  PqˆqˆWq®n  t  d  k rt j j d ƒ } | d  k	 ry t | ƒ } Wn t k
 rûqX| a  qn  t  d  k rÁd } t j | ƒ r¾d d l m }	 x |	 j d | ƒ j D]e } | j d ƒ rOy  t | j d d
 ƒ d ƒ } Wn t k
 ršqOn X| d k r´| a  Pq´qOqOWq¾qÁn  t  d  k	 rÑt  S|  S(   Niÿÿÿÿi    s   /proc/cpuinfot	   processori	   t    R   s   	t   :i   s   /usr/sbin/system_profilers   Total Number Of Cores: s   Number Of CPUs: s   Number Of Processors: (   Rw   Rx   s    SPHardwareDataTypet   NUMBER_OF_PROCESSORSs
   /sbin/hinvs    Processors(    t   _number_of_processorsR   R   t   multiprocessingt   ImportErrort	   cpu_countt   NotImplementedErrort   boost.pythont   pythont   extt   number_of_processorsRy   Rz   RO   RQ   R3   R   t   replaceRC   R{   Rw   R|   R}   R~   t	   enumerateRG   R   t   ost   environRE   R5   RB   (   t   return_value_if_unknownRŽ   t   nt   boostt   cpuinfoR$   R€   t   keyst   nsRw   RI   t   key(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR•     sž           " 	       t   method_debug_logc           B   s    e  Z d  Z d „  Z d „  Z RS(   sã  For Python 2.4 or greater.  Use an instance of this class as a
  decorator for class methods, and it will print the call signature and
  call location before the method is executed.

  Example:
  debug = libtbx.introspection.method_debug_log()
  class a (object) :
    @debug
    def foo (self, x) :
      print x

  def main () :
    my_object = a()
    a.foo(1)
  main()

  Running this results in the following output when LIBTBX_DEBUG_LOG is set:
a.foo(1) @ test.py(13) main
1
  c         C   s1   t  |  _ t j j d ƒ d  k	 r- t |  _ n  d  S(   Nt   LIBTBX_DEBUG_LOG(   Rv   t   debugR˜   R™   RE   R   R   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR   _  s    	c            s   ‡  ‡ f d †  } | S(   Nc            s0  ˆ j  r t | ƒ } t | ƒ } d j g  | D] } t | ƒ ^ q. ƒ } d j g  | j ƒ  D]" \ } } d | t | ƒ f ^ q\ ƒ }	 g  }
 | d k r© |
 j | ƒ n  |	 d k rÅ |
 j |	 ƒ n  t j d ƒ } d |  j	 j
 ˆ  j
 d j |
 ƒ | j j | j | j j f GHt j j ƒ  n  ˆ  |  | | Ž S(   Ns   , s   %s=%sR   i   s   %s.%s(%s) @ %s(%d) %s(   R£   t   listt   dictt   joint   strt	   iteritemsR   R   R   t	   __class__R   R   R   R   R   R   R   (   t   Ot   argst   kwdst   _argst   _kwdsR-   t   str_argst   kwdt   valt   str_kwdst   call_signaturet   caller(   R   R   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   log_wrappere  s"    	(	5  (    (   R   R   Rµ   (    (   R   R   sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   __call__d  s    (   R   R   t   __doc__R   R¶   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR¡   J  s   	t   current_process_statusc           B   sD   e  Z d  Z i e d 6e d 6e d 6Z d „  Z d „  Z d „  Z RS(   sa  
  An interface to the *NIX utility 'ps' to get info on the current process
  (only tested on MacOS X till further notice, so beware dragons)

  SYNOPSIS:
    ps = current_process_status() # <1>
    .....
    print ps['RSS'] # resident size at the time of <1>
    .....
    ps.refresh() # <2>
    .....
    print ps['%CPU'] # % CPU at the time of <2>
  t   RSSt   VSZs   %CPUc         C   s#   t  t j ƒ  ƒ |  _ |  j ƒ  d  S(   N(   R§   R˜   t   getpidt   idt   refresh(   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR   Œ  s    c         C   s1  d d  l  } | j d d d g d | j d | j ƒ } t g  t | j j ƒ  j ƒ  ƒ D] \ } } | | f ^ qU ƒ } | d } x8 | j D]) } | j ƒ  } | | |  j	 k rŠ PqŠ qŠ Wd  St g  | j
 ƒ  D] \ } }	 | | |	 f ^ qË ƒ |  _ x7 |  j j
 ƒ  D]& \ } }
 |
 |  j | ƒ |  j | <qWd  S(   NiÿÿÿÿR«   s   /bin/pst   cuxR)   R   t   PID(   t
   subprocesst   Popent   STDOUTt   PIPER¥   R—   R   t   readlineRB   R¼   R¨   t   fieldt   conversions(   R   RÀ   t   psRI   RÅ   t   colst   i_pidt   lit   namet   i_colt   conv(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR½   �  s"    		=
 5c         C   s   |  j  | S(   N(   RÅ   (   R   t
   field_name(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   __getitem__£  s    (	   R   R   R·   RG   t   floatRÆ   R   R½   RÏ   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyR¸   x  s   
		t   __main__c         C   s   d } t  ƒ  S(   Ni    (   R	   (   t   at   bt   ct   d(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   exercise_varnames¨  s    RÒ   RÓ   RÔ   s   number of processors:Rš   t   unknowni@B R`   t   introspectiont   OK(   RÒ   RÓ   RÔ   ()   t
   __future__R    R{   R   R   R   R˜   t   pathRy   R	   t   objectR
   R   R   Rv   R%   R(   R*   R8   R9   RD   R?   R»   RP   t   AttributeErrorRN   R�   R‚   R�   R•   R¡   R¸   R   RÖ   t   AssertionErrorRn   t   bufferR]   R   R§   R4   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/introspection.pyt   <module>   sd   	
				

X	$H./	
$