ó
a#nSc           @   s/  d  Z  d d l Z d d d „  ƒ  YZ d e f d „  ƒ  YZ e d k r+e d ƒ Z e d ƒ Z d	 e d
 <d	 e d
 <d	 e d <d	 e d <d	 e d <d
 e d <d Ge j ƒ  GHd Ge j ƒ  GHd Ge e @GHd Ge e BGHd Ge e AGHd Ge j e ƒ GHd Ge j e ƒ GHd Ge j e ƒ GHd Ge j e ƒ GHn  d S(   s0    This has all be re-implemented in the C++ code
iÿÿÿÿNt   BitVectc           B   s€   e  Z d  „  Z d „  Z d d d „ Z d „  Z e Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d g | |  _ d  S(   Ni    (   t   nBitst   bits(   t   selfR   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __init__   s    	c         C   s   t  |  j ƒ  ƒ S(   N(   t   lent	   GetOnBits(   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt	   NumOnBits   s    i   i    c         C   sL   g  t  |  j ƒ D] } |  j | d k r | ^ q } | rH | j ƒ  n  | S(   Ni   (   t   xrangeR   R   t   reverse(   R   t   sortR	   t   idxt   l(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR      s    5c         C   sƒ   t  | t ƒ s t d ‚ n  t |  ƒ t | ƒ k r? t d ‚ n  t |  | @ƒ } |  j ƒ  } | j ƒ  } t | ƒ t | | | ƒ S(   NsA   Tanimoto similarities can only be calculated between two BitVectss    BitVects must be the same length(   t
   isinstanceR    t	   TypeErrorR   t
   ValueErrorR   t   float(   R   t   othert   bct   b1t   b2(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   TanimotoSimilarity   s    c         C   sM   t  | t ƒ s t d ‚ n  t |  ƒ } t |  | Aƒ } t j | | ƒ | S(   NsA   Tanimoto similarities can only be calculated between two BitVects(   R   R    R   R   t   matht   sqrt(   R   R   t   btt   bi(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   EuclideanDistance(   s
    c         C   s2   | |  j  k s | d k  r' t d ‚ n  |  j | S(   Ni    s	   bad index(   R   R   R   (   R   t   which(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __getitem__/   s    c         C   sP   | |  j  k s | d k  r' t d ‚ n  | d k r? t d ‚ n  | |  j | <d  S(   Ni    s	   bad indexi   s   val must be 0 or 1(   i    i   (   R   R   R   (   R   R   t   val(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __setitem__4   s
    c         C   s   |  j  S(   N(   R   (   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __len__<   s    c         C   s€   t  | t ƒ s t d ‚ n  t |  ƒ t | ƒ k r? t d ‚ n  |  j ƒ  } | j ƒ  } g  | D] } | | k r^ | ^ q^ } | S(   Ns-   BitVects can only be &'ed with other BitVectss#   BitVects must be of the same length(   R   R    R   R   R   R   (   R   R   t   l1t   l2t   bitt   r(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __and__?   s    %c         C   sŽ   t  | t ƒ s t d ‚ n  t |  ƒ t | ƒ k r? t d ‚ n  |  j ƒ  } | j ƒ  } | g  | D] } | | k ra | ^ qa } | j ƒ  | S(   Ns-   BitVects can only be |'ed with other BitVectss#   BitVects must be of the same length(   R   R    R   R   R   R   R
   (   R   R   R    R!   R"   R#   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __or__J   s    )
c         C   s­   t  | t ƒ s t d ‚ n  t |  ƒ t | ƒ k r? t d ‚ n  |  j ƒ  } | j ƒ  } g  | D] } | | k r^ | ^ q^ g  | D] } | | k r€ | ^ q€ } | j ƒ  | S(   Ns-   BitVects can only be ^'ed with other BitVectss#   BitVects must be of the same length(   R   R    R   R   R   R   R
   (   R   R   R    R!   R"   R#   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   __xor__U   s    H
c         C   sB   t  t |  ƒ ƒ } x) t t |  ƒ ƒ D] } |  | | | <q% W| S(   N(   R    R   R   (   R   t   rest   i(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt
   __invert__a   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R   R$   R%   R&   R)   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR       s   											t   SparseBitVectc           B   sD   e  Z d  „  Z d „  Z d d d „ Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  g  |  _ d  S(   N(   R   R   (   R   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR   h   s    	c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR   l   s    i   i    c         C   s4   |  j  } | r | j ƒ  n  | r0 | j ƒ  n  | S(   N(   R   R
   R	   (   R   R
   R	   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR   o   s    
c         C   sB   | |  j  k s | d k  r' t d ‚ n  | |  j k r: d Sd Sd  S(   Ni    s	   bad indexi   (   R   R   R   (   R   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR   w   s
    c         C   sl   | |  j  k s | d k  r' t d ‚ n  | d k rX | |  j k rh |  j j | ƒ qh n |  j j | ƒ d  S(   Ni    s	   bad index(   R   R   R   t   removet   append(   R   R   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR      s    c         C   s   |  j  S(   N(   R   (   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR   ˆ   s    (   R*   R+   R   R   R   R   R   R   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyR,   g   s   					t   __main__i
   i   i    i   i   i   s   b1:s   b2:s   &:s   |:s   ^:s   b1.Tanimoto(b2):s   b1.Tanimoto(b1):s   b2.Tanimoto(b2):s   b2.Tanimoto(b1):(    (	   t   __doc__R   R    R,   R*   R   R   R   R   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/DataStructs/BitVect.pyt   <module>   s*   X$





