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