1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from data import Relax_data_store; ds = Relax_data_store()
25 from generic_fns import pipes
26 from relax_errors import RelaxError, RelaxNoPipeError, RelaxSpinSelectDisallowError
27 from test_suite.unit_tests.base_classes import UnitTestCase
28
29
31 """Testing base class for 'prompt.residue' and corresponding 'generic_fns.mol_res_spin' fns.
32
33 This base class also contains many shared unit tests.
34 """
35
37 """Set up for all the residue 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 self.residue_fns.create(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 self.residue_fns.copy(res_from=':1', res_to='#New mol')
66 self.residue_fns.copy(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
74 """Test the copying of the residue data between different molecules.
75
76 The function tested is both generic_fns.mol_res_spin.copy_residue() and
77 prompt.residue.copy().
78 """
79
80
81 self.setup_data()
82
83
84 dp = pipes.get_pipe('orig')
85
86
87 self.assertEqual(dp.mol[0].res[0].num, 1)
88 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
89 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
90 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
91
92
93 self.assertEqual(dp.mol[1].name, 'New mol')
94 self.assertEqual(dp.mol[1].res[0].num, 1)
95 self.assertEqual(dp.mol[1].res[0].name, 'Ala')
96 self.assertEqual(dp.mol[1].res[0].spin[0].num, 111)
97 self.assertEqual(dp.mol[1].res[0].spin[0].x, 1)
98
99
100 self.assertEqual(dp.mol[1].res[1].num, 5)
101 self.assertEqual(dp.mol[1].res[1].name, 'Ala')
102 self.assertEqual(dp.mol[1].res[1].spin[0].num, 111)
103 self.assertEqual(dp.mol[1].res[1].spin[0].x, 1)
104
105
106
108 """Test the copying of the residue data between different data pipes.
109
110 The function tested is both generic_fns.mol_res_spin.copy_residue() and
111 prompt.residue.copy().
112 """
113
114
115 dp = pipes.get_pipe('orig')
116 dp_test = pipes.get_pipe('test')
117
118
119 self.residue_fns.create(1, 'Ala')
120 dp.mol[0].res[0].spin[0].num = 111
121 dp.mol[0].res[0].spin[0].x = 1
122
123
124 self.residue_fns.copy(res_from=':1', pipe_to='test')
125 self.residue_fns.copy(pipe_from='orig', res_from=':1', pipe_to='test', res_to=':5')
126
127
128 dp.mol[0].res[0].spin[0].num = 222
129 dp.mol[0].res[0].spin[0].x = 2
130
131
132 self.assertEqual(dp.mol[0].res[0].num, 1)
133 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
134 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
135 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
136
137
138 self.assertEqual(dp_test.mol[0].res[0].num, 1)
139 self.assertEqual(dp_test.mol[0].res[0].name, 'Ala')
140 self.assertEqual(dp_test.mol[0].res[0].spin[0].num, 111)
141 self.assertEqual(dp_test.mol[0].res[0].spin[0].x, 1)
142
143
144 self.assertEqual(dp_test.mol[0].res[1].num, 5)
145 self.assertEqual(dp_test.mol[0].res[1].name, 'Ala')
146 self.assertEqual(dp_test.mol[0].res[1].spin[0].num, 111)
147 self.assertEqual(dp_test.mol[0].res[1].spin[0].x, 1)
148
149
151 """Test the copying of the residue data between different data pipes.
152
153 The function tested is both generic_fns.mol_res_spin.copy_residue() and
154 prompt.residue.copy().
155 """
156
157
158 dp = pipes.get_pipe('orig')
159
160
161 self.residue_fns.create(1, 'Ala')
162 dp.mol[0].res[0].spin[0].num = 111
163 dp.mol[0].res[0].spin[0].x = 1
164
165
166 self.assertRaises(RelaxNoPipeError, self.residue_fns.copy, res_from=':1', pipe_to='test2')
167
168
170 """Test the copying of the residue data within a single molecule.
171
172 The function tested is both generic_fns.mol_res_spin.copy_residue() and
173 prompt.residue.copy().
174 """
175
176
177 dp = pipes.get_pipe('orig')
178
179
180 self.residue_fns.create(1, 'Ala')
181 dp.mol[0].res[0].spin[0].num = 111
182 dp.mol[0].res[0].spin[0].x = 1
183
184
185 self.residue_fns.copy(res_from=':1', res_to=':2')
186 self.residue_fns.copy(res_from=':1', pipe_to='orig', res_to=':3')
187
188
189 dp.mol[0].res[0].spin[0].num = 222
190 dp.mol[0].res[0].spin[0].x = 2
191
192
193 self.residue_fns.copy(res_from=':1', res_to=':4,Met')
194
195
196 self.assertEqual(dp.mol[0].res[0].num, 1)
197 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
198 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
199 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
200
201
202 self.assertEqual(dp.mol[0].res[1].num, 2)
203 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
204 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
205 self.assertEqual(dp.mol[0].res[1].spin[0].x, 1)
206
207
208 self.assertEqual(dp.mol[0].res[2].num, 3)
209 self.assertEqual(dp.mol[0].res[2].name, 'Ala')
210 self.assertEqual(dp.mol[0].res[2].spin[0].num, 111)
211 self.assertEqual(dp.mol[0].res[2].spin[0].x, 1)
212
213
214 self.assertEqual(dp.mol[0].res[3].num, 4)
215 self.assertEqual(dp.mol[0].res[3].name, 'Met')
216 self.assertEqual(dp.mol[0].res[3].spin[0].num, 222)
217 self.assertEqual(dp.mol[0].res[3].spin[0].x, 2)
218
219
221 """The failure of copying residue data within a molecule of a non-existent residue.
222
223 The function tested is both generic_fns.mol_res_spin.copy_residue() and
224 prompt.residue.copy().
225 """
226
227
228 self.residue_fns.create(1, 'Ala')
229 self.residue_fns.create(-1, 'His')
230
231
232 self.assertRaises(RelaxError, self.residue_fns.copy, res_from=':Met', res_to=':2,Gly')
233
234
236 """The failure of copying residue data within a molecule to a residue which already exists.
237
238 The function tested is both generic_fns.mol_res_spin.copy_residue() and
239 prompt.residue.copy().
240 """
241
242
243 self.residue_fns.create(1, 'Ala')
244 self.residue_fns.create(-1, 'His')
245
246
247 self.assertRaises(RelaxError, self.residue_fns.copy, res_from=':1', res_to=':-1,Gly')
248
249
251 """Test the creation of a residue.
252
253 The function tested is both generic_fns.mol_res_spin.create_residue() and
254 prompt.residue.create().
255 """
256
257
258 dp = pipes.get_pipe('orig')
259
260
261 self.residue_fns.create(1, 'Ala')
262 self.residue_fns.create(2, 'Leu')
263 self.residue_fns.create(-3, 'Ser')
264
265
266 self.assertEqual(dp.mol[0].res[0].num, 1)
267 self.assertEqual(dp.mol[0].res[1].num, 2)
268 self.assertEqual(dp.mol[0].res[2].num, -3)
269
270
271 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
272 self.assertEqual(dp.mol[0].res[1].name, 'Leu')
273 self.assertEqual(dp.mol[0].res[2].name, 'Ser')
274
275
277 """Test the failure of residue creation (by supplying two residues with the same number).
278
279 The function tested is both generic_fns.mol_res_spin.create_residue() and
280 prompt.residue.create().
281 """
282
283
284 self.residue_fns.create(1, 'Ala')
285
286
287 self.assertRaises(RelaxError, self.residue_fns.create, 1, 'Ala')
288
289
291 """Test residue deletion using residue name identifiers.
292
293 The function tested is both generic_fns.mol_res_spin.delete_residue() and
294 prompt.residue.delete().
295 """
296
297
298 dp = pipes.get_pipe('orig')
299
300
301 self.residue_fns.create(1, 'Ala')
302 self.residue_fns.create(2, 'Ala')
303 self.residue_fns.create(3, 'Ala')
304 self.residue_fns.create(4, 'Gly')
305 dp.mol[0].res[3].spin[0].num = 111
306 dp.mol[0].res[3].spin[0].x = 1
307
308
309 self.residue_fns.delete(res_id=':Ala')
310
311
312 self.assertEqual(dp.mol[0].res[0].num, 4)
313 self.assertEqual(dp.mol[0].res[0].name, 'Gly')
314 self.assertEqual(dp.mol[0].res[0].spin[0].num, 111)
315 self.assert_(hasattr(dp.mol[0].res[0].spin[0], 'x'))
316
317
319 """Test residue deletion using residue number identifiers.
320
321 The function tested is both generic_fns.mol_res_spin.delete_residue() and
322 prompt.residue.delete().
323 """
324
325
326 dp = pipes.get_pipe('orig')
327
328
329 self.residue_fns.create(1, 'Ala')
330 self.residue_fns.create(2, 'Ala')
331 self.residue_fns.create(3, 'Ala')
332 self.residue_fns.create(4, 'Gly')
333 dp.mol[0].res[3].spin[0].num = 111
334 dp.mol[0].res[3].spin[0].x = 1
335
336
337 self.residue_fns.delete(res_id=':1')
338
339
340 self.assertEqual(dp.mol[0].res[0].num, 2)
341 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
342 self.assertEqual(dp.mol[0].res[1].num, 3)
343 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
344 self.assertEqual(dp.mol[0].res[2].num, 4)
345 self.assertEqual(dp.mol[0].res[2].name, 'Gly')
346 self.assertEqual(dp.mol[0].res[2].spin[0].num, 111)
347 self.assert_(hasattr(dp.mol[0].res[2].spin[0], 'x'))
348
349
351 """Test the deletion of all residues.
352
353 The function tested is both generic_fns.mol_res_spin.delete_residue() and
354 prompt.residue.delete().
355 """
356
357
358 dp = pipes.get_pipe('orig')
359
360
361 self.residue_fns.create(1, 'Ala')
362 self.residue_fns.create(2, 'Ala')
363 self.residue_fns.create(3, 'Ala')
364 self.residue_fns.create(4, 'Ala')
365 dp.mol[0].res[3].spin[0].num = 111
366 dp.mol[0].res[3].spin[0].x = 1
367
368
369 self.residue_fns.delete(res_id=':1-4')
370
371
372 self.assertEqual(dp.mol[0].res[0].num, None)
373 self.assertEqual(dp.mol[0].res[0].name, None)
374
375
377 """Test the deletion of multiple residues.
378
379 The function tested is both generic_fns.mol_res_spin.delete_residue() and
380 prompt.residue.delete().
381 """
382
383
384 dp = pipes.get_pipe('orig')
385
386
387 self.residue_fns.create(1, 'Ala')
388 self.residue_fns.create(2, 'Ala')
389 self.residue_fns.create(3, 'Ala')
390 self.residue_fns.create(4, 'Ala')
391 dp.mol[0].res[3].spin[0].num = 111
392 dp.mol[0].res[3].spin[0].x = 1
393
394
395 self.residue_fns.delete(res_id=':1,3')
396
397
398 self.assertEqual(dp.mol[0].res[0].num, 2)
399 self.assertEqual(dp.mol[0].res[1].num, 4)
400 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
401 self.assert_(hasattr(dp.mol[0].res[1].spin[0], 'x'))
402
403
405 """Test the failure of residue deletion when an atom id is supplied.
406
407 The function tested is both generic_fns.mol_res_spin.delete_residue() and
408 prompt.residue.delete().
409 """
410
411
412 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.delete, res_id='@2')
413
414
430
431
433 """Test the failure of the display of residue information.
434
435 The function tested is both generic_fns.mol_res_spin.display_residue() and
436 prompt.residue.display().
437 """
438
439
440 self.setup_data()
441
442
443 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.display, '@N')
444
445
447 """Test the renaming of a residue.
448
449 The function tested is both generic_fns.mol_res_spin.name_residue() and
450 prompt.residue.name().
451 """
452
453
454 dp = pipes.get_pipe('orig')
455
456
457 self.residue_fns.create(-10, 'His')
458
459
460 self.residue_fns.name(res_id=':-10', name='K', force=True)
461
462
463 self.assertEqual(dp.mol[0].res[0].name, 'K')
464
465
467 """Test the renaming of multiple residues.
468
469 The function tested is both generic_fns.mol_res_spin.name_residue() and
470 prompt.residue.name().
471 """
472
473
474 dp = pipes.get_pipe('orig')
475
476
477 self.residue_fns.create(1, 'Ala')
478 dp.mol[0].res[0].spin[0].num = 111
479
480
481 self.residue_fns.copy(res_from=':1', res_to=':2')
482 self.residue_fns.copy(res_from=':1', res_to=':3')
483
484
485 dp.mol[0].res[0].name = 'His'
486
487
488 self.residue_fns.copy(res_from=':1', res_to=':4,Met')
489
490
491 self.residue_fns.name(res_id=':Ala', name='Gln', force=True)
492
493
494 self.assertEqual(dp.mol[0].res[1].name, 'Gln')
495 self.assertEqual(dp.mol[0].res[2].name, 'Gln')
496
497
498 self.assertEqual(dp.mol[0].res[0].name, 'His')
499 self.assertEqual(dp.mol[0].res[3].name, 'Met')
500
501
503 """Test the failure of naming a residue when a spin id is given.
504
505 The function tested is both generic_fns.mol_res_spin.name_residue() and
506 prompt.residue.name().
507 """
508
509
510 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.name, res_id='@111', name='K')
511
512
514 """Test the renumbering of a residue.
515
516 The function tested is both generic_fns.mol_res_spin.number_residue() and
517 prompt.residue.number().
518 """
519
520
521 dp = pipes.get_pipe('orig')
522
523
524 self.residue_fns.create(-10, 'His')
525
526
527 self.residue_fns.number(res_id=':-10', number=10, force=True)
528
529
530 self.assertEqual(dp.mol[0].res[0].num, 10)
531
532
558
559
561 """Test the failure of naming a residue when a spin id is given.
562
563 The function tested is both generic_fns.mol_res_spin.number_residue() and
564 prompt.residue.number().
565 """
566
567
568 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.number, res_id='@111', number=10)
569