@@ -46,9 +46,9 @@ cdef c2py(RCP[const symengine.Basic] o):
46
46
elif (symengine.is_a_Abs(deref(o))):
47
47
r = Abs.__new__ (Abs)
48
48
elif (symengine.is_a_Max(deref(o))):
49
- r = _Max .__new__ (_Max )
49
+ r = Max .__new__ (Max )
50
50
elif (symengine.is_a_Min(deref(o))):
51
- r = _Min .__new__ (_Min )
51
+ r = Min .__new__ (Min )
52
52
elif (symengine.is_a_Gamma(deref(o))):
53
53
r = Gamma.__new__ (Gamma)
54
54
elif (symengine.is_a_Derivative(deref(o))):
@@ -662,6 +662,20 @@ cdef class Basic(object):
662
662
def has (self , *symbols ):
663
663
return any ([has_symbol(self , symbol) for symbol in symbols])
664
664
665
+ def args_as_sage (Basic self ):
666
+ cdef symengine.vec_basic Y = deref(self .thisptr).get_args()
667
+ s = []
668
+ for i in range (Y.size()):
669
+ s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sage_())
670
+ return s
671
+
672
+ def args_as_sympy (Basic self ):
673
+ cdef symengine.vec_basic Y = deref(self .thisptr).get_args()
674
+ s = []
675
+ for i in range (Y.size()):
676
+ s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sympy_())
677
+ return s
678
+
665
679
def series (ex , x = None , x0 = 0 , n = 6 , as_deg_coef_pair = False ):
666
680
# TODO: check for x0 an infinity, see sympy/core/expr.py
667
681
# TODO: nonzero x0
@@ -1400,58 +1414,43 @@ cdef class Abs(Function):
1400
1414
arg = c2py(deref(X).get_arg())._sage_()
1401
1415
return abs (arg)
1402
1416
1403
- cdef class _Max(Function):
1404
- '''
1405
- Class named as such to prevent namespace issues with
1406
- Python's min. Import as Min for aesthetics.
1407
- '''
1417
+
1418
+ class Max (Function ):
1419
+
1420
+ def __new__ (cls , *args ):
1421
+ if not args:
1422
+ return super (Max, cls ).__new__(cls )
1423
+ return _max(* args)
1408
1424
1409
1425
def _sympy_ (self ):
1410
- cdef RCP[const symengine.Max] X = \
1411
- symengine.rcp_static_cast_Max(self .thisptr)
1412
- cdef symengine.vec_basic Y = deref(X).get_args()
1413
- s = []
1414
- for i in range (Y.size()):
1415
- s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sympy_())
1416
1426
import sympy
1427
+ s = self .args_as_sympy()
1417
1428
return sympy.Max(* s)
1418
1429
1419
1430
def _sage_ (self ):
1420
1431
import sage.all as sage
1421
- cdef RCP[const symengine.Max] X = \
1422
- symengine.rcp_static_cast_Max(self .thisptr)
1423
- cdef symengine.vec_basic Y = deref(X).get_args()
1424
- s = []
1425
- for i in range (Y.size()):
1426
- s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sage_())
1432
+ s = self .args_as_sage()
1427
1433
return sage.max(* s)
1428
1434
1429
- cdef class _Min(Function):
1430
- '''
1431
- Class named as such to prevent namespace issues with
1432
- Python's min. Import as Min for aesthetics.
1433
- '''
1435
+
1436
+ class Min (Function ):
1437
+
1438
+ def __new__ (cls , *args ):
1439
+ if not args:
1440
+ return super (Min, cls ).__new__(cls )
1441
+ return _min(* args)
1434
1442
1435
1443
def _sympy_ (self ):
1436
- cdef RCP[const symengine.Min] X = \
1437
- symengine.rcp_static_cast_Min(self .thisptr)
1438
- cdef symengine.vec_basic Y = deref(X).get_args()
1439
- s = []
1440
- for i in range (Y.size()):
1441
- s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sympy_())
1442
1444
import sympy
1445
+ s = self .args_as_sympy()
1443
1446
return sympy.Min(* s)
1444
1447
1445
1448
def _sage_ (self ):
1446
1449
import sage.all as sage
1447
- cdef RCP[const symengine.Min] X = \
1448
- symengine.rcp_static_cast_Min(self .thisptr)
1449
- cdef symengine.vec_basic Y = deref(X).get_args()
1450
- s = []
1451
- for i in range (Y.size()):
1452
- s.append(c2py(< RCP[const symengine.Basic]> (Y[i]))._sage_())
1450
+ s = self .args_as_sage()
1453
1451
return sage.min(* s)
1454
1452
1453
+
1455
1454
cdef class Derivative(Basic):
1456
1455
1457
1456
@property
0 commit comments