[h5py] 75/455: Cleanup, adjust Python extensions, enable HDF5 1.8.X mode (stub)

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Jul 2 18:19:19 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 be1bceae50a021215d95b3307400d79f413a8399
Author: andrewcollette <andrew.collette at gmail.com>
Date:   Sun Jul 13 23:08:08 2008 +0000

    Cleanup, adjust Python extensions, enable HDF5 1.8.X mode (stub)
---
 MANIFEST.in            |  1 -
 VERSION.txt            |  1 -
 h5py/__init__.py       |  9 ++++----
 h5py/browse.py         |  4 +---
 h5py/h5.pyx            | 24 ++++++++++++++++++---
 h5py/h5a.pyx           |  8 +++++--
 h5py/h5d.pxd           |  5 ++---
 h5py/h5d.pyx           |  8 +++++--
 h5py/h5g.pyx           | 35 +++++++++++++++---------------
 h5py/h5i.pyx           | 13 +++++------
 h5py/h5t.pyx           |  7 ++++++
 h5py/highlevel.py      | 58 +++++++++++++++++++++++++++++++++-----------------
 h5py/tests/__init__.py |  1 +
 h5py/tests/test_h5g.py | 22 +++++++++----------
 setup.py               | 39 +++++++++++++++------------------
 15 files changed, 140 insertions(+), 95 deletions(-)

diff --git a/MANIFEST.in b/MANIFEST.in
index 859cf56..680f960 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,7 +1,6 @@
 include MANIFEST.in
 include LICENSE.txt
 include README.txt
-include VERSION.txt
 include docs.cfg
 recursive-include h5py *.py *.pyx *.pxd *.pxi *.h *.c *.hdf5
 recursive-include licenses *
diff --git a/VERSION.txt b/VERSION.txt
deleted file mode 100644
index 0ea3a94..0000000
--- a/VERSION.txt
+++ /dev/null
@@ -1 +0,0 @@
-0.2.0
diff --git a/h5py/__init__.py b/h5py/__init__.py
index cfb9ece..7cdbf48 100644
--- a/h5py/__init__.py
+++ b/h5py/__init__.py
@@ -19,11 +19,12 @@ __doc__ = \
 
     Version %s
 
-    See the docstring for the "version" module for a longer introduction.
+    HDF5 %s (using %s API)
 """
 
-import utils, h5, h5f, h5g, h5s, h5t, h5d, h5a, h5p, h5z, h5i, highlevel
-import version
+import utils, h5, h5a, h5d, h5f, h5g, h5i, h5p, h5r, h5s, h5t, h5z, highlevel
 
-__doc__ = __doc__ % version.version
+__doc__ = __doc__ % (h5.version, h5.hdf5_version, h5.api_version)
 
+__all__ = ['h5', 'h5f', 'h5g', 'h5s', 'h5t', 'h5d', 'h5a', 'h5p',
+           'h5z', 'h5i', 'highlevel']
diff --git a/h5py/browse.py b/h5py/browse.py
index e263417..109a34b 100644
--- a/h5py/browse.py
+++ b/h5py/browse.py
@@ -11,8 +11,7 @@
 #-
 
 """
-    Simple command-line browser program, designed to be called by a File
-    instance.
+    Internal module which provides the guts of the File.browse() method
 """
 
 from cmd import Cmd
@@ -25,7 +24,6 @@ import sys
 
 from utils_hl import hbasename
 
-
 from h5py import h5g
 
 NAMES = {h5g.DATASET: "Dataset", h5g.GROUP: "Group", h5g.TYPE: "Named Type"}
diff --git a/h5py/h5.pyx b/h5py/h5.pyx
index a31dc37..8ef4afb 100644
--- a/h5py/h5.pyx
+++ b/h5py/h5.pyx
@@ -10,7 +10,7 @@
 # 
 #-
 """
-    Common module for the HDF5 low-level interface library.  
+    Common support and versioning module for the h5py HDF5 interface.
 
     This is an internal module which is designed to set up the library and
     enable HDF5 exception handline.  It also enables debug logging, if the
@@ -18,8 +18,12 @@
 
     Useful things defined here:
     
+      version               String with h5py version (e.g. "0.2.0")
+      version_tuple         3-tuple with h5py version (e.g. (0, 2, 0))
+
       hdf5_version:         String with library version (e.g. "1.6.5")
       hdf5_version_tuple:   3-tuple form of the version (e.g. (1,6,5))
+
       api_version:          String form of the API used (e.g. "1.6")
       api_version_tuple:    2-tuple form of the version (e.g. (1,6))
 
@@ -53,11 +57,18 @@ def get_libversion():
     H5get_libversion(&major, &minor, &release)
 
     return (major, minor, release)
-    
+
+
 hdf5_version_tuple = get_libversion()        
 hdf5_version = "%d.%d.%d" % hdf5_version_tuple
 api_version_tuple = (H5PY_API_MAJ, H5PY_API_MIN)
-api_version = H5PY_API
+api_version = "%d.%d" % api_version_tuple
+
+version = H5PY_VERSION
+version_tuple = []   # no list comprehensions in Pyrex
+for _x in version.split('.'):
+    version_tuple.append(int(_x))
+version_tuple = tuple(version_tuple)
 
 def _close():
     """ Internal function; do not call unless you want to lose all your data.
@@ -87,6 +98,9 @@ cdef class ObjectID:
         is maintained on the Python side, and is set by methods like
         TypeID.lock(), but this is not tracked across copies.  Until HDF5
         provides something like H5Tis_locked(), this will not be fixed.
+
+        The truth value of an ObjectID (i.e. bool(obj_id)) indicates whether
+        the underlying HDF5 identifier is valid.
     """
 
     property _valid:
@@ -95,6 +109,10 @@ cdef class ObjectID:
         def __get__(self):
             return H5Iget_type(self.id) != H5I_BADID
 
+    def __nonzero__(self):
+        """ Truth value for object identifiers (like _valid)"""
+        return H5Iget_type(self.id) != H5I_BADID
+
     def __cinit__(self, hid_t id_):
         """ Object init; simply records the given ID. """
         self._locked = 0
diff --git a/h5py/h5a.pyx b/h5py/h5a.pyx
index 58d1e47..be2d5e6 100644
--- a/h5py/h5a.pyx
+++ b/h5py/h5a.pyx
@@ -12,6 +12,10 @@
 
 """
     Provides access to the low-level HDF5 "H5A" attribute interface.
+
+    Python extensions:
+    py_listattrs(ObjectID)          Get a list of attribute names
+    py_exists(ObjectID, STRING)     Test if a named attribute exists
 """
 
 # Pyrex compile-time imports
@@ -121,7 +125,7 @@ cdef herr_t list_cb(hid_t loc_id, char *attr_name, object listin):
     return 0
 
 def py_listattrs(ObjectID loc not None):
-    """ (ObjectID loc) => LIST attr_names
+    """ (ObjectID loc) => LIST
 
         Get a list of the names of the attributes attached to an object.
     """
@@ -139,7 +143,7 @@ cdef herr_t cb_exist(hid_t loc_id, char* attr_name, object ref_name):
     return 0
 
 def py_exists(ObjectID loc not None, object ref_name):
-    """ (ObjectID loc, STRING ref_name)
+    """ (ObjectID loc, STRING ref_name) => BOOL
 
         Determine if an attribute named "ref_name" is attached to this object.
     """
diff --git a/h5py/h5d.pxd b/h5py/h5d.pxd
index bfa0c25..c597852 100644
--- a/h5py/h5d.pxd
+++ b/h5py/h5d.pxd
@@ -17,15 +17,14 @@
 include "std_defs.pxi"
 from h5 cimport class ObjectID
 
-cdef class DatasetID(ObjectID):
-    pass
-
 from h5t cimport class TypeID, typewrap
 from h5s cimport class SpaceID
 from h5p cimport class PropID, pdefault, propwrap, PropDCID, PropDXID
 from numpy cimport class ndarray
 
 
+cdef class DatasetID(ObjectID):
+    cdef object _dtype
 
 cdef extern from "hdf5.h":
 
diff --git a/h5py/h5d.pyx b/h5py/h5d.pyx
index b4fc89c..cb1e31f 100644
--- a/h5py/h5d.pyx
+++ b/h5py/h5d.pyx
@@ -97,13 +97,17 @@ cdef class DatasetID(ObjectID):
     property dtype:
         """ Numpy-style dtype object representing the dataset type """
         def __get__(self):
+            # Dataset type can't change
             cdef TypeID tid
-            tid = self.get_type()
-            return tid.dtype
+            if self._dtype is None:
+                tid = self.get_type()
+                self._dtype = tid.dtype
+            return self._dtype
 
     property shape:
         """ Numpy-stype shape tuple representing the dataspace """
         def __get__(self):
+            # Shape can change (DatasetID.extend), so don't cache it
             cdef SpaceID sid
             sid = self.get_space()
             return sid.get_simple_extent_dims()
diff --git a/h5py/h5g.pyx b/h5py/h5g.pyx
index f275725..26d06c8 100644
--- a/h5py/h5g.pyx
+++ b/h5py/h5g.pyx
@@ -20,6 +20,7 @@ from utils cimport emalloc, efree
 # Runtime imports
 import h5
 from h5 import H5Error
+import h5i
 
 # === Public constants and data structures ====================================
 
@@ -84,6 +85,7 @@ cdef class GroupIter:
         self.idx = self.idx + 1
         return retval
 
+
 # === Basic group management ==================================================
 
 def open(ObjectID loc not None, char* name):
@@ -162,8 +164,10 @@ cdef class GroupID(ObjectID):
         Represents an HDF5 group identifier
 
         Python extensions:
-        py_exists(name, [typecode]):    Determine if a group member exists
-        py_iter():      Return an iterator over member names
+
+        __contains__(name)   Test for group member ("if name in grpid")
+        __iter__             Get an iterator over member names
+        __len__              Number of members in this group; len(grpid) = N
     """
 
     def _close(self):
@@ -349,29 +353,24 @@ cdef class GroupID(ObjectID):
         finally:
             efree(cmnt)
 
-    def py_exists(self, char* name, int typecode=-1):
-        """ (STRING name, INT typecode=-1)
+    # === Special methods =====================================================
 
-            Determine if a group member of the given name and (optional)
-            type is present.  Typecode may be one of 
-                - LINK
-                - GROUP
-                - DATASET
-                - DATATYPE
+    def __contains__(self, char* name):
+        """ (STRING name)
+
+            Determine if a group member of the given name is present
         """
         try:
             info = self.get_objinfo(name)
-            if (typecode == -1) or (info.type == typecode):
-                return True
-            return False
+            return True
         except H5Error:
             return False    
 
-    def py_iter(self):
-        """ () => ITERATOR
-
-            Return an iterator over the names of group members.
-        """
+    def __iter__(self):
+        """ Return an iterator over the names of group members. """
         return GroupIter(self)
 
+    def __len__(self):
+        """ Number of group members """
+        return self.get_num_objs()
 
diff --git a/h5py/h5i.pyx b/h5py/h5i.pyx
index eb95332..c42e427 100644
--- a/h5py/h5i.pyx
+++ b/h5py/h5i.pyx
@@ -50,19 +50,20 @@ def get_name(ObjectID obj not None):
     """ (ObjectID obj) => STRING name, or None
 
         Determine (a) name of an HDF5 object.  Because an object has as many
-        names as there are hard links to it, this may not be unique.  If
-        the identifier is invalid or is not associated with a name, returns
-        None.
+        names as there are hard links to it, this may not be unique.
+
+        If the identifier is invalid or is not associated with a name
+        (in the case of transient datatypes, dataspaces, etc), returns None.
     """
     cdef int namelen
     cdef char* name
 
     try:
         namelen = <int>H5Iget_name(obj.id, NULL, 0)
-    except H5Error:  # Later library versions raise an exception here
+    except H5Error:
         return None
 
-    if namelen == 0:
+    if namelen == 0:    # 1.6.5 doesn't raise an exception
         return None
 
     assert namelen > 0
@@ -93,7 +94,7 @@ def inc_ref(ObjectID obj not None):
     H5Iinc_ref(obj.id)
 
 def get_ref(ObjectID obj not None):
-    """ (ObjectID obj)
+    """ (ObjectID obj) => INT
 
         Retrieve the reference count for the given object.
     """
diff --git a/h5py/h5t.pyx b/h5py/h5t.pyx
index c79b1fb..6112a42 100644
--- a/h5py/h5t.pyx
+++ b/h5py/h5t.pyx
@@ -571,6 +571,13 @@ cdef class TypeBitfieldID(TypeID):
     """
     pass
 
+cdef class TypeReferenceID(TypeID):
+
+    """
+        HDF5 object or region reference
+    """
+    pass
+
 # === Numeric classes (integers and floats) ===================================
 
 cdef class TypeAtomicID(TypeID):
diff --git a/h5py/highlevel.py b/h5py/highlevel.py
index b44fa49..1690937 100644
--- a/h5py/highlevel.py
+++ b/h5py/highlevel.py
@@ -37,6 +37,9 @@
     of the h5py low-level library wrapping is available for these objects.
     Each highlevel object carries an identifier object (obj.id), which can be
     used by h5py.h5* functions or methods.
+
+    It is safe to import this module using "from h5py.highlevel import *", but
+    bear in mind the function "open" will shadow the builtin "open" if you do.
 """
 
 import os
@@ -49,7 +52,7 @@ from utils_hl import slicer, hbasename, strhdr, strlist
 from browse import _H5Browser
 
 __all__ = ["HLObject", "File", "Group", "Dataset",
-           "Datatype", "AttributeManager"]
+           "Datatype", "AttributeManager", "open"]
 
 try:
     # For interactive File.browse() capability
@@ -57,6 +60,21 @@ try:
 except ImportError:
     readline = None
 
+def open(filename, mode='r'):
+    """ Open a file.  Supports the following modes:
+
+         r      Read-only, file must exist
+         w      Create, truncating if already exists
+         w-     Create, failing if already exists
+         a      Open r/w, creating if necessary; don't truncate
+         r+     Read-write, file must exist
+
+        The returned file object supports the Python 2.5 "with" statement.
+        It will close itself at the end of a "with" block, regardless of
+        exceptions raised.
+    """
+    return File(filename, mode)
+
 class HLObject(object):
 
     """
@@ -184,11 +202,11 @@ class Group(HLObject):
 
     def __contains__(self, name):
         """ Test if a member name exists """
-        return self.id.py_exists(name)
+        return name in self.id
 
     def __iter__(self):
         """ Iterate over member names """
-        return self.id.py_iter()
+        return self.id.__iter__()
 
     def iteritems(self):
         """ Iterate over the group members as (name, value) pairs """
@@ -248,7 +266,7 @@ class File(Group):
         File(name, mode='r', noclobber=False)
 
         Created with standard Python syntax File(name, mode).
-        Legal modes: r, r+, w, w+, a  (default 'r')
+        Legal modes: r, r+, w, a  (default 'r')
 
         File objects inherit from Group objects; Group-like methods all
         operate on the HDF5 root group ('/').  Like Python file objects, you
@@ -265,36 +283,30 @@ class File(Group):
     mode = property(lambda self: self._mode,
         doc = "Python mode used to open file")
 
-    _modes = ('r','r+','w','w+','a')
-
     # --- Public interface (File) ---------------------------------------------
 
-    def __init__(self, name, mode='r', noclobber=False):
+    def __init__(self, name, mode='r'):
         """ Create a new file object.  
 
             Valid modes (like Python's file() modes) are: 
             - 'r'   Readonly, file must exist
             - 'r+'  Read/write, file must exist
-            - 'w'   Write, create/truncate file
-            - 'w+'  Read/write, create/truncate file
+            - 'w'   Create file, truncate if exists
+            - 'w-'  Create file, fail if exists
             - 'a'   Read/write, file must exist (='r+')
-
-            If "noclobber" is specified, file truncation (w/w+) will fail if 
-            the file already exists.  Note this is NOT the default.
         """
-        if not mode in self._modes:
-            raise ValueError("Invalid mode; must be one of %s" % ', '.join(self._modes))
-
         plist = h5p.create(h5p.FILE_ACCESS)
         plist.set_fclose_degree(h5f.CLOSE_STRONG)
         if mode == 'r':
             self.fid = h5f.open(name, h5f.ACC_RDONLY, accesslist=plist)
-        elif 'r' in mode or 'a' in mode:
+        elif mode == 'r+' or mode == 'a':
             self.fid = h5f.open(name, h5f.ACC_RDWR, accesslist=plist)
-        elif noclobber:
+        elif mode == 'w-':
             self.fid = h5f.create(name, h5f.ACC_EXCL, accesslist=plist)
-        else:
+        elif mode == 'w':
             self.fid = h5f.create(name, h5f.ACC_TRUNC, accesslist=plist)
+        else:
+            raise ValueError("Invalid mode; must be one of r, r+, w, w-, a")
 
         self.id = self.fid  # So the Group constructor can find it.
         Group.__init__(self, self, '/')
@@ -315,6 +327,13 @@ class File(Group):
         """
         h5f.flush(self.fid)
 
+    def __enter__(self):
+        return self
+
+    def __exit__(self,*args):
+        if self.id._valid:
+            self.close()
+        
     def __str__(self):
         if self.id._valid:
             return 'File "%s", root members: %s' % (self.name, ', '.join(['"%s"' % name for name in self]))
@@ -661,10 +680,11 @@ class Datatype(HLObject):
     dtype = property(lambda self: self.id.dtype,
         doc = "Numpy dtype equivalent for this datatype")
 
-    def __init__(grp, name):
+    def __init__(self, grp, name):
         """ Private constructor; you should not create these.
         """
         self.id = h5t.open(grp.id, name)
+        self._attrs = AttributeManager(self)
 
     def __str__(self):
         if self.id._valid:
diff --git a/h5py/tests/__init__.py b/h5py/tests/__init__.py
index ccbd25a..dcb61b5 100644
--- a/h5py/tests/__init__.py
+++ b/h5py/tests/__init__.py
@@ -33,6 +33,7 @@ def buildsuite(cases):
 def runtests():
     suite = buildsuite(TEST_CASES)
     retval = unittest.TextTestRunner(verbosity=3).run(suite)
+    print "=== Tested HDF5 %s (%s API) ===" % (h5.hdf5_version, h5.api_version)
     return retval.wasSuccessful()
 
 def autotest():
diff --git a/h5py/tests/test_h5g.py b/h5py/tests/test_h5g.py
index a0c6e74..1f3f6fc 100644
--- a/h5py/tests/test_h5g.py
+++ b/h5py/tests/test_h5g.py
@@ -55,7 +55,7 @@ class TestH5G(unittest.TestCase):
             obj = h5g.open(fid, OBJECTNAME)
             grp = h5g.create(obj, 'New group')
             grp._close()
-            self.assert_(obj.py_exists('New group'))
+            self.assert_('New group' in obj)
 
     def test_link_unlink_move_linkval(self):
 
@@ -74,25 +74,25 @@ class TestH5G(unittest.TestCase):
 
             # local link
             obj.link(TEST_GROUPS[1], NEW_LINK_NAME, h5g.LINK_HARD)
-            self.assert_( obj.py_exists(NEW_LINK_NAME) )
+            self.assert_( NEW_LINK_NAME in obj )
 
             # test local unlink
             obj.unlink(NEW_LINK_NAME)
-            self.assert_(not obj.py_exists(NEW_LINK_NAME))
+            self.assert_(not NEW_LINK_NAME in obj)
 
             # remote link
             rgrp = h5g.open(obj, TEST_GROUPS[0])
             obj.link(TEST_GROUPS[0], NEW_LINK_NAME, h5g.LINK_HARD, rgrp)
-            self.assert_( rgrp.py_exists(NEW_LINK_NAME) )
+            self.assert_( NEW_LINK_NAME in rgrp )
         
             # remote unlink
             rgrp.unlink(NEW_LINK_NAME)
-            self.assert_( not rgrp.py_exists(NEW_LINK_NAME) )
+            self.assert_( not NEW_LINK_NAME in rgrp )
 
             # move
             obj.move( TEST_GROUPS[2], NEW_LINK_NAME)
-            self.assert_(obj.py_exists(NEW_LINK_NAME))
-            self.assert_(not obj.py_exists(TEST_GROUPS[2]))
+            self.assert_(NEW_LINK_NAME in obj)
+            self.assert_(not TEST_GROUPS[2] in obj)
 
 
     def test_get_num_objs(self):
@@ -158,14 +158,14 @@ class TestH5G(unittest.TestCase):
             self.assertEqual(obj.get_comment(TEST_GROUPS[0]), "This is a comment.")
 
 
-    def test_py_exists(self):
+    def test_py_contains(self):
 
-        self.assert_(self.obj.py_exists(TEST_GROUPS[0]))
-        self.assert_(not self.obj.py_exists('Something else'))
+        self.assert_(TEST_GROUPS[0] in self.obj)
+        self.assert_(not 'Something else' in self.obj)
 
     def test_py_iter(self):
         
-        namelist = list(self.obj.py_iter())
+        namelist = list(self.obj)
         self.assertEqual(namelist, TEST_GROUPS)
 
     
diff --git a/setup.py b/setup.py
index 6d0e350..192d344 100644
--- a/setup.py
+++ b/setup.py
@@ -36,7 +36,7 @@
         --no-pyrex      Don't run Pyrex, no matter what
 
         --hdf5=path     Use alternate HDF5 directory (contains bin, include, lib)
-        --api=<n>       Specifies API version.  Only "16" is currently allowed.
+        --api=<n>       Specifies API version.  Only "16" is currently useful.
         --debug=<n>     If nonzero, compile in debug mode.  The number is
                         interpreted as a logging-module level number.
 
@@ -50,6 +50,8 @@
 # === Global constants ========================================================
 
 NAME = 'h5py'
+VERSION = '0.2.0'
+
 MIN_PYREX = '0.9.8.4'  # for compile_multiple
 MIN_NUMPY = '1.0.3'
 
@@ -69,6 +71,8 @@ from distutils.extension import Extension
 import os
 import sys
 import shutil
+import subprocess
+import re
 
 # Distutils tries to use hard links when building source distributions, which 
 # fails under a wide variety of network filesystems under Linux.
@@ -112,8 +116,11 @@ for arg in sys.argv[:]:
         api = arg[6:]
         if api == '16':
             API_VERS = (1,6)
+        elif api == '18':
+            API_VERS = (1,8)
+            warn('1.8.X API is only partially implemented')
         else:
-            fatal('Unrecognized API version "%s" (only "16" currently allowed)' % api)
+            fatal('Unrecognized API version "%s" (only "16", "18" currently allowed)' % api)
         sys.argv.remove(arg)
     elif arg.find('--debug=') == 0:
         ENABLE_PYREX=True
@@ -144,23 +151,7 @@ try:
 
 except ImportError:
     fatal("Numpy not installed (version >= %s required)" % MIN_NUMPY)
-
-# === Versioning ==============================================================
-
-# 1. Read version from VERSION.txt file into VERSION global
-# 2. Write it to h5py/version.py
-# 3. Copy README into h5py/version.py as docstring
-
-vers_in = open('VERSION.txt', 'r')
-VERSION = vers_in.read().strip()
-vers_out = open(os.path.join(NAME,'version.py'),'w')
-rdfile = open('README.txt','r')
-vers_out.write(AUTO_HDR+'\n')
-vers_out.write('"""\nPackage "h5py" extended information\n\n%s"""\nversion = "%s"\n\n' % (rdfile.read(), VERSION))
-rdfile.close()
-vers_out.close()
-vers_in.close()
-
+        
 # === Setup configuration & Pyrex options =====================================
 
 # Pyrex extension modules
@@ -214,11 +205,15 @@ if ENABLE_PYREX and not PYREX_FORCE_OFF:
 """
 %s
 
+DEF H5PY_VERSION = "%s"
 DEF H5PY_API_MAJ = %d
 DEF H5PY_API_MIN = %d
 DEF H5PY_DEBUG = %d
-DEF H5PY_API = "%d.%d"
-""" % (AUTO_HDR, API_VERS[0], API_VERS[1], DEBUG_LEVEL,API_VERS[0], API_VERS[1])
+
+DEF H5PY_16API = %d
+DEF H5PY_18API = %d
+""" % (AUTO_HDR, VERSION, API_VERS[0], API_VERS[1], DEBUG_LEVEL,
+       1 if API_VERS==(1,6) else 0, 1 if API_VERS==(1,8) else 0)
 
             try:
                 cond_file = open(cond_path,'r')
@@ -315,7 +310,7 @@ class dev(Command):
                 pass
             fnames = [ x+'.dep' for x in pyrex_sources ] + \
                      [ x+'.c' for x in pyrex_sources ] + \
-                     [ 'MANIFEST', os.path.join(pyx_src_path, 'version.py')]
+                     [ 'MANIFEST']
 
             for name in fnames:
                 try:

-- 
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