ó
¨™xTc           @   sþ   d  Z  d d l m Z d d l Z d d l m Z m Z d d l m	 Z	 d d l
 m Z d d l Z d d l Z e j j d ƒ Z d d l Td	 e	 f d
 „  ƒ  YZ d e	 f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   sÂ   
Base module for Xtriage and related scaling functionality; this imports the
Boost.Python extensions into the local namespace, and provides core functions
for displaying the results of Xtriage.
iÿÿÿÿ(   t   divisionN(   t   make_sub_headert   make_header(   t   slots_getstate_setstate(   t   StringIOt   mmtbx_scaling_ext(   t   *t   data_analysisc           B   s   e  Z e j d  d „ Z RS(   t    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   t   selft   outt   prefix(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show   s    (   t   __name__t
   __module__t   syst   stdoutR   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR      s   t   xtriage_outputc           B   s§   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d d e d	 „ Z d
 „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   s-   
  Base class for generic output wrappers.
  c         C   s   t  ƒ  ‚ d S(   s7   
    Start a new section with the specified title.
    N(   R	   (   R
   t   title(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_header   s    c         C   s   t  ƒ  ‚ d S(   s7   
    Start a sub-section with the specified title.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_sub_header$   s    c         C   s   t  ƒ  ‚ d S(   s    
    Show unformatted text.
    N(   R	   (   R
   t   text(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt	   show_text*   s    c         C   s   |  j  | ƒ S(   N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   0   s    c         C   s   t  ƒ  ‚ d S(   sz   
    Show text with spaces and line breaks preserved; in some contexts this
    will be done using a monospaced font.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_preformatted_text3   s    c         C   s   t  ƒ  ‚ d S(   sE   
    Show partially formatted text, preserving paragraph breaks.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt
   show_lines:   s    c         C   s   t  ƒ  ‚ d S(   sE   
    Show a header/title for a paragraph or small block of text.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_paragraph_header@   s    i    c         C   s   t  ƒ  ‚ d S(   s$   
    Display a formatted table.
    N(   R	   (   R
   t   tablet   indentt   plot_buttont   equal_widths(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt
   show_tableF   s    c         C   s   t  ƒ  ‚ d S(   sA   
    Display a plot, if supported by the given output class.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt	   show_plotM   s    c         C   s   t  ƒ  ‚ d S(   sS   
    Display a series of plots in a single row.  Only used for the Phenix GUI.
    N(   R	   (   R
   t   tables(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_plots_rowS   s    c         C   s   t  ƒ  ‚ d S(   s‰   
    Display a set of left-justified text columns.  The number of columns is
    arbitrary but this will usually be key:value pairs.
    N(   R	   (   R
   t   rowsR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   show_text_columnsY   s    c         C   s   t  ƒ  ‚ d S(   s+   
    Print a newline and nothing else.
    N(   R	   (   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   newline`   s    c         C   s   |  j  | ƒ d S(   s1   
    Support for generic filehandle methods.
    N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   writef   s    c         C   s   d S(   s1   
    Support for generic filehandle methods.
    N(    (   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   flushl   s    c         C   s   t  ƒ  ‚ d S(   s$   
    Display a warning message.
    N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   warnr   s    N(   R   R   t   __doc__t   Falset
   gui_outputR   R   R   R   R   R   R   t   Nonet   TrueR   R    R"   R$   R%   R&   R'   R(   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR      s$   												t   printed_outputc           B   s¡   e  Z d  Z d g Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 d e d
 „ Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z RS(   sC   
  Output class for displaying raw text with minimal formatting.
  R   c         C   s:   t  | d ƒ r t  | d ƒ s$ t ‚ | |  _ g  |  _ d  S(   NR&   R'   (   t   hasattrt   AssertionErrorR   t	   _warnings(   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   __init__}   s    $	c         C   s   t  | d |  j ƒd  S(   NR   (   R   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   ‚   s    c         C   sT   t  ƒ  } t | d | ƒx4 | j ƒ  j ƒ  D]  } |  j j d | j ƒ  ƒ q, Wd  S(   NR   s   %s
(   R   R   t   getvaluet
   splitlinesR   R&   t   rstrip(   R
   R   t   out_tmpt   line(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   …   s    	c         C   s   |  j  | IJd  S(   N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   ‹   s    c         C   s   |  j  | IJd  S(   N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Ž   s    c         C   s   |  j  | IJd  S(   N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   ‘   s    c         C   s   |  j  | IJd  S(   N(   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   ”   s    i   c         C   s#   |  j  | j d | d | ƒ IJd  S(   NR   R   (   R   t   format(   R
   R   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   —   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR    š   s    c         C   s   d  S(   N(    (   R
   R!   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR"   �   s    i    c   
      C   sÊ   d | } t  | d ƒ } g  t | ƒ D]/ } t g  | D] } t  | | ƒ ^ q7 ƒ ^ q' } xg | D]_ } t  | ƒ | k s� t ‚ | d j g  | D] } d | ^ q‘ ƒ }	 |  j |	 t | ƒ IJqc Wd  S(   Nt    i    s   %%%ds(   t   lent   ranget   maxR0   t   joinR   t   tuple(
   R
   R#   R   R   t   n_colst   it   rowt	   col_sizest   xt   formats(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR$       s    
B*c         C   s   |  j  d IJd  S(   NR   (   R   (   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR%   ©   s    c         C   s   |  j  j | ƒ d  S(   N(   R   R&   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR&   ¬   s    c         C   sz   |  j  j | ƒ t ƒ  } t d d | d d ƒx4 | j ƒ  j ƒ  D]  } |  j j d | j ƒ  ƒ qB W|  j j | ƒ d  S(   Nt   WARNINGR   t   sepR   s   %s
(	   R1   t   appendR   R   R3   R4   R   R&   R5   (   R
   R   R6   R7   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR(   ¯   s    	N(   R   R   R)   t	   __slots__R2   R   R   R   R   R   R   R,   R-   R   R    R"   R$   R%   R&   R(   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR.   x   s    													t   loggraph_outputc           B   s’   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z RS(   sO   
  Output class for displaying 'loggraph' format (from ccp4i) as plain text.
  c         C   s1   t  | d ƒ r t  | d ƒ s$ t ‚ | |  _ d  S(   NR&   R'   (   R/   R0   R   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR2   ¼   s    $c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   À   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Á   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Â   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Ã   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Ä   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Å   s    c         O   s   d  S(   N(    (   R
   t   argst   kwds(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Æ   s    c         O   s   d  S(   N(    (   R
   RJ   RK   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR$   Ç   s    c         C   s   d  S(   N(    (   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR%   È   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR&   É   s    c         C   s   d  S(   N(    (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR(   Ê   s    c         C   s$   |  j  d IJ|  j  | j ƒ  IJd  S(   NR   (   R   t   format_loggraph(   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR    Ì   s    c         C   s"   x | D] } |  j  | ƒ q Wd  S(   N(   R    (   R
   R!   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR"   Ð   s    (   R   R   R)   R-   R+   R2   R   R   R   R   R   R   R   R$   R%   R&   R(   R    R"   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyRI   ·   s    													t   xtriage_analysisc           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   s+  
  Base class for analyses performed by Xtriage.  This does not impose any
  restrictions on content or functionality, but simply provides a show()
  method suitable for either filehandle-like objects or objects derived from
  the xtriage_output class.  Child classes should implement _show_impl.
  c         C   sJ   | d  k r t j } n  t | t ƒ s6 t | ƒ } n  |  j d | ƒ |  S(   NR   (   R,   R   R   t
   isinstanceR   R.   t
   _show_impl(   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyR   Û   s    c         C   s   t  ƒ  ‚ d  S(   N(   R	   (   R
   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyRO   ã   s    c         C   s   g  S(   N(    (   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   summarize_issuesæ   s    N(   R   R   R)   R,   R   RO   RP   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyRM   Ô   s   	(   R)   t
   __future__R    t   cctbx.array_family.flext   cctbxt   libtbx.str_utilsR   R   t   libtbxR   t	   cStringIOR   R   t   boost.pythont   boostt   pythont
   import_extt   extR   R   R   R.   RI   t   objectRM   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/__init__.pyt   <module>   s   
`?