import numpy as np
from tabulate import tabulate
data = [[np.ones(1)]]
print(tabulate(data))
Yields this warning from numpy:
/Users/enos/temp/venv/lib/python3.10/site-packages/tabulate/__init__.py:107: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
(len(row) >= 1 and row[0] == SEPARATING_LINE)
-
1
-
The cause is that the line detection function,
def _is_separating_line(row):
row_type = type(row)
is_sl = (row_type == list or row_type == str) and (
(len(row) >= 1 and row[0] == SEPARATING_LINE)
or (len(row) >= 2 and row[1] == SEPARATING_LINE)
)
return is_sl
performs the == operation. This is generally correct, but with numpy (and also other array packages) an == does elementwise comparisons and not object-level. This should still yield the correct answer, just inefficiently and numpy in particular emits that warning.
The fix is simple. Replace the == with is:
(len(row) >= 1 and row[0] is SEPARATING_LINE)
or (len(row) >= 2 and row[1] is SEPARATING_LINE)
Yields this warning from numpy:
The cause is that the line detection function,
performs the
==
operation. This is generally correct, but with numpy (and also other array packages) an==
does elementwise comparisons and not object-level. This should still yield the correct answer, just inefficiently and numpy in particular emits that warning.The fix is simple. Replace the
==
withis
:The
is
should also be a tiny bit faster, too.