3
h}\                 @   s   d dl Z d dlZd dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZmZ dd
lmZmZ ddl m!Z!m"Z" dd Z#dddZ$dd Z%dd Z&dd Z'dS )    N)OptionGroup)StringIO   )seq_io)SeqSeqListnucleic_alphabet)resource_filename)DeOptionParser)LogoOptionsLogoData
LogoFormatparse_priordescriptionrelease_description
formattersdefault_formatterstd_alphabets	std_units	std_sizesstd_color_schemesread_seq_data)
_seq_names_seq_formats)ColorSchemeSymbolColorc              C   s   t  } | jtjdd \}}|r0| jd|  |jrJt|j tjd y4t	|}t
||}|j}|||}|jjj| W nX tk
r } z td|tjd tjd W Y dd}~X n tk
r   tjd Y nX dS )zWebLogo command line interface r   NzUnparsable arguments: %s r   zError:)file   )_build_option_parser
parse_argssysargverrorservehttpd_serve_foreverportexit_build_logodata_build_logoformat	formatterfoutbufferwrite
ValueErrorprintstderrKeyboardInterrupt)parseroptsargsdataformatr)   logoerr r8   >/home/birch/.local/lib/python3.6/site-packages/weblogo/_cli.pymain?   s$    



r:     c       	      C   s   ddl j}ddl j}G dd d|j}tjdd}|tjtjjtjd  7 }|tj	d< t
tdt}tj| |}|j}|d| f|}td|   y|j  W n tk
r   tjd Y nX dS )	z# Start a webserver on a local port.r   Nc               @   s   e Zd Zdd Zdd ZdS )z1httpd_serve_forever.<locals>.__HTTPRequestHandlerc             S   s   d| _ | jdkrd| _dS dS )NFz/create.cgi 
create.cgiT)r<   r=   )Z	have_forkpathZcgi_info)selfr8   r8   r9   is_cgik   s
    
z8httpd_serve_forever.<locals>.__HTTPRequestHandler.is_cgic             S   s   dS )NTr8   )r?   r>   r8   r8   r9   	is_pythonr   s    z;httpd_serve_forever.<locals>.__HTTPRequestHandler.is_pythonN)__name__
__module____qualname__r@   rA   r8   r8   r8   r9   __HTTPRequestHandlerf   s   rE   
PYTHONPATHr<   htdocsz.WebLogo server running at http://localhost:%d/)Zhttp.serverserverCGIHTTPRequestHandlerosgetenvpathsepr>   abspathr    environr	   rB   __file__chdirZ
HTTPServerr.   Zserve_foreverr0   r&   )	r%   rH   Z	cgiserverrE   Z
pythonpathrG   ZHandlerClassZServerClassZhttpdr8   r8   r9   r$   `   s     



r$   c       
         s  d}| j }| jd kr,|d krTttjj }n(|d krLddlm} || j}ntdy$ddl	m
} |j|| jd}d}W nH tk
r } z,| jdkr|t|| jj| j| jd	 W Y d d }~X nX |r"| jrtd
| js| jr|j  | js| jr|j  t| j|j| j}tj|j||}n| js2| jrHtdd  D  j | jsX| jrtj jsntd j}	t _t fdd D  j |	 _t| j j| j}tj |}|S )NFr   )_from_URL_fileopenz2error: options --fin and --upload are incompatible)Motif)alphabetTZtransfac)rS   ignore_lower_casez@error: option --ignore-lower-case incompatible with matrix inputc             S   s   g | ]}|j  qS r8   )reverse).0sr8   r8   r9   
<listcomp>   s    z#_build_logodata.<locals>.<listcomp>z+non-nucleic sequence cannot be complementedc                s   g | ]}t | jj qS r8   )r   rS   
complement)rV   rW   )seqsr8   r9   rX      s    )finuploadr   r    stdinreadr<   rQ   r-   ZmatrixrR   Zread_transfacrS   input_parserr   rT   rU   revcomprY   r   compositionweightr   Zfrom_countsr   r   Z
alphabeticZ	from_seqs)
optionsZ
motif_flagr[   rQ   rR   ZmotifZ	motif_errZpriorr4   Zaaar8   )rZ   r9   r'      sR    

r'   c          '   C   s"  i }ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'g'}x|D ]}|j | ||< q\W |jrt }xN|jD ]D\}}}y|jjt||| W q tk
r   td(| Y qX qW ||d< |jr|jjd)|d< t	 }	x |j
 D ]\}
}t|	|
| qW t| |	}|S )*zO Extract and process relevant option values and return a
    LogoFormat object.rS   	unit_namefirst_index
logo_startlogo_endstack_widthstacks_per_line
logo_title
logo_label
show_xaxisxaxis_labelannotaterotate_numbersnumber_intervalyaxis_scale
show_yaxisyaxis_label	show_ends	fineprintyaxis_tic_intervalshow_errorbarsreverse_stackscolor_schemedefault_colorfontsizetitle_fontsizesmall_fontsizenumber_fontsize	text_font	logo_font
title_fontstack_aspect_ratio
show_boxes
resolutionscale_widthdebugerrorbar_fractionerrorbar_width_fractionerrorbar_grayz*error: option --color: invalid value: '%s',)__dict__colorsr   Zrulesappendr   r-   rn   splitr   itemssetattrr   )Zlogodatar2   r3   Zdirect_from_optskry   ZcolorsymbolsdescZlogooptionsavZ	theformatr8   r8   r9   r(      st    


r(   c              C   s  t  } tdttdd}t|d}t|d}t|dd}t|dd	}t|d
d}t|dd}t|dd}t|dd}	|j| |j| |j| |j| |j| |j| |j| |j|	 |jdddddd ddd |jddddd ddd |jd d!d"dd#tt d$d%j	t
  d&d'	 |jd(d)d*d+tjd,dd- |jd.d/d0dd#td&d1td2	 |jd3d4d5dd#td6d7d8 |jd9d:d5dd;d< |jd=d>d?dttj d@| jdAdBdC	 |jddDdEddFdGdHdId |jddJdKddLd dMdNd |jdOdPdQddRdSdTdUd |jdVdWdXddRdYdUdZ |jd[d\d]ddRd^dUdZ |jdd_d`daddbdc |jddddedaddfdc |jddgdhdaddidc |jddjdkdaddldc |jdmdndodd#tdp| jdqdr	 |jdsdtduddRdv| jdwdx |jdydzd{ddFd|| jd}dx |jdd~dddFd| jd}dx |jdddd| jddd |jdddddF| jdd}d |jdddddFd dd}d |jddddd| jddd |jdddddL| jd| j dNd |jdddddLddNdZ |jddddd| jddd |jdddddFdd}dZ |jdddd| jddd |jdddddF| jdd}d |jdddddL| j ddNd |jddddd| j!ddd |jddddd| j!ddd tt"j }
|
j#  |jddddd#t"dd dd%j	|
 dr	 |jddddddg dd |jddddd| j$ddÍ |jdddddL| j%d| j% dd |jdddddL| j&d| j& dd |jdddddL| j'd| j' dd |jdddddL| j(d| j( dd |jdddddF| j)d| j) dd |jdddddF| j)d| j* dd |jdddddF| j+d| j+ dd |jdddoddL| jd| j dd |jdddddL| j,d| j, dd |jddddddddd |jdddddLdddd |jddddddddd |jdddd| j-ddd |jdddddL| j.d| j. dNd |jdddddL| j/d| j/ dNd |jdddddL| j0d| j0 dNd |	jddddadddc |	jdddddRdddd |S (   Nz7%prog [options]  < sequence_data.fa > sequence_logo.epsF)usager   versionZadd_verbose_optionszInput/Output OptionszLogo Data OptionsZTransformationsz.Optional transformations of the sequence data.zLogo Format Optionsz9These options control the format and display of the logo.zColor OptionszEColors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etczFont Format Optionsz<These options provide control over the font sizes and types.zAdvanced Format Optionsz@These options provide fine control over the display of the logo.zWebLogo Serverz+Run a standalone webserver on a local port.z-fz--finr[   storeZfile_inz$Sequence input file (default: stdin)ZFILENAME)destactiontypedefaulthelpmetavarr<   z--uploadr\   zUpload input file from URLURL)r   r   r   r   r   z-Dz
--datatyper_   dictzHType of multiple sequence alignment or position weight matrix file: (%s)z, ZFORMAT)r   r   r   r   choicesr   r   z-oz--foutr*   Zfile_outzOutput file (default: stdout))r   r   r   r   r   z-Fz--formatr)   zIFormat of output: eps (default), png, png_print, pdf, jpeg, svg, logodata)r   r   r   r   r   r   r   z-Az--sequence-typerS   z5The type of sequence data: 'protein', 'rna' or 'dna'.ZTYPE)r   r   r   r   r   r   z-az
--alphabeta  The set of symbols to count, e.g. 'AGTC'. All characters not in the alphabet are ignored. If neither the alphabet nor sequence-type are specified then weblogo will examine the input data and make an educated guess. See also --sequence-type, --ignore-lower-case)r   r   r   z-Uz--unitsrd   choicezA unit of entropy ('bits' (default), 'nats', 'digits'), or a unit offree energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilitiesZUNIT)r   r   r   r   r   r   r   z--compositionra   stringautoa{  The expected composition of the sequences: 'auto' (default), 'equiprobable', 'none' (do not perform any compositional adjustment), a CG percentage, a species name (e.g. 'E. coli', 'H. sapiens'), or an explicit distribution (e.g. "{'A':10, 'C':40, 'G':40, 'T':10}"). The automatic option uses a typical distribution for proteins and equiprobable distribution for everything else. zCOMP.z--weightrb   floatz=The weight of prior data.  Default depends on alphabet lengthNUMBERz-iz--first-indexre   intr   z5Index of first position in sequence data (default: 1)ZINDEXz-lz--lowerrf   z"Lower bound of sequence to display)r   r   r   r   r   z-uz--upperrg   z"Upper bound of sequence to displayz--ignore-lower-caserT   
store_truezLDisregard lower case letters and only count upper case letters in sequences.)r   r   r   r   z	--reverserU   zreverse sequencesz--complementrY   zcomplement nucleic sequencesz	--revcompr`   z$reverse complement nucleic sequencesz-sz--sizerh   ZLOGOSIZEz=Specify a standard logo size (small, medium (default), large))r   r   r   r   r   r   r   z-nz--stacks-per-lineri   z@Maximum number of logo stacks per logo line. (default: %default)ZCOUNT)r   r   r   r   r   r   z-tz--titlerj   zLogo title text.ZTEXTz--labelrk   zA figure label, e.g. '2a'z-Xz--show-xaxisZbooleanzYES/NOz:Display sequence numbers along x-axis? (default: %default))r   r   r   r   r   z-xz--xlabelrm   zX-axis labelz
--annotatern   zzA comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.z--rotate-numbersro   zBDraw X-axis numbers with vertical orientation (default: %default).z--number-intervalrp   z0Distance between numbers on X-axis (default: %s)z-Sz--yaxisrq   zLHeight of yaxis in units. (Default: Maximum value with uninformative prior.)z-Yz--show-yaxisrr   z7Display entropy scale along y-axis? (default: %default))r   r   r   r   r   r   z-yz--ylabelrs   z5Y-axis label (default depends on plot type and units)z-Ez--show-endsz3Label the ends of the sequence? (default: %default)z-Pz--fineprintru   z)The fine print (default: weblogo version)z
--ticmarksrv   z-Distance between ticmarks (default: %default)z--errorbarsrw   z'Display error bars? (default: %default))r   r   r   r   r   r   z--reverse-stacksrx   z<Draw stacks with largest letters on top? (default: %default)z-cz--color-schemery   ZSCHEMEz$Specify a standard color scheme (%s)z-Cz--colorr   r   zCOLOR SYMBOLS DESCRIPTION    zRSpecify symbol colors, e.g. --color black AG 'Purine' --color red TC 'Pyrimidine' )r   r   r   nargsr   r   z--default-colorrz   ZCOLORz(Symbol color if not otherwise specified.)r   r   r   r   r   z
--fontsizer{   z.Regular text font size in points (default: %s)ZPOINTSz--title-fontsizer|   z,Title text font size in points (default: %s)z--small-fontsizer}   z,Small text font size in points (default: %s)z--number-fontsizer~   z.Axis numbers font size in points (default: %s)z--text-fontr   z%Specify font for labels (default: %s)ZFONTz--logo-fontr   z#Specify font for logo (default: %s)z--title-fontr   z$Specify font for title (default: %s)z-Wz--stack-widthz#Width of a logo stack (default: %s)z--aspect-ratior   z,Ratio of stack height to width (default: %s)z--boxr   z(Draw boxes around symbols? (default: no)z--resolutionr   `   zBitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.ZDPIz--scale-widthr   TzScale the visible stack width by the fraction of symbols in the column?  (I.e. columns with many gaps of unknowns are narrow.)  (Default: yes)z--debugz=Output additional diagnostic information. (Default: %default)z--errorbar-fractionr   z0Sets error bars display proportion (default: %s)z--errorbar-width-fractionr   z6Sets error bars width display proportion (default: %s)z--errorbar-grayr   z4Sets error bars' gray scale percentage (default: %s)z--server#   z>Start a standalone WebLogo server for creating sequence logos.z--portr%   i  z.Listen to this local port. (Default: %default)ZPORT)1r   r
   r   r   r   Zadd_option_group
add_optionr   r   joinr   r    stdoutr   r   r   listr   keysrd   r   rh   ri   rj   rk   rl   rm   ro   rp   rr   rt   ru   rv   rw   r   sortrz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   )defaultsr1   Zio_grpZdata_grpZ	trans_grpZ
format_grpZ	color_grpZfont_grpZadvanced_grpZ
server_grpZcolor_scheme_choicesr8   r8   r9   r     s4   











r   )r;   )(rJ   r    Zoptparser   ior   r<   r   seqr   r   r   utilsr	   Zutils.deoptparser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   Zcolorschemer   r   r:   r$   r'   r(   r   r8   r8   r8   r9   <module>,   s   <!
,9W