Skip to content

Commit 032528d

Browse files
committed
Wrapped Min() Function
1 parent c643d39 commit 032528d

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
@@ -144,6 +144,7 @@ cdef extern from "<symengine/symengine_rcp.h>" namespace "SymEngine":
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
146146
RCP[const Max] rcp_static_cast_Max "SymEngine::rcp_static_cast<const SymEngine::Max>"(RCP[const Basic] &b) nogil
147+
RCP[const Min] rcp_static_cast_Min "SymEngine::rcp_static_cast<const SymEngine::Min>"(RCP[const Basic] &b) nogil
147148
RCP[const Gamma] rcp_static_cast_Gamma "SymEngine::rcp_static_cast<const SymEngine::Gamma>"(RCP[const Basic] &b) nogil
148149
RCP[const Derivative] rcp_static_cast_Derivative "SymEngine::rcp_static_cast<const SymEngine::Derivative>"(RCP[const Basic] &b) nogil
149150
RCP[const Subs] rcp_static_cast_Subs "SymEngine::rcp_static_cast<const SymEngine::Subs>"(RCP[const Basic] &b) nogil
@@ -253,6 +254,7 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
253254
bool is_a_FunctionSymbol "SymEngine::is_a<SymEngine::FunctionSymbol>"(const Basic &b) nogil
254255
bool is_a_Abs "SymEngine::is_a<SymEngine::Abs>"(const Basic &b) nogil
255256
bool is_a_Max "SymEngine::is_a<SymEngine::Max>"(const Basic &b) nogil
257+
bool is_a_Min "SymEngine::is_a<SymEngine::Min>"(const Basic &b) nogil
256258
bool is_a_Gamma "SymEngine::is_a<SymEngine::Gamma>"(const Basic &b) nogil
257259
bool is_a_Derivative "SymEngine::is_a<SymEngine::Derivative>"(const Basic &b) nogil
258260
bool is_a_Subs "SymEngine::is_a<SymEngine::Subs>"(const Basic &b) nogil
@@ -436,6 +438,7 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
436438
cdef RCP[const Basic] function_symbol(string name, const vec_basic &arg) nogil except+
437439
cdef RCP[const Basic] abs(RCP[const Basic] &arg) nogil except+
438440
cdef RCP[const Basic] max(const vec_basic &arg) nogil except+
441+
cdef RCP[const Basic] min(const vec_basic &arg) nogil except+
439442
cdef RCP[const Basic] gamma(RCP[const Basic] &arg) nogil except+
440443
cdef RCP[const Basic] atan2(RCP[const Basic] &num, RCP[const Basic] &den) nogil except+
441444

@@ -545,6 +548,9 @@ cdef extern from "<symengine/functions.h>" namespace "SymEngine":
545548
cdef cppclass Max(Function):
546549
pass
547550

551+
cdef cppclass Min(Function):
552+
pass
553+
548554
cdef cppclass Gamma(Function):
549555
pass
550556

symengine/lib/symengine_wrapper.pxd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ cdef class Abs(Function):
133133
cdef class Max(Function):
134134
pass
135135

136+
cdef class Min(Function):
137+
pass
138+
136139
cdef class Gamma(Function):
137140
pass
138141

symengine/lib/symengine_wrapper.pyx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ cdef c2py(RCP[const symengine.Basic] o):
4747
r = Abs.__new__(Abs)
4848
elif (symengine.is_a_Max(deref(o))):
4949
r = Max.__new__(Max)
50+
elif (symengine.is_a_Min(deref(o))):
51+
r = Min.__new__(Min)
5052
elif (symengine.is_a_Gamma(deref(o))):
5153
r = Gamma.__new__(Gamma)
5254
elif (symengine.is_a_Derivative(deref(o))):
@@ -212,6 +214,8 @@ def sympy2symengine(a, raise_error=False):
212214
return abs(sympy2symengine(a.args[0], raise_error))
213215
elif isinstance(a, sympy.Max):
214216
return max(*a.args)
217+
elif isinstance(a, sympy.Min):
218+
return min(*a.args)
215219
elif isinstance(a, sympy.gamma):
216220
return gamma(a.args[0])
217221
elif isinstance(a, sympy.Derivative):
@@ -1418,6 +1422,28 @@ cdef class Max(Function):
14181422
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
14191423
return sage.max(*s)
14201424

1425+
cdef class Min(Function):
1426+
1427+
def _sympy_(self):
1428+
cdef RCP[const symengine.Min] X = \
1429+
symengine.rcp_static_cast_Min(self.thisptr)
1430+
cdef symengine.vec_basic Y = deref(X).get_args()
1431+
s = []
1432+
for i in range(Y.size()):
1433+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sympy_())
1434+
import sympy
1435+
return sympy.Min(*s)
1436+
1437+
def _sage_(self):
1438+
import sage.all as sage
1439+
cdef RCP[const symengine.Min] X = \
1440+
symengine.rcp_static_cast_Min(self.thisptr)
1441+
cdef symengine.vec_basic Y = deref(X).get_args()
1442+
s = []
1443+
for i in range(Y.size()):
1444+
s.append(c2py(<RCP[const symengine.Basic]>(Y[i]))._sage_())
1445+
return sage.min(*s)
1446+
14211447
cdef class Derivative(Basic):
14221448

14231449
@property
@@ -2337,6 +2363,14 @@ def max(*args):
23372363
v.push_back(e_.thisptr)
23382364
return c2py(symengine.max(v))
23392365

2366+
def min(*args):
2367+
cdef symengine.vec_basic v
2368+
cdef Basic e_
2369+
for e in args:
2370+
e_ = sympify(e)
2371+
v.push_back(e_.thisptr)
2372+
return c2py(symengine.min(v))
2373+
23402374
def gamma(x):
23412375
cdef Basic X = _sympify(x)
23422376
return c2py(symengine.gamma(X.thisptr))

0 commit comments

Comments
 (0)