ó
›¢yZc           @€  sÖ  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 m Z m Z y d  d l m Z Wn! e k
 r£ d  d l m Z n Xd  d l m Z m Z d  d l m Z m Z m Z m Z m Z d a e
 e j d ƒ Z e ƒ  Z i  Z i  Z  e
 e d	 ƒ Z! e
 e d
 ƒ Z" d „  Z# d „  Z$ d „  Z% d „  Z& e' d „ Z( d „  Z) e' d „ Z* d „  Z+ d „  Z, d „  Z- d „  Z. e' d „ Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d d „ Z4 d S(   iÿÿÿÿ(   t   with_statementN(   t   repeat(   t   isfilet   isdirt   joint   dirnamet   basename(   t   OrderedDict(   t   qconfigt   qutils(   t   compile_toolt
   val_to_strt   check_prev_compilation_failedt   write_failed_compilation_flagt   get_path_to_programt   MUMmers   make.emem.faileds   make.mummer.failedc           C€  s
   d  a d  S(   N(   t   Nonet   contig_aligner(    (    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   reset_aligner_selection%   s    c         C€  s   t  t |  ƒ S(   N(   R   t   contig_aligner_dirpath(   t   fname(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt	   bin_fpath*   s    c           C€  s
   t  d k S(   Ns   E-MEM(   R   (    (    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   is_emem_aligner.   s    c           C€  s   t  j d ƒ S(   Ns   e-mem(   R	   R   (    (    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   get_installed_emem2   s    c         C€  sŠ  d d d d d d d g } | r– d d	 | d
 g f d d | f g } xI t  | ƒ D]; \ } \ } } } t | t | d |  d | d d | ƒqS Wt St d t d t d |  ƒ} t d t d t d |  ƒ}	 | rï |	 rï d  a |  j	 d ƒ t
 St d  k	 r#t ƒ  r
|	 n | }
 |
 st Sd  a n  t j rØ|	 rØt ƒ  sRt t t d
 ƒ ƒ r[| } n\ t j d k rªt t t d ƒ ƒ rªt j t t d ƒ t t d
 ƒ ƒ | } n | d
 g } d d	 | f d d | f g } n d d | f g } xŒ t  | ƒ D]~ \ } \ } } } t | t | d | t | ƒ d k  d |  d | d d | d d
 | k rYd n d  ƒ} | snq÷n  | a t SW|  j	 d ƒ t
 S(   Nt   nucmers   delta-filters   show-coordss	   show-snpst   mummert
   mummerplott   mgapss   E-MEMt   emems   e-memR   t   loggert
   only_cleant   flag_suffixt   .t   just_notices]   Compilation of contig aligner software was unsuccessful! QUAST functionality will be limited.t   macosxs	   e-mem-osxi   t   make_cmds   no-emem(   t	   enumerateR
   R   t   TrueR   t   mummer_failed_compilation_flagt   e_mem_failed_compilation_flagR   R   t   errort   FalseR   R   t   force_nucmerR   R   R   t   platform_namet   shutilt   copyt   len(   R   R   t   default_requirementst   aligners_to_tryt   it   namet	   flag_namet   requirementst   mummer_failedt   emem_failedt   compilation_failedt   emem_requirementst   success_compilation(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   compile_aligner6   sL    "*		$"	"%c          C€  sV   t  d ƒ }  |  r |  t f St t j d ƒ } t | d ƒ } t | d ƒ } | t f S(   Nt   gnuplott   src(   R   R%   R   R   t   LIBS_LOCATIONR)   (   t   system_gnuplot_fpatht   tool_dirpatht   tool_src_dirpatht   tool_exec_fpath(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   gnuplot_exec_fpathk   s    
c      	   C€  sª  t  t j d ƒ } t ƒ  \ } } | rN | rJ t | ƒ rJ t j | ƒ n  t St | ƒ s¦t  | d ƒ } t d | d t d |  ƒrˆ d  S|  j
 d ƒ t j ƒ  } t j | ƒ t j d d d d	 d
 | g d t t  | d ƒ d ƒ d t t  | d ƒ d ƒ d d ƒ} | d k r]t j d g d t t  | d ƒ d ƒ d t t  | d ƒ d ƒ d d ƒ} n  t j | ƒ | d k sƒt | ƒ r¦t d | | d t d |  ƒd  Sn  | S(   NR;   s   make.failedR!   R   s   Compiling gnuplot...t   sht	   configures   --with-qt=nos   --disable-wxwidgetss	   --prefix=t   stdouts   make.logt   wt   stderrs   make.errt   indents       i    t   make(   R   R   R=   RB   R   t   ost   removeR%   R   R   t	   main_infot   getcwdt   chdirR	   t   call_subprocesst   openR   (   R   R   R?   RA   t	   is_systemt   failed_compilation_flagt   prev_dirt   return_code(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   compile_gnuplotu   s:    		c      
   C€  s©  t  t  | ƒ ƒ } t | t | ƒ d ƒ } t j t d ƒ d d d | | g d | d | d d	 t j | ƒ ƒ} | d
 k r|| d }	 | d }
 t ƒ  \ } } t |	 ƒ r|t | ƒ r|t j | |	 g d t	 d d ƒ d | d d	 t j | ƒ ƒt |
 ƒ ryt	 |
 ƒ f } | j
 ƒ  } t | ƒ } t	 | d ƒ  } | j | ƒ Wd  QX|  j d	 t j | ƒ d | ƒ Wd  QXqyq|n  t | ƒ s¥|  j t j | ƒ d ƒ n  d  S(   Ns   _mummerplot.htmlR   s   --htmls   --layouts   -pRE   RG   RH   s     i    s   .gps   .htmls	   /dev/nullRF   s   MUMmer plot saved to s     MUMmer plot cannot be created.
(   R   R   R   R	   RO   R   t   index_to_strRB   R   RP   t   readt   _embed_css_and_scriptst   writet   infot   notice(   R   t   nucmer_fpatht   delta_fpatht   indext	   log_out_ft	   log_err_ft   output_dirpatht   mummer_plot_fpathRT   t   plot_script_fpatht   temp_plot_fpatht   gnuplot_fpatht   _t   template_filet   htmlt   f_html(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   draw_mummer_plot—   s2    

1c      
   C€  sA  d } d } d } d } d } d } t  t j d ƒ g } t  t j d ƒ t  t j d	 ƒ t  t j d
 ƒ g } xÎ | | | | f | | | | f g D]¨ \ }	 }
 } } x“ |
 D]‹ } t | ƒ } |	 | } | | } t | ƒ W } | j ƒ  } d j  d „  | j d ƒ Dƒ ƒ } |  j | | d | d | ƒ }  Wd  QXqª Wq‘ W|  S(   Ns   <script src="%s"></script>s)   <script type="text/javascript" name="%s">s       </script>s1   <link type="text/css" href="%s" rel="stylesheet">s2   <style type="text/css" rel="stylesheet" name="%s">s       </style>s!   gnuplot/term/js/gnuplot_mouse.csss   gnuplot/term/js/canvastext.jss!   gnuplot/term/js/gnuplot_common.jss&   gnuplot/term/js/gnuplot_dashedlines.jss   
c         s€  s   |  ] } d | Vq d S(   t    i   Ns           (    (   t   .0t   l(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pys	   <genexpr>Ð   s    (   R   R   R=   R   RP   RW   t   splitt   replace(   Rh   t   js_line_tmplt   js_l_tagt   js_r_tagt   css_line_tmplt	   css_l_tagt	   css_r_tagt	   css_filest   js_filest	   line_tmplt   filest   l_tagt   r_tagt   fpatht	   rel_fpatht   linet   l_tag_formattedt   ft   contents(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyRX   ´   s,    %

"0c         C€  s   t  |  t  | k S(   N(   t   ref_labels_by_chromosomes(   t   chr1t   chr2(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   is_same_referenceÖ   s    c         C€  s   |  t  k r t  |  Sd S(   Nt    (   R‚   (   t   chrom(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   get_ref_by_chromosomeÚ   s    c         C€  s  t  d ƒ } xm |  D]e } g  t | d g g  | d D] } t | ƒ ^ q4 | ƒ D]! \ } } t t | ƒ | ƒ ^ qQ } q Wt | | rŽ d n d ƒ } xc |  D][ } | j d j d „  t | | d g g  | d D] } t | ƒ ^ qÑ ƒ Dƒ ƒ d ƒ qž Wd  S(	   Ni    t
   metricNamet   valuest   aRF   s     c         s€  s%   |  ] \ } } d  | | f Vq d S(   s   %-*sN(    (   Rl   t   colwidtht   cell(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pys	   <genexpr>ä   s    s   
(   R   t   zipR   t   maxR.   RP   RY   R   (   t   all_rowsR|   t   append_to_existing_filet	   colwidthst   rowt   vRF   t   txt_file(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt
   print_fileÞ   s    cc         C€  s‘   t  j } t |  | ƒ } t | ƒ s4 t j | ƒ n  t  j r d d l m } | j	 r t | d ƒ } t j
 j | ƒ sŠ t j | ƒ qŠ q n  | S(   Niÿÿÿÿ(   t   search_references_metat   raw(   R   t   nucmer_output_dirnameR   R   RJ   t   mkdirt   is_combined_reft
   quast_libsR—   t   is_quast_first_runt   path(   t
   output_dirR™   t   nucmer_output_dirR—   (    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   create_nucmer_output_dirè   s    			c         C€  sO   t  j r d  Sx; d d d g D]* } t |  | ƒ r t j |  | ƒ q q Wd  S(   Ns   .deltas   .coords_tmps   .coords.headless(   R   t   debugR   RJ   RK   (   R\   t   ext(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   clean_tmp_filesö   s
    	c         C€  s4   x- t  |  ƒ j ƒ  D] } | r | j ƒ  q q Wd  S(   N(   t   varsRŠ   t   close(   t	   ca_outputt   handler(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   close_handlers   s    c         C€  s°   x© d d g D]› } | | } t  | ƒ r |  j d | d ƒ t | d ƒ 4 } t j | d d ƒ } | j | ƒ | j ƒ  Wd  QXt j | ƒ |  j d | d ƒ q q Wd  S(	   Ns	   .all_snpss
   .used_snpss     Gzipping s    to reduce disk space usage...t   rbs   .gzt   wbs       saved to (   R   RZ   RP   t   gzipt
   writelinesR¦   RJ   RK   (   R   R\   R£   R|   t   f_int   f_out(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   compress_nucmer_output  s    
t   rtc         C€  s#  t  j j |  ƒ r, d | k r, |  d 7}  n  |  j d ƒ sJ |  j d ƒ rd | k rc | d 7} n  y t j |  d | ƒ} Wn t k
 rœ t |  d | ƒSXd | k r­ | Sy | j d ƒ Wn( t k
 rè | j ƒ  t |  d | ƒSX| j ƒ  t j |  d | ƒ} | Sn t |  d | ƒSd  S(   Nt   rs   .gzs   .gzipt   tt   modeRF   i   (	   RJ   Rž   t   existst   endswithR¬   RP   t   IOErrorRW   R¦   (   R€   R´   t   h(    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   open_gzipsafe  s(    

(5   t
   __future__R    R¬   RJ   R,   t	   itertoolsR   t   os.pathR   R   R   R   R   t   collectionsR   t   ImportErrort%   quast_libs.site_packages.ordered_dictRœ   R   R	   t   quast_libs.qutilsR
   R   R   R   R   R   R   R=   R   R‚   t!   intergenomic_misassemblies_by_asmt   contigs_aligned_lengthsR'   R&   R   R   R   R   R)   R:   RB   RU   Rj   RX   R…   Rˆ   R–   R¡   R¤   R©   R°   R¹   (    (    (    sG   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/ca_utils/misc.pyt   <module>   sF   ((					5	
"		"		
		
		