B
    b                  @   s   d Z ddlZddlZddlZddlmZ dddgZdZdZd	Z	G d
d de
ZG dd deZG dd deZG dd dZedZdd Zdd ZdddZdd Zdd Zedkre  e  dS )av  Run and process output from the Wise2 package tool psw.

Bio.Wise contains modules for running and processing the output of
some of the models in the Wise2 package by Ewan Birney available from:
ftp://ftp.ebi.ac.uk/pub/software/unix/wise2/
http://www.ebi.ac.uk/Wise2/

Bio.Wise.psw is for protein Smith-Waterman alignments
Bio.Wise.dnal is for Smith-Waterman DNA alignments
    N)WiseZpswz-lz-Fz-gz-ez-mc               @   s   e Zd ZdZdS )AlignmentColumnFullExceptionz)Manage exception in the alignment output.N)__name__
__module____qualname____doc__ r   r   +lib/python3.7/site-packages/Bio/Wise/psw.pyr       s   r   c               @   s   e Zd ZdZdd ZdS )	AlignmentzFDefine a container for all alignment Columns, output from running psw.c             C   s^   y| d  | W nF tk
r6   t | t| Y n$ tk
rX   t | t| Y nX dS )z%Add an alignment Column to Alignment.N)appendr   listAlignmentColumn
IndexError)selfcolumn_unitr   r   r	   r   )   s    zAlignment.appendN)r   r   r   r   r   r   r   r   r	   r
   &   s   r
   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )r   z6Define a container for the units that made the Column.c             C   s   | j dkr|j | _ d S )NZSEQUENCE)kind)r   r   r   r   r	   	_set_kind6   s    
zAlignmentColumn._set_kindc             C   s,   |j dkst|j| _t| |jdg dS )zInitialize the class.r   N)unitAssertionErrorr   r   __init__column)r   r   r   r   r	   r   :   s    zAlignmentColumn.__init__c             C   s   d| j | d | d f S )z?Represent the AlignmentColumn object as a string for debugging.z
%s(%r, %r)r      )r   )r   r   r   r	   __repr__@   s    zAlignmentColumn.__repr__c             C   s6   | d dk	rt |jdkst| | |j| d< dS )zAdd a unit to the Column.r   N)r   r   r   r   r   )r   r   r   r   r	   r   D   s
    
zAlignmentColumn.appendN)r   r   r   r   r   r   r   r   r   r   r   r	   r   3   s
   r   c               @   s    e Zd ZdZdd Zdd ZdS )
ColumnUnitz>Define a container for the details of each sequence alignment.c             C   s   || _ || _|| _dS )zInitialize the class.N)r   r   r   )r   r   r   r   r   r   r	   r   R   s    zColumnUnit.__init__c             C   s   d| j | j| jf S )z:Represent the ColumnUnit object as a string for debugging.z'ColumnUnit(unit=%r, column=%r, kind=%r))r   r   r   )r   r   r   r	   r   X   s    zColumnUnit.__repr__N)r   r   r   r   r   r   r   r   r   r	   r   O   s   r   z1^Unit +([01])- \[ *(-?\d+)- *(-?\d+)\] \[(\w+)\]$c             C   s<   t |  }|sdS tt|dt|d|dS )a  Parse a line from psw.

    >>> print(parse_line("Column 0:"))
    None
    >>> parse_line("Unit  0- [  -1-   0] [SEQUENCE]")
    ColumnUnit(unit=0, column=0, kind='SEQUENCE')
    >>> parse_line("Unit  1- [  85-  86] [SEQUENCE]")
    ColumnUnit(unit=1, column=86, kind='SEQUENCE')
    Nr         )_re_unitmatchrstripr   intgroup)liner   r   r   r	   
parse_lined   s    
r#   c          	   C   sZ   t  }xN| D ]F}ytjd r$t| W n tk
r:   Y nX t|}|r|| qW |S )zParse a file.

    format

    Column 0:
    Unit  0- [  -1-   0] [SEQUENCE]
    Unit  1- [  85-  86] [SEQUENCE]

    means that seq1[0] == seq2[86] (0-based)
    ZWISE_PY_DEBUG)r
   osenvironprintKeyErrorr#   r   )iterableZ	alignmentr"   r   r   r   r	   parsev   s    

r)   c             O   sf   t dd }|r|t|f |r4|tt|f |rJ|tt|f tj|| f||}t|S )z*Align a pair of DNA files using Wise2 psw.N)	_CMDLINE_PSWextend_OPTION_SCORES_OPTION_GAP_STARTstr_OPTION_GAP_EXTENSIONr   alignr)   )ZpairZscoresZ	gap_startZgap_extensionargskeywdsZcmdlineZ	temp_filer   r   r	   r0      s    r0   c               C   s   t ttjdd  dS )zCommand line implementation.r   r   N)r&   r0   sysargvr   r   r   r	   main   s    r5   c              O   s$   dd l }|jtjt f| | d S )Nr   )doctestZtestmodr3   modulesr   )r1   r2   r6   r   r   r	   _test   s    r8   __main__)NNN)r   r$   rer3   ZBior   r*   r-   r/   r,   	Exceptionr   r   r
   r   r   compiler   r#   r)   r0   r5   r8   r   r   r   r   r	   <module>   s*   


