1 import os
2 import h5py
3 import numpy as np
4 from cc.ivs.io import hdf5
5
6 import unittest
7
9
11 """ io.hdf5.write_dict() """
12 data = {}
13 data['number'] = 12.30
14 data['list'] = [45, 78.36]
15 data['string'] = 'This is a piece of text'
16
17 set1 = {}
18 set1['grid'] = np.random.uniform(size=(10,10))
19 set1['x'] = np.linspace(0,10,num=10)
20 set1['y'] = np.linspace(-5,5,num=10)
21 set1['subset'] = {'w1':10.0, 'w2':12.0, 'w3':13.0}
22 data['set1'] = set1
23
24 set2 = {}
25 set2['grid'] = np.random.uniform(size=(10,10))
26 set2['x'] = np.linspace(-10,0,num=10)
27 set2['y'] = np.linspace(0,5,num=10)
28 set2['subset'] = {'w1':1, 'w2':2, 'w3':3, 'label':'again some text'}
29 data['set2'] = set2
30
31 hdf5.write_dict(data, 'test.hdf5', update=False, attr_types=[float, int, str, list])
32
33 hdf = h5py.File('test.hdf5', 'r')
34
35 self.assertTrue('set1' in hdf)
36 self.assertTrue('set2' in hdf)
37 self.assertTrue('number' in hdf.attrs)
38 self.assertTrue('string' in hdf.attrs)
39 self.assertTrue('list' in hdf.attrs)
40
41 self.assertEqual(hdf.attrs['number'], data['number'])
42 self.assertEqual(hdf.attrs['string'], data['string'])
43 self.assertListEqual(hdf.attrs['list'].tolist(), data['list'])
44
45 self.assertTrue(np.all(hdf['set1']['grid'].value == set1['grid']))
46 self.assertTrue(np.all(hdf['set1']['x'].value == set1['x']))
47 self.assertTrue(np.all(hdf['set1']['y'].value == set1['y']))
48
49 self.assertEqual(hdf['set1']['subset'].attrs['w1'], 10.0)
50 self.assertEqual(hdf['set1']['subset'].attrs['w2'], 12.0)
51 self.assertEqual(hdf['set1']['subset'].attrs['w3'], 13.0)
52
53 self.assertTrue(np.all(hdf['set2']['grid'].value == set2['grid']))
54 self.assertTrue(np.all(hdf['set2']['x'].value == set2['x']))
55 self.assertTrue(np.all(hdf['set2']['y'].value == set2['y']))
56
57 self.assertEqual(hdf['set2']['subset'].attrs['w1'], 1)
58 self.assertEqual(hdf['set2']['subset'].attrs['w2'], 2)
59 self.assertEqual(hdf['set2']['subset'].attrs['w3'], 3)
60
61 hdf.close()
62
63 if os.path.isfile('test.hdf5'):
64 os.remove('test.hdf5')
65
67 """ io.hdf5.read2dict() """
68
69 if os.path.isfile('test.hdf5'):
70 os.remove('test.hdf5')
71 hdf = h5py.File('test.hdf5', 'w')
72
73 hdf.create_group('set1')
74 hdf.create_group('set2')
75 hdf.create_dataset('list', data=[12,124.54])
76
77 grid1 = np.random.uniform(size=(10,10))
78 hdf['set1'].create_dataset('grid', data = grid1)
79 hdf['set1'].attrs['w1'] = 'this is a label'
80 hdf['set1'].create_group('subset')
81 hdf['set1']['subset'].attrs['w1'] = 15.2
82 hdf['set1']['subset'].attrs['w2'] = -1000000000000
83 hdf['set1']['subset'].attrs['w3'] = 'yet another text string'
84
85 grid2 = np.random.uniform(size=(10,10))
86 hdf['set2'].create_dataset('grid', data = grid2)
87
88 hdf.close()
89
90 data = hdf5.read2dict('test.hdf5')
91
92 self.assertTrue('set1' in data)
93 self.assertTrue('set2' in data)
94 self.assertTrue('list' in data)
95 self.assertListEqual(data['list'].tolist(), [12,124.54])
96
97 self.assertTrue(np.all(data['set1']['grid'] == grid1))
98 self.assertEqual(data['set1']['w1'], 'this is a label')
99
100 self.assertEqual(data['set1']['subset']['w1'], 15.2)
101 self.assertEqual(data['set1']['subset']['w2'], -1000000000000)
102 self.assertEqual(data['set1']['subset']['w3'], 'yet another text string')
103 self.assertTrue(np.all(data['set2']['grid'] == grid2))
104
105 if os.path.isfile('test.hdf5'):
106 os.remove('test.hdf5')
107