QkTranspiler
Cette qk_transpile() fonction expose le transpilateur (qiskit.transpiler) de Qiskit en C. Les fonctionnalités de base reposent sur le même code sous-jacent que la version Python -space, mais le transcompilateur accessible depuis C présente davantage de limitations que celui accessible depuis Python. Le transpileur part du principe que le circuit a été conçu exclusivement à l'aide de l'API C et est destiné à fonctionner uniquement dans le cas d'une API C autonome. Il se peut que cela ne fonctionne pas correctement dans un scénario où l'on utilise à la fois « Python » et « /C ». Si vous combinez des circuits en C et en Python, vous devez appeler les generate_preset_pass_manager() fonctions transpile() ou pour ces circuits.
Types de données
QkTranspileResult
struct QkTranspileResult
L'objet résultat du conteneur de qk_transpile
Lorsque le transpileur compile avec succès un circuit quantique pour une cible donnée, il renvoie le circuit transpilé et le schéma. La fonction qk_transpile écrira des pointeurs sur les champs de cette structure lorsqu'elle s'exécutera avec succès. Vous pouvez initialiser cette structure avec des pointeurs nuls ou les laisser non définis, car les valeurs ne seront jamais lues par qk_transpile et seulement écrites. Après avoir appelé qk_transpile , vous devez appeler qk_circuit_free et qk_transpile_layout_free sur les membres de cette structure.
QkCircuit *circuit
Le circuit assemblé.
QkTranspileLayout *mise en page
Métadonnées concernant les dispositions virtuelles et physiques initiales et finales.
QkTranspileOptions
struct QkTranspileOptions
Les options d'exécution du transpileur
uint8_t niveau_d'optimisation
Le niveau d'optimisation avec lequel le transpileur doit être exécuté. Les valeurs valables sont 0, 1, 2 ou 3.
int64_t graine
La semence pour le transpondeur. S'il s'agit d'un nombre négatif, cela signifie qu'aucune graine ne sera définie et que les RNG utilisés dans le transpileur seront alimentés par l'entropie du système.
double approximation_degré
Le degré d'approximation est représenté par un curseur heuristique où « 1.0 » signifie « aucune approximation » (dans les limites de la tolérance numérique) et « 0.0 » signifie « approximation maximale ». Une NAN valeur indique qu'une approximation est autorisée dans la limite du taux d'erreur indiqué pour une opération dans la cible.
QkTranspilerStageState
struct QkTranspilerStageState
Un conteneur regroupant les attributs individuels communs aux différentes étapes du transcompilateur. Lorsqu'une compilation s'effectue correctement, chaque étape écrit dans ce conteneur des attributs spécifiques dont les étapes suivantes auront besoin. Si le conteneur n'est pas initialisé, chaque étape initialisera un nouvel objet si nécessaire.
qk_transpile_state_new
void qk_transpile_state_new(QkTranspilerStageState **state)Créer un pointeur vers un objet
QkTranspilerStageStatevideSécurité
Le comportement est indéfini si
staten'est pas un pointeur valide alloué.Paramètres
- état – un pointeur vers l'espace mémoire alloué destiné à stocker le pointeur.
qk_transpile_state_free
void qk_transpile_state_free(QkTranspilerStageState *state)Libérer un
QkTranspilerStageStateobjetSécurité
Le comportement est indéfini si
staten'est pas un pointeur valide et non nul vers unQkTranspilerStageState.Paramètres
- état – un pointeur vers l'état à libérer
qk_transpile_state_layout
QkTranspileLayout *qk_transpile_state_layout(QkTranspilerStageState *state)Récupère un
QkTranspileLayoutobjet à partir d'unQkTranspilerStageStateobjet.Ce pointeur appartient à
statel'objet et ne doit pas être libéré à l'aide deqk_transpile_layout_free. Libérez plutôt l'objetstated'origine à l'aide deqk_transpile_state_free.Sécurité
Le comportement est indéfini si
staten'est pas un pointeur valide et non nul vers unQkTranspilerStageState.Paramètres
- état – un pointeur vers l'état à partir duquel récupérer la mise en page.
Retours
un pointeur vers un
QkTranspileLayoutobjet appartenant à l'État.qk_transpile_state_layout_set
void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)Définit un
QkTranspileLayoutobjet comme mise en page pour unQkTranspilerStageStateobjet.L'appel de cette méthode épuise
QkTranspileLayoutl'objet, ce qui signifie que l'utilisateur n'aura pas besoin de l'appelerqk_transpile_layout_free. L'utilisateur doit tout de même désallouer l'espace qui lui a été attribué à l'aide defree.Sécurité
Le comportement est indéfini si
staten'est pas un pointeur valide et non nul vers unQkTranspilerStageState. Le comportement est indéfini sistaten'est pas un pointeur valide vers unQkTranspileLayout.Paramètres
- état – un pointeur vers l'état pour lequel la mise en page doit être définie.
- mise en page – un pointeur vers la mise en page à utiliser. Cela peut servir
NULLà désactiver la mise en page.
Fonctions
qk_transpiler_default_options
QkTranspileOptions qk_transpiler_default_options(void)
Générer les options par défaut du transpileur
Cette fonction génère un QkTranspileOptions avec les paramètres par défaut. Il s'agit actuellement de optimization_level 2, pas de graine et pas d'approximation.
Retours
Un QkTranspileOptions objet avec les paramètres par défaut.
qk_transpile_stage_init
QkExitCode qk_transpile_stage_init(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Exécutez la phase d'initialisation prédéfinie du transcompilateur sur un circuit
Le transcompilateur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné afin de l'adapter aux contraintes d'un QPU et optimise le circuit pour son exécution. Cette fonction exécute la première étape du transcompilateur, init, qui effectue des optimisations de circuits abstraits et réduit les opérations multi-qubits en opérations à un ou deux qubits. Pour plus d'informations, veuillez vous référer à la section Étape d'initialisation.
Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Il fait des suppositions sur le circuit en utilisant uniquement les fonctionnalités exposées via C. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transcompilateur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si dag, target, ou ne state sont pas respectivement des pointeurs valides et non nuls vers un QkDag, QkTarget, ou un QkTranspileLayout pointeur. options doit être un pointeur valide vers a, a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL. La valeur du pointeur interne de state sera écrasée par cette fonction. Si la valeur pointée doit être libérée, cela doit être fait en dehors de cette fonction, car celle-ci ne la libérera pas.
Paramètres
- dag – Pointeur vers le circuit sur lequel exécuter le transcompilateur.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - état – Un pointeur vers un pointeur vers un
QkTranspilerStageStateobjet. En cas de réussite (code de retour 0), un pointeur vers l'objet d'état créé par le transpileur sera enregistré à cette adresse. - erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.
qk_transpile_stage_routing
QkExitCode qk_transpile_stage_routing(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState *state, char **error)
Exécutez l'étape de routage prédéfinie du transcompilateur sur un circuit
Le transcompilateur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné afin de l'adapter aux contraintes d'un QPU et optimise le circuit pour son exécution. Cette fonction exécute la troisième étape du gestionnaire de passes prédéfinies, le routage, qui traduit toutes les instructions du circuit en instructions prises en charge par la cible. Pour plus d'informations, veuillez vous référer à la section Étape de routage.
Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Il fait des suppositions sur le circuit en utilisant uniquement les fonctionnalités exposées via C. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transcompilateur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si dag, target, ou layout, ne sont pas des pointeurs valides et non nuls vers respectivement un QkDag, QkTarget, ou un QkTranspileLayout pointeur. options doit être un pointeur valide vers a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL.
Paramètres
- dag – Pointeur vers le circuit sur lequel exécuter le transcompilateur.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - state – Un pointeur vers un pointeur vers un
QkTranspilerStageStateobjet contenant la structure. En général, vous devrez exécuter la fonctionqk_transpile_stage_layoutavant celle-ci, ce qui vous fournira unQkTranspilerStageStateobjet avec la mise en page initiale définie. Vous voulez récupérer l'état de sortie de cette fonction et l'utiliser comme entrée pour celle-ci. Si vous ne disposez pas d'un objet de mise en page (par exemple, si vous avez effectué votre propre passage de mise en page). Vous pouvez exécuterqk_transpile_layout_generate_from_mappingcette commande pour générer une configuration simple (dans laquelle le qubit virtuel 0 du circuit est mappé au qubit physique 0 de la cible, 1 → 1, 2 → 2, etc.) pour le DAG dans son état actuel. Cela vous permettra de créer un objet de schéma pour la phase de routage si vous générez votre propre schéma. - erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.
qk_transpile_stage_optimization
QkExitCode qk_transpile_stage_optimization(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error, QkTranspilerStageState *state)
Exécutez la phase d'optimisation prédéfinie du transcompilateur sur un circuit
Le transcompilateur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné afin de l'adapter aux contraintes d'un QPU et optimise le circuit pour son exécution. Cette fonction exécute la quatrième étape du gestionnaire de passes prédéfinies, l'optimisation, qui optimise le circuit pour la cible donnée après que le circuit a été transformé en circuit physique. Pour plus d'informations, veuillez vous reporter à la section Étape d'optimisation.
Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Il fait des suppositions sur le circuit en utilisant uniquement les fonctionnalités exposées via C. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transcompilateur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si dag et ne target sont pas des pointeurs valides et non nuls vers un ou un QkTarget QkDagrespectivement. options doit être un pointeur valide vers a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL.
Paramètres
- dag – Pointeur vers le circuit sur lequel exécuter le transcompilateur.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée. - état – Un pointeur vers un
QkTranspilerStageStateobjet contenant la structure. En général, vous devrez exécuter la fonctionqk_transpile_stage_layoutavant celle-ci; cela vous fournira unQkTranspileLayoutobjet avec la mise en page initiale souhaitée. Vous devrez ensuite récupérer la mise en page de sortie de cette fonction et l'utiliser comme entrée pour celle-ci. Si vous ne disposez pas d'un objet de mise en page (par exemple, si vous avez effectué votre propre passage de mise en page). Vous pouvez exécuterqk_transpile_layout_generate_from_mappingcette commande pour générer une configuration simple (dans laquelle le qubit virtuel 0 du circuit est mappé au qubit physique 0 de la cible, 1 → 1, 2 → 2, etc.) pour le DAG dans son état actuel. Cela vous permettra de créer un objet de mise en page pour la phase d'optimisation si vous créez votre propre mise en page.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.
qk_transpile_stage_translation
QkExitCode qk_transpile_stage_translation(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error)
Exécutez l'étape de traduction prédéfinie du transcompilateur sur un circuit
Le transcompilateur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné afin de l'adapter aux contraintes d'un QPU et optimise le circuit pour son exécution. Cette fonction exécute la quatrième étape du gestionnaire de passes prédéfinies, la traduction, qui traduit toutes les instructions du circuit en instructions prises en charge par la cible. Pour plus d'informations, veuillez vous référer à la section Étape de traduction.
Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Il fait des suppositions sur le circuit en utilisant uniquement les fonctionnalités exposées via C. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transcompilateur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si dag et ne target sont pas des pointeurs valides et non nuls vers un QkDag, QkTarget respectivement. options doit être un pointeur valide vers a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL.
Paramètres
- dag – Pointeur vers le circuit sur lequel exécuter le transcompilateur.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.
qk_transpile_stage_layout
QkExitCode qk_transpile_stage_layout(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Exécutez l'étape de mise en page prédéfinie du transcompilateur sur un circuit
Le transcompilateur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné afin de l'adapter aux contraintes d'un QPU et optimise le circuit pour son exécution. Cette fonction exécute la deuxième étape de la disposition du gestionnaire de passes prédéfinies, qui choisit le mappage initial des qubits virtuels vers les qubits physiques, y compris l'extension du circuit pour contenir des ancilles explicites. Pour plus d'informations, consultez la section Étape de mise en page.
Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Il fait des suppositions sur le circuit en utilisant uniquement les fonctionnalités exposées via C. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transcompilateur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si dag ou target, ne sont pas des pointeurs valides et non nuls vers un QkDagou un QkTarget respectivement. Le comportement est également indéfini si layout n'est pas un pointeur valide et aligné vers un pointeur vers un QkTranspileLayout ou un pointeur vers un NULL pointeur. options doit être un pointeur valide vers a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL.
Paramètres
- dag – Pointeur vers le circuit sur lequel exécuter le transcompilateur.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - état – Un pointeur vers un pointeur vers un
QkTranspilerStageStateobjet. En cas de réussite (code de retour 0), l'objet de mise en page créé par le transcompilateur sera écrit dans l'objet d'état pointé par ce pointeur. Le pointeur interne correspondant peut être nul s'il n'existe aucun objet d'état ou de mise en page. En général, lorsque vous exécutez cette fonctionqk_transpile_stage_init, vous récupérez l'état de sortie de celle-ci et utilisez sa structure comme entrée pour celle-ci. Mais si vous n'avez pas de structure, le pointeur interne peut être nul et un nouvel objetQkTranspilerStageState, doté d'une structure, sera alloué, et ce pointeur sera alors renseigné avec la valeur interne de la structure. - erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.
qk_transpile
QkExitCode qk_transpile(const QkCircuit *qc, const QkTarget *target, const QkTranspileOptions *options, QkTranspileResult *result, char **error)
Transpilez un seul circuit.
Le transpileur Qiskit est un compilateur de circuits quantiques qui réécrit un circuit d'entrée donné pour répondre aux contraintes d'une QPU et optimise le circuit pour l'exécution. Cette fonction ne doit être utilisée qu'avec des circuits construits à l'aide de l'API C de Qiskit. Si vous êtes dans un environnement mixte Python et C, il est généralement préférable d'invoquer le transpileur via Python.
Cette fonction est multithread en interne et lancera un pool de threads avec un nombre de threads égal au nombre d'unités centrales indiqué par le système d'exploitation par défaut. Il s'agit notamment des cœurs logiques sur les unités centrales avec multithreading simultané. Vous pouvez régler le nombre de threads à l'aide de la variable d'environnement RAYON_NUM_THREADS . Par exemple, le paramètre RAYON_NUM_THREADS=4 limiterait le pool de threads à 4 threads.
Sécurité
Le comportement est indéfini si circuit, target, ou result, ne sont pas des pointeurs valides et non nuls vers respectivement QkTranspileResult , QkCircuit QkTarget, ou. options doit être un pointeur valide vers a QkTranspileOptions ou NULL. error doit être un pointeur valide vers un char pointeur ou NULL.
Paramètres
- qc - Un pointeur sur le circuit sur lequel le transpondeur doit fonctionner.
- target - Pointeur vers la cible pour laquelle le circuit doit être compilé.
- options - Un pointeur sur un objet d'options qui définit les options de l'utilisateur. S'il s'agit d'un pointeur nul, les valeurs par défaut seront utilisées. Voir
qk_transpile_default_optionspour plus de détails sur les valeurs par défaut. - result - Un pointeur sur l'emplacement en mémoire du résultat du transpilateur. En cas d'exécution réussie (code de retour 0), la sortie du transpileur sera écrite dans le pointeur. Les membres de la structure de résultat appartiennent à l'appelant et vous êtes responsable de la libération des membres à l'aide des fonctions de libération respectives.
- erreur – Pointeur vers un pointeur contenant une chaîne terminée par un caractère nul avec une description de l'erreur. Si le transcompilateur échoue, un pointeur vers la chaîne contenant la description de l'erreur sera écrit dans ce pointeur. Ce pointeur doit être libéré avec
qk_str_free. Il peut s'agir d'un pointeur nul, auquel cas l'erreur ne sera pas consignée.
Retours
Le code de retour pour le transpileur, QkExitCode_Success signifie un succès et toutes les autres valeurs indiquent une erreur.