Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save HuangJunye/02bdcd927de4aab0cfc214428fa1fdac to your computer and use it in GitHub Desktop.
Save HuangJunye/02bdcd927de4aab0cfc214428fa1fdac to your computer and use it in GitHub Desktop.
Save circuit as qasm string or file and reload later
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "b1335116-5c30-4e6f-8c8b-3693508d8596",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌────┐┌────────┐┌───────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(p) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└───────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ───────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ───────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ───────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ══════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ═════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ═══════════════════════════════════════════╩═\n",
" </pre>"
],
"text/plain": [
" ┌────┐┌────────┐┌───────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(p) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└───────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ───────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ───────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ───────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ══════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ═════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ═══════════════════════════════════════════╩═\n",
" "
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create a circuit\n",
"from qiskit import QuantumCircuit\n",
"from qiskit.circuit import Parameter\n",
"import numpy as np\n",
"\n",
"p = Parameter('p')\n",
"qc = QuantumCircuit(4)\n",
"qc.sx(0)\n",
"qc.rz(3*np.pi, 0)\n",
"qc.rz(p,0)\n",
"qc.x(0)\n",
"qc.measure_all()\n",
"qc.draw('text')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3080415b-f9ef-406b-a44f-db2d27642058",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n",
" Input \u001b[0;32mIn [2]\u001b[0m in \u001b[0;35m<cell line: 2>\u001b[0m\n",
" qc.qasm()\n",
"\u001b[1;36m File \u001b[1;32m/opt/conda/lib/python3.8/site-packages/qiskit/circuit/quantumcircuit.py:1673\u001b[1;36m in \u001b[1;35mqasm\u001b[1;36m\u001b[0m\n",
"\u001b[1;33m raise QasmError(\"Cannot represent circuits with unbound parameters in OpenQASM 2.\")\u001b[0m\n",
"\u001b[1;31mQasmError\u001b[0m\u001b[1;31m:\u001b[0m Cannot represent circuits with unbound parameters in OpenQASM 2.\n",
"\n",
"Use %tb to get the full traceback.\n"
]
},
{
"data": {
"text/html": [
"\n",
"<style>\n",
".button {\n",
" border: none;\n",
" color: white;\n",
" padding: 4px 8px;\n",
" text-align: center;\n",
" text-decoration: none;\n",
" display: inline-block;\n",
" font-size: 12px;\n",
" margin: 4px 2px;\n",
" transition-duration: 0.2s;\n",
" cursor: pointer;\n",
"}\n",
".iqx-button {\n",
" background-color: #0f62fe; \n",
" color: white; \n",
"}\n",
".iqx-button:hover {\n",
" background-color: #0043ce;\n",
" color: white;\n",
"}\n",
"</style>\n",
"<a href=\"https://stackoverflow.com/search?q=QasmError: Cannot represent circuits with unbound parameters in OpenQASM 2.\" target='_blank'><button class='button iqx-button'>Search for solution online</button></a>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# OpenQASM 2 does not support unbound parameters\n",
"qc.qasm()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5f375d01-bfbf-4578-94ca-09d992ff409f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" </pre>"
],
"text/plain": [
" ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# assign parameter values\n",
"qc.assign_parameters({p: 3.14}, inplace=True)\n",
"qc.draw('text')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1c0c057e-2c8f-44c8-b621-c199303b3891",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[4];\n",
"creg meas[4];\n",
"sx q[0];\n",
"rz(3*pi) q[0];\n",
"rz(3.14) q[0];\n",
"x q[0];\n",
"barrier q[0],q[1],q[2],q[3];\n",
"measure q[0] -> meas[0];\n",
"measure q[1] -> meas[1];\n",
"measure q[2] -> meas[2];\n",
"measure q[3] -> meas[3];\n",
"\n"
]
}
],
"source": [
"# export qasm string to a variable\n",
"qasm_string = qc.qasm()\n",
"print(qasm_string)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f7b3283e-c7cf-4027-b692-d1f5de854d69",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" </pre>"
],
"text/plain": [
" ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load a quantum circuit from qasm string\n",
"qc_from_string = QuantumCircuit.from_qasm_str(qasm_string)\n",
"qc_from_string.draw('text')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b458a058-a0d6-4dca-a37e-b42318ef2703",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# verify that the loaded circuit is the same as the original circuit\n",
"qc == qc_from_string"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0487d1fe-0b5b-4b5c-aafc-f60dd4e2ef0d",
"metadata": {},
"outputs": [],
"source": [
"# store qasm string into a file\n",
"with open('qasm_file', 'w') as output_file:\n",
" output_file.write(qasm_string)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3aff4122-52c5-4dea-86b8-94c900fbccea",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" </pre>"
],
"text/plain": [
" ┌────┐┌────────┐┌──────────┐┌───┐ ░ ┌─┐ \n",
" q_0: ┤ √X ├┤ Rz(3π) ├┤ Rz(3.14) ├┤ X ├─░─┤M├─────────\n",
" └────┘└────────┘└──────────┘└───┘ ░ └╥┘┌─┐ \n",
" q_1: ──────────────────────────────────░──╫─┤M├──────\n",
" ░ ║ └╥┘┌─┐ \n",
" q_2: ──────────────────────────────────░──╫──╫─┤M├───\n",
" ░ ║ ║ └╥┘┌─┐\n",
" q_3: ──────────────────────────────────░──╫──╫──╫─┤M├\n",
" ░ ║ ║ ║ └╥┘\n",
"meas_0: ═════════════════════════════════════╩══╬══╬══╬═\n",
" ║ ║ ║ \n",
"meas_1: ════════════════════════════════════════╩══╬══╬═\n",
" ║ ║ \n",
"meas_2: ═══════════════════════════════════════════╩══╬═\n",
" ║ \n",
"meas_3: ══════════════════════════════════════════════╩═\n",
" "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load a quantum circuit from qasm file\n",
"qc_from_file = QuantumCircuit.from_qasm_file('qasm_file')\n",
"qc_from_file.draw('text')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f4a09905-c95d-480e-a181-a1e8b9318148",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# verify that the loaded circuit is the same as the original circuit\n",
"qc == qc_from_file"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.13"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment