Configuración
La API de C de Qiskit requiere una configuración mínima.
QISKIT_PYTHON_EXTENSION
Si se definen antes de incluir qiskit.h, los archivos de cabecera definirán todos los símbolos de forma que sean compatibles con los módulos de extensión de « Python ». Esto significa que todas las funciones de la API se resolverán como desreferencias de punteros a funciones a partir de una tabla de consulta.
Se trata de una macro definida por el usuario y no por Qiskit.
qk_import
int qk_import(void)
Importa la API C de Qiskit desde el paquete Pythonqiskit -space.
Debes llamar a esta función una vez por unidad de compilación, antes de intentar llamar a cualquier función de la API de C. Si no se hace así, suele provocar referencias a punteros nulos en tiempo de ejecución.
Lo normal es que quieras hacer esto dentro de la función de inicialización de tu PyInit_* módulo. Por ejemplo, en my_extension.c:
#define QISKIT_PYTHON_EXTENSION
#include <Python.h>
#include <qiskit.h>
static struct PyModuleDef my_extension_mod = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "my_extension",
};
PyMODINIT_FUNC PyInit_my_extension(void) {
if (qk_import() < 0) {
return NULL;
}
return PyModuleDef_Init(&my_extension_mod);
}Esta función solo está definida si QISKIT_PYTHON_EXTENSION se definió antes de incluir qiskit.h.
Devuelve
0 si se realiza correctamente, un valor negativo si falla.