Skip to content

Commit c643d39

Browse files
committed
Wrapped Max() Function
1 parent 6c0febf commit c643d39

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

symengine/lib/symengine.pxd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ cdef extern from "<symengine/symengine_rcp.h>" namespace "SymEngine":
143143
RCP[const FunctionSymbol] rcp_static_cast_FunctionSymbol "SymEngine::rcp_static_cast<const SymEngine::FunctionSymbol>"(RCP[const Basic] &b) nogil
144144
RCP[const FunctionWrapper] rcp_static_cast_FunctionWrapper "SymEngine::rcp_static_cast<const SymEngine::FunctionWrapper>"(RCP[const Basic] &b) nogil
145145
RCP[const Abs] rcp_static_cast_Abs "SymEngine::rcp_static_cast<const SymEngine::Abs>"(RCP[const Basic] &b) nogil
146+
RCP[const Max] rcp_static_cast_Max "SymEngine::rcp_static_cast<const SymEngine::Max>"(RCP[const Basic] &b) nogil
146147
RCP[const Gamma] rcp_static_cast_Gamma "SymEngine::rcp_static_cast<const SymEngine::Gamma>"(RCP[const Basic] &b) nogil
147148
RCP[const Derivative] rcp_static_cast_Derivative "SymEngine::rcp_static_cast<const SymEngine::Derivative>"(RCP[const Basic] &b) nogil
148149
RCP[const Subs] rcp_static_cast_Subs "SymEngine::rcp_static_cast<const SymEngine::Subs>"(RCP[const Basic] &b) nogil
@@ -251,6 +252,7 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
251252
bool is_a_ASech "SymEngine::is_a<SymEngine::ASech>"(const Basic &b) nogil
252253
bool is_a_FunctionSymbol "SymEngine::is_a<SymEngine::FunctionSymbol>"(const Basic &b) nogil
253254
bool is_a_Abs "SymEngine::is_a<SymEngine::Abs>"(const Basic &b) nogil
255+
bool is_a_Max "SymEngine::is_a<SymEngine::Max>"(const Basic &b) nogil
254256
bool is_a_Gamma "SymEngine::is_a<SymEngine::Gamma>"(const Basic &b) nogil
255257
bool is_a_Derivative "SymEngine::is_a<SymEngine::Derivative>"(const Basic &b) nogil
256258
bool is_a_Subs "SymEngine::is_a<SymEngine::Subs>"(const Basic &b) nogil
@@ -433,6 +435,7 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
433435
cdef RCP[const Basic] asech(RCP[const Basic] &arg) nogil except+
434436
cdef RCP[const Basic] function_symbol(string name, const vec_basic &arg) nogil except+
435437
cdef RCP[const Basic] abs(RCP[const Basic] &arg) nogil except+
438+
cdef RCP[const Basic] max(const vec_basic &arg) nogil except+
436439
cdef RCP[const Basic] gamma(RCP[const Basic] &arg) nogil except+
437440
cdef RCP[const Basic] atan2(RCP[const Basic] &num, RCP[const Basic] &den) nogil except+
438441

@@ -539,6 +542,9 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
539542
cdef cppclass Abs(Function):
540543
RCP[const Basic] get_arg() nogil
541544

545+
cdef cppclass Max(Function):
546+
pass
547+
542548
cdef cppclass Gamma(Function):
543549
pass
544550

symengine/lib/symengine_wrapper.pxd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ cdef class PyFunction(FunctionSymbol):
130130
cdef class Abs(Function):
131131
pass
132132

133+
cdef class Max(Function):
134+
pass
135+
133136
cdef class Gamma(Function):
134137
pass
135138

symengine/lib/symengine_wrapper.pyx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ cdef c2py(RCP[const symengine.Basic] o):
4545
r = FunctionSymbol.__new__(FunctionSymbol)
4646
elif (symengine.is_a_Abs(deref(o))):
4747
r = Abs.__new__(Abs)
48+
elif (symengine.is_a_Max(deref(o))):
49+
r = Max.__new__(Max)
4850
elif (symengine.is_a_Gamma(deref(o))):
4951
r = Gamma.__new__(Gamma)
5052
elif (symengine.is_a_Derivative(deref(o))):
@@ -208,6 +210,8 @@ def sympy2symengine(a, raise_error=False):
208210
return log(a.args[0])
209211
elif isinstance(a, sympy.Abs):
210212
return abs(sympy2symengine(a.args[0], raise_error))
213+
elif isinstance(a, sympy.Max):
214+
return max(*a.args)
211215
elif isinstance(a, sympy.gamma):
212216
return gamma(a.args[0])
213217
elif isinstance(a, sympy.Derivative):
@@ -1392,6 +1396,27 @@ cdef class Abs(Function):
13921396
arg = c2py(deref(X).get_arg())._sage_()
13931397
return abs(arg)
13941398

1399+
cdef class Max(Function):
1400+
1401+
def _sympy_(self):
1402+
cdef RCP[const symengine.Max] X = \
1403+
symengine.rcp_static_cast_Max(self.thisptr)
1404+
cdef symengine.vec_basic Y = deref(X).get_args()
1405+
s = []
1406+
for i in range(Y.size()):
1407+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sympy_())
1408+
import sympy
1409+
return sympy.Max(*s)
1410+
1411+
def _sage_(self):
1412+
import sage.all as sage
1413+
cdef RCP[const symengine.Max] X = \
1414+
symengine.rcp_static_cast_Max(self.thisptr)
1415+
cdef symengine.vec_basic Y = deref(X).get_args()
1416+
s = []
1417+
for i in range(Y.size()):
1418+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
1419+
return sage.max(*s)
13951420

13961421
cdef class Derivative(Basic):
13971422

@@ -2304,6 +2329,14 @@ def log(x, y = None):
23042329
cdef Basic Y = _sympify(y)
23052330
return c2py(symengine.log(X.thisptr, Y.thisptr))
23062331

2332+
def max(*args):
2333+
cdef symengine.vec_basic v
2334+
cdef Basic e_
2335+
for e in args:
2336+
e_ = sympify(e)
2337+
v.push_back(e_.thisptr)
2338+
return c2py(symengine.max(v))
2339+
23072340
def gamma(x):
23082341
cdef Basic X = _sympify(x)
23092342
return c2py(symengine.gamma(X.thisptr))

0 commit comments

Comments
 (0)