Package test_suite :: Package system_tests :: Module align_tensor
[hide private]
[frames] | no frames]

Source Code for Module test_suite.system_tests.align_tensor

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2006-2015 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  6  #                                                                             # 
  7  # This program is free software: you can redistribute it and/or modify        # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation, either version 3 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # This program is distributed in the hope that it will be useful,             # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 19  #                                                                             # 
 20  ############################################################################### 
 21   
 22  # Python module imports. 
 23  from copy import deepcopy 
 24  from tempfile import mktemp 
 25   
 26  # relax module imports. 
 27  from data_store import Relax_data_store; ds = Relax_data_store() 
 28  from test_suite.system_tests.base_classes import SystemTestCase 
 29   
 30   
31 -class Align_tensor(SystemTestCase):
32 """Class for testing various aspects specific to the alignment tensors.""" 33
34 - def setUp(self):
35 """Function for initialising a few alignment tensors.""" 36 37 # Create a data pipe. 38 self.interpreter.pipe.create('test', 'N-state') 39 40 # Temp file name. 41 ds.tmpfile = mktemp() 42 43 # The alignment. 44 align_id = 'test' 45 46 # Tensor name lists. 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 # Error. 51 error = 1.47411211147e-05 52 53 # Tensor lists. 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 # Define the domains. 70 self.interpreter.domain(id='full') 71 self.interpreter.domain(id='red') 72 73 # Set up the tensors. 74 for i in range(5): 75 # Load the tensor. 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 # Errors. 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 # Domain. 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 # Tensor reductions. 88 self.interpreter.align_tensor.reduction(full_tensor=self.full_list[i], red_tensor=self.red_list[i]) 89 90 # Reset some values. 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 # Random tensors of {Axx, Ayy, Axy, Axz, Ayz} generated using random.uniform(0, 1e-4). 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 # Create a N-state analysis data pipe. 107 self.interpreter.pipe.create('basis set comparison', 'N-state') 108 109 # Load the tensors. 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 # Display. 116 self.interpreter.align_tensor.display() 117 118 # The standard inter-matrix angles. 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 # The inter-tensor vector angles for the irreducible 5D basis set {A-2, A-1, A0, A1, A2}. 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 # The inter-tensor vector angles for the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz}. 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 # The inter-tensor vector angles for the unitary 5D basis set {Sxx, Syy, Sxy, Sxz, Syz}. 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 # The inter-tensor vector angles for the geometric 5D basis set {Szz, Sxxyy, Sxy, Sxz, Syz}. 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
214 - def test_align_tensor_svd(self):
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 # Random tensors of {Axx, Ayy, Axy, Axz, Ayz} generated using random.uniform(0, 1e-4). 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 # Create a N-state analysis data pipe. 227 self.interpreter.pipe.create('basis set comparison', 'N-state') 228 229 # Load the tensors. 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 # Display. 236 self.interpreter.align_tensor.display() 237 238 # SVD for the irreducible 5D basis set {A-2, A-1, A0, A1, A2}. 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 # SVD for the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz}. 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 # SVD for the unitary 5D basis set {Sxx, Syy, Sxy, Sxz, Syz}. 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 # SVD for the geometric 5D basis set {Szz, Sxxyy, Sxy, Sxz, Syz}. 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
271 - def test_copy(self):
272 """Test the copying of alignment tensors (to catch U{bug #20338<https://web.archive.org/web/https://gna.org/bugs/?20338>}.""" 273 274 # First reset. 275 self.interpreter.reset() 276 277 # Create a data pipe. 278 self.interpreter.pipe.create('copy test', 'N-state') 279 280 # Initialise one tensor. 281 self.interpreter.align_tensor.init(tensor='orig', align_id='test', params=self.tensors_full[0], param_types=0) 282 283 # Copy the tensor. 284 self.interpreter.align_tensor.copy(tensor_from='orig', tensor_to='new') 285 286 # Checks. 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
292 - def test_copy_pipes(self):
293 """Test the copying of alignment tensors between data pipes.""" 294 295 # First reset. 296 self.interpreter.reset() 297 298 # Create two data pipes. 299 self.interpreter.pipe.create('target', 'N-state') 300 self.interpreter.pipe.create('source', 'N-state') 301 302 # Initialise one tensor. 303 self.interpreter.align_tensor.init(tensor='orig', align_id='test', params=self.tensors_full[0], param_types=0) 304 305 # Copy the tensor. 306 self.interpreter.align_tensor.copy(pipe_from='source', pipe_to='target') 307 308 # Checks. 309 self.interpreter.pipe.switch('target') 310 self.assertEqual(len(cdp.align_tensors), 1) 311 self.assertEqual(cdp.align_tensors[0].name, 'orig')
312 313
314 - def test_copy_pipes_sims(self):
315 """Test the copying of alignment tensor Monte Carlo simulations between data pipes.""" 316 317 # First reset. 318 self.interpreter.reset() 319 320 # Create two data pipes. 321 self.interpreter.pipe.create('target', 'N-state') 322 self.interpreter.pipe.create('source', 'N-state') 323 324 # Initialise one tensor. 325 self.interpreter.align_tensor.init(tensor='orig', align_id='test', params=self.tensors_full[0], param_types=0) 326 327 # Set up the number of simulations. 328 sim_number = 10 329 cdp.align_tensors[0].set_sim_num(sim_number) 330 331 # Initialise simulation tensors. 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 # Copy the tensor. 337 self.interpreter.align_tensor.copy(pipe_from='source', pipe_to='target') 338 339 # Checks. 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
345 - def test_fix(self):
346 """Test the align_tensor.fix user function.""" 347 348 # Fix all tensors. 349 self.interpreter.align_tensor.fix() 350 351 # Unfix one tensor. 352 self.interpreter.align_tensor.fix('2 full', fixed=False) 353 354 # Check the fixed flags. 355 flags = [True]*10 356 flags[4] = False 357 for i in range(10): 358 print("Checking the tensor %s: '%s'." % (i, cdp.align_tensors[i].name)) 359 self.assertEqual(cdp.align_tensors[i].fixed, flags[i])
360 361
362 - def test_to_and_from_xml(self):
363 """Test the conversion to and from XML.""" 364 365 # Save the data pipe. 366 self.interpreter.results.write(ds.tmpfile, dir=None, compress_type=0) 367 368 # Create a new data pipe. 369 self.interpreter.pipe.create('new', 'N-state') 370 371 # Load the data. 372 self.interpreter.results.read(ds.tmpfile, dir=None) 373 374 # Checks. 375 self.assertEqual(len(cdp.align_tensors), 10) 376 self.assert_(hasattr(cdp.align_tensors, 'reduction')) 377 for i in range(5): 378 # Full tensors. 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 # Reduced tensors. 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 # Reduction. 398 self.assertEqual(cdp.align_tensors.reduction[i], [i*2, i*2+1])
399