1
2
3
4
5
6 import sys,types
7 from rdkit import Chem
8 from rdkit import six
9
10
11 from rdkit.VLib.Output import OutputNode as BaseOutputNode
12
14 """ dumps smiles output
15
16 Assumptions:
17
18 - destination supports a write() method
19
20 - inputs (parents) can be stepped through in lockstep
21
22
23 Usage Example:
24 >>> smis = ['C1CCC1','C1CC1','C=O','NCC']
25 >>> mols = [Chem.MolFromSmiles(x) for x in smis]
26 >>> from rdkit.VLib.Supply import SupplyNode
27 >>> suppl = SupplyNode(contents=mols)
28 >>> from rdkit.six import StringIO
29 >>> sio = StringIO()
30 >>> node = OutputNode(dest=sio,delim=', ')
31 >>> node.AddParent(suppl)
32 >>> ms = [x for x in node]
33 >>> len(ms)
34 4
35 >>> txt = sio.getvalue()
36 >>> repr(txt)
37 "'1, C1CCC1\\\\n2, C1CC1\\\\n3, C=O\\\\n4, CCN\\\\n'"
38
39 """
40 - def __init__(self,dest=None,delim='\t',idField=None,**kwargs):
41 BaseOutputNode.__init__(self,dest=dest,strFunc=self.smilesOut)
42 self._dest = dest
43 self._idField = idField
44 self._delim = delim
45 self._nDumped = 0
46
48 BaseOutputNode.reset(self)
49 self._nDumped=0
50
52 self._nDumped += 1
53 if type(mol) in (tuple,list):
54 args = mol
55 mol = args[0]
56 if len(args)>1:
57 args = args[1:]
58 else:
59 args = []
60 else:
61 args = []
62
63 if self._idField and mol.HasProp(self._idField):
64 label = mol.GetProp(self._idField)
65 else:
66 label = str(self._nDumped)
67 smi = Chem.MolToSmiles(mol)
68 outp = [label,smi]+args
69 return '%s\n'%(self._delim.join(outp))
70
71
72
73
74
76 import doctest,sys
77 return doctest.testmod(sys.modules["__main__"])
78
79 if __name__ == '__main__':
80 import sys
81 failed,tried = _test()
82 sys.exit(failed)
83