# -*- coding: utf-8 -*- import sys import pytest from pybind11_tests import numpy_scalars as m np = pytest.importorskip("numpy") SCALAR_TYPES = dict( [ (np.bool_, False), (np.int8, -7), (np.int16, -15), (np.int32, -31), (np.int64, -63), (np.uint8, 9), (np.uint16, 17), (np.uint32, 33), (np.uint64, 65), (np.single, 1.125), (np.double, 1.25), (np.complex64, 1 - 0.125j), (np.complex128, 1 - 0.25j), ] ) ALL_TYPES = [int, bool, float, bytes, str] + list(SCALAR_TYPES) def type_name(tp): try: return tp.__name__.rstrip("_") except BaseException: # no numpy return str(tp) @pytest.fixture(scope="module", params=list(SCALAR_TYPES), ids=type_name) def scalar_type(request): return request.param def expected_signature(tp): s = "str" if sys.version_info[0] >= 3 else "unicode" t = type_name(tp) return "test_{t}(x: {t}) -> Tuple[{s}, {t}]\n".format(s=s, t=t) def test_numpy_scalars(scalar_type): expected = SCALAR_TYPES[scalar_type] name = type_name(scalar_type) func = getattr(m, "test_" + name) assert func.__doc__ == expected_signature(scalar_type) for tp in ALL_TYPES: value = tp(1) if tp is scalar_type: result = func(value) assert result[0] == name assert isinstance(result[1], tp) assert result[1] == tp(expected) else: with pytest.raises(TypeError): func(value)