Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update cython defs to v1.6 compatibility in v1.12 #1536

Closed

Conversation

acolinisi
Copy link
Contributor

@acolinisi acolinisi commented Apr 21, 2020

NOT READY TO BE MERGED because these changes probably need to be under a conditional based on detected hdf5 version, similar to VOL_MIN_HDF5_VERSION (but I couldn't figure out the right way to do that).

HDF5 v1.12 provides a compatibility feature, however it seems to not have covered everything, i.e. the compatibility-v1.6 is not the same as v1.6, so this PR fixes up the differences. (A fix to a stop-gap until h5py moves to API v1.12 when available).

Note: with HDF5 v1.12.0, a further patch (attached) is required to H5version.h, to fix missing functions/types in the v1.6 compatibility spec. Not sure whether it's a bug in upstream or not; it seems that the information about the API version in which a function is introduced might be inaccurate in H5vers.txt -- @epourmal what do you think?. (I also tried bumping to H5_USE_18_API in setup_build.py, but then other function prototypes are mismatched, which is expected since h5py bindings are presumably written against v1.6).

Fixes issues in #1504 and PR #1506.

A test fails for me even on master even with HDF5 v1.10.6, so appears unrelated:

py38-test-deps/lib/python3.8/site-packages/h5py/tests/test_file2.py .........Fatal Python error: Aborted

skipping that test, the rest of the test suite passes with this PR on top of master and HDF5 v1.12.0 with the attached HDF5 patch applied:
= 545 passed, 18 skipped, 17 deselected, 3 xfailed in 11.83s =

hdf5-1.12.0-compat-1.6.patch.txt

Note: if you are looking to apply this PR to h5py v2.10.0 release, then you also need this patch:
h5py-2.10.0-hdf5-v1.12-h5i.patch.txt

HDF5 v1.12 provides a compatibility feature, however it seems to not
have covered everything, i.e. the compatibility-v1.6 is not the same as
v1.6, so fixup the differences.

Note: with HDF5 v1.12.0, a further patch is required to H5version.h
(generated from H5vers.txt), to fix missing functions/types in the v1.6
compatibility spec (not sure whether it's a bug in upstream or not; it
seems that the information about the API version in which a function is
introduced might be inaccurate).

Fixes issues in h5py#1504 and PR h5py#1506.
@codecov
Copy link

codecov bot commented Apr 21, 2020

Codecov Report

Merging #1536 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #1536   +/-   ##
=======================================
  Coverage   85.32%   85.32%           
=======================================
  Files          17       17           
  Lines        2296     2296           
=======================================
  Hits         1959     1959           
  Misses        337      337           

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c69fc62...e3055d9. Read the comment docs.

@acolinisi acolinisi marked this pull request as draft April 21, 2020 15:27
@takluyver
Copy link
Member

Thanks for working this out! Compile-time conditionals based on the HDF5 version should be possible like this:

IF HDF5_VERSION >= (1, 10, 0):
ctypedef enum H5D_layout_t:
H5D_LAYOUT_ERROR = -1,
H5D_COMPACT = 0,
H5D_CONTIGUOUS = 1,
H5D_CHUNKED = 2,
H5D_VIRTUAL = 3,
H5D_NLAYOUTS = 4
ELSE:
ctypedef enum H5D_layout_t:

@ArchangeGabriel
Copy link
Contributor

Not quite sure but it seems

-    memcpy(ref.ref.reg_ref, buf_ref, sizeof(hdset_reg_ref_t))
+    memcpy(ref.ref.reg_ref.data, buf_ref, sizeof(hdset_reg_ref_t))

thirty lines above should also be changed.

@ArchangeGabriel
Copy link
Contributor

But even then it still does not build for me:

/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Oget_info’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:16058:15: error: too few arguments to function ‘H5Oget_info3’
16058 |   __pyx_t_1 = H5Oget_info(__pyx_v_loc_id, __pyx_v_oinfo); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1509, __pyx_L1_error)
      |               ^~~~~~~~~~~
In file included from /usr/include/H5Apublic.h:22,
                 from /usr/include/hdf5.h:23,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Opublic.h:187:15: note: declared here
  187 | H5_DLL herr_t H5Oget_info3(hid_t loc_id, H5O_info2_t *oinfo, unsigned fields);
      |               ^~~~~~~~~~~~
In file included from /usr/include/H5public.h:32,
                 from /usr/include/hdf5.h:22,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Oget_info_by_name’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:16170:15: error: too few arguments to function ‘H5Oget_info_by_name3’
16170 |   __pyx_t_1 = H5Oget_info_by_name(__pyx_v_loc_id, __pyx_v_name, __pyx_v_oinfo, __pyx_v_lapl_id); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L1_error)
      |               ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/H5Apublic.h:22,
                 from /usr/include/hdf5.h:23,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Opublic.h:188:15: note: declared here
  188 | H5_DLL herr_t H5Oget_info_by_name3(hid_t loc_id, const char *name, H5O_info2_t *oinfo,
      |               ^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/H5public.h:32,
                 from /usr/include/hdf5.h:22,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Oget_info_by_idx’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:16282:15: error: too few arguments to function ‘H5Oget_info_by_idx3’
16282 |   __pyx_t_1 = H5Oget_info_by_idx(__pyx_v_loc_id, __pyx_v_group_name, __pyx_v_idx_type, __pyx_v_order, __pyx_v_n, __pyx_v_oinfo, __pyx_v_lapl_id); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1531, __pyx_L1_error)
      |               ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/H5Apublic.h:22,
                 from /usr/include/hdf5.h:23,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Opublic.h:190:15: note: declared here
  190 | H5_DLL herr_t H5Oget_info_by_idx3(hid_t loc_id, const char *group_name,
      |               ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/H5public.h:32,
                 from /usr/include/hdf5.h:22,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Ovisit’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:17290:15: error: too few arguments to function ‘H5Ovisit3’
17290 |   __pyx_t_1 = H5Ovisit(__pyx_v_obj_id, __pyx_v_idx_type, __pyx_v_order, __pyx_v_op, __pyx_v_op_data); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1630, __pyx_L1_error)
      |               ^~~~~~~~
In file included from /usr/include/H5Apublic.h:22,
                 from /usr/include/hdf5.h:23,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Opublic.h:211:15: note: declared here
  211 | H5_DLL herr_t H5Ovisit3(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
      |               ^~~~~~~~~
In file included from /usr/include/H5public.h:32,
                 from /usr/include/hdf5.h:22,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Ovisit_by_name’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:17402:15: error: too few arguments to function ‘H5Ovisit_by_name3’
17402 |   __pyx_t_1 = H5Ovisit_by_name(__pyx_v_loc_id, __pyx_v_obj_name, __pyx_v_idx_type, __pyx_v_order, __pyx_v_op, __pyx_v_op_data, __pyx_v_lapl_id); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1641, __pyx_L1_error)
      |               ^~~~~~~~~~~~~~~~
In file included from /usr/include/H5Apublic.h:22,
                 from /usr/include/hdf5.h:23,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Opublic.h:213:15: note: declared here
  213 | H5_DLL herr_t H5Ovisit_by_name3(hid_t loc_id, const char *obj_name,
      |               ^~~~~~~~~~~~~~~~~
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c: In function ‘__pyx_f_4h5py_4defs_H5Sencode’:
/build/python-h5py/src/h5py-2.10.0/h5py/defs.c:33637:15: error: too few arguments to function ‘H5Sencode2’
33637 |   __pyx_t_1 = H5Sencode(__pyx_v_obj_id, __pyx_v_buf, __pyx_v_nalloc); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3303, __pyx_L1_error)
      |               ^~~~~~~~~
In file included from /usr/include/hdf5.h:38,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/api_compat.h:27,
                 from /build/python-h5py/src/h5py-2.10.0/h5py/defs.c:640:
/usr/include/H5Spublic.h:129:15: note: declared here
  129 | H5_DLL herr_t H5Sencode2(hid_t obj_id, void *buf, size_t *nalloc, hid_t fapl);
      |               ^~~~~~~~~~

Some fix in the line of e.g. csound/csound#1314 will be required.

@ArchangeGabriel
Copy link
Contributor

@acolinisi Sorry, I missed the fact that HDF5 itself has to be patched in order for this to work. I’ll try and see.

@ArchangeGabriel
Copy link
Contributor

Actually I still see the same issue after recompiling HDF5 1.12.0 with your patch…

@acolinisi
Copy link
Contributor Author

The patch for HDF5 is patching a generated header file. What I did was install HDF5 1.12.0 as is, then applied the patch to that header file installed in /usr/include, then built h5py. From your errors above, it looks like the header was not patched, can you take a look at that header file?

@ArchangeGabriel
Copy link
Contributor

ArchangeGabriel commented Apr 24, 2020

I patched before building HDF5 actually, I will check the packaged file.

@acolinisi
Copy link
Contributor Author

Ok, I'm just worried that the header is auto-generated, but I'm not sure whether it is (re-)generated during the build or not.

@ArchangeGabriel
Copy link
Contributor

Seems so indeed, the packaged version does not include your changes. I will patch post-build and retry.

@ArchangeGabriel
Copy link
Contributor

OK, so that did the trick but I got a bunch of tests failures (note that I’m using 2.10.0 release):

=================================== FAILURES ===================================
_________________________ TestResize.test_resize_over __________________________

self = <h5py.tests.test_dataset.TestResize testMethod=test_resize_over>

    def test_resize_over(self):
        """ Resizing past maxshape triggers ValueError """
        dset = self.f.create_dataset('foo', (20, 30), maxshape=(20, 60))
        with self.assertRaises(ValueError):
>           dset.resize((20, 70))

h5py/tests/test_dataset.py:676: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
h5py/_hl/dataset.py:438: in resize
    self.id.set_extent(size)
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Unable to set dataset extent (dimension cannot exceed the existing maximal size (new: 70 max: 60))

h5py/h5d.pyx:275: RuntimeError
______________ TestDatasetSwmrRead.test_force_swmr_mode_on_raises ______________

self = <h5py.tests.test_dataset_swmr.TestDatasetSwmrRead testMethod=test_force_swmr_mode_on_raises>

    def test_force_swmr_mode_on_raises(self):
        """ Verify when reading a file cannot be forcibly switched to swmr mode.
        When reading with SWMR the file must be opened with swmr=True."""
        with self.assertRaises(ValueError):
>           self.f.swmr_mode = True

h5py/tests/test_dataset_swmr.py:75: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
h5py/_hl/files.py:311: in swmr_mode
    self.id.start_swmr_write()
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Unable to start swmr writing (no write intent on file)

h5py/h5f.pyx:541: RuntimeError
__________________________ TestNewLibver.test_default __________________________

self = <h5py.tests.test_file.TestNewLibver testMethod=test_default>

    def test_default(self):
        """ Opening with no libver arg """
        f = File(self.mktemp(), 'w')
>       self.assertEqual(f.libver, ('earliest', self.latest))
E       AssertionError: Tuples differ: ('earliest', 'latest') != ('earliest', 'v110')
E       
E       First differing element 1:
E       'latest'
E       'v110'
E       
E       - ('earliest', 'latest')
E       ?               ^^^^^^
E       
E       + ('earliest', 'v110')
E       ?               ^^^^

h5py/tests/test_file.py:341: AssertionError
___________________________ TestNewLibver.test_none ____________________________

self = <h5py.tests.test_file.TestNewLibver testMethod=test_none>

    def test_none(self):
        """ Omitting libver arg results in maximum compatibility """
        f = File(self.mktemp(), 'w')
>       self.assertEqual(f.libver, ('earliest', self.latest))
E       AssertionError: Tuples differ: ('earliest', 'latest') != ('earliest', 'v110')
E       
E       First differing element 1:
E       'latest'
E       'v110'
E       
E       - ('earliest', 'latest')
E       ?               ^^^^^^
E       
E       + ('earliest', 'v110')
E       ?               ^^^^

h5py/tests/test_file.py:371: AssertionError
__________________________ TestNewLibver.test_single ___________________________

self = <h5py.tests.test_file.TestNewLibver testMethod=test_single>

    def test_single(self):
        """ Opening with single libver arg """
        f = File(self.mktemp(), 'w', libver='latest')
>       self.assertEqual(f.libver, (self.latest, self.latest))
E       AssertionError: Tuples differ: ('latest', 'latest') != ('v110', 'v110')
E       
E       First differing element 0:
E       'latest'
E       'v110'
E       
E       - ('latest', 'latest')
E       + ('v110', 'v110')

h5py/tests/test_file.py:347: AssertionError
________________________ TestNewLibver.test_single_v108 ________________________

self = <h5py.tests.test_file.TestNewLibver testMethod=test_single_v108>

    def test_single_v108(self):
        """ Opening with "v108" libver arg """
        f = File(self.mktemp(), 'w', libver='v108')
>       self.assertEqual(f.libver, ('v108', self.latest))
E       AssertionError: Tuples differ: ('v108', 'latest') != ('v108', 'v110')
E       
E       First differing element 1:
E       'latest'
E       'v110'
E       
E       - ('v108', 'latest')
E       + ('v108', 'v110')

h5py/tests/test_file.py:353: AssertionError
________________________ TestNewLibver.test_single_v110 ________________________

self = <h5py.tests.test_file.TestNewLibver testMethod=test_single_v110>

    def test_single_v110(self):
        """ Opening with "v110" libver arg """
        f = File(self.mktemp(), 'w', libver='v110')
>       self.assertEqual(f.libver, ('v110', self.latest))
E       AssertionError: Tuples differ: ('v110', 'latest') != ('v110', 'v110')
E       
E       First differing element 1:
E       'latest'
E       'v110'
E       
E       - ('v110', 'latest')
E       + ('v110', 'v110')

h5py/tests/test_file.py:359: AssertionError
__________________________ TestOpen.test_invalid_ref ___________________________

self = <h5py.tests.test_group.TestOpen testMethod=test_invalid_ref>

    def test_invalid_ref(self):
        """ Invalid region references should raise ValueError """
    
        ref = h5py.h5r.Reference()
    
        with self.assertRaises(ValueError):
            self.f[ref]
    
        self.f.create_group('x')
        ref = self.f['x'].ref
        del self.f['x']
    
        with self.assertRaises(ValueError):
>           self.f[ref]

h5py/tests/test_group.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
h5py/_hl/group.py:260: in __getitem__
    oid = h5r.dereference(name, self.id)
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to open object by token (bad object header version number)'

h5py/h5r.pyx:80: KeyError

Most of them seems related to 110 not being the latest version anymore.

@acolinisi
Copy link
Contributor Author

Ok, I did built the (patched) 2.10.0 too, but I didn't run the test suite on 2.10.0; I only ran the testsuite in master (same as the CI in this PR). Since test suite passes in master, presumably there's some commit(s) on the master branch since the release that fix the above errors -- maybe something stands out in git log?

@epourmal
Copy link

All,

The HDF Group developers started looking into the issues with porting h5py to 1.12. We need to talk to @takluyver and whoever is interested on possible approaches before taking on the task of porting h5py to 1.12 and preserving compatibility with 1.8 and 1.10 versions (if required).

In a few words the problem is that h5py uses a mixture of HDF5 APIs from different versions of HDF5 and defaulting APIs to 1_6 doesn't work anymore with the HDF5 1.12 library.

h5py needs to be converted to use versioned names and be consistent in that versioning within a set of HDF5 functions that use the same data structures. For example, if an application uses version 1 of H5Oget_info_by_name, then H5Lvisit, H5Ovisit, H5Lvisit_by_name, H5Literate, H5Literate_by_name, H5Lget_info, H5Lget_info_by_idx, and data structures H5O_info_t, H5L_info_t, H5L_iterate_t have to be of version 1. (I will not be surprised if I missed some functions already ;-)

The HDF Group will document and post the analysis of the problem and proposed solution, but first, we need to understand h5py maintenance principles and an extent to which this community needs compatibility with the old versions of HDF5 before we dive into the work.

@acolinisi
Copy link
Contributor Author

acolinisi commented Apr 29, 2020

For example, if an application uses version 1 of H5Oget_info_by_name, then H5Lvisit, H5Ovisit, H5Lvisit_by_name, H5Literate, H5Literate_by_name, H5Lget_info, H5Lget_info_by_idx, and data structures H5O_info_t, H5L_info_t, H5L_iterate_t have to be of version 1.

@epourmal In src/H5Version.h, why is H5Fget_info_vers defaulting to v2 under H5_USE_16_API? (my patch hdf5-1.12.0-compat-1.6.patch changes this default to v1, and thus makes h5py compile against v1.12 under H5_USE_16_API). Is it correct for H5Fget_info_vers to default to latest version (v2) under H5_USE_16_API yet being set to v1 under H5_USE_18_API? In which version was H5Fget_info introduced? Thanks.

@tacaswell
Copy link
Member

I am definitely interested in being involved.

In a few words the problem is that h5py uses a mixture of HDF5 APIs #from different versions of HDF5 and defaulting APIs to 1_6 doesn't work anymore with the HDF5 1.12 library.

Was this intentional?

preserving compatibility with 1.8 and 1.10 versions (if required).

We need to keep at least 1.10 and I would prefer to keep 1.8 (if it is not too difficult). We no longer support 1.6 so it is not a problem to drop that (we just have not put the effort into migrating the bindings to 1.8)

@epourmal
Copy link

For example, if an application uses version 1 of H5Oget_info_by_name, then H5Lvisit, H5Ovisit, H5Lvisit_by_name, H5Literate, H5Literate_by_name, H5Lget_info, H5Lget_info_by_idx, and data structures H5O_info_t, H5L_info_t, H5L_iterate_t have to be of version 1.

@epourmal In src/H5Version.h, why is H5Fget_info_vers defaulting to v2 under H5_USE_16_API? (my patch hdf5-1.12.0-compat-1.6.patch changes this default to v1, and thus makes h5py compile against v1.12 under H5_USE_16_API). Is it correct for H5Fget_info_vers to default to latest version (v2) under H5_USE_16_API yet being set to v1 under H5_USE_18_API? In which version was H5Fget_info introduced? Thanks.

API versioning was introduced in the 1.8.0 release. Since there was no H5Fget_info function in 1.6 (see H5Fget_info), library maps it to the latest. This is clearly described in RM entry I am pointing too.

Confusing? Yes... We tried to simplify the path for applications to convert to new APIs, but backfired in 1.12.0 ;-( I would not dismiss that we may have bugs in HDF5 :-)

@epourmal
Copy link

epourmal commented Apr 29, 2020

I am definitely interested in being involved.
Great! Will keep you in the loop.

In a few words the problem is that h5py uses a mixture of HDF5 APIs #from different versions of HDF5 and defaulting APIs to 1_6 doesn't work anymore with the HDF5 1.12 library.

Was this intentional?
EP: No, and I don't think this is only HDF5 issue. Please see my comment on H5Fget_info.

preserving compatibility with 1.8 and 1.10 versions (if required).

We need to keep at least 1.10 and I would prefer to keep 1.8 (if it is not too difficult). We no longer support 1.6 so it is not a problem to drop that (we just have not put the effort into migrating the bindings to 1.8)
EP: Great! Then it will make things easier for porting and cleaning up h5py code. Still, we want to talk to main h5py maintainers before we embark on the task.

@acolinisi
Copy link
Contributor Author

Closing because this should be done instead and the respective errors resolved by moving the bindings to 1_8 API:

I also tried bumping to H5_USE_18_API in setup_build.py, but then other function prototypes are mismatched, which is expected since h5py bindings are presumably written against v1.6.

@acolinisi acolinisi closed this Apr 30, 2020
@takluyver
Copy link
Member

@acolinisi thanks - it's useful to have this change for reference as the first step for 1.12 compatibility. We can't start testing against 1.12 until we can compile against it. :-)

@epourmal yes, let's set up a time to talk about this. I think you're in UTC-5 during the summer? How about 10am your time tomorrow (15.00 UTC / 11am New York / 4pm UK)? @tacaswell , does that work for you? If that's too short notice, we'll find a time next week.

I agree with @tacaswell about compatibility. It looks like the last release of HDF5 1.8 (1.8.21) was in June 2018, so it's reaching the point where we could require 1.10, but if it's practical to keep 1.8 support, I'm still inclined to do so.

@epourmal
Copy link

@takluyver Thank you for getting back!

Sorry, I cannot meet tomorrow at 10:00 am Central. Will 11:00 am Central work? If this doesn't work, morning of 5/5/ from 8:00 am - 2:00 pm will work.
I will set up GoToMeeting invite when we settle on the time. I can connect 150 people total, so everyone who is interested in this discussion can jump into the call.

@takluyver
Copy link
Member

Thanks. The later time (16:00 UTC) works for me. Let's wait to hear if @tacaswell can make it, and if not, find a time on Tuesday.

@epourmal
Copy link

Sure! Thanks!

@tacaswell
Copy link
Member

Yes, I can make 1600 utc work.

@epourmal
Copy link

epourmal commented May 1, 2020

Thomas and Thomas, I just sent you an invite for May 1, 2020 11:00 am Central. Please feel free to forward the invite to anyone who may be interested.

To other members: if you like to participate in the discussion, please contact me and I'll send you GTM info.

@zerothi zerothi mentioned this pull request Jul 27, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants