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