Skip to main content
IBM Quantum Platform

OpenQASM 3 und die „ Qiskit SDK “

  • Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen die Verwendung dieser oder neuerer Versionen.

    qiskit[all]~=2.5.2
    

Das Qiskit SDK bietet einige Werkzeuge zur Konvertierung zwischen OpenQASM Repräsentationen von Quantenprogrammen und der QuantumCircuit Klasse. Bitte beachten Sie, dass sich diese Werkzeuge noch in einer explorativen Entwicklungsphase befinden und in dem Maße weiterentwickelt werden, in dem die Unterstützung von Qiskit für dynamische Schaltungen, wie sie in OpenQASM 3 zum Ausdruck kommt, zunimmt.

Note

Diese Funktion befindet sich noch in der Erprobungsphase. Es ist daher wahrscheinlich, dass sich die Syntax und die Fähigkeiten weiterentwickeln werden.


OpenQASM -3-Programm in Qiskit importieren

Sie müssen das Paket qiskit_qasm3_import installieren, um diese Funktion nutzen zu können. Installieren Sie mit dem folgenden Befehl.

pip install qiskit-qasm3-import

Derzeit gibt es zwei High-Level-Funktionen für den Import von OpenQASM 3 in Qiskit. Diese Funktionen sind load(), die einen Dateinamen annimmt, und loads(), die das Programm selbst als Zeichenkette annimmt:

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

In diesem Beispiel definieren wir ein Quantenprogramm mit OpenQASM 3 und verwenden loads() , um es direkt in ein 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

Exportieren nach „ OpenQASM “ 3

Sie können Qiskit-Code nach OpenQASM 3 exportieren, und zwar mit dumps(), das in eine Zeichenkette exportiert, oder dump(), das in eine Datei exportiert.

Beispiel mit 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'

Beispiel mit 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()

Weitere Informationen finden Sie im Abschnitt Exportieren nach OpenQASM 3 in der API-Referenz.


Nächste Schritte

Empfehlungen
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.