Bug 1949437 - python-zarr fails to build with Python 3.10: TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray
Summary: python-zarr fails to build with Python 3.10: TypeError: initializer for ctype...
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-lmdb
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Petr Špaček
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
: 1958897 (view as bug list)
Depends On:
Blocks: PYTHON3.10
TreeView+ depends on / blocked
 
Reported: 2021-04-14 09:52 UTC by Tomáš Hrnčiar
Modified: 2021-05-12 15:12 UTC (History)
7 users (show)

Fixed In Version: python-lmdb-1.0.0-1.fc35
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-05-12 13:09:33 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Tomáš Hrnčiar 2021-04-14 09:52:52 UTC
python-zarr fails to build with Python 3.10.0a7.

=================================== FAILURES ===================================
_____________________ TestArrayWithLMDBStore.test_array_0d _____________________

self = <zarr.tests.test_core.TestArrayWithLMDBStore testMethod=test_array_0d>

    def test_array_0d(self):
        # test behaviour for array with 0 dimensions
    
        # setup
        a = np.zeros(())
        z = self.create_array(shape=(), dtype=a.dtype, fill_value=0)
    
        # check properties
        assert a.ndim == z.ndim
        assert a.shape == z.shape
        assert a.size == z.size
        assert a.dtype == z.dtype
        assert a.nbytes == z.nbytes
        with pytest.raises(TypeError):
            len(z)
        assert () == z.chunks
        assert 1 == z.nchunks
        assert (1,) == z.cdata_shape
        # compressor always None - no point in compressing a single value
        assert z.compressor is None
    
        # check __getitem__
        b = z[...]
        assert isinstance(b, np.ndarray)
        assert a.shape == b.shape
        assert a.dtype == b.dtype
        assert_array_equal(a, np.array(z))
        assert_array_equal(a, z[...])
        assert a[()] == z[()]
        with pytest.raises(IndexError):
            z[0]
        with pytest.raises(IndexError):
            z[:]
    
        # check __setitem__
>       z[...] = 42

zarr/tests/test_core.py:956: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1304: in set_basic_selection
    return self._set_basic_selection_zd(selection, value, fields=fields)
zarr/core.py:1589: in _set_basic_selection_zd
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c132cb610>, key = b'0'
value = array(42.), dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
        rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
>                           key, len(key), value, len(value), flags)
E       TypeError: len() of unsized object

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1439: TypeError
___________________ TestArrayWithLMDBStore.test_compressors ____________________

self = <zarr.tests.test_core.TestArrayWithLMDBStore testMethod=test_compressors>

    def test_compressors(self):
        compressors = [
            None, BZ2(), Blosc(), LZ4(), Zlib(), GZip()
        ]
        if LZMA:
            compressors.append(LZMA())
        for compressor in compressors:
            a = self.create_array(shape=1000, chunks=100, compressor=compressor)
>           a[0:100] = 1

zarr/tests/test_core.py:1442: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c13255f90>, key = b'0'
value = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
       1., 1., 1., 1., 1., 1., 1., 1., 1., ...1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
_______________ TestArrayWithLMDBStore.test_iteration_exceptions _______________

self = <zarr.tests.test_core.TestArrayWithLMDBStore testMethod=test_iteration_exceptions>

    def test_iteration_exceptions(self):
        # zero d array
        a = np.array(1, dtype=int)
        z = self.create_array(shape=a.shape, dtype=int)
>       z[...] = a

zarr/tests/test_core.py:1354: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1304: in set_basic_selection
    return self._set_basic_selection_zd(selection, value, fields=fields)
zarr/core.py:1589: in _set_basic_selection_zd
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c125d6590>, key = b'0'
value = array(1), dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
        rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
>                           key, len(key), value, len(value), flags)
E       TypeError: len() of unsized object

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1439: TypeError
_____________ TestArrayWithLMDBStore.test_store_has_binary_values ______________

self = <zarr.tests.test_core.TestArrayWithLMDBStore testMethod=test_store_has_binary_values>

    def test_store_has_binary_values(self):
        # Initialize array
        np.random.seed(42)
        z = self.create_array(shape=(1050,), chunks=100, dtype='f8', compressor=[])
>       z[:] = np.random.random(z.shape)

zarr/tests/test_core.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c123d37c0>, key = b'0'
value = array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.601115...25, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
_______________ TestArrayWithLMDBStore.test_store_has_text_keys ________________

self = <zarr.tests.test_core.TestArrayWithLMDBStore testMethod=test_store_has_text_keys>

    def test_store_has_text_keys(self):
        # Initialize array
        np.random.seed(42)
        z = self.create_array(shape=(1050,), chunks=100, dtype='f8', compressor=[])
>       z[:] = np.random.random(z.shape)

zarr/tests/test_core.py:94: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c1340c2b0>, key = b'0'
value = array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.601115...25, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
________________ TestArrayWithLMDBStoreNoBuffers.test_array_0d _________________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_array_0d>

    def test_array_0d(self):
        # test behaviour for array with 0 dimensions
    
        # setup
        a = np.zeros(())
        z = self.create_array(shape=(), dtype=a.dtype, fill_value=0)
    
        # check properties
        assert a.ndim == z.ndim
        assert a.shape == z.shape
        assert a.size == z.size
        assert a.dtype == z.dtype
        assert a.nbytes == z.nbytes
        with pytest.raises(TypeError):
            len(z)
        assert () == z.chunks
        assert 1 == z.nchunks
        assert (1,) == z.cdata_shape
        # compressor always None - no point in compressing a single value
        assert z.compressor is None
    
        # check __getitem__
        b = z[...]
        assert isinstance(b, np.ndarray)
        assert a.shape == b.shape
        assert a.dtype == b.dtype
        assert_array_equal(a, np.array(z))
        assert_array_equal(a, z[...])
        assert a[()] == z[()]
        with pytest.raises(IndexError):
            z[0]
        with pytest.raises(IndexError):
            z[:]
    
        # check __setitem__
>       z[...] = 42

zarr/tests/test_core.py:956: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1304: in set_basic_selection
    return self._set_basic_selection_zd(selection, value, fields=fields)
zarr/core.py:1589: in _set_basic_selection_zd
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c12b6bbb0>, key = b'0'
value = array(42.), dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
        rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
>                           key, len(key), value, len(value), flags)
E       TypeError: len() of unsized object

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1439: TypeError
_______________ TestArrayWithLMDBStoreNoBuffers.test_compressors _______________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_compressors>

    def test_compressors(self):
        compressors = [
            None, BZ2(), Blosc(), LZ4(), Zlib(), GZip()
        ]
        if LZMA:
            compressors.append(LZMA())
        for compressor in compressors:
            a = self.create_array(shape=1000, chunks=100, compressor=compressor)
>           a[0:100] = 1

zarr/tests/test_core.py:1442: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c13270dc0>, key = b'0'
value = array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
       1., 1., 1., 1., 1., 1., 1., 1., 1., ...1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
__________ TestArrayWithLMDBStoreNoBuffers.test_iteration_exceptions ___________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_iteration_exceptions>

    def test_iteration_exceptions(self):
        # zero d array
        a = np.array(1, dtype=int)
        z = self.create_array(shape=a.shape, dtype=int)
>       z[...] = a

zarr/tests/test_core.py:1354: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1304: in set_basic_selection
    return self._set_basic_selection_zd(selection, value, fields=fields)
zarr/core.py:1589: in _set_basic_selection_zd
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c132c99c0>, key = b'0'
value = array(1), dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
        rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
>                           key, len(key), value, len(value), flags)
E       TypeError: len() of unsized object

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1439: TypeError
_________ TestArrayWithLMDBStoreNoBuffers.test_store_has_binary_values _________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_store_has_binary_values>

    def test_store_has_binary_values(self):
        # Initialize array
        np.random.seed(42)
        z = self.create_array(shape=(1050,), chunks=100, dtype='f8', compressor=[])
>       z[:] = np.random.random(z.shape)

zarr/tests/test_core.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7e8c108e7a90>, key = b'0'
value = array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.601115...25, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
_________ TestArrayWithLMDBStoreNoBuffers.test_store_has_bytes_values __________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_store_has_bytes_values>

    def test_store_has_bytes_values(self):
        # Test that many stores do hold bytes values.
        # Though this is not a strict requirement.
        # Should be disabled by any stores that fail this as needed.
    
        # Initialize array
        np.random.seed(42)
        z = self.create_array(shape=(1050,), chunks=100, dtype='f8', compressor=[])
>       z[:] = np.random.random(z.shape)

zarr/tests/test_core.py:128: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c12c8c220>, key = b'0'
value = array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.601115...25, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
___________ TestArrayWithLMDBStoreNoBuffers.test_store_has_text_keys ___________

self = <zarr.tests.test_core.TestArrayWithLMDBStoreNoBuffers testMethod=test_store_has_text_keys>

    def test_store_has_text_keys(self):
        # Initialize array
        np.random.seed(42)
        z = self.create_array(shape=(1050,), chunks=100, dtype='f8', compressor=[])
>       z[:] = np.random.random(z.shape)

zarr/tests/test_core.py:94: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1306: in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
zarr/core.py:1597: in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
zarr/core.py:1649: in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
zarr/core.py:1886: in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
zarr/core.py:1893: in _chunk_setitem_nosync
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c1332f580>, key = b'0'
value = array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.601115...25, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not numpy.ndarray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
_______________________ TestGroupWithLMDBStore.test_move _______________________

self = <zarr.tests.test_hierarchy.TestGroupWithLMDBStore testMethod=test_move>

    def test_move(self):
        g = self.create_group()
    
        data = np.arange(100)
        g['boo'] = data
    
        data = np.arange(100)
        g['foo'] = data
    
        try:
>           g.move('foo', 'bar')

zarr/tests/test_hierarchy.py:757: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/hierarchy.py:1035: in move
    self._write_op(self._move_nosync, source, dest)
zarr/hierarchy.py:661: in _write_op
    return f(*args, **kwargs)
zarr/hierarchy.py:1006: in _move_nosync
    rename(self._store, path, new_path)
zarr/storage.py:148: in rename
    _rename_from_keys(store, src_path, dst_path)
zarr/storage.py:134: in _rename_from_keys
    store[new_key] = store.pop(key)
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c125d2ec0>, key = b'bar/.zarray'
value = <_cffi_backend.buffer object at 0x7f8c12e2d080>, dupdata = True
overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not _cffi_backend.buffer

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
_____________________ TestGroupWithLMDBStore.test_setitem ______________________

self = <zarr.tests.test_hierarchy.TestGroupWithLMDBStore testMethod=test_setitem>

    def test_setitem(self):
        g = self.create_group()
        try:
            data = np.arange(100)
            g['foo'] = data
            assert_array_equal(data, g['foo'])
            data = np.arange(200)
            g['foo'] = data
            assert_array_equal(data, g['foo'])
            # 0d array
>           g['foo'] = 42

zarr/tests/test_hierarchy.py:719: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/hierarchy.py:352: in __setitem__
    self.array(item, value, overwrite=True)
zarr/hierarchy.py:948: in array
    return self._write_op(self._array_nosync, name, data, **kwargs)
zarr/hierarchy.py:661: in _write_op
    return f(*args, **kwargs)
zarr/hierarchy.py:954: in _array_nosync
    return array(data, store=self._store, path=path, chunk_store=self._chunk_store,
zarr/creation.py:357: in array
    z[...] = data
zarr/core.py:1211: in __setitem__
    self.set_basic_selection(selection, value, fields=fields)
zarr/core.py:1304: in set_basic_selection
    return self._set_basic_selection_zd(selection, value, fields=fields)
zarr/core.py:1589: in _set_basic_selection_zd
    self.chunk_store[ckey] = cdata
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7f8c12675ed0>, key = b'foo/0'
value = array(42), dupdata = True, overwrite = True, append = False, db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
        rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
>                           key, len(key), value, len(value), flags)
E       TypeError: len() of unsized object

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1439: TypeError
_____________________ TestLMDBStore.test_writeable_values ______________________

self = <zarr.tests.test_storage.TestLMDBStore testMethod=test_writeable_values>

    def test_writeable_values(self):
        store = self.create_store()
    
        # __setitem__ should accept any value that implements buffer interface
        store['foo1'] = b'bar'
>       store['foo2'] = bytearray(b'bar')

zarr/tests/test_storage.py:141: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zarr/storage.py:1910: in __setitem__
    txn.put(key, value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <lmdb.cffi.Transaction object at 0x7e8c1073fd90>, key = b'foo2'
value = bytearray(b'bar'), dupdata = True, overwrite = True, append = False
db = None

    def put(self, key, value, dupdata=True, overwrite=True, append=False,
            db=None):
        """Store a record, returning ``True`` if it was written, or ``False``
        to indicate the key was already present and `overwrite=False`. On
        success, the cursor is positioned on the new record.
    
        Equivalent to `mdb_put()
        <http://symas.com/mdb/doc/group__mdb.html#ga4fa8573d9236d54687c61827ebf8cac0>`_
    
            `key`:
                Bytestring key to store.
    
            `value`:
                Bytestring value to store.
    
            `dupdata`:
                If ``True`` and database was opened with `dupsort=True`, add
                pair as a duplicate if the given key already exists. Otherwise
                overwrite any existing matching key.
    
            `overwrite`:
                If ``False``, do not overwrite any existing matching key.
    
            `append`:
                If ``True``, append the pair to the end of the database without
                comparing its order first. Appending a key that is not greater
                than the highest existing key will cause corruption.
    
            `db`:
                Named database to operate on. If unspecified, defaults to the
                database given to the :py:class:`Transaction` constructor.
        """
        flags = 0
        if not dupdata:
            flags |= _lib.MDB_NODUPDATA
        if not overwrite:
            flags |= _lib.MDB_NOOVERWRITE
        if append:
            flags |= _lib.MDB_APPEND
    
>       rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi,
                            key, len(key), value, len(value), flags)
E       TypeError: initializer for ctype 'char *' must be a cdata pointer, not bytearray

/usr/lib64/python3.10/site-packages/lmdb/cffi.py:1438: TypeError
=============================== warnings summary ===============================
zarr/tests/test_creation.py::test_open_array
zarr/tests/test_storage.py::TestN5Store::test_filters
zarr/tests/test_storage.py::TestN5Store::test_init_array
zarr/tests/test_storage.py::TestN5Store::test_init_array_overwrite
zarr/tests/test_storage.py::TestN5Store::test_init_array_overwrite_chunk_store
zarr/tests/test_storage.py::TestN5Store::test_init_array_overwrite_group
zarr/tests/test_storage.py::TestN5Store::test_init_array_overwrite_path
zarr/tests/test_storage.py::TestN5Store::test_init_array_path
  /builddir/build/BUILD/zarr-2.7.0/zarr/n5.py:417: RuntimeWarning: Not all N5 implementations support blosc compression (yet). You might not be able to open the dataset with another N5 library.
    warnings.warn(

zarr/tests/test_creation.py::test_compression_args
  /builddir/build/BUILD/zarr-2.7.0/zarr/tests/test_creation.py:472: UserWarning: 'compression' keyword argument overridden by 'compressor'
    z = create(100, compressor=Zlib(9), compression='bz2', compression_opts=1)

zarr/tests/test_creation.py::test_compression_args
  /builddir/build/BUILD/zarr-2.7.0/zarr/tests/test_creation.py:472: UserWarning: 'compression_opts' keyword argument overridden by 'compressor'
    z = create(100, compressor=Zlib(9), compression='bz2', compression_opts=1)

zarr/tests/test_creation.py::test_compression_args
  /builddir/build/BUILD/zarr-2.7.0/zarr/tests/test_creation.py:478: UserWarning: 'compression_opts' keyword argument overridden by 'compressor'
    z = create(100, compressor=Zlib(9), compression_opts=1)

-- Docs: https://docs.pytest.org/en/stable/warnings.html
============================= slowest 10 durations =============================
9.52s call     zarr/tests/test_indexing.py::test_set_orthogonal_selection_3d
1.48s call     zarr/tests/test_indexing.py::test_set_orthogonal_selection_2d
0.67s call     zarr/tests/test_storage.py::test_format_compatibility
0.66s call     zarr/tests/test_indexing.py::test_get_orthogonal_selection_3d
0.57s call     zarr/tests/test_core.py::TestArrayWithBZ2Compressor::test_object_arrays_vlen_array
0.52s call     zarr/tests/test_core.py::TestArrayWithSQLiteStore::test_object_arrays_vlen_array
0.52s call     zarr/tests/test_sync.py::TestArrayWithProcessSynchronizer::test_object_arrays_vlen_array
0.51s call     zarr/tests/test_core.py::TestArrayWithLMDBStore::test_object_arrays_vlen_array
0.51s call     zarr/tests/test_core.py::TestArrayWithNestedDirectoryStore::test_object_arrays_vlen_array
0.51s call     zarr/tests/test_core.py::TestArrayWithLZMACompressor::test_object_arrays_vlen_array
=========================== short test summary info ============================
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStore::test_array_0d - TypeE...
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStore::test_compressors - Ty...
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStore::test_iteration_exceptions
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStore::test_store_has_binary_values
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStore::test_store_has_text_keys
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_array_0d
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_compressors
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_iteration_exceptions
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_store_has_binary_values
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_store_has_bytes_values
FAILED zarr/tests/test_core.py::TestArrayWithLMDBStoreNoBuffers::test_store_has_text_keys
FAILED zarr/tests/test_hierarchy.py::TestGroupWithLMDBStore::test_move - Type...
FAILED zarr/tests/test_hierarchy.py::TestGroupWithLMDBStore::test_setitem - T...
FAILED zarr/tests/test_storage.py::TestLMDBStore::test_writeable_values - Typ...
==== 14 failed, 1897 passed, 286 skipped, 2 xfailed, 11 warnings in 54.22s =====

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.10/fedora-rawhide-x86_64/02127406-python-zarr/

For all our attempts to build python-zarr with Python 3.10, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.10/package/python-zarr/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.10:
https://copr.fedorainfracloud.org/coprs/g/python/python3.10/

Let us know here if you have any questions.

Python 3.10 will be included in Fedora 35. To make that update smoother, we're building Fedora packages with early pre-releases of Python 3.10.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon.
We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Elliott Sales de Andrade 2021-04-15 09:39:20 UTC
This continues to be breakage in lmdb.

Comment 2 Miro Hrončok 2021-05-12 15:12:33 UTC
*** Bug 1958897 has been marked as a duplicate of this bug. ***


Note You need to log in before you can comment on or make changes to this bug.