ó
ë™xTc           @   sé   d  Z  d d l m Z d d l Z d d l Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ	 d	 „  Z
 d
 e	 f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e d „ Z d d d „ Z e d k rå e ƒ  j d d d e ƒ d GHn  d S(   s   Sun Grid Engine utilitiesiÿÿÿÿ(   t   divisionNc         C   s&   |  d  k s |  d k r d  St |  ƒ S(   Nt	   undefined(   t   Nonet   int(   t   v(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   int_or_none   s     c           C   s   t  t j j d ƒ ƒ S(   Nt   JOB_ID(   R   t   ost   environt   get(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   job_id
   s    c           C   s   t  j j d ƒ S(   Nt   SGE_ARCH(   R   R   R	   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   arch   s    t	   task_infoc           B   s>   e  Z d  „  Z d d e d „ Z d „  Z d „  Z d „  Z RS(   c         C   s‚   t  t j j d ƒ ƒ |  _ t  t j j d ƒ ƒ |  _ t  t j j d ƒ ƒ |  _ |  j |  j |  j g j d  ƒ d k s~ t	 ‚ d  S(   Nt   SGE_TASK_FIRSTt   SGE_TASK_LASTt   SGE_TASK_IDi    i   (   i    i   (
   R   R   R   R	   t   firstt   lastt   idt   countR   t   AssertionError(   t   self(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   __init__   s    t    c         C   s©   | d  k r t j } n  |  j d  k	 s- | rG | | d I|  j IJn  |  j d  k	 s\ | rv | | d I|  j IJn  |  j d  k	 s‹ | r¥ | | d I|  j IJn  |  S(   Ns   SGE_TASK_FIRST =s   SGE_TASK_LAST =s   SGE_TASK_ID =(   R   t   syst   stdoutR   R   R   (   R   t   outt   prefixt   even_if_none(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   show   s     c         C   s   |  j  d  k	 S(   N(   R   R   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt
   have_array"   s    c         C   s9   |  j  ƒ  s d S|  j d k s% t ‚ |  j |  j d f S(   Ni   i    (   i   i    (   R   R   R   R   R   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   as_n_i_pair%   s     c         C   s   t  |  j ƒ  Œ  S(   N(   t   skip_loop_iterationR    (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR!   *   s    N(	   t   __name__t
   __module__R   R   t   FalseR   R   R    R!   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR      s
   	
		c         c   s0   d } x# t  r+ | |  | k V| d 7} q	 Wd  S(   Ni    i   (   t   True(   t   nt   it   j(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR!   -   s    	t   infoc           B   s#   e  Z d  „  Z d d e d „ Z RS(   c         C   s)   t  j |  ƒ t ƒ  |  _ t ƒ  |  _ d  S(   N(   R   R   R
   R   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR   5   s    R   c         C   s™   | d  k r t j } n  |  j d  k	 s- | rG | | d I|  j IJn  |  j d  k	 s\ | rv | | d I|  j IJn  t j |  d | d | d | ƒd  S(   Ns   JOB_ID =s
   SGE_ARCH =R   R   R   (   R   R   R   R
   R   R   R   (   R   R   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR   :   s     N(   R"   R#   R   R   R$   R   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR)   3   s   	t   qstat_itemsc           B   s8   e  Z d  d „ Z d „  Z d „  Z d „  Z d „  Z RS(   t   sgec         C   s^   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _ |
 |  _	 d  S(   N(
   R
   t   priort   namet   usert   statet   submitt   queuet   slotst
   ja_task_idt   qtype(   R   R
   R,   R-   R.   R/   R0   R1   R2   R3   R4   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR   D   s    									c   	      C   s}  |  j  } t | ƒ d k r d S| j d ƒ } | j d ƒ } | j d ƒ } | d k rÄ | d k  sj t ‚ | d k  s| t ‚ | j d ƒ } x, | D]$ } t t | ƒ ƒ | k s’ t ‚ q’ Wt | ƒ S| d k  r| d k  sâ t ‚ t t | ƒ ƒ | k s t ‚ d S| d k st ‚ | | k s(t ‚ t | |  ƒ } t | | d | !ƒ } t | | d ƒ } t t | | d | ƒ ƒ S(   Ni    i   t   -t   :t   ,(   R3   t   lent   findR   t   splitt   strR   t   xrange(	   R   R3   t   mt   ct   at   fldst   ft   lt   s(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   countsQ   s.    	 "
c         C   s~   |  j  } t | ƒ d k r2 d |  j | |  j f S| j d ƒ d k rK d  S| j d ƒ d k rd d  Sd |  j | |  j | f S(   Ni    s   %s.%s%sR5   R6   s
   %s.%s%s.%s(   R3   R8   R-   R
   R9   R   (   R   t   oeR3   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   oe_namei   s    	  c         C   s   |  j  d d ƒ S(   NRE   t   o(   RF   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   o_nameq   s    c         C   s   |  j  d d ƒ S(   NRE   t   e(   RF   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   e_namet   s    (   R"   R#   R   RD   RF   RH   RJ   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyR*   B   s
   			c          C   s_  d d l  m }  |  j d d ƒ j ƒ  j } g  } t | ƒ d k rG | St | ƒ } y | j ƒ  } Wn t k
 r| d } n Xd } d j	 | j
 ƒ  ƒ | k r± t d	 | ƒ ‚ n  | j ƒ  } t | j ƒ  j d
 d ƒ ƒ d k rô t d | ƒ ‚ n  d } | j d ƒ d } | j d ƒ d }	 | j d ƒ d }
 | j d ƒ d } | j d ƒ d } | j d ƒ d } | j d ƒ d } | j d ƒ d } xÆ | D]¾ } | j t d | | | !j ƒ  d | | |	 !j ƒ  d | |	 |
 !j ƒ  d | |
 | !j ƒ  d | | | !j ƒ  d | | | !j ƒ  d | | | !j ƒ  d | | | !j ƒ  d | | j ƒ  ƒ 	ƒ q™W| S(   Niÿÿÿÿ(   t   easy_runt   commandt   qstati    R   sC   job-ID prior name user state submit/start at queue slots ja-task-IDt    s   Unexpected qstat header: %sR5   s*   Unexpected qstat header seperator line: %ss    prior i   s    name s    user s    state s    submit/start at s    queue s    slots s    ja-task-IDR
   R,   R-   R.   R/   R0   R1   R2   R3   (   t   libtbxRK   t   fully_bufferedt   raise_if_errorst   stdout_linesR8   t   itert   nextt   StopIterationt   joinR:   t   RuntimeErrort   stript   replacet   indext   appendR*   (   RK   t	   qstat_outt   resultRM   t   headert   expected_headert   linet   i_job_idt   i_priort   i_namet   i_usert   i_statet   i_submitt   i_queuet   i_slotst   i_ja_task_id(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   qstat_parsew   sL    	  
$c   
      C   sÒ   d d l  m } | sc t j j |  ƒ d d } t j j |  ƒ d d } d | | | |  f } n d | |  f } | j d | ƒ j ƒ  j } d  } x7 | D]/ }	 |	 j	 d	 ƒ r› t
 |	 j ƒ  d
 ƒ } Pq› q› W| S(   Niÿÿÿÿ(   RK   i    s   _out.txts   _err.txts   qsub -b y -o "%s" -e "%s" %s %ss   qsub -b y %s %sRL   s   Your jobi   (   RO   RK   R   t   patht   splitextRP   RQ   RR   R   t
   startswithR   R:   (
   t	   file_namet	   qsub_argst   use_default_output_namesRK   t   out_filet   err_filet   cmdt   qsub_outR
   R`   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   qsubž   s    		c         C   sß   |  d  k s | d  k s t ‚ |  d  k	 s? t | t ƒ s? t ‚ d d l m } |  d  k	 rj t |  ƒ } n d j | ƒ } | j d d | ƒ j	 ƒ  j
 } d j | ƒ GHx2 | D]* } d | k r­ t d j | ƒ ƒ ‚ q­ q­ Wt S(   Niÿÿÿÿ(   RK   RN   RL   s   qdel %ss   
t   denied(   R   R   t
   isinstancet   listRO   RK   R;   RV   RP   RQ   RR   RW   R%   (   R
   t   job_idsRK   t   argst   qdel_outR`   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   qdel°   s    !	t   __main__R   s   *** R   t   OK(   t   __doc__t
   __future__R    R   R   R   R
   R   t   objectR   R!   R)   R*   Rj   R$   Ru   R   R|   R"   R   R%   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/sge_utils.pyt   <module>   s   				5	'