1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from data_store import Relax_data_store; ds = Relax_data_store()
24 from pipe_control.mol_res_spin import copy_residue, create_residue, metadata_update
25 from pipe_control import pipes
26 from lib.errors import RelaxError, RelaxMultiMolIDError, RelaxNoPipeError, RelaxResSelectDisallowError, RelaxSpinSelectDisallowError
27 from test_suite.unit_tests.base_classes import UnitTestCase
28
29
31 """Testing base class for 'prompt.molecule' and corresponding 'pipe_control.mol_spin_res' fns.
32
33 This base class also contains many shared unit tests.
34 """
35
37 """Set up for all the molecule unit tests."""
38
39
40 ds.add(pipe_name='orig', pipe_type='mf')
41
42
43 ds.add(pipe_name='test', pipe_type='mf')
44
45
46 pipes.switch('orig')
47
48
50 """Function for setting up some data for the unit tests."""
51
52
53 dp = pipes.get_pipe('orig')
54
55
56 create_residue(1, 'Ala')
57 dp.mol[0].res[0].spin[0].num = 111
58 dp.mol[0].res[0].spin[0].x = 1
59 dp.mol[0].name = 'Old mol'
60
61
62 dp.mol.add_item('New mol')
63
64
65 copy_residue(res_from=':1', res_to='#New mol')
66 copy_residue(res_from='#Old mol:1', res_to='#New mol:5')
67
68
69 dp.mol[0].res[0].spin[0].num = 222
70 dp.mol[0].res[0].spin[0].x = 2
71
72
73 metadata_update()
74
75
77 """Test the copying of the molecule data between different data pipes.
78
79 The function tested is both pipe_control.mol_res_spin.copy_molecule() and
80 prompt.molecule.copy().
81 """
82
83
84 dp = pipes.get_pipe('orig')
85 dp_test = pipes.get_pipe('test')
86
87
88 self.molecule_fns.create('Old mol')
89 create_residue(1, 'Ala')
90 dp.mol[0].res[0].spin[0].num = 111
91 dp.mol[0].res[0].spin[0].x = 1
92
93
94 metadata_update()
95
96
97 self.molecule_fns.copy(mol_from='#Old mol', pipe_to='test')
98 self.molecule_fns.copy(pipe_from='orig', mol_from='#Old mol', pipe_to='test', mol_to='#New mol')
99
100
101 dp.mol[0].res[0].spin[0].num = 222
102 dp.mol[0].res[0].spin[0].x = 2
103
104
105 metadata_update()
106
107
108 self.assertEqual(dp.mol[0].name, 'Old mol')
109 self.assertEqual(dp.mol[0].res[0].num, 1)
110 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
111 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
112 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
113
114
115 self.assertEqual(dp_test.mol[0].name, 'Old mol')
116 self.assertEqual(dp_test.mol[0].res[0].num, 1)
117 self.assertEqual(dp_test.mol[0].res[0].name, 'Ala')
118 self.assertEqual(dp_test.mol[0].res[0].spin[0].num, 111)
119 self.assertEqual(dp_test.mol[0].res[0].spin[0].x, 1)
120
121
122 self.assertEqual(dp_test.mol[1].name, 'New mol')
123 self.assertEqual(dp_test.mol[1].res[0].num, 1)
124 self.assertEqual(dp_test.mol[1].res[0].name, 'Ala')
125 self.assertEqual(dp_test.mol[1].res[0].spin[0].num, 111)
126 self.assertEqual(dp_test.mol[1].res[0].spin[0].x, 1)
127
128
130 """Test the failure of copying of the molecule data between different data pipes.
131
132 The function tested is both pipe_control.mol_res_spin.copy_molecule() and
133 prompt.molecule.copy().
134 """
135
136
137 dp = pipes.get_pipe('orig')
138
139
140 self.molecule_fns.create('Old mol')
141 create_residue(1, 'Ala')
142 dp.mol[0].res[0].spin[0].num = 111
143 dp.mol[0].res[0].spin[0].x = 1
144
145
146 metadata_update()
147
148
149 self.assertRaises(RelaxNoPipeError, self.molecule_fns.copy, mol_from='#Old mol', pipe_to='test2')
150
151
153 """Test the copying of the molecule data within a single data pipe.
154
155 The function tested is both pipe_control.mol_res_spin.copy_molecule() and
156 prompt.molecule.copy().
157 """
158
159
160 dp = pipes.get_pipe('orig')
161
162
163 self.molecule_fns.create('Old mol')
164 create_residue(1, 'Ala')
165 dp.mol[0].res[0].spin[0].num = 111
166 dp.mol[0].res[0].spin[0].x = 1
167
168
169 metadata_update()
170
171
172 self.molecule_fns.copy(mol_from='#Old mol', mol_to='#2')
173 self.molecule_fns.copy(mol_from='#Old mol', pipe_to='orig', mol_to='#3')
174
175
176 dp.mol[0].res[0].spin[0].num = 222
177 dp.mol[0].res[0].spin[0].x = 2
178
179
180 metadata_update()
181
182
183 self.molecule_fns.copy(mol_from='#Old mol', mol_to='#4')
184
185
186 self.assertEqual(dp.mol[0].name, 'Old mol')
187 self.assertEqual(dp.mol[0].res[0].num, 1)
188 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
189 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
190 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
191
192
193 self.assertEqual(dp.mol[1].name, '2')
194 self.assertEqual(dp.mol[1].res[0].num, 1)
195 self.assertEqual(dp.mol[1].res[0].name, 'Ala')
196 self.assertEqual(dp.mol[1].res[0].spin[0].num, 111)
197 self.assertEqual(dp.mol[1].res[0].spin[0].x, 1)
198
199
200 self.assertEqual(dp.mol[2].name, '3')
201 self.assertEqual(dp.mol[2].res[0].num, 1)
202 self.assertEqual(dp.mol[2].res[0].name, 'Ala')
203 self.assertEqual(dp.mol[2].res[0].spin[0].num, 111)
204 self.assertEqual(dp.mol[2].res[0].spin[0].x, 1)
205
206
207 self.assertEqual(dp.mol[3].name, '4')
208 self.assertEqual(dp.mol[3].res[0].num, 1)
209 self.assertEqual(dp.mol[3].res[0].name, 'Ala')
210 self.assertEqual(dp.mol[3].res[0].spin[0].num, 222)
211 self.assertEqual(dp.mol[3].res[0].spin[0].x, 2)
212
213
215 """Test the failure of the copying of the molecule data within a molecule.
216
217 The function tested is both pipe_control.mol_res_spin.copy_molecule() and
218 prompt.molecule.copy().
219 """
220
221
222 self.molecule_fns.create('GST')
223 self.molecule_fns.create('GB1')
224
225
226 self.assertRaises(RelaxError, self.molecule_fns.copy, mol_from='#MBP', mol_to='#IL4')
227
228
229 self.assertRaises(RelaxError, self.molecule_fns.copy, mol_from='#GST', mol_to='#GB1')
230
231
233 """Test the creation of a molecule data structure.
234
235 The function tested is both pipe_control.mol_res_spin.create_molecule() and
236 prompt.molecule.create().
237 """
238
239
240 dp = pipes.get_pipe('orig')
241
242
243 self.molecule_fns.create('Ap4Aase')
244 self.molecule_fns.create('ATP')
245 self.molecule_fns.create(mol_name='MgF4')
246
247
248 self.assertEqual(dp.mol[0].name, 'Ap4Aase')
249 self.assertEqual(dp.mol[1].name, 'ATP')
250 self.assertEqual(dp.mol[2].name, 'MgF4')
251
252
254 """Test the failure of molecule creation by supplying two molecules with the same name.
255
256 The function tested is both pipe_control.mol_res_spin.create_molecule() and
257 prompt.molecule.create().
258 """
259
260
261 self.molecule_fns.create('CaM')
262
263
264 self.assertRaises(RelaxError, self.molecule_fns.create, 'CaM')
265
266
268 """Test molecule deletion.
269
270 The function tested is both pipe_control.mol_res_spin.delete_molecule() and
271 prompt.molecule.delete().
272 """
273
274
275 self.setup_data()
276
277
278 dp = pipes.get_pipe('orig')
279
280
281 self.molecule_fns.delete(mol_id='#Old mol')
282
283
284 self.assertEqual(dp.mol[0].name, 'New mol')
285 self.assertEqual(dp.mol[0].res[0].num, 1)
286 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
287 self.assertEqual(dp.mol[0].res[0].spin[0].num, 111)
288 self.assertTrue(hasattr(dp.mol[0].res[0].spin[0], 'x'))
289 self.assertEqual(dp.mol[0].res[1].num, 5)
290 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
291 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
292 self.assertTrue(hasattr(dp.mol[0].res[1].spin[0], 'x'))
293
294
296 """Test the deletion of all molecules.
297
298 The function tested is both pipe_control.mol_res_spin.delete_molecule() and
299 prompt.molecule.delete().
300 """
301
302
303 dp = pipes.get_pipe('orig')
304
305
306 self.setup_data()
307
308
309 self.molecule_fns.delete(mol_id='#Old mol')
310 self.molecule_fns.delete(mol_id='#New mol')
311
312
313 self.assertEqual(dp.mol[0].name, None)
314 self.assertEqual(dp.mol[0].res[0].num, None)
315 self.assertEqual(dp.mol[0].res[0].name, None)
316 self.assertEqual(dp.mol[0].res[0].spin[0].num, None)
317 self.assertEqual(dp.mol[0].res[0].spin[0].name, None)
318
319
321 """Test the failure of molecule deletion when a residue or spin id is supplied.
322
323 The function tested is both pipe_control.mol_res_spin.delete_molecule() and
324 prompt.molecule.delete().
325 """
326
327
328 self.assertRaises(RelaxSpinSelectDisallowError, self.molecule_fns.delete, mol_id='@2')
329
330
331 self.assertRaises(RelaxResSelectDisallowError, self.molecule_fns.delete, mol_id=':1')
332
333
335 """Test the display of molecular information.
336
337 The function tested is both pipe_control.mol_res_spin.display_molecule() and
338 prompt.molecule.display().
339 """
340
341
342 self.setup_data()
343
344
345 self.molecule_fns.display()
346 self.molecule_fns.display('#Old mol')
347 self.molecule_fns.display(mol_id='#New mol')
348
349
363
364
366 """Test the renaming of a molecule.
367
368 The function tested is both pipe_control.mol_res_spin.name_molecule() and
369 prompt.molecule.name().
370 """
371
372
373 self.setup_data()
374
375
376 dp = pipes.get_pipe('orig')
377
378
379 self.molecule_fns.name(mol_id='#New mol', name='K', force=True)
380
381
382 self.assertEqual(dp.mol[1].name, 'K')
383
384
386 """Test the failure of naming a molecule when a residue or spin id is given.
387
388 The function tested is both pipe_control.mol_res_spin.name_molecule() and
389 prompt.molecule.name().
390 """
391
392
393 self.assertRaises(RelaxSpinSelectDisallowError, self.molecule_fns.name, mol_id='@111', name='K')
394
395
396 self.assertRaises(RelaxResSelectDisallowError, self.molecule_fns.name, mol_id=':1', name='K')
397
398
400 """Test the failure of the naming of multiple molecules to the same name.
401
402 The function tested is both pipe_control.mol_res_spin.name_molecule() and
403 prompt.molecule.name().
404 """
405
406
407 self.setup_data()
408
409
410 self.assertRaises(RelaxMultiMolIDError, self.molecule_fns.name, mol_id='#Old mol,New mol', name='K')
411