mirror of
https://github.com/schrodinger/pymol-open-source.git
synced 2026-06-07 20:44:23 +08:00
126 lines
4.9 KiB
Python
126 lines
4.9 KiB
Python
|
|
'''
|
|
Testing atom properties for simple getting/setting and loading from sdf and mae files
|
|
'''
|
|
|
|
import unittest
|
|
from pymol import cmd, testing, stored
|
|
|
|
@testing.requires('properties')
|
|
class TestAtomProperties(testing.PyMOLTestCase):
|
|
|
|
def testSetNoAtomProperty(self):
|
|
try:
|
|
cmd.set_atom_property('test_prop', 1, "index 1")
|
|
except:
|
|
self.assertEqual(False, True)
|
|
pass
|
|
|
|
@testing.foreach('1molecule.mae')
|
|
def testLoadNoProperties(self, molfilename):
|
|
cmd.set('load_object_props_default', '')
|
|
cmd.load(self.datafile(molfilename), 'test')
|
|
objs = cmd.get_object_list()
|
|
for obj in objs:
|
|
prop_list= cmd.get_property_list(obj)
|
|
self.assertEquals(prop_list, None)
|
|
|
|
@testing.foreach('1molecule.mae')
|
|
def testLoadNoAtomProperties(self, molfilename):
|
|
cmd.set('load_atom_props_default', '')
|
|
cmd.load(self.datafile(molfilename), 'test', object_props='*')
|
|
objs = cmd.get_object_list()
|
|
for obj in objs:
|
|
stored.prop_lookup = {}
|
|
self.assertEquals(cmd.count_atoms(obj) > 0, True)
|
|
cmd.iterate(obj, "stored.prop_lookup[index-1] = properties.all")
|
|
for i in stored.prop_lookup.keys():
|
|
self.assertEquals(len(stored.prop_lookup[i]), 0)
|
|
|
|
@testing.foreach('1molecule.mae', '1d_smiles.mae')
|
|
def testMAEchempy(self, molfilename):
|
|
cmd.load(self.datafile(molfilename), 'test', object_props='*', atom_props='*')
|
|
objs = cmd.get_object_list()
|
|
for obj in objs:
|
|
idxToVal = {}
|
|
natoms = cmd.count_atoms(obj)
|
|
for i in range(natoms):
|
|
idxToVal[i+1] = i*10
|
|
cmd.set_atom_property('test_prop', i*10, "index %d and %s" % (i+1, obj))
|
|
model = cmd.get_model(obj)
|
|
|
|
# test to make sure the properties that exist are the same
|
|
prop_list= cmd.get_property_list(obj)
|
|
mol_prop_list = [x[0] for x in model.molecule_properties]
|
|
self.assertEqual(set(prop_list), set(mol_prop_list))
|
|
|
|
# need to test whether the values are the same
|
|
for prop, val in model.molecule_properties:
|
|
propval = cmd.get_property(prop, obj)
|
|
self.assertEqual(propval, val)
|
|
|
|
self.assertEqual(natoms, len(model.atom))
|
|
|
|
# need to test values of all atom properties, including the ones that were set above
|
|
stored.prop_lookup = {}
|
|
cmd.iterate(obj, "stored.prop_lookup[index-1] = properties.all")
|
|
idx = 0
|
|
for at in model.atom:
|
|
for prop in at.atom_properties.keys():
|
|
val = at.atom_properties[prop]
|
|
self.assertEqual(val, stored.prop_lookup[idx][prop])
|
|
idx += 1
|
|
|
|
def testMAEsaveLoadSessionsWithAtomProperties(self, binary_dump=False):
|
|
cmd.set('pse_binary_dump', binary_dump)
|
|
cmd.load(self.datafile('1molecule.mae'), '1molecule', atom_props='*')
|
|
allpropdata = {}
|
|
objs = cmd.get_object_list()
|
|
stored.prop_lookup = {}
|
|
for obj in objs:
|
|
stored.prop_lookup[obj] = {}
|
|
cmd.iterate(obj, "stored.prop_lookup['%s'][index-1] = properties.all" % obj)
|
|
prop_lookup = stored.prop_lookup
|
|
with testing.mktemp('.pse') as psefilename:
|
|
cmd.save(psefilename)
|
|
cmd.load(psefilename)
|
|
stored.prop_lookup = {}
|
|
for obj in objs:
|
|
stored.prop_lookup[obj] = {}
|
|
cmd.iterate(obj, "stored.prop_lookup['%s'][index-1] = properties.all" % obj)
|
|
#test to make sure the properties are exactly the same from the saved session as the loaded session
|
|
self.assertEqual(prop_lookup, stored.prop_lookup)
|
|
|
|
@testing.requires_version('2.4')
|
|
def testMAEsaveLoadSessionsWithAtomPropertiesBinaryDump(self):
|
|
cmd.set('pse_export_version', 2.4)
|
|
self.testMAEsaveLoadSessionsWithAtomProperties(True)
|
|
|
|
@testing.requires_version('1.8.0.7')
|
|
def testDel(self):
|
|
cmd.pseudoatom('m1')
|
|
|
|
stored.keys = []
|
|
cmd.alter('all', 'p.foo = 123')
|
|
cmd.alter('all', 'p.bar = "Hello World"')
|
|
cmd.iterate('all', 'stored.keys = list(sorted(p.all))')
|
|
self.assertEqual(stored.keys, ['bar', 'foo'])
|
|
|
|
stored.keys = []
|
|
cmd.alter('all', "del p['foo']")
|
|
cmd.iterate('all', 'stored.keys = list(sorted(p.all))')
|
|
self.assertEqual(stored.keys, ['bar'])
|
|
|
|
stored.keys = []
|
|
cmd.alter('all', "p.bar = None")
|
|
cmd.iterate('all', 'stored.keys = list(sorted(p.all))')
|
|
self.assertEqual(stored.keys, [])
|
|
|
|
# object-level
|
|
cmd.set_property('bla', 456, 'm1')
|
|
stored.keys = cmd.get_property_list('m1')
|
|
self.assertEqual(stored.keys, ['bla'])
|
|
cmd.set_property('bla', None, 'm1')
|
|
stored.keys = cmd.get_property_list('m1')
|
|
self.assertEqual(stored.keys, [])
|