From f3cde157aeddf7508377505cfc22d51088f19d0f Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Wed, 12 Oct 2016 08:01:30 +0200
Subject: [PATCH] minor improvement of gtsdf

---
 wetb/gtsdf/__init__.py         | 10 +++++++---
 wetb/gtsdf/gtsdf.py            |  3 +++
 wetb/gtsdf/tests/test_gtsdf.py | 25 ++++++++++++++++++++-----
 wetb/gtsdf/unix_time.py        |  2 +-
 4 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/wetb/gtsdf/__init__.py b/wetb/gtsdf/__init__.py
index b4b88948..7339aa34 100644
--- a/wetb/gtsdf/__init__.py
+++ b/wetb/gtsdf/__init__.py
@@ -42,10 +42,14 @@ from .gtsdf import load_pandas
 class Dataset(object):
     def __init__(self, filename):
         self.time, self.data, self.info = load(filename)
-    def __call__(self, name):
-        if name == "Time":
+    def __call__(self, id):
+        if isinstance(id, str):
+            return self((['Time'] + self.info['attribute_names']).index(id) + 1)
+        if id == 1:
             return self.time
-        return self.data[:, self.info['attribute_names'].index(name)]
+        else:
+            return self.data[:, id - 2]
+
 
 
 __all__ = sorted([m for m in set(dir()) - set(d)])
diff --git a/wetb/gtsdf/gtsdf.py b/wetb/gtsdf/gtsdf.py
index 9ebf7877..6ec004be 100644
--- a/wetb/gtsdf/gtsdf.py
+++ b/wetb/gtsdf/gtsdf.py
@@ -322,6 +322,9 @@ def append_block(filename, data, **kwargs):
             dtype = kwargs.get('dtype', np.uint16)
         else:
             dtype = f[block_name_fmt % 0]['data'].dtype
+            if dtype == np.uint16:
+                if no_observations < 12:  # size with float32<1.2*size with uint16
+                    dtype = np.float32
 
         block = f.create_group(block_name_fmt % blocknr)
         if 'time' in kwargs:
diff --git a/wetb/gtsdf/tests/test_gtsdf.py b/wetb/gtsdf/tests/test_gtsdf.py
index c70016fd..004eed32 100644
--- a/wetb/gtsdf/tests/test_gtsdf.py
+++ b/wetb/gtsdf/tests/test_gtsdf.py
@@ -31,7 +31,7 @@ class Test_gsdf(unittest.TestCase):
     @classmethod
     def tearDownClass(cls):
         super(Test_gsdf, cls).tearDownClass()
-        shutil.rmtree(tmp_path)
+        #shutil.rmtree(tmp_path)
 
     def test_minimum_requirements (self):
         fn = tmp_path + "minimum.hdf5"
@@ -170,15 +170,27 @@ class Test_gsdf(unittest.TestCase):
 
     def test_append(self):
         fn = tmp_path + 'append.hdf5'
-        d = np.arange(12, dtype=np.float32).reshape(6, 2)
+        d = np.arange(48, dtype=np.float32).reshape(24, 2)
         d[2, 0] = np.nan
         gtsdf.save(fn, d)
         _, data, _ = gtsdf.load(fn)
-        np.testing.assert_array_almost_equal(data, d, 4)
+        np.testing.assert_array_almost_equal(data, d, 3)
         gtsdf.append_block(fn, d)
         _, data, _ = gtsdf.load(fn)
-        self.assertEqual(data.shape, (12, 2))
-        np.testing.assert_array_almost_equal(data, np.append(d, d, 0), 4)
+        self.assertEqual(data.shape, (48, 2))
+        np.testing.assert_array_almost_equal(data, np.append(d, d, 0), 3)
+        f = h5py.File(fn)
+        self.assertIn('gains', f['block0001'])
+        f.close()
+
+    def test_append_small_block(self):
+        fn = tmp_path + 'append_small_block.hdf5'
+        d = np.arange(12, dtype=np.float32).reshape(2, 6)
+        gtsdf.save(fn, d)
+        gtsdf.append_block(fn, d + 12)
+        f = h5py.File(fn)
+        self.assertNotIn('gains', f['block0001'])
+        f.close()
 
 
     def test_nan_float(self):
@@ -226,6 +238,9 @@ class Test_gsdf(unittest.TestCase):
 
 
 
+
+
+
 if __name__ == "__main__":
     #import sys;sys.argv = ['', 'Test.testName']
     unittest.main()
diff --git a/wetb/gtsdf/unix_time.py b/wetb/gtsdf/unix_time.py
index 6bf435e3..dfd4bc6e 100644
--- a/wetb/gtsdf/unix_time.py
+++ b/wetb/gtsdf/unix_time.py
@@ -34,7 +34,7 @@ def from_unix(sec):
             return datetime.utcfromtimestamp(0)
         return datetime.utcfromtimestamp(sec)
     else:
-        sec = np.array(sec)
+        sec = np.array(sec).astype(np.float)
         ms = np.atleast_1d((sec * 1000000 % 1000000).astype(np.int))
         sec = sec.astype(np.int)
         S = np.atleast_1d(sec % 60)
-- 
GitLab