ó
ì™xTc           @   s«   d  Z  d d l m Z d d l Z d d l Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z	 e
 d	 k r§ e ƒ  j d
 d d e ƒ j ƒ  \ Z Z d Ge Ge GHd GHn  d S(   s%   Portable Batch System (PBS) utilitiesiÿÿÿÿ(   t   divisionNc         C   s   t  t j j |  d ƒ ƒ S(   Nt   None(   t   evalt   ost   environt   get(   t   variable_name(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   eval_env   s    c         C   s#   |  d  k r t d | ƒ ‚ n  d  S(   Ns-   Required environment variable not defined: %s(   R   t   RuntimeError(   t   valueR   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   raise_if_none	   s    t
   chunk_infoc           B   s5   e  Z d  „  Z d d e d „ Z d „  Z d „  Z RS(   c         C   sO   t  d ƒ |  _ t  d ƒ |  _ t  d ƒ |  _ t  d ƒ |  _ t  d ƒ |  _ d  S(   Nt   MY_PBS_ARRAY_SIZEt   MY_PBS_ARRAYID_OFFSETt   PBS_ARRAYIDt   OMPI_MCA_ns_nds_num_procst   OMPI_MCA_ns_nds_vpid(   R   t   pbs_array_sizet   pbs_arrayid_offsett   pbs_arrayidt   mpi_num_procst   mpi_vpid(   t   O(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_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  |  j d  k	 sº | rÔ | | d I|  j IJn  |  j d  k	 sé | r| | d I|  j IJn  |  S(   Ns   MY_PBS_ARRAY_SIZE =s   MY_PBS_ARRAYID_OFFSET =s   PBS_ARRAYID =s   OMPI_MCA_ns_nds_num_procs =s   OMPI_MCA_ns_nds_vpid =(   R   t   syst   stdoutR   R   R   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/pbs_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/pbs_utils.pyt
   have_array%   s    c         C   sÊ   |  j  ƒ  s d St |  j d ƒ t |  j d ƒ |  j d  k rn |  j d  k rn |  j } |  j d |  j } nR t |  j d ƒ t |  j d ƒ |  j |  j } |  j d |  j |  j |  j } | | f S(   Ni   i    R   R   R   R   (   i   i    (   R   R
   R   R   R   R   R   R   (   R   t   nt   i(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   as_n_i_pair(   s     	"N(   t   __name__t
   __module__R   R   t   FalseR   R   R"   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyR      s   		c          C   s}  d d l  m }  d d l m } d d l m } | j d d ƒ j ƒ  j } g  } t	 | ƒ d k rg | S| j
 d j | ƒ ƒ } | j d	 ƒ } d
 „  } xß | D]× } | | d ƒ }	 | | d ƒ }
 | | d ƒ j d ƒ d } | | d ƒ } | | d ƒ } | | d ƒ } | | d ƒ } | | d ƒ } | j |  d |	 d | d |
 d | d | d | d | d | d d d d ƒ 
ƒ qž W| S(   Niÿÿÿÿ(   t   qstat_items(   t   easy_run(   t   minidomt   commands   qstat -xi    s   
t   Jobc         S   s9   |  j  | ƒ d j d }  |  j |  j k s2 t ‚ |  j S(   Ni    (   t   getElementsByTagNamet
   childNodest   nodeTypet	   TEXT_NODEt   AssertionErrort   data(   t   nodet   tag_name(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   get_tag_contentB   s    t   Job_Idt   Job_Namet	   Job_Ownert   @t	   job_statet   Priorityt
   start_timet   queuet   nodectt   job_idt   priort   namet   usert   statet   submitt   slotst
   ja_task_idR   t   qtypet   pbs(   t%   libtbx.queuing_system_utils.sge_utilsR&   t   libtbxR'   t   xml.domR(   t   fully_bufferedt   raise_if_errorst   stdout_linest   lent   parseStringt   joinR+   t   splitt   append(   R&   R'   R(   t	   qstat_outt   resultt   xmlt   jobsR3   t   jobt   idR?   R@   RA   R>   RB   R;   R<   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   qstat_parse7   s@    		t   __main__R   s   *** R   s   n,i:t   OK(   t   __doc__t
   __future__R    R   R   R   R
   t   objectR   RX   R#   R   t   TrueR"   R    R!   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/pbs_utils.pyt   <module>   s   		)	%'