Skip to content

Commit

Permalink
Added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ShikharJ committed Jun 16, 2017
1 parent 2e19913 commit 52fb3d2
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 26 deletions.
2 changes: 1 addition & 1 deletion symengine/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
MatrixBase, Basic, Lambdify, LambdifyCSE, Lambdify as lambdify,
DictBasic, symarray, series, diff, zeros, eye, diag, ones,
Derivative, Subs, add, expand, has_symbol, UndefFunction,
Function, FunctionSymbol as AppliedUndef)
Function, FunctionSymbol as AppliedUndef, true, false)
from .utilities import var, symbols
from .functions import *

Expand Down
4 changes: 2 additions & 2 deletions symengine/lib/symengine.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ cdef extern from "<symengine/symengine_rcp.h>" namespace "SymEngine":
RCP[const RealMPFR] rcp_static_cast_RealMPFR "SymEngine::rcp_static_cast<const SymEngine::RealMPFR>"(RCP[const Basic] &b) nogil
RCP[const ComplexMPC] rcp_static_cast_ComplexMPC "SymEngine::rcp_static_cast<const SymEngine::ComplexMPC>"(RCP[const Basic] &b) nogil
RCP[const Log] rcp_static_cast_Log "SymEngine::rcp_static_cast<const SymEngine::Log>"(RCP[const Basic] &b) nogil
RCP[const Boolean] rcp_static_cast_Boolean "SymEngine::rcp_static_cast<const SymEngine::Boolean>"(RCP[const Basic] &b) nogil
RCP[const BooleanAtom] rcp_static_cast_BooleanAtom "SymEngine::rcp_static_cast<const SymEngine::BooleanAtom>"(RCP[const Basic] &b) nogil
RCP[const PyNumber] rcp_static_cast_PyNumber "SymEngine::rcp_static_cast<const SymEngine::PyNumber>"(RCP[const Basic] &b) nogil
RCP[const PyFunction] rcp_static_cast_PyFunction "SymEngine::rcp_static_cast<const SymEngine::PyFunction>"(RCP[const Basic] &b) nogil
Ptr[RCP[Basic]] outArg(RCP[const Basic] &arg) nogil
Expand Down Expand Up @@ -766,7 +766,7 @@ cdef extern from "<symengine/logic.h>" namespace "SymEngine":
cdef cppclass Boolean(Basic):
pass
cdef cppclass BooleanAtom(Boolean):
pass
bool get_val() nogil
cdef cppclass Relational(Boolean):
pass
cdef cppclass Equality(Relational):
Expand Down
41 changes: 24 additions & 17 deletions symengine/lib/symengine_wrapper.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ cdef c2py(RCP[const symengine.Basic] o):
elif (symengine.is_a_Min(deref(o))):
r = Function.__new__(Min)
elif (symengine.is_a_BooleanAtom(deref(o))):
r = BooleanAtom.__new__(BooleanAtom)
if (deref(symengine.rcp_static_cast_BooleanAtom(o)).get_val()):
r = BooleanTrue.__new__(BooleanTrue)
else:
r = BooleanFalse.__new__(BooleanFalse)
elif (symengine.is_a_Equality(deref(o))):
r = Equality.__new__(Equality)
elif (symengine.is_a_Unequality(deref(o))):
Expand Down Expand Up @@ -188,9 +191,9 @@ def sympy2symengine(a, raise_error=False):
elif a is sympy.nan:
return nan
elif a is sympy.S.true:
return BooleanTrue
return true
elif a is sympy.S.false:
return BooleanFalse
return false
elif isinstance(a, sympy.functions.elementary.trigonometric.TrigonometricFunction):
if isinstance(a, sympy.sin):
return sin(a.args[0])
Expand Down Expand Up @@ -342,7 +345,7 @@ def _sympify(a, raise_error=True):
if isinstance(a, (Basic, MatrixBase)):
return a
elif isinstance(a, bool):
return (BooleanTrue if a else BooleanFalse)
return (true if a else false)
elif isinstance(a, (int, long)):
return Integer(a)
elif isinstance(a, float):
Expand Down Expand Up @@ -865,20 +868,24 @@ class Boolean(Basic):
pass


class BooleanAtom(Boolean):
class BooleanTrue(Boolean):

def _sympy_(self):
import sympy
if self == BooleanTrue:
return sympy.S.true
else:
return sympy.S.false
return sympy.S.true

def _sage_(self):
if self == BooleanTrue:
return True
else:
return False
return True


class BooleanFalse(Boolean):

def _sympy_(self):
import sympy
return sympy.S.false

def _sage_(self):
return False


class Relational(Boolean):
Expand Down Expand Up @@ -2708,12 +2715,12 @@ pi = c2py(symengine.pi)
oo = c2py(symengine.Inf)
zoo = c2py(symengine.ComplexInf)
nan = c2py(symengine.Nan)
BooleanTrue = c2py(symengine.boolTrue)
BooleanFalse = c2py(symengine.boolFalse)
true = c2py(symengine.boolTrue)
false = c2py(symengine.boolFalse)

def module_cleanup():
global I, E, pi, oo, zoo, nan, BooleanTrue, BooleanFalse, sympy_module, sage_module
del I, E, pi, oo, zoo, nan, BooleanTrue, BooleanFalse, sympy_module, sage_module
global I, E, pi, oo, zoo, nan, true, false, sympy_module, sage_module
del I, E, pi, oo, zoo, nan, true, false, sympy_module, sage_module

import atexit
atexit.register(module_cleanup)
Expand Down
1 change: 1 addition & 0 deletions symengine/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ install(FILES __init__.py
test_var.py
test_lambdify.py
test_sympy_compat.py
test_logic.py
DESTINATION ${PY_PATH}
)
24 changes: 24 additions & 0 deletions symengine/tests/test_logic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from symengine.utilities import raises
from symengine.lib.symengine_wrapper import (true, false, Eq, Ne,
Ge, Gt, Le, Lt, Symbol, I)

x = Symbol("x")

def test_relationals():
assert Eq(x, x) == true
assert Eq(0, 0) == true
assert Eq(1, 0) == false
assert Ne(0, 0) == false
assert Ne(1, 0) == true
assert Lt(0, 1) == true
assert Lt(1, 0) == false
assert Le(0, 1) == true
assert Le(1, 0) == false
assert Le(0, 0) == true
assert Gt(1, 0) == true
assert Gt(0, 1) == false
assert Ge(1, 0) == true
assert Ge(0, 1) == false
assert Ge(1, 1) == true
assert Eq(I, 2) == false
assert Ne(I, 2) == true
9 changes: 7 additions & 2 deletions symengine/tests/test_sage.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from symengine import (Integer, symbols, sin, cos, pi, E, I, oo, zoo,
nan, Add, function_symbol, DenseMatrix, sympify, log)
nan, true, false, Add, function_symbol, DenseMatrix,
sympify, log)
from symengine.lib.symengine_wrapper import (PyNumber, PyFunction,
sage_module, wrap_sage_function)

Expand Down Expand Up @@ -68,19 +69,23 @@ def test_sage_conversions():
# For the following test, sage needs to be modified
# assert sage.sin(x) == sage.sin(x1)

# Constants
# Constants and Booleans
assert pi._sage_() == sage.pi
assert E._sage_() == sage.e
assert I._sage_() == sage.I
assert oo._sage_() == sage.oo
assert zoo._sage_() == sage.unsigned_infinity
assert nan._sage_() == sage.NaN
assert true._sage_() == True
assert false._sage_() == False

assert pi == sympify(sage.pi)
assert E == sympify(sage.e)
assert oo == sympify(sage.oo)
assert zoo == sympify(sage.unsigned_infinity)
assert nan == sympify(sage.NaN)
assert true == sympify(True)
assert false == sympify(False)

# SympyConverter does not support converting the following
# assert I == sympify(sage.I)
Expand Down
16 changes: 12 additions & 4 deletions symengine/tests/test_sympy_conv.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from symengine import (Symbol, Integer, sympify, SympifyError, log,
function_symbol, I, E, pi, oo, zoo, nan, exp, gamma, have_mpfr,
have_mpc, DenseMatrix, sin, cos, tan, cot, csc, sec, asin, acos,
atan, acot, acsc, asec, sinh, cosh, tanh, coth, asinh, acosh,
atanh, acoth, Add, Mul, Pow, diff)
function_symbol, I, E, pi, oo, zoo, nan, true, false,
exp, gamma, have_mpfr, have_mpc, DenseMatrix, sin, cos, tan, cot,
csc, sec, asin, acos, atan, acot, acsc, asec, sinh, cosh, tanh, coth,
asinh, acosh, atanh, acoth, Add, Mul, Pow, diff)
from symengine.lib.symengine_wrapper import (Subs, Derivative, RealMPFR,
ComplexMPC, PyNumber, Function)
import sympy
Expand Down Expand Up @@ -380,6 +380,14 @@ def test_constants():
assert sympy.nan == nan._sympy_()


def test_booleans():
assert sympify(sympy.S.true) == true
assert sympy.S.true == true._sympy_()

assert sympify(sympy.S.false) == false
assert sympy.S.false == false._sympy_()


def test_abs():
x = Symbol("x")
e1 = abs(sympy.Symbol("x"))
Expand Down

0 comments on commit 52fb3d2

Please sign in to comment.