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