1
2import testing
3from testing import value_eq,object_eq,text_eq
4
5
6def test_import():
7    from pwscf_analyzer import PwscfAnalyzer
8#end def test_import
9
10
11
12def test_empty_init():
13    from pwscf_analyzer import PwscfAnalyzer
14
15    PwscfAnalyzer()
16#end def test_empty_init
17
18
19
20def test_analyze():
21    import os
22    from numpy import array,ndarray
23    from generic import obj
24    from pwscf_analyzer import PwscfAnalyzer
25
26    tpath = testing.setup_unit_test_output_directory(
27        test      = 'pwscf_analyzer',
28        subtest   = 'test_analyze',
29        file_sets = ['scf_output','relax_output','nscf_output'],
30        )
31
32    scf_path = os.path.join(tpath,'scf_output')
33    relax_path = os.path.join(tpath,'relax_output')
34    nscf_path = os.path.join(tpath,'nscf_output')
35
36    # scf w/o actual analysis
37    pa = PwscfAnalyzer(scf_path,'scf.in','scf.out')
38
39    del pa.abspath
40    del pa.path
41
42    pa_ref = obj(
43        infile_name     = 'scf.in',
44        outfile_name    = 'scf.out',
45        pw2c_outfile_name = None,
46        info = obj(
47            md_only         = False,
48            warn            = False,
49            xml             = False,
50            ),
51        input = obj(
52            atomic_positions = obj(
53                atoms           = ['C','C','C','C','C','C','C','C','C','C','C','C','C','C','C'],
54                positions       = array(
55                                  [[-0.08993686, -0.08993686, -0.08993686],
56                                   [ 3.46309801,  3.46309801, -0.08993686],
57                                   [ 5.05974172,  5.05974172,  1.70077347],
58                                   [-0.08993686,  3.46309801,  3.46309801],
59                                   [ 1.70077347,  5.05974172,  5.05974172],
60                                   [ 3.37014984,  6.7493336 ,  3.37014983],
61                                   [ 5.05974172,  8.41870996,  5.05974172],
62                                   [ 3.46309801, -0.08993686,  3.46309801],
63                                   [ 5.05974172,  1.70077347,  5.05974172],
64                                   [ 6.7493336 ,  3.37014984,  3.37014984],
65                                   [ 8.41870996,  5.05974172,  5.05974172],
66                                   [ 3.37014984,  3.37014984,  6.7493336 ],
67                                   [ 5.05974172,  5.05974172,  8.41870996],
68                                   [ 6.7493336 ,  6.7493336 ,  6.7493336 ],
69                                   [ 8.43290286,  8.43290286,  8.43290286]],dtype=float),
70                specifier       = 'bohr',
71                ),
72            atomic_species = obj(
73                atoms           = ['C'],
74                specifier       = '',
75                masses = obj(
76                    C               = 12.011,
77                    ),
78                pseudopotentials = obj(
79                    C               = 'C.BFD.upf',
80                    ),
81                ),
82            cell_parameters = obj(
83                specifier       = 'bohr',
84                vectors         = array(
85                                  [[ 6.74632229,  6.74632229,  0.        ],
86                                   [-0.        ,  6.74632229,  6.74632229],
87                                   [ 6.74632229, -0.        ,  6.74632229]],dtype=float),
88                ),
89            control = obj(
90                calculation     = 'scf',
91                outdir          = 'pwscf_output',
92                prefix          = 'pwscf',
93                pseudo_dir      = './',
94                verbosity       = 'high',
95                tstress         = True,
96                tprnfor         = True,
97                ),
98            electrons = obj(
99                conv_thr        = 1e-07,
100                ),
101            k_points = obj(
102                grid            = array([2.,2.,2.],dtype=float),
103                shift           = array([0.,0.,0.],dtype=float),
104                specifier       = 'automatic',
105                ),
106            system = obj(
107                ecutwfc         = 75.0,
108                ibrav           = 0,
109                input_dft       = 'lda',
110                nat             = 15,
111                nspin           = 1,
112                ntyp            = 1,
113                tot_charge      = 0.0,
114                ),
115            ),
116        )
117
118    assert(object_eq(pa.to_obj(),pa_ref))
119
120    input_read = pa.input.copy()
121
122    # scf w/ full analysis
123    pa = PwscfAnalyzer(scf_path,'scf.in','scf.out',analyze=True)
124
125    assert(object_eq(pa.input,input_read))
126
127    del pa.input
128    del pa.abspath
129    del pa.path
130
131    # Note: band read is failing for spin unpolarized case.
132    # Test needed for spin polarized case w/ bands, then fix unpolarized.
133    pa_ref = obj(
134        E               = -170.11048381,
135        Ef              = 0.0,
136        cputime         = 0.001175,
137        energies        = array([-170.11048381],dtype=float),
138        fermi_energies  = array([],dtype=float),
139        forces          = array(
140                          [[[-0.01852018, -0.01852018, -0.01852018],
141                            [ 0.01852018,  0.01852018, -0.01852018],
142                            [ 0.        ,  0.        , -0.00189264],
143                            [-0.01852018,  0.01852018,  0.01852018],
144                            [-0.00189264, -0.        ,  0.        ],
145                            [ 0.00046488, -0.00046488,  0.00046488],
146                            [-0.        ,  0.00189264,  0.        ],
147                            [ 0.01852018, -0.01852018,  0.01852018],
148                            [ 0.        , -0.00189264, -0.        ],
149                            [-0.00046488,  0.00046488,  0.00046488],
150                            [ 0.00189264,  0.        ,  0.        ],
151                            [ 0.00046488,  0.00046488, -0.00046488],
152                            [ 0.        , -0.        ,  0.00189264],
153                            [-0.00046488, -0.00046488, -0.00046488],
154                            [-0.        ,  0.        ,  0.        ]]],dtype=float),
155        infile_name     = 'scf.in',
156        kpoints_cart    = array(
157                          [[ 0.       ,  0.       ,  0.       ],
158                           [-0.3535534,  0.3535534, -0.3535534],
159                           [ 0.       ,  0.       , -0.7071068]],dtype=float),
160        kpoints_unit    = array([[ 0.,   0. ,  0. ],
161                                 [ 0.,   0. , -0.5],
162                                 [ 0.,  -0.5, -0.5]],dtype=float),
163        kweights        = array([0.25,1.,  0.75],dtype=float),
164        max_forces      = array([0.03207789],dtype=float),
165        outfile_name    = 'scf.out',
166        pressure        = -170.96,
167        pw2c_outfile_name = None,
168        stress          = [[-0.00116217, 0.0, 0.0, -170.96, 0.0, 0.0],
169                           [ 0.0, -0.00116217, -0.0, 0.0, -170.96, -0.0],
170                           [ 0.0, 0.0, -0.00116217, 0.0, 0.0, -170.96]],
171        tot_forces      = array([0.064343],dtype=float),
172        volume          = 614.0889,
173        walltime        = 0.00164444444444,
174        info = obj(
175            md_only         = False,
176            warn            = False,
177            xml             = False,
178            ),
179        md_data = obj(
180            kinetic_energy   = array([-170.96],dtype=float),
181            potential_energy = array([0.84951619],dtype=float),
182            pressure         = array([-170.96],dtype=float),
183            temperature      = array([0.],dtype=float),
184            time             = array([0.],dtype=float),
185            total_energy     = array([-170.11048381],dtype=float),
186            ),
187        md_stats = obj(
188            kinetic_energy   = (-170.96, 0.0),
189            potential_energy = (0.8495161900000028, 0.0),
190            pressure         = (-170.96, 0.0),
191            temperature      = (0.0, 0.0),
192            time             = (0.0, 0.0),
193            total_energy     = (-170.11048381, 0.0),
194            ),
195        )
196
197    assert(object_eq(pa.to_obj(),pa_ref))
198
199
200    # relax w/ full analysis
201    pa = PwscfAnalyzer(relax_path,'relax.in','relax.out',analyze=True)
202
203    del pa.input
204    del pa.abspath
205    del pa.path
206
207    pa_ref = obj(
208        E               = -168.41267772,
209        Ef              = 0.0,
210        cputime         = 0.00186111111111,
211        energies        = array([-168.38623938,-168.40640935,-168.41263281,-168.41267772],dtype=float),
212        fermi_energies  = array([],dtype=float),
213        forces          = array(
214                          [[[-4.625982e-02, -4.625982e-02, -4.625982e-02],
215                            [ 4.625982e-02,  4.625982e-02, -4.625982e-02],
216                            [ 0.000000e+00,  0.000000e+00,  2.650527e-02],
217                            [-4.625982e-02,  4.625982e-02,  4.625982e-02],
218                            [ 2.650527e-02,  0.000000e+00,  0.000000e+00],
219                            [-2.041270e-03,  2.041270e-03, -2.041270e-03],
220                            [ 0.000000e+00, -2.650527e-02,  0.000000e+00],
221                            [ 4.625982e-02, -4.625982e-02,  4.625982e-02],
222                            [ 0.000000e+00,  2.650527e-02,  0.000000e+00],
223                            [ 2.041270e-03, -2.041270e-03, -2.041270e-03],
224                            [-2.650527e-02, -0.000000e+00,  0.000000e+00],
225                            [-2.041270e-03, -2.041270e-03,  2.041270e-03],
226                            [ 0.000000e+00,  0.000000e+00, -2.650527e-02],
227                            [ 2.041270e-03,  2.041270e-03,  2.041270e-03],
228                            [ 0.000000e+00,  0.000000e+00,  0.000000e+00]],
229                           [[-2.192410e-02, -2.192410e-02, -2.192410e-02],
230                            [ 2.192410e-02,  2.192410e-02, -2.192410e-02],
231                            [ 0.000000e+00,  0.000000e+00, -1.131570e-02],
232                            [-2.192410e-02,  2.192410e-02,  2.192410e-02],
233                            [-1.131570e-02,  0.000000e+00,  0.000000e+00],
234                            [ 1.693610e-03, -1.693610e-03,  1.693610e-03],
235                            [ 0.000000e+00,  1.131570e-02,  0.000000e+00],
236                            [ 2.192410e-02, -2.192410e-02,  2.192410e-02],
237                            [ 0.000000e+00, -1.131570e-02,  0.000000e+00],
238                            [-1.693610e-03,  1.693610e-03,  1.693610e-03],
239                            [ 1.131570e-02, -0.000000e+00,  0.000000e+00],
240                            [ 1.693610e-03,  1.693610e-03, -1.693610e-03],
241                            [-0.000000e+00,  0.000000e+00,  1.131570e-02],
242                            [-1.693610e-03, -1.693610e-03, -1.693610e-03],
243                            [ 0.000000e+00,  0.000000e+00,  0.000000e+00]],
244                           [[ 5.327200e-04,  5.327200e-04,  5.327200e-04],
245                            [-5.327200e-04, -5.327200e-04,  5.327200e-04],
246                            [ 0.000000e+00,  0.000000e+00, -1.372200e-03],
247                            [ 5.327200e-04, -5.327200e-04, -5.327200e-04],
248                            [-1.372200e-03, -0.000000e+00,  0.000000e+00],
249                            [-3.131240e-03,  3.131240e-03, -3.131240e-03],
250                            [ 0.000000e+00,  1.372200e-03, -0.000000e+00],
251                            [-5.327200e-04,  5.327200e-04, -5.327200e-04],
252                            [-0.000000e+00, -1.372200e-03,  0.000000e+00],
253                            [ 3.131240e-03, -3.131240e-03, -3.131240e-03],
254                            [ 1.372200e-03,  0.000000e+00, -0.000000e+00],
255                            [-3.131240e-03, -3.131240e-03,  3.131240e-03],
256                            [ 0.000000e+00,  0.000000e+00,  1.372200e-03],
257                            [ 3.131240e-03,  3.131240e-03,  3.131240e-03],
258                            [ 0.000000e+00,  0.000000e+00,  0.000000e+00]],
259                           [[ 6.653000e-05,  6.653000e-05,  6.653000e-05],
260                            [-6.653000e-05, -6.653000e-05,  6.653000e-05],
261                            [ 0.000000e+00,  0.000000e+00, -4.582100e-04],
262                            [ 6.653000e-05, -6.653000e-05, -6.653000e-05],
263                            [-4.582100e-04,  0.000000e+00,  0.000000e+00],
264                            [ 8.294900e-04, -8.294900e-04,  8.294900e-04],
265                            [ 0.000000e+00,  4.582100e-04,  0.000000e+00],
266                            [-6.653000e-05,  6.653000e-05, -6.653000e-05],
267                            [ 0.000000e+00, -4.582100e-04,  0.000000e+00],
268                            [-8.294900e-04,  8.294900e-04,  8.294900e-04],
269                            [ 4.582100e-04,  0.000000e+00, -0.000000e+00],
270                            [ 8.294900e-04,  8.294900e-04, -8.294900e-04],
271                            [ 0.000000e+00,  0.000000e+00,  4.582100e-04],
272                            [-8.294900e-04, -8.294900e-04, -8.294900e-04],
273                            [ 0.000000e+00,  0.000000e+00,  0.000000e+00]]],dtype=float),
274        infile_name     = 'relax.in',
275        max_forces      = array([0.08012436,0.03797366,0.00542347,0.00143672],dtype=float),
276        outfile_name    = 'relax.out',
277        pressure        = 0.0,
278        pw2c_outfile_name = None,
279        stress          = [],
280        tot_forces      = array([],dtype=float),
281        volume          = 614.0889,
282        walltime        = 0.00251388888889,
283        info = obj(
284            md_only         = False,
285            warn            = False,
286            xml             = False,
287            ),
288        structures = obj({
289            0 : obj(
290                atoms           = ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
291                positions       = array(
292                                  [[-0.04625982, -0.04625982, -0.04625982],
293                                   [ 3.41942097,  3.41942097, -0.04625982],
294                                   [ 5.05974172,  5.05974172,  1.71308584],
295                                   [-0.04625982,  3.41942097,  3.41942097],
296                                   [ 1.71308584,  5.05974172,  5.05974172],
297                                   [ 3.37111988,  6.74836356,  3.37111987],
298                                   [ 5.05974172,  8.40639759,  5.05974172],
299                                   [ 3.41942097, -0.04625982,  3.41942097],
300                                   [ 5.05974172,  1.71308584,  5.05974172],
301                                   [ 6.74836356,  3.37111988,  3.37111988],
302                                   [ 8.40639759,  5.05974172,  5.05974172],
303                                   [ 3.37111988,  3.37111988,  6.74836356],
304                                   [ 5.05974172,  5.05974172,  8.40639759],
305                                   [ 6.74836356,  6.74836356,  6.74836356],
306                                   [ 8.43290286,  8.43290286,  8.43290286]],
307                                   dtype=float),
308                ),
309            1 : obj(
310                atoms           = ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
311                positions       = array(
312                                  [[-0.09055704, -0.09055704, -0.09055704],
313                                   [ 3.46371819,  3.46371819, -0.09055704],
314                                   [ 5.05974172,  5.05974172,  1.70201536],
315                                   [-0.09055704,  3.46371819,  3.46371819],
316                                   [ 1.70201536,  5.05974172,  5.05974172],
317                                   [ 3.37322753,  6.74625591,  3.37322752],
318                                   [ 5.05974172,  8.41746807,  5.05974172],
319                                   [ 3.46371819, -0.09055704,  3.46371819],
320                                   [ 5.05974172,  1.70201536,  5.05974172],
321                                   [ 6.74625591,  3.37322753,  3.37322753],
322                                   [ 8.41746807,  5.05974172,  5.05974172],
323                                   [ 3.37322753,  3.37322753,  6.74625591],
324                                   [ 5.05974172,  5.05974172,  8.41746807],
325                                   [ 6.74625591,  6.74625591,  6.74625591],
326                                   [ 8.43290286,  8.43290286,  8.43290286]],
327                                   dtype=float),
328                ),
329            2 : obj(
330                atoms           = ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
331                positions       = array(
332                                  [[-0.08993686, -0.08993686, -0.08993686],
333                                   [ 3.46309801,  3.46309801, -0.08993686],
334                                   [ 5.05974172,  5.05974172,  1.70077347],
335                                   [-0.08993686,  3.46309801,  3.46309801],
336                                   [ 1.70077347,  5.05974172,  5.05974172],
337                                   [ 3.37014984,  6.7493336 ,  3.37014983],
338                                   [ 5.05974172,  8.41870996,  5.05974172],
339                                   [ 3.46309801, -0.08993686,  3.46309801],
340                                   [ 5.05974172,  1.70077347,  5.05974172],
341                                   [ 6.7493336 ,  3.37014984,  3.37014984],
342                                   [ 8.41870996,  5.05974172,  5.05974172],
343                                   [ 3.37014984,  3.37014984,  6.7493336 ],
344                                   [ 5.05974172,  5.05974172,  8.41870996],
345                                   [ 6.7493336 ,  6.7493336 ,  6.7493336 ],
346                                   [ 8.43290286,  8.43290286,  8.43290286]],
347                                   dtype=float),
348                ),
349            3 : obj(
350                atoms           = ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
351                positions       = array(
352                                  [[-0.08993686, -0.08993686, -0.08993686],
353                                   [ 3.46309801,  3.46309801, -0.08993686],
354                                   [ 5.05974172,  5.05974172,  1.70077347],
355                                   [-0.08993686,  3.46309801,  3.46309801],
356                                   [ 1.70077347,  5.05974172,  5.05974172],
357                                   [ 3.37014984,  6.7493336 ,  3.37014983],
358                                   [ 5.05974172,  8.41870996,  5.05974172],
359                                   [ 3.46309801, -0.08993686,  3.46309801],
360                                   [ 5.05974172,  1.70077347,  5.05974172],
361                                   [ 6.7493336 ,  3.37014984,  3.37014984],
362                                   [ 8.41870996,  5.05974172,  5.05974172],
363                                   [ 3.37014984,  3.37014984,  6.7493336 ],
364                                   [ 5.05974172,  5.05974172,  8.41870996],
365                                   [ 6.7493336 ,  6.7493336 ,  6.7493336 ],
366                                   [ 8.43290286,  8.43290286,  8.43290286]],
367                                   dtype=float),
368                ),
369            }),
370        )
371
372    assert(object_eq(pa.to_obj(),pa_ref))
373
374
375    # nscf w/o actual analysis
376    pa = PwscfAnalyzer(nscf_path,'nscf.in','nscf.out')
377
378    del pa.abspath
379    del pa.path
380
381    pa_ref = obj(
382        infile_name     = 'nscf.in',
383        outfile_name    = 'nscf.out',
384        pw2c_outfile_name = None,
385        info = obj(
386            md_only         = False,
387            warn            = False,
388            xml             = False,
389            ),
390        input = obj(
391            atomic_positions = obj(
392                atoms           = ['Sr', 'Co', 'O', 'O', 'O'],
393                positions       = array(
394                    [[ 0.        ,  0.        ,  0.        ],
395                     [ 0.        , -1.06131318,  6.18578654],
396                     [ 0.        , -3.62354986,  3.62354986],
397                     [-2.56223668,  0.75046175,  4.37401161],
398                     [ 2.56223668,  0.75046175,  4.37401161]],dtype=float),
399                specifier       = 'alat',
400                ),
401            atomic_species = obj(
402                atoms           = ['Co', 'O', 'Sr'],
403                specifier       = '',
404                masses = obj(
405                    Co              = 58.933,
406                    O               = 15.999,
407                    Sr              = 87.956,
408                    ),
409                pseudopotentials = obj(
410                    Co              = 'Co.opt.upf',
411                    O               = 'O.opt.upf',
412                    Sr              = 'Sr.opt.upf',
413                    ),
414                ),
415            cell_parameters = obj(
416                specifier       = 'alat',
417                vectors         = array(
418                    [[-5.12447336, -3.62354986,  3.62354986],
419                     [ 5.12447336, -3.62354986,  3.62354986],
420                     [ 0.        ,  5.12447336,  5.12447336]],dtype=float),
421                ),
422            control = obj(
423                calculation     = 'nscf',
424                outdir          = 'pwscf_output',
425                prefix          = 'pwscf',
426                pseudo_dir      = './',
427                tprnfor         = True,
428                tstress         = True,
429                verbosity       = 'high',
430                wf_collect      = True,
431                ),
432            electrons = obj(
433                conv_thr        = 1e-08,
434                electron_maxstep = 1000,
435                mixing_beta     = 0.15,
436                mixing_mode     = 'local-TF',
437                ),
438            k_points = obj(
439                kpoints         = array(
440                    [[ 0. ,  0. ,  0. ],
441                     [-0. ,  0.5, -0. ],
442                     [ 0.5,  0.5, -0. ],
443                     [ 0.5,  0.5,  0.5]],dtype=float),
444                nkpoints        = 4,
445                specifier       = 'crystal',
446                weights         = array([1., 1., 1., 1.],dtype=float),
447                ),
448            system = obj(
449                degauss         = 0.001,
450                ecutrho         = 1750.0,
451                ecutwfc         = 350.0,
452                ibrav           = 0,
453                input_dft       = 'lda',
454                lda_plus_u      = True,
455                nat             = 5,
456                nbnd            = 30,
457                nosym           = True,
458                nspin           = 2,
459                ntyp            = 3,
460                occupations     = 'smearing',
461                smearing        = 'fermi-dirac',
462                tot_charge      = 0.0,
463                celldm = obj({
464                    1               : 1.0,
465                    }),
466                hubbard_u = obj({
467                    1               : 1.0,
468                    }),
469                starting_magnetization = obj({
470                    1               : 1.0,
471                    }),
472                ),
473            ),
474        )
475
476    assert(object_eq(pa.to_obj(),pa_ref))
477
478    input_read = pa.input.copy()
479
480    # nscf w/ analysis
481    pa = PwscfAnalyzer(nscf_path,'nscf.in','nscf.out',analyze=True)
482
483    assert(object_eq(pa.input,input_read))
484
485    del pa.input
486    del pa.abspath
487    del pa.path
488
489    pa_ref = obj(
490        E               = 0.0,
491        Ef              = 10.1198,
492        cputime         = 0.076025,
493        energies        = array([],dtype=float),
494        fermi_energies  = array([10.1198],dtype=float),
495        infile_name     = 'nscf.in',
496        kpoints_cart    = array(
497            [[ 0.       ,  0.       ,  0.       ],
498             [ 0.0487855, -0.0344966,  0.0344966],
499             [ 0.       , -0.0689931,  0.0689931],
500             [ 0.       , -0.0202076,  0.1177786]],dtype=float),
501        kpoints_unit    = array(
502            [[0. , 0. , 0. ],
503             [0. , 0.5, 0. ],
504             [0.5, 0.5, 0. ],
505             [0.5, 0.5, 0.5]],dtype=float),
506        kweights        = array([0.0041667, 0.0041667, 0.0041667, 0.0041667],dtype=float),
507        outfile_name    = 'nscf.out',
508        pressure        = 0.0,
509        pw2c_outfile_name = None,
510        stress          = [],
511        volume          = 380.621,
512        walltime        = 0.09731666666666666,
513        info = obj(
514            md_only         = False,
515            warn            = False,
516            xml             = False,
517            ),
518        bands = obj(
519            electronic_structure = 'insulating',
520            vbm = obj(
521                band_number     = 24,
522                energy          = 10.1131,
523                index           = 1,
524                kpoint_2pi_alat = array([ 0.0487855, -0.0344966,  0.0344966],dtype=float),
525                kpoint_rel      = array([0.,  0.5, 0. ],dtype=float),
526                pol             = 'up',
527                ),
528            cbm = obj(
529                band_number     = 23,
530                energy          = 10.159,
531                index           = 0,
532                kpoint_2pi_alat = array([0., 0., 0.],dtype=float),
533                kpoint_rel      = array([0., 0., 0.],dtype=float),
534                pol             = 'down',
535                ),
536            direct_gap = obj(
537                energy          = 0.5689999999999991,
538                index           = 2,
539                kpoint_2pi_alat = array([ 0.,        -0.0689931,  0.0689931],dtype=float),
540                kpoint_rel      = array([0.5, 0.5, 0. ],dtype=float),
541                pol             = ['up', 'down'],
542                ),
543            indirect_gap = obj(
544                energy          = 0.046,
545                kpoints = obj(
546                    cbm = obj(
547                        band_number     = 23,
548                        energy          = 10.159,
549                        index           = 0,
550                        kpoint_2pi_alat = array([0., 0., 0.],dtype=float),
551                        kpoint_rel      = array([0., 0., 0.],dtype=float),
552                        pol             = 'down',
553                        ),
554                    vbm = obj(
555                        band_number     = 24,
556                        energy          = 10.1131,
557                        index           = 1,
558                        kpoint_2pi_alat = array([ 0.0487855, -0.0344966,  0.0344966],dtype=float),
559                        kpoint_rel      = array([0.,  0.5, 0. ],dtype=float),
560                        pol             = 'up',
561                        ),
562                    ),
563                ),
564            up = obj({
565                0 : obj(
566                    eigs            = array(
567                        [-86.6481, -50.4218, -50.4218, -50.4218, -22.2273,  -8.1615,  -6.5642,  -6.5642,
568                         -4.3768,  -4.3768,  -4.3768,   5.6456,   5.6456,   5.6456,   6.1126,   6.1126,
569                         6.1126,   7.3099,   7.3099,   8.4104,   8.4104,   8.4104,   9.1291,   9.1291,
570                         9.1291,  15.3662,  15.3662,  16.3166,  18.0967,  18.0967],dtype=float),
571                    index           = 0,
572                    kpoint_2pi_alat = array([0., 0., 0.],dtype=float),
573                    kpoint_rel      = array([0., 0., 0.],dtype=float),
574                    occs            = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
575                                             1., 1., 1., 1., 1., 1., 1., 1., 1.,
576                                             1., 0., 0., 0., 0., 0.],dtype=float),
577                    pol             = 'up',
578                    ),
579                1 : obj(
580                    eigs            = array(
581                        [-86.6481, -50.4228, -50.4217, -50.4217, -22.1938,  -8.2033,  -6.8047,  -6.5167,
582                         -4.2982,  -4.2982,  -3.7851,   3.4922,   5.4009,   5.4009,   5.684 ,   5.684 ,
583                         6.1333,   7.0502,   7.3176,   7.5721,   8.602 ,   8.602 ,   9.1755,   9.1755,
584                         10.1131,  17.3214,  17.5708,  18.3183,  19.7307,  19.7307],dtype=float),
585                    index           = 1,
586                    kpoint_2pi_alat = array([ 0.0487855, -0.0344966,  0.0344966],dtype=float),
587                    kpoint_rel      = array([0.,  0.5, 0. ],dtype=float),
588                    occs            = array(
589                        [1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,
590                         1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,     1.,
591                         1.,     1.,     1.,     1.,     0.6219, 0.,     0.,     0.,     0.,     0.],dtype=float),
592                    pol             = 'up',
593                    ),
594                2 : obj(
595                    eigs            = array(
596                        [-86.6481, -50.4227, -50.4227, -50.4216, -22.1654,  -7.1894,  -7.1894,  -7.1664,
597                         -4.2194,  -4.0301,  -4.0301,   3.275 ,   3.6075,   4.0541,   5.1708,   5.1708,
598                         6.5471,   8.0257,   8.0257,   8.2978,   8.5616,   8.8243,   8.8243,   9.5042,
599                         12.3636,  18.1392,  18.3196,  19.7474,  19.7474,  20.6336],dtype=float),
600                    index           = 2,
601                    kpoint_2pi_alat = array([ 0.,        -0.0689931,  0.0689931],dtype=float),
602                    kpoint_rel      = array([0.5, 0.5, 0. ],dtype=float),
603                    occs            = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
604                                             1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
605                                             0., 0., 0., 0., 0., 0.],dtype=float),
606                    pol             = 'up',
607                    ),
608                3 : obj(
609                    eigs            = array(
610                        [-86.6481, -50.4226, -50.4226, -50.4226, -22.1402,  -6.7619,  -6.7619,  -6.7619,
611                         -4.7105,  -4.7105,  -4.7105,   3.0227,   3.618 ,   3.618 ,   4.709 ,   4.709 ,
612                         4.709 ,   8.8386,   8.8386,   8.8386,   9.5927,   9.5927,   9.5927,  12.3737,
613                         12.3737,  17.0409,  17.0409,  17.0409,  20.0775,  20.0775],dtype=float),
614                    index           = 3,
615                    kpoint_2pi_alat = array([ 0.,        -0.0202076,  0.1177786],dtype=float),
616                    kpoint_rel      = array([0.5, 0.5, 0.5],dtype=float),
617                    occs            = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
618                                             1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.,
619                                             0., 0., 0., 0., 0., 0.],dtype=float),
620                    pol             = 'up',
621                    ),
622                }),
623            down = obj({
624                0 : obj(
625                    eigs            = array(
626                        [-83.7428, -47.627 , -47.627 , -47.627 , -22.2142,  -7.8414,  -6.1549,  -6.1549,
627                         -4.359 ,  -4.359 ,  -4.359 ,   5.9202,   5.9202,   5.9202,   8.7802,   8.7802,
628                         8.7802,   8.8094,   8.8094,   8.8094,   9.4806,   9.4806,   9.4806,  10.159 ,
629                         10.159 ,  15.4284,  15.4284,  16.4943,  18.2226,  18.2226],dtype=float),
630                    index           = 0,
631                    kpoint_2pi_alat = array([0., 0., 0.],dtype=float),
632                    kpoint_rel      = array([0., 0., 0.],dtype=float),
633                    occs            = array(
634                        [1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1.,
635                         1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   1. ,   0.053,
636                         0.053, 0. ,   0. ,   0. ,   0. ,   0.   ],dtype=float),
637                    pol             = 'down',
638                    ),
639                1 : obj(
640                    eigs            = array(
641                        [-83.7428, -47.6283, -47.6269, -47.6269, -22.1812,  -7.915 ,  -6.4635,  -6.1049,
642                            -4.2816,  -4.2816,  -3.7107,   4.6303,   5.9542,   5.9542,   7.0588,   7.0588,
643                         7.3901,   7.9093,   8.8232,   8.9427,   8.9427,  10.1687,  10.6939,  10.6939,
644                         12.1453,  17.4719,  17.6798,  18.3438,  19.8424,  19.8424],dtype=float),
645                    index           = 1,
646                    kpoint_2pi_alat = array([ 0.0487855, -0.0344966,  0.0344966],dtype=float),
647                    kpoint_rel      = array([0.,  0.5, 0. ],dtype=float),
648                    occs            = array(
649                        [1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1.,
650                         1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1.,
651                         1. ,    0.0268, 0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ],dtype=float),
652                    pol             = 'down',
653                    ),
654                2 : obj(
655                    eigs            = array(
656                        [-83.7428, -47.6282, -47.6282, -47.6268, -22.1532,  -6.905 ,  -6.905 ,  -6.7976,
657                         -4.2063,  -3.9506,  -3.9506,   4.0076,   4.9912,   5.0889,   6.6171,   6.6171,
658                         6.7985,   8.3962,   8.3962,   9.935 ,  10.504 ,  10.5336,  10.5336,  10.984 ,
659                         14.1185,  18.2049,  18.4398,  19.8756,  19.8756,  20.6738],dtype=float),
660                    index           = 2,
661                    kpoint_2pi_alat = array([ 0. ,       -0.0689931,  0.0689931],dtype=float),
662                    kpoint_rel      = array([0.5, 0.5, 0. ],dtype=float),
663                    occs            = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0.,
664                                             0., 0., 0., 0., 0., 0.],dtype=float),
665                    pol             = 'down',
666                    ),
667                3 : obj(
668                    eigs            = array(
669                        [-83.7428, -47.6281, -47.6281, -47.6281, -22.1282,  -6.418 ,  -6.418 ,  -6.418 ,
670                         -4.6851,  -4.6851,  -4.6851,   3.2996,   5.1034,   5.1034,   5.9255,   5.9255,
671                         5.9255,  10.0318,  10.0318,  10.0318,  10.8041,  10.8041,  10.8041,  14.1246,
672                         14.1246,  17.1249,  17.1249,  17.1249,  20.1029,  20.1029],dtype=float),
673                    index           = 3,
674                    kpoint_2pi_alat = array([ 0.,        -0.0202076,  0.1177786],dtype=float),
675                    kpoint_rel      = array([0.5, 0.5, 0.5],dtype=float),
676                    occs            = array(
677                        [1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,
678                         1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    1. ,    0.9985, 0.9985, 0.9985,
679                         0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0. ,    0.    ],dtype=float),
680                    pol             = 'down',
681                    ),
682                }),
683            ),
684        )
685
686    assert(object_eq(pa.to_obj(),pa_ref))
687
688#end def test_analyze
689
690
691
692