diff --git a/pystencils/data_types.py b/pystencils/data_types.py index e4c6723e250f3bd2c4a2cf47b4b0325599c0ae32..08c1da1c96f5ba63c1906cfddd6014f7d86f61fe 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):