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