Skip to content

Commit 76fb7a9

Browse files
authored
Merge pull request #134 from ShikharJ/TrigFunctions
Wrapped sech, csch, asech and acsch functions
2 parents 43c9e24 + a6c4897 commit 76fb7a9

File tree

5 files changed

+110
-3
lines changed

5 files changed

+110
-3
lines changed

symengine/lib/symengine.pxd

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,14 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
241241
bool is_a_Cosh "SymEngine::is_a<SymEngine::Cosh>"(const Basic &b) nogil
242242
bool is_a_Tanh "SymEngine::is_a<SymEngine::Tanh>"(const Basic &b) nogil
243243
bool is_a_Coth "SymEngine::is_a<SymEngine::Coth>"(const Basic &b) nogil
244+
bool is_a_Csch "SymEngine::is_a<SymEngine::Csch>"(const Basic &b) nogil
245+
bool is_a_Sech "SymEngine::is_a<SymEngine::Sech>"(const Basic &b) nogil
244246
bool is_a_ASinh "SymEngine::is_a<SymEngine::ASinh>"(const Basic &b) nogil
245247
bool is_a_ACosh "SymEngine::is_a<SymEngine::ACosh>"(const Basic &b) nogil
246248
bool is_a_ATanh "SymEngine::is_a<SymEngine::ATanh>"(const Basic &b) nogil
247249
bool is_a_ACoth "SymEngine::is_a<SymEngine::ACoth>"(const Basic &b) nogil
250+
bool is_a_ACsch "SymEngine::is_a<SymEngine::ACsch>"(const Basic &b) nogil
251+
bool is_a_ASech "SymEngine::is_a<SymEngine::ASech>"(const Basic &b) nogil
248252
bool is_a_FunctionSymbol "SymEngine::is_a<SymEngine::FunctionSymbol>"(const Basic &b) nogil
249253
bool is_a_Abs "SymEngine::is_a<SymEngine::Abs>"(const Basic &b) nogil
250254
bool is_a_Gamma "SymEngine::is_a<SymEngine::Gamma>"(const Basic &b) nogil
@@ -419,10 +423,14 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
419423
cdef RCP[const Basic] cosh(RCP[const Basic] &arg) nogil except+
420424
cdef RCP[const Basic] tanh(RCP[const Basic] &arg) nogil except+
421425
cdef RCP[const Basic] coth(RCP[const Basic] &arg) nogil except+
426+
cdef RCP[const Basic] csch(RCP[const Basic] &arg) nogil except+
427+
cdef RCP[const Basic] sech(RCP[const Basic] &arg) nogil except+
422428
cdef RCP[const Basic] asinh(RCP[const Basic] &arg) nogil except+
423429
cdef RCP[const Basic] acosh(RCP[const Basic] &arg) nogil except+
424430
cdef RCP[const Basic] atanh(RCP[const Basic] &arg) nogil except+
425431
cdef RCP[const Basic] acoth(RCP[const Basic] &arg) nogil except+
432+
cdef RCP[const Basic] acsch(RCP[const Basic] &arg) nogil except+
433+
cdef RCP[const Basic] asech(RCP[const Basic] &arg) nogil except+
426434
cdef RCP[const Basic] function_symbol(string name, const vec_basic &arg) nogil except+
427435
cdef RCP[const Basic] abs(RCP[const Basic] &arg) nogil except+
428436
cdef RCP[const Basic] gamma(RCP[const Basic] &arg) nogil except+
@@ -485,6 +493,12 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
485493
cdef cppclass Coth(HyperbolicFunction):
486494
pass
487495

496+
cdef cppclass Csch(HyperbolicFunction):
497+
pass
498+
499+
cdef cppclass Sech(HyperbolicFunction):
500+
pass
501+
488502
cdef cppclass ASinh(HyperbolicFunction):
489503
pass
490504

@@ -497,6 +511,12 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
497511
cdef cppclass ACoth(HyperbolicFunction):
498512
pass
499513

514+
cdef cppclass ACsch(HyperbolicFunction):
515+
pass
516+
517+
cdef cppclass ASech(HyperbolicFunction):
518+
pass
519+
500520
cdef cppclass FunctionSymbol(Function):
501521
string get_name() nogil
502522

symengine/lib/symengine_wrapper.pxd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ cdef class Tanh(HyperbolicFunction):
9797
cdef class Coth(HyperbolicFunction):
9898
pass
9999

100+
cdef class Csch(HyperbolicFunction):
101+
pass
102+
103+
cdef class Sech(HyperbolicFunction):
104+
pass
105+
100106
cdef class ASinh(HyperbolicFunction):
101107
pass
102108

@@ -109,6 +115,12 @@ cdef class ATanh(HyperbolicFunction):
109115
cdef class ACoth(HyperbolicFunction):
110116
pass
111117

118+
cdef class ACsch(HyperbolicFunction):
119+
pass
120+
121+
cdef class ASech(HyperbolicFunction):
122+
pass
123+
112124
cdef class FunctionSymbol(Function):
113125
pass
114126

symengine/lib/symengine_wrapper.pyx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ cdef c2py(RCP[const symengine.Basic] o):
9393
r = Tanh.__new__(Tanh)
9494
elif (symengine.is_a_Coth(deref(o))):
9595
r = Coth.__new__(Coth)
96+
elif (symengine.is_a_Csch(deref(o))):
97+
r = Csch.__new__(Csch)
98+
elif (symengine.is_a_Sech(deref(o))):
99+
r = Sech.__new__(Sech)
96100
elif (symengine.is_a_ASinh(deref(o))):
97101
r = ASinh.__new__(ASinh)
98102
elif (symengine.is_a_ACosh(deref(o))):
@@ -101,6 +105,10 @@ cdef c2py(RCP[const symengine.Basic] o):
101105
r = ATanh.__new__(ATanh)
102106
elif (symengine.is_a_ACoth(deref(o))):
103107
r = ACoth.__new__(ACoth)
108+
elif (symengine.is_a_ACsch(deref(o))):
109+
r = ACsch.__new__(ACsch)
110+
elif (symengine.is_a_ASech(deref(o))):
111+
r = ASech.__new__(ASech)
104112
elif (symengine.is_a_ATan2(deref(o))):
105113
r = ATan2.__new__(ATan2)
106114
elif (symengine.is_a_PyNumber(deref(o))):
@@ -184,6 +192,10 @@ def sympy2symengine(a, raise_error=False):
184192
return tanh(a.args[0])
185193
elif isinstance(a, sympy.coth):
186194
return coth(a.args[0])
195+
elif isinstance(a, sympy.csch):
196+
return csch(a.args[0])
197+
elif isinstance(a, sympy.sech):
198+
return sech(a.args[0])
187199
elif isinstance(a, sympy.asinh):
188200
return asinh(a.args[0])
189201
elif isinstance(a, sympy.acosh):
@@ -216,6 +228,11 @@ def sympy2symengine(a, raise_error=False):
216228
return DenseMatrix(row, col, v)
217229
elif isinstance(a, sympy.polys.domains.modularinteger.ModularInteger):
218230
return PyNumber(a, sympy_module)
231+
elif sympy.__version__ > '1.0':
232+
if isinstance(a, sympy.acsch):
233+
return acsch(a.args[0])
234+
elif isinstance(a, sympy.asech):
235+
return asech(a.args[0])
219236

220237
if raise_error:
221238
raise SympifyError("sympy2symengine: Cannot convert '%r' to a symengine type." % a)
@@ -2207,6 +2224,14 @@ def coth(x):
22072224
cdef Basic X = sympify(x)
22082225
return c2py(symengine.coth(X.thisptr))
22092226

2227+
def sech(x):
2228+
cdef Basic X = sympify(x)
2229+
return c2py(symengine.sech(X.thisptr))
2230+
2231+
def csch(x):
2232+
cdef Basic X = sympify(x)
2233+
return c2py(symengine.csch(X.thisptr))
2234+
22102235
def asinh(x):
22112236
cdef Basic X = sympify(x)
22122237
return c2py(symengine.asinh(X.thisptr))
@@ -2223,6 +2248,14 @@ def acoth(x):
22232248
cdef Basic X = sympify(x)
22242249
return c2py(symengine.acoth(X.thisptr))
22252250

2251+
def asech(x):
2252+
cdef Basic X = sympify(x)
2253+
return c2py(symengine.asech(X.thisptr))
2254+
2255+
def acsch(x):
2256+
cdef Basic X = sympify(x)
2257+
return c2py(symengine.acsch(X.thisptr))
2258+
22262259
def function_symbol(name, *args):
22272260
cdef symengine.vec_basic v
22282261
cdef Basic e_

symengine/sympy_compat.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,19 @@ class coth(_RegisteredFunction):
216216
def __new__(cls, a):
217217
return symengine.coth(a)
218218

219+
class csch(_RegisteredFunction):
220+
_classes = (symengine.Csch,)
221+
222+
def __new__(cls, a):
223+
return symengine.csch(a)
224+
225+
226+
class sech(_RegisteredFunction):
227+
_classes = (symengine.Sech,)
228+
229+
def __new__(cls, a):
230+
return symengine.sech(a)
231+
219232

220233
class asinh(_RegisteredFunction):
221234
_classes = (symengine.ASinh,)
@@ -244,6 +257,18 @@ class acoth(_RegisteredFunction):
244257
def __new__(cls, a):
245258
return symengine.acoth(a)
246259

260+
class acsch(_RegisteredFunction):
261+
_classes = (symengine.ACsch,)
262+
263+
def __new__(cls, a):
264+
return symengine.acsch(a)
265+
266+
267+
class asech(_RegisteredFunction):
268+
_classes = (symengine.ASech,)
269+
270+
def __new__(cls, a):
271+
return symengine.asech(a)
247272

248273
class atan2(_RegisteredFunction):
249274
_classes = (symengine.ATan2,)
@@ -254,8 +279,8 @@ def __new__(cls, a, b):
254279

255280
'''
256281
for i in ("""Sin Cos Tan Gamma Cot Csc Sec ASin ACos ATan
257-
ACot ACsc ASec Sinh Cosh Tanh Coth ASinh ACosh ATanh
258-
ACoth""").split():
282+
ACot ACsc ASec Sinh Cosh Tanh Coth Sech Csch ASinh ACosh ATanh
283+
ACoth ASech ACsch""").split():
259284
print("""
260285
class %s(Function):
261286
_classes = (symengine.%s,)

symengine/tests/test_sympy_compat.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from symengine.sympy_compat import (Integer, Rational, S, Basic, Add, Mul,
2-
Pow, symbols, Symbol, log, sin, zeros, atan2, Number)
2+
Pow, symbols, Symbol, log, sin, sech, csch, zeros, atan2, Number)
33

44

55
def test_Integer():
@@ -59,6 +59,23 @@ def test_sin():
5959
assert isinstance(i, sin)
6060

6161

62+
def test_sech():
63+
x = symbols("x")
64+
i = sech(0)
65+
assert isinstance(i, Integer)
66+
i = sech(x)
67+
assert isinstance(i, sech)
68+
69+
70+
def test_csch():
71+
x = symbols("x")
72+
i = csch(x)
73+
assert isinstance(i, csch)
74+
i = csch(-1)
75+
j = csch(1)
76+
assert i == -j
77+
78+
6279
def test_log():
6380
x, y = symbols("x y")
6481
i = log(x, y)

0 commit comments

Comments
 (0)