57 iPyImport_ImportModule,
58 iPyObject_GetAttrString,
70 iPyUnicode_FromString,
71 iPyObject_SetAttrString,
81 iPyDict_SetItemString,
82 iPyDict_GetItemString,
92 Py_single_input = 256,
94 using funcarray = std::array<void*, numfunctions>;
101 explicit PythonAPI(
bool shouldLoadDynamicLib);
109 errc_t tryload(
const std::vector<std::string>& libpaths);
115 bool isLoaded()
const {
return library_ !=
nullptr; }
119 void Py_Initialize();
123 int Py_IsInitialized();
125 int PyRun_SimpleString(
const char* command);
127 PyObject* PyImport_ImportModule(
const char* name);
129 PyObject* PyObject_GetAttrString(PyObject* o,
const char* attr_name);
131 PyObject* PyObject_CallObject(PyObject* callable, PyObject* args);
133 void Py_DecRef(PyObject* o);
135 void Py_IncRef(PyObject* o);
139 PyObject* PyErr_Occurred();
141 const char* PyUnicode_AsUTF8(PyObject* unicode);
145 PyObject* PyRun_String(
const char* str,
int start, PyObject* globals, PyObject* locals);
147 long PyLong_AsLong(PyObject* o);
148 double PyFloat_AsDouble(PyObject* o);
150 PyObject* PyLong_FromLong(
long v);
151 PyObject* PyFloat_FromDouble(
double v);
152 PyObject* PyUnicode_FromString(
const char* u);
153 PyObject* PyBool_FromLong(
long v);
155 PyObject* PyDict_New();
156 int PyDict_SetItemString(PyObject* dict,
const char* key, PyObject* val);
157 PyObject* PyDict_GetItemString(PyObject* dict,
const char* key);
159 int PyObject_SetAttrString(PyObject* o,
const char* attr_name, PyObject* v);
160 int PyObject_IsInstance(PyObject* obj, PyObject* cls);
162 void PyErr_Fetch(PyObject** ptype, PyObject** pvalue, PyObject** ptraceback);
163 PyObject* PyObject_Str(PyObject* o);
166 int PyGILState_Ensure();
167 void PyGILState_Release(
int gstate);
170 PyObject* PyFloat_Type()
const {
return static_cast<PyObject*
>(functions_[iPyFloat_Type]); }
171 PyObject* PyLong_Type()
const {
return static_cast<PyObject*
>(functions_[iPyLong_Type]); }
172 PyObject* PyBool_Type()
const {
return static_cast<PyObject*
>(functions_[iPyBool_Type]); }
173 PyObject* PyUnicode_Type()
const {
return static_cast<PyObject*
>(functions_[iPyUnicode_Type]); }
177 A_DISABLE_COPY(PythonAPI);
180 void* library_{
nullptr};
181 funcarray functions_{};