ó
Ý™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 d  d l Td „  Z	 e
 Z d e j k sv t ‚ d e f d	 „  ƒ  YZ
 e
 Z d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ e Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   Sorry(   t   chunk_managerN(   t   *c         C   sL   | j  ƒ  j ƒ  } | d
 k r" t S| d k r2 t St d	 | | f ƒ ‚ d  S(   Nt   falset   not   offt   0t   truet   yest   ont   1s!   option %s: invalid bool value: %r(   R   R   R   R   (   R   s   yesR
   R   (   t   stript   lowert   Falset   Truet   OptionValueError(   t   optiont   optt   valuet   v(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt
   check_bool	   s      t   boolt   Optionc           B   s1   e  Z e j d Z e j e j ƒ Z e e d  <RS(   R   (   s   bool(   t   __name__t
   __module__R   t   TYPESt   copyt   TYPE_CHECKERR   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR      s   c         C   sx   d d l  m } d d  l } |  GHy | j d |  ƒ Wn< t j j ƒ  t j d |  IJ| j ƒ  t j j ƒ  n Xd  S(   Niÿÿÿÿ(   t   easy_runt   commands   CAUGHT EXCEPTION: run_multi(%s)(	   t   libtbxR   t	   tracebackt   callt   syst   stdoutt   flusht   stderrt	   print_exc(   t   cmdR   R    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt	   run_multi   s    
t   processed_optionsc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sO   | |  _  | |  _ | |  _ | |  _ | j |  _ | j |  _ | j ƒ  |  _ d  S(   N(   t   parsert   options_and_argst   optionst   argst   expert_levelt   attributes_levelR   t   chunk(   t   selfR*   R+   R,   R-   t   show_defaults_callbackt   chunk_callback(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   __init__(   s    				c   	   	   C   s&  t  | t ƒ s t ‚ |  j j } | d  k	 r"| d k r"|  j j d k rd d l m	 } g  } xr t
 | ƒ D]d } | |  j d | | f g } d j g  | D] } d | d | ƒ d ^ qŸ ƒ } | j | ƒ qn Wd d l m } | j d	 | d
 t d | d d ƒ t S|  j j d t ƒ n  t S(   Ni   iÿÿÿÿ(   t   escape_sh_double_quoteds   --chunk=%d,%dt    t   "t   s(   t   easy_mpt	   processest   funcR-   t	   chunksizet
   have_array(   t
   isinstancet   listt   AssertionErrorR,   t   max_proct   NoneR0   t   nt   libtbx.utilsR5   t   xrangeR+   t   joint   appendR   R9   t   pool_mapR(   R   t    redirect_chunk_stdout_and_stderrR   (	   R1   t   command_callRC   R5   t   cmdst   iR'   t   argR9   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt(   run_multiprocessing_chunks_if_applicable3   s     	*"(   R   R   R4   RN   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR)   &   s   	t   option_parserc           B   s†   e  Z e Z d
 d
 d
 d  „ Z d „  Z d „  Z d
 d „ Z d
 d „ Z	 d „  Z
 e d „ Z d „  Z d „  Z d
 d
 d
 d
 d	 „ Z RS(   c         C   sG   t  j |  d | d | ƒ| |  _ t ƒ  |  _ t ƒ  |  _ t |  _ d  S(   Nt   usaget   description(   t   OptionParserR4   t	   more_helpR2   R3   R   t   multiprocessing_is_enabled(   R1   RP   RQ   RS   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR4   K   s
    	c         K   s#   | d  k	 r | d |  | � n  |  S(   NRO   (   RB   (   R1   t   callablet   kw(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt    call_with_self_as_first_argumentR   s    c         O   s   |  j  t | | Ž  ƒ |  S(   N(   t
   add_optiont   make_option(   R1   R-   RV   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR   W   s    c         C   sÛ   | d  k r |  j } n  g  } |  j rA | j |  j ƒ  d ƒ n  | j |  j | ƒ ƒ |  j r— | j d ƒ | j |  j | ƒ d ƒ | j d ƒ n  |  j d  k	 rÎ x% |  j D] } | j | d ƒ q° Wn  d j	 | ƒ S(   Ns   
t    (
   RB   t	   formatterRP   RG   t	   get_usaget   format_option_helpRQ   t   format_descriptionRS   RF   (   R1   R[   t   resultt   line(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   format_help[   s    		c         C   s/   | d  k r t j } n  | j |  j ƒ  ƒ d  S(   N(   RB   R"   R#   t   writeRa   (   R1   t   f(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt	   show_helpk   s     c         C   sG   |  j  t d  d d d d d d |  j d d d d	 ƒƒ t |  j _ |  S(
   Ns   --show_defaultst   actiont   callbackt   typet   stringt   helpsº   Print parameters visible at the given expert level (integer value or "all") and exit. Optionally, append .help, .more, or .all to the expert level, for example:
 --show-defaults=all.helpt   metavart   EXPERT_LEVEL(   RX   RY   RB   R2   R   t
   is_enabled(   R1   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   enable_show_defaultso   s    	
c         C   sS   |  j  t d  d d d d d d |  j d d d d	 ƒƒ t |  j _ | |  j _ |  S(
   Ns   --chunkRe   Rf   Rg   Rh   Ri   sA   Number of chunks for parallel execution and index for one processRj   s   n,i(   RX   RY   RB   R3   R   Rl   t   easy_all(   R1   Rn   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   enable_chunk|   s    	
c         C   sc   |  j  t d  d d d d t d d ƒƒ |  j  t d  d d d d d	 d
 d d d ƒƒ t |  _ |  S(   Ns   --multiprocessingRe   t
   store_truet   defaultRi   sV   Use multiple processes on local machine (all CPUs unless --max-proc is also specified)s
   --max_proct   stores,   Maximum number of processes on local machineRg   t   intRj   t   INT(   RX   RY   RB   R   R   RT   (   R1   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   enable_multiprocessing‡   s    

	c      
   C   s,   |  j  t d  d d d d t d d ƒƒ |  S(   Ns	   --dry_runRe   Rp   Rq   Ri   s@   Perform program initialization and exit (for debugging purposes)(   RX   RY   RB   R   (   R1   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   enable_dry_run•   s
    
c      	   C   sÔ  |  j  j rJ | d  k	 rJ t | ƒ d k rJ | d d k rJ | d g } n  | d  k st | d  k rn | d  k st t ‚ | } |  j | ƒ \ } } | d  k r¤ | } n  | d  k	 rt | ƒ | k  rt | ƒ d k rî |  j ƒ  t j d ƒ n  |  j	 d | t | ƒ f ƒ qn  | d  k r&| } n  | d  k	 rgt | ƒ | k rg|  j	 d | t | ƒ f ƒ qgn  |  j
 r¬| j r¬| j d  k r¬d d  l } | j j ƒ  | _ q¬n  |  j |  | | | d |  j  d	 |  j ƒS(
   Ni    iÿÿÿÿs   --show_defaultsR   i   s6   Not enough arguments (at least %d required, %d given).s2   Too many arguments (at most %d allowed, %d given).R2   R3   (   R2   Rl   RB   t   lenR@   t
   parse_argsRd   R"   t   exitt   errorRT   t   multiprocessingRA   t   libtbx.introspectiont   introspectiont   number_of_processorst   processed_options_typeR3   (   R1   R-   t   nargst	   min_nargst	   max_nargsR+   R,   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   processœ   s>    * 	
	 				N(   R   R   R)   R   RB   R4   RW   R   Ra   Rd   Rm   R   Ro   Ru   Rv   Rƒ   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyRO   G   s   					R2   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   t  |  _ d  |  _ d |  _ d  S(   Ni    (   R   Rl   RB   R.   R/   (   R1   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR4   ¿   s    		c         C   s   t  d | ƒ ‚ d  S(   Ns  Invalid option value: --show-defaults="%s"
  Please specify an integer value or the word "all"
  Examples:
    --show_defaults=0   # novice
    --show_defaults=1   # slightly advanced
    --show_defaults=2   # more advanced
    etc.
    --show_defaults=all # everything
  Optionally, append
    .help   to display the parameter help, or
    .more   to display all parameter attributes which are not None
    .all    to display all parameter attributes
  Examples:
    --show_defaults=all.help
    --show_defaults=all.all(   R   (   R1   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   raise_sorryÄ   s    c         C   s*  | j  ƒ  j ƒ  j d ƒ } d t | ƒ k o8 d k n rP |  j d | ƒ n  | d d k rl d |  _ nA y t | d ƒ } Wn! t k
 r£ |  j d | ƒ n X| |  _ t | ƒ d k r&| d d k rÛ d |  _ q&| d d	 k r÷ d |  _ q&| d d k rd
 |  _ q&|  j d | ƒ n  d  S(   Nt   .i   i   R   i    t   alliÿÿÿÿRi   t   morei   (	   R   R   t   splitRw   R„   R.   Rs   t
   ValueErrorR/   (   R1   R   R   R   R*   t   fldsR.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   __call__Ö   s$    "   	(   R   R   R4   R„   R‹   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR2   ½   s   		R3   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s(   t  |  _ t  |  _ d |  _ d |  _ d  S(   Ni   i    (   R   Rl   Rn   RC   RL   (   R1   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR4   ë   s    			c         C   sù   | d k s t  ‚ y8 g  | j d ƒ D] } t | ƒ ^ q% \ |  _ |  _ Wn  t k
 rl t d | ƒ ‚ n X|  j d k  r• t d |  j | ƒ ‚ n  |  j d k  r½ t d |  j | ƒ ‚ n  |  j |  j k  rõ t d d	 |  j |  j f | ƒ ‚ n  d  S(
   Ns   --chunkt   ,s/   Two comma-separated positive integers required.i   sC   First integer (number of chunks) must be greater than 0 (%d given).i    s=   Second integer (index of chunks) must be positive (%d given).s:   First integer (number of chunks, %d given) must be greaters1    than second integer (index of chunks, %d given).(   R@   Rˆ   Rs   RC   RL   t	   Exceptiont   OptionError(   R1   R   R   R   R*   RL   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR‹   ñ   s(    8c         C   s5   t  d |  j d |  j ƒ } |  j r1 | j ƒ  n  | S(   NRC   RL   (   R   RC   RL   Rn   (   R1   R_   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR     s    	 (   R   R   R4   R‹   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyR3   é   s   		(   t
   __future__R    RD   R   t   libtbx.queuing_system_utilsR   R   R"   t   optikR   R   t   DefaultOptionR   R@   RY   R(   t   objectR)   RR   RO   t   libtbx_option_parserR2   R3   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/option_parser.pyt   <module>   s    
		!t,