Skip to content

Commit 62a0d89

Browse files
authored
Merge pull request #319 from Marlin-Na/pycapsule
Pass symengine object with PyCapsule
2 parents 74caf29 + d4115b1 commit 62a0d89

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

symengine/lib/symengine.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,3 +1064,7 @@ cdef extern from "<symengine/solve.h>" namespace "SymEngine":
10641064
cdef extern from "<symengine/printers.h>" namespace "SymEngine":
10651065
string ccode(const Basic &x) nogil except +
10661066
string latex(const Basic &x) nogil except +
1067+
1068+
## Defined in 'symengine/cwrapper.cpp'
1069+
cdef struct CRCPBasic:
1070+
rcp_const_basic m

symengine/lib/symengine_wrapper.pyx

Lines changed: 11 additions & 1 deletion
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)
6+
rcp_const_seriescoeffinterface, CRCPBasic)
77
from libcpp cimport bool as cppbool
88
from libcpp.string cimport string
99
from libcpp.vector cimport vector
@@ -20,6 +20,7 @@ import warnings
2020
from symengine.compatibility import is_sequence
2121
import os
2222
import sys
23+
from cpython.pycapsule cimport PyCapsule_GetPointer
2324

2425
if sys.version_info[0] == 2:
2526
from collections import MutableMapping
@@ -38,6 +39,15 @@ include "config.pxi"
3839
class SympifyError(Exception):
3940
pass
4041

42+
cpdef object capsule_to_basic(object capsule):
43+
cdef CRCPBasic *p = <CRCPBasic*>PyCapsule_GetPointer(capsule, NULL)
44+
return c2py(p.m)
45+
46+
cpdef void assign_to_capsule(object capsule, object value):
47+
cdef CRCPBasic *p_cap = <CRCPBasic*>PyCapsule_GetPointer(capsule, NULL)
48+
cdef Basic v = sympify(value)
49+
p_cap.m = v.thisptr
50+
4151
cdef object c2py(rcp_const_basic o):
4252
cdef Basic r
4353
if (symengine.is_a_Add(deref(o))):

0 commit comments

Comments
 (0)