From bb1c471a299c0118d890988f4bfb7df8eca6595d Mon Sep 17 00:00:00 2001 From: Joerg Behrmann Date: Fri, 10 Feb 2017 19:20:33 +0100 Subject: BUG: Make iscomplexobj compatible with custom dtypes again This change makes iscomplexobj compatible with custom array types using custom dtypes, that are not fully compatible to Numpys dtypes, which can nevertheless be coerced to a numpy array with asarray again, as has been the behaviour before PR #7936. Fixes #8601 --- numpy/lib/tests/test_type_check.py | 9 +++++++++ numpy/lib/type_check.py | 8 +++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/numpy/lib/tests/test_type_check.py b/numpy/lib/tests/test_type_check.py index 93a4da97a..4523e3f24 100644 --- a/numpy/lib/tests/test_type_check.py +++ b/numpy/lib/tests/test_type_check.py @@ -183,6 +183,15 @@ class TestIscomplexobj(TestCase): dummy = DummyPd() assert_(iscomplexobj(dummy)) + def test_custom_dtype_duck(self): + class MyArray(list): + @property + def dtype(self): + return complex + + a = MyArray([1+0j, 2+0j, 3+0j]) + assert_(iscomplexobj(a)) + class TestIsrealobj(TestCase): def test_basic(self): diff --git a/numpy/lib/type_check.py b/numpy/lib/type_check.py index 1658f160c..3bbee0258 100644 --- a/numpy/lib/type_check.py +++ b/numpy/lib/type_check.py @@ -268,12 +268,10 @@ def iscomplexobj(x): """ try: dtype = x.dtype + type_ = dtype.type except AttributeError: - dtype = asarray(x).dtype - try: - return issubclass(dtype.type, _nx.complexfloating) - except AttributeError: - return False + type_ = asarray(x).dtype.type + return issubclass(type_, _nx.complexfloating) def isrealobj(x): -- cgit v1.2.3