# Single QUA script generated at 2025-09-03 16:51:02.305902\n",
"# QUA library version: 1.2.1\n",
"\n",
"from qm import CompilerOptionArguments\n",
"from qm.qua import *\n",
"\n",
"with program() as prog:\n",
" v1 = declare(int, value=0)\n",
" with infinite_loop_():\n",
" pause()\n",
" assign(v1, 0)\n",
" align()\n",
" play("ramp"*amp(0.1), "gate_1", duration=200)\n",
" wait(100, "gate_1")\n",
" play("ramp"*amp(-0.1), "gate_1", duration=200)\n",
" align()\n",
" assign(v1, (v1+1))\n",
" r0 = declare_stream()\n",
" save(v1, r0)\n",
" align()\n",
" with stream_processing():\n",
" r0.buffer(1).save("mock_driver_mock_measurement_shots")\n",
"\n",
"\n",
"config = None\n",
"\n",
"loaded_config = None\n",
" \n"
],
"text/latex": [
"\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n",
"\\PY{c+c1}{\\PYZsh{} Single QUA script generated at 2025\\PYZhy{}09\\PYZhy{}03 16:51:02.305902}\n",
"\\PY{c+c1}{\\PYZsh{} QUA library version: 1.2.1}\n",
"\n",
"\\PY{k+kn}{from}\\PY{+w}{ }\\PY{n+nn}{qm}\\PY{+w}{ }\\PY{k+kn}{import} \\PY{n}{CompilerOptionArguments}\n",
"\\PY{k+kn}{from}\\PY{+w}{ }\\PY{n+nn}{qm}\\PY{n+nn}{.}\\PY{n+nn}{qua}\\PY{+w}{ }\\PY{k+kn}{import} \\PY{o}{*}\n",
"\n",
"\\PY{k}{with} \\PY{n}{program}\\PY{p}{(}\\PY{p}{)} \\PY{k}{as} \\PY{n}{prog}\\PY{p}{:}\n",
" \\PY{n}{v1} \\PY{o}{=} \\PY{n}{declare}\\PY{p}{(}\\PY{n+nb}{int}\\PY{p}{,} \\PY{n}{value}\\PY{o}{=}\\PY{l+m+mi}{0}\\PY{p}{)}\n",
" \\PY{k}{with} \\PY{n}{infinite\\PYZus{}loop\\PYZus{}}\\PY{p}{(}\\PY{p}{)}\\PY{p}{:}\n",
" \\PY{n}{pause}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{n}{assign}\\PY{p}{(}\\PY{n}{v1}\\PY{p}{,} \\PY{l+m+mi}{0}\\PY{p}{)}\n",
" \\PY{n}{align}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{n}{play}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{ramp}\\PY{l+s+s2}{\\PYZdq{}}\\PY{o}{*}\\PY{n}{amp}\\PY{p}{(}\\PY{l+m+mf}{0.1}\\PY{p}{)}\\PY{p}{,} \\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{gate\\PYZus{}1}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{,} \\PY{n}{duration}\\PY{o}{=}\\PY{l+m+mi}{200}\\PY{p}{)}\n",
" \\PY{n}{wait}\\PY{p}{(}\\PY{l+m+mi}{100}\\PY{p}{,} \\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{gate\\PYZus{}1}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
" \\PY{n}{play}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{ramp}\\PY{l+s+s2}{\\PYZdq{}}\\PY{o}{*}\\PY{n}{amp}\\PY{p}{(}\\PY{o}{\\PYZhy{}}\\PY{l+m+mf}{0.1}\\PY{p}{)}\\PY{p}{,} \\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{gate\\PYZus{}1}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{,} \\PY{n}{duration}\\PY{o}{=}\\PY{l+m+mi}{200}\\PY{p}{)}\n",
" \\PY{n}{align}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{n}{assign}\\PY{p}{(}\\PY{n}{v1}\\PY{p}{,} \\PY{p}{(}\\PY{n}{v1}\\PY{o}{+}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{n}{r0} \\PY{o}{=} \\PY{n}{declare\\PYZus{}stream}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{n}{save}\\PY{p}{(}\\PY{n}{v1}\\PY{p}{,} \\PY{n}{r0}\\PY{p}{)}\n",
" \\PY{n}{align}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{k}{with} \\PY{n}{stream\\PYZus{}processing}\\PY{p}{(}\\PY{p}{)}\\PY{p}{:}\n",
" \\PY{n}{r0}\\PY{o}{.}\\PY{n}{buffer}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{save}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{mock\\PYZus{}driver\\PYZus{}mock\\PYZus{}measurement\\PYZus{}shots}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
"\n",
"\n",
"\\PY{n}{config} \\PY{o}{=} \\PY{k+kc}{None}\n",
"\n",
"\\PY{n}{loaded\\PYZus{}config} \\PY{o}{=} \\PY{k+kc}{None}\n",
"\\end{Verbatim}\n"
],
"text/plain": [
"\n",
"# Single QUA script generated at 2025-09-03 16:51:02.305902\n",
"# QUA library version: 1.2.1\n",
"\n",
"from qm import CompilerOptionArguments\n",
"from qm.qua import *\n",
"\n",
"with program() as prog:\n",
" v1 = declare(int, value=0)\n",
" with infinite_loop_():\n",
" pause()\n",
" assign(v1, 0)\n",
" align()\n",
" play(\"ramp\"*amp(0.1), \"gate_1\", duration=200)\n",
" wait(100, \"gate_1\")\n",
" play(\"ramp\"*amp(-0.1), \"gate_1\", duration=200)\n",
" align()\n",
" assign(v1, (v1+1))\n",
" r0 = declare_stream()\n",
" save(v1, r0)\n",
" align()\n",
" with stream_processing():\n",
" r0.buffer(1).save(\"mock_driver_mock_measurement_shots\")\n",
"\n",
"\n",
"config = None\n",
"\n",
"loaded_config = None\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"qua_program = mock_measurement.get_qua_program()\n",
"mock_driver.print_qua_program_to_file(\n",
" './qua_programs/single_square_program.py', qua_program)\n",
"\n",
"from qua_programs import single_square_program\n",
"\n",
"display(Code(inspect.getsource(single_square_program), language=\"python\"))"
]
},
{
"cell_type": "markdown",
"id": "7412983c-bb38-43a0-a388-34e155e7b060",
"metadata": {},
"source": [
"## 0.4 Summary"
]
},
{
"cell_type": "markdown",
"id": "8bf6fba8-e663-4800-82b4-ec4219a70cfe",
"metadata": {},
"source": [
"In this tutorial, we introduced the core concepts and workflow of the `arbok_driver` package. We demonstrated how to set up a mock device and driver using configuration files, and how to add a measurement to the driver. We explored the modular structure of measurements by adding a simple `SquarePulse` sub-sequence, and visualized the resulting instrument hierarchy. Finally, we generated a QUA program from the configured measurement, showing how the high-level abstractions in `arbok_driver` translate into executable code for quantum hardware. This foundation prepares us for more advanced topics in subsequent tutorials, such as scaling up measurements, data readout and processing as well as asynchronous operations like feedback or heraled operations."
]
},
{
"cell_type": "markdown",
"id": "5407e790-04e9-460c-97d6-5edde4b43da0",
"metadata": {},
"source": [
"Continue with tutorial 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cfe9f0bf-d0d2-4fb3-9040-274541819354",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.12.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}