U
    adʇ                     @   sj  d dl mZ dddddZdZdZd	Zd
ZdZdZdZ	dZ
d	ZdZd dlZd dlZd dlmZmZmZ d dlmZmZ d dlmZmZmZ d dlmZmZ e ZeejZeej Z!dZ"ej#rbzvd dl$Z$e$%d e$j&'dse$j&'dre(d e)d n0ej*Z*e+dde_*d dl,m-Z. d dl/Z$e*e_*dZ"W n* e0k
r`   e(d e)d Y nX g a1g a2G dd de3Z4G dd de3Z5d d! Z6d"d# Z7dKd$d%Z8dLd&d'Z9dMd(d)Z:d*d+ Z;d,d- Z<ddddddddddefd.d/Z=d0d1 Z>d2d3 Z?dNd5d6Z@d7d8 ZAd9d: ZBd;d< ZCdOd=d>ZDdPd?d@ZEddddefdAdBZFdQdCdDZGdRdEdFZHdGdH ZIdIdJ ZJdS )S    )divisionz
sans-serifZnormalZmedium
   )ZfamilyZstyleZweightsize       @ZsolidZdashed   TZlargez#000000FN)fastaparserqconfig	reporting)
get_loggerget_main_logger)label_from_fpathparse_str_to_numrun_parallel)get_color_and_lscolorsZAgg0z1.0 zYCan't draw plots: matplotlib version is old! Please use matplotlib version 1.1 or higher.z	/dev/nullwz<Can't draw plots: python-matplotlib is missing or corrupted.c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
PlotN   c                 C   s,   ||||||f\| _ | _| _| _| _| _d S N)x_valsy_valscolorlsmarker
markersize)selfr   r   r   r   r   r    r   1lib/python3.8/site-packages/quast_libs/plotter.py__init__Q   s    zPlot.__init__c              	   C   s(   t j| j| j| j| jt| j| jd d S )N)r   r   Zlwr   r   )	pltplotr   r   r   r   
line_widthr   r   r   r   r   r   r"   T   s     z	Plot.plotc                 C   s
   t | jS r   )maxr   r$   r   r   r   	get_max_yX   s    zPlot.get_max_y)Nr   __name__
__module____qualname__r    r"   r&   r   r   r   r   r   P   s   
r   c                   @   s&   e Zd ZdddZdd Zd	d
 ZdS )Bar皙?Nr   edgec	           	   	   C   s8   ||||||||f\| _ | _| _| _| _| _| _| _d S r   )x_valy_valr   widthbottomhatch	edgecoloralign)	r   r.   r/   r   r0   r1   r2   r3   r4   r   r   r   r    ]   s    zBar.__init__c              
   C   s.   t j| j| j| j| j| j| j| j| j	d d S )N)r0   r4   r   r3   r2   r1   )
r!   Zbarr.   r/   r0   r4   r   r3   r2   r1   r$   r   r   r   r"   a   s     zBar.plotc                 C   s2   t | jtrt| jS | jr(| j| j S | jS d S r   )
isinstancer/   listr%   r1   r$   r   r   r   r&   e   s
    
zBar.get_max_y)r,   Nr   Nr-   r'   r   r   r   r   r+   \   s   
r+   c                 C   s8   t jjddd}t jjdd| r(dddgnd d}||fS )N   T)nbinsintegerr      r   )r8   r9   Zsteps)
matplotlibtickerZMaxNLocator)is_histogramxLocatoryLocatorr   r   r   get_locatorso   s     r@   c                 C   sL   |dkrdd }| d7 } n*|dkr4dd }| d7 } ndd }| d	7 } | |fS )
Ng     @c                 S   s   d| d  S )N%dr   r   xposr   r   r   <lambda>w       zy_formatter.<locals>.<lambda>z (bp)g    SAc                 S   s   d| d  S )NrA   gMbP?r   rB   r   r   r   rE   z   rF   z (kbp)c                 S   s   d| d  S )NrA   gư>r   rB   r   r   r   rE   }   rF   z (Mbp)r   )ylabelmax_ymkfuncr   r   r   y_formatteru   s    

rJ   c                 C   s   t  }|d | }| rB||j|j|jd |jd g n(||j|j|jd  |j|jd g |j	
t t 
t |S )NTr,         ?g?)r!   ZgcaZset_axisbelowZget_positionZset_positionZx0Zy0r0   ZheightyaxisZgrid	with_grid)vertical_legendaxZboxr   r   r   set_ax   s    
$(
rP   c           
      C   s   |r2d|kr2t ||\}}tj|}|j| | rDtj| td |rVtj	|td t
|\}}	|j|	 |j| |r| s|j d |r|d d S )NZlength)ZfontsizeFlog)rJ   r;   r<   ZFuncFormatterrL   Zset_major_formatterr!   xlabelaxes_fontsizerG   r@   Zset_major_locatorZxaxisZaxesZ	get_xaxisZset_visibleZ
set_xscale)
rR   rG   rH   rO   logarithmic_x_scaler=   rI   Zmkformatterr>   r?   r   r   r   
add_labels   s    rU   c                 C   sr   zX|r| j |dddddd}n"| j |dddd|dk r8|ndd	}|jD ]}|d
 qFW n tk
rl   Y nX d S )Nzcenter left)rK         ?Tr   )locbbox_to_anchorfancyboxshadowZ	numpointszupper center)g\(\?g333333ÿ   )rW   rX   rY   rZ   Zncolr   )legendZlegendHandlesZ	set_hatch	Exception)rO   legend_list	n_columnsrN   r\   Zhandler   r   r   
add_legend   s    
r`   c                 C   s   zddl m} || }W n   td Y d S X tD ]}|j|dd q6tD ]}|| qNz@| }d|d< d|d	< dd l}|j	 |d
< |j	 |d< W n t
k
r   Y nX |  td d S )Nr   )PdfPagesz/PDF with all tables and plots cannot be createdtightZbbox_incheszQUAST full reportZTitleZQUASTZAuthorZCreationDateZModDateall)Zmatplotlib.backends.backend_pdfra   loggerwarningpdf_tables_figuressavefigpdf_plots_figuresZinfodictdatetimeZnowAttributeErrorcloser!   )all_pdf_fpathra   Zall_pdf_filefiguredrj   r   r   r   save_to_pdf   s*    
rp   c                 C   s   t j| dd d S )Nrb   rc   )r!   rh   )
plot_fpathr   r   r   	save_plot   s    rr   c                 C   s>  t  }t jdt d}t|}|D ]}t|| }|  q$|rTt||t	|d t
|||||d |rtt | |	pdtdtt|d g}	t |	 |
rt jtt|
|
d|rdnd d	 tst   d S trt | | d
tj 7 } tjr
tt| fgd nt|  |d|   |r0t| t d d S )Nfontr   )r_   rN   )r=   r:   皙?ZsmallZvertical)r   Zrotation.   z    saved to rd   )rs   )r!   Zgcfrcrs   rP   r%   r&   r"   r`   r_   rU   ZxlimintmathceilZylimZxticksrangelencan_draw_plotsrl   
with_titletitler   Zplot_extensionis_combined_refr   rr   infori   append)rq   r   plotsr^   x_labely_labelrN   r=   x_limity_limitx_ticksvertical_ticksadd_to_reportre   rn   rH   rO   r"   r   r   r   create_plot   s:    

 
"

r   c              	   C   sb  t sd S td g }d}t||D ]v\}}dg}	t|ddD ]}
|	|	d |
  q>ttdt|	}|rzt	|d |}t
|\}}|t||	|| q$| r&dg}	tt|  ddD ]}
|	|	d |
  qttdt|	}|	d }t	||d }|	| || |t||	tt dd |D }| rD|dg7 }t||||d	d
d|gd d S )Nz  Drawing cumulative plot...r   Treversec                 S   s   g | ]}t |qS r   r   .0Zfpathr   r   r   
<listcomp>  s     z#cumulative_plot.<locals>.<listcomp>	ReferenceContig indexzCumulative lengthr   r   r   )r}   re   r   zipsortedr   r6   r{   r|   r%   r   r   r   get_chr_lengths_from_fastafilevaluesreference_colorreference_lsr   )Z	referencecontigs_fpathslists_of_lengthsrq   r   r   max_xcontigs_fpathlengthsr   lr   r   r   Zreference_lengthr^   r   r   r   cumulative_plot   s<    



r   c           "      C   sV  t rtd| d  g }d}tt| }	g }
g }tdd | D d }g }|D ]}|| }|| }|rZ|szqZ|| d}g }g }t	||D ].\}}|dkr||7 }q|| || qt
t	||dd d	d
}dd |D }dd |D }g }g }t|D ]}d}|}t	||D ]8\}}|| |kr$||7 }||7 }||kr$ q^q$|| ||d |	  ||d  ||d |	  q|
| || t|t|}t|\}}|t|||| qZtjrddlm}  | | |
|d| | t rRd| d }dd |D }!t||||!ddd|gdtd|gd d S )N
  Drawing z FRCurve plot...r   c                 s   s   | ]}t |V  qd S r   )sum)r   feature_in_contigsr   r   r   	<genexpr>#  s     zfrc_plot.<locals>.<genexpr>r   c                 S   s   | d d | d  S )Nr   rK   r   r   )tupler   r   r   rE   7  rF   zfrc_plot.<locals>.<lambda>T)keyr   c                 S   s   g | ]}|d  qS r   r   r   r   r   r   r   r   8  s     zfrc_plot.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r   r   r   r   r   r   9  s           Y@
html_savercoordz	FRCurve ()c                 S   s   g | ]}t |qS r   r   r   r   r   r   r   X  s     zFeature spacezGenome coverage (%)d   )r   r   r   r   )r}   re   r   r   r   r   r   r%   r   r   r   r{   r   r   r   html_reportquast_libs.html_saverr   
save_coordr   )"results_dir	ref_fpathr   Zcontigs_aligned_lengthsZfeatures_in_contigs_by_filerq   r   r   rH   Z
ref_lengthjson_vals_xjson_vals_yZmax_featuresZaligned_contigs_fpathsr   Zaligned_lengthsr   Zlen_with_zero_featuresr   Znon_zero_feature_in_contigsr   ZfeatureZoptimal_sorted_tuplesZsorted_lengthsZsorted_featuresr   r   Z
features_nZfeatures_cntZcumulative_lenr   r   r   r^   r   r   r   frc_plot  sv    




 




 r   Nxc              	   C   s  t rtd| d  g }g }g }	tt||D ]\}
\}}|sX|g  |	g  q0|jdd dg}|d g}dg}|d g}d}t|}|r||
 }d}|rtj	}|D ]}||7 }|d | }t r||d d	  || || || |d | |kst
|d
kr||d d	  || || || q|| |	| t r0||d d	  |d ||d d	  |d t|\}}|t|||| q0tjrddlm} || ||	d| | t sd S dd |D }t||||ddddgd d S )Nr    plot...Tr   g        r   r   r   g|=r   r   r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     s     zNx_plot.<locals>.<listcomp>rC   zContig lengthr   r   )r}   re   r   	enumerater   r   sortr   r   min_differencer|   r   r   r   r   r   r   r   )r   Zreduce_pointsr   r   rq   r   Zreference_lengthsr   r   r   idr   r   Zvals_xZvals_yZvals_NxZvals_lZlcurZlsumr   r   rC   r   r   r   r^   r   r   r   Nx_plot^  sf    












r   c              	   C   s   t r
tjrd S d}td| d  g }|}| r:|| g }t|D ]p\}\}}	t|	D ]\}
}|dkrVd|	|
< qV| r|t|d krt}t}nt	|| \}}|
t||	|| qBdd |D }| r|d	g7 }t||||d
dddgd d S )Nz
GC contentr   r   r   皙?r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     s     z#GC_content_plot.<locals>.<listcomp>r   GC (%)z	# windowsr   r   )r}   r   no_gcre   r   r   r|   r   r   r   r   r   r   )r   r   Zlist_of_GC_distributionsrq   r   r   Z
all_fpathsiZGC_distribution_xZGC_distribution_yZid2vr   r   r^   r   r   r   GC_content_plot  s*    



r   c              	   C   s   t r
tjrd S t| d }td| d  g }t| \}}|\}}t||D ]\}	}
|t	|	|
|dd qNt| g}t
||||dddd	gd
 d S )Nz GC contentr   r   r:   r0   r   z	# contigsr   r   r   )r}   r   r   r   re   r   r   r   r   r+   r   )r   ZGC_distributionsrq   r   r   r   r   r   r   ZGC_xZGC_yr^   r   r   r   contigs_GC_content_plot  s    

r   c                 C   s  t sd S td| d  g }d}|D ]}|| }ttt|d }	dg}
d}|D ]}||7 }|
| qTt|	dkrt|	d |}t|\}}|t	|	|
|| q&| r|t	d|g| | gt
t d| }dd |D }| r|d	g7 }t||||d
|d d S )Nr   z cumulative plot...r   r   r   zCumulative # complete c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     s     z&genes_operons_plot.<locals>.<listcomp>r   r   )r   r   )r}   re   r   r6   r{   r|   r   r%   r   r   r   r   r   )Zreference_valuer   Zfiles_feature_in_contigsrq   r   r   r   r   r   r   r   Z
total_fullZfeature_amountr   r   r^   r   r   r   genes_operons_plot  s0    
r   c                 C   s  t sd S t| dk r*td| d  d S td| d  g }t|d }t|ddd }	d }
|	|kr|	dkrtd	tt|	d	}
qd
}
ntd	tt|	| d	}
|st||
 d |
 }|st	|	|
 d
 |
 }d}|d }|d }t
t| |D ]R\}\}}t|\}}|tkr.d}nd}|t||| |  ||||d qdd | D }t||||d|dd||t|   |t| d
   gt|d|gd	 d S )Nrv   z  Skipping drawing z< histogram... (less than 2 columns histogram makes no sense)r   z histogram...r   Tr   r   r   r:   333333?r[   r   rC   )r0   r2   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     s     zhistogram.<locals>.<listcomp>)r   r   r=   r   r   )r}   r|   re   r   r   ry   powZfloorrQ   rz   r   r   r   primary_line_styler   r+   r   r%   )r   r   rq   r   yaxis_titleZbottom_valueZ	top_valuer   Z	min_valueZ	max_valueZexponentr0   ZintervalZ	start_posr   r   valr   r   r2   r^   r   r   r   	histogram  sB    
("r   c	                    s  t sd S td| d  g }	d}
tdd |D }ttd|}d}|g| }|rn|rn||d  d|d	<  fd
d|D }rdd |D }d|d< d|d< tt| |D ]\}\}}tt||
}
t	|\}}|rHt|||D ]F\}}}|dkr|	t
||||ddd q|	t
||||d q|	t
dd|d q||d	  dd |D }|d	  d7  < |	t||d d	 dd||d qtdt|d }|d d | }|d d | }r|dd |r<r|   d n|  d fdd|D }|d t| }| |t| tt|d dd	D ]N}|| ||d   }}|d |krP|d8 }||| ||d qjqPdd | D }d}d}t|||	|||ddt|gd|
d g|d 
 d S )!Nr   ...r   c                 s   s   | ]}t |V  qd S r   r|   )r   r   r   r   r   r   ,  s     z%coverage_histogram.<locals>.<genexpr>rK   r   r   r   c                    s   g | ]}t |   qS r   )strr   r.   )bin_sizelow_thresholdr   r   r   3  s     z&coverage_histogram.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r   r   r   r   r   r   5  s     rv   z#595959rC   )r0   r3   r2   r   )r   c                 S   s   g | ]}|d  qS )rV   r   r   r   r   r   r   E  s     or[   )r   r   r   r   r   r   c                    s   g | ]}| k r|qS r   r   r   rC   )	last_tickr   r   r   T  s      r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r   _  s     zCoverage depth (x)zTotal lengthTrt   )r   r   r=   r   r   r   )r}   re   r   r%   r6   r{   r   r   r   r   r+   r   r|   insertr   r   )r   r   rq   r   r   Z	draw_barsZmax_covr   Zhigh_thresholdr   rH   r   r   	bar_widthZ
bar_widthsZx_ticks_labelsr   r   r   r   r   r.   r/   Zplot_x_valsZx_factorr   r   Zprev_valr^   rR   rG   r   )r   r   r   r   coverage_histogram#  sr    

$

 
 r   c                    s  t r|
d| d  g }t|}t|}d}g  g g }g t|D ]g }g }ttd|d }t|D ]|  d|d d   7  < ||  |  r|  dkr|t|   ql|	r|d ql|d  ql | | qFg }t|D ]fdd	t|D fd
d	ttD }|sR|	r |tttd d t  ||  qg }g }t	j
stt|||dd dfdd	tdD \}}t|D ] fdd	ttD }fdd	ttD t|t}td | \}}|t||dddd t	j
s|| | qdd	 |D }t	j
rtt|||dd dfdd	tdD \}}t|D ]R fdd	ttD }fdd	ttD || | qt	jrV| rVddlm} || ||||dd|| t r|}t|||||dd g| ddt|d gd!|
d" d S )#Nr   z metaQUAST summary plot...r   r   Q?rV   -c                    s(   g | ] }t  | k r |  qS r   r   r   jarr_yr   r   r   r     s      z*draw_meta_summary_plot.<locals>.<listcomp>c                    s    g | ]} | d k	r | qS r   r   )r   k)points_yr   r   r     s      rK   c                 S   s   | d S Nr   r   rC   r   r   r   rE     rF   z(draw_meta_summary_plot.<locals>.<lambda>)r   r   c                    s   g | ]  fd dD qS )c                    s   g | ]}|  qS r   r   r   r   r   r   r     s     5draw_meta_summary_plot.<locals>.<listcomp>.<listcomp>r   r   sorted_valuesr   r   r     s     r[   c                    s   g | ]}  | qS r   r   r   r   arr_xr   r   r   r     s     c                    s   g | ]} |  qS r   r   r   arr_y_by_refsr   r   r   r     s     Zdottedr      )r   r   r   r   c                 S   s   g | ]}|qS r   r   )r   rr   r   r   r     s     c                 S   s   | d S r   r   r   r   r   r   rE     rF   c                    s   g | ]  fd dD qS )c                    s   g | ]}|  qS r   r   r   r   r   r   r     s     r   r   r   r   r   r   r     s     c                    s   g | ]}  | qS r   r   r   r   r   r   r     s     c                    s   g | ]} |  qS r   r   r   r   r   r   r     s     r    _Tr   F)r   rN   r   r   r   r   re   )r}   r   r|   r{   r6   r   r   r   filterr   Zuse_input_ref_orderr   r   r%   r   r   r   r   r   Zsave_meta_summaryreplacer   )Z
html_fpathZoutput_dirpathlabels	ref_namesresultsrq   r   r   r   Zprint_all_refsre   r   Zref_numcontigs_numrH   Zmean_valuesZ	to_plot_xZ	to_plot_yZarrZselected_refssignificant_points_yjson_points_xjson_points_ypoints_xr   r   Zrefs_for_htmlr   r^   r   )r   r   r   r   r   r   r   r   draw_meta_summary_ploth  s     

$


    r   c                    s  t rtd| d  g }t|}t|dtd krF|d d d }tjjtjjtjjg g }d}t	t
d|d }	d}
g }g }t
|D ]}d}g }d}t|dkr\|t k r\| | | r| | | | nd }|rR|dkrR|t| t r6|t|	| |d t| |
dd	 || t|d }||	|  ||d  |d7 }qt
|t D ]}| | | | }|rj|dkrj|t| t r|t|	| |d
 t| |
dt|d d
 d || |t|d
 7 }||	|  ||d
  qj|r t||}qt
t D ]}||	|  |d q,qt rt|} fddt|D }t||||ddg| dd|d gdtd
 ||fS )Nz3  Drawing metaQUAST summary misassemblies plot for r   x   r   r   r   r   center)r0   r4   r   )r0   r4   r1   c                    s   g | ]} | qS r   r   r   misassembliesr   r   r     s     z8draw_meta_summary_misassemblies_plot.<locals>.<listcomp>Tr   F)rN   r   r   r   r   re   )r}   meta_loggerr   r|   r	   FieldsMIS_RELOCATIONMIS_TRANSLOCATIONMIS_INVERTIONr6   r{   r   floatr+   r   r   r%   setr   r   )r   r   Z
contig_numrq   r   r   Zrefs_numlegend_nrH   r   r   r   r   r   yZto_plottype_misassemblyresultr   r^   r   r  r   $draw_meta_summary_misassemblies_plot  sh     $

2

  r  c                    s  t sd S td g }t| }g }t|D ]||  tjj	 q*tjj
tjjtjjtjjgg }ttdt| d }g  g tt| D ]X dd ttD  dd ttD  d}	d}
t  dkrj|
tk rj|  |
 }|r`|dkr`t| |
< | d|
td	      |
< ||
 t|}	|
d7 }
qt|
tD ]r|   }|rx|dkrxt| < | dtd	      < | |	t|7 }	qxqttD ]^ fd
dt|D }fddt|D }|r|r|t||t ddd qtt| D ]
 rffddttD }fddttD }t|dkrfd}
||
 dkr|
d7 }
q| dtd	   }|t|||
 td ddd |
d7 }
t|
t D ]B| dkr,|t|| t ddt|d  d q,qft|}fddt|D }t||||dg| d|d gd d S )Nz(  Drawing misassemblies by types plot...r   c                 S   s   g | ]}d qS r   r   r   r   r   r   r     s     z+draw_misassemblies_plot.<locals>.<listcomp>c                 S   s   g | ]}d qS r   r   r   r   r   r   r     s     r   r   r   rV   c                    s(   g | ] } |  d kr |  qS r   r   r   )r   r   r   r   r     s      c                    s(   g | ] } |  d kr |  qS r   r   r   r   r   r   r     s      g?r   )r   r0   r4   c                    s   g | ]}  | qS r   r   r   r   r   r   r   r     s     c                    s(   g | ] }  | d kr  | qS r   r   r   r  r   r   r      s      )r   r0   r4   r1   c                    s   g | ]} | qS r   r   r   r  r   r   r   -  s     r   )r   r   )r}   re   r   r|   r{   r   Z	get_fieldr	   r  NAMEr  r  r  ZMIS_ISTRANSLOCATIONSr6   r  r+   r   r   r	  r   r   )Zreportsrq   r   r   r   r   r   r
  Z
main_arr_xr  r  r  r   r   r   Zpoint_xr^   r   )r   r   r   r   r  r   draw_misassemblies_plot  sr    
 $

$
 
 6r  c              
      s  t rt|dkrd S d}d}d}d}d}|| }	t|}
ttd | | | }|
|	 d|  }|| t  }tj||fd	}tjdt td t	dt d dt    dtd|	 |  | 
dd  t	dt d dt    d| |d dd  }dd |dd  D }dd |dd  D }tj||| fdd dd  D ddddd t| t  d S )Nr   g      (@r   g      $@r   g{Gz?r   rv   )Zfigsizers   ZoffrV   r   rK   r   r   c                 S   s   g | ]}|d  qS r   r   r   itemr   r   r   r   Q  s     z%draw_report_table.<locals>.<listcomp>c                 S   s   g | ]}|d d qS )r   Nr   r  r   r   r   r   R  s     c                    s   g | ]}t |t  qS r   )r  r   )r   Zcolumn_widthcolumn_widthsr   r   r   T  s     leftr   right)ZcellText	rowLabels	colLabelsZ	colWidthsZrowLocZcolLocZcellLocrW   )rs   )r}   r|   r  rs   r   r!   rn   rw   Zaxistextr   
capitalizetablerg   r   rl   )Zreport_nameZ
extra_infoZtable_to_drawr  Z	font_sizeZ
font_scaleZexternal_font_scaleZletter_height_coeffZletter_width_coeffZ
row_heightZnrowsZexternal_text_heightZtotal_heightZtotal_widthrn   r  r  Z
restValuesr   r  r   draw_report_table1  s@    
 &
   
r  c                 C   sV   t r| sd S ttr*td gtd d  atjrBtt| fgd nt|  g ag ad S )Nr   rv   )r}   r|   rg   r   r   r   rp   ri   )rm   r   r   r   fill_all_pdf_fileZ  s    r  )F)FF)NF)r   N)r   r   NN)r   NNNNN)r   )r   r   )KZ
__future__r   rs   r#   r   Zsecondary_line_styler_   rM   r~   rS   r   r   rT   ry   sysZ
quast_libsr   r   r	   Zquast_libs.logr
   r   Zquast_libs.qutilsr   r   r   Zquast_libs.plotter_datar   r   Zmain_loggerZLOGGER_DEFAULT_NAMEre   ZLOGGER_META_NAMEr  r}   Z
draw_plotsr;   Zuse__version__
startswithr   rf   stderropenZmatplotlib.pyplotZpyplotr!   Zmatplotlib.tickerr]   ri   rg   objectr   r+   r@   rJ   rP   rU   r`   rp   rr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   <module>   s   








     
%'D
?!%  
.    
E  
O
9
A)