Re: Tiledb-py fails to build (Was: tiledb: uses atomic operations, but is not linked to libatomic)

2023-03-25 Thread Adam Cecile
Hello,

It seems unittests are running against very new pandas version that wants 
pyarrow (but it does not seems to be available in the archive).
Can you check while self.use_arrow evaluate to True ? That's mostly the root 
cause of the failure.
I'll try to have a look when I'll be in front of my computer.

Regards, Adam.

On March 25, 2023 2:55:39 PM GMT+01:00, Andreas Tille  wrote:
>Hi,
>
>as you can read in the bug log, there was an upload of a new version of
>tiledb a couple of hours before it has migrated to testing.  Thus the
>package remains affected by a testing removal (together with its two
>reverse dependencies tiledb and genomicsdb).  To follow the freeze
>policy I reverted the version bump and NMUed tiledb
>2.15.0really2.14.1-0.1 to experimental (since the maintainer did not
>responded).
>
>As we can see tiledb-py does not build against tiledb 2.15.0[1]
>
>I've now forced (Build-)Depends to
>   tibtiledb-dev (>= 2.15.0really2.14.1~)
>but it seems Salsa CI autopkgtest does not respect the setting
>
>variables:
>  # Build against tiledb in experimental
>  RELEASE: 'experimental'
>
>and thus the autopkgtest log does not reproduce the error I've got
>in my local build:
>
>...
>
>=== FAILURES 
>===
>___ TestNumpyToArray.test_from_numpy_empty_str[1-0] 
>
>
>self = 
>empty_str = '', num_strs = 1
>
>@pytest.mark.parametrize("empty_str", ["", b""])
>@pytest.mark.parametrize("num_strs", [1, 1000])
>def test_from_numpy_empty_str(self, empty_str, num_strs):
>uri = self.path("test_from_numpy_empty_str")
>np_array = np.asarray([empty_str] * num_strs, dtype="O")
>tiledb.from_numpy(uri, np_array)
>
>with tiledb.open(uri, "r") as A:
>assert_array_equal(A[:], np_array)
>if has_pandas():
>>   assert_array_equal(A.query(use_arrow=True).df[:][""], np_array)
>
>tests/test_libtiledb.py:3356:
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
>_.
>/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:192: in 
>__getitem__
>return self if self.return_incomplete else self._run_query()
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
>_.
>
>self = 
>
>def _run_query(self) -> Union[DataFrame, Table]:
>if self.pyquery is not None:
>self.pyquery.submit()
>
>if self.pyquery is None:
>df = DataFrame(self._empty_results)
>elif self.use_arrow:
>with timing("buffer_conversion_time"):
>>   table = self.pyquery._buffers_to_pa_table()
>E   ModuleNotFoundError: No module named 'pyarrow'
>
>/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:329: 
>ModuleNotFoundError
>___ TestNumpyToArray.test_from_numpy_empty_str[1-1] 
>
>
>self = 
>empty_str = b'', num_strs = 1
>
>@pytest.mark.parametrize("empty_str", ["", b""])
>@pytest.mark.parametrize("num_strs", [1, 1000])
>def test_from_numpy_empty_str(self, empty_str, num_strs):
>uri = self.path("test_from_numpy_empty_str")
>np_array = np.asarray([empty_str] * num_strs, dtype="O")
>tiledb.from_numpy(uri, np_array)
>
>with tiledb.open(uri, "r") as A:
>assert_array_equal(A[:], np_array)
>if has_pandas():
>>   assert_array_equal(A.query(use_arrow=True).df[:][""], np_array)
>
>tests/test_libtiledb.py:3356:
>/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:192: in 
>__getitem__
>return self if self.return_incomplete else self._run_query()
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
>_.
>
>self = 
>
>variables:
>  # Build against tiledb in experimental
>  RELEASE: 'experimental'
>def _run_query(self) -> Union[DataFrame, Table]:
>if self.pyquery is not None:
>self.pyquery.submit()
>
>if self.pyquery is None:
>df = DataFrame(self._empty_results)
>elif self.use_arrow:
>with timing("buffer_conversion_time"):
>>   table = self.pyquery._buffers_to_pa_table()
>E   ModuleNotFoundError: No module named 'pyarrow'
>
>/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:329: 
>ModuleNotFoundError
>__ TestNumpyToArray.test_from_numpy_empty_str[1000-0] 
>__
>
>self = 
>empty_str = '', num_strs = 1000
>
>@pytest.mark.parametrize("empty_str", ["", b""])
>@pytest.mark.parametrize("num_strs", [1, 1000])
>def test_from_numpy_empty_str(self, empty_str, num_strs):
>uri = self.path("test_from_numpy_empty_str")
>np_array = np.asarray([empty_str] * num
>
>=== FAILURES 
>===
>___ TestNumpyToArray.test_from_numpy_empty_str[1-0] 
>
>
>self = 
>empty_str = '', num_strs = 1
>
>

Tiledb-py fails to build (Was: tiledb: uses atomic operations, but is not linked to libatomic)

2023-03-25 Thread Andreas Tille
Hi,

as you can read in the bug log, there was an upload of a new version of
tiledb a couple of hours before it has migrated to testing.  Thus the
package remains affected by a testing removal (together with its two
reverse dependencies tiledb and genomicsdb).  To follow the freeze
policy I reverted the version bump and NMUed tiledb
2.15.0really2.14.1-0.1 to experimental (since the maintainer did not
responded).

As we can see tiledb-py does not build against tiledb 2.15.0[1]

I've now forced (Build-)Depends to
   tibtiledb-dev (>= 2.15.0really2.14.1~)
but it seems Salsa CI autopkgtest does not respect the setting

variables:
  # Build against tiledb in experimental
  RELEASE: 'experimental'

and thus the autopkgtest log does not reproduce the error I've got
in my local build:

...

=== FAILURES ===
___ TestNumpyToArray.test_from_numpy_empty_str[1-0] 

self = 
empty_str = '', num_strs = 1

@pytest.mark.parametrize("empty_str", ["", b""])
@pytest.mark.parametrize("num_strs", [1, 1000])
def test_from_numpy_empty_str(self, empty_str, num_strs):
uri = self.path("test_from_numpy_empty_str")
np_array = np.asarray([empty_str] * num_strs, dtype="O")
tiledb.from_numpy(uri, np_array)

with tiledb.open(uri, "r") as A:
assert_array_equal(A[:], np_array)
if has_pandas():
>   assert_array_equal(A.query(use_arrow=True).df[:][""], np_array)

tests/test_libtiledb.py:3356:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _.
/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:192: in __getitem__
return self if self.return_incomplete else self._run_query()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _.

self = 

def _run_query(self) -> Union[DataFrame, Table]:
if self.pyquery is not None:
self.pyquery.submit()

if self.pyquery is None:
df = DataFrame(self._empty_results)
elif self.use_arrow:
with timing("buffer_conversion_time"):
>   table = self.pyquery._buffers_to_pa_table()
E   ModuleNotFoundError: No module named 'pyarrow'

/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:329: 
ModuleNotFoundError
___ TestNumpyToArray.test_from_numpy_empty_str[1-1] 

self = 
empty_str = b'', num_strs = 1

@pytest.mark.parametrize("empty_str", ["", b""])
@pytest.mark.parametrize("num_strs", [1, 1000])
def test_from_numpy_empty_str(self, empty_str, num_strs):
uri = self.path("test_from_numpy_empty_str")
np_array = np.asarray([empty_str] * num_strs, dtype="O")
tiledb.from_numpy(uri, np_array)

with tiledb.open(uri, "r") as A:
assert_array_equal(A[:], np_array)
if has_pandas():
>   assert_array_equal(A.query(use_arrow=True).df[:][""], np_array)

tests/test_libtiledb.py:3356:
/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:192: in __getitem__
return self if self.return_incomplete else self._run_query()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _.

self = 

variables:
  # Build against tiledb in experimental
  RELEASE: 'experimental'
def _run_query(self) -> Union[DataFrame, Table]:
if self.pyquery is not None:
self.pyquery.submit()

if self.pyquery is None:
df = DataFrame(self._empty_results)
elif self.use_arrow:
with timing("buffer_conversion_time"):
>   table = self.pyquery._buffers_to_pa_table()
E   ModuleNotFoundError: No module named 'pyarrow'

/usr/lib/python3/dist-packages/tiledb/multirange_indexing.py:329: 
ModuleNotFoundError
__ TestNumpyToArray.test_from_numpy_empty_str[1000-0] __

self = 
empty_str = '', num_strs = 1000

@pytest.mark.parametrize("empty_str", ["", b""])
@pytest.mark.parametrize("num_strs", [1, 1000])
def test_from_numpy_empty_str(self, empty_str, num_strs):
uri = self.path("test_from_numpy_empty_str")
np_array = np.asarray([empty_str] * num

=== FAILURES ===
___ TestNumpyToArray.test_from_numpy_empty_str[1-0] 

self = 
empty_str = '', num_strs = 1

@pytest.mark.parametrize("empty_str", ["", b""])
@pytest.mark.parametrize("num_strs", [1, 1000])
def test_from_numpy_empty_str(self, empty_str, num_strs):
uri = self.path("test_from_numpy_empty_str")
np_array = np.asarray([empty_str] * num_strs, dtype="O")
tiledb.from_numpy(uri, np_array)

with tiledb.open(uri, "r") as A:
assert_array_equal(A[:], np_array)
if has_pandas():
>   assert_array_equal(A.query(use_arrow=True).df[:][""], np_array)