a
    bDW                     @   s  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ eejZd
d Zg dZdZejd ZedZ dZ!ee!Z"ej#Z$g dZ%g dZ&g dZ'g dZ(dd Z)dd Z*dRddZ+dd Z,dd Z-dd  Z.d!d" Z/d#d$ Z0dSd%d&Z1d'd( Z2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9dTd7d8Z:d9d: Z;d;d< Z<d=d> Z=d?d@ Z>dAdB Z?dCdD Z@dEdF ZAdGdH ZBdIdJ ZCdKdL ZDdMdN ZEdUdPdQZFdS )V    )with_statementN)existsabspathbasenamejoin)defaultdict)	reportingqconfigqutilsplotter_data)
json_saversecondary_line_style)jsontemplate)
get_loggerc                 C   s   t jtjd| S )N
html_saver)ospathr   r	   LIBS_LOCATION)Zrelpath_in_html_saver r   J/home/psgendb/BIRCHDEV/pkg/quast-5.2.0/quast_libs/html_saver/html_saver.pyget_real_path   s    r   )z#FF0000z#0000FFz#008000z#A22DCCz#FFA500z#800000z#00CCCCz#B2DF8Az#333300z#CCCC00z#000080z#008080z#00FF00F.htmlztemplate.htmlZstatic)zstatic/jquery-1.8.2.min.jszstatic/flot/jquery.flot.min.jszstatic/flot/excanvas.min.jsz!static/flot/jquery.flot.dashes.jsz&static/scripts/draw_cumulative_plot.jszstatic/scripts/draw_nx_plot.jszstatic/scripts/draw_gc_plot.jszstatic/scripts/draw_frc_plot.jszstatic/scripts/utils.jszstatic/scripts/hsvToRgb.jsz!static/scripts/draw_genes_plot.jszstatic/dragtable.jszstatic/ie_html5.jsz3static/bootstrap/bootstrap-tooltip-5px-lower.min.jsz!static/bootstrap/bootstrap.min.jsz*static/bootstrap/bootstrap-tooltip-vlad.jsz%static/scripts/build_report_common.jsz+static/scripts/build_total_report_common.js)z$static/flot/jquery.flot.tickrotor.jsz static/flot/jquery.flot.stack.jsz'static/scripts/draw_metasummary_plot.jsz+static/scripts/draw_meta_misassembl_plot.js)zbootstrap/bootstrap.cssz
common.cssz
icarus.cssz
jquery.css)zd3.jszjquery-1.8.2.min.jszjquery-ui.jszbootstrap/bootstrap.min.jszscripts/build_icarus.jszscripts/display_icarus.jszscripts/icarus_interface.jszscripts/icarus_utils.jsc                 C   s2   t jrdtt|   d S dt|  d S d S )Nz <script type="text/javascript">
z
</script>
z$<script type="text/javascript" src="z"/></script>
r	   portable_htmlopenr   read)Zscript_rel_pathr   r   r   js_html]   s    r   c                 C   s2   t jrdtt|   d S dt|  d S d S )Nz<style rel="stylesheet">
z

</style>
z<link rel="stylesheet" href="z"/>
r   )Zcss_rel_pathr   r   r   css_htmld   s    r   c              	   C   sz  t tZ}| }g }tD ]"}tjr0d|v r0q|t| q|dd	|}|r|dtd}|dtd}|dd	d	d
 t
D }n,|dtd}|dtd}|dd}|dtd}|dtd}|dtd}|dt td }tj| r t|  t | d}|| W d    n1 sL0    Y  W d    n1 sl0    Y  d S )NZdraw_gc_plotz{{ allscripts }}
z{{ buildreport }}z#static/scripts/build_report_meta.jsz{{ buildtotalreport }}z)static/scripts/build_total_report_meta.jsz{{ metascripts }}c                 S   s   g | ]}t |qS r   )r   ).0Zaux_meta_filer   r   r   
<listcomp>x       zinit.<locals>.<listcomp>zstatic/scripts/build_report.jsz$static/scripts/build_total_report.js z{{ bootstrap }}z"static/bootstrap/bootstrap.min.cssz{{ common }}zstatic/common.cssz{{ report }}zstatic/report.cssz{{ glossary }}zglossary.jsonw)r   template_fpathr   	aux_filesr	   no_gcappendr   replacer   aux_meta_filesr   r   r   r   r   removewrite)
html_fpathis_metaZtemplate_filehtmlZscript_textsZaux_f_rel_pathf_htmlr   r   r   initk   s.    
r1   c                 C   s   t | }| }W d    n1 s&0    Y  tj||ddd id}t|}t |d}|| W d    n1 sz0    Y  d S )Nr   c                 S   s
   d | S )Nz, )r   )vr   r   r   <lambda>   r"   z"save_icarus_html.<locals>.<lambda>)Zmore_formattersr$   )r   r   r   expand_embed_css_and_scriptsr,   )r%   r-   	data_dictfr/   r0   r   r   r   save_icarus_html   s    0r8   c              
   C   s  d}d}d}d}d}d}|t ||f|t||ffD ]\}}}	}
|D ]}t|r^t|}t|}nttt|d }t|s|q@|| }|	| }tj	rt
|N}| }dd	d
 |dD }| ||d | d |
 } W d    n1 s0    Y  q@|||}| ||} q@q0| S )Nz1<script type="text/javascript" src="%s"></script>z)<script type="text/javascript" name="%s">z    </script>z3<link rel="stylesheet" type="text/css" href="%s" />z2<style type="text/css" rel="stylesheet" name="%s">z    </style>/r   c                 s   s   | ]}d | V  qdS )z        Nr   r    lr   r   r   	<genexpr>   r"   z)_embed_css_and_scripts.<locals>.<genexpr>)icarus_js_filesicarus_css_filesr   r   r   r   static_dirpathsplitr	   r   r   r   r)   )r/   Zjs_line_tmplZjs_l_tagZjs_r_tagZcss_line_tmplZ	css_l_tagZ	css_r_tagZ	line_tmplfilesZl_tagZr_tagZ	rel_fpathfpathlineZl_tag_formattedr7   contentsZline_formattedr   r   r   r5      s4    



<r5   c                 C   s   t j|sd S t|}| }W d    n1 s60    Y  td| d | |}t|d}|| W d    n1 s0    Y  d S N{{  }}r$   )r   r   isfiler   r   resubr,   )Ztext_to_insertkeywordr-   r0   	html_textr   r   r   insert_text_icarus   s    
&(rM   c                 C   s4   t | dkr0t| d@ }| d d d t| } | S )N2   l    _)lenhashstr)ref_nameZref_hashr   r   r   trim_ref_name   s    rT   c                 C   sv   t | }| }W d    n1 s&0    Y  tdd|}t | d}|| W d    n1 sh0    Y  d S )N{{(\s+\S+\s+)}}r#   r$   )r   r   rI   rJ   r,   )r-   r0   rL   r   r   r   
clean_html   s
    
&rV   c                 C   s   |d u rt j| t}t j|s*t| t|}| }W d    n1 sP0    Y  tj	rnt
|tj t | t|}| }W d    n1 s0    Y  td| d ||}t|d}|| W d    n1 s0    Y  |S rE   )r   r   r   report_fnamerH   r1   r   r   r	   	save_jsonshutilcopyjson_output_dirpathr+   rI   rJ   r,   )results_dirpath
json_fpathrK   r-   Zf_json	json_textr0   rL   r   r   r   r(      s    
&

&(r(   c                 C   s   t j| t}t|dd |S )NTr.   )r   r   r   rW   r1   )r\   r-   r   r   r   init_meta_report   s    r`   c           	      C   s   t j| t}t j|s&t|dd ddlm} |j}t	t
j}|rTt||| | t|}| }W d    n1 sz0    Y  d}td| d dd	| d
 |}tdd|}t|d}|| W d    n1 s0    Y  |d|  d S )NTr_   r   )search_references_metatotalReportrF   rG   [,]rU   z{}r$   zR  Extended version of HTML-report (for all references and assemblies) is saved to )r   r   r   rW   rH   r1   
quast_libsra   taxons_for_kronar   r	   LOGGER_META_NAMEcreate_krona_chartsr   r   rI   rJ   r,   	main_info)	r\   
json_textsr-   ra   rg   meta_logr0   rL   rK   r   r   r   create_meta_report   s     

&$(rm   c                 C   s$   t | ||}|r t| |dt _d S )Nrb   )r   save_empty_reportr(   r^   r\   
min_contig	ref_fpathr]   r   r   r   rn     s    rn   c                 C   s<   t | ||}|r8t| |dt _tdtj| t	  d S )Nrb   z:  HTML version (interactive tables and plots) is saved to )
r   save_total_reportr(   r^   loginfor   r   r   rW   ro   r   r   r   rr     s    rr   c              	   C   s   t | dt}t |dJ}|D ]4}|ddkrFtddtj d |}|| qW d    n1 sf0    Y  W d    n1 s0    Y  d S )Nrr$   Zassemblies_linksz../contigs_reports/z../z/contigs_reports/)r   findrI   rJ   r	   combined_output_namer,   )r-   Zhtml_top_fpathtemplateresultrC   r   r   r   copy_meta_alignment_viewers  s    r{   c              	   C   sF  t j| tjtj}t j| tj}tt}t j|sBt 	| |d 
tj |d 
tj t j|tj}t j|tj}t|| t|D ]p\}}t|}	t|dkrt j|tjd }
t j|
rtj}	t j||	d }t j||	d }t|| qt j| tjtj}t j| tj}t|d}t|d}d}|D ]}|dd	krdd}|d
d	krd|vrd|vrd|vrtd|d }d|v rtd|rtd|d }|dd}||vrd}|sL|| qLW d    n1 s0    Y  W d    n1 s.0    Y  t| | |S )NlinksZlinks_names   r   ru   r$   Fz</tr>rv   z<a href="icarus_viewerszQUAST reportzContig sizezContig alignmentz<a.*>(.*)<\/a>r   tooltipztitle="(.+)" rO   T)r   r   r   r	   rx   icarus_dirnamer   listisdirmkdirr(   icarus_html_fnameicarus_linkcontig_size_viewer_fnamerY   rZ   	enumeraterT   rP   one_alignment_viewer_namer   r{   r   rw   rI   findallr)   r,   save_icarus_links)r\   	ref_namesZcombined_ref_icarus_dirpathZicarus_dirpathicarus_linksZcontig_size_fpathZcontig_size_top_fpathindexref	html_nameZone_alignment_viewer_fpathZicarus_ref_fpathZicarus_top_ref_fpathZicarus_menu_fpathZicarus_menu_top_fpathry   rz   Zskipping_trrC   rS   r   r   r   create_meta_icarus%  sL    
.
N
r   c                 C   sL  | d tjtjd}tj|tj}zdd l}W n@ tyv   zdd l	}W n  typ   |
d Y Y d S 0 Y n0 tj|st| ||d }|d }d}	tj|d|	 }
t|
d}t|D ](\}}ttj|||	 d}|  q|d	d  D ]z}||}|d
 }|s$qg }|d }|D ]B}|rD qx|d	 D ]&}|d tjjkrL|d } q4qLq4|sqd |v rdd |D }|d }t|D ]\}}tj|||	 }t|dT}|| v r|t|| d | |  d  n|t|| d  W d    n1 s*0    Y  q|| v rf|tt|d | |  d  n|tt|d  q|  g }tj|d}tj|d}t|d  t|d  t|D ]\}}tj||d }tj|||	 }tjdd|d |d |d|gt|dt|dd}|dkrL|
d| d|   n0|tjtj|d  |d| d |  tjst| qt|d	kr*d }tj||d }tjdd|d |d |
d|gt|dt|dd}|dkr|
d!|  n(|d"|  |tjtj|d  tjs<t|
 t||| d S )#Nz$  Drawing interactive Krona plots...Z
kronatoolsr   z:Can't draw Krona charts - please install python-simplejsonZassembliesNamesz_taxonomy.txtZoverallr$   r}   ZreferenceNamereport
metricNamevaluesc                 S   s   g | ]}|d ur|ndqS )Nr   r   r:   r   r   r   r!   u  r"   z'create_krona_charts.<locals>.<listcomp>a	r   z	krona.logz	krona.errz_taxonomy_chart.htmlZperlz-Iz/libz/scripts/ImportText.plz-o)stdoutstderrz3Error occurred while Krona was processing assembly z%. See Krona error log for details: %sz  Krona chart for z is saved to summaryzZError occurred while Krona was building summary chart. See Krona error log for details: %sz"  Summary Krona chart is saved to )rt   r   r   r   r	   r   krona_dirnamejsonImportErrorZ
simplejsonwarningr   r   loadsr   r   closer   FieldsTOTAL_ALIGNED_LENr,   rR   sumr
   call_subprocessr(   rj   debugr+   rP   save_krona_paths)rg   rl   r\   rk   Zkrona_dirpathZkrona_res_dirpathr   Z	json_data
assembliesZkrona_txt_extZkrona_common_fpathZkrona_common_filer   nameZ
krona_filer^   rS   lengthsr   sectionmetricZcur_assembliesZkrona_fpathZf_kronakrona_fpathsZkrona_log_fpathZkrona_err_fpathZkrona_txt_fpathreturn_coder   r   r   ri   N  s    







$:
$



ri   c                 C   s&   t | ||||}|r"t| || d S N)r   
save_coordr(   )r\   coord_xcoord_y
name_coordcontigs_fpathsr]   r   r   r   r     s    r   c                    s  |rt j| t}t|}| }W d    n1 s80    Y  tdd|}tdd|}t|d}|| W d    q1 s0    Y  njdd |D }fdd|D  d	d  D }d
d |D }	t	| d|	  fddt
|D }
t	| d|
 d S )Nz{{ colors }}Zstandard_colorsz{{ broken_scaffolds }}z[]r$   c                 S   s   g | ]}t |qS r   )r
   label_from_fpath)r    contigs_fpathr   r   r   r!     r"   zsave_colors.<locals>.<listcomp>c                    s   g | ]} | qS r   r   )r    Zcontig_label)dict_colorsr   r   r!     r"   c                 S   s   g | ]}|d  qS )r   r   )r    Zcolor_and_lsr   r   r   r!     r"   c                 S   s   g | ]}t tj| qS r   )html_colorsr   colorsr   )r    colorr   r   r   r!     r"   r   c                    s$   g | ]\}} | d  t kr|qS )r}   r   )r    ilabel)colors_and_lsr   r   r!     r"   Zbroken_scaffolds)r   r   r   rW   r   r   rI   rJ   r,   save_recordr   )r\   r   r   metar-   r0   rL   Zcontig_labelsr   Zcolors_for_htmlZbroken_contig_namesr   )r   r   r   save_colors  s    
&*r   c                 C   sB   | dd}| dd}t||||||}|r>t||||  d S )Nz_(%)r#   #num)r)   r   save_meta_summaryr(   )r-   r\   r   r   r   labelsrefsr]   r   r   r   r     s
    r   c           	      C   sJ   d}dd |D }dd |D }t ||||||}|rFt||||  d S )NZallMisassembliesc                 S   s   g | ]}|r|d  ndqS )r   Nr   r    coordr   r   r   r!     r"   z+save_meta_misassemblies.<locals>.<listcomp>c                 S   s   g | ]}|r|d  ndqS )r}   Nr   r   r   r   r   r!     r"   )r   save_meta_misassembliesr(   )	r-   r\   coordsr   r   r   Zcoords_xZcoords_yr]   r   r   r   r     s    r   c                 C   s"   t | ||}|rt| || d S r   )r   r   r(   )r\   filenamerecordr]   r   r   r   r     s    r   c                 C   s    t | |}|rt| |d d S )NZreferenceLength)r   save_reference_lengthsr(   )r\   reference_lengthsr]   r   r   r   r     s    r   c                 C   s    t | |}|rt| |d d S )NZtickX)r   save_tick_xr(   )r\   Ztick_xr]   r   r   r   r     s    r   c                 C   s"   t | ||}|rt| |d d S )NZcontigsLengths)r   save_contigs_lengthsr(   )r\   r   lists_of_lengthsr]   r   r   r   r     s    r   c                 C   s"   t | ||}|rt| |d d S )NZassembliesLengths)r   save_assembly_lengthsr(   )r\   r   Zassemblies_lengthsr]   r   r   r   r     s    r   c                 C   s*   t | ||||}|r&t| ||d  d S )NZ	InContigs)r   save_features_in_contigsr(   )r\   r   Zfeature_namefeature_in_contigsZref_feature_numr]   r   r   r   r     s    r   c                 C   s&   t | ||||}|r"t| |d d S )NZgcInfos)r   save_GC_infor(   )r\   r   list_of_GC_distributions list_of_GC_contigs_distributionsreference_indexr]   r   r   r   r     s    r   c                 C   s"   t | ||}|rt| |d d S )NZkrona)r   r   r(   )r\   r   r   r]   r   r   r   r     s    r   c                 C   s    t | |}|rt| |d d S )Nicarus)r   r   r(   )r\   r   r]   r   r   r   r     s    r   Tc                 C   s   | rt | ||| d S r   )r   save_icarus_data)r\   Zicarus_datarK   Zas_textr   r   r   r     s    r   )F)N)F)T)G
__future__r   r   rY   rI   os.pathr   r   r   r   collectionsr   rf   r   r	   r
   r   quast_libs.html_saverr   Zquast_libs.plotterr   Z%quast_libs.site_packages.jsontemplater   quast_libs.logr   LOGGER_DEFAULT_NAMErs   r   r   Zscripts_insertedreport_prefixrW   r%   Zstatic_dirnamer?   html_aux_dirZaux_dirnamer&   r*   r>   r=   r   r   r1   r8   r5   rM   rT   rV   r(   r`   rm   rn   rr   r{   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sj   


%
	)Y
	