|
1 | 1 | from cython.operator cimport dereference as deref, preincrement as inc
|
2 | 2 | cimport symengine
|
3 |
| -from symengine cimport RCP, pair, map_basic_basic, umap_int_basic, umap_int_basic_iterator, umap_basic_num, umap_basic_num_iterator, rcp_const_basic, std_pair_short_rcp_const_basic, rcp_const_seriescoeffinterface |
| 3 | +from symengine cimport (RCP, pair, map_basic_basic, umap_int_basic, |
| 4 | + umap_int_basic_iterator, umap_basic_num, umap_basic_num_iterator, |
| 5 | + rcp_const_basic, std_pair_short_rcp_const_basic, |
| 6 | + rcp_const_seriescoeffinterface) |
4 | 7 | from libcpp cimport bool as cppbool
|
5 | 8 | from libcpp.string cimport string
|
6 | 9 | from libcpp.vector cimport vector
|
@@ -751,10 +754,24 @@ def get_dict(*args):
|
751 | 754 |
|
752 | 755 |
|
753 | 756 | cdef tuple vec_basic_to_tuple(symengine.vec_basic& vec):
|
| 757 | + return tuple(vec_basic_to_list(vec)) |
| 758 | + |
| 759 | + |
| 760 | +cdef list vec_basic_to_list(symengine.vec_basic& vec): |
754 | 761 | result = []
|
755 | 762 | for i in range(vec.size()):
|
756 | 763 | result.append(c2py(<RCP[const symengine.Basic]>(vec[i])))
|
757 |
| - return tuple(result) |
| 764 | + return result |
| 765 | + |
| 766 | + |
| 767 | +cdef list vec_pair_to_list(symengine.vec_pair& vec): |
| 768 | + result = [] |
| 769 | + cdef RCP[const symengine.Basic] a, b |
| 770 | + for i in range(vec.size()): |
| 771 | + a = <RCP[const symengine.Basic]>vec[i].first |
| 772 | + b = <RCP[const symengine.Basic]>vec[i].second |
| 773 | + result.append((c2py(a), c2py(b))) |
| 774 | + return result |
758 | 775 |
|
759 | 776 |
|
760 | 777 | cdef class Basic(object):
|
@@ -4789,5 +4806,17 @@ def solve(f, sym, domain=None):
|
4789 | 4806 | return c2py(<RCP[const symengine.Basic]>(symengine.solve(f_.thisptr, x, d)))
|
4790 | 4807 |
|
4791 | 4808 |
|
| 4809 | +def cse(exprs): |
| 4810 | + cdef symengine.vec_basic vec |
| 4811 | + cdef symengine.vec_pair replacements |
| 4812 | + cdef symengine.vec_basic reduced_exprs |
| 4813 | + cdef Basic b |
| 4814 | + for expr in exprs: |
| 4815 | + b = sympify(expr) |
| 4816 | + vec.push_back(b.thisptr) |
| 4817 | + symengine.cse(replacements, reduced_exprs, vec) |
| 4818 | + return (vec_pair_to_list(replacements), vec_basic_to_list(reduced_exprs)) |
| 4819 | + |
| 4820 | + |
4792 | 4821 | # Turn on nice stacktraces:
|
4793 | 4822 | symengine.print_stack_on_segfault()
|
0 commit comments