mirror of https://github.com/exaloop/codon.git
366 lines
16 KiB
Python
366 lines
16 KiB
Python
# Copyright (C) 2022-2023 Exaloop Inc. <https://exaloop.io>
|
|
|
|
from internal.dlopen import *
|
|
|
|
# general
|
|
Py_DecRef = Function[[cobj], NoneType](cobj())
|
|
Py_IncRef = Function[[cobj], NoneType](cobj())
|
|
Py_Initialize = Function[[], NoneType](cobj())
|
|
PyImport_AddModule = Function[[cobj], cobj](cobj())
|
|
PyImport_AddModuleObject = Function[[cobj], cobj](cobj())
|
|
PyImport_ImportModule = Function[[cobj], cobj](cobj())
|
|
PyRun_SimpleString = Function[[cobj], NoneType](cobj())
|
|
PyEval_GetGlobals = Function[[], cobj](cobj())
|
|
PyEval_GetBuiltins = Function[[], cobj](cobj())
|
|
|
|
# conversions
|
|
PyLong_AsLong = Function[[cobj], int](cobj())
|
|
PyLong_FromLong = Function[[int], cobj](cobj())
|
|
PyFloat_AsDouble = Function[[cobj], float](cobj())
|
|
PyFloat_FromDouble = Function[[float], cobj](cobj())
|
|
PyBool_FromLong = Function[[int], cobj](cobj())
|
|
PyBytes_AsString = Function[[cobj], cobj](cobj())
|
|
PyList_New = Function[[int], cobj](cobj())
|
|
PyList_GetItem = Function[[cobj, int], cobj](cobj())
|
|
PyList_SetItem = Function[[cobj, int, cobj], cobj](cobj())
|
|
PyDict_New = Function[[], cobj](cobj())
|
|
PyDict_Next = Function[[cobj, Ptr[int], Ptr[cobj], Ptr[cobj]], int](cobj())
|
|
PyDict_GetItem = Function[[cobj, cobj], cobj](cobj())
|
|
PyDict_SetItem = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PySet_Add = Function[[cobj, cobj], cobj](cobj())
|
|
PySet_New = Function[[cobj], cobj](cobj())
|
|
PyTuple_New = Function[[int], cobj](cobj())
|
|
PyTuple_Size = Function[[cobj], int](cobj())
|
|
PyTuple_GetItem = Function[[cobj, int], cobj](cobj())
|
|
PyTuple_SetItem = Function[[cobj, int, cobj], NoneType](cobj())
|
|
PyUnicode_AsEncodedString = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PyUnicode_DecodeFSDefaultAndSize = Function[[cobj, int], cobj](cobj())
|
|
PyUnicode_FromString = Function[[cobj], cobj](cobj())
|
|
PyComplex_FromDoubles = Function[[float, float], cobj](cobj())
|
|
PyComplex_RealAsDouble = Function[[cobj], float](cobj())
|
|
PyComplex_ImagAsDouble = Function[[cobj], float](cobj())
|
|
PyIter_Next = Function[[cobj], cobj](cobj())
|
|
PySlice_New = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PySlice_Unpack = Function[[cobj, Ptr[int], Ptr[int], Ptr[int]], int](cobj())
|
|
|
|
# number
|
|
PyNumber_Add = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Subtract = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Multiply = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_MatrixMultiply = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_FloorDivide = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_TrueDivide = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Remainder = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Divmod = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Power = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PyNumber_Negative = Function[[cobj], cobj](cobj())
|
|
PyNumber_Positive = Function[[cobj], cobj](cobj())
|
|
PyNumber_Absolute = Function[[cobj], cobj](cobj())
|
|
PyNumber_Invert = Function[[cobj], cobj](cobj())
|
|
PyNumber_Lshift = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Rshift = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_And = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Xor = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Or = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceAdd = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceSubtract = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceMultiply = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceMatrixMultiply = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceFloorDivide = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceTrueDivide = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceRemainder = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlacePower = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceLshift = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceRshift = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceAnd = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceXor = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_InPlaceOr = Function[[cobj, cobj], cobj](cobj())
|
|
PyNumber_Long = Function[[cobj], cobj](cobj())
|
|
PyNumber_Float = Function[[cobj], cobj](cobj())
|
|
PyNumber_Index = Function[[cobj], cobj](cobj())
|
|
|
|
# object
|
|
PyObject_Call = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PyObject_GetAttr = Function[[cobj, cobj], cobj](cobj())
|
|
PyObject_GetAttrString = Function[[cobj, cobj], cobj](cobj())
|
|
PyObject_GetIter = Function[[cobj], cobj](cobj())
|
|
PyObject_HasAttrString = Function[[cobj, cobj], int](cobj())
|
|
PyObject_IsTrue = Function[[cobj], int](cobj())
|
|
PyObject_Length = Function[[cobj], int](cobj())
|
|
PyObject_LengthHint = Function[[cobj, int], int](cobj())
|
|
PyObject_SetAttrString = Function[[cobj, cobj, cobj], cobj](cobj())
|
|
PyObject_Str = Function[[cobj], cobj](cobj())
|
|
PyObject_Repr = Function[[cobj], cobj](cobj())
|
|
PyObject_Hash = Function[[cobj], int](cobj())
|
|
PyObject_GetItem = Function[[cobj, cobj], cobj](cobj())
|
|
PyObject_SetItem = Function[[cobj, cobj, cobj], int](cobj())
|
|
PyObject_DelItem = Function[[cobj, cobj], int](cobj())
|
|
PyObject_RichCompare = Function[[cobj, cobj, i32], cobj](cobj())
|
|
PyObject_IsInstance = Function[[cobj, cobj], i32](cobj())
|
|
|
|
# error handling
|
|
PyErr_Fetch = Function[[Ptr[cobj], Ptr[cobj], Ptr[cobj]], NoneType](cobj())
|
|
PyErr_NormalizeException = Function[[Ptr[cobj], Ptr[cobj], Ptr[cobj]], NoneType](cobj())
|
|
PyErr_SetString = Function[[cobj, cobj], NoneType](cobj())
|
|
|
|
# constants
|
|
Py_None = cobj()
|
|
Py_True = cobj()
|
|
Py_False = cobj()
|
|
Py_LT = 0
|
|
Py_LE = 1
|
|
Py_EQ = 2
|
|
Py_NE = 3
|
|
Py_GT = 4
|
|
Py_GE = 5
|
|
|
|
# exceptions
|
|
PyExc_BaseException = cobj()
|
|
PyExc_Exception = cobj()
|
|
PyExc_NameError = cobj()
|
|
PyExc_OSError = cobj()
|
|
PyExc_IOError = cobj()
|
|
PyExc_ValueError = cobj()
|
|
PyExc_LookupError = cobj()
|
|
PyExc_IndexError = cobj()
|
|
PyExc_KeyError = cobj()
|
|
PyExc_TypeError = cobj()
|
|
PyExc_ArithmeticError = cobj()
|
|
PyExc_ZeroDivisionError = cobj()
|
|
PyExc_OverflowError = cobj()
|
|
PyExc_AttributeError = cobj()
|
|
PyExc_RuntimeError = cobj()
|
|
PyExc_NotImplementedError = cobj()
|
|
PyExc_StopIteration = cobj()
|
|
PyExc_AssertionError = cobj()
|
|
PyExc_SystemExit = cobj()
|
|
|
|
def init_dl_handles(py_handle: cobj):
|
|
global Py_DecRef
|
|
global Py_IncRef
|
|
global Py_Initialize
|
|
global PyImport_AddModule
|
|
global PyImport_AddModuleObject
|
|
global PyImport_ImportModule
|
|
global PyRun_SimpleString
|
|
global PyEval_GetGlobals
|
|
global PyEval_GetBuiltins
|
|
global PyLong_AsLong
|
|
global PyLong_FromLong
|
|
global PyFloat_AsDouble
|
|
global PyFloat_FromDouble
|
|
global PyBool_FromLong
|
|
global PyBytes_AsString
|
|
global PyList_New
|
|
global PyList_GetItem
|
|
global PyList_SetItem
|
|
global PyDict_New
|
|
global PyDict_Next
|
|
global PyDict_GetItem
|
|
global PyDict_SetItem
|
|
global PySet_Add
|
|
global PySet_New
|
|
global PyTuple_New
|
|
global PyTuple_Size
|
|
global PyTuple_GetItem
|
|
global PyTuple_SetItem
|
|
global PyUnicode_AsEncodedString
|
|
global PyUnicode_DecodeFSDefaultAndSize
|
|
global PyUnicode_FromString
|
|
global PyComplex_FromDoubles
|
|
global PyComplex_RealAsDouble
|
|
global PyComplex_ImagAsDouble
|
|
global PyIter_Next
|
|
global PySlice_New
|
|
global PySlice_Unpack
|
|
global PyNumber_Add
|
|
global PyNumber_Subtract
|
|
global PyNumber_Multiply
|
|
global PyNumber_MatrixMultiply
|
|
global PyNumber_FloorDivide
|
|
global PyNumber_TrueDivide
|
|
global PyNumber_Remainder
|
|
global PyNumber_Divmod
|
|
global PyNumber_Power
|
|
global PyNumber_Negative
|
|
global PyNumber_Positive
|
|
global PyNumber_Absolute
|
|
global PyNumber_Invert
|
|
global PyNumber_Lshift
|
|
global PyNumber_Rshift
|
|
global PyNumber_And
|
|
global PyNumber_Xor
|
|
global PyNumber_Or
|
|
global PyNumber_InPlaceAdd
|
|
global PyNumber_InPlaceSubtract
|
|
global PyNumber_InPlaceMultiply
|
|
global PyNumber_InPlaceMatrixMultiply
|
|
global PyNumber_InPlaceFloorDivide
|
|
global PyNumber_InPlaceTrueDivide
|
|
global PyNumber_InPlaceRemainder
|
|
global PyNumber_InPlacePower
|
|
global PyNumber_InPlaceLshift
|
|
global PyNumber_InPlaceRshift
|
|
global PyNumber_InPlaceAnd
|
|
global PyNumber_InPlaceXor
|
|
global PyNumber_InPlaceOr
|
|
global PyNumber_Long
|
|
global PyNumber_Float
|
|
global PyNumber_Index
|
|
global PyObject_Call
|
|
global PyObject_GetAttr
|
|
global PyObject_GetAttrString
|
|
global PyObject_GetIter
|
|
global PyObject_HasAttrString
|
|
global PyObject_IsTrue
|
|
global PyObject_Length
|
|
global PyObject_LengthHint
|
|
global PyObject_SetAttrString
|
|
global PyObject_Str
|
|
global PyObject_Repr
|
|
global PyObject_Hash
|
|
global PyObject_GetItem
|
|
global PyObject_SetItem
|
|
global PyObject_DelItem
|
|
global PyObject_RichCompare
|
|
global PyObject_IsInstance
|
|
global PyErr_Fetch
|
|
global PyErr_NormalizeException
|
|
global PyErr_SetString
|
|
global Py_None
|
|
global Py_True
|
|
global Py_False
|
|
global PyExc_BaseException
|
|
global PyExc_Exception
|
|
global PyExc_NameError
|
|
global PyExc_OSError
|
|
global PyExc_IOError
|
|
global PyExc_ValueError
|
|
global PyExc_LookupError
|
|
global PyExc_IndexError
|
|
global PyExc_KeyError
|
|
global PyExc_TypeError
|
|
global PyExc_ArithmeticError
|
|
global PyExc_ZeroDivisionError
|
|
global PyExc_OverflowError
|
|
global PyExc_AttributeError
|
|
global PyExc_RuntimeError
|
|
global PyExc_NotImplementedError
|
|
global PyExc_StopIteration
|
|
global PyExc_AssertionError
|
|
global PyExc_SystemExit
|
|
|
|
Py_DecRef = dlsym(py_handle, "Py_DecRef")
|
|
Py_IncRef = dlsym(py_handle, "Py_IncRef")
|
|
Py_Initialize = dlsym(py_handle, "Py_Initialize")
|
|
PyImport_AddModule = dlsym(py_handle, "PyImport_AddModule")
|
|
PyImport_AddModuleObject = dlsym(py_handle, "PyImport_AddModuleObject")
|
|
PyImport_ImportModule = dlsym(py_handle, "PyImport_ImportModule")
|
|
PyRun_SimpleString = dlsym(py_handle, "PyRun_SimpleString")
|
|
PyEval_GetGlobals = dlsym(py_handle, "PyEval_GetGlobals")
|
|
PyEval_GetBuiltins = dlsym(py_handle, "PyEval_GetBuiltins")
|
|
PyLong_AsLong = dlsym(py_handle, "PyLong_AsLong")
|
|
PyLong_FromLong = dlsym(py_handle, "PyLong_FromLong")
|
|
PyFloat_AsDouble = dlsym(py_handle, "PyFloat_AsDouble")
|
|
PyFloat_FromDouble = dlsym(py_handle, "PyFloat_FromDouble")
|
|
PyBool_FromLong = dlsym(py_handle, "PyBool_FromLong")
|
|
PyBytes_AsString = dlsym(py_handle, "PyBytes_AsString")
|
|
PyList_New = dlsym(py_handle, "PyList_New")
|
|
PyList_GetItem = dlsym(py_handle, "PyList_GetItem")
|
|
PyList_SetItem = dlsym(py_handle, "PyList_SetItem")
|
|
PyDict_New = dlsym(py_handle, "PyDict_New")
|
|
PyDict_Next = dlsym(py_handle, "PyDict_Next")
|
|
PyDict_GetItem = dlsym(py_handle, "PyDict_GetItem")
|
|
PyDict_SetItem = dlsym(py_handle, "PyDict_SetItem")
|
|
PySet_Add = dlsym(py_handle, "PySet_Add")
|
|
PySet_New = dlsym(py_handle, "PySet_New")
|
|
PyTuple_New = dlsym(py_handle, "PyTuple_New")
|
|
PyTuple_Size = dlsym(py_handle, "PyTuple_Size")
|
|
PyTuple_GetItem = dlsym(py_handle, "PyTuple_GetItem")
|
|
PyTuple_SetItem = dlsym(py_handle, "PyTuple_SetItem")
|
|
PyUnicode_AsEncodedString = dlsym(py_handle, "PyUnicode_AsEncodedString")
|
|
PyUnicode_DecodeFSDefaultAndSize = dlsym(py_handle, "PyUnicode_DecodeFSDefaultAndSize")
|
|
PyUnicode_FromString = dlsym(py_handle, "PyUnicode_FromString")
|
|
PyComplex_FromDoubles = dlsym(py_handle, "PyComplex_FromDoubles")
|
|
PyComplex_RealAsDouble = dlsym(py_handle, "PyComplex_RealAsDouble")
|
|
PyComplex_ImagAsDouble = dlsym(py_handle, "PyComplex_ImagAsDouble")
|
|
PyIter_Next = dlsym(py_handle, "PyIter_Next")
|
|
PySlice_New = dlsym(py_handle, "PySlice_New")
|
|
PySlice_Unpack = dlsym(py_handle, "PySlice_Unpack")
|
|
PyNumber_Add = dlsym(py_handle, "PyNumber_Add")
|
|
PyNumber_Subtract = dlsym(py_handle, "PyNumber_Subtract")
|
|
PyNumber_Multiply = dlsym(py_handle, "PyNumber_Multiply")
|
|
PyNumber_MatrixMultiply = dlsym(py_handle, "PyNumber_MatrixMultiply")
|
|
PyNumber_FloorDivide = dlsym(py_handle, "PyNumber_FloorDivide")
|
|
PyNumber_TrueDivide = dlsym(py_handle, "PyNumber_TrueDivide")
|
|
PyNumber_Remainder = dlsym(py_handle, "PyNumber_Remainder")
|
|
PyNumber_Divmod = dlsym(py_handle, "PyNumber_Divmod")
|
|
PyNumber_Power = dlsym(py_handle, "PyNumber_Power")
|
|
PyNumber_Negative = dlsym(py_handle, "PyNumber_Negative")
|
|
PyNumber_Positive = dlsym(py_handle, "PyNumber_Positive")
|
|
PyNumber_Absolute = dlsym(py_handle, "PyNumber_Absolute")
|
|
PyNumber_Invert = dlsym(py_handle, "PyNumber_Invert")
|
|
PyNumber_Lshift = dlsym(py_handle, "PyNumber_Lshift")
|
|
PyNumber_Rshift = dlsym(py_handle, "PyNumber_Rshift")
|
|
PyNumber_And = dlsym(py_handle, "PyNumber_And")
|
|
PyNumber_Xor = dlsym(py_handle, "PyNumber_Xor")
|
|
PyNumber_Or = dlsym(py_handle, "PyNumber_Or")
|
|
PyNumber_InPlaceAdd = dlsym(py_handle, "PyNumber_InPlaceAdd")
|
|
PyNumber_InPlaceSubtract = dlsym(py_handle, "PyNumber_InPlaceSubtract")
|
|
PyNumber_InPlaceMultiply = dlsym(py_handle, "PyNumber_InPlaceMultiply")
|
|
PyNumber_InPlaceMatrixMultiply = dlsym(py_handle, "PyNumber_InPlaceMatrixMultiply")
|
|
PyNumber_InPlaceFloorDivide = dlsym(py_handle, "PyNumber_InPlaceFloorDivide")
|
|
PyNumber_InPlaceTrueDivide = dlsym(py_handle, "PyNumber_InPlaceTrueDivide")
|
|
PyNumber_InPlaceRemainder = dlsym(py_handle, "PyNumber_InPlaceRemainder")
|
|
PyNumber_InPlacePower = dlsym(py_handle, "PyNumber_InPlacePower")
|
|
PyNumber_InPlaceLshift = dlsym(py_handle, "PyNumber_InPlaceLshift")
|
|
PyNumber_InPlaceRshift = dlsym(py_handle, "PyNumber_InPlaceRshift")
|
|
PyNumber_InPlaceAnd = dlsym(py_handle, "PyNumber_InPlaceAnd")
|
|
PyNumber_InPlaceXor = dlsym(py_handle, "PyNumber_InPlaceXor")
|
|
PyNumber_InPlaceOr = dlsym(py_handle, "PyNumber_InPlaceOr")
|
|
PyNumber_Long = dlsym(py_handle, "PyNumber_Long")
|
|
PyNumber_Float = dlsym(py_handle, "PyNumber_Float")
|
|
PyNumber_Index = dlsym(py_handle, "PyNumber_Index")
|
|
PyObject_Call = dlsym(py_handle, "PyObject_Call")
|
|
PyObject_GetAttr = dlsym(py_handle, "PyObject_GetAttr")
|
|
PyObject_GetAttrString = dlsym(py_handle, "PyObject_GetAttrString")
|
|
PyObject_GetIter = dlsym(py_handle, "PyObject_GetIter")
|
|
PyObject_HasAttrString = dlsym(py_handle, "PyObject_HasAttrString")
|
|
PyObject_IsTrue = dlsym(py_handle, "PyObject_IsTrue")
|
|
PyObject_Length = dlsym(py_handle, "PyObject_Length")
|
|
PyObject_LengthHint = dlsym(py_handle, "PyObject_LengthHint")
|
|
PyObject_SetAttrString = dlsym(py_handle, "PyObject_SetAttrString")
|
|
PyObject_Str = dlsym(py_handle, "PyObject_Str")
|
|
PyObject_Repr = dlsym(py_handle, "PyObject_Repr")
|
|
PyObject_Hash = dlsym(py_handle, "PyObject_Hash")
|
|
PyObject_GetItem = dlsym(py_handle, "PyObject_GetItem")
|
|
PyObject_SetItem = dlsym(py_handle, "PyObject_SetItem")
|
|
PyObject_DelItem = dlsym(py_handle, "PyObject_DelItem")
|
|
PyObject_RichCompare = dlsym(py_handle, "PyObject_RichCompare")
|
|
PyObject_IsInstance = dlsym(py_handle, "PyObject_IsInstance")
|
|
PyErr_Fetch = dlsym(py_handle, "PyErr_Fetch")
|
|
PyErr_NormalizeException = dlsym(py_handle, "PyErr_NormalizeException")
|
|
PyErr_SetString = dlsym(py_handle, "PyErr_SetString")
|
|
Py_None = dlsym(py_handle, "_Py_NoneStruct")
|
|
Py_True = dlsym(py_handle, "_Py_TrueStruct")
|
|
Py_False = dlsym(py_handle, "_Py_FalseStruct")
|
|
PyExc_BaseException = Ptr[cobj](dlsym(py_handle, "PyExc_BaseException"))[0]
|
|
PyExc_Exception = Ptr[cobj](dlsym(py_handle, "PyExc_Exception"))[0]
|
|
PyExc_NameError = Ptr[cobj](dlsym(py_handle, "PyExc_NameError"))[0]
|
|
PyExc_OSError = Ptr[cobj](dlsym(py_handle, "PyExc_OSError"))[0]
|
|
PyExc_IOError = Ptr[cobj](dlsym(py_handle, "PyExc_IOError"))[0]
|
|
PyExc_ValueError = Ptr[cobj](dlsym(py_handle, "PyExc_ValueError"))[0]
|
|
PyExc_LookupError = Ptr[cobj](dlsym(py_handle, "PyExc_LookupError"))[0]
|
|
PyExc_IndexError = Ptr[cobj](dlsym(py_handle, "PyExc_IndexError"))[0]
|
|
PyExc_KeyError = Ptr[cobj](dlsym(py_handle, "PyExc_KeyError"))[0]
|
|
PyExc_TypeError = Ptr[cobj](dlsym(py_handle, "PyExc_TypeError"))[0]
|
|
PyExc_ArithmeticError = Ptr[cobj](dlsym(py_handle, "PyExc_ArithmeticError"))[0]
|
|
PyExc_ZeroDivisionError = Ptr[cobj](dlsym(py_handle, "PyExc_ZeroDivisionError"))[0]
|
|
PyExc_OverflowError = Ptr[cobj](dlsym(py_handle, "PyExc_OverflowError"))[0]
|
|
PyExc_AttributeError = Ptr[cobj](dlsym(py_handle, "PyExc_AttributeError"))[0]
|
|
PyExc_RuntimeError = Ptr[cobj](dlsym(py_handle, "PyExc_RuntimeError"))[0]
|
|
PyExc_NotImplementedError = Ptr[cobj](dlsym(py_handle, "PyExc_NotImplementedError"))[0]
|
|
PyExc_StopIteration = Ptr[cobj](dlsym(py_handle, "PyExc_StopIteration"))[0]
|
|
PyExc_AssertionError = Ptr[cobj](dlsym(py_handle, "PyExc_AssertionError"))[0]
|
|
PyExc_SystemExit = Ptr[cobj](dlsym(py_handle, "PyExc_SystemExit"))[0]
|