ó
a#nSc           @   sú   d  Z  d d l Z d d l m Z d d l m Z d d l Z d d d d d	 d
 d d d d d d f Z e	 g  e D] Z
 e j e
 ƒ ^ qr ƒ Z d e f d „  ƒ  YZ e d e d „ Z e d k rö d d l Z d e j f d „  ƒ  YZ e j ƒ  n  d S(   sÏ   Implementation of the RECAP algorithm from Lewell et al. JCICS *38* 511-522 (1998)

The published algorithm is implemented more or less without
modification. The results are returned as a hierarchy of nodes instead
of just as a set of fragments. The hope is that this will allow a bit
more flexibility in working with the results.

For example:
>>> m = Chem.MolFromSmiles('C1CC1Oc1ccccc1-c1ncc(OC)cc1')
>>> res = Recap.RecapDecompose(m)
>>> res
<Chem.Recap.RecapHierarchyNode object at 0x00CDB5D0>
>>> res.children.keys()
['[*]C1CC1', '[*]c1ccccc1-c1ncc(OC)cc1', '[*]c1ccc(OC)cn1', '[*]c1ccccc1OC1CC1']
>>> res.GetAllChildren().keys()
['[*]c1ccccc1[*]', '[*]C1CC1', '[*]c1ccccc1-c1ncc(OC)cc1', '[*]c1ccc(OC)cn1', '[*]c1ccccc1OC1CC1']


To get the standard set of RECAP results, use GetLeaves():
>>> leaves=res.GetLeaves()
>>> leaves.keys()
['[*]c1ccccc1[*]', '[*]c1ccc(OC)cn1', '[*]C1CC1']
>>> leaf = leaves['[*]C1CC1']
>>> leaf.mol
<Chem.rdchem.Mol object at 0x00CBE0F0>


iÿÿÿÿN(   t   Chem(   t   rdChemReactionss>   [#7;+0;D2,D3:1]!@C(!@=O)!@[#7;+0;D2,D3:2]>>[*][#7:1].[#7:2][*]sH   [C;!$(C([#7])[#7]):1](=!@[O:2])!@[#7;+0;!D1:3]>>[*][C:1]=[O:2].[*][#7:3]s2   [C:1](=!@[O:2])!@[O;+0:3]>>[*][C:1]=[O:2].[O:3][*]sG   [N;!D1;+0;!$(N-C=[#7,#8,#15,#16])](-!@[*:1])-!@[*:2]>>[*][*:1].[*:2][*]s*   [#7;R;D3;+0:1]-!@[*:2]>>[*][#7:1].[*:2][*]s-   [#6:1]-!@[O;+0]-!@[#6:2]>>[#6:1][*].[*][#6:2]s    [C:1]=!@[C:2]>>[C:1][*].[*][C:2]s#   [n;+0:1]-!@[C:2]>>[n:1][*].[C:2][*]s<   [O:3]=[C:4]-@[N;+0:1]-!@[C:2]>>[O:3]=[C:4]-[N:1][*].[C:2][*]s    [c:1]-!@[c:2]>>[c:1][*].[*][c:2]s#   [n;+0:1]-!@[c:2]>>[n:1][*].[*][c:2]sG   [#7;+0;D2,D3:1]-!@[S:2](=[O:3])=[O:4]>>[#7:1][*].[*][S:2](=[O:3])=[O:4]t   RecapHierarchyNodec           B   s_   e  Z d  Z d Z d Z d Z d Z d „  Z d „  Z	 d „  Z
 d „  Z e d „ Z d „  Z RS(   s1    This class is used to hold the Recap hiearchy
  c         C   s   | |  _  i  |  _ i  |  _ d  S(   N(   t   molt   childrent   parents(   t   selfR   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   __init__h   s    		c         C   sG   i  } x: |  j  j ƒ  D]) \ } } | | | <| j | d t ƒq W| S(   s4    returns a dictionary, keyed by SMILES, of children t   terminalOnly(   R   t	   iteritemst   _gacRecurset   False(   R   t   rest   smit   child(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   GetAllChildrenm   s
    
c         C   sY   i  } xL |  j  j ƒ  D]; \ } } t | j  ƒ s> | | | <q | j | d t ƒq W| S(   sA    returns a dictionary, keyed by SMILES, of leaf (terminal) nodes R   (   R   R	   t   lenR
   t   True(   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt	   GetLeavesu   s    c         C   sl   |  j  s |  g } nS g  } xJ |  j  j ƒ  D]9 } x0 | j ƒ  D]" } | | k r> | j | ƒ q> q> Wq+ W| S(   s[    returns all the nodes in the hierarchy tree that contain this
        node as a child
    (   R   t   valuest   getUltimateParentst   append(   R   R   t   pt   uP(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyR      s    	c         C   s[   xT |  j  j ƒ  D]C \ } } | s3 t | j  ƒ r@ | | | <n  | j | d | ƒq Wd  S(   NR   (   R   R	   R   R
   (   R   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyR
   �   s    c         C   s   i  |  _  i  |  _ d  |  _ d  S(   N(   R   t   parentt   NoneR   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   __del__“   s    		N(   t   __name__t
   __module__t   __doc__R   R   R   R   t   smilesR   R   R   R   R   R
   R   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyR   a   s   			
	i    c         C   s²  t  j |  d ƒ } | d k r' i  } n  | j | ƒ r> | | St |  ƒ } | | _ i | | 6} | | | <xA| r­| j ƒ  d } | j | ƒ } | j s¡ qm n  xt	 t
 ƒ D]ø\ }	 }
 | rÒ |	 | k rÒ q® n  |
 j | j f ƒ } | r® x¶| D]«} t } g  | D] } | j d t ƒ | f ^ q} | j ƒ  x³ | D]« \ } } y t  j | ƒ Wn
 q<n Xt  j | d ƒ } | d k r°| j d ƒ } | | | k  rÞt } PqÞn. | j d d ƒ j d d ƒ d k rÞt } Pn  | | _ q<W| rô x« | D]  \ } } | j } | j | ƒ skt | ƒ } | | _ t j | ƒ | j | <| | j | <| | | <| | | <qø| | } t j | ƒ | j | <| | j | <qøWqô qô Wq® q® Wqm W| S(   s0    returns the recap decomposition for a molecule i   i    t   onlyExplicitt   *s   [*]t    s   ()t   Ct   CCt   CCCN(   R!   R"   s   CCR$   (   R    t   MolToSmilesR   t   has_keyR   R   t   keyst   popR   t	   enumeratet	   reactionst   RunReactantsR   t   GetNumAtomst   sortt   SanitizeMolt   countR   t   replacet   pSmit   weakreft   proxyR   R   (   R   t   allNodest   minFragmentSizet   onlyUseReactionst   mSmiR   t
   activePoolt   nSmit   nodet   rxnIdxt   reactiont   pst   prodSeqt   seqOkt   prodt   natsR1   t   nDummiest   pNode(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   RecapDecompose™   sh    		
		 +
$		

#t   __main__t   TestCasec           B   sª   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s˜   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j j ƒ  ƒ d k ƒ |  j t | j ƒ  j ƒ  ƒ d k ƒ |  j t | j ƒ  j ƒ  ƒ d k ƒ d  S(   Ns   C1CC1Oc1ccccc1-c1ncc(OC)cc1i   i   i   (	   R    t   MolFromSmilesRD   t
   failUnlessR   R   R'   R   R   (   R   t   mR   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   test1á   s    "%c         C   sB   t  j d ƒ } t | ƒ } |  j | ƒ |  j | j i  k ƒ d  S(   Nt   CCCOCCC(   R    RG   RD   RH   R   (   R   RI   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   test2è   s    c         C   sƒ  i  } t  j d ƒ } t | d | ƒ} |  j | ƒ |  j t | j j ƒ  ƒ d k ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | d | ƒ} |  j | ƒ |  j t | j j ƒ  ƒ d k ƒ |  j t | j ƒ  ƒ d k ƒ |  j | j d ƒ ƒ |  j | j d ƒ ƒ t  j d	 ƒ } t | d | ƒ} |  j | ƒ |  j t | j j ƒ  ƒ d
 k ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Ns   c1ccccc1-c1ncccc1R4   i   i   s   COc1ccccc1-c1ncccc1i   s   [*]c1ccccc1OCs   [*]c1ccccc1s   C1CC1Oc1ccccc1-c1ncccc1i   i
   (   R    RG   RD   RH   R   R   R'   R&   (   R   R4   RI   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   test3í   s$    """c         C   s–   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns   c1ccccc1OC(Oc1ccccc1)Oc1ccccc1i   s   [*]C([*])[*]s   [*]c1ccccc1s   [*]C([*])Oc1ccccc1(   R    RG   RD   RH   R   R   R'   t   failIf(   R   RI   R   t   ks(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testSFNetIssue1801871  s    c         C   sƒ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ d  S(   Nt   C1CCCCN1CCCCi   s   [*]N1CCCCC1s   [*]CCCC(   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testSFNetIssue1804418  s    c         C   s€  t  j d ƒ } t | ƒ } |  j | ƒ |  j | j i  k ƒ t | d d ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ t  j d ƒ } t | d d ƒ} |  j | ƒ |  j | j i  k ƒ t  j d ƒ } t | d d ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ | j ƒ  j ƒ  } |  j d	 | k ƒ d  S(
   NRK   R5   i   i   s   [*]CCCt   CCCOCCt   CCCOCCOCi   s   [*]CCOC(   R    RG   RD   RH   R   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testMinFragmentSize  s*    c         C   sZ  t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d	 ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d
 | k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ d k ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Ns   C1CC1C(=O)NC1OC1R6   i   i   s   [*]C(=O)C1CC1s	   [*]NC1CO1s   C1CC1C(=O)N(C)C1OC1s   [*]N(C)C1CO1s   C1CC1C(=O)n1cccc1s
   [*]n1cccc1s   C1CC1C(=O)CC1OC1i    s   C1CCC(=O)NC1s   CC(=O)NCs   CC(=O)Ns   C(=O)NCCNC(=O)CCi   i   (   R    RG   RD   RH   R   R   R'   R   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testAmideRxn0  sV    c         C   s,  t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(	   Ns   C1CC1C(=O)OC1OC1R6   i   s   [*]C(=O)C1CC1s	   [*]OC1CO1s   C1CC1C(=O)CC1OC1i    s   C1CCC(=O)OC1(   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testEsterRxnd  s    c         C   sa  t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d	 ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d
 ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ d  S(   Ns   C1CC1NC(=O)NC1OC1R6   i    i   s	   [*]NC1CC1s	   [*]NC1CO1s   C1CC1NC(=O)N(C)C1OC1s   [*]N(C)C1CO1s   C1CCNC(=O)NC1Cs   c1cccn1C(=O)NC1OC1s
   [*]n1cccc1s   c1cccn1C(=O)n1c(C)ccc1s   [*]n1cccc1C(   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testUreaRxnw  s>    c         C   s  t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d	 | k ƒ |  j d | k ƒ t  j d
 ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d	 | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Ns   C1CC1N(C1NC1)C1OC1i   s   [*]C1CC1s   [*]C1CO1s   [*]C1CN1s   c1ccccc1N(C1NC1)C1OC1s   [*]c1ccccc1s   c1ccccc1N(c1ncccc1)C1OC1s   [*]c1ccccn1s   c1ccccc1N(c1ncccc1)c1ccco1s
   [*]c1ccco1t   C1CCCCN1C1CC1i   s   [*]N1CCCCC1t   C1CCC2N1CC2i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testAmineRxnœ  sV    c         C   sÈ  t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d	 ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d
 | k ƒ d  S(   Nt   C1CC1OC1OC1i   s   [*]C1CC1s   [*]C1CO1t   C1CCCCO1i    t   c1ccccc1OC1OC1s   [*]c1ccccc1t   c1ccccc1Oc1ncccc1s   [*]c1ccccn1(   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testEtherRxnÎ  s2    c         C   sÊ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Ns   ClC=CBri   s   [*]CCls   [*]CBrs   C1CC=CC1i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testOlefinRxnì  s    c         C   sÊ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Nt   c1cccn1CCCCi   s
   [*]n1cccc1s   [*]CCCCt   c1ccc2n1CCCC2i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testAromNAliphCRxnú  s    c         C   sÓ   t  j d ƒ } t | d d g ƒ} |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(	   Ns   C1CC(=O)N1CCCCR6   i   i   s   [*]N1CCC1=Os   [*]CCCCs   O=C1CC2N1CCCC2i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testLactamNAliphCRxn  s    c         C   sÊ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(   Nt   c1ccccc1c1ncccc1i   s   [*]c1ccccc1s   [*]c1ccccn1t   c1ccccc1C1CC1i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testAromCAromCRxn  s    c         C   sƒ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ d  S(   Nt   c1cccn1c1ccccc1i   s
   [*]n1cccc1s   [*]c1ccccc1(   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testAromNAromCRxn$  s    c         C   sI  t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ | j ƒ  j ƒ  } |  j d | k ƒ |  j d | k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(	   Ns   CCCNS(=O)(=O)CCi   s   [*]NCCCs   [*]S(=O)(=O)CCs   c1cccn1S(=O)(=O)CCs
   [*]n1cccc1s   C1CNS(=O)(=O)CC1i    (   R    RG   RD   RH   R   R   R'   (   R   RI   R   RO   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testSulfonamideRxn-  s$    c         C   s®  t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | j ƒ  ƒ d k ƒ d  S(	   Nt   c1ccccc1n1cccc1i   s   c1ccccc1[n+]1ccccc1i    s   C1CC1NC(=O)CCs   C1CC1[NH+]C(=O)CCs   C1CC1NC(=O)NC1CCC1s   C1CC1[NH+]C(=O)[NH+]C1CCC1(   R    RG   RD   RH   R   R   (   R   RI   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   testSFNetIssue1881803C  s0    (   R   R   RJ   RL   RM   RP   RR   RU   RV   RW   RX   R[   R`   Ra   Rd   Re   Rh   Rj   Rk   Rm   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyRF   à   s$   				
				4		%	2								(   R   R2   t   rdkitR    t
   rdkit.ChemR   t	   Reactionst   syst   reactionDefst   tuplet   xt   ReactionFromSmartsR*   t   objectR   R   RD   R   t   unittestRF   t   main(    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Recap.pyt   <module>;   s0   	(8Eÿ €