@@ -235,6 +235,10 @@ cdef object c2py(rcp_const_basic o):
235
235
r = Set.__new__ (Interval)
236
236
elif (symengine.is_a_EmptySet(deref(o))):
237
237
r = Set.__new__ (EmptySet)
238
+ elif (symengine.is_a_Reals(deref(o))):
239
+ r = Set.__new__ (Reals)
240
+ elif (symengine.is_a_Integers(deref(o))):
241
+ r = Set.__new__ (Integers)
238
242
elif (symengine.is_a_UniversalSet(deref(o))):
239
243
r = Set.__new__ (UniversalSet)
240
244
elif (symengine.is_a_FiniteSet(deref(o))):
@@ -443,12 +447,16 @@ def sympy2symengine(a, raise_error=False):
443
447
return function_symbol(name, * (a.args))
444
448
elif isinstance (a, (sympy.Piecewise)):
445
449
return piecewise(* (a.args))
450
+ elif a is sympy.S.Reals:
451
+ return S.Reals
452
+ elif a is sympy.S.Integers:
453
+ return S.Integers
446
454
elif isinstance (a, sympy.Interval):
447
455
return interval(* (a.args))
448
456
elif a is sympy.S.EmptySet:
449
- return emptyset()
457
+ return S.EmptySet
450
458
elif a is sympy.S.UniversalSet:
451
- return universalset()
459
+ return S.UniversalSet
452
460
elif isinstance (a, sympy.FiniteSet):
453
461
return finiteset(* (a.args))
454
462
elif isinstance (a, sympy.Contains):
@@ -649,6 +657,22 @@ class Singleton(object):
649
657
def false (self ):
650
658
return false
651
659
660
+ @property
661
+ def EmptySet (self ):
662
+ return empty_set_singleton
663
+
664
+ @property
665
+ def UniversalSet (self ):
666
+ return universal_set_singleton
667
+
668
+ @property
669
+ def Integers (self ):
670
+ return integers_singleton
671
+
672
+ @property
673
+ def Reals (self ):
674
+ return reals_singleton
675
+
652
676
S = Singleton()
653
677
654
678
@@ -1044,6 +1068,30 @@ cdef class Basic(object):
1044
1068
def is_Matrix (self ):
1045
1069
return False
1046
1070
1071
+ @property
1072
+ def is_zero (self ):
1073
+ return is_zero(self )
1074
+
1075
+ @property
1076
+ def is_positive (self ):
1077
+ return is_positive(self )
1078
+
1079
+ @property
1080
+ def is_negative (self ):
1081
+ return is_negative(self )
1082
+
1083
+ @property
1084
+ def is_nonpositive (self ):
1085
+ return is_nonpositive(self )
1086
+
1087
+ @property
1088
+ def is_nonnegative (self ):
1089
+ return is_nonnegative(self )
1090
+
1091
+ @property
1092
+ def is_real (self ):
1093
+ return is_real(self )
1094
+
1047
1095
def copy (self ):
1048
1096
return self
1049
1097
@@ -1575,10 +1623,6 @@ cdef class Number(Expr):
1575
1623
def is_negative (Basic self ):
1576
1624
return deref(symengine.rcp_static_cast_Number(self .thisptr)).is_negative()
1577
1625
1578
- @property
1579
- def is_zero (Basic self ):
1580
- return deref(symengine.rcp_static_cast_Number(self .thisptr)).is_zero()
1581
-
1582
1626
@property
1583
1627
def is_nonzero (self ):
1584
1628
return not (self .is_complex or self .is_zero)
@@ -2962,6 +3006,34 @@ class EmptySet(Set):
2962
3006
return self .__class__
2963
3007
2964
3008
3009
+ class Reals (Set ):
3010
+
3011
+ def __new__ (self ):
3012
+ return reals()
3013
+
3014
+ def _sympy_ (self ):
3015
+ import sympy
3016
+ return sympy.S.Reals
3017
+
3018
+ @property
3019
+ def func (self ):
3020
+ return self .__class__
3021
+
3022
+
3023
+ class Integers (Set ):
3024
+
3025
+ def __new__ (self ):
3026
+ return integers()
3027
+
3028
+ def _sympy_ (self ):
3029
+ import sympy
3030
+ return sympy.S.Integers
3031
+
3032
+ @property
3033
+ def func (self ):
3034
+ return self .__class__
3035
+
3036
+
2965
3037
class UniversalSet (Set ):
2966
3038
2967
3039
def __new__ (self ):
@@ -3381,7 +3453,7 @@ cdef class DenseMatrixBase(MatrixBase):
3381
3453
3382
3454
@property
3383
3455
def is_square (self ):
3384
- return self .rows == self .cols
3456
+ return deref( self .thisptr).is_square()
3385
3457
3386
3458
def nrows (self ):
3387
3459
return deref(self .thisptr).nrows()
@@ -3487,6 +3559,12 @@ cdef class DenseMatrixBase(MatrixBase):
3487
3559
deref(self .thisptr).mul_matrix(deref(A_.thisptr), deref(result.thisptr))
3488
3560
return result
3489
3561
3562
+ def multiply_elementwise (self , A ):
3563
+ cdef MatrixBase A_ = sympify(A)
3564
+ cdef DenseMatrixBase result = self .__class__ (self .nrows(), self .ncols())
3565
+ deref(self .thisptr).elementwise_mul_matrix(deref(A_.thisptr), deref(result.thisptr))
3566
+ return result
3567
+
3490
3568
def add_scalar (self , k ):
3491
3569
cdef Basic k_ = sympify(k)
3492
3570
cdef DenseMatrixBase result = self .__class__ (self .nrows(), self .ncols())
@@ -3504,6 +3582,51 @@ cdef class DenseMatrixBase(MatrixBase):
3504
3582
deref(self .thisptr).transpose(deref(result.thisptr))
3505
3583
return result
3506
3584
3585
+ def conjugate (self ):
3586
+ cdef DenseMatrixBase result = self .__class__ (self .nrows(), self .ncols())
3587
+ deref(self .thisptr).conjugate(deref(result.thisptr))
3588
+ return result
3589
+
3590
+ def conjugate_transpose (self ):
3591
+ cdef DenseMatrixBase result = self .__class__ (self .nrows(), self .ncols())
3592
+ deref(self .thisptr).conjugate_transpose(deref(result.thisptr))
3593
+ return result
3594
+
3595
+ @property
3596
+ def H (self ):
3597
+ return self .conjugate_transpose()
3598
+
3599
+ def trace (self ):
3600
+ return c2py(deref(symengine.static_cast_DenseMatrix(self .thisptr)).trace())
3601
+
3602
+ @property
3603
+ def is_zero_matrix (self ):
3604
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_zero())
3605
+
3606
+ @property
3607
+ def is_real_matrix (self ):
3608
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_real())
3609
+
3610
+ @property
3611
+ def is_diagonal (self ):
3612
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_diagonal())
3613
+
3614
+ @property
3615
+ def is_symmetric (self ):
3616
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_symmetric())
3617
+
3618
+ @property
3619
+ def is_hermitian (self ):
3620
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_hermitian())
3621
+
3622
+ @property
3623
+ def is_weakly_diagonally_dominant (self ):
3624
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_weakly_diagonally_dominant())
3625
+
3626
+ @property
3627
+ def is_strongly_diagonally_dominant (self ):
3628
+ return tribool(deref(symengine.static_cast_DenseMatrix(self .thisptr)).is_strictly_diagonally_dominant())
3629
+
3507
3630
@property
3508
3631
def T (self ):
3509
3632
return self .transpose()
@@ -5050,6 +5173,14 @@ def universalset():
5050
5173
return c2py(< rcp_const_basic> (symengine.universalset()))
5051
5174
5052
5175
5176
+ def reals ():
5177
+ return c2py(< rcp_const_basic> (symengine.reals()))
5178
+
5179
+
5180
+ def integers ():
5181
+ return c2py(< rcp_const_basic> (symengine.integers()))
5182
+
5183
+
5053
5184
def finiteset (*args ):
5054
5185
cdef symengine.set_basic s
5055
5186
cdef Basic e_
@@ -5066,6 +5197,49 @@ def contains(expr, sset):
5066
5197
return c2py(< rcp_const_basic> (symengine.contains(expr_.thisptr, s)))
5067
5198
5068
5199
5200
+ def tribool (value ):
5201
+ if value == - 1 :
5202
+ return None
5203
+ else :
5204
+ return bool (value)
5205
+
5206
+
5207
+ def is_zero (expr ):
5208
+ cdef Basic expr_ = sympify(expr)
5209
+ cdef int tbool = symengine.is_zero(deref(expr_.thisptr))
5210
+ return tribool(tbool)
5211
+
5212
+
5213
+ def is_positive (expr ):
5214
+ cdef Basic expr_ = sympify(expr)
5215
+ cdef int tbool = symengine.is_positive(deref(expr_.thisptr))
5216
+ return tribool(tbool)
5217
+
5218
+
5219
+ def is_negative (expr ):
5220
+ cdef Basic expr_ = sympify(expr)
5221
+ cdef int tbool = symengine.is_negative(deref(expr_.thisptr))
5222
+ return tribool(tbool)
5223
+
5224
+
5225
+ def is_nonpositive (expr ):
5226
+ cdef Basic expr_ = sympify(expr)
5227
+ cdef int tbool = symengine.is_nonpositive(deref(expr_.thisptr))
5228
+ return tribool(tbool)
5229
+
5230
+
5231
+ def is_nonnegative (expr ):
5232
+ cdef Basic expr_ = sympify(expr)
5233
+ cdef int tbool = symengine.is_nonnegative(deref(expr_.thisptr))
5234
+ return tribool(tbool)
5235
+
5236
+
5237
+ def is_real (expr ):
5238
+ cdef Basic expr_ = sympify(expr)
5239
+ cdef int tbool = symengine.is_real(deref(expr_.thisptr))
5240
+ return tribool(tbool)
5241
+
5242
+
5069
5243
def set_union (*args ):
5070
5244
cdef symengine.set_set s
5071
5245
cdef Set e_
@@ -5115,6 +5289,12 @@ def imageset(sym, expr, base):
5115
5289
return c2py(< rcp_const_basic> (symengine.imageset(sym_.thisptr, expr_.thisptr, b)))
5116
5290
5117
5291
5292
+ universal_set_singleton = UniversalSet()
5293
+ integers_singleton = Integers()
5294
+ reals_singleton = Reals()
5295
+ empty_set_singleton = EmptySet()
5296
+
5297
+
5118
5298
def solve (f , sym , domain = None ):
5119
5299
cdef Basic f_ = sympify(f)
5120
5300
cdef Basic sym_ = sympify(sym)
0 commit comments