QkTranspiler
La qk_transpile() función expone el compilador de Qiskit (qiskit.transpiler) a C. La funcionalidad básica utiliza el mismo código subyacente que la versión Python -space, pero el transpilador tal y como se presenta en C tiene más limitaciones que el que se ofrece en Python. El transpilador parte de la base de que el circuito se ha creado utilizando exclusivamente la API de C y está diseñado para funcionar únicamente en el caso de una API de C independiente. Es posible que no funcione correctamente en un caso de uso mixto de « Python » y «/C». Si estás combinando circuitos de tipo C y de tipo « Python », debes llamar a las generate_preset_pass_manager() funciones transpile() o para esos circuitos.
Tipos de datos
QkTranspileResult
struct QkTranspileResult
El objeto contenedor de resultados de qk_transpile
Cuando el transpilador compila correctamente un circuito cuántico para un objetivo determinado, devuelve el circuito transpilado y el diseño. La función qk_transpile escribirá punteros a los campos de esta estructura cuando se ejecute con éxito, puede inicializar esta estructura con punteros nulos o dejarlos sin establecer ya que los valores nunca son leídos por qk_transpile y sólo escritos. Después de llamar a qk_transpile usted es responsable de llamar a qk_circuit_free y qk_transpile_layout_free en los miembros de esta estructura.
QkCircuit *circuito
El circuito compilado.
QkTranspileLayout *diseño
Metadatos sobre los diseños iniciales y finales de virtual a físico.
QkTranspileOptions
struct QkTranspileOptions
Las opciones para ejecutar el transpilador
uint8_t nivel_de_optimización
El nivel de optimización con el que se ejecutará el transpilador. Los valores válidos son 0, 1, 2 ó 3.
int64_t semilla
La semilla para el transpilador. Si se establece en un número negativo, significa que no se establecerá ninguna semilla y que los RNG utilizados en el transpilador se sembrarán a partir de la entropía del sistema.
doble aproximación_grado
El grado de aproximación un dial heurístico donde 1.0 significa ninguna aproximación (hasta tolerancia numérica) y 0.0 significa la máxima aproximación. Un valor NAN indica que se permite la aproximación hasta la tasa de error notificada para una operación en el objetivo.
QkTranspilerStageState
struct QkTranspilerStageState
Un contenedor que recoge los atributos individuales compartidos por las etapas del transpilador. Cuando la transpilación se realiza correctamente, cada etapa escribe en este contenedor los atributos específicos que necesitarán las siguientes etapas. Si el contenedor no está inicializado, cada etapa inicializará un nuevo objeto cuando sea necesario.
qk_transpile_state_new
void qk_transpile_state_new(QkTranspilerStageState **state)Crear un puntero a un objeto
QkTranspilerStageStatevacíoSeguridad
El comportamiento es indefinido si no
statees un puntero válido asignado.Parámetros
- state : un puntero al espacio de memoria asignado para almacenar el puntero.
qk_transpile_state_free
void qk_transpile_state_free(QkTranspilerStageState *state)Liberar un
QkTranspilerStageStateobjetoSeguridad
El comportamiento es indefinido si no
statees un puntero válido y no nulo a unQkTranspilerStageState.Parámetros
- state : un puntero al estado que se va a liberar
qk_transpile_state_layout
QkTranspileLayout *qk_transpile_state_layout(QkTranspilerStageState *state)Obtiene un
QkTranspileLayoutobjeto a partir de unQkTranspilerStageStateobjeto.Este puntero pertenece al objeto
statey no debe liberarse medianteqk_transpile_layout_free. En su lugar, libera el objetostateoriginal utilizandoqk_transpile_state_free.Seguridad
El comportamiento es indefinido si no
statees un puntero válido y no nulo a unQkTranspilerStageState.Parámetros
- estado : un puntero al estado del que se va a recuperar el diseño.
Devuelve
un puntero a un
QkTranspileLayoutobjeto que pertenece al estado.qk_transpile_state_layout_set
void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)Establece un
QkTranspileLayoutobjeto como diseño para otroQkTranspilerStageStateobjeto.Al llamar a este método se consume el
QkTranspileLayoutobjeto, lo que significa que el usuario no tendrá que llamar aqk_transpile_layout_free. El usuario debe desasignar el espacio que se le ha asignado mediantefree.Seguridad
El comportamiento es indefinido si no
statees un puntero válido y no nulo a unQkTranspilerStageState. El comportamiento es indefinido si nostatees un puntero válido a unQkTranspileLayout.Parámetros
- estado : un puntero al estado para el que se va a definir el diseño.
- diseño : un puntero al diseño que se va a utilizar. Quizás sea
NULLpara desactivar el diseño.
Funciones
qk_transpiler_default_options
QkTranspileOptions qk_transpiler_default_options(void)
Generar opciones predeterminadas del transpilador
Esta función genera un QkTranspileOptions con la configuración por defecto Esta actualmente es optimization_level 2, sin semilla, y sin aproximación.
Devuelve
Un QkTranspileOptions objeto con la configuración predeterminada.
qk_transpile_stage_init
QkExitCode qk_transpile_stage_init(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Ejecuta la etapa de inicialización preestablecida del transpilador en un circuito
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para que se ajuste a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función ejecuta la primera etapa del transpilador, init, que realiza optimizaciones de circuitos abstractos y reduce las operaciones de múltiples qubits a operaciones de uno y dos qubits. Para obtener más información, consulte la etapa de inicialización.
Esta función solo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito utilizando únicamente características expuestas a través de C. Si se encuentra en un entorno mixto de Python y C, normalmente es mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si dag, target, o no son punteros válidos y statedistintos de nulos a un QkDag, QkTarget, o un QkTranspileLayout puntero, respectivamente. options debe ser un puntero válido a a QkTranspileOptions o NULL. error debe ser un puntero válido a un char puntero o NULLa. Esta función sobrescribirá el valor del state puntero interno de. Si es necesario liberar el valor al que apunta, esto debe hacerse fuera de esta función, ya que esta función no lo liberará.
Parámetros
- dag : un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - estado : un puntero a un puntero a un
QkTranspilerStageStateobjeto. Si la ejecución se realiza correctamente (código de retorno 0), se asignará a este puntero un puntero al objeto de estado creado por el transpilador. - error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.
qk_transpile_stage_routing
QkExitCode qk_transpile_stage_routing(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState *state, char **error)
Ejecuta la etapa de enrutamiento preestablecida del transpilador en un circuito
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para que se ajuste a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función ejecuta la tercera etapa del gestor de pasadas preestablecidas, el enrutamiento, que traduce todas las instrucciones del circuito a aquellas compatibles con el objetivo. Para obtener más información, consulte la etapa de enrutamiento.
Esta función solo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito utilizando únicamente características expuestas a través de C. Si se encuentra en un entorno mixto de Python y C, normalmente es mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si dag, target, o layout, no son punteros válidos y distintos de nulo a un QkDag, QkTarget, o un QkTranspileLayout puntero, respectivamente. options Debe ser un puntero válido a a QkTranspileOptions o NULL. error Debe ser un puntero válido a un char puntero o NULL.
Parámetros
- dag : un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - state : un puntero a un puntero a un
QkTranspilerStageStateobjeto que contiene la estructura. Por lo general, tendrás que ejecutar laqk_transpile_stage_layoutfunción antes de esta, lo que te proporcionará unQkTranspilerStageStateobjeto con la disposición inicial configurada. Quieres tomar el valor de salida de esa función y utilizarlo como entrada para esta. Si no tienes un objeto de diseño (por ejemplo, si has ejecutado tu propia pasada de diseño). Puedes ejecutarqk_transpile_layout_generate_from_mappingpara generar una disposición trivial (en la que el qubit virtual 0 del circuito se asigna al qubit físico 0 del destino, 1->1, 2->2, etc.) para el DAG en su estado actual. Esto te permitirá generar un objeto de diseño para la fase de enrutamiento si creas tu propio diseño. - error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.
qk_transpile_stage_optimization
QkExitCode qk_transpile_stage_optimization(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error, QkTranspilerStageState *state)
Ejecuta la etapa de optimización preestablecida del transpilador en un circuito
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para que se ajuste a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función ejecuta la cuarta etapa del gestor de pasadas preestablecidas, la optimización, que optimiza el circuito para el objetivo dado después de que el circuito se haya transformado en un circuito físico. Para obtener más información, consulte la etapa de optimización.
Esta función solo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito utilizando únicamente características expuestas a través de C. Si se encuentra en un entorno mixto de Python y C, normalmente es mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si dag y no target son punteros válidos y distintos de nulo a un QkDago un QkTarget respectivamente. options Debe ser un puntero válido a a QkTranspileOptions o NULL. error Debe ser un puntero válido a un char puntero o NULL.
Parámetros
- dag : un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará. - state : un puntero a un
QkTranspilerStageStateobjeto que contiene la estructura. Por lo general, tendrás que ejecutar la funciónqk_transpile_stage_layoutanterior a esta, lo que te proporcionará unQkTranspileLayoutobjeto con la configuración inicial deseada; a continuación, debes tomar la configuración de salida de esa función y utilizarla como entrada para esta. Si no tienes un objeto de diseño (por ejemplo, si has ejecutado tu propia pasada de diseño). Puedes ejecutarqk_transpile_layout_generate_from_mappingpara generar una disposición trivial (en la que el qubit virtual 0 del circuito se asigna al qubit físico 0 del destino, 1->1, 2->2, etc.) para el DAG en su estado actual. Esto te permitirá crear un objeto de diseño para la fase de optimización si generas tu propio diseño.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.
qk_transpile_stage_translation
QkExitCode qk_transpile_stage_translation(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error)
Ejecuta la etapa de traducción preestablecida del transpilador en un circuito
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para que se ajuste a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función ejecuta la cuarta etapa del gestor de pasadas preestablecidas, la traducción, que traduce todas las instrucciones del circuito a aquellas compatibles con el destino. Para obtener más información, consulte la etapa de traducción.
Esta función solo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito utilizando únicamente características expuestas a través de C. Si se encuentra en un entorno mixto de Python y C, normalmente es mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si dag y no target son punteros válidos y distintos de nulo a a QkDagy QkTarget respectivamente. options Debe ser un puntero válido a a QkTranspileOptions o NULL. error Debe ser un puntero válido a un char puntero o NULL.
Parámetros
- dag : un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.
qk_transpile_stage_layout
QkExitCode qk_transpile_stage_layout(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Ejecutar la etapa de diseño preestablecida del transpilador en un circuito
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para que se ajuste a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función ejecuta la segunda etapa del diseño del gestor de pasadas preestablecido, que elige la asignación inicial de qubits virtuales a qubits físicos, incluida la expansión del circuito para contener ancillas explícitas. Para obtener más información, consulte la etapa de diseño.
Esta función solo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito utilizando únicamente características expuestas a través de C. Si se encuentra en un entorno mixto de Python y C, normalmente es mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si dag o target, no son punteros válidos y distintos de nulo a un QkDago un QkTarget respectivamente. El comportamiento también es indefinido si no layout es un puntero válido y alineado a un puntero a un QkTranspileLayout o un puntero a un NULL puntero. options Debe ser un puntero válido a a QkTranspileOptions o NULL. error Debe ser un puntero válido a un char puntero o NULL.
Parámetros
- dag : un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - estado : un puntero a un puntero a un
QkTranspilerStageStateobjeto. Si la ejecución se realiza correctamente (código de retorno 0), el objeto de diseño creado por el transpilador se escribirá en el objeto de estado al que apunta este puntero. El puntero interno correspondiente puede ser nulo si no existe ningún objeto de estado o de diseño. Normalmente, si ejecutas esa funciónqk_transpile_stage_init, tomarías el estado de salida de la misma y utilizarías su estructura como entrada para esta. Pero si no tienes un layout, el puntero interno puede ser nulo y se asignará un nuevo objetoQkTranspilerStageState, con un layout, y ese puntero se establecerá para el valor interno del layout aquí. - error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.
qk_transpile
QkExitCode qk_transpile(const QkCircuit *qc, const QkTarget *target, const QkTranspileOptions *options, QkTranspileResult *result, char **error)
Transpile un solo circuito.
El transpilador Qiskit es un compilador de circuitos cuánticos que reescribe un circuito de entrada dado para ajustarlo a las restricciones de una QPU y optimiza el circuito para su ejecución. Esta función sólo debe utilizarse con circuitos construidos utilizando la API C de Qiskit. Hace suposiciones sobre el circuito sólo utilizando características expuestas a través de C, si usted está en un entorno mixto Python y C es típicamente mejor invocar el transpilador a través de Python.
Esta función es multihilo internamente y lanzará un pool de hilos con hilos igual al número de CPUs reportadas por el sistema operativo por defecto. Esto incluirá núcleos lógicos en CPUs con multihilo simultáneo. Puede ajustar el número de hilos con la variable de entorno RAYON_NUM_THREADS . Por ejemplo, configurando RAYON_NUM_THREADS=4 se limitaría el pool de hilos a 4 hilos.
Seguridad
El comportamiento es indefinido si circuit, target, o result, no son punteros válidos y distintos de nulo a a QkCircuit, QkTarget, o QkTranspileResult respectivamente. options Debe ser un puntero válido a a QkTranspileOptions o NULL. error Debe ser un puntero válido a un char puntero o NULL.
Parámetros
- qc - Un puntero al circuito en el que se ejecutará el transpilador.
- target - Un puntero al objetivo para el que compilar el circuito.
- options - Un puntero a un objeto options que define las opciones del usuario. Si es un puntero nulo, se utilizarán los valores por defecto. Consulte
qk_transpile_default_optionspara obtener más información sobre los valores por defecto. - result - Un puntero a la posición de memoria del resultado del transpilador. En una ejecución con éxito (código de retorno 0) la salida del transpilador se escribirá en el puntero. Los miembros de la estructura resultante son propiedad de la persona que llama y usted es responsable de liberar los miembros utilizando las respectivas funciones free.
- error : un puntero a un puntero con una cadena terminada en nulo con una descripción del error. Si el transpilador falla, se escribirá un puntero a la cadena con la descripción del error en este puntero. Ese puntero debe liberarse con
qk_str_free. Esto puede ser un puntero nulo, en cuyo caso el error no se registrará.
Devuelve
El código de retorno del transpilador, QkExitCode_Success significa éxito y todos los demás valores indican un error.