Skip to content

Commit 1d3b473

Browse files
committed
Add is_positive, is_negative conditions for Number
1 parent eb13330 commit 1d3b473

File tree

4 files changed

+92
-22
lines changed

4 files changed

+92
-22
lines changed

symengine/lib/symengine.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,10 @@ cdef extern from "<symengine/symbol.h>" namespace "SymEngine":
273273

274274
cdef extern from "<symengine/number.h>" namespace "SymEngine":
275275
cdef cppclass Number(Basic):
276+
bool is_positive() nogil
277+
bool is_negative() nogil
278+
bool is_zero() nogil
279+
bool is_complex() nogil
276280
pass
277281
cdef cppclass NumberWrapper(Basic):
278282
pass

symengine/lib/symengine_wrapper.pyx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,34 @@ cdef class Number(Basic):
720720
def is_Number(self):
721721
return True
722722

723+
@property
724+
def is_positive(self):
725+
return deref(symengine.rcp_static_cast_Number(A.thisptr)).is_positive()
726+
727+
@property
728+
def is_negative(self):
729+
return deref(symengine.rcp_static_cast_Number(A.thisptr)).is_negative()
730+
731+
@property
732+
def is_zero(self):
733+
return deref(symengine.rcp_static_cast_Number(A.thisptr)).is_zero()
734+
735+
@property
736+
def is_nonzero(self):
737+
return not (self.is_complex or self.is_zero)
738+
739+
@property
740+
def is_nonnegative(self):
741+
return not (self.is_complex or self.is_negative)
742+
743+
@property
744+
def is_nonpositive(self):
745+
return not (self.is_complex or self.is_nonpositive)
746+
747+
@property
748+
def is_complex(self):
749+
return deref(symengine.rcp_static_cast_Number(A.thisptr)).is_complex()
750+
723751
cdef class Integer(Number):
724752

725753
@property

symengine/tests/test_integer.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

symengine/tests/test_number.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from symengine.utilities import raises
2+
3+
from symengine import Integer, I
4+
5+
def test_integer():
6+
i = Integer(5)
7+
assert str(i) == "5"
8+
9+
def test_integer_long():
10+
i = Integer(123434444444444444444)
11+
assert str(i) == "123434444444444444444"
12+
13+
def test_integer_string():
14+
assert Integer("133") == 133
15+
16+
def test_smallfloat_valid():
17+
i = Integer(7.5)
18+
assert str(i) == "7"
19+
20+
def test_bigfloat_valid():
21+
i = Integer(13333333333333334.5)
22+
assert str(i) == "13333333333333334"
23+
24+
def test_is_conditions():
25+
i = Integer(-123)
26+
assert not i.is_zero
27+
assert not i.is_positive
28+
assert i.is_negative
29+
assert i.is_nonzero
30+
assert i.is_nonpositive
31+
assert not i.is_nonnegative
32+
assert not i.is_complex
33+
34+
i = Integer(123)
35+
assert not i.is_zero
36+
assert i.is_positive
37+
assert not i.is_negative
38+
assert i.is_nonzero
39+
assert not i.is_nonpositive
40+
assert i.is_nonnegative
41+
assert not i.is_complex
42+
43+
i = Integer(0)
44+
assert i.is_zero
45+
assert not i.is_positive
46+
assert not i.is_negative
47+
assert not i.is_nonzero
48+
assert i.is_nonpositive
49+
assert i.is_nonnegative
50+
assert not i.is_complex
51+
52+
i = Integer(1) + I
53+
assert not i.is_zero
54+
assert not i.is_positive
55+
assert not i.is_negative
56+
assert not i.is_nonzero
57+
assert not i.is_nonpositive
58+
assert not i.is_nonnegative
59+
assert i.is_complex
60+

0 commit comments

Comments
 (0)