Files
PlantAI-dev/tools/pymol-open-source/testing/tests/properties/mae_io.py
T
2026-08-03 18:42:47 +08:00

66 lines
2.2 KiB
Python

from pymol import cmd, testing
@testing.requires_version('2.2')
@testing.requires('properties')
class TestMaePropertiesIO(testing.PyMOLTestCase):
def test(self):
cmd.fragment('gly')
# atom properties
cmd.alter('index 2-4', 'p.r_custom_indexhalve = index / 2.0')
cmd.alter('index 3-5', 'p.neg_index = -index')
cmd.alter('elem C', 'p["spaced resn name"] = resn + " " + name')
# object properties
objprops = [
('first', 'Max'),
('last', 'Mustermann'),
('full name', 'Max Mustermann'),
('quoted "name"', 'Max "Mustermann"'),
]
for (key, value) in objprops:
cmd.set_property(key, value)
# save/load round-trip
with testing.mktemp('.mae') as filename:
cmd.save(filename)
cmd.delete('*')
cmd.set('load_object_props_default', '*')
cmd.set('load_atom_props_default', '*')
cmd.load(filename, 'm1')
# type conversions
cmd.alter('m1', 'p.neg_index = int(p.s_pymol_neg_index or 0)')
# atom properties
self.assertEqual(2, cmd.count_atoms('p.neg_index < -3'))
self.assertEqual(2, cmd.count_atoms('p.r_custom_indexhalve > 1.0'))
# changed in 2.3.1: undefined (<>) -> None
resnname = set()
cmd.iterate('m1', 'resnname.add(p["s_pymol_spaced resn name"] or "")', space=locals())
self.assertEqual(resnname, set(['GLY C', 'GLY CA', '']))
# object properties
for (key, value) in objprops:
self.assertEqual(cmd.get_property('s_pymol_' + key, 'm1'), value)
@testing.requires_version('2.3.1')
def test_undefined(self):
cmd.fragment('gly')
cmd.alter('name C', 'p["s_p_foo"] = "bar"')
cmd.alter('name N', 'p["r_p_bar"] = 1.234')
# save/load round-trip
with testing.mktemp('.mae') as filename:
cmd.save(filename)
cmd.delete('*')
cmd.load(filename, 'm1')
myprops = {}
cmd.iterate('all', 'myprops[name] = (p.s_p_foo, p.r_p_bar)', space=locals())
self.assertEqual(myprops['O'], (None, None))
self.assertEqual(myprops['C'], ("bar", None))
self.assertEqual(myprops['N'], (None, 1.234))