From 51d36ff491563bad1a0edf408ac80d5f7baae84e Mon Sep 17 00:00:00 2001 From: Stephan Seitz <stephan.seitz@fau.de> Date: Fri, 2 Aug 2019 21:24:13 +0200 Subject: [PATCH] Correctly implement {is_positive,is_real,is_integer} for TypedSymbol --- pystencils/data_types.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/pystencils/data_types.py b/pystencils/data_types.py index e4c6723e2..08c1da1c9 100644 --- a/pystencils/data_types.py +++ b/pystencils/data_types.py @@ -127,12 +127,30 @@ class TypedSymbol(sp.Symbol): def __getnewargs__(self): return self.name, self.dtype + # For reference: Numpy type hierarchy https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.scalars.html @property def is_integer(self): if hasattr(self.dtype, 'numpy_dtype'): - return np.issubdtype(self.dtype.numpy_dtype, np.integer) + return np.issubdtype(self.dtype.numpy_dtype, np.integer) or super().is_integer else: - return False + return super().is_integer + + @property + def is_negative(self): + if hasattr(self.dtype, 'numpy_dtype'): + if np.issubdtype(self.dtype.numpy_dtype, np.unsignedinteger): + return False + + return super().is_positive + + @property + def is_real(self): + if hasattr(self.dtype, 'numpy_dtype'): + return np.issubdtype(self.dtype.numpy_dtype, np.integer) or \ + np.issubdtype(self.dtype.numpy_dtype, np.floating) or \ + super().is_real + else: + return super().is_real def create_type(specification): -- GitLab