Skip to main content
IBM Quantum Platform

OpenQASM 3 et l' Qiskit SDK

  • Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

    qiskit[all]~=2.5.1
    

Le SDK Qiskit fournit des outils de conversion entre les représentations OpenQASM des programmes quantiques et la classe QuantumCircuit. Notez que ces outils sont encore dans une phase exploratoire de développement et qu'ils continueront à évoluer au fur et à mesure que le support de Qiskit pour les capacités de circuits dynamiques exprimées par OpenQASM 3 augmentera.

Note

Cette fonction est encore en phase exploratoire. Il est donc probable que la syntaxe et les capacités évolueront.


Importer un programme OpenQASM 3 dans Qiskit

Vous devez installer le paquet qiskit_qasm3_import pour utiliser cette fonction. L'installation se fait à l'aide de la commande suivante.

pip install qiskit-qasm3-import

Actuellement, deux fonctions de haut niveau sont disponibles pour l'importation de OpenQASM 3 dans Qiskit. Ces fonctions sont load(), qui prend un nom de fichier, et loads(), qui prend le programme lui-même sous la forme d'une chaîne de caractères :

import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)

Dans cet exemple, nous définissons un programme quantique à l'aide de OpenQASM 3, et nous utilisons loads() pour le convertir directement en un programme quantique QuantumCircuit:

import qiskit.qasm3

program = """
    OPENQASM 3.0;
    include "stdgates.inc";

    input float[64] a;
    qubit[3] q;
    bit[2] mid;
    bit[3] out;

    let aliased = q[0:1];

    gate my_gate(a) c, t {
      gphase(a / 2);
      ry(a) c;
      cx c, t;
    }
    gate my_phase(a) c {
      ctrl @ inv @ gphase(a) c;
    }

    my_gate(a * 2) aliased[0], q[{1, 2}][0];
    measure q[0] -> mid[0];
    measure q[1] -> mid[1];

    while (mid == "00") {
      reset q[0];
      reset q[1];
      my_gate(a) q[0], q[1];
      my_phase(a - pi/2) q[1];
      mid[0] = measure q[0];
      mid[1] = measure q[1];
    }

    if (mid[0]) {
      let inner_alias = q[{0, 1}];
      reset inner_alias;
    }

    out = measure q;
"""
circuit = qiskit.qasm3.loads(program)
circuit.draw("mpl")

Output:

Output of the previous code cell

Exporter vers OpenQASM 3

Vous pouvez exporter du code Qiskit vers OpenQASM 3 avec dumps(), qui exporte vers une chaîne de caractères, ou dump(), qui exporte vers un fichier.

Exemple avec dumps()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dumps

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

dumps(qc)

Output:

'OPENQASM 3.0;\ninclude "stdgates.inc";\nbit[2] meas;\nqubit[2] q;\nh q[0];\ncx q[0], q[1];\nbarrier q[0], q[1];\nmeas[0] = measure q[0];\nmeas[1] = measure q[1];\n'

Exemple avec dump()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dump

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

f = open("my_file.txt", "w")
dump(qc, f)
f.close()

Pour plus d'informations, voir la section Exportation vers OpenQASM 3 de la référence API.


Etapes suivantes

Recommandations
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.