Files
pymol-open-source/testing/tests/properties/test_simple.py
2020-12-15 18:27:23 +01:00

173 lines
6.7 KiB
Python

'''
Testing properties for simple getting/setting and loading from sdf and mae files
'''
import unittest
from pymol import cmd, testing
@testing.requires('properties')
class TestProperties(testing.PyMOLTestCase):
# test loading MAE files with no properties (default)
def testMAEloadNoProperties(self):
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles')
objs = cmd.get_object_list()
for obj in objs:
props = cmd.get_property('', obj)
self.assertIsNone(props)
# test loading MAE files with all properties
def testMAEloadAllProperties(self):
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props='*')
objs = cmd.get_object_list()
for obj in objs:
props = cmd.get_property_list(obj)
self.assertIsNotNone(props)
# test loading MAE files with some properties listed
def testMAEloadSomeProperties(self):
props = ['s_knime_origin_file_name', 's_knime_origin_hostname']
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props=' '.join(props))
objs = cmd.get_object_list()
for obj in objs:
allprops = cmd.get_property_list(obj)
self.assertEqual(len(props), len(allprops))
# test loading MAE files with some properties listed that do not exist
def testMAEloadSomePropertiesDontExist(self):
props = ['s_knime_origin_file_name', 's_knime_origin_hostname', 'dontexist']
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props=' '.join(props))
objs = cmd.get_object_list()
for obj in objs:
allprops = cmd.get_property_list(obj)
self.assertIsNotNone(allprops)
# test loading MAE files with no properties listed
def testMAEloadSomePropertiesEmptyList(self):
props = []
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props=' '.join(props))
objs = cmd.get_object_list()
for obj in objs:
allprops = cmd.get_property_list(obj)
self.assertIsNone(allprops)
def testMAEsaveLoadSessions(self):
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props='*')
allpropdata = {}
objs = cmd.get_object_list()
for obj in objs:
props = cmd.get_property_list(obj)
allpropdata[obj] = {}
for prop in props:
allpropdata[obj][prop] = cmd.get_property(prop, obj)
with testing.mktemp('.pse') as psefilename:
cmd.save(psefilename)
cmd.load(psefilename)
# this is to fail the test on purpose
# cmd.set_property('i_m_ct_format', 3, '1d_smiles.mol_13')
objs = cmd.get_object_list()
for obj in objs:
props = cmd.get_property_list(obj)
# test to make sure there are no extra properties or not enough properties
self.assertEqual(set(props), set(allpropdata[obj].keys()))
# test to make sure all property values are the same
for prop in props:
try:
self.assertTrue(allpropdata[obj][prop] == cmd.get_property(prop, obj))
except:
self.fail('properties are not the same: obj=%s prop=%s' % (obj, prop))
def testMAEchempy(self):
cmd.load(self.datafile('1d_smiles.mae'), '1d_smiles', object_props='*')
objs = cmd.get_object_list()
for obj in objs:
model = cmd.get_model(obj)
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))
def testSimple(self):
cmd.fab('A', 'm1')
cmd.fab('A', 'm2')
v1 = 'foo'
v2 = 'bar'
v3 = 'com'
# single state
cmd.set_property('filename', v1, 'm1')
self.assertTrue('foo' == v1)
self.assertTrue(cmd.get_property('filename', 'm1') == v1)
self.assertTrue(cmd.get_property('filename', 'm2') == None)
# multiple objects
cmd.set_property('filename', v1)
self.assertTrue(cmd.get_property('filename', 'm2') == v1)
# two states
cmd.create('m1', 'm1', 1, 2)
self.assertTrue(cmd.count_states() == 2)
# set for all states
cmd.set_property('filename', v1, 'm1')
self.assertTrue(cmd.get_property('filename', 'm1', 2) == v1)
# set for particular state
cmd.set_property('filename', v2, 'm1', 2)
self.assertTrue(cmd.get_property('filename', 'm1', 1) == v1)
self.assertTrue(cmd.get_property('filename', 'm1', 2) == v2)
# set for current state
cmd.frame(2)
cmd.set_property('filename', v3, 'm1', -1)
self.assertTrue(cmd.get_property('filename', 'm1', 1) == v1)
self.assertTrue(cmd.get_property('filename', 'm1', 2) == v3)
def testSDF(self):
# get molecule with SDF annotations
cid = 6830
cmd.set('load_object_props_default', '')
cmd.load('CID_%d.sdf' % cid, 'm1')
self.assertEqual(None, cmd.get_property('PUBCHEM_COMPOUND_CID', 'm1'),
'property loaded, but should not')
cmd.delete('*')
cmd.load('CID_%d.sdf' % cid, 'm1', object_props='*')
self.assertEqual(cid, cmd.get_property('PUBCHEM_COMPOUND_CID', 'm1'))
v_pc = cmd.get_property('PUBCHEM_MMFF94_PARTIAL_CHARGES', 'm1')
lines = v_pc.rstrip().splitlines()
n_pc = int(lines[0])
self.assertEqual(n_pc, len(lines) - 1)
# test loading selective properties
cmd.set('load_object_props_default', "PUBCHEM_COMPOUND_CID PUBCHEM_CONFORMER_RMSD PUBCHEM_CONFORMER_DIVERSEORDER")
cmd.load('CID_%d.sdf' % cid, 'm2')
self.assertEqual(cid, cmd.get_property('PUBCHEM_COMPOUND_CID', 'm2'))
self.assertEqual(None, cmd.get_property('PUBCHEM_EFFECTIVE_ROTOR_COUNT', 'm2'))
@testing.requires_version('2.5')
def testRemoveAtoms(self):
# Removing atoms must not remove object properties PYMOL-3583
cmd.fragment("ala")
cmd.set_property("foo", 123, "ala")
self.assertEqual(cmd.get_property("foo", "ala"), 123)
cmd.remove("hydro")
self.assertEqual(cmd.get_property("foo", "ala"), 123)
def testRemoveAtomsPreserveAtomProperties(self):
# Removing atoms must preserve atom properties
cmd.fab("ACD")
cmd.alter("all", "p.foo = ID = index")
# force new sorting
cmd.alter("resi 2", "resv=4")
cmd.sort()
# remove some atoms
cmd.remove("elem C")
checklist = []
cmd.iterate("all", "checklist.append((p.foo == ID))", space=locals())
self.assertTrue(all(checklist))
# vi:nowrap