Skip to content

Commit 560bafb

Browse files
authored
Add boostmp to test matrix, also bump llvm version tested. (#428)
* Add boostmp to test matrix, also bump llvm version tested. * handle tribool explicitly (bool -> tribool) * boost: skip test integer_nthroot (does not complete in 6h)
1 parent c24a309 commit 560bafb

File tree

4 files changed

+66
-46
lines changed

4 files changed

+66
-46
lines changed

.github/workflows/ci.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@ jobs:
9090
CC: clang
9191

9292
- BUILD_TYPE: Debug
93-
PYTHON_VERSION: '3.8'
93+
PYTHON_VERSION: '3.10'
9494
WITH_SYMPY: yes
95-
WITH_LLVM: 13
95+
WITH_LLVM: 14
9696
WITH_SCIPY: yes
97-
OS: ubuntu-20.04
98-
EXTRA_APT_REPOSITORY: 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main'
99-
EXTRA_APT_PACKAGES: 'llvm-13'
97+
INTEGER_CLASS: 'boostmp'
98+
PYTEST_ADDOPTS: '-k "not integer_nthroot"'
99+
OS: ubuntu-22.04
100+
EXTRA_APT_REPOSITORY: 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-14 main'
101+
EXTRA_APT_PACKAGES: 'llvm-14'
100102

101103
- BUILD_TYPE: Debug
102104
PYTHON_VERSION: '3.7'
@@ -143,6 +145,7 @@ jobs:
143145
run: |
144146
source bin/test_symengine_unix.sh
145147
env:
148+
PYTEST_ADDOPTS: ${{ matrix.PYTEST_ADDOPTS }}
146149
USE_GLIBCXX_DEBUG: ${{ matrix.USE_GLIBCXX_DEBUG }}
147150
WITH_MPFR: ${{ matrix.WITH_MPFR }}
148151
BUILD_BENCHMARKS: ${{ matrix.BUILD_BENCHMARKS }}

symengine/lib/symengine.pxd

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -350,12 +350,12 @@ cdef extern from "<symengine/number.h>" namespace "SymEngine":
350350
pass
351351
cdef cppclass NumberWrapper(Basic):
352352
pass
353-
cdef int is_zero(const Basic &x) nogil
354-
cdef int is_positive(const Basic &x) nogil
355-
cdef int is_negative(const Basic &x) nogil
356-
cdef int is_nonnegative(const Basic &x) nogil
357-
cdef int is_nonpositive(const Basic &x) nogil
358-
cdef int is_real(const Basic &x) nogil
353+
cdef tribool is_zero(const Basic &x) nogil
354+
cdef tribool is_positive(const Basic &x) nogil
355+
cdef tribool is_negative(const Basic &x) nogil
356+
cdef tribool is_nonnegative(const Basic &x) nogil
357+
cdef tribool is_nonpositive(const Basic &x) nogil
358+
cdef tribool is_real(const Basic &x) nogil
359359

360360
cdef extern from "pywrapper.h" namespace "SymEngine":
361361
cdef cppclass PyNumber(NumberWrapper):
@@ -829,15 +829,15 @@ cdef extern from "<symengine/matrix.h>" namespace "SymEngine":
829829
void row_del(unsigned k) nogil
830830
void col_del(unsigned k) nogil
831831
rcp_const_basic trace() nogil
832-
int is_zero() nogil
833-
int is_real() nogil
834-
int is_diagonal() nogil
835-
int is_symmetric() nogil
836-
int is_hermitian() nogil
837-
int is_weakly_diagonally_dominant() nogil
838-
int is_strictly_diagonally_dominant() nogil
839-
int is_positive_definite() nogil
840-
int is_negative_definite() nogil
832+
tribool is_zero() nogil
833+
tribool is_real() nogil
834+
tribool is_diagonal() nogil
835+
tribool is_symmetric() nogil
836+
tribool is_hermitian() nogil
837+
tribool is_weakly_diagonally_dominant() nogil
838+
tribool is_strictly_diagonally_dominant() nogil
839+
tribool is_positive_definite() nogil
840+
tribool is_negative_definite() nogil
841841

842842
bool is_a_DenseMatrix "SymEngine::is_a<SymEngine::DenseMatrix>"(const MatrixBase &b) nogil
843843
DenseMatrix* static_cast_DenseMatrix "static_cast<SymEngine::DenseMatrix*>"(const MatrixBase *a)
@@ -1104,6 +1104,19 @@ cdef extern from "<symengine/solve.h>" namespace "SymEngine":
11041104
cdef RCP[const Set] solve(rcp_const_basic &f, RCP[const Symbol] &sym, RCP[const Set] &domain) nogil except +
11051105
cdef vec_basic linsolve(const vec_basic &eqs, const vec_sym &syms) nogil except +
11061106

1107+
cdef extern from "symengine/tribool.h" namespace "SymEngine":
1108+
cdef cppclass tribool:
1109+
pass # tribool is an enum class
1110+
1111+
cdef bool is_true(tribool) nogil
1112+
cdef bool is_false(tribool) nogil
1113+
cdef bool is_indeterminate(tribool) nogil
1114+
1115+
cdef extern from "symengine/tribool.h" namespace "SymEngine::tribool":
1116+
cdef tribool indeterminate
1117+
cdef tribool trifalse
1118+
cdef tribool tritrue
1119+
11071120
cdef extern from "<symengine/printers.h>" namespace "SymEngine":
11081121
string ccode(const Basic &x) nogil except +
11091122
string latex(const Basic &x) nogil except +

symengine/lib/symengine_wrapper.pyx

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ cimport symengine
33
from symengine cimport (RCP, pair, map_basic_basic, umap_int_basic,
44
umap_int_basic_iterator, umap_basic_num, umap_basic_num_iterator,
55
rcp_const_basic, std_pair_short_rcp_const_basic,
6-
rcp_const_seriescoeffinterface, CRCPBasic)
6+
rcp_const_seriescoeffinterface, CRCPBasic, tribool, is_indeterminate, is_true, is_false)
77
from libcpp cimport bool as cppbool
88
from libcpp.string cimport string
99
from libcpp.vector cimport vector
@@ -3696,39 +3696,39 @@ cdef class DenseMatrixBase(MatrixBase):
36963696

36973697
@property
36983698
def is_zero_matrix(self):
3699-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_zero())
3699+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_zero())
37003700

37013701
@property
37023702
def is_real_matrix(self):
3703-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_real())
3703+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_real())
37043704

37053705
@property
37063706
def is_diagonal(self):
3707-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_diagonal())
3707+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_diagonal())
37083708

37093709
@property
37103710
def is_symmetric(self):
3711-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_symmetric())
3711+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_symmetric())
37123712

37133713
@property
37143714
def is_hermitian(self):
3715-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_hermitian())
3715+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_hermitian())
37163716

37173717
@property
37183718
def is_weakly_diagonally_dominant(self):
3719-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_weakly_diagonally_dominant())
3719+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_weakly_diagonally_dominant())
37203720

37213721
@property
37223722
def is_strongly_diagonally_dominant(self):
3723-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_strictly_diagonally_dominant())
3723+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_strictly_diagonally_dominant())
37243724

37253725
@property
37263726
def is_positive_definite(self):
3727-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_positive_definite())
3727+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_positive_definite())
37283728

37293729
@property
37303730
def is_negative_definite(self):
3731-
return tribool(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_negative_definite())
3731+
return tribool_py(deref(symengine.static_cast_DenseMatrix(self.thisptr)).is_negative_definite())
37323732

37333733
@property
37343734
def T(self):
@@ -5347,47 +5347,51 @@ def contains(expr, sset):
53475347
return c2py(<rcp_const_basic>(symengine.contains(expr_.thisptr, s)))
53485348

53495349

5350-
def tribool(value):
5351-
if value == -1:
5350+
cdef tribool_py(tribool value):
5351+
if is_indeterminate(value):
53525352
return None
5353+
elif is_true(value):
5354+
return True
5355+
elif is_false(value):
5356+
return False
53535357
else:
5354-
return bool(value)
5358+
raise RuntimeError("Internal error in symengine.py, tribool got a fourth value.")
53555359

53565360

53575361
def is_zero(expr):
53585362
cdef Basic expr_ = sympify(expr)
5359-
cdef int tbool = symengine.is_zero(deref(expr_.thisptr))
5360-
return tribool(tbool)
5363+
cdef tribool tbool = symengine.is_zero(deref(expr_.thisptr))
5364+
return tribool_py(tbool)
53615365

53625366

53635367
def is_positive(expr):
53645368
cdef Basic expr_ = sympify(expr)
5365-
cdef int tbool = symengine.is_positive(deref(expr_.thisptr))
5366-
return tribool(tbool)
5369+
cdef tribool tbool = symengine.is_positive(deref(expr_.thisptr))
5370+
return tribool_py(tbool)
53675371

53685372

53695373
def is_negative(expr):
53705374
cdef Basic expr_ = sympify(expr)
5371-
cdef int tbool = symengine.is_negative(deref(expr_.thisptr))
5372-
return tribool(tbool)
5375+
cdef tribool tbool = symengine.is_negative(deref(expr_.thisptr))
5376+
return tribool_py(tbool)
53735377

53745378

53755379
def is_nonpositive(expr):
53765380
cdef Basic expr_ = sympify(expr)
5377-
cdef int tbool = symengine.is_nonpositive(deref(expr_.thisptr))
5378-
return tribool(tbool)
5381+
cdef tribool tbool = symengine.is_nonpositive(deref(expr_.thisptr))
5382+
return tribool_py(tbool)
53795383

53805384

53815385
def is_nonnegative(expr):
53825386
cdef Basic expr_ = sympify(expr)
5383-
cdef int tbool = symengine.is_nonnegative(deref(expr_.thisptr))
5384-
return tribool(tbool)
5387+
cdef tribool tbool = symengine.is_nonnegative(deref(expr_.thisptr))
5388+
return tribool_py(tbool)
53855389

53865390

53875391
def is_real(expr):
53885392
cdef Basic expr_ = sympify(expr)
5389-
cdef int tbool = symengine.is_real(deref(expr_.thisptr))
5390-
return tribool(tbool)
5393+
cdef tribool tbool = symengine.is_real(deref(expr_.thisptr))
5394+
return tribool_py(tbool)
53915395

53925396

53935397
def set_union(*args):

symengine_version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5a9d4fa8c769b2dc8d7904ec16d7ea76328c4565
1+
fcef5c7d6cc848e3f6c0b9ecc5a22d30e5e98f99

0 commit comments

Comments
 (0)