Skip to content

Commit 4faa340

Browse files
committed
Wrapped Min() Function
1 parent ff76ddf commit 4faa340

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-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 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
145145
RCP[const Max] rcp_static_cast_Max "SymEngine::rcp_static_cast<const SymEngine::Max>"(RCP[const Basic] &b) nogil
146+
RCP[const Min] rcp_static_cast_Min "SymEngine::rcp_static_cast<const SymEngine::Min>"(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
@@ -248,6 +249,7 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
248249
bool is_a_FunctionSymbol "SymEngine::is_a<SymEngine::FunctionSymbol>"(const Basic &b) nogil
249250
bool is_a_Abs "SymEngine::is_a<SymEngine::Abs>"(const Basic &b) nogil
250251
bool is_a_Max "SymEngine::is_a<SymEngine::Max>"(const Basic &b) nogil
252+
bool is_a_Min "SymEngine::is_a<SymEngine::Min>"(const Basic &b) nogil
251253
bool is_a_Gamma "SymEngine::is_a<SymEngine::Gamma>"(const Basic &b) nogil
252254
bool is_a_Derivative "SymEngine::is_a<SymEngine::Derivative>"(const Basic &b) nogil
253255
bool is_a_Subs "SymEngine::is_a<SymEngine::Subs>"(const Basic &b) nogil
@@ -420,6 +422,7 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
420422
cdef RCP[const Basic] function_symbol(string name, const vec_basic &arg) nogil except+
421423
cdef RCP[const Basic] abs(RCP[const Basic] &arg) nogil except+
422424
cdef RCP[const Basic] max(const vec_basic &arg) nogil except+
425+
cdef RCP[const Basic] min(const vec_basic &arg) nogil except+
423426
cdef RCP[const Basic] gamma(RCP[const Basic] &arg) nogil except+
424427
cdef RCP[const Basic] atan2(RCP[const Basic] &num, RCP[const Basic] &den) nogil except+
425428

@@ -517,6 +520,9 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
517520
cdef cppclass Max(Function):
518521
pass
519522

523+
cdef cppclass Min(Function):
524+
pass
525+
520526
cdef cppclass Gamma(Function):
521527
pass
522528

symengine/lib/symengine_wrapper.pxd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ cdef class Abs(Function):
121121
cdef class Max(Function):
122122
pass
123123

124+
cdef class Min(Function):
125+
pass
126+
124127
cdef class Gamma(Function):
125128
pass
126129

symengine/lib/symengine_wrapper.pyx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ cdef c2py(RCP[const symengine.Basic] o):
4545
r = Abs.__new__(Abs)
4646
elif (symengine.is_a_Max(deref(o))):
4747
r = Max.__new__(Max)
48+
elif (symengine.is_a_Min(deref(o))):
49+
r = Min.__new__(Min)
4850
elif (symengine.is_a_Gamma(deref(o))):
4951
r = Gamma.__new__(Gamma)
5052
elif (symengine.is_a_Derivative(deref(o))):
@@ -198,6 +200,8 @@ def sympy2symengine(a, raise_error=False):
198200
return abs(sympy2symengine(a.args[0], raise_error))
199201
elif isinstance(a, sympy.Max):
200202
return max(*a.args)
203+
elif isinstance(a, sympy.Min):
204+
return min(*a.args)
201205
elif isinstance(a, sympy.gamma):
202206
return gamma(a.args[0])
203207
elif isinstance(a, sympy.Derivative):
@@ -1353,6 +1357,28 @@ cdef class Max(Function):
13531357
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
13541358
return sage.max(*s)
13551359

1360+
cdef class Min(Function):
1361+
1362+
def _sympy_(self):
1363+
cdef RCP[const symengine.Min] X = \
1364+
symengine.rcp_static_cast_Min(self.thisptr)
1365+
cdef symengine.vec_basic Y = deref(X).get_args()
1366+
s = []
1367+
for i in range(Y.size()):
1368+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sympy_())
1369+
import sympy
1370+
return sympy.Min(*s)
1371+
1372+
def _sage_(self):
1373+
import sage.all as sage
1374+
cdef RCP[const symengine.Min] X = \
1375+
symengine.rcp_static_cast_Min(self.thisptr)
1376+
cdef symengine.vec_basic Y = deref(X).get_args()
1377+
s = []
1378+
for i in range(Y.size()):
1379+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
1380+
return sage.min(*s)
1381+
13561382
cdef class Derivative(Basic):
13571383

13581384
@property
@@ -2249,6 +2275,14 @@ def max(*args):
22492275
v.push_back(e_.thisptr)
22502276
return c2py(symengine.max(v))
22512277

2278+
def min(*args):
2279+
cdef symengine.vec_basic v
2280+
cdef Basic e_
2281+
for e in args:
2282+
e_ = sympify(e)
2283+
v.push_back(e_.thisptr)
2284+
return c2py(symengine.min(v))
2285+
22522286
def gamma(x):
22532287
cdef Basic X = sympify(x)
22542288
return c2py(symengine.gamma(X.thisptr))

0 commit comments

Comments
 (0)