mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
* switch to range-based for loops * Update Code/GraphMol/testChirality.cpp Co-authored-by: Greg Landrum <greg.landrum@gmail.com> * fix a leak in the new DCLV code (#7279) * fixes #7295 (#7303) * tag 2024.03 release (#7308) * tag release * attempt to solve constant MD5 problems * switch to getting the ComicNeue font from github instead of as a zip * open new release cycle (#7314) * restrict the application of 1,3- 1,5- conjugated cation normalization (#7287) * propagate yaehmop build status (#7316) * Fixes #7299 (#7304) * clean up of python and c++ for-loops * clang formatted testChirality * fix test file --------- Co-authored-by: Greg Landrum <greg.landrum@gmail.com> Co-authored-by: Riccardo Vianello <riccardo.vianello@gmail.com>
259 lines
7.6 KiB
Python
259 lines
7.6 KiB
Python
# $Id$
|
|
#
|
|
# Copyright (C) 2007,2008 Greg Landrum
|
|
#
|
|
# @@ All Rights Reserved @@
|
|
#
|
|
import io
|
|
import os
|
|
import pickle
|
|
import unittest
|
|
|
|
from rdkit import DataStructs as ds
|
|
from rdkit import RDConfig
|
|
|
|
|
|
class TestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
pass
|
|
|
|
def test1Discrete(self):
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30)
|
|
for i in range(15):
|
|
v1[2 * i] = 1
|
|
|
|
self.assertTrue(len(v1) == 30)
|
|
self.assertTrue(v1.GetTotalVal() == 15)
|
|
|
|
for i, vv1 in enumerate(v1):
|
|
self.assertTrue(vv1 == (i + 1) % 2)
|
|
|
|
self.assertRaises(ValueError, lambda: v1.__setitem__(5, 2))
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 30)
|
|
for i, _ in enumerate(v1):
|
|
v1[i] = i % 4
|
|
|
|
self.assertTrue(len(v1) == 30)
|
|
for i, vv1 in enumerate(v1):
|
|
self.assertTrue(vv1 == i % 4)
|
|
|
|
self.assertRaises(ValueError, lambda: v1.__setitem__(10, 6))
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 30)
|
|
for i, _ in enumerate(v1):
|
|
v1[i] = i % 16
|
|
|
|
self.assertTrue(len(v1) == 30)
|
|
self.assertTrue(v1.GetTotalVal() == 211)
|
|
for i, vv1 in enumerate(v1):
|
|
self.assertTrue(vv1 == i % 16)
|
|
|
|
self.assertRaises(ValueError, lambda: v1.__setitem__(10, 16))
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.EIGHTBITVALUE, 32)
|
|
for i, _ in enumerate(v1):
|
|
v1[i] = i % 256
|
|
|
|
self.assertTrue(len(v1) == 32)
|
|
self.assertTrue(v1.GetTotalVal() == 496)
|
|
for i, vv1 in enumerate(v1):
|
|
self.assertTrue(vv1 == i % 256)
|
|
|
|
self.assertRaises(ValueError, lambda: v1.__setitem__(10, 256))
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.SIXTEENBITVALUE, 300)
|
|
for i, _ in enumerate(v1):
|
|
v1[i] = i % 300
|
|
|
|
self.assertTrue(len(v1) == 300)
|
|
self.assertTrue(v1.GetTotalVal() == 44850)
|
|
self.assertRaises(ValueError, lambda: v1.__setitem__(10, 65536))
|
|
|
|
def test2VectDistances(self):
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30)
|
|
for i in range(15):
|
|
v1[2 * i] = 1
|
|
v2[2 * i] = 1
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
for i in range(30):
|
|
if (i % 3 == 0):
|
|
v2[i] = 1
|
|
else:
|
|
v2[i] = 0
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 15)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 30)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 30)
|
|
|
|
for i in range(30):
|
|
v1[i] = i % 4
|
|
v2[i] = (i + 1) % 4
|
|
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 44)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 16)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 16)
|
|
for i in range(16):
|
|
v1[i] = i % 16
|
|
v2[i] = i % 5
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 90)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.EIGHTBITVALUE, 5)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.EIGHTBITVALUE, 5)
|
|
v1[0] = 34
|
|
v1[1] = 167
|
|
v1[2] = 3
|
|
v1[3] = 56
|
|
v1[4] = 128
|
|
|
|
v2[0] = 14
|
|
v2[1] = 67
|
|
v2[2] = 103
|
|
v2[3] = 6
|
|
v2[4] = 228
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 370)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.SIXTEENBITVALUE, 3)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.SIXTEENBITVALUE, 3)
|
|
v1[0] = 2345
|
|
v1[1] = 64578
|
|
v1[2] = 34
|
|
|
|
v2[0] = 1345
|
|
v2[1] = 54578
|
|
v2[2] = 10034
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 21000)
|
|
|
|
def test3Pickles(self):
|
|
#outF = file('dvvs.pkl','wb+')
|
|
with open(os.path.join(RDConfig.RDBaseDir, 'Code/DataStructs/Wrap/testData/dvvs.pkl'),
|
|
'r') as inTF:
|
|
buf = inTF.read().replace('\r\n', '\n').encode('utf-8')
|
|
inTF.close()
|
|
with io.BytesIO(buf) as inF:
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30)
|
|
for i in range(15):
|
|
v1[2 * i] = 1
|
|
v2 = pickle.loads(pickle.dumps(v1))
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
# pickle.dump(v1,outF)
|
|
v2 = pickle.load(inF, encoding='bytes')
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
self.assertTrue(v1.GetTotalVal() == v2.GetTotalVal())
|
|
self.assertTrue(v2.GetTotalVal() != 0)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 30)
|
|
for i in range(30):
|
|
v1[i] = i % 4
|
|
v2 = pickle.loads(pickle.dumps(v1))
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
# pickle.dump(v1,outF)
|
|
v2 = pickle.load(inF, encoding='bytes')
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
self.assertTrue(v1.GetTotalVal() == v2.GetTotalVal())
|
|
self.assertTrue(v2.GetTotalVal() != 0)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 16)
|
|
for i in range(16):
|
|
v1[i] = i % 16
|
|
v2 = pickle.loads(pickle.dumps(v1))
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
# pickle.dump(v1,outF)
|
|
v2 = pickle.load(inF, encoding='bytes')
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
self.assertTrue(v1.GetTotalVal() == v2.GetTotalVal())
|
|
self.assertTrue(v2.GetTotalVal() != 0)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.EIGHTBITVALUE, 5)
|
|
v1[0] = 34
|
|
v1[1] = 167
|
|
v1[2] = 3
|
|
v1[3] = 56
|
|
v1[4] = 128
|
|
v2 = pickle.loads(pickle.dumps(v1))
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
# pickle.dump(v1,outF)
|
|
v2 = pickle.load(inF, encoding='bytes')
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
self.assertTrue(v1.GetTotalVal() == v2.GetTotalVal())
|
|
self.assertTrue(v2.GetTotalVal() != 0)
|
|
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.SIXTEENBITVALUE, 3)
|
|
v1[0] = 2345
|
|
v1[1] = 64578
|
|
v1[2] = 34
|
|
v2 = pickle.loads(pickle.dumps(v1))
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
# pickle.dump(v1,outF)
|
|
v2 = pickle.load(inF, encoding='bytes')
|
|
self.assertTrue(ds.ComputeL1Norm(v1, v2) == 0)
|
|
self.assertTrue(v1.GetTotalVal() == v2.GetTotalVal())
|
|
self.assertTrue(v2.GetTotalVal() != 0)
|
|
|
|
def test4DiscreteVectOps(self):
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 8)
|
|
for i in range(4):
|
|
v1[2 * i] = 2
|
|
self.assertTrue(v1.GetTotalVal() == 8)
|
|
v2 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 8)
|
|
for i in range(4):
|
|
v2[2 * i + 1] = 2
|
|
v2[2 * i] = 1
|
|
self.assertTrue(v2.GetTotalVal() == 12)
|
|
|
|
v3 = v1 | v2
|
|
self.assertTrue(len(v3) == len(v2))
|
|
self.assertTrue(v3.GetTotalVal() == 16)
|
|
|
|
v3 = v1 & v2
|
|
self.assertTrue(len(v3) == len(v2))
|
|
self.assertTrue(v3.GetTotalVal() == 4)
|
|
|
|
v4 = v1 + v2
|
|
self.assertTrue(len(v4) == len(v2))
|
|
self.assertTrue(v4.GetTotalVal() == 20)
|
|
|
|
v4 = v1 - v2
|
|
self.assertTrue(v4.GetTotalVal() == 4)
|
|
v4 = v2 - v1
|
|
self.assertTrue(v4.GetTotalVal() == 8)
|
|
|
|
v4 = v2
|
|
v4 -= v1
|
|
self.assertTrue(v4.GetTotalVal() == 8)
|
|
v4 -= v4
|
|
self.assertTrue(v4.GetTotalVal() == 0)
|
|
|
|
def testIterator(self):
|
|
"""
|
|
connected to sf.net issue 1719831:
|
|
http://sourceforge.net/tracker/index.php?func=detail&aid=1719831&group_id=160139&atid=814650
|
|
"""
|
|
v1 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30)
|
|
for i in range(15):
|
|
v1[2 * i] = 1
|
|
l1 = list(v1)
|
|
self.assertTrue(len(l1) == len(v1))
|
|
for v, l in zip(v1, l1):
|
|
self.assertTrue(l == v)
|
|
self.assertRaises(IndexError, lambda: v1[40])
|
|
|
|
def test9ToNumpy(self):
|
|
import numpy
|
|
bv = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 32)
|
|
bv[0] = 1
|
|
bv[1] = 4
|
|
bv[17] = 1
|
|
bv[23] = 8
|
|
bv[31] = 12
|
|
arr = numpy.zeros((3, ), 'i')
|
|
ds.ConvertToNumpyArray(bv, arr)
|
|
self.assertTrue(numpy.all(bv == arr))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|