Package rdkit :: Package DataStructs :: Module LazySignature
[hide private]
[frames] | no frames]

Source Code for Module rdkit.DataStructs.LazySignature

 1  # $Id$ 
 2  # 
 3  #  Copyright (C) 2005 Rational Discovery LLC 
 4  #   All Rights Reserved 
 5  # 
 6   
 7   
8 -class LazySig:
9 - def __init__(self,computeFunc,sigSize):
10 """ 11 computeFunc should take a single argument, the integer bit id 12 to compute 13 14 """ 15 if sigSize<=0: 16 raise ValueError('zero size') 17 self.computeFunc=computeFunc 18 self.size=sigSize 19 self._cache={}
20
21 - def __len__(self):
22 """ 23 24 >>> obj = LazySig(lambda x:1,10) 25 >>> len(obj) 26 10 27 28 """ 29 return self.size
30
31 - def __getitem__(self,which):
32 """ 33 34 >>> obj = LazySig(lambda x:x,10) 35 >>> obj[1] 36 1 37 >>> obj[-1] 38 9 39 >>> try: 40 ... obj[10] 41 ... except IndexError: 42 ... 1 43 ... else: 44 ... 0 45 1 46 >>> try: 47 ... obj[-10] 48 ... except IndexError: 49 ... 1 50 ... else: 51 ... 0 52 1 53 54 """ 55 if which<0: 56 # handle negative indices 57 which = self.size+which 58 59 if which<=0 or which>=self.size: 60 raise IndexError('bad index') 61 62 if self._cache.has_key(which): 63 v= self._cache[which] 64 else: 65 v = self.computeFunc(which) 66 self._cache[which]=v 67 return v
68 69 #------------------------------------ 70 # 71 # doctest boilerplate 72 #
73 -def _test():
74 import doctest,sys 75 return doctest.testmod(sys.modules["__main__"])
76 77 78 if __name__ == '__main__': 79 import sys 80 failed,tried = _test() 81 sys.exit(failed) 82