Skip to content

Commit 402d955

Browse files
committed
lambdify accepts kwargs and lambdadouble rejects opt_level
1 parent 8909cff commit 402d955

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

symengine/lib/symengine_wrapper.pxd

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ cdef class _Lambdify(object):
3737
cdef vector[int] accum_out_sizes
3838
cdef object numpy_dtype
3939

40-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level)
40+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse)
4141
cdef _load(self, const string &s)
4242
cpdef unsafe_real(self,
4343
double[::1] inp, double[::1] out,
@@ -50,16 +50,17 @@ cdef class _Lambdify(object):
5050
cdef class LambdaDouble(_Lambdify):
5151
cdef vector[symengine.LambdaRealDoubleVisitor] lambda_double
5252
cdef vector[symengine.LambdaComplexDoubleVisitor] lambda_double_complex
53-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level)
53+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse)
5454
cpdef unsafe_real(self, double[::1] inp, double[::1] out, int inp_offset=*, int out_offset=*)
5555
cpdef unsafe_complex(self, double complex[::1] inp, double complex[::1] out, int inp_offset=*, int out_offset=*)
5656
cpdef as_scipy_low_level_callable(self)
5757
cpdef as_ctypes(self)
5858

5959
IF HAVE_SYMENGINE_LLVM:
6060
cdef class LLVMDouble(_Lambdify):
61+
cdef int opt_level
6162
cdef vector[symengine.LLVMDoubleVisitor] lambda_double
62-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level)
63+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse)
6364
cdef _load(self, const string &s)
6465
cpdef unsafe_real(self, double[::1] inp, double[::1] out, int inp_offset=*, int out_offset=*)
6566
cpdef as_scipy_low_level_callable(self)

symengine/lib/symengine_wrapper.pyx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4469,7 +4469,7 @@ def has_symbol(obj, symbol=None):
44694469

44704470

44714471
cdef class _Lambdify(object):
4472-
def __init__(self, args, *exprs, cppbool real=True, order='C', cppbool cse=False, cppbool _load=False, int opt_level=3):
4472+
def __init__(self, args, *exprs, cppbool real=True, order='C', cppbool cse=False, cppbool _load=False, **kwargs):
44734473
cdef:
44744474
Basic e_
44754475
size_t ri, ci, nr, nc
@@ -4516,9 +4516,9 @@ cdef class _Lambdify(object):
45164516
for e in np.ravel(curr_expr, order=self.order):
45174517
e_ = _sympify(e)
45184518
outs_.push_back(e_.thisptr)
4519-
self._init(args_, outs_, cse, opt_level)
4519+
self._init(args_, outs_, cse)
45204520

4521-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level):
4521+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse):
45224522
raise ValueError("Not supported")
45234523

45244524
cdef _load(self, const string &s):
@@ -4706,7 +4706,11 @@ def create_low_level_callable(lambdify, *args):
47064706

47074707

47084708
cdef class LambdaDouble(_Lambdify):
4709-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level):
4709+
def __cinit__(self, args, *exprs, cppbool real=True, order='C', cppbool cse=False, cppbool _load=False):
4710+
# reject additional arguments
4711+
pass
4712+
4713+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse):
47104714
if self.real:
47114715
self.lambda_double.resize(1)
47124716
self.lambda_double[0].init(args_, outs_, cse)
@@ -4751,9 +4755,12 @@ cdef class LambdaDouble(_Lambdify):
47514755

47524756
IF HAVE_SYMENGINE_LLVM:
47534757
cdef class LLVMDouble(_Lambdify):
4754-
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse, int opt_level):
4758+
def __cinit__(self, args, *exprs, cppbool real=True, order='C', cppbool cse=False, cppbool _load=False, opt_level=0):
4759+
self.opt_level = opt_level
4760+
4761+
cdef _init(self, symengine.vec_basic& args_, symengine.vec_basic& outs_, cppbool cse):
47554762
self.lambda_double.resize(1)
4756-
self.lambda_double[0].init(args_, outs_, cse, opt_level)
4763+
self.lambda_double[0].init(args_, outs_, cse, self.opt_level)
47574764

47584765
cdef _load(self, const string &s):
47594766
self.lambda_double.resize(1)
@@ -4801,7 +4808,7 @@ IF HAVE_SYMENGINE_LLVM:
48014808
def llvm_loading_func(*args):
48024809
return LLVMDouble(args, _load=True)
48034810

4804-
def Lambdify(args, *exprs, cppbool real=True, backend=None, order='C', as_scipy=False, cse=False, opt_level=3):
4811+
def Lambdify(args, *exprs, cppbool real=True, backend=None, order='C', as_scipy=False, cse=False, **kwargs):
48054812
"""
48064813
Lambdify instances are callbacks that numerically evaluate their symbolic
48074814
expressions from user provided input (real or complex) into (possibly user
@@ -4851,7 +4858,7 @@ def Lambdify(args, *exprs, cppbool real=True, backend=None, order='C', as_scipy=
48514858
backend = os.getenv('SYMENGINE_LAMBDIFY_BACKEND', "lambda")
48524859
if backend == "llvm":
48534860
IF HAVE_SYMENGINE_LLVM:
4854-
ret = LLVMDouble(args, *exprs, real=real, order=order, cse=cse, opt_level=opt_level)
4861+
ret = LLVMDouble(args, *exprs, real=real, order=order, cse=cse, **kwargs)
48554862
if as_scipy:
48564863
return ret.as_scipy_low_level_callable()
48574864
return ret
@@ -4862,7 +4869,7 @@ def Lambdify(args, *exprs, cppbool real=True, backend=None, order='C', as_scipy=
48624869
pass
48634870
else:
48644871
warnings.warn("Unknown SymEngine backend: %s\nUsing backend='lambda'" % backend)
4865-
ret = LambdaDouble(args, *exprs, real=real, order=order, cse=cse)
4872+
ret = LambdaDouble(args, *exprs, real=real, order=order, cse=cse, **kwargs)
48664873
if as_scipy:
48674874
return ret.as_scipy_low_level_callable()
48684875
return ret

0 commit comments

Comments
 (0)