3#define CPYCPPYY_INTERNAL 1
5#undef CPYCPPYY_INTERNAL
43 static bool isInitialized =
false;
47 if (!Py_IsInitialized()) {
49#if PY_VERSION_HEX < 0x03020000
52#if PY_VERSION_HEX < 0x03080000
56 PyConfig_InitPythonConfig(&config);
57 PyConfig_SetString(&config, &config.program_name, L
"cppyy");
58 Py_InitializeFromConfig(&config);
60#if PY_VERSION_HEX >= 0x03020000
61#if PY_VERSION_HEX < 0x03090000
67 if (!Py_IsInitialized()) {
69 std::cerr <<
"Error: python has not been initialized; returning." << std::endl;
74#if PY_VERSION_HEX < 0x03000000
75 char* argv[] = {
const_cast<char*
>(
"cppyy")};
76#elif PY_VERSION_HEX < 0x03080000
77 wchar_t* argv[] = {
const_cast<wchar_t*
>(
L"cppyy")};
79#if PY_VERSION_HEX < 0x03080000
80 PySys_SetArgv(
sizeof(argv)/
sizeof(argv[0]), argv);
84 PyRun_SimpleString(
const_cast<char*
>(
"import cppyy"));
90 PyImport_AddModule(
const_cast<char*
>(
"__main__")));
109 PyErr_SetString(PyExc_TypeError,
"Instance_GetScopedFinalName : object is not a C++ instance");
134 void* addr,
const std::string& classname,
bool python_owns)
237 return (
bool)PySequence_Check(pyobject);
241 PyTypeObject* t =
Py_TYPE(pyobject);
242 if (!t->tp_as_sequence || !t->tp_as_sequence->sq_item)
246 if (t->tp_as_sequence->sq_item ==
CPPInstance_Type.tp_as_sequence->sq_item) {
308 PyObject* mod = PyImport_ImportModule(mod_name.c_str());
316 PyModule_AddObject(
gThisModule, mod_name.c_str(), mod);
322 PyObject* dct = PyModule_GetDict(mod);
325 PyObject* values = PyDict_Values(dct);
326 for (
int i = 0; i < PyList_GET_SIZE(values); ++i) {
327 PyObject* value = PyList_GET_ITEM(values, i);
334 if (PyErr_Occurred())
338 std::string fullname = mod_name;
342 Py_XDECREF(pyClName);
351 if (PyErr_Occurred())
369 std::cerr <<
"Error: no file name specified." << std::endl;
373 FILE* fp = fopen(
name.c_str(),
"r");
375 std::cerr <<
"Error: could not open file \"" <<
name <<
"\"." << std::endl;
380 PyObject* oldargv = PySys_GetObject(
"argv");
382 PyObject* copy = PyList_GetSlice(oldargv, 0, PyList_Size(oldargv));
389 const int argc = (
int)args.size() + 1;
390 std::vector<wchar_t*> wargv(argc);
392 wargv[0] = Py_DecodeLocale(
name.c_str(),
nullptr);
394 for (
int i = 1; i < argc; ++i) {
395 wargv[i] = Py_DecodeLocale(args[i - 1].c_str(),
nullptr);
399 PyObject* sysmod = PyImport_ImportModule(
"sys");
401 PyObject* argv_obj = PyList_New(argc);
402 for (
int i = 0; i < argc; ++i) {
403 PyList_SET_ITEM(argv_obj, i, PyUnicode_FromWideChar(wargv[i], -1));
405 PyObject_SetAttrString(sysmod,
"argv", argv_obj);
415 PyRun_FileEx(fp,
const_cast<char*
>(
name.c_str()), Py_file_input, gbl, gbl, 1);
425 PySys_SetObject(
"argv", oldargv);
430 for (
auto ptr : wargv)
463 PyRun_InteractiveLoop(stdin,
const_cast<char*
>(
"\0"));
#define CPyCppyy_PyText_AsString
static PyObject * gMainDict
static PyCFunction & ReduceMethod()
PyTypeObject CPPInstance_Type
CPYCPPYY_EXTERN bool Instance_CheckExact(PyObject *pyobject)
CPYCPPYY_EXTERN void Prompt()
CPYCPPYY_EXTERN bool Overload_Check(PyObject *pyobject)
CPYCPPYY_EXTERN bool Overload_CheckExact(PyObject *pyobject)
CPYCPPYY_EXTERN bool Import(const std::string &name)
CPYCPPYY_EXTERN void ExecScript(const std::string &name, const std::vector< std::string > &args)
CPYCPPYY_EXTERN bool Instance_IsLively(PyObject *pyobject)
PyObject * BindCppObjectNoCast(Cppyy::TCppObject_t object, Cppyy::TCppType_t klass, const unsigned flags=0)
bool CPPOverload_Check(T *object)
CPYCPPYY_EXTERN bool Sequence_Check(PyObject *pyobject)
bool CPPScope_Check(T *object)
CPYCPPYY_EXTERN bool Instance_Check(PyObject *pyobject)
CPYCPPYY_EXTERN PyObject * Instance_FromVoidPtr(void *addr, const std::string &classname, bool python_owns=false)
CPYCPPYY_EXTERN bool Scope_CheckExact(PyObject *pyobject)
bool CPPInstance_Check(T *object)
bool CPPInstance_CheckExact(T *object)
CPYCPPYY_EXTERN void Instance_SetCppOwns(PyObject *pyobject)
CPYCPPYY_EXTERN void Instance_SetPythonOwns(PyObject *pyobject)
bool CPPScope_CheckExact(T *object)
CPYCPPYY_EXTERN void Instance_SetReduceMethod(PyCFunction reduceMethod)
CPYCPPYY_EXTERN std::string Instance_GetScopedFinalName(PyObject *pyobject)
CPYCPPYY_EXTERN void * Instance_AsVoidPtr(PyObject *pyobject)
CPYCPPYY_EXTERN bool Scope_Check(PyObject *pyobject)
CPYCPPYY_EXTERN bool Exec(const std::string &cmd)
bool CPPOverload_CheckExact(T *object)
RPY_EXPORTED std::string GetScopedFinalName(TCppType_t type)
RPY_EXPORTED TCppScope_t GetScope(const std::string &scope_name)
RooArgList L(Args_t &&... args)
void Initialize(Bool_t useTMVAStyle=kTRUE)