1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from copy import deepcopy
24 from tempfile import mktemp
25
26
27 from data_store import Relax_data_store; ds = Relax_data_store()
28 from test_suite.system_tests.base_classes import SystemTestCase
29
30
32 """Class for testing various aspects specific to the alignment tensors."""
33
35 """Function for initialising a few alignment tensors."""
36
37
38 self.interpreter.pipe.create('test', 'N-state')
39
40
41 ds.tmpfile = mktemp()
42
43
44 align_id = 'test'
45
46
47 self.full_list = ['0 full', '1 full', '2 full', '3 full', '4 full']
48 self.red_list = ['0 red', '1 red', '2 red', '3 red', '4 red']
49
50
51 error = 1.47411211147e-05
52
53
54 self.tensors_full = [
55 (0.00014221982216882766, -0.00014454300156652134, -0.00070779621164871397, -0.00060161949408277324, 0.00020200800707295083),
56 (-0.00014307694949297205, -0.00039671919293883539, -0.00024724524395487659, 0.00031948292975139144, 0.00018868359624777637),
57 (-0.00022967898444150887, -0.00027171643813494106, -0.00021961563147411279, 0.00010337393266477703, 0.00029030226175831515),
58 (0.00043690692358615301, -0.00034379559287467062, -0.00019359695171683388, 0.00030194133983804048, -6.314162250164486e-05),
59 (-0.00026249527958822807, 0.00073561736796410628, 6.3975419225898133e-05, 6.2788017118057252e-05, 0.00020119758245770023)
60 ]
61 self.tensors_red = [
62 (-0.0004037026160192775, 0.00023172423501111316, -0.00020915186581478394, -0.00028817367472760139, -8.7172337025481604e-05),
63 (0.0003767999506688964, -0.00021492227011444111, 0.00019620694392616774, 0.00027163215478635274, 8.147201253457049e-05),
64 (0.00025970120925482461, -0.00014782823602910519, 0.00013565269563569894, 0.00018741173517420359, 5.6252903270026344e-05),
65 (0.00014574884684542708, -8.3162940224598374e-05, 7.4927100277784987e-05, 0.00010508245294401461, 3.1156238348722986e-05),
66 (-0.00011267453337899962, 6.412308037476237e-05, -5.7897942333203444e-05, -8.1865863377039068e-05, -2.5273427585025123e-05)
67 ]
68
69
70 self.interpreter.domain(id='full')
71 self.interpreter.domain(id='red')
72
73
74 for i in range(5):
75
76 self.interpreter.align_tensor.init(tensor=self.full_list[i], align_id=align_id, params=self.tensors_full[i], param_types=0)
77 self.interpreter.align_tensor.init(tensor=self.red_list[i], align_id=align_id, params=self.tensors_red[i], param_types=0)
78
79
80 self.interpreter.align_tensor.init(tensor=self.full_list[i], align_id=align_id, params=(error, error, error, error, error), param_types=0, errors=True)
81 self.interpreter.align_tensor.init(tensor=self.red_list[i], align_id=align_id, params=(error, error, error, error, error), param_types=0, errors=True)
82
83
84 self.interpreter.align_tensor.set_domain(tensor=self.full_list[i], domain='full')
85 self.interpreter.align_tensor.set_domain(tensor=self.red_list[i], domain='red')
86
87
88 self.interpreter.align_tensor.reduction(full_tensor=self.full_list[i], red_tensor=self.red_list[i])
89
90
91 cdp.align_tensors[2].set(param='Axx', value=1)
92
93
95 """Test the operation of the align_tensor.matrix_angles user function for different basis sets.
96
97 This originates from the script in test_suite/shared_data/align_data/basis_sets/.
98 """
99
100
101 tensor1 = [5.4839183673166663e-05, 3.692459844061351e-05, 1.994164790083226e-05, 4.5945264935308495e-05, 1.0090119622465559e-05]
102 tensor2 = [1.5832157768761617e-05, -4.9797877146095514e-05, -3.6007226809999e-05, -3.8175058915299295e-05, 5.3131759988544946e-05]
103 tensor3 = [3.892445496049645e-05, -1.7165585393754253e-05, 7.803231512226243e-05, -3.057296854986567e-05, 9.31348723610886e-05]
104 tensor4 = [4.6720247808382186e-05, -9.140580842599e-05, -3.415945182796103e-05, -1.7753928806205142e-05, 5.20457038882803e-05]
105
106
107 self.interpreter.pipe.create('basis set comparison', 'N-state')
108
109
110 self.interpreter.align_tensor.init(tensor='t1', align_id='t1', params=tuple(tensor1))
111 self.interpreter.align_tensor.init(tensor='t2', align_id='t2', params=tuple(tensor2))
112 self.interpreter.align_tensor.init(tensor='t3', align_id='t3', params=tuple(tensor3))
113 self.interpreter.align_tensor.init(tensor='t4', align_id='t4', params=tuple(tensor4))
114
115
116 self.interpreter.align_tensor.display()
117
118
119 self.interpreter.align_tensor.matrix_angles(basis_set='matrix')
120 self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000)
121 self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085)
122 self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276)
123 self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497)
124 self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085)
125 self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000)
126 self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885)
127 self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488)
128 self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276)
129 self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885)
130 self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000)
131 self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322)
132 self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497)
133 self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488)
134 self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322)
135 self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161)
136
137
138 self.interpreter.align_tensor.matrix_angles(basis_set='irreducible 5D')
139 self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000)
140 self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085)
141 self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276)
142 self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497)
143 self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085)
144 self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000)
145 self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885)
146 self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488)
147 self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276)
148 self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885)
149 self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000021073424)
150 self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322)
151 self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497)
152 self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488)
153 self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322)
154 self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000021073424)
155
156
157 self.interpreter.align_tensor.matrix_angles(basis_set='unitary 9D')
158 self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000)
159 self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085)
160 self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276)
161 self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497)
162 self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085)
163 self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000014901161)
164 self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885)
165 self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488)
166 self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276)
167 self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885)
168 self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000)
169 self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322)
170 self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497)
171 self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488)
172 self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322)
173 self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161)
174
175
176 self.interpreter.align_tensor.matrix_angles(basis_set='unitary 5D')
177 self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000)
178 self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 1.962377927826435)
179 self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.334149185082829)
180 self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.747728360218234)
181 self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 1.962377927826435)
182 self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000)
183 self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.163535022090889)
184 self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.449110033170688)
185 self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.334149185082829)
186 self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.163535022090889)
187 self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000)
188 self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.180324869602255)
189 self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.747728360218234)
190 self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.449110033170688)
191 self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.180324869602255)
192 self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000000000000)
193
194
195 self.interpreter.align_tensor.matrix_angles(basis_set='geometric 5D')
196 self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000)
197 self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 1.924475705542377)
198 self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.290778333130633)
199 self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.724794814547786)
200 self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 1.924475705542377)
201 self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000021073424)
202 self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.128650397698967)
203 self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.418891267835127)
204 self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.290778333130633)
205 self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.128650397698967)
206 self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000)
207 self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.126308408980378)
208 self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.724794814547786)
209 self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.418891267835127)
210 self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.126308408980378)
211 self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161)
212
213
215 """Test the operation of the align_tensor.svd user function for different basis sets.
216
217 This originates from the script in test_suite/shared_data/align_data/basis_sets/.
218 """
219
220
221 tensor1 = [5.4839183673166663e-05, 3.692459844061351e-05, 1.994164790083226e-05, 4.5945264935308495e-05, 1.0090119622465559e-05]
222 tensor2 = [1.5832157768761617e-05, -4.9797877146095514e-05, -3.6007226809999e-05, -3.8175058915299295e-05, 5.3131759988544946e-05]
223 tensor3 = [3.892445496049645e-05, -1.7165585393754253e-05, 7.803231512226243e-05, -3.057296854986567e-05, 9.31348723610886e-05]
224 tensor4 = [4.6720247808382186e-05, -9.140580842599e-05, -3.415945182796103e-05, -1.7753928806205142e-05, 5.20457038882803e-05]
225
226
227 self.interpreter.pipe.create('basis set comparison', 'N-state')
228
229
230 self.interpreter.align_tensor.init(tensor='t1', align_id='t1', params=tuple(tensor1))
231 self.interpreter.align_tensor.init(tensor='t2', align_id='t2', params=tuple(tensor2))
232 self.interpreter.align_tensor.init(tensor='t3', align_id='t3', params=tuple(tensor3))
233 self.interpreter.align_tensor.init(tensor='t4', align_id='t4', params=tuple(tensor4))
234
235
236 self.interpreter.align_tensor.display()
237
238
239 self.interpreter.align_tensor.svd(basis_set='irreducible 5D')
240 self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.131054731740254)
241 self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000413550754079)
242 self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000346772331066)
243 self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000185983409775)
244 self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000067451812481)
245
246
247 self.interpreter.align_tensor.svd(basis_set='unitary 9D')
248 self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.131054731740256)
249 self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000319487975056)
250 self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000267898410932)
251 self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000143681186401)
252 self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000052109790083)
253
254
255 self.interpreter.align_tensor.svd(basis_set='unitary 5D')
256 self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.503663323975970)
257 self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000250394766677)
258 self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000177094839440)
259 self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000106716235329)
260 self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000038500573324)
261
262
263 self.interpreter.align_tensor.svd(basis_set='geometric 5D')
264 self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.982475764795178)
265 self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000304033216708)
266 self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000201547771250)
267 self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000125447137629)
268 self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000043542323232)
269
270
272 """Test the copying of alignment tensors (to catch U{bug #20338<https://web.archive.org/web/https://gna.org/bugs/?20338>}."""
273
274
275 self.interpreter.reset()
276
277
278 self.interpreter.pipe.create('copy test', 'N-state')
279
280
281 self.interpreter.align_tensor.init(tensor='orig', align_id='test', params=self.tensors_full[0], param_types=0)
282
283
284 self.interpreter.align_tensor.copy(tensor_from='orig', tensor_to='new')
285
286
287 self.assertEqual(len(cdp.align_tensors), 2)
288 self.assertEqual(cdp.align_tensors[0].name, 'orig')
289 self.assertEqual(cdp.align_tensors[1].name, 'new')
290
291
312
313
315 """Test the copying of alignment tensor Monte Carlo simulations between data pipes."""
316
317
318 self.interpreter.reset()
319
320
321 self.interpreter.pipe.create('target', 'N-state')
322 self.interpreter.pipe.create('source', 'N-state')
323
324
325 self.interpreter.align_tensor.init(tensor='orig', align_id='test', params=self.tensors_full[0], param_types=0)
326
327
328 sim_number = 10
329 cdp.align_tensors[0].set_sim_num(sim_number)
330
331
332 for object_name in ['Axx', 'Ayy', 'Axy', 'Axz', 'Ayz']:
333 for i in range(sim_number):
334 cdp.align_tensors[0].set(param=object_name, value=deepcopy(getattr(cdp.align_tensors[0], object_name)), category='sim', sim_index=i)
335
336
337 self.interpreter.align_tensor.copy(pipe_from='source', pipe_to='target')
338
339
340 self.interpreter.pipe.switch('target')
341 self.assertEqual(len(cdp.align_tensors), 1)
342 self.assertEqual(cdp.align_tensors[0].name, 'orig')
343
344
360
361
363 """Test the conversion to and from XML."""
364
365
366 self.interpreter.results.write(ds.tmpfile, dir=None, compress_type=0)
367
368
369 self.interpreter.pipe.create('new', 'N-state')
370
371
372 self.interpreter.results.read(ds.tmpfile, dir=None)
373
374
375 self.assertEqual(len(cdp.align_tensors), 10)
376 self.assert_(hasattr(cdp.align_tensors, 'reduction'))
377 for i in range(5):
378
379 if i == 1:
380 self.assertAlmostEqual(cdp.align_tensors[i*2].Axx, 1.0)
381 else:
382 self.assertAlmostEqual(cdp.align_tensors[i*2].Sxx, self.tensors_full[i][0])
383 self.assertAlmostEqual(cdp.align_tensors[i*2].Syy, self.tensors_full[i][1])
384 self.assertAlmostEqual(cdp.align_tensors[i*2].Sxy, self.tensors_full[i][2])
385 self.assertAlmostEqual(cdp.align_tensors[i*2].Sxz, self.tensors_full[i][3])
386 self.assertAlmostEqual(cdp.align_tensors[i*2].Syz, self.tensors_full[i][4])
387 self.assertEqual(cdp.align_tensors[i*2].name, self.full_list[i])
388
389
390 self.assertAlmostEqual(cdp.align_tensors[i*2+1].Sxx, self.tensors_red[i][0])
391 self.assertAlmostEqual(cdp.align_tensors[i*2+1].Syy, self.tensors_red[i][1])
392 self.assertAlmostEqual(cdp.align_tensors[i*2+1].Sxy, self.tensors_red[i][2])
393 self.assertAlmostEqual(cdp.align_tensors[i*2+1].Sxz, self.tensors_red[i][3])
394 self.assertAlmostEqual(cdp.align_tensors[i*2+1].Syz, self.tensors_red[i][4])
395 self.assertEqual(cdp.align_tensors[i*2+1].name, self.red_list[i])
396
397
398 self.assertEqual(cdp.align_tensors.reduction[i], [i*2, i*2+1])
399