[h5py] 359/455: Port File and parts of h5a to new test suite
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Thu Jul 2 18:19:50 UTC 2015
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to annotated tag 1.3.0
in repository h5py.
commit 1c874ccd0c41a66a3bd9f72c1281e7a87a5031db
Author: andrewcollette <andrew.collette at gmail.com>
Date: Sun Jan 10 09:08:18 2010 +0000
Port File and parts of h5a to new test suite
---
h5py/tests/__init__.py | 137 ++++++++++++++++++++++-------
h5py/tests/high/__init__.py | 0
h5py/tests/high/test_file.py | 205 +++++++++++++++++++++++++++++++++++++++++++
h5py/tests/low/__init__.py | 2 +
h5py/tests/low/test_h5a.py | 117 ++++++++++++++++++++++++
h5py/tests/test_h5a.py | 38 +-------
h5py/tests/test_highlevel.py | 124 --------------------------
7 files changed, 429 insertions(+), 194 deletions(-)
diff --git a/h5py/tests/__init__.py b/h5py/tests/__init__.py
index 1d7a1b5..89d91c4 100644
--- a/h5py/tests/__init__.py
+++ b/h5py/tests/__init__.py
@@ -10,53 +10,124 @@
#
#-
-import h5py.tests
import unittest
-import common
-
-mnames = [
-'test_dataset',
-'test_group',
-'test_filters',
-'test_h5a',
-'test_h5d',
-'test_h5f',
-'test_h5g',
-'test_h5i',
-'test_h5p',
-'test_h5',
-'test_h5r',
-'test_h5s',
-'test_h5t',
-'test_highlevel',
-'test_slicing',
-'test_threads',
-'test_utils',
-'test_vlen',
-'test_conv']
+import h5py
+config = h5py.h5.get_config()
def runtests():
+ """ Run low and highlevel h5py tests.
- ldr = unittest.TestLoader()
- suite = unittest.TestSuite()
- modules = [__import__('h5py.tests.'+x, fromlist=[h5py.tests]) for x in mnames]
- for m in modules:
- suite.addTests(ldr.loadTestsFromModule(m))
-
+ Result is a 2-tuple of TestResult objects
+ """
+ import low
runner = unittest.TextTestRunner()
- return runner.run(suite)
+ return tuple(runner.run(suite) for suite in (low.getsuite(),))
def autotest():
try:
- if not runtests():
+ if not all(runtests()):
sys.exit(17)
except:
sys.exit(2)
-def testinfo():
- print "%d tests disabled" % common.skipped
+def fixme(func):
+ print "FIXME: ", func.__doc__
+ return None
+
+def require(api=None, os=None, unicode=None):
+ """ Decorator to enable/disable tests """
+ import sys
+ def haveunicode():
+ import os.path
+ try:
+ os.path.exists(u'\u201a')
+ except UnicodeError:
+ return False
+ return True
+ def wrap(func):
+ if unicode and not haveunicode(): return None
+ if api == 18 and not config.API_18: return None
+ if api == 16 and config.API_18: return None
+ if os == 'windows' and sys.platform != 'win32': return None
+ if os == 'unix' and sys.platform == 'win32': return None
+ return func
+ return wrap
+
+def skip(func):
+ """ Decorator to disable a test """
+ return None
+
+def getpath(name):
+ """ Path to a data file shipped with the test suite """
+ import os.path
+ return os.path.join(os.path.dirname(__file__), 'data', name)
+
+def gettemp():
+ """ Create a temporary file and return a 2-tuple (fid, name) """
+ import tempfile
+ name = tempfile.mktemp('.hdf5')
+ plist = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
+ plist.set_fclose_degree(h5py.h5f.CLOSE_STRONG)
+ fid = h5py.h5f.create(name, h5py.h5f.ACC_TRUNC, fapl=plist)
+ return fid, name
+
+
+class HTest(unittest.TestCase):
+
+ """
+ Slightly modified subclass of TestCase, which provides the following
+ added functionality:
+
+ 1. assertArrayEqual(), to save us from having to remember to use
+ numpy.all. Also allows reasonable comparison of floating-point
+ data.
+
+ 2. Catches and suppresses warnings.
+ """
+
+ EPSILON = 1e-5
+
+ def run(self, *args, **kwds):
+ import warnings
+ filters = warnings.filters
+ warnings.simplefilter("ignore")
+ try:
+ unittest.TestCase.run(self, *args, **kwds)
+ finally:
+ warnings.filters = filters
+ if 0 and h5py.h5f.get_obj_count() != 0:
+ print "WARNING: %d LEFTOVER IDS" % h5py.h5f.get_obj_count()
+ ids = h5py.h5f.get_obj_ids()
+ for id_ in ids:
+ if id_:
+ print "Closing %r" % id_
+ else:
+ print "Skipping %r" % id_
+ while id_ and h5py.h5i.get_ref(id_) > 0:
+ h5py.h5i.dec_ref(id_)
+
+ def assertArrayEqual(self, dset, arr, message=None, precision=None):
+ """ Make sure dset and arr have the same shape, dtype and contents, to
+ within the given precision.
+
+ Note that dset may be a NumPy array or an HDF5 dataset.
+ """
+ if precision is None:
+ precision = self.EPSILON
+ if message is None:
+ message = ''
+ else:
+ message = ' (%s)' % message
+
+ if np.isscalar(dset) or np.isscalar(arr):
+ assert np.isscalar(dset) and np.isscalar(arr), 'Scalar/array mismatch ("%r" vs "%r")%s' % (dset, arr, message)
+ assert dset - arr < precision, "Scalars differ by more than %.3f%s" % (precision, message)
+ return
+ assert dset.shape == arr.shape, "Shape mismatch (%s vs %s)%s" % (dset.shape, arr.shape, message)
+ assert dset.dtype == arr.dtype, "Dtype mismatch (%s vs %s)%s" % (dset.dtype, arr.dtype, message)
+ assert np.all(np.abs(dset[...] - arr[...]) < precision), "Arrays differ by more than %.3f%s" % (precision, message)
diff --git a/h5py/tests/high/__init__.py b/h5py/tests/high/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/h5py/tests/high/test_file.py b/h5py/tests/high/test_file.py
new file mode 100644
index 0000000..024eb32
--- /dev/null
+++ b/h5py/tests/high/test_file.py
@@ -0,0 +1,205 @@
+
+from tempfile import mktemp
+
+from h5py import tests
+import h5py
+
+class FileBase(tests.HTest):
+
+ def setUp(self):
+ self.f = None
+ self.name = None
+
+ def tearDown(self):
+ import os
+ try:
+ if self.f:
+ self.f.close()
+ finally:
+ if self.name and os.path.exists(self.name):
+ os.unlink(self.name)
+
+class TestOpening(FileBase):
+
+ def test_w(self):
+ """ (File) Create/truncate """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+ self.assert_(self.f)
+ self.f.create_group('g')
+ self.f.close()
+ self.f = h5py.File(self.name, 'w')
+ self.assert_('g' not in self.f)
+
+ def test_wm(self):
+ """ (File) Create/exclusive """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w-')
+ self.assert_(self.f)
+ self.f.close()
+ self.assertRaises(IOError, h5py.File, self.name, 'w-')
+
+ def test_a(self):
+ """ (File) Append """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'a')
+ self.assert_(self.f)
+ self.f.create_group('g')
+ self.f.close()
+ self.f = h5py.File(self.name, 'a')
+ self.assert_('g' in self.f)
+
+ def test_r(self):
+ """ (File) Readonly """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+ self.f.create_group('g')
+ self.f.close()
+ self.f = h5py.File(self.name, 'r')
+ self.assert_('g' in self.f)
+ self.assertRaises(IOError, self.f.create_group, 'gg')
+
+ def test_rp(self):
+ """ (File) Readwrite """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+ self.f.create_group('g')
+ self.f.close()
+ self.f = h5py.File(self.name, 'r+')
+ self.assert_('g' in self.f)
+ self.f.create_group('gg')
+ self.assert_('gg' in self.f)
+
+ def test_exc_1(self):
+ """ (File) Missing file causes IOError with r, r+ """
+ name = mktemp()
+ self.assertRaises(IOError, h5py.File, name, 'r')
+ self.assertRaises(IOError, h5py.File, name, 'r+')
+
+ def test_context(self):
+ """ (File) Using File object as context manager """
+ self.name = mktemp()
+ with h5py.File(self.name, 'w') as self.f:
+ self.assert_(self.f)
+ self.assert_(not self.f)
+
+class TestDrivers(FileBase):
+
+ @tests.require(os='unix')
+ def test_stdio(self):
+ """ (File) Create with stdio driver """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w', driver='stdio')
+ self.assert_(self.f)
+ self.assertEqual(self.f.driver, 'stdio')
+
+ @tests.require(os='unix')
+ def test_sec2(self):
+ """ (File) Create with sec2 driver """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w', driver='sec2')
+ self.assert_(self.f)
+ self.assertEqual(self.f.driver, 'sec2')
+
+class TestCore(FileBase):
+
+ def test_create(self):
+ """ (File) Create with core driver """
+ f = h5py.File('a', 'w', driver='core')
+ self.assert_(f)
+ self.assertEqual(f.driver, 'core')
+ f.close()
+
+ @tests.require(api=18)
+ def test_open(self):
+ """ (File) Open with core driver """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+ self.f.create_group('g')
+ self.f.close()
+ f = h5py.File(self.name, 'r', driver='core')
+ self.assert_(f)
+ self.assert_('g' in f)
+ f.close()
+
+ @tests.require(api=16)
+ def test_exc(self):
+ """ (File) Opening with core driver raises NotImplementedError on 1.6 """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+ self.f.close()
+ self.assertRaises(NotImplementedError, h5py.File, self.name, 'r', driver='core')
+
+ def test_backing(self):
+ """ (File) Backing store for core driver """
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w', driver='core', backing_store=True)
+ self.f.create_group('g')
+ self.f.close()
+ self.f = h5py.File(self.name, 'r')
+ self.assert_('g' in self.f)
+
+ def test_blocksize(self):
+ """ (File) Block size argument for core driver """
+ self.f = h5py.File('a', 'w', driver='core', block_size=1024)
+ self.assert_(self.f)
+
+class TestOps(tests.HTest):
+
+ def setUp(self):
+ self.name = mktemp()
+ self.f = h5py.File(self.name, 'w')
+
+ def tearDown(self):
+ if self.f:
+ self.f.close()
+ import os
+ os.unlink(self.name)
+
+ def test_close(self):
+ """ (File) File close() affects __nonzero__() """
+ self.assert_(self.f)
+ self.f.close()
+ self.assert_(not self.f)
+
+ def test_exc(self):
+ """ (File) I/O on closed file results in ValueError """
+ self.f.close()
+ self.assertRaises(ValueError, self.f.create_group, 'g')
+
+ def test_flush(self):
+ """ (File) Flush method """
+ self.f.flush()
+
+ def test_repr(self):
+ """ (File) repr() """
+ self.assert_(isinstance(repr(self.f), basestring))
+ self.f.close()
+ self.assert_(isinstance(repr(self.f), basestring))
+
+ def test_fileprop(self):
+ """ (File) File property """
+ self.assert_(self.f.file is self.f)
+
+ def test_filename(self):
+ """ (File) Filename property """
+ self.assertEqual(self.f.filename, self.name)
+ self.assert_(isinstance(self.f.filename, str))
+
+class TestUnicode(FileBase):
+
+ @tests.require(unicode=True)
+ def test_unicode(self):
+ """ (File) Unicode filenames """
+ self.name = mktemp(u'\u201a')
+ self.f = h5py.File(self.name, 'w')
+ self.assertEqual(self.f.filename, self.name)
+ self.assert_(isinstance(self.f.filename, unicode))
+
+
+
+
+
+
+
+
diff --git a/h5py/tests/low/__init__.py b/h5py/tests/low/__init__.py
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/h5py/tests/low/__init__.py
@@ -0,0 +1,2 @@
+
+
diff --git a/h5py/tests/low/test_h5a.py b/h5py/tests/low/test_h5a.py
new file mode 100644
index 0000000..a7ab24e
--- /dev/null
+++ b/h5py/tests/low/test_h5a.py
@@ -0,0 +1,117 @@
+#+
+#
+# This file is part of h5py, a low-level Python interface to the HDF5 library.
+#
+# Copyright (C) 2008 Andrew Collette
+# http://h5py.alfven.org
+# License: BSD (See LICENSE.txt for full license)
+#
+# $Date$
+#
+#-
+
+import numpy as np
+from h5py import tests
+
+from h5py import *
+
+def isattr(aid):
+ return aid and h5i.get_type(aid) == h5i.ATTR
+
+class TestCreate(tests.HTest):
+
+ def setUp(self):
+ self.fid, self.name = tests.gettemp()
+ self.sid = h5s.create_simple((1,))
+
+ def tearDown(self):
+ import os
+ self.fid.close()
+ os.unlink(self.name)
+
+ def test_create_1(self):
+ """ (H5A) Create attribute from type and space """
+ aid = h5a.create(self.fid, 'name', h5t.STD_I32LE, self.sid)
+ self.assert_(isattr(aid))
+
+ @tests.require(api=18)
+ def test_create_2(self):
+ """ (H5A) Create attribute on group member w/custom LAPL """
+ gid = h5g.create(self.fid, 'subgroup')
+ lapl = h5p.create(h5p.LINK_ACCESS)
+ aid = h5a.create(self.fid, 'name', h5t.STD_I32LE, self.sid,
+ obj_name='subgroup', lapl=lapl)
+ self.assert_(isattr(aid))
+
+ @tests.fixme
+ def test_exc_1(self):
+ """ (H5A) Existing name causes ValueError """
+ h5a.create(self.fid, 'name', h5t.STD_I32LE, self.sid)
+ self.assertRaises(ValueError, h5a.create, self.fid, 'name',
+ h5t.STD_I32LE, self.sid)
+
+ @tests.require(api=18)
+ def test_exc_2(self):
+ """ (H5A) Wrong obj_name causes KeyError """
+ self.assertRaises(KeyError, h5a.create, self.fid, 'name',
+ h5t.STD_I32LE, self.sid, obj_name='missing')
+
+class TestOpenExists(tests.HTest):
+
+ def setUp(self):
+ self.fid, self.name = tests.gettemp()
+ tid = h5t.STD_I32LE
+ sid = h5s.create_simple((1,))
+ h5a.create(self.fid, 'name', tid, sid)
+ gid = h5g.create(self.fid, 'subgroup')
+ h5a.create(gid, 'othername', tid, sid)
+
+ def tearDown(self):
+ self.fid.close()
+ import os
+ os.unlink(self.name)
+
+ def test_open_1(self):
+ """ (H5A) Open by name """
+ aid = h5a.open(self.fid, 'name')
+ self.assert_(isattr(aid))
+
+ def test_open_2(self):
+ """ (H5A) Open by index """
+ aid = h5a.open(self.fid, index=0)
+ self.assert_(isattr(aid))
+
+ @tests.require(api=18)
+ def test_open_3(self):
+ """ (H5A) Open from group member w/custom LAPL """
+ lapl = h5p.create(h5p.LINK_ACCESS)
+ aid = h5a.open(self.fid, 'othername', obj_name='subgroup', lapl=lapl)
+ self.assert_(isattr(aid))
+
+ def test_exists_1(self):
+ """ (H5A) Check exists by name """
+ self.assert_(h5a.exists(self.fid, 'name') is True)
+ self.assert_(h5a.exists(self.fid, 'missing') is False)
+
+ @tests.require(api=18)
+ def test_exists_2(self):
+ """ (H5A) Check exists on group member with custom LAPL """
+ lapl = h5p.create(h5p.LINK_ACCESS)
+ self.assert_(h5a.exists(self.fid, 'othername', obj_name='subgroup', lapl=lapl) is True)
+ self.assert_(h5a.exists(self.fid, 'missing', obj_name='subgroup', lapl=lapl) is False)
+
+ def test_exc_1(self):
+ """ (H5A) Open with wrong name causes KeyError """
+ self.assertRaises(KeyError, h5a.open, self.fid, 'missing')
+
+ @tests.fixme
+ def test_exc_2(self):
+ """ (H5A) Open with wrong index causes ValueError """
+ self.assertRaises(ValueError, h5a.open, self.fid, index=2)
+
+ @tests.require(api=18)
+ def test_exc_3(self):
+ """ (H5A) Open with wrong subgroup causes KeyError """
+ self.assertRaises(KeyError, h5a.open, self.fid, 'othername', obj_name='missing')
+
+
diff --git a/h5py/tests/test_h5a.py b/h5py/tests/test_h5a.py
index a2c0718..f6db0e4 100644
--- a/h5py/tests/test_h5a.py
+++ b/h5py/tests/test_h5a.py
@@ -43,7 +43,7 @@ class TestH5A(TestCasePlus):
# === General attribute operations ========================================
- def test_create_write(self):
+ def test_write(self):
obj = h5g.open(self.fid, OBJECTNAME)
for name, (value, dt, shape) in NEW_ATTRIBUTES.iteritems():
@@ -66,32 +66,6 @@ class TestH5A(TestCasePlus):
self.assert_(all(arr_val == arr_ref))
@api_18
- def test_create_18(self):
-
- space = h5s.create(h5s.SCALAR)
- htype = h5t.py_create('=f4')
-
- attr = h5a.create(self.fid, "New Attribute", htype, space, obj_name="Group")
- self.assert_(h5a.exists(self.fid, "New Attribute", obj_name="Group"))
-
-
- def test_open_idx(self):
- for idx, name in enumerate(ATTRIBUTES_ORDER):
- attr = h5a.open(self.obj, index=idx)
- self.assert_(self.is_attr(attr), "Open: index %d" % idx)
-
- def test_open_name(self):
- for name in ATTRIBUTES:
- attr = h5a.open(self.obj, name)
- self.assert_(self.is_attr(attr), 'Open: name "%s"' % name)
-
- @api_18
- def test_open_name_18(self):
- for name in ATTRIBUTES:
- attr = h5a.open(self.fid, name, obj_name=OBJECTNAME)
- self.assert_(self.is_attr(attr))
-
- @api_18
def test_rename_18(self):
h5a.rename(self.obj, ATTRIBUTES_ORDER[0], "NewName1")
self.assert_(h5a.exists(self.obj, "NewName1"))
@@ -213,16 +187,6 @@ class TestH5A(TestCasePlus):
attr = h5a.open(self.obj, name)
self.assertEqual(attr.dtype, dt)
- def test_exists(self):
-
- self.assert_(h5a.exists(self.obj, ATTRIBUTES_ORDER[0]))
- self.assert_(not h5a.exists(self.obj, "Something else"))
-
- @api_18
- def test_exists_18(self):
- self.assert_(h5a.exists(self.fid, ATTRIBUTES_ORDER[0], obj_name=OBJECTNAME))
-
-
diff --git a/h5py/tests/test_highlevel.py b/h5py/tests/test_highlevel.py
index bc2ddcb..99dceef 100644
--- a/h5py/tests/test_highlevel.py
+++ b/h5py/tests/test_highlevel.py
@@ -61,130 +61,6 @@ class TestFile(TestCasePlus):
def tearDown(self):
res.clear()
- @require_unicode
- def test_unicode(self):
- # Two cases:
- # 1. Unicode
- # Store w/filesystem encoding; should be readable as Unicode
- # 2. Raw byte string in ASCII range
- # Store w/filesystem encoding; should be read as ASCII
- fnames = [res.get_name(u'_\u201a.hdf5'), res.get_name('_.hdf5')]
- for fname, typ in zip(fnames, [unicode, str]):
- msg = 'checking "%r" (%s)' % (fname, typ)
- f = File(fname, 'w')
- self.assert_(isinstance(f.filename, typ), msg)
- self.assertEqual(f.filename, fname, msg)
- f.close()
-
- def mode_tester(self, driver, suffix=None, **kwds):
- """ Test file behavior w.r.t modes for given driver keywords"""
-
- # create a test file with known contents
- fname = res.get_name(suffix)
- if driver == 'family':
- # Family info is stored in the file, so have to do it this way
- f = h5py.File(fname, 'w', driver=driver, **kwds)
- else:
- f = h5py.File(fname, 'w')
- f.attrs['foo'] = 42
- f.close()
-
- msg = " driver %s kwds %s" % (driver, kwds)
-
- # catch core driver for r, r+, a
- if driver == 'core' and h5py.version.hdf5_version_tuple[0:2] == (1,6):
- self.assertRaises(NotImplementedError, h5py.File, fname, 'r', driver=driver, **kwds)
- self.assertRaises(NotImplementedError, h5py.File, fname, 'r+', driver=driver, **kwds)
- self.assertRaises(NotImplementedError, h5py.File, fname, 'a', driver=driver, **kwds)
-
- else:
-
- # mode r
- f = h5py.File(fname, 'r', driver=driver, **kwds)
- self.assertEqual(f.attrs['foo'], 42, 'mode r'+msg)
- f.close()
- self.assertRaisesMsg('mode r'+msg, IOError, h5py.File, res.get_name(), 'r', driver=driver, **kwds)
-
- # mode r+
- f = h5py.File(fname, 'r+', driver=driver, **kwds)
- self.assertEqual(f.attrs['foo'], 42, 'mode r+'+msg)
- f.attrs['bar'] = 43
- self.assertEqual(f.attrs['bar'], 43, 'mode r+'+msg)
- f.close()
- self.assertRaises(IOError, h5py.File, res.get_name(), 'r', driver=driver, **kwds)
-
- # mode a
- f = h5py.File(fname, 'a', driver=driver, **kwds)
- self.assertEqual(f.attrs['foo'], 42, 'mode a'+msg)
- f.attrs['baz'] = 44
- self.assertEqual(f.attrs['baz'], 44, 'mode a'+msg)
- f.close()
-
- # mode w
- f = h5py.File(fname, 'w', driver=driver, **kwds)
- self.assertEqual(len(f.attrs), 0, 'mode w'+msg)
- f.attrs['foo'] = 24
- self.assertEqual(f.attrs['foo'], 24, 'mode w'+msg)
- f.close()
-
- # mode w-
- if driver == 'core' and h5py.version.hdf5_version_tuple[0:2] == (1,6):
- self.assertRaises(NotImplementedError, h5py.File, fname, 'w-', driver=driver, **kwds)
- else:
- self.assertRaisesMsg('mode w-'+msg, IOError, h5py.File, fname, 'w-', driver=driver, **kwds)
- newname = res.get_name(suffix)
- f = h5py.File(newname, 'w-', driver=driver, **kwds)
- self.assertEqual(len(f.attrs), 0, 'mode w-'+msg)
- f.attrs['foo'] = 24
- self.assertEqual(f.attrs['foo'], 24, 'mode w-'+msg)
- f.close()
-
- def test_drivers(self):
-
- # Test generic operations
- for driver in [None, 'sec2', 'stdio', 'core']:
- self.mode_tester(driver)
-
- # Test family driver
- self.mode_tester('family', suffix='_%d.hdf5')
- self.mode_tester('family', suffix='_%d.hdf5', memb_size=100*(1024.**2))
-
- # Keyword tests for core driver
- def leaves_backing(**kwds):
- fname = res.get_name()
- f = h5py.File(fname, 'w', driver='core', **kwds)
- f.attrs['foo'] = 42
- f.close()
- if not op.exists(fname):
- return False
- f = h5py.File(fname, 'r')
- self.assert_('foo' in f.attrs)
- self.assertEqual(f.attrs['foo'], 42)
- f.close()
- return True
-
- self.assertTrue(leaves_backing())
- self.assertTrue(leaves_backing(backing_store=True))
- self.assertFalse(leaves_backing(backing_store=False))
-
- def test_File_close(self):
- f = File(self.fname, 'r')
- self.assert_(f.id)
- f.close()
- self.assert_(not f.id)
-
- def test_File_flush(self):
- with File(self.fname) as f:
- f.flush()
-
- def test_File_special(self):
- f = File(self.fname, 'r')
- str(f)
- repr(f)
- f.close()
- str(f)
- repr(f)
-
def test_AttributeManager(self):
shapes = ((), (1,), (1,10), (10,1), (10,1,10), (9,9))
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/h5py.git
More information about the debian-science-commits
mailing list