ó
ÒÚ0Ic           @   s  d  d l  Z  d  d l Z d  d l m Z m Z e  j d d ƒ Z d „  Z d „  Z d e j f d „  ƒ  YZ	 e	 ƒ  Z
 d	 „  Z d
 d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d „  Z e j d e j ƒ Z d „  Z e j d e j ƒ Z d „  Z d „  Z d S(   iÿÿÿÿN(   t   Seqt   Alphabets    abcdefghijklmnopqrstuvwxyzX}()<>s    ABCDEFGHIJKLMNOPQRSTUVW.YZ.]{}^$c         C   sï   |  d  d k } |  j  d d ƒ } | j t d ƒ } | rm | j d ƒ } d | d | !d | | d	 } n  | d
 d k r¬ | j d ƒ } | |  d | | d
 !d } n? | d d k rë | j d ƒ } | |  d | | d !d } n  | S(   s1   convert a valid Prosite pattern into an re stringi   s   [<t   {s   [^s   -.t   ]s   (?:^|[s   ])i   iþÿÿÿs   $]t   [s   (?:s   ]|$)iýÿÿÿs   $]$s   ]|$)$(   t   replacet	   translatet   _prosite_transt   indext   rindex(   t   patternt   flgt   st   i(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   prosite_to_re>   s    $  c         C   sQ  |  d  d k } |  j  d d ƒ } | j t d ƒ } | rm | j d ƒ } d | d | !d | | d	 } n  | d
 d k r¬ | j d ƒ } | |  d | | d
 !d } n  | d d k rë | j d ƒ } | |  d | | d !d } n  | d	  d k rd | d	 } n
 d | } | d d k r7| d  d } n
 | d } | j  d d ƒ S(   sD   convert a valid Prosite pattern into an re with groups for each termi   s   [<R   s   [^t   .R   s   (?:^|[s   ])i   iþÿÿÿs   $]R   s   (?:s   ]|$)iýÿÿÿs   $]$s   ]|$)$t   ^s   ^(t   (iÿÿÿÿt   $s   )$t   )t   -s   )((   R   R   R   R   R	   (   R
   R   R   R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   prosite_to_grouped_reR   s&    $  

t   PrositeAlphabetc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR   s   s   c         C   s(   t  |  ƒ s t d ƒ ‚ n  t d |  ƒ S(   Ns   not a legal prosite patternR
   (   t   verify_patternt	   TypeErrort   Prosite(   R
   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   compilew   s    R   c           B   sz   e  Z e Z d d d  „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d d d	 „ Z d d d
 „ Z RS(   c         C   sn   | d  k o | d  k	 | d  k	 o* | d  k As: t d ƒ ‚ | d  k	 rR | |  _ n  | d  k	 rj | |  _ n  d  S(   Ns5   one and only one of pattern and data can have a value(   t   Nonet   AssertionErrorR
   t   data(   t   selfR
   R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __init__‚   s    	c         C   s   d t  t |  ƒ ƒ S(   Ns   Prosite(%s)(   t   reprt   str(   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __repr__‹   s    c         C   s   d j  t t |  j ƒ ƒ d S(   NR   R   (   t   joint   mapR#   R   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __str__   s    c         C   s   t  |  j ƒ S(   N(   t   lenR   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __len__   s    c         C   s   |  j  | S(   N(   R   (   R    R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __getitem__   s    c         C   s5   t  | d ƒ } t  | d ƒ } t d |  j | | !ƒ S(   Ni    R   (   t   maxR   R   (   R    R   t   j(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __getslice__‘   s     c         C   s³   | d k r. t  j t |  j ƒ ƒ |  _  |  j  S| d k r\ t  j t |  j ƒ ƒ |  _ |  j S| d k r t |  j ƒ |  _ |  j S| d k r£ t |  ƒ |  _ |  j St	 | ƒ ‚ d  S(   Nt   ret
   grouped_reR   R
   (
   R.   R   R   R
   R   R/   t
   find_termsR   R#   t   AttributeError(   R    t   name(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   __getattr__”   s    c         C   s
   t  |  ƒ S(   N(   R#   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   tostring¤   s    i    c         C   sn   | d  k	 r0 |  j j t | j ƒ | | ƒ } n |  j j t | j ƒ | ƒ } | d  k r^ d  St |  | | ƒ S(   N(   R   R/   t   searcht   bufferR   t   PrositeMatch(   R    t   seqt   post   endpost   m(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR5   §   s    $c         C   sn   | d  k	 r0 |  j j t | j ƒ | | ƒ } n |  j j t | j ƒ | ƒ } | d  k r^ d  St |  | | ƒ S(   N(   R   R/   t   matchR6   R   R7   (   R    R8   R9   R:   R;   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR<   ¯   s    $N(   R   R   t   prosite_alphabett   alphabetR   R!   R$   R'   R)   R*   R-   R3   R4   R5   R<   (    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR   |   s   								t   PrositeTermc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c	   	      C   sL   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   letterst   ignoret   is_begint   is_endt	   min_countt	   max_countt	   can_begint   can_end(	   R    R@   RA   RB   RC   RD   RE   RF   RG   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR!   ¿   s    							c      	   C   s7   t  |  j |  j |  j |  j |  j |  j |  j |  j ƒ S(   N(	   R?   R@   RA   RB   RC   RD   RE   RF   RG   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   copyÉ   s    c         C   sx   |  j  ƒ  } |  j |  j k rD |  j d k r0 q^ | d |  j } n | d |  j |  j f } |  j rt | d } n  | S(   Ni   s   (%d)s   (%d,%d)t   >(   t   base_strRD   RE   RC   (   R    R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR'   Í   s    	c         C   sÃ   |  j  r d } n d } |  j r9 | d |  j d } n† t |  j ƒ d k rr |  j rr |  j rr | |  j } nM | d } |  j r’ | d } n  | |  j } |  j rµ | d } n  | d } | S(	   Nt   <t    R   t   }i   R   RI   R   (   RB   RA   R@   R(   RF   RG   (   R    R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRJ   Ü   s     			
		
(   R   R   R!   RH   R'   RJ   (    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR?   ¾   s   	
		R7   c           B   s†   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d	 „ Z
 d d
 „ Z d „  Z d d „ Z d „  Z RS(   c         C   sU   | |  _  | |  _ | |  _ | j |  _ | j |  _ | j d ƒ |  _ | j |  _ d  S(   Ni    (   t   prositeR8   R<   R9   R:   t   groupR   R>   (   R    RN   R8   R<   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR!   ÷   s    			c         C   s   d t  |  ƒ S(   Ns   <PrositeMatch instance at %x>(   t   id(   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR$     s    c         C   s   t  |  j ƒ S(   N(   R#   R   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR'     s    c         C   s   t  |  j ƒ S(   N(   R(   R   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR)     s    c         C   s   |  j  | S(   N(   R   (   R    R   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR*     s    c         C   s8   t  | d ƒ } t  | d ƒ } t |  j | | !|  j ƒ S(   Ni    (   R+   R    R   R>   (   R    R   R,   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR-   	  s     c         C   sˆ   g  } d } |  j  d ƒ } yU xN |  j j | d ƒ } x' | | k  r` | j | ƒ | d } q: W| d } q! WWn t k
 rƒ n X| S(   s  return a list of numbers mapping to items of the original pattern

        For example, if the Prosite pattern is "[AP](2)-D." matched against
        "PAD", then the mapping is [1, 1, 2], meaning the first character
        of the match ("P") is from the first Prosite group ("[AP]"), as
        is the second letter ("A").  The 3rd letter ("D") is mapped to
        group 2 of the pattern.
        i    i   (   t   startR<   t   endt   appendt
   IndexError(   R    t   valsR   RQ   RR   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   mapping  s    
c         C   s   t  |  j |  j ƒ  ƒ S(   sü  returns the specific Prosite pattern used to find this sequence

        >>> p = Prosite.compile("[AP](2,3)-D.")
        >>> m = p.search(Seq.Seq("PAD"))
        >>> mapping = m.mapping()
        >>> mapped = m.mapped_pattern()
        >>> print str(m[1]), str(p[mapping[1]]), str(mapped[1])
        P [AP](2,3) [AP]
        >>> print str(mapped)
        [AP]-[AP]-D.
        >>> 

        Note that the original term includes the count, while the
        mapped pattern does the expansion.
        
        (   t   pattern_mappingRN   RV   (   R    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   mapped_pattern%  s    i    c         C   s   |  j  j | ƒ S(   N(   R<   RQ   (   R    t   g(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRQ   8  s    c         C   s   |  j  j | ƒ S(   N(   R<   RR   (   R    RY   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRR   :  s    c         C   s   |  j  j | ƒ S(   N(   R<   t   span(   R    RY   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRZ   <  s    c         C   sO   g  } |  j  } x3 |  j j | ƒ D] } | j t j | | ƒ ƒ q" Wt | ƒ S(   N(   R>   R<   t   groupsRS   R    t   tuple(   R    t   defaultt   resultR>   RY   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR[   >  s
    	c         G   s„   |  j  j | Œ  } | d k r" | St | ƒ d k rG t j | |  j ƒ Sg  } x* | D]" } | j t j | |  j ƒ ƒ qT Wt | ƒ S(   Ni   (    (   R<   RO   R(   R    R>   RS   R\   (   R    R[   R^   t   retvalt   x(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRO   D  s     N(   R   R   R!   R$   R'   R)   R*   R-   RV   RX   RQ   RR   RZ   R   R[   RO   (    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR7   ö   s   									c         C   sQ   g  } x; | D]3 } |  | j  ƒ  } d | _ | _ | j | ƒ q Wt d | ƒ S(   Ni   R   (   RH   RD   RE   RS   R   (   RN   RV   R   R   R`   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyRW   O  s    s  
(?:
  ([ABCDEFGHIKLMNPQRSTVWXYZx])|              # a character OR
  \[(<?)([ABCDEFGHIKLMNPQRSTVWXYZ]+)(>?)\]|  # something in []s OR
  \{([ABCDEFGHIKLMNPQRSTVWXYZ]+)\}           # something in {}s
)(?:\((\d+)(,\d+)?\))?   # optional count of the form "(i,j)", ",j" optional
$
c         C   s¦  |  d d k r t  d ƒ ‚ n  |  d  }  |  j d ƒ } g  } d } x[| D]S} d } } | d  d k r~ | d } d } n d } | d d k r§ | d  } d } n d } t j | ƒ }	 |	 d  k rá t  d	 t | ƒ ƒ ‚ n  |	 j d ƒ d  k	 rd }
 |	 j d ƒ } nô |	 j d
 ƒ d  k	 r¿d }
 |	 j d
 ƒ } |	 j d ƒ rud } | d k rut  d t | ƒ ƒ ‚ qun  |	 j d ƒ rd } | t | ƒ d k r¼t  d t | ƒ ƒ ‚ q¼qnC |	 j d ƒ d  k	 rìd }
 |	 j d ƒ } n t  d t | ƒ ƒ ‚ |	 j d ƒ d  k	 r/t |	 j d ƒ ƒ } n d } |	 j d ƒ d  k	 rft |	 j d ƒ d ƒ } n | } | j	 t
 | |
 | | | | | | ƒ ƒ | d } qK W| S(   NiÿÿÿÿR   s)   not a prosite pattern - needs a final '.'R   i    i   RK   RI   s   not a Prosite term (%s)i   i   s$   [<] only allowed for first term (%s)i   s#   [>] only allowed for last term (%s)i   s   not a prosite term (%s)i   i   (   R   t   splitt   prosite_term_reR<   R   R"   RO   R(   t   intRS   R?   (   R
   t   termsR^   R   t   termRF   RG   RB   RC   R<   RA   R@   RD   RE   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR0   b  sd    


	
		sõ  
^<?                   # starts with an optional "<"
(
  [ABCDEFGHIKLMNPQRSTVWXYZx]|             # a character OR
  (\[<?[ABCDEFGHIKLMNPQRSTVWXYZ]+>?\])|   # something in []s OR
  \{[ABCDEFGHIKLMNPQRSTVWXYZ]+\}          # something in {}s
)(\(\d+(,\d+)?\))?    # optional count of the form "(i,j)" (",j" is optional)
(-                    # new terms seperated by a '-'
 (
  [ABCDEFGHIKLMNPQRSTVWXYZx]|             # a character OR
  \[[ABCDEFGHIKLMNPQRSTVWXYZ]+>?\]|       # something in []s OR
  \{[ABCDEFGHIKLMNPQRSTVWXYZ]+\}          # something in {}s
 )(\(\d+(,\d+)?\))?   # optional count
)*                    # repeat until done
>?                    # pattern ends with an optional ">"
\.$                   # description ends with a required "."
c         C   sh   t  j |  ƒ } | d k r d S|  j d d ƒ d k r; d S|  j d d t |  ƒ d ƒ d k rd d Sd S(   sA   returns 1 if the Prosite pattern is syntactically correct, else 0i    s   [<i   iÿÿÿÿs   >]i   N(   t
   prosite_reR<   R   t   findR(   (   R
   R`   (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyR   Á  s    %c         C   s  d } xõ |  j  ƒ  } | s Pn  | d  d k r5 q	 n  | | d d !} | d d k r	 yx d d	 GH| GHt | ƒ } t | ƒ GHt | j ƒ GHt | ƒ GHt | j ƒ GHt | ƒ } | | k rÍ d
 G| G| GHn  Wn  t k
 rð } d G| G| GHn Xd } q	 q	 Wd S(   s.   verify the patterns from a Prosite file handleRL   i   t   PAi   iÿÿÿÿiþÿÿÿR   t   *i<   t   DIFFERt   PROBLEMN(	   t   readlineR   R   R"   R.   R   R/   R#   R   (   t   infileR
   t   linet   pRd   t   msg(    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   _verify_testÍ  s.    	(    (    (    (   t   stringR.   t   BioR    R   t	   maketransR   R   R   R   R=   R   R   R?   R7   RW   t   VERBOSERb   R0   Rf   R   Rq   (    (    (    s†   /oak/stanford/groups/akundaje/marinovg/programs/biopython-1.50.tar.gz/biopython-1.50/build/lib.linux-x86_64-2.7/Bio/Prosite/Pattern.pyt   <module>3   s&   				!		B8Y		L	