Skip to content

Commit ff76ddf

Browse files
committed
Wrapped Max() Function
1 parent 78800c4 commit ff76ddf

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
@@ -142,6 +142,7 @@ cdef extern from "<symengine/symengine_rcp.h>" namespace "SymEngine":
142142
RCP[const FunctionSymbol] rcp_static_cast_FunctionSymbol "SymEngine::rcp_static_cast<const SymEngine::FunctionSymbol>"(RCP[const Basic] &b) nogil
143143
RCP[const FunctionWrapper] rcp_static_cast_FunctionWrapper "SymEngine::rcp_static_cast<const SymEngine::FunctionWrapper>"(RCP[const Basic] &b) nogil
144144
RCP[const Abs] rcp_static_cast_Abs "SymEngine::rcp_static_cast<const SymEngine::Abs>"(RCP[const Basic] &b) nogil
145+
RCP[const Max] rcp_static_cast_Max "SymEngine::rcp_static_cast<const SymEngine::Max>"(RCP[const Basic] &b) nogil
145146
RCP[const Gamma] rcp_static_cast_Gamma "SymEngine::rcp_static_cast<const SymEngine::Gamma>"(RCP[const Basic] &b) nogil
146147
RCP[const Derivative] rcp_static_cast_Derivative "SymEngine::rcp_static_cast<const SymEngine::Derivative>"(RCP[const Basic] &b) nogil
147148
RCP[const Subs] rcp_static_cast_Subs "SymEngine::rcp_static_cast<const SymEngine::Subs>"(RCP[const Basic] &b) nogil
@@ -246,6 +247,7 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
246247
bool is_a_ACoth "SymEngine::is_a<SymEngine::ACoth>"(const Basic &b) nogil
247248
bool is_a_FunctionSymbol "SymEngine::is_a<SymEngine::FunctionSymbol>"(const Basic &b) nogil
248249
bool is_a_Abs "SymEngine::is_a<SymEngine::Abs>"(const Basic &b) nogil
250+
bool is_a_Max "SymEngine::is_a<SymEngine::Max>"(const Basic &b) nogil
249251
bool is_a_Gamma "SymEngine::is_a<SymEngine::Gamma>"(const Basic &b) nogil
250252
bool is_a_Derivative "SymEngine::is_a<SymEngine::Derivative>"(const Basic &b) nogil
251253
bool is_a_Subs "SymEngine::is_a<SymEngine::Subs>"(const Basic &b) nogil
@@ -417,6 +419,7 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
417419
cdef RCP[const Basic] acoth(RCP[const Basic] &arg) nogil except+
418420
cdef RCP[const Basic] function_symbol(string name, const vec_basic &arg) nogil except+
419421
cdef RCP[const Basic] abs(RCP[const Basic] &arg) nogil except+
422+
cdef RCP[const Basic] max(const vec_basic &arg) nogil except+
420423
cdef RCP[const Basic] gamma(RCP[const Basic] &arg) nogil except+
421424
cdef RCP[const Basic] atan2(RCP[const Basic] &num, RCP[const Basic] &den) nogil except+
422425

@@ -511,6 +514,9 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
511514
cdef cppclass Abs(Function):
512515
RCP[const Basic] get_arg() nogil
513516

517+
cdef cppclass Max(Function):
518+
pass
519+
514520
cdef cppclass Gamma(Function):
515521
pass
516522

symengine/lib/symengine_wrapper.pxd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ cdef class PyFunction(FunctionSymbol):
118118
cdef class Abs(Function):
119119
pass
120120

121+
cdef class Max(Function):
122+
pass
123+
121124
cdef class Gamma(Function):
122125
pass
123126

symengine/lib/symengine_wrapper.pyx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ cdef c2py(RCP[const symengine.Basic] o):
4343
r = FunctionSymbol.__new__(FunctionSymbol)
4444
elif (symengine.is_a_Abs(deref(o))):
4545
r = Abs.__new__(Abs)
46+
elif (symengine.is_a_Max(deref(o))):
47+
r = Max.__new__(Max)
4648
elif (symengine.is_a_Gamma(deref(o))):
4749
r = Gamma.__new__(Gamma)
4850
elif (symengine.is_a_Derivative(deref(o))):
@@ -194,6 +196,8 @@ def sympy2symengine(a, raise_error=False):
194196
return log(a.args[0])
195197
elif isinstance(a, sympy.Abs):
196198
return abs(sympy2symengine(a.args[0], raise_error))
199+
elif isinstance(a, sympy.Max):
200+
return max(*a.args)
197201
elif isinstance(a, sympy.gamma):
198202
return gamma(a.args[0])
199203
elif isinstance(a, sympy.Derivative):
@@ -1327,6 +1331,27 @@ cdef class Abs(Function):
13271331
arg = c2py(deref(X).get_arg())._sage_()
13281332
return abs(arg)
13291333

1334+
cdef class Max(Function):
1335+
1336+
def _sympy_(self):
1337+
cdef RCP[const symengine.Max] X = \
1338+
symengine.rcp_static_cast_Max(self.thisptr)
1339+
cdef symengine.vec_basic Y = deref(X).get_args()
1340+
s = []
1341+
for i in range(Y.size()):
1342+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sympy_())
1343+
import sympy
1344+
return sympy.Max(*s)
1345+
1346+
def _sage_(self):
1347+
import sage.all as sage
1348+
cdef RCP[const symengine.Max] X = \
1349+
symengine.rcp_static_cast_Max(self.thisptr)
1350+
cdef symengine.vec_basic Y = deref(X).get_args()
1351+
s = []
1352+
for i in range(Y.size()):
1353+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
1354+
return sage.max(*s)
13301355

13311356
cdef class Derivative(Basic):
13321357

@@ -2216,6 +2241,14 @@ def log(x, y = None):
22162241
cdef Basic Y = sympify(y)
22172242
return c2py(symengine.log(X.thisptr, Y.thisptr))
22182243

2244+
def max(*args):
2245+
cdef symengine.vec_basic v
2246+
cdef Basic e_
2247+
for e in args:
2248+
e_ = sympify(e)
2249+
v.push_back(e_.thisptr)
2250+
return c2py(symengine.max(v))
2251+
22192252
def gamma(x):
22202253
cdef Basic X = sympify(x)
22212254
return c2py(symengine.gamma(X.thisptr))

0 commit comments

Comments
 (0)