mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 05:05:11 +00:00
Fix test suite failure without numpy and improve module init diagnostics
Fixes #357.
This commit is contained in:
parent
69b6246677
commit
23919174a7
@ -202,3 +202,27 @@ def pytest_namespace():
|
||||
'requires_eigen_and_scipy': skipif(not have_eigen or not scipy,
|
||||
reason="eigen and/or scipy are not installed"),
|
||||
}
|
||||
|
||||
|
||||
def _test_import_pybind11():
|
||||
"""Early diagnostic for test module initialization errors
|
||||
|
||||
When there is an error during initialization, the first import will report the
|
||||
real error while all subsequent imports will report nonsense. This import test
|
||||
is done early (in the pytest configuration file, before any tests) in order to
|
||||
avoid the noise of having all tests fail with identical error messages.
|
||||
|
||||
Any possible exception is caught here and reported manually *without* the stack
|
||||
trace. This further reduces noise since the trace would only show pytest internals
|
||||
which are not useful for debugging pybind11 module issues.
|
||||
"""
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
import pybind11_tests
|
||||
except Exception as e:
|
||||
print("Failed to import pybind11_tests from pytest:")
|
||||
print(" {}: {}".format(type(e).__name__, e))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
_test_import_pybind11()
|
||||
|
@ -3,12 +3,11 @@ import pytest
|
||||
with pytest.suppress(ImportError):
|
||||
import numpy as np
|
||||
|
||||
|
||||
ref = np.array([[ 0, 3, 0, 0, 0, 11],
|
||||
[22, 0, 0, 0, 17, 11],
|
||||
[ 7, 5, 0, 1, 0, 11],
|
||||
[ 0, 0, 0, 0, 0, 11],
|
||||
[ 0, 0, 14, 0, 8, 11]])
|
||||
ref = np.array([[ 0, 3, 0, 0, 0, 11],
|
||||
[22, 0, 0, 0, 17, 11],
|
||||
[ 7, 5, 0, 1, 0, 11],
|
||||
[ 0, 0, 0, 0, 0, 11],
|
||||
[ 0, 0, 14, 0, 8, 11]])
|
||||
|
||||
|
||||
def assert_equal_ref(mat):
|
||||
|
@ -268,6 +268,12 @@ py::list test_dtype_methods() {
|
||||
}
|
||||
|
||||
void init_ex_numpy_dtypes(py::module &m) {
|
||||
try {
|
||||
py::module::import("numpy");
|
||||
} catch (...) {
|
||||
return;
|
||||
}
|
||||
|
||||
PYBIND11_NUMPY_DTYPE(SimpleStruct, x, y, z);
|
||||
PYBIND11_NUMPY_DTYPE(PackedStruct, x, y, z);
|
||||
PYBIND11_NUMPY_DTYPE(NestedStruct, a, b);
|
||||
|
@ -2,15 +2,15 @@ import pytest
|
||||
with pytest.suppress(ImportError):
|
||||
import numpy as np
|
||||
|
||||
simple_dtype = np.dtype({'names': ['x', 'y', 'z'],
|
||||
'formats': ['?', 'u4', 'f4'],
|
||||
'offsets': [0, 4, 8]})
|
||||
packed_dtype = np.dtype([('x', '?'), ('y', 'u4'), ('z', 'f4')])
|
||||
|
||||
|
||||
def assert_equal(actual, expected_data, expected_dtype):
|
||||
np.testing.assert_equal(actual, np.array(expected_data, dtype=expected_dtype))
|
||||
|
||||
simple_dtype = np.dtype({'names': ['x', 'y', 'z'],
|
||||
'formats': ['?', 'u4', 'f4'],
|
||||
'offsets': [0, 4, 8]})
|
||||
packed_dtype = np.dtype([('x', '?'), ('y', 'u4'), ('z', 'f4')])
|
||||
|
||||
|
||||
@pytest.requires_numpy
|
||||
def test_format_descriptors():
|
||||
|
Loading…
Reference in New Issue
Block a user