ó
a#nSc           @   sõ  d  Z  d d l m Z d d l m Z d d l Z d d l Z d d l Z i d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d  d! 6d  d" 6d# d$ 6d% d& 6d% d' 6Z	 d( d) d* f d( d+ d* f d( d, d* f g d) d- d* f d) d. d* f d) d/ d* f d) d0 d* f d) d1 d* f g d- d+ d* f d- d2 d* f g d+ d3 d* f d+ d/ d* f d+ d1 d* f d+ d. d* f d+ d0 d* f g d4 d. d* f d4 d/ d* f d4 d0 d* f d4 d1 d* f g d5 d6 d7 f g d8 d9 d* f d8 d, d* f d8 d. d* f d8 d/ d* f d8 d0 d* f d8 d1 d* f g d9 d. d* f d9 d/ d* f d9 d0 d* f d9 d1 d* f g d, d. d* f d, d/ d* f d, d0 d* f d, d1 d* f g d2 d. d* f d2 d/ d* f d2 d0 d* f d2 d1 d* f g d. d/ d* f d. d0 d* f d. d1 d* f g d/ d/ d* f d/ d0 d* f d/ d1 d* f g d0 d1 d* f g d1 d1 d* f g f Z
 d d l Z e j e
 ƒ Z x£ e D]› Z x’ e e ƒ D]„ \ Z Z e \ Z Z Z e	 d: e Z e	 d: e Z e j d; d< e ƒ Z e j d; d< e ƒ Z d= e e e e e f Z e e e <qbWqOWxN e D]F Z x= e D]5 Z y e j e ƒ Z e j ƒ  Wn e GH‚  n XqWqõWi  Z x- e	 j ƒ  D] \ Z Z e j e ƒ e e <qRWg  Z  xž e e
 ƒ D]� \ Z! Z" g  Z# xn e" D]f \ Z$ Z% Z& e	 d> e$ Z' e	 d> e% Z( d? e' e& e( f Z) e j e) ƒ Z) e# j* e$ e% e& e) f ƒ q¡We  j* e# ƒ qˆWe+ g  e D]( Z, g  e, D] Z- e j e- ƒ ^ q3^ q&ƒ a. g  Z/ x³ e e ƒ D]¥ \ Z! Z0 x– e e0 ƒ D]ˆ \ Z Z e j1 d@ ƒ \ Z2 Z3 dA e3 e2 f Z e j e ƒ Z4 e j5 dB e3 ƒ Z6 g  e6 D] Z, e j7 dC e, ƒ ^ qÜe4 _8 e/ j* e4 ƒ qƒWqjWe9 e: dD „ Z; e< e: e: dE „ Z= e< dF e< e: e9 e9 e9 dG „ Z> d d l Z e j7 dH ƒ Z? e: e< e: e: dI dJ „ Z@ dK „  ZA eB dL k rñd d lC ZC dM eC jD f dN „  ƒ  YZD eA ƒ  \ ZE ZF eE räe jG eE ƒ n  eC jH ƒ  n  d S(O   sX    Implementation of the BRICS algorithm from Degen et al. ChemMedChem *3* 1503-7 (2008)

iÿÿÿÿ(   t   Chem(   t   rdChemReactionsNs   [C;D3]([#0,#6,#7,#8])(=O)t   L1s   [O;D2]-;!@[#0,#6,#1]t   L3s   [C;!D1;!$(C=*)]-;!@[#6]t   L4s:   [N;!D1;!$(N=*);!$(N-[!#6;!#16;!#0;!#1]);!$([N;R]@[C;R]=O)]t   L5s   [C;D3;!R](=O)-;!@[#0,#6,#7,#8]t   L6s   [C;D2,D3]-[#6]t   L7at   L7bs   [C;!R;!D1]-;!@[#6]s   #L8s   [C;!R;!D1;!$(C!-*)]t   L8s!   [n;+0;$(n(:[c,n,o,s]):[c,n,o,s])]t   L9s   [N;R;$(N(@C(=O))@[C,N,O,S])]t   L10s   [S;D2](-;!@[#0,#6])t   L11s   [S;D4]([#6,#0])(=O)(=O)t   L12s    [C;$(C(-;@[C,N,O,S])-;@[N,O,S])]t   L13s   [c;$(c(:[c,n,o,s]):[n,o,s])]t   L14t   L14bs   [C;$(C(-;@C)-;@C)]t   L15s   [c;$(c(:c):c)]t   L16t   L16bt   1t   3t   -t   5t   10t   4t   13t   14t   15t   16t   11t   12t   6t   7at   7bt   =t   8t   9t   Ls	   [a-z,A-Z]t    s0   [$(%s):1]%s;!@[$(%s):2]>>[%s*]-[*:1].[%s*]-[*:2]s   L%ss   [$(%s)]%s;!@[$(%s)]s   >>s   %s>>%ss   \[([0-9]+?)\*\]s   [%s*]c         c   s�  t  j d ƒ } t t t ƒ ƒ } t ƒ  } | r@ t j | ƒ n  i  } x- t j	 ƒ  D] \ } } |  j
 | ƒ | | <qS Wx| D]}	 | r¤ t |	 }
 t j |
 ƒ n
 t |	 }
 x× |
 D]Ï \ } } } } | d | sµ | d | rë qµ n  |  j | ƒ } | j d | ƒ } | j d | ƒ } xc | D][ } | | k r%| d | d f | k r%| j | ƒ | d | d f | | f f Vq%q%Wqµ Wq} Wd S(   s²   returns the bonds in a molecule that BRICS would cleave

  >>> from rdkit import Chem
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> res = list(FindBRICSBonds(m))
  >>> res
  [((3, 2), ('3', '4')), ((3, 4), ('3', '4'))]

  a more complicated case:
  >>> m = Chem.MolFromSmiles('CCCOCCC(=O)c1ccccc1')
  >>> res = list(FindBRICSBonds(m))
  >>> res
  [((3, 2), ('3', '4')), ((3, 4), ('3', '4')), ((6, 8), ('6', '16'))]

  we can also randomize the order of the results:
  >>> random.seed(23)
  >>> res = list(FindBRICSBonds(m,randomizeOrder=True))
  >>> sorted(res)
  [((3, 2), ('3', '4')), ((3, 4), ('3', '4')), ((6, 8), ('6', '16'))]

  Note that this is a generator function :
  >>> res = FindBRICSBonds(m)
  >>> res
  <generator object ...>
  >>> res.next()
  ((3, 2), ('3', '4'))

  >>> m = Chem.MolFromSmiles('CC=CC')
  >>> res = list(FindBRICSBonds(m))
  >>> sorted(res)
  [((1, 2), ('7', '7'))]
  
  make sure we don't match ring bonds:
  >>> m = Chem.MolFromSmiles('O=C1NCCC1')
  >>> list(FindBRICSBonds(m))
  []
  
  another nice one, make sure environment 8 doesn't match something connected
  to a ring atom:
  >>> m = Chem.MolFromSmiles('CC1(C)CCCCC1')
  >>> list(FindBRICSBonds(m))
  []
  
  s	   [a-z,A-Z]R&   R'   i   i    N(   t   ret   compilet   ranget   lent   bondMatcherst   sett   randomt   shufflet   environMatcherst	   iteritemst   HasSubstructMatcht   GetSubstructMatchest   subt   add(   t   molt   randomizeOrdert   silentt   lettert   indicest	   bondsDonet
   envMatchest   envt   pattt   gpIdxt   compatst   i1t   i2t   bTypet   matchest   match(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   FindBRICSBondsì   s.    -	 
 &c         C   s1  | s/ t  j |  ƒ } | r+ t  j | ƒ n  | St  j |  ƒ } |  j ƒ  } g  } xM| D]E\ } }	 | \ }
 } |  j |
 | ƒ } | j ƒ  } | j |
 | ƒ |	 \ } } t  j d ƒ } | j	 t
 | ƒ ƒ | j t ƒ | } | d 7} | j | ƒ | j |
 | | ƒ t  j d ƒ } | j	 t
 | ƒ ƒ | j t ƒ | } | d 7} | j | ƒ | j | | | ƒ |  j ƒ  rW | j | | f ƒ | j | |
 f ƒ qW qW W| j ƒ  } | rÂt  j | ƒ n  |  j ƒ  r-x\ |  j ƒ  D]K } | j | j ƒ  ƒ } x- | D]% \ }
 } | j |
 | j | ƒ ƒ qýWqÛWn  | S(   s¿   breaks the BRICS bonds in a molecule and returns the results

  >>> from rdkit import Chem
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> m2=BreakBRICSBonds(m)
  >>> Chem.MolToSmiles(m2,True)
  '[3*]O[3*].[4*]CC.[4*]CCC'

  a more complicated case:
  >>> m = Chem.MolFromSmiles('CCCOCCC(=O)c1ccccc1')
  >>> m2=BreakBRICSBonds(m)
  >>> Chem.MolToSmiles(m2,True)
  '[3*]O[3*].[4*]CCC.[4*]CCC([6*])=O.[16*]c1ccccc1'


  can also specify a limited set of bonds to work with:
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> m2 = BreakBRICSBonds(m,[((3, 2), ('3', '4'))])
  >>> Chem.MolToSmiles(m2,True)
  '[3*]OCC.[4*]CCC'
  
  this can be used as an alternate approach for doing a BRICS decomposition by
  following BreakBRICSBonds with a call to Chem.GetMolFrags:
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> m2=BreakBRICSBonds(m)
  >>> frags = Chem.GetMolFrags(m2,asMols=True)
  >>> [Chem.MolToSmiles(x,True) for x in frags]
  ['[4*]CCC', '[3*]O[3*]', '[4*]CC']

  i    i   (   R    t   FragmentOnBRICSBondst   SanitizeMolt   EditableMolt   GetNumAtomst   GetBondBetweenAtomst   GetBondTypet
   RemoveBondt   Atomt
   SetIsotopet   intt   SetNoImplicitt   Truet   AddAtomt   AddBondt   GetNumConformerst   appendt   GetMolt   GetConformerst   GetConformert   GetIdt   SetAtomPositiont   GetAtomPosition(   R6   t   bondst   sanitizeR8   t   rest   eMolt   nAtst   dummyPositionsR:   t
   dummyTypest   iat   ibt   obondt   bondTypet   dat   dbt   atomat   idxat   atombt   idxbt   conft   resConft   pa(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   BreakBRICSBonds1  sP    

$i   c         C   s  t  j |  d ƒ } | d k r* t ƒ  } n  | | k r= t ƒ  Si |  | 6}	 | j | ƒ i |  | 6}
 xEt t ƒ D]7\ } } i  } x|	 r¡t } |	 j ƒ  d } |	 j	 | ƒ }  xÊt | ƒ D]¼\ } } | rè | | f | k rè q¾ n  | sd GHt
 | | GHn  | j |  f ƒ } | r¾ | s;| Gd Gt | ƒ Gd GHn  x<| D]1} t } g  | D] } | j d t ƒ | f ^ qU} | j ƒ  x… | D]} \ } } y t  j | ƒ Wn
 qŠn Xt  j | d ƒ } | d k rþ| j d ƒ } | | | k  rþt } Pqþn  | | _ qŠW| rBt } xY | D]N \ } } | j } | | k r| sR| |	 | <n  | j | ƒ | |
 | <qqWqBqBWq¾ q¾ W| s‘| s‘| r† |  | | <q† q† W| }	 qq W| pµ| sâ| sÓt |	 j ƒ  ƒ } qý|	 j ƒ  } n | sñ| } n |
 j ƒ  } | S(	   s¯	   returns the BRICS decomposition for a molecule

  >>> from rdkit import Chem
  >>> m = Chem.MolFromSmiles('CCCOCc1cc(c2ncccc2)ccc1')
  >>> res = list(BRICSDecompose(m))
  >>> sorted(res)
  ['[14*]c1ccccn1', '[16*]c1cccc([16*])c1', '[3*]O[3*]', '[4*]CCC', '[4*]C[8*]']

  >>> res = BRICSDecompose(m,returnMols=True)
  >>> res[0]
  <rdkit.Chem.rdchem.Mol object ...>
  >>> smis = [Chem.MolToSmiles(x,True) for x in res]
  >>> sorted(smis)
  ['[14*]c1ccccn1', '[16*]c1cccc([16*])c1', '[3*]O[3*]', '[4*]CCC', '[4*]C[8*]']

  nexavar, an example from the paper (corrected):
  >>> m = Chem.MolFromSmiles('CNC(=O)C1=NC=CC(OC2=CC=C(NC(=O)NC3=CC(=C(Cl)C=C3)C(F)(F)F)C=C2)=C1')
  >>> res = list(BRICSDecompose(m))
  >>> sorted(res)
  ['[1*]C([1*])=O', '[1*]C([6*])=O', '[14*]c1cc([16*])ccn1', '[16*]c1ccc(Cl)c([16*])c1', '[16*]c1ccc([16*])cc1', '[3*]O[3*]', '[5*]NC', '[5*]N[5*]', '[8*]C(F)(F)F']

  it's also possible to keep pieces that haven't been fully decomposed:
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> res = list(BRICSDecompose(m,keepNonLeafNodes=True))
  >>> sorted(res)
  ['CCCOCC', '[3*]OCC', '[3*]OCCC', '[3*]O[3*]', '[4*]CC', '[4*]CCC']

  >>> m = Chem.MolFromSmiles('CCCOCc1cc(c2ncccc2)ccc1')
  >>> res = list(BRICSDecompose(m,keepNonLeafNodes=True))
  >>> sorted(res)
  ['CCCOCc1cccc(-c2ccccn2)c1', '[14*]c1ccccn1', '[16*]c1cccc(-c2ccccn2)c1', '[16*]c1cccc(COCCC)c1', '[16*]c1cccc([16*])c1', '[3*]OCCC', '[3*]OC[8*]', '[3*]OCc1cccc(-c2ccccn2)c1', '[3*]OCc1cccc([16*])c1', '[3*]O[3*]', '[4*]CCC', '[4*]C[8*]', '[4*]Cc1cccc(-c2ccccn2)c1', '[4*]Cc1cccc([16*])c1', '[8*]COCCC']

  or to only do a single pass of decomposition:
  >>> m = Chem.MolFromSmiles('CCCOCc1cc(c2ncccc2)ccc1')
  >>> res = list(BRICSDecompose(m,singlePass=True))
  >>> sorted(res)
  ['CCCOCc1cccc(-c2ccccn2)c1', '[14*]c1ccccn1', '[16*]c1cccc(-c2ccccn2)c1', '[16*]c1cccc(COCCC)c1', '[3*]OCCC', '[3*]OCc1cccc(-c2ccccn2)c1', '[4*]CCC', '[4*]Cc1cccc(-c2ccccn2)c1', '[8*]COCCC']

  setting a minimum size for the fragments:
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> res = list(BRICSDecompose(m,keepNonLeafNodes=True,minFragmentSize=2))
  >>> sorted(res)
  ['CCCOCC', '[3*]OCC', '[3*]OCCC', '[4*]CC', '[4*]CCC']
  >>> m = Chem.MolFromSmiles('CCCOCC')
  >>> res = list(BRICSDecompose(m,keepNonLeafNodes=True,minFragmentSize=3))
  >>> sorted(res)
  ['CCCOCC', '[3*]OCC', '[4*]CCC']
  >>> res = list(BRICSDecompose(m,minFragmentSize=2))
  >>> sorted(res)
  ['[3*]OCC', '[3*]OCCC', '[4*]CC', '[4*]CCC']


  i   i    s   --------s   ->t   productst   onlyExplicitt   *N(   R    t   MolToSmilest   NoneR-   R5   t	   enumeratet	   reactionst   Falset   keyst   popt	   smartsGpst   RunReactantsR+   RR   RJ   t   sortRH   t   countt   pSmit   values(   R6   t   allNodest   minFragmentSizet   onlyUseReactionsR8   t   keepNonLeafNodest
   singlePasst
   returnMolst   mSmit
   activePoolt	   foundMolsR?   t
   reactionGpt   newPoolt   matchedt   nSmit   rxnIdxt   reactiont   pst   prodSeqt   seqOkt   prodt   natsR€   t   nDummiesR_   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   BRICSDecompose}  sx    8	 +
	
	s   [*]i   c         c   s„  t  ƒ  } | s t |  ƒ } n  | r@ t | ƒ } t j | ƒ n  | rb t t ƒ } t j | ƒ n t } x| D]} t }	 t }
 g  } xk| D]c} | j | j d ƒ r³ t }	 n  | j | j d ƒ rÒ t }
 n  x|  D]} d  } | j | j d ƒ r|
 r| j
 | | f ƒ } qn  | j | j d ƒ rS|	 rS| j
 | | f ƒ } qSn  | rÙ x‘ | D]† } | r¤t j | d t ƒ } | | k r”q`q¤| j | ƒ n  | d j t ƒ rÝ| j | d ƒ | sæ| d Vqæq`| d Vq`WqÙ qÙ WqŽ W| ro | d k ro xr t |  d | d | d | d | d ƒD]E } | rpt j | t ƒ } | | k r`q0qp| j | ƒ n  | Vq0Wqo qo Wd  S(   Ni    i   t   onlyCompleteMolst   seedst   uniquifyt   maxDepth(   R-   t   listR.   R/   t   reverseReactionsRy   R2   t	   _matchersRR   Rv   R}   R    Ru   R5   t   dummyPatternRV   t
   BRICSBuild(   t	   fragmentsR˜   R™   Rš   t   scrambleReagentsR›   t   seent   tempReactionst   seedt   seedIsR1t   seedIsR2t	   nextStepst   rxnt   fragmentR‘   t   pR€   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyR    ü  sb    			c          C   s<   d d  l  }  d d  l } |  j | j d d |  j |  j ƒS(   Niÿÿÿÿt   __main__t   optionflags(   t   doctestt   syst   testmodt   modulest   ELLIPSISt   NORMALIZE_WHITESPACE(   R®   R¯   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   _test>  s    R¬   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 RS(   c         C   sÉ  t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k ƒ t  j d	 ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k ƒ t  j d
 ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ |  j d | k | ƒ t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ |  j d | k | ƒ d  S(   Ns   CC(=O)OCi   s   CC(=O)N1CCC1=Os   c1ccccc1N(C)Cs   c1cccnc1N(C)Cs   o1ccnc1N(C)Ct
   c1ccccc1OCt	   o1ccnc1OCt	   O1CCNC1OCt   CCCSCCi   s   [11*]S[11*]s   CCNC(=O)C1CC1i   s	   [5*]N[5*](   R    t   MolFromSmilesR—   t
   failUnlessR+   (   t   selft   mR_   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test1F  sT    c         C   sH   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ d  S(   NsB   CNC(=O)C1=NC=CC(OC2=CC=C(NC(=O)NC3=CC(=C(Cl)C=C3)C(F)(F)F)C=C2)=C1i	   (   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/BRICS.pyt   test2{  s    c         C   sŠ   t  j d ƒ } t | ƒ } |  j | ƒ |  j t | ƒ d k | ƒ |  j d | k | ƒ |  j d | k | ƒ |  j d | k | ƒ d  S(   Ns+   FC(F)(F)C1=C(Cl)C=CC(NC(=O)NC2=CC=CC=C2)=C1i   s	   [5*]N[5*]s   [16*]c1ccccc1s   [8*]C(F)(F)F(   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/BRICS.pyt   test3‚  s    c         C   sš  t  ƒ  } t j d ƒ } t | d | ƒ} |  j | ƒ | } |  j t | ƒ d k | ƒ |  j t | ƒ d k | ƒ t | d | ƒ} |  j | ƒ |  j t | ƒ d k | ƒ t j d ƒ } t | d | ƒ} |  j | ƒ | j | ƒ |  j t | ƒ d k | ƒ |  j t | ƒ d k | ƒ t j d ƒ } t | d | ƒ} |  j | ƒ | j | ƒ |  j t | ƒ d	 k | ƒ |  j t | ƒ d
 k | ƒ d  S(   Nt   c1ccccc1OCCCR‚   i   i   t   c1ccccc1OCCCCi	   i   s   c1cc(C(=O)NCC)ccc1OCCCi   i   (   R-   R    Rº   R—   R»   R+   t   failIft   update(   R¼   R‚   R½   R_   t   leaves(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test4Œ  s,    	c         C   sÇ   t  ƒ  } d d d g } g  | D] } t j | ƒ ^ q } t | ƒ } |  j | ƒ t | ƒ } |  j t | ƒ d k ƒ g  | D] } t j | t ƒ ^ q } |  j d | k ƒ |  j d | k ƒ d  S(   Ns   [14*]c1ncncn1s   [16*]c1ccccc1s   [14*]c1ncccc1i   s   c1ccc(-c2ccccc2)cc1s   c1ccc(-c2ccccn2)cc1(	   R-   R    Rº   R    R»   Rœ   R+   Ru   RR   (   R¼   R‚   t   fragst   xR_   t   smis(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test5§  s    		"%c         C   sÇ   t  ƒ  } d d g } g  | D] } t j | ƒ ^ q } t | ƒ } |  j | ƒ t | ƒ } g  | D] } t j | t ƒ ^ qc } |  j t | ƒ d k | ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns	   [3*]O[3*]s   [16*]c1ccccc1i   s   c1ccc(Oc2ccccc2)cc1s   c1ccc(-c2ccccc2)cc1(	   R-   R    Rº   R    R»   Rœ   Ru   RR   R+   (   R¼   R‚   RÇ   RÈ   R_   RÉ   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test5a·  s    		"%c         C   sÚ   t  ƒ  } d d d g } g  | D] } t j | ƒ ^ q } t | ƒ } |  j | ƒ t | ƒ } |  j t | ƒ d k ƒ g  | D] } t j | t ƒ ^ q } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns   [16*]c1ccccc1s   [3*]OCs   [9*]n1cccc1i   s   c1ccc(-c2ccccc2)cc1t
   COc1ccccc1s   c1ccn(-c2ccccc2)c1(	   R-   R    Rº   R    R»   Rœ   R+   Ru   RR   (   R¼   R‚   RÇ   RÈ   R_   RÉ   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test6È  s    		"%c         C   sÚ   t  ƒ  } d d d g } g  | D] } t j | ƒ ^ q } t | ƒ } |  j | ƒ t | ƒ } g  | D] } t j | t ƒ ^ qf } |  j t | ƒ d k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns   [16*]c1ccccc1s   [3*]OCs   [3*]OCC(=O)[6*]i   s   c1ccc(-c2ccccc2)cc1RÌ   s   O=C(COc1ccccc1)c1ccccc1(	   R-   R    Rº   R    R»   Rœ   Ru   RR   R+   (   R¼   R‚   RÇ   RÈ   R_   RÉ   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test7Ù  s    		"%c         C   s$  t  j d ƒ t j d ƒ } t | ƒ } |  j t | ƒ d k | ƒ g  | D] } t j | ƒ ^ qK } g  t | d d ƒD] } t j | ƒ ^ qy } |  j t | ƒ d k | ƒ d d d	 d
 d g } g  | D]! } t j t j | ƒ t	 ƒ ^ qÌ } x* | D]" } |  j | | k | | f ƒ qú Wd  S(   Ni   s   n1cncnc1OCC(C1CC1)OC1CNC1i   R›   i   i$   s   n1cnc(C2CNC2)nc1s   n1cnc(-c2ncncn2)nc1s   C(OC1CNC1)C(C1CC1)OC1CNC1s   n1cnc(OC(COC2CNC2)C2CC2)nc1s   n1cnc(OCC(OC2CNC2)C2CNC2)nc1(
   R.   R¥   R    Rº   R—   R»   R+   R    Ru   RR   (   R¼   t   baset   catalogRÈ   t   mst   tst   t(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test8ê  s    ".	.c         C   s©   t  j d ƒ } t | ƒ } |  j t | ƒ d ƒ |  j d | k ƒ |  j d | k ƒ t | d t ƒ} |  j t | ƒ d ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns$   CCOc1ccccc1c1ncc(c2nc(NCCCC)ncn2)cc1i   s	   [3*]O[3*]s   [14*]c1ncnc(NCCCC)n1R†   i   s   [3*]OCC(   R    Rº   R—   t   failUnlessEqualR+   R»   RÃ   RR   (   R¼   R½   R_   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test9û  s    c         C   s8   t  j d ƒ } t | ƒ } |  j t | ƒ d | ƒ d  S(   Nt   C1CCCCN1c1ccccc1i   (   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/BRICS.pyt   test10  s    c         C   s   d } t  j | ƒ } t | ƒ } t  j | d t ƒ} |  j t | ƒ d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ | j ƒ  } | d j ƒ  } xL t	 d ƒ D]> } | j
 | ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qÃ W| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j ƒ  } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qZW| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j ƒ  } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qõW| j
 d
 ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ d } t  j | ƒ }
 | j |
 j ƒ  d t ƒ|  j | j ƒ  d ƒ t | ƒ } t  j | d t ƒ} |  j t | ƒ d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ |  j | d j ƒ  d ƒ | j d ƒ } | d j d ƒ } xL t	 d ƒ D]> } | j
 | ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qñW| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j d ƒ } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ q‹W| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j d ƒ } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ q)W| j
 d
 ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | j d ƒ } | d j d ƒ } xL t	 d ƒ D]> } | j
 | ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qW| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j d ƒ } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ q¨W| j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | d j d ƒ } xP t	 d ƒ D]B } | j
 | d ƒ } | j
 | ƒ }	 |  j | |	 j ƒ  d	 ƒ qFW| j
 d
 ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ | j
 d ƒ } | j
 d ƒ }	 |  j | |	 j ƒ  d	 ƒ d  S(   NsŒ  
     RDKit          3D

 13 14  0  0  0  0  0  0  0  0999 V2000
   -1.2004    0.5900    0.6110 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.2328    1.3173    0.0343 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.4299    0.6533   -0.1500 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.3633   -0.7217   -0.3299 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.1552   -1.3791   -0.2207 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.1425   -0.7969    0.5335 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.1458   -1.4244    0.4108 O   0  0  0  0  0  0  0  0  0  0  0  0
    1.2976   -0.7398   -0.1026 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.4889   -0.7939    0.5501 N   0  0  0  0  0  0  0  0  0  0  0  0
    3.4615    0.1460    0.3535 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.0116    1.4034   -0.0296 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.9786    1.4264   -0.9435 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.1399    0.3193   -0.9885 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  2  0
  2  3  1  0
  3  4  2  0
  4  5  1  0
  5  6  2  0
  6  7  1  0
  7  8  1  0
  8  9  2  0
  9 10  1  0
 10 11  2  0
 11 12  1  0
 12 13  2  0
  6  1  1  0
 13  8  1  0
M  END
t   asMolsi   i    i   i   i   i   g        i   sŒ  
     RDKit          2D

 13 14  0  0  0  0  0  0  0  0999 V2000
   -1.2990   -0.8654    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.5981   -1.6154    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.8971   -0.8654    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.8971    0.6346    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.5981    1.3846    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2990    0.6346    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.0000    1.3846    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    1.2990    0.6346    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.2990   -0.8654    0.0000 N   0  0  0  0  0  0  0  0  0  0  0  0
    2.5981   -1.6154    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.8971   -0.8654    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.8971    0.6346    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.5981    1.3846    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  2  0
  2  3  1  0
  3  4  2  0
  4  5  1  0
  5  6  2  0
  6  7  1  0
  7  8  1  0
  8  9  2  0
  9 10  1  0
 10 11  2  0
 11 12  1  0
 12 13  2  0
  6  1  1  0
 13  8  1  0
M  END
t   assignId(   R    t   MolFromMolBlockRq   t   GetMolFragsRR   RÕ   R+   RJ   RY   R*   R\   t   Lengtht   AddConformerRU   (   R¼   t   molblockR½   t   piecesRÇ   t   c1t   c2t   it   p1t   p2t   m2(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test11  sÒ    "$c         C   s{   t  j d ƒ } t t | ƒ ƒ } |  j t | ƒ d | ƒ g  | D] } | d ^ qA } | j ƒ  |  j | d d g ƒ d  S(   Ns   CCS(=O)(=O)NCCi   i    i   i   (   i   i   (   i   i   (   R    Rº   Rœ   RF   RÕ   R+   R~   (   R¼   R½   R_   RÈ   t   atIds(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   test12Å  s    
(   t   __name__t
   __module__R¾   R¿   RÀ   RÆ   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/BRICS.pyRµ   E  s   	5		
									º(I   t   __doc__t   rdkitR    t
   rdkit.ChemR   t	   ReactionsR¯   R(   R.   t   environst   reactionDefst   copyt   deepcopyR|   t   gpRw   t   jt   defnt   g1t   g2t   bndt   r1t   r2R4   t   smat   ReactionFromSmartsRÓ   t
   InitializeR0   R1   R=   t   MolFromSmartsR,   Rã   R@   t   tmpRA   RB   RC   t   e1t   e2R>   RV   t   tupleRÈ   t   yRx   R�   t   rxnSett   splitt   rsR‘   R©   t   findallt   labelsRº   Rž   Ry   RR   RF   Rv   Rq   R—   RŸ   R    R´   Rê   t   unittestRµ   t   failedt   triedt   exitt   main(    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/BRICS.pyt   <module>$   s   $
;)EL	|	A	ÿ �